ARM: imx: add dt support of IRAM
Subsystems (3)
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
@@ -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
@@ -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
PATCH 1/2 ARM: imx: add dt support of IRAM
Quoted 12 lines · Jason Chen
Signed-off-by Jason Chen <[email protected]>Signed-off-by Eric Miao <[email protected]>--- 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
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
-0void __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@@ -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
PATCH 1/2 ARM: imx: add dt support of IRAM
In reply to Jason ChenQuoted 7 lines · Jason Chen
Signed-off-by Jason Chen <[email protected]>Signed-off-by Eric Miao <[email protected]>--- 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@@ -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@@ -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 ; +}
PATCH 1/2 ARM: imx: add dt support of IRAM
Quoted 9 lines · Rob Herring
Quoted 7 lines · Jason Chen
Signed-off-by Jason Chen <[email protected]>Signed-off-by Eric Miao <[email protected]>--- 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
PATCH 1/2 ARM: imx: add dt support of IRAM
In reply to Rob HerringQuoted 9 lines · Rob Herring
Quoted 7 lines · Jason Chen
Signed-off-by Jason Chen <[email protected]>Signed-off-by Eric Miao <[email protected]>---
?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.