Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1254302

Re: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram

Path csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod
From Scott Wood <scottwood@freescale.com>
Newsgroups linux.kernel
Subject Re: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram
Date Fri, 23 Oct 2015 05:10:01 +0200
Message-ID <qmATT-5Be-5@gated-at.bofh.it> (permalink)
References <qmATT-5Be-7@gated-at.bofh.it> <qmATT-5Be-9@gated-at.bofh.it>
X-Original-To Zhao Qiang <qiang.zhao@freescale.com>
Authentication-Results spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com;
Content-Type text/plain; charset="UTF-8"
X-Mailer Evolution 3.16.0-fta1
MIME-Version 1.0
Content-Transfer-Encoding 7bit
X-Originating-IP [50.157.106.250]
X-Clientproxiedby CY1PR0801CA0027.namprd08.prod.outlook.com (25.163.136.165) To BY1PR03MB1484.namprd03.prod.outlook.com (25.162.210.142)
X-Microsoft-Exchange-Diagnostics 1;BY1PR03MB1484;2:XpBYoGDXAHdaOht7o9CLSafch1jRLqff9o/h/Xrr0vFNrclJ2XbMXHe73Wz9DxenFstVctXeNepZl10GsdQWfef1c7YuEZ8XXiewDL0fi24/dsOAiyw5Qyh26NkA+P3ZF2Mi9nQP9XJEwXobrBSMAq/drN8Oj/KXIUrImG03fmA=;3:z76mhBhuzIep9hu+TmS4Zwo0bjT8rguZA+YdAyHvCeGC7q6kzQkBW70Gu+elGOsiKfRk+IryWNsuVv/cTZgK3B6blWyrEjsUaQ7NkPeL3jDYrS/1ZdtPjnaw+ULPtcCXI2xH+q6MqIoNIFEwH6q9Dg==;25:9je4eDpVcAlE2//+5blBkqiRBlxRzScTbe25JffB2IbY4891yJk3G6zV/XYmcU9XdfuuesQqsiMoKsJ0rYGoOVNUxU1LQ/NAKBYOHsrZXxh2EfFZo/5XEwwDmyccxwc6jmn4ZSzPyPVt6ijGeb37Br3YRTFR09frPQ5zuBLZRY6fYOnZXpqebNvZendFBFPbMkcaJfxUgL9+3af783MJCTcDUbPgiyGgpi3Zc1gx0SRf7wlu9LmlW7aJygVdqTuw
X-Microsoft-Antispam UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1484;
X-Microsoft-Exchange-Diagnostics 1;BY1PR03MB1484;20:NtsQ6PsljrNfccaEz4pyCmbyuV8QFM2/WnLjggNTuARHljkdRTBy3mKAxK9nsoPUcqjQiKKbF6S/m707vfopV38Qg5AFGwaj2YLGWUz5ilG+IQvBw2W19OpBINemmw0oc1cDcor9mOg02/dG9CMJma3xBB9drlg0BoR7RtaDyPkPXlcprb2GzV2ViSXRl103eU73gZcC3k/bZ72t81f75N8Qt1FQZLyZ99iXmawQBO24F5nHtGQD60p7BzapR/K2hpGQqC5tlHTKUOw7yojBgKHRUp/Pbuyf5NpUGCyO6uZSLlNX7w/bjp8UIqNhN08hEuACQ48AbMC4yfCEYkb2XvYAR3bhgYfJUuRXkxFdnUoQHU92bgjNJP3pZOjICmZPNybV2Lgn1P9PyV+FHjuiNfdl3l0in6mqDwi+wpTO04lyD7V2YxS2hLPUH9kTSTrcYNCbzAJOpT3C8Wjwk1t0V88wJCuqFbCN9ANHE9VvYZRn4fpS9DVr0vd6Ej1vgcQF;4:RsM8zA9cCjOFHh6z/B3UeihpWhgeN7Y+X8ih8D/22wzaaBtPN+onCUyjqKqgBUIMI1S21wqai8Hnyod08QVaYzI8Rz6tXiZt50xz5B62lzAO0hI+byW1y4RqsphU5YRNA5qtAYmBMP0FSedjvXfxfNGwpPiYNLQuZ4zqUfr4iIUtdVmCy6pLKJB4T/PdNUzR8FIqNbr7OODn6K+U7kcjYkGRT98AEcJbcKDOp0A3hFF2MzfWSHCxyrwrPOuQTDiEvejmk1aMMxisrJ9YyLcjgay/o54SOYVih6+B0kY53JRf/QuNnvYY5bH2286AX9xJ2rljOsjDKd1ZAV/MeiBj3NBsBKATPk8UFcV2FtMRVMZRWeBYNJihB97w+lINyD1I
X-Microsoft-Antispam-Prvs <BY1PR03MB14841CDA5B2D39848495AA10B5260@BY1PR03MB1484.namprd03.prod.outlook.com>
X-Exchange-Antispam-Report-Test UriScan:(101931422205132);
X-Exchange-Antispam-Report-Cfa-Test BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001)(102215026);SRVR:BY1PR03MB1484;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1484;
X-Forefront-Prvs 0738AF4208
X-Forefront-Antispam-Report SFV:NSPM;SFS:(10019020)(6009001)(377424004)(57704003)(24454002)(199003)(189002)(189998001)(66066001)(101416001)(50986999)(86362001)(97736004)(76176999)(50226001)(47776003)(81156007)(19580405001)(5890100001)(5820100001)(50466002)(92566002)(19580395003)(36756003)(103116003)(42186005)(5001960100002)(77096005)(40100003)(5007970100001)(4001150100001)(4001450100002)(2950100001)(33646002)(110136002)(5004730100002)(105586002)(122386002)(106356001)(23676002)(87976001)(5008740100001)(99106002)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:BY1PR03MB1484;H:snotra.local;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en;
Received-Spf None (protection.outlook.com: freescale.com does not designate permitted sender hosts)
X-Microsoft-Exchange-Diagnostics 1;BY1PR03MB1484;23:N01iJf96iSTsoUdIL6/+xhv7zXVmTUzwqfKE1v3uL7SaqLMkKt3fUY10U/1rz3XADBg8lL+EwUKW1930N10/uVeaj+VboyyxNHYfnByKY1UYSGBhkfU3Dn9S8l3toHiDe0qqvfrhBwK6GMbLLTlIxLxUhFogoDF/1wq4ejMnU4xLxJA92pKIeRFNJxtFQOpLuuibPBh6MhZSDb0d8lfUUJGktDNR2dLNSp28BiTY+GDkB1MUfvibbwi6HmLC2LYvX9Al7fQOwJGPlvBj153Zk3UOhaBHXiAC57cIrkdEGaQCTqMLwDdk0oiS0tFqLocxRsDkUvl9gaLUEgrVrDWIlqaSyhz0c6a6BNRvgKJdOjBR0C3gFDie0eZPkmY4qrWhy2/AokS96H/bpdOQ66g/EBZ4riGF0H9OP4EH5rY5KYs3ytw/ul69VC6qL++XW7S7O9wO4vADrldlOnEUlNV5cOT6R0DAQMLQemWu9xEcYTV3VwVdhcjpIsE7MuPjDXBC3t1DHxEPKMV+HH3/WjnUwsFhsR5EYl1D4GEl3dHrjlutQ2Cui8r955lMllX1F4P2qfDk3Y08rkwVmywtwOwMu5Jso2Ln/rBQ0ZP0zOqmyeMWrHFGrp9v8hDQZlVVOVlX+Hp2sfW+2mYJAwT0FScLRGiazeh8LJb6XgrMcFPPXZLPEqsjq0yZRrllJ14Fp6Qj4PA7H1LiV18FVtvKlXKAi/FIgokEhT8s+7ovfJT06pKmkUWJ8Evwci4T8aDAo5hegKULptHqjFi3KWFdEIw15vFgAYp5MG45Dfhn6TYwJ3CtQBPG7pTxdnmZk09/rVQ6gFQy1o311liRowOUqRZKVIIkArbyLllAcn0K6yOucaXrFhJmSXi3HCpu/RelfUmGwVq3Q8XlSC11Z9/5DK8NUvQ2WGfToN2lK3dgF5WFd5f1ixXHWSd32UxAhaIMgwOwp/YB2TDDTZgPMJANSBcs8cu/LlbbBkdqqFAkFTq8AcdFAAFj39BJALOcpYC+Vehk85W/jI/iRAzbo2PbvjtTDRIz1CRijM2JELW2spRGFGHomlIc1TNKSnWSaULJc82+vmbS9Qaadsb8FJ6fUMKR3e/EzG4OFQmJLpL5H8H+4Pg03nNtfhFITdjDC9bWZ6dCmpidoyMUjKYF+ieowxhRHJsDJC6CiIbkHn2aC+zeCxY=
X-Microsoft-Exchange-Diagnostics 1;BY1PR03MB1484;5:o90c6wBxiqF/2us4xrYc9v20cVgtTba++VFoJX03LRQUFqyXMdKwnN7b3cDx9+Ca88P+dNmNCFaZGFiDabd8oaHq5j9+aVWYTuHug3RDGDnxmPtqFPWNriU+Kb3Tz95HtEPiPGBdyd84mR1XDczv5Q==;24:KkkOzlfTOCdwybxiatGg+W5kpC8mOew54rJrt5Yc3GrdPwRDRj//HqD2Clz4PoEjGrfoH2ociu6Zs27SDGjc76a0Yv7ioCGo3JYaCneRv3I=;20:0eEyvW+YDtWrTGPffY2NnAeeOixqO/20Sbxf3D3hpSA7eXOuV91bkIbmC0OjHS/ZaJqP3vh0HL90MBJMNFj9IQ==
X-Originatororg freescale.com
X-Ms-Exchange-Crosstenant-Originalarrivaltime 23 Oct 2015 02:59:47.8683 (UTC)
X-Ms-Exchange-Crosstenant-Fromentityheader Hosted
X-Ms-Exchange-Transport-Crosstenantheadersstamped BY1PR03MB1484
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 207
Organization linux.* mail to news gateway
X-Original-Cc <linux-kernel@vger.kernel.org>, <linuxppc-dev@lists.ozlabs.org>, <lauraa@codeaurora.org>, <X.xie@freescale.com>, <benh@kernel.crashing.org>, <leoli@freescale.com>, <paulus@samba.org>
X-Original-Date Thu, 22 Oct 2015 21:59:37 -0500
X-Original-Message-ID <1445569177.701.133.camel@freescale.com>
X-Original-References <1444806968-4627-1-git-send-email-qiang.zhao@freescale.com> <1444806968-4627-3-git-send-email-qiang.zhao@freescale.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1254302

Show key headers only | View raw


On Wed, 2015-10-14 at 15:16 +0800, Zhao Qiang wrote:
> Use genalloc to manage CPM/QE muram instead of rheap.
> 
> Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> ---
> Changes for v9:
>       - splitted from patch 3/5, modify cpm muram management functions.
> Changes for v10:
>       - modify cpm muram first, then move to qe_common
>       - modify commit.
> Changes for v11:
>       - factor out the common alloc code
>       - modify min_alloc_order to zero for cpm_muram_alloc_fixed.
> Changes for v12:
>       - Nil 
> 
>  arch/powerpc/include/asm/cpm.h   |   1 +
>  arch/powerpc/platforms/Kconfig   |   2 +-
>  arch/powerpc/sysdev/cpm_common.c | 129 +++++++++++++++++++++++++++---------
> ---
>  3 files changed, 93 insertions(+), 39 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/cpm.h b/arch/powerpc/include/asm/cpm.h
> index 4398a6c..0e1ac3f 100644
> --- a/arch/powerpc/include/asm/cpm.h
> +++ b/arch/powerpc/include/asm/cpm.h
> @@ -161,6 +161,7 @@ int cpm_muram_init(void);
>  unsigned long cpm_muram_alloc(unsigned long size, unsigned long align);
>  int cpm_muram_free(unsigned long offset);
>  unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long 
> size);
> +unsigned long cpm_muram_alloc_common(unsigned long size, void *data);
>  void __iomem *cpm_muram_addr(unsigned long offset);
>  unsigned long cpm_muram_offset(void __iomem *addr);
>  dma_addr_t cpm_muram_dma(void __iomem *addr);
> diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
> index b7f9c40..01626be7 100644
> --- a/arch/powerpc/platforms/Kconfig
> +++ b/arch/powerpc/platforms/Kconfig
> @@ -275,7 +275,7 @@ config TAU_AVERAGE
>  config QUICC_ENGINE
>       bool "Freescale QUICC Engine (QE) Support"
>       depends on FSL_SOC && PPC32
> -     select PPC_LIB_RHEAP
> +     select GENERIC_ALLOCATOR
>       select CRC32
>       help
>         The QUICC Engine (QE) is a new generation of communications
> diff --git a/arch/powerpc/sysdev/cpm_common.c 
> b/arch/powerpc/sysdev/cpm_common.c
> index 4f78695..ff47072 100644
> --- a/arch/powerpc/sysdev/cpm_common.c
> +++ b/arch/powerpc/sysdev/cpm_common.c
> @@ -17,6 +17,7 @@
>   * published by the Free Software Foundation.
>   */
>  
> +#include <linux/genalloc.h>
>  #include <linux/init.h>
>  #include <linux/of_device.h>
>  #include <linux/spinlock.h>
> @@ -27,7 +28,6 @@
>  
>  #include <asm/udbg.h>
>  #include <asm/io.h>
> -#include <asm/rheap.h>
>  #include <asm/cpm.h>
>  
>  #include <mm/mmu_decl.h>
> @@ -65,14 +65,22 @@ void __init udbg_init_cpm(void)
>  }
>  #endif
>  
> +static struct gen_pool *muram_pool;
>  static spinlock_t cpm_muram_lock;
> -static rh_block_t cpm_boot_muram_rh_block[16];
> -static rh_info_t cpm_muram_info;
>  static u8 __iomem *muram_vbase;
>  static phys_addr_t muram_pbase;
>  
> -/* Max address size we deal with */
> +struct muram_block {
> +     struct list_head head;
> +     unsigned long start;
> +     int size;
> +};
> +
> +static LIST_HEAD(muram_block_list);
> +
> +/* max address size we deal with */
>  #define OF_MAX_ADDR_CELLS    4
> +#define GENPOOL_OFFSET               (4096 * 8)
>  
>  int cpm_muram_init(void)
>  {
> @@ -87,50 +95,52 @@ int cpm_muram_init(void)
>               return 0;
>  
>       spin_lock_init(&cpm_muram_lock);
> -     /* initialize the info header */
> -     rh_init(&cpm_muram_info, 1,
> -             sizeof(cpm_boot_muram_rh_block) /
> -             sizeof(cpm_boot_muram_rh_block[0]),
> -             cpm_boot_muram_rh_block);
> -
>       np = of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
>       if (!np) {
>               /* try legacy bindings */
>               np = of_find_node_by_name(NULL, "data-only");
>               if (!np) {
> -                     printk(KERN_ERR "Cannot find CPM muram data node");
> +                     pr_err("Cannot find CPM muram data node");
>                       ret = -ENODEV;
> -                     goto out;
> +                     goto out_muram;
>               }
>       }
>  
> +     muram_pool = gen_pool_create(0, -1);
>       muram_pbase = of_translate_address(np, zero);
>       if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
> -             printk(KERN_ERR "Cannot translate zero through CPM muram node");
> +             pr_err("Cannot translate zero through CPM muram node");
>               ret = -ENODEV;
> -             goto out;
> +             goto out_pool;
>       }
>  
>       while (of_address_to_resource(np, i++, &r) == 0) {
>               if (r.end > max)
>                       max = r.end;
> +             ret = gen_pool_add(muram_pool, r.start - muram_pbase +
> +                                GENPOOL_OFFSET, resource_size(&r), -1);
> +             if (ret) {
> +                             pr_err("QE: couldn't add muram to pool!\n");
> +                             goto out_pool;
> +                     }
>  

Whitespace

> -             rh_attach_region(&cpm_muram_info, r.start - muram_pbase,
> -                              resource_size(&r));
>       }
>  
>       muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
>       if (!muram_vbase) {
> -             printk(KERN_ERR "Cannot map CPM muram");
> +             pr_err("Cannot map QE muram");
>               ret = -ENOMEM;
> +             goto out_pool;
>       }
> -
> -out:
> +     goto out_muram;
> +out_pool:
> +     gen_pool_destroy(muram_pool);
> +out_muram:
>       of_node_put(np);
>       return ret;
>  }
>  
> -/**
> +/*
>   * cpm_muram_alloc - allocate the requested size worth of multi-user ram
>   * @size: number of bytes to allocate
>   * @align: requested alignment, in bytes
> @@ -141,59 +151,102 @@ out:
>   */
>  unsigned long cpm_muram_alloc(unsigned long size, unsigned long align)
>  {
> -     unsigned long start;
>       unsigned long flags;
> -
> +     unsigned long start;
> +     static struct genpool_data_align muram_pool_data;
>       spin_lock_irqsave(&cpm_muram_lock, flags);
> -     cpm_muram_info.alignment = align;
> -     start = rh_alloc(&cpm_muram_info, size, "commproc");
> -     memset(cpm_muram_addr(start), 0, size);
> +     muram_pool_data.align = align;
> +     gen_pool_set_algo(muram_pool, gen_pool_first_fit_align,
> +                       &muram_pool_data);
> +     start = cpm_muram_alloc_common(size, &muram_pool_data);
>       spin_unlock_irqrestore(&cpm_muram_lock, flags);
> -
>       return start;
>  }
>  EXPORT_SYMBOL(cpm_muram_alloc);

Why is muram_pool_data static?  Why is it being passed to 
gen_pool_set_algo()?  The whole reason we're adding gen_pool_alloc_data() is 
to avoid that.  Do we need gen_pool_alloc_algo() too?

Also, please maintain a blank line between variable declarations and code.

> +     return (unsigned long) -ENOMEM;

No space after casts.

-Scott

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram Scott Wood <scottwood@freescale.com> - 2015-10-23 05:10 +0200
  RE: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram Zhao Qiang <qiang.zhao@freescale.com> - 2015-10-26 04:40 +0100

csiph-web