| From 0c64a0dce51faa9c706fdf1f957d6f19878f4b81 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Fri, 14 Aug 2020 14:42:45 +0200 |
| Subject: [PATCH] sh: landisk: Add missing initialization of sh_io_port_base |
| |
| commit 0c64a0dce51faa9c706fdf1f957d6f19878f4b81 upstream. |
| |
| The Landisk setup code maps the CF IDE area using ioremap_prot(), and |
| passes the resulting virtual addresses to the pata_platform driver, |
| disguising them as I/O port addresses. Hence the pata_platform driver |
| translates them again using ioport_map(). |
| As CONFIG_GENERIC_IOMAP=n, and CONFIG_HAS_IOPORT_MAP=y, the |
| SuperH-specific mapping code in arch/sh/kernel/ioport.c translates |
| I/O port addresses to virtual addresses by adding sh_io_port_base, which |
| defaults to -1, thus breaking the assumption of an identity mapping. |
| |
| Fix this by setting sh_io_port_base to zero. |
| |
| Fixes: 37b7a97884ba64bf ("sh: machvec IO death.") |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Rich Felker <dalias@libc.org> |
| |
| diff --git a/arch/sh/boards/mach-landisk/setup.c b/arch/sh/boards/mach-landisk/setup.c |
| index 16b4d8b0bb85..2c44b94f82fb 100644 |
| --- a/arch/sh/boards/mach-landisk/setup.c |
| +++ b/arch/sh/boards/mach-landisk/setup.c |
| @@ -82,6 +82,9 @@ device_initcall(landisk_devices_setup); |
| |
| static void __init landisk_setup(char **cmdline_p) |
| { |
| + /* I/O port identity mapping */ |
| + __set_io_port_base(0); |
| + |
| /* LED ON */ |
| __raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED); |
| |
| -- |
| 2.27.0 |
| |