Message ID | 1378226665-27090-4-git-send-email-Russ.Dill@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
* Russ Dill <Russ.Dill@ti.com> [130903 09:52]: > The generic SRAM mechanism does not ioremap memory in a > manner that allows code to be executed from SRAM. There is > currently no generic way to request ioremap to return a > memory area with execution allowed. > > Insert a temporary hack for proof of concept on ARM. > > Signed-off-by: Russ Dill <Russ.Dill@ti.com> > --- > drivers/misc/sram.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c > index 08baaab..e059a23 100644 > --- a/drivers/misc/sram.c > +++ b/drivers/misc/sram.c > @@ -31,6 +31,7 @@ > #include <linux/genalloc.h> > #include <linux/sram.h> > #include <asm-generic/cacheflush.h> > +#include <asm/io.h> > > #define SRAM_GRANULARITY 32 > > @@ -138,7 +139,7 @@ static int sram_probe(struct platform_device *pdev) > int ret; > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - virt_base = devm_ioremap_resource(&pdev->dev, res); > + virt_base = __arm_ioremap_exec(res->start, resource_size(res), false); > if (IS_ERR(virt_base)) > return PTR_ERR(virt_base); You can get rid of this hack by defining ioremap_exec in include/asm-generic/io.h the same way as ioremap_nocache is done: #ifndef ioremap_exec #define ioremap_exec ioremap #endif Then the arch that need ioremap_exec can define and implement it. Needs to be reviewed on LKML naturally :) Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, Sep 4, 2013 at 11:06 AM, Tony Lindgren <tony@atomide.com> wrote: > * Russ Dill <Russ.Dill@ti.com> [130903 09:52]: >> The generic SRAM mechanism does not ioremap memory in a >> manner that allows code to be executed from SRAM. There is >> currently no generic way to request ioremap to return a >> memory area with execution allowed. >> >> Insert a temporary hack for proof of concept on ARM. >> >> Signed-off-by: Russ Dill <Russ.Dill@ti.com> >> --- >> drivers/misc/sram.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c >> index 08baaab..e059a23 100644 >> --- a/drivers/misc/sram.c >> +++ b/drivers/misc/sram.c >> @@ -31,6 +31,7 @@ >> #include <linux/genalloc.h> >> #include <linux/sram.h> >> #include <asm-generic/cacheflush.h> >> +#include <asm/io.h> >> >> #define SRAM_GRANULARITY 32 >> >> @@ -138,7 +139,7 @@ static int sram_probe(struct platform_device *pdev) >> int ret; >> >> res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> - virt_base = devm_ioremap_resource(&pdev->dev, res); >> + virt_base = __arm_ioremap_exec(res->start, resource_size(res), false); >> if (IS_ERR(virt_base)) >> return PTR_ERR(virt_base); > > You can get rid of this hack by defining ioremap_exec in > include/asm-generic/io.h the same way as ioremap_nocache > is done: > > #ifndef ioremap_exec > #define ioremap_exec ioremap > #endif > > Then the arch that need ioremap_exec can define and > implement it. Needs to be reviewed on LKML naturally :) The similar statement for nocache in asm-generic/io.h appears in an #ifndef CONFIG_MMU block. I think the better example would be ioremap_wc, which looks like: #ifndef ARCH_HAS_IOREMAP_WC #define ioremap_wc ioremap_nocache #endif Course, ioremap_exec on ARM has a slight complication since it has an extra bool nocache argument. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c index 08baaab..e059a23 100644 --- a/drivers/misc/sram.c +++ b/drivers/misc/sram.c @@ -31,6 +31,7 @@ #include <linux/genalloc.h> #include <linux/sram.h> #include <asm-generic/cacheflush.h> +#include <asm/io.h> #define SRAM_GRANULARITY 32 @@ -138,7 +139,7 @@ static int sram_probe(struct platform_device *pdev) int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - virt_base = devm_ioremap_resource(&pdev->dev, res); + virt_base = __arm_ioremap_exec(res->start, resource_size(res), false); if (IS_ERR(virt_base)) return PTR_ERR(virt_base);
The generic SRAM mechanism does not ioremap memory in a manner that allows code to be executed from SRAM. There is currently no generic way to request ioremap to return a memory area with execution allowed. Insert a temporary hack for proof of concept on ARM. Signed-off-by: Russ Dill <Russ.Dill@ti.com> --- drivers/misc/sram.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)