From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751715AbbJWC7x (ORCPT ); Thu, 22 Oct 2015 22:59:53 -0400 Received: from mail-bn1on0114.outbound.protection.outlook.com ([157.56.110.114]:3868 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750905AbbJWC7w (ORCPT ); Thu, 22 Oct 2015 22:59:52 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Message-ID: <1445569177.701.133.camel@freescale.com> Subject: Re: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram From: Scott Wood To: Zhao Qiang CC: , , , , , , Date: Thu, 22 Oct 2015 21:59:37 -0500 In-Reply-To: <1444806968-4627-3-git-send-email-qiang.zhao@freescale.com> References: <1444806968-4627-1-git-send-email-qiang.zhao@freescale.com> <1444806968-4627-3-git-send-email-qiang.zhao@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: 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; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTFQUjAzTUIxNDg0OzIzOk4wMWlKZjk2aVNUc29VZElMNi8reGh2N3pY?= =?utf-8?B?Vm1UVXp3cWZLRTF2M3VMN1NhcUxNa0t0M2ZVWTEwVS8xcnozWEFEQmc4bEwr?= =?utf-8?B?RXdVS1cxOTMwTjEwL3VWZWFqK1Zib3l5eE5IWWZuQnlLWTFVWVNHQmhrZlUz?= =?utf-8?B?RG45UzhsM3RvSGlEZTBxcXZmcmhCd0s2R01iTExUbEl4THhVaEZvZ29ERi8x?= =?utf-8?B?d3E0ZWpNblU0eEx4SkE5MnBLSWVSRk5KeHRGUU9wTHV1aWJQQmg2TWhaU0Ri?= =?utf-8?B?MGQ4bGZVVUpHa3RETlIyZExOU3AyOEJpVFkrR0RrQjFNVWZ2aWJid2k2SG1M?= =?utf-8?B?QzJMWXZYOUFsN2ZRT3dKR1BsdkJqMTUzWmszVU9oYUJIWGlBQzU3Y0lya2RF?= =?utf-8?B?R2FRQ1RxTUx3RGRrMG9pUzB0RnFMb2N4UnNEa1V2bDlnYUxVRWdyVnJEV0ls?= =?utf-8?B?cWFTeWh6MGM2YTZCTlJ2Z0tKZE9qQlIwQzNnRkRpZTBlWlBrbVk0cXJXaHky?= =?utf-8?B?L0Fva1M5NkgvYnBkT1E2NmcvRUJaNHJpR0YwSDlPUDRFSDVyWTVLWXMzeXR3?= =?utf-8?B?L3VsNjlWQzZxTCsrWFc3UzdPOXdPNHZBRHJsZGxPbkVVbE5WNWNPVDZSMERB?= =?utf-8?B?UU1MUWVtV3U5eEVjWVRWM1Z3VmRoY2pwSXNFN011UGpEWEJDM3QxREh4RVBL?= =?utf-8?B?TVYrSEgzL1dqblV3c0Zoc1I1RVlsMUQ0R0VsM2RIcmpsdXRRMkN1aThyOTU1?= =?utf-8?B?bE1sbFgxRjRQMnFmRGszWTA4cmt3Vm15d3R3T3dNdTVKc28yTG4vckJRMFpQ?= =?utf-8?B?MHpPcW15ZU1XckhGR3JwOXY4aERRWmxWVk9WbFgrSHAyc2ZXKzJtWUpBd1Qw?= =?utf-8?B?RlNjTFJHaWF6ZWg4TEpiNlhnck1jRlBQWFpMUEVxc2pxMHlaUnJsbEoxNEZw?= =?utf-8?B?NlFqNFBBN0gxTGlWMThGVnR2S2xYS0FpL0ZJZ29rRWhUOHMrN292ZkpUMDZw?= =?utf-8?B?S21rVVdKOEV2d2NpNFQ4YURBbzVoZWdLVUxwdEhxakZpM0tXRmRFSXcxNXZG?= =?utf-8?B?Z0FZcDVNRzQ1RGZobjZUWXdKM0N0UUJQRzdwVHhkbm1aazA5L3JWUTZnRlF5?= =?utf-8?B?MW8zMTFsaVJvd09VcVJaS1ZJSWtBcmJ5TGxsQWNuMEs2eU91Y2FYckZoSm1T?= =?utf-8?B?WGkzSENwdS9SZWxmVW1Hd1ZxM1E4WGxTQzExWjkvNURLOE5VdlEyV0dmVG9O?= =?utf-8?B?MmxLM2RnRjVXRmQ1ZjFpeFhIV1NkMzJVeEFoYUlNZ3dPd3AvWUIyVEREVFpn?= =?utf-8?B?UE1KQU5TQmNzOGN1L0xsYmJCa2RxcUZBa0ZUcThBY2RGQUFGajM5QkpBTE9j?= =?utf-8?B?cFlDK1ZlaGs4NVcvakkvaVJBemJvMlBidmp0VERSSXoxQ1Jpak0ySkVMVzJz?= =?utf-8?B?cFJHRkdIb21sSWMxVE5LU25XU2FVTEpjODIrdm1iUzlRYWFkc2I4Rko2ZlVN?= =?utf-8?B?S1IzZS9Fekc0T0ZRbUpMcEw1SDhIKzRQZzAzbk50ZmhGSVRkakRDOWJXWjZk?= =?utf-8?Q?CmpidoyMUjKYF+ieowxhRHJsDJC6CiIbkHn2aC+zeCxY=3D?= 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: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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 > #include > #include > #include > @@ -27,7 +28,6 @@ > > #include > #include > -#include > #include > > #include > @@ -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