diff mbox

[v2] mtd: slram: use memremap() instead of ioremap()

Message ID 20171019225549.11422-1-roy.franz@cavium.com (mailing list archive)
State New, archived
Headers show

Commit Message

Roy Franz Oct. 19, 2017, 10:55 p.m. UTC
Convert slram to use memremap() to map the memory it uses to back an MTD
device, as this is the proper interface for mapping memory. This change
enables normal memory to be used to back an MTD device on arm64, as arm64
prevents ioremap() being used on normal memory.

Signed-off-by: Roy Franz <roy.franz@cavium.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: David Daney <david.daney@cavium.com>
---
Tested on arm64 simulation, using simulator to preload filesystem image into RAM,
and also tested on x86_64 using video card memory.  This is useful for speeding
up booting on (very slow) emulation environments by avoiding any processing of
an initramfs.
David Daney tested on MIPS64.

v2: Fix typo in subject line, s/mdt/mtd/
    added acked-by/tested-by

 drivers/mtd/devices/slram.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Roy Franz Nov. 6, 2017, 10:29 p.m. UTC | #1
ping - is this suitable for 4.15?

Thanks,
Roy


On Thu, Oct 19, 2017 at 3:55 PM, Roy Franz <rfranz@cavium.com> wrote:
> Convert slram to use memremap() to map the memory it uses to back an MTD
> device, as this is the proper interface for mapping memory. This change
> enables normal memory to be used to back an MTD device on arm64, as arm64
> prevents ioremap() being used on normal memory.
>
> Signed-off-by: Roy Franz <roy.franz@cavium.com>
> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Tested-by: David Daney <david.daney@cavium.com>
> ---
> Tested on arm64 simulation, using simulator to preload filesystem image into RAM,
> and also tested on x86_64 using video card memory.  This is useful for speeding
> up booting on (very slow) emulation environments by avoiding any processing of
> an initramfs.
> David Daney tested on MIPS64.
>
> v2: Fix typo in subject line, s/mdt/mtd/
>     added acked-by/tested-by
>
>  drivers/mtd/devices/slram.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c
> index 8087c36dc693..0ec85f316d24 100644
> --- a/drivers/mtd/devices/slram.c
> +++ b/drivers/mtd/devices/slram.c
> @@ -163,8 +163,9 @@ static int register_device(char *name, unsigned long start, unsigned long length
>         }
>
>         if (!(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start =
> -                               ioremap(start, length))) {
> -               E("slram: ioremap failed\n");
> +               memremap(start, length,
> +                        MEMREMAP_WB | MEMREMAP_WT | MEMREMAP_WC))) {
> +               E("slram: memremap failed\n");
>                 return -EIO;
>         }
>         ((slram_priv_t *)(*curmtd)->mtdinfo->priv)->end =
> @@ -186,7 +187,7 @@ static int register_device(char *name, unsigned long start, unsigned long length
>
>         if (mtd_device_register((*curmtd)->mtdinfo, NULL, 0))   {
>                 E("slram: Failed to register new device\n");
> -               iounmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start);
> +               memunmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start);
>                 kfree((*curmtd)->mtdinfo->priv);
>                 kfree((*curmtd)->mtdinfo);
>                 return(-EAGAIN);
> @@ -206,7 +207,7 @@ static void unregister_devices(void)
>         while (slram_mtdlist) {
>                 nextitem = slram_mtdlist->next;
>                 mtd_device_unregister(slram_mtdlist->mtdinfo);
> -               iounmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start);
> +               memunmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start);
>                 kfree(slram_mtdlist->mtdinfo->priv);
>                 kfree(slram_mtdlist->mtdinfo);
>                 kfree(slram_mtdlist);
> --
> 2.11.0
>
Richard Weinberger Nov. 6, 2017, 10:32 p.m. UTC | #2
Am Montag, 6. November 2017, 23:29:02 CET schrieb Roy Franz:
> ping - is this suitable for 4.15?

Yes, state is "Accepted" in patchwork. :)

Thanks,
//richard
diff mbox

Patch

diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c
index 8087c36dc693..0ec85f316d24 100644
--- a/drivers/mtd/devices/slram.c
+++ b/drivers/mtd/devices/slram.c
@@ -163,8 +163,9 @@  static int register_device(char *name, unsigned long start, unsigned long length
 	}
 
 	if (!(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start =
-				ioremap(start, length))) {
-		E("slram: ioremap failed\n");
+		memremap(start, length,
+			 MEMREMAP_WB | MEMREMAP_WT | MEMREMAP_WC))) {
+		E("slram: memremap failed\n");
 		return -EIO;
 	}
 	((slram_priv_t *)(*curmtd)->mtdinfo->priv)->end =
@@ -186,7 +187,7 @@  static int register_device(char *name, unsigned long start, unsigned long length
 
 	if (mtd_device_register((*curmtd)->mtdinfo, NULL, 0))	{
 		E("slram: Failed to register new device\n");
-		iounmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start);
+		memunmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start);
 		kfree((*curmtd)->mtdinfo->priv);
 		kfree((*curmtd)->mtdinfo);
 		return(-EAGAIN);
@@ -206,7 +207,7 @@  static void unregister_devices(void)
 	while (slram_mtdlist) {
 		nextitem = slram_mtdlist->next;
 		mtd_device_unregister(slram_mtdlist->mtdinfo);
-		iounmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start);
+		memunmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start);
 		kfree(slram_mtdlist->mtdinfo->priv);
 		kfree(slram_mtdlist->mtdinfo);
 		kfree(slram_mtdlist);