From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422849Ab2JDPYz (ORCPT ); Thu, 4 Oct 2012 11:24:55 -0400 Received: from mail-ie0-f174.google.com ([209.85.223.174]:64190 "EHLO mail-ie0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422663Ab2JDPYk (ORCPT ); Thu, 4 Oct 2012 11:24:40 -0400 Date: Thu, 4 Oct 2012 11:25:09 -0400 From: Matt Porter To: Philipp Zabel Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Grant Likely , Rob Herring , Paul Gortmaker , Shawn Guo , Richard Zhao , Huang Shijie , Dong Aisheng , kernel@pengutronix.de, devicetree-discuss@lists.ozlabs.org Subject: Re: [PATCH v4 2/6] misc: Generic on-chip SRAM allocation driver Message-ID: <20121004152509.GJ11149@beef> References: <1347021828-23034-1-git-send-email-p.zabel@pengutronix.de> <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 07, 2012 at 02:43:44PM +0200, Philipp Zabel wrote: > This driver requests and remaps a memory region as configured in the > device tree. It serves memory from this region via the genalloc API. > > Other drivers can retrieve the genalloc pool from a phandle pointing > to this drivers' device node in the device tree. > + sram->pool = gen_pool_create(PAGE_SHIFT, -1); > + if (!sram->pool) > + return -ENOMEM; As mentioned in the uio_pruss/genalloc discussion, removing the hardcoded minimum allocation order will allow this to be used for a number of other cases. The most notable is moving mach-davinci/ off of its own genalloc-based SRAM arch driver. Some of the davinci SoCs have very small SRAMs and need the ability to allocate a smaller chunk. Here's a build-tested patch to add this option: >>From 6eced8c31eba2f86e72e854cf404d8f58fbeba85 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Thu, 4 Oct 2012 11:08:02 -0400 Subject: [PATCH] misc: sram: add support for configurable allocation order Adds support for setting the genalloc pool's minimum allocation order via DT or platform data. The allocation order is optional for both the DT property and platform data case. If it is not present then the order defaults to PAGE_SHIFT to preserve the current behavior. Signed-off-by: Matt Porter --- Documentation/devicetree/bindings/misc/sram.txt | 12 ++++++++++- drivers/misc/sram.c | 14 ++++++++++++- include/linux/platform_data/sram.h | 25 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 include/linux/platform_data/sram.h diff --git a/Documentation/devicetree/bindings/misc/sram.txt b/Documentation/devicetree/bindings/misc/sram.txt index b64136c..b1705ec 100644 --- a/Documentation/devicetree/bindings/misc/sram.txt +++ b/Documentation/devicetree/bindings/misc/sram.txt @@ -8,10 +8,20 @@ Required properties: - reg : SRAM iomem address range -Example: +Optional properties: + +- alloc-order : Minimum allocation order for the SRAM pool + +Examples: + +sram: sram@5c000000 { + compatible = "sram"; + reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ +}; sram: sram@5c000000 { compatible = "sram"; reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ + alloc-order = <9>; /* Minimum 512 byte allocation */ }; diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c index 7a363f2..3bf8ed3 100644 --- a/drivers/misc/sram.c +++ b/drivers/misc/sram.c @@ -26,6 +26,7 @@ #include #include #include +#include struct sram_dev { struct gen_pool *pool; @@ -37,6 +38,7 @@ static int __devinit sram_probe(struct platform_device *pdev) struct sram_dev *sram; struct resource *res; unsigned long size; + u32 alloc_order = PAGE_SHIFT; int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -53,7 +55,17 @@ static int __devinit sram_probe(struct platform_device *pdev) if (!sram) return -ENOMEM; - sram->pool = gen_pool_create(PAGE_SHIFT, -1); + if (pdev->dev.of_node) + of_property_read_u32(pdev->dev.of_node, + "alloc-order", &alloc_order); + else + if (pdev->dev.platform_data) { + struct sram_pdata *pdata = pdev->dev.platform_data; + if (pdata->alloc_order) + alloc_order = pdata->alloc_order; + } + + sram->pool = gen_pool_create(alloc_order, -1); if (!sram->pool) return -ENOMEM; diff --git a/include/linux/platform_data/sram.h b/include/linux/platform_data/sram.h new file mode 100644 index 0000000..e17bdaa --- /dev/null +++ b/include/linux/platform_data/sram.h @@ -0,0 +1,25 @@ +/* + * include/linux/platform_data/sram.h + * + * Platform data for generic sram driver + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _SRAM_H_ +#define _SRAM_H_ + +struct sram_pdata { + unsigned alloc_order; /* Optional: driver defaults to PAGE_SHIFT */ +}; + +#endif /* _SRAM_H_ */ -- 1.7.9.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: mporter@ti.com (Matt Porter) Date: Thu, 4 Oct 2012 11:25:09 -0400 Subject: [PATCH v4 2/6] misc: Generic on-chip SRAM allocation driver In-Reply-To: <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> References: <1347021828-23034-1-git-send-email-p.zabel@pengutronix.de> <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> Message-ID: <20121004152509.GJ11149@beef> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, Sep 07, 2012 at 02:43:44PM +0200, Philipp Zabel wrote: > This driver requests and remaps a memory region as configured in the > device tree. It serves memory from this region via the genalloc API. > > Other drivers can retrieve the genalloc pool from a phandle pointing > to this drivers' device node in the device tree. > + sram->pool = gen_pool_create(PAGE_SHIFT, -1); > + if (!sram->pool) > + return -ENOMEM; As mentioned in the uio_pruss/genalloc discussion, removing the hardcoded minimum allocation order will allow this to be used for a number of other cases. The most notable is moving mach-davinci/ off of its own genalloc-based SRAM arch driver. Some of the davinci SoCs have very small SRAMs and need the ability to allocate a smaller chunk. Here's a build-tested patch to add this option: >>From 6eced8c31eba2f86e72e854cf404d8f58fbeba85 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Thu, 4 Oct 2012 11:08:02 -0400 Subject: [PATCH] misc: sram: add support for configurable allocation order Adds support for setting the genalloc pool's minimum allocation order via DT or platform data. The allocation order is optional for both the DT property and platform data case. If it is not present then the order defaults to PAGE_SHIFT to preserve the current behavior. Signed-off-by: Matt Porter --- Documentation/devicetree/bindings/misc/sram.txt | 12 ++++++++++- drivers/misc/sram.c | 14 ++++++++++++- include/linux/platform_data/sram.h | 25 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 include/linux/platform_data/sram.h diff --git a/Documentation/devicetree/bindings/misc/sram.txt b/Documentation/devicetree/bindings/misc/sram.txt index b64136c..b1705ec 100644 --- a/Documentation/devicetree/bindings/misc/sram.txt +++ b/Documentation/devicetree/bindings/misc/sram.txt @@ -8,10 +8,20 @@ Required properties: - reg : SRAM iomem address range -Example: +Optional properties: + +- alloc-order : Minimum allocation order for the SRAM pool + +Examples: + +sram: sram at 5c000000 { + compatible = "sram"; + reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ +}; sram: sram at 5c000000 { compatible = "sram"; reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ + alloc-order = <9>; /* Minimum 512 byte allocation */ }; diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c index 7a363f2..3bf8ed3 100644 --- a/drivers/misc/sram.c +++ b/drivers/misc/sram.c @@ -26,6 +26,7 @@ #include #include #include +#include struct sram_dev { struct gen_pool *pool; @@ -37,6 +38,7 @@ static int __devinit sram_probe(struct platform_device *pdev) struct sram_dev *sram; struct resource *res; unsigned long size; + u32 alloc_order = PAGE_SHIFT; int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -53,7 +55,17 @@ static int __devinit sram_probe(struct platform_device *pdev) if (!sram) return -ENOMEM; - sram->pool = gen_pool_create(PAGE_SHIFT, -1); + if (pdev->dev.of_node) + of_property_read_u32(pdev->dev.of_node, + "alloc-order", &alloc_order); + else + if (pdev->dev.platform_data) { + struct sram_pdata *pdata = pdev->dev.platform_data; + if (pdata->alloc_order) + alloc_order = pdata->alloc_order; + } + + sram->pool = gen_pool_create(alloc_order, -1); if (!sram->pool) return -ENOMEM; diff --git a/include/linux/platform_data/sram.h b/include/linux/platform_data/sram.h new file mode 100644 index 0000000..e17bdaa --- /dev/null +++ b/include/linux/platform_data/sram.h @@ -0,0 +1,25 @@ +/* + * include/linux/platform_data/sram.h + * + * Platform data for generic sram driver + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _SRAM_H_ +#define _SRAM_H_ + +struct sram_pdata { + unsigned alloc_order; /* Optional: driver defaults to PAGE_SHIFT */ +}; + +#endif /* _SRAM_H_ */ -- 1.7.9.5