Skip to contentSkip to conversation

ARM: imx: add dt support of IRAM

PATCH New Jason Chen 4 participants 5 messages Dec 27, 2011 – Dec 28, 2011

Subsystems (3)
lore
Share & tools
lore

Jason Chen

author
#0 lore raw

PATCH 1/2 ARM: imx: add dt support of IRAM

---
 arch/arm/plat-mxc/include/mach/iram.h |    6 ++++++
 arch/arm/plat-mxc/iram_alloc.c        |   16 ++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)
arch/arm/plat-mxc/include/mach/iram.h +6 -0
index 022690c..f8372cf 100644
@@ -21,6 +21,7 @@
 #ifdef CONFIG_IRAM_ALLOC
 
 int __init iram_init(unsigned long base, unsigned long size);
+int __init of_iram_init(void);
 void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr);
 void iram_free(unsigned long dma_addr, unsigned int size);
 
@@ -31,6 +32,11 @@ static inline int __init iram_init(unsigned long base, unsigned long size)
 	return -ENOMEM;
 }
 
+static inline int __init of_iram_init(void)
+{
+	return -EINVAL;
+}
+
 static inline void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr)
 {
 	return NULL;
arch/arm/plat-mxc/iram_alloc.c +16 -0
index 074c386..f73ca9d 100644
@@ -22,6 +22,8 @@
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/genalloc.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 #include <mach/iram.h>
 
 static unsigned long iram_phys_base;
@@ -71,3 +73,17 @@ int __init iram_init(unsigned long base, unsigned long size)
 	pr_debug("i.MX IRAM pool: %ld KB at 0x%p\n", size / 1024, iram_virt_base);
 	return 0;
 }
+
+int __init of_iram_init(void)
+{
+	struct device_node *np;
+	struct resource res;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,imx-iram");
+	if (of_address_to_resource(np, 0, &res))
+		return -EINVAL;
+	if (res.start && (res.end > res.start))
+		return iram_init(res.start, res.end - res.start + 1);
+	else
+		return -EINVAL;
+}
Signature · 1 line
1.7.4.1
#1 lore raw

PATCH 1/2 ARM: imx: add dt support of IRAM

Quoted 12 lines · Jason Chen
---
 arch/arm/plat-mxc/include/mach/iram.h |    6 ++++++
 arch/arm/plat-mxc/iram_alloc.c        |   16 ++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)
arch/arm/plat-mxc/include/mach/iram.h +0 -0
index 022690c..f8372cf 100644

arch/arm/plat-mxc/include/mach/iram.h line 24

Quoted 4 lines
arch/arm/plat-mxc/include/mach/iram.h +1 -0
@@ -21,6 +21,7 @@
 #ifdef CONFIG_IRAM_ALLOC
 
 int __init iram_init(unsigned long base, unsigned long size);
+int __init of_iram_init(void);

It may be inherited from iram_init declaration on the above line. But it's really unnecessary to have '__init' for function declaration.

And I suggested the function name iram_of_init than of_iram_init for some reason. Looking at include/linux/of.h, you will find that all DT core functions use naming convention of_xxx. To differentiate from DT core functions, we want to use iram_of_init just like what gic driver does (gic_of_init in arch/arm/common/gic.c).

Quoted 32 lines
arch/arm/plat-mxc/include/mach/iram.h +5 -0
 void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr);
 void iram_free(unsigned long dma_addr, unsigned int size);
 
@@ -31,6 +32,11 @@ static inline int __init iram_init(unsigned long base, unsigned long size)
 	return -ENOMEM;
 }
 
+static inline int __init of_iram_init(void)
+{
+	return -EINVAL;
+}
+
 static inline void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr)
 {
 	return NULL;
arch/arm/plat-mxc/iram_alloc.c +2 -0
index 074c386..f73ca9d 100644
@@ -22,6 +22,8 @@
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/genalloc.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 #include <mach/iram.h>
 
 static unsigned long iram_phys_base;
@@ -71,3 +73,17 @@ int __init iram_init(unsigned long base, unsigned long size)
 	pr_debug("i.MX IRAM pool: %ld KB at 0x%p\n", size / 1024, iram_virt_base);
 	return 0;
 }

arch/arm/plat-mxc/iram_alloc.c int __init iram_init(unsigned long base, unsigned long size) · line 85

Quoted 10 lines
arch/arm/plat-mxc/iram_alloc.c +10 -0
+
+int __init of_iram_init(void)
+{
+	struct device_node *np;
+	struct resource res;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,imx-iram");
+	if (of_address_to_resource(np, 0, &res))
+		return -EINVAL;
+	if (res.start && (res.end > res.start))

It's an valid case that iram starts at physical address 0. And how can we run into !(res.end > res.start)? To me, it's an unnecessary checking at all.

arch/arm/plat-mxc/iram_alloc.c int __init iram_init(unsigned long base, unsigned long size) · line 86

Quoted 1 line
arch/arm/plat-mxc/iram_alloc.c +1 -0
+		return iram_init(res.start, res.end - res.start + 1);

We can use resource_size(&res) to help here.

Regards,
Shawn

Quoted 13 lines
arch/arm/plat-mxc/iram_alloc.c +3 -0
+	else
+		return -EINVAL;
+}
Signature · 8 lines
1.7.4.1



_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
#2 lore raw

PATCH 1/2 ARM: imx: add dt support of IRAM

In reply to Jason Chen
Quoted 7 lines · Jason Chen
---
 arch/arm/plat-mxc/include/mach/iram.h |    6 ++++++
 arch/arm/plat-mxc/iram_alloc.c        |   16 ++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

Whatever happened to the generic SRAM support? That with a common DT binding and init would be better.

http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/051472.html

Rob

Quoted 55 lines
arch/arm/plat-mxc/include/mach/iram.h +6 -0
index 022690c..f8372cf 100644
@@ -21,6 +21,7 @@
 #ifdef CONFIG_IRAM_ALLOC
 
 int __init iram_init(unsigned long base, unsigned long size);
+int __init of_iram_init(void);
 void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr);
 void iram_free(unsigned long dma_addr, unsigned int size);
 
@@ -31,6 +32,11 @@ static inline int __init iram_init(unsigned long base, unsigned long size)
 	return -ENOMEM;
 }
 
+static inline int __init of_iram_init(void)
+{
+	return -EINVAL;
+}
+
 static inline void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr)
 {
 	return NULL;
arch/arm/plat-mxc/iram_alloc.c +16 -0
index 074c386..f73ca9d 100644
@@ -22,6 +22,8 @@
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/genalloc.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 #include <mach/iram.h>
 
 static unsigned long iram_phys_base;
@@ -71,3 +73,17 @@ int __init iram_init(unsigned long base, unsigned long size)
 	pr_debug("i.MX IRAM pool: %ld KB at 0x%p\n", size / 1024, iram_virt_base);
 	return 0;
 }
+
+int __init of_iram_init(void)
+{
+	struct device_node *np;
+	struct resource res;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,imx-iram");
+	if (of_address_to_resource(np, 0, &res))
+		return -EINVAL;
+	if (res.start && (res.end > res.start))
+		return iram_init(res.start, res.end - res.start + 1);
+	else
+		return -EINVAL;
+}
#3 lore raw

PATCH 1/2 ARM: imx: add dt support of IRAM

Quoted 9 lines · Rob Herring
Quoted 7 lines · Jason Chen
---
 arch/arm/plat-mxc/include/mach/iram.h |    6 ++++++
 arch/arm/plat-mxc/iram_alloc.c        |   16 ++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)
Quoted 5 lines

Whatever happened to the generic SRAM support? That with a common DT binding and init would be better.

http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/051472.html

Receiving the patch from Eric and Jason, the first thing I did was searching the status of SRAM consolidation series. But it has not got any update since it's proposed back to May.

Signature · 2 lines
Regards,
Shawn
#4 lore raw

PATCH 1/2 ARM: imx: add dt support of IRAM

In reply to Rob Herring
Quoted 9 lines · Rob Herring
Quoted 7 lines · Jason Chen

---
?arch/arm/plat-mxc/include/mach/iram.h | ? ?6 ++++++ ?arch/arm/plat-mxc/iram_alloc.c ? ? ? ?| ? 16 ++++++++++++++++ ?2 files changed, 22 insertions(+), 0 deletions(-)

Quoted 4 lines

Whatever happened to the generic SRAM support? That with a common DT binding and init would be better.

http://lists.infradead.org/pipermail/linux-arm-kernel/2011-May/051472.html

+1, this one looks good.