[PATCH v5 4/4] misc: sram: add support for configurable allocation order

From: Philipp Zabel
Date: Thu Oct 18 2012 - 10:29:09 EST


From: Matt Porter <mporter@xxxxxx>

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 <mporter@xxxxxx>
Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
---
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 0cc2e75..3a04b77 100644
--- a/drivers/misc/sram.c
+++ b/drivers/misc/sram.c
@@ -28,6 +28,7 @@
#include <linux/platform_device.h>
#include <linux/spinlock.h>
#include <linux/genalloc.h>
+#include <linux/platform_data/sram.h>

struct sram_dev {
struct gen_pool *pool;
@@ -40,6 +41,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);
@@ -60,7 +62,17 @@ static int __devinit sram_probe(struct platform_device *pdev)
if (!IS_ERR(sram->clk))
clk_prepare_enable(sram->clk);

- 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.10.4

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