Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1254302 > unrolled thread
| Started by | Scott Wood <scottwood@freescale.com> |
|---|---|
| First post | 2015-10-23 05:10 +0200 |
| Last post | 2015-10-26 04:40 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
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
| From | Scott Wood <scottwood@freescale.com> |
|---|---|
| Date | 2015-10-23 05:10 +0200 |
| Subject | Re: [PATCH v12 3/6] CPM/QE: use genalloc to manage CPM/QE muram |
| Message-ID | <qmATT-5Be-5@gated-at.bofh.it> |
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/
[toc] | [next] | [standalone]
| From | Zhao Qiang <qiang.zhao@freescale.com> |
|---|---|
| Date | 2015-10-26 04:40 +0100 |
| Message-ID | <qnGNz-37Z-1@gated-at.bofh.it> |
| In reply to | #1254302 |
T24gU2F0LCAyMDE1LTEwLTI0IGF0IDA0OjU5IEFNLCBXb29kIFNjb3R0LUIwNzQyMSA8c2NvdHR3 b29kQGZyZWVzY2FsZS5jb20+IHdyb3RlOg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiBTZW50OiBTYXR1cmRheSwgT2N0b2JlciAyNCwg MjAxNSA0OjU5IEFNDQo+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NSA8cWlhbmcuemhhb0BmcmVlc2Nh bGUuY29tPg0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXhwcGMtZGV2 QGxpc3RzLm96bGFicy5vcmc7DQo+IGxhdXJhYUBjb2RlYXVyb3JhLm9yZzsgWGllIFhpYW9iby1S NjMwNjEgPFguWGllQGZyZWVzY2FsZS5jb20+Ow0KPiBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7 IExpIFlhbmctTGVvLVI1ODQ3MiA8TGVvTGlAZnJlZXNjYWxlLmNvbT47DQo+IHBhdWx1c0BzYW1i YS5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MTIgMy82XSBDUE0vUUU6IHVzZSBnZW5hbGxv YyB0byBtYW5hZ2UgQ1BNL1FFIG11cmFtDQo+IA0KPiBEb24ndCBzZW5kIEhUTUwgZS1tYWlsLg0K PiANCj4gT24gRnJpLCAyMDE1LTEwLTIzIGF0IDAyOjA2IC0wNTAwLCBaaGFvIFFpYW5nLUI0NTQ3 NSB3cm90ZToNCj4gPiBPbiBGcmksIDIwMTUtMTAtMjMgYXQgMTE6MDAgQU0sIFdvb2QgU2NvdHQt QjA3NDIxDQo+ID4gPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPg0KPiA+IHdyb3RlOg0KPiA+ID4g LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFdvb2QgU2NvdHQtQjA3NDIx DQo+ID4gPiBTZW50OiBGcmlkYXksIE9jdG9iZXIgMjMsIDIwMTUgMTE6MDAgQU0NCj4gPiA+IFRv OiBaaGFvIFFpYW5nLUI0NTQ3NSA8cWlhbmcuemhhb0BmcmVlc2NhbGUuY29tPg0KPiA+ID4gQ2M6 IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMu b3JnOw0KPiA+ID4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBYaWUgWGlhb2JvLVI2MzA2MSA8WC5Y aWVAZnJlZXNjYWxlLmNvbT47DQo+ID4gPiBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpIFlh bmctTGVvLVI1ODQ3MiA8TGVvTGlAZnJlZXNjYWxlLmNvbT47DQo+ID4gPiBwYXVsdXNAc2FtYmEu b3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMiAzLzZdIENQTS9RRTogdXNlIGdlbmFs bG9jIHRvIG1hbmFnZSBDUE0vUUUNCj4gPiA+IG11cmFtDQo+ID4gPg0KPiA+ID4gT24gV2VkLCAy MDE1LTEwLTE0IGF0IDE1OjE2ICswODAwLCBaaGFvIFFpYW5nIHdyb3RlOg0KPiA+ID4gPiAtLyoq DQo+ID4gPiA+ICsvKg0KPiA+ID4gPiAgICogY3BtX211cmFtX2FsbG9jIC0gYWxsb2NhdGUgdGhl IHJlcXVlc3RlZCBzaXplIHdvcnRoIG9mDQo+ID4gPiA+IG11bHRpLXVzZXINCj4gPiByYW0NCj4g PiA+ID4gICAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUNCj4gPiA+ID4gICAq IEBhbGlnbjogcmVxdWVzdGVkIGFsaWdubWVudCwgaW4gYnl0ZXMgQEAgLTE0MSw1OSArMTUxLDEw MiBAQCBvdXQ6DQo+ID4gPiA+ICAgKi8NCj4gPiA+ID4gIHVuc2lnbmVkIGxvbmcgY3BtX211cmFt X2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZw0KPiA+ID4gPiBhbGlnbikg IHsNCj4gPiA+ID4gLSAgICAgdW5zaWduZWQgbG9uZyBzdGFydDsNCj4gPiA+ID4gICAgICAgdW5z aWduZWQgbG9uZyBmbGFnczsNCj4gPiA+ID4gLQ0KPiA+ID4gPiArICAgICB1bnNpZ25lZCBsb25n IHN0YXJ0Ow0KPiA+ID4gPiArICAgICBzdGF0aWMgc3RydWN0IGdlbnBvb2xfZGF0YV9hbGlnbiBt dXJhbV9wb29sX2RhdGE7DQo+ID4gPiA+ICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjcG1fbXVy YW1fbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiAtICAgICBjcG1fbXVyYW1faW5mby5hbGlnbm1lbnQg PSBhbGlnbjsNCj4gPiA+ID4gLSAgICAgc3RhcnQgPSByaF9hbGxvYygmY3BtX211cmFtX2luZm8s IHNpemUsICJjb21tcHJvYyIpOw0KPiA+ID4gPiAtICAgICBtZW1zZXQoY3BtX211cmFtX2FkZHIo c3RhcnQpLCAwLCBzaXplKTsNCj4gPiA+ID4gKyAgICAgbXVyYW1fcG9vbF9kYXRhLmFsaWduID0g YWxpZ247DQo+ID4gPiA+ICsgICAgIGdlbl9wb29sX3NldF9hbGdvKG11cmFtX3Bvb2wsIGdlbl9w b29sX2ZpcnN0X2ZpdF9hbGlnbiwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJm11 cmFtX3Bvb2xfZGF0YSk7DQo+ID4gPiA+ICsgICAgIHN0YXJ0ID0gY3BtX211cmFtX2FsbG9jX2Nv bW1vbihzaXplLCAmbXVyYW1fcG9vbF9kYXRhKTsNCj4gPiA+ID4gICAgICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmY3BtX211cmFtX2xvY2ssIGZsYWdzKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAg ICAgICByZXR1cm4gc3RhcnQ7DQo+ID4gPiA+ICB9DQo+ID4gPiA+ICBFWFBPUlRfU1lNQk9MKGNw bV9tdXJhbV9hbGxvYyk7DQo+ID4gPg0KPiA+ID4gV2h5IGlzIG11cmFtX3Bvb2xfZGF0YSBzdGF0 aWM/ICBXaHkgaXMgaXQgYmVpbmcgcGFzc2VkIHRvDQo+ID4gPiBnZW5fcG9vbF9zZXRfYWxnbygp Pw0KPiA+IENwbV9tdXJhbSB1c2UgYm90aCBhbGlnbiBhbGdvIGFuZCBmaXhlZCBhbGdvLCBzbyB3 ZSBuZWVkIHRvIHNldA0KPiA+IGNvcnJlc3BvbmRpbmcgYWxnbyBhbmQgQWxnbyBkYXRhLg0KPiAN Cj4gVGhlIGRhdGEgZ2V0cyBwYXNzZWQgaW4gdmlhIGdlbl9wb29sX2FsbG9jX2RhdGEoKS4gIFRo ZSBwb2ludCB3YXMgdG8gYWxsb3cgaXQgdG8NCj4gYmUgb24gdGhlIGNhbGxlcidzIHN0YWNrLCBu b3QgYSBsb25nLWxpdmVkIGRhdGEgc3RydWN0dXJlIHNoYXJlZCBieSBhbGwgY2FsbGVycyBhbmQN Cj4gbmVlZGluZyBzeW5jaHJvbml6YXRpb24uDQoNCllvdSBtZWFuIGl0IGlzIG5vdCBuZWNlc3Nh cnkgdG8gcG9pbnQgcG9vbC0+ZGF0YSB0byBkYXRhLCBqdXN0IHBhc3NpbmcgdGhlIGRhdGEgdG8g Z2VuX3Bvb2xfYWxsb2NfZGF0YSgpPw0KSG93ZXZlciwgdGhlIGFsZ28gaXQgbmVlZGVkIHRvIGJl IHNldC4NCg0KPiANCj4gPiA+VGhlIHdob2xlIHJlYXNvbiB3ZSdyZSBhZGRpbmcgZ2VuX3Bvb2xf YWxsb2NfZGF0YSgpICBpcyB0byBhdm9pZA0KPiA+ID50aGF0LiAgRG8gd2UgbmVlZCBnZW5fcG9v bF9hbGxvY19hbGdvKCkgdG9vPw0KPiA+DQo+ID4gV2UgYWRkIGdlbl9wb29sX2FsbG9jX2RhdGEo KSB0byBwYXNzIGRhdGEgdG8gYWxnbywgYmVjYXVzZSBhbGlnbiBhbGdvDQo+ID4gYW5kIGZpeGVk IGFsZ28sIEJlY2F1c2UgYWxpZ24gYW5kIGZpeGVkIGFsZ29zIG5lZWQgc3BlY2lmaWMgZGF0YS4N Cj4gDQo+IEFuZCBteSBwb2ludCBpcyB0aGF0IGJlY2F1c2Ugb2YgdGhhdCwgaXQgc2VlbXMgbGlr ZSB3ZSBuZWVkIGEgdmVyc2lvbiB0aGF0DQo+IGFjY2VwdHMgYW4gYWxnb3JpdGhtIGFzIHdlbGwu DQoNCkl0IHRoZSB1c2VyIGp1c3QgdXNlIG9ubHkgb25lIGFsZ28sIGl0IGRvZXNu4oCZdCBuZWVk IHRvIHNldCBhbGdvLCANCkhvd2V2ZXIsIHFlX211cmFtIHVzZSB0d28gYWxnb3Mgd2l0aCBhbGxv Y19hbGlnbiBmdW5jdGlvbg0KQW5kIGFsbG9jX2ZpeGVkIGZ1bmN0aW9uLg0KDQotWmhhbw0KDQo= -- 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/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web