summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMichel Stam <m.stam@fugro.nl>2014-04-07 12:01:22 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-04-09 19:31:42 +0200
commit9f556d4b6fc71d548e5c984c416f4f1b7d599d2f (patch)
tree96adeb2f953a59e7353f441023e17f4d09c7e9cb /arch
parent940237285ebbdbfb4b341eb248fd77e9546df61e (diff)
downloadbarebox-9f556d4b6fc71d548e5c984c416f4f1b7d599d2f.tar.gz
barebox-9f556d4b6fc71d548e5c984c416f4f1b7d599d2f.tar.xz
x86: ns16550: Rework driver to allow for x86 I/O space
The current implementation fakes a memory-mapped I/O device at 0x3f8 and 0x2f8, then uses platform read/write functions to do the actual reading and writing. These platform functions only exist for the x86 platform; better to move the I/O routines into the driver and have the driver request I/O ports using request_ioport_region. Signed-off-by: Michel Stam <michel@reverze.net> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c3
-rw-r--r--arch/arm/mach-mvebu/armada-370-xp.c3
-rw-r--r--arch/arm/mach-mvebu/kirkwood.c3
-rw-r--r--arch/arm/mach-socfpga/xload.c4
-rw-r--r--arch/arm/mach-tegra/tegra20.c2
-rw-r--r--arch/mips/boards/dlink-dir-320/serial.c2
-rw-r--r--arch/mips/boards/loongson-ls1b/serial.c2
-rw-r--r--arch/mips/mach-ar231x/ar231x.c4
-rw-r--r--arch/openrisc/boards/generic/generic.c3
-rw-r--r--arch/ppc/boards/freescale-p1022ds/p1022ds.c2
-rw-r--r--arch/ppc/boards/freescale-p2020rdb/p2020rdb.c3
-rw-r--r--arch/ppc/boards/geip-da923rc/da923rc.c3
-rw-r--r--arch/x86/boards/x86_generic/serial_ns16550.c7
-rw-r--r--arch/x86/include/asm/syslib.h3
-rw-r--r--arch/x86/mach-i386/Makefile1
-rw-r--r--arch/x86/mach-i386/generic.c34
16 files changed, 25 insertions, 54 deletions
diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
index e2ad1c86dd..31422e64a0 100644
--- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
+++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
@@ -223,7 +223,8 @@ static int eukrea_cpuimx27_console_init(void)
imx27_setup_weimcs(3, 0x0000D603, 0x0D1D0D01, 0x00D20000);
#ifdef CONFIG_DRIVER_SERIAL_NS16550
add_ns16550_device(DEVICE_ID_DYNAMIC, MX27_CS3_BASE_ADDR + QUART_OFFSET, 0xf,
- IORESOURCE_MEM_16BIT, &quad_uart_serial_plat);
+ IORESOURCE_MEM | IORESOURCE_MEM_16BIT,
+ &quad_uart_serial_plat);
#endif
return 0;
}
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
index 776b4c09b8..209be0b603 100644
--- a/arch/arm/mach-mvebu/armada-370-xp.c
+++ b/arch/arm/mach-mvebu/armada-370-xp.c
@@ -60,7 +60,8 @@ static int armada_370_xp_add_uart(void)
uart_plat.clock = clk_get_rate(tclk);
if (!add_ns16550_device(DEVICE_ID_DYNAMIC,
(unsigned int)CONSOLE_UART_BASE, 32,
- IORESOURCE_MEM_32BIT, &uart_plat))
+ IORESOURCE_MEM | IORESOURCE_MEM_32BIT,
+ &uart_plat))
return -ENODEV;
return 0;
}
diff --git a/arch/arm/mach-mvebu/kirkwood.c b/arch/arm/mach-mvebu/kirkwood.c
index 1284220dcf..c79d13002a 100644
--- a/arch/arm/mach-mvebu/kirkwood.c
+++ b/arch/arm/mach-mvebu/kirkwood.c
@@ -58,7 +58,8 @@ static int kirkwood_add_uart(void)
uart_plat.clock = clk_get_rate(tclk);
if (!add_ns16550_device(DEVICE_ID_DYNAMIC,
(unsigned int)CONSOLE_UART_BASE, 32,
- IORESOURCE_MEM_32BIT, &uart_plat))
+ IORESOURCE_MEM | IORESOURCE_MEM_32BIT,
+ &uart_plat))
return -ENODEV;
return 0;
}
diff --git a/arch/arm/mach-socfpga/xload.c b/arch/arm/mach-socfpga/xload.c
index 0b99db0d96..6586ada349 100644
--- a/arch/arm/mach-socfpga/xload.c
+++ b/arch/arm/mach-socfpga/xload.c
@@ -45,8 +45,8 @@ static void socfpga_uart_init(void)
clks[uart] = clk_fixed("uart", 100000000);
clkdev_add_physbase(clks[uart], CYCLONE5_UART0_ADDRESS, NULL);
clkdev_add_physbase(clks[uart], CYCLONE5_UART1_ADDRESS, NULL);
- add_ns16550_device(0, 0xffc02000, 1024, IORESOURCE_MEM_8BIT,
- &uart_pdata);
+ add_ns16550_device(0, 0xffc02000, 1024, IORESOURCE_MEM |
+ IORESOURCE_MEM_8BIT, &uart_pdata);
}
static void socfpga_timer_init(void)
diff --git a/arch/arm/mach-tegra/tegra20.c b/arch/arm/mach-tegra/tegra20.c
index cc2d748641..bdd7960f48 100644
--- a/arch/arm/mach-tegra/tegra20.c
+++ b/arch/arm/mach-tegra/tegra20.c
@@ -50,7 +50,7 @@ static int tegra20_add_debug_console(void)
return -ENODEV;
add_ns16550_device(DEVICE_ID_DYNAMIC, base, 8 << debug_uart.shift,
- IORESOURCE_MEM_8BIT, &debug_uart);
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT, &debug_uart);
return 0;
}
diff --git a/arch/mips/boards/dlink-dir-320/serial.c b/arch/mips/boards/dlink-dir-320/serial.c
index bddb6838c9..eb873791c4 100644
--- a/arch/mips/boards/dlink-dir-320/serial.c
+++ b/arch/mips/boards/dlink-dir-320/serial.c
@@ -36,7 +36,7 @@ static int dir320_console_init(void)
/* Register the serial port */
add_ns16550_device(DEVICE_ID_DYNAMIC, DEBUG_LL_UART_ADDR, 8,
- IORESOURCE_MEM_8BIT, &serial_plat);
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT, &serial_plat);
return 0;
}
diff --git a/arch/mips/boards/loongson-ls1b/serial.c b/arch/mips/boards/loongson-ls1b/serial.c
index d8e0f7c28a..7159ab7a5c 100644
--- a/arch/mips/boards/loongson-ls1b/serial.c
+++ b/arch/mips/boards/loongson-ls1b/serial.c
@@ -15,7 +15,7 @@ static int console_init(void)
barebox_set_hostname("ls1b");
add_ns16550_device(DEVICE_ID_DYNAMIC, KSEG1ADDR(LS1X_UART2_BASE),
- 8, IORESOURCE_MEM_8BIT, &serial_plat);
+ 8, IORESOURCE_MEM | IORESOURCE_MEM_8BIT, &serial_plat);
return 0;
}
diff --git a/arch/mips/mach-ar231x/ar231x.c b/arch/mips/mach-ar231x/ar231x.c
index ca912bf0ef..f714a11e92 100644
--- a/arch/mips/mach-ar231x/ar231x.c
+++ b/arch/mips/mach-ar231x/ar231x.c
@@ -189,7 +189,9 @@ static int ar2312_console_init(void)
/* Register the serial port */
serial_plat.clock = ar2312_sys_frequency();
add_ns16550_device(DEVICE_ID_DYNAMIC, KSEG1ADDR(AR2312_UART0),
- 8 << AR2312_UART_SHIFT, IORESOURCE_MEM_8BIT, &serial_plat);
+ 8 << AR2312_UART_SHIFT,
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
+ &serial_plat);
return 0;
}
console_initcall(ar2312_console_init);
diff --git a/arch/openrisc/boards/generic/generic.c b/arch/openrisc/boards/generic/generic.c
index 290e05c6ec..9f680073cb 100644
--- a/arch/openrisc/boards/generic/generic.c
+++ b/arch/openrisc/boards/generic/generic.c
@@ -15,7 +15,8 @@ static int openrisc_console_init(void)
barebox_set_hostname("or1k");
/* Register the serial port */
- add_ns16550_device(DEVICE_ID_DYNAMIC, OPENRISC_SOPC_UART_BASE, 1024, IORESOURCE_MEM_8BIT, &serial_plat);
+ add_ns16550_device(DEVICE_ID_DYNAMIC, OPENRISC_SOPC_UART_BASE, 1024,
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT, &serial_plat);
#ifdef CONFIG_DRIVER_NET_ETHOC
add_generic_device("ethoc", DEVICE_ID_DYNAMIC, NULL,
diff --git a/arch/ppc/boards/freescale-p1022ds/p1022ds.c b/arch/ppc/boards/freescale-p1022ds/p1022ds.c
index c800064062..57e7953fb1 100644
--- a/arch/ppc/boards/freescale-p1022ds/p1022ds.c
+++ b/arch/ppc/boards/freescale-p1022ds/p1022ds.c
@@ -130,7 +130,7 @@ static int p1022ds_console_init(void)
serial_plat.clock = fsl_get_bus_freq(0);
add_ns16550_device(DEVICE_ID_DYNAMIC, CFG_IMMR + 0x4500, 16,
- IORESOURCE_MEM_8BIT, &serial_plat);
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT, &serial_plat);
return 0;
}
diff --git a/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c b/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
index 229ae41f08..385a436459 100644
--- a/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
+++ b/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
@@ -112,7 +112,8 @@ static int p2020_console_init(void)
serial_plat.clock = fsl_get_bus_freq(0);
- add_ns16550_device(DEVICE_ID_DYNAMIC, 0xffe04500, 16, IORESOURCE_MEM_8BIT,
+ add_ns16550_device(DEVICE_ID_DYNAMIC, 0xffe04500, 16,
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
&serial_plat);
return 0;
}
diff --git a/arch/ppc/boards/geip-da923rc/da923rc.c b/arch/ppc/boards/geip-da923rc/da923rc.c
index 976aa8d54c..3d77349e0d 100644
--- a/arch/ppc/boards/geip-da923rc/da923rc.c
+++ b/arch/ppc/boards/geip-da923rc/da923rc.c
@@ -115,7 +115,8 @@ static int da923rc_console_init(void)
barebox_set_model("unknown");
serial_plat.clock = fsl_get_bus_freq(0);
- add_ns16550_device(1, CFG_CCSRBAR + 0x4600, 16, IORESOURCE_MEM_8BIT,
+ add_ns16550_device(1, CFG_CCSRBAR + 0x4600, 16,
+ IORESOURCE_MEM | IORESOURCE_MEM_8BIT,
&serial_plat);
return 0;
}
diff --git a/arch/x86/boards/x86_generic/serial_ns16550.c b/arch/x86/boards/x86_generic/serial_ns16550.c
index cae61df1d6..3b284f3d3d 100644
--- a/arch/x86/boards/x86_generic/serial_ns16550.c
+++ b/arch/x86/boards/x86_generic/serial_ns16550.c
@@ -30,8 +30,6 @@
static struct NS16550_plat serial_plat = {
.clock = 1843200,
- .reg_read = x86_uart_read,
- .reg_write = x86_uart_write,
};
static int pc_console_init(void)
@@ -40,7 +38,10 @@ static int pc_console_init(void)
barebox_set_hostname("x86");
/* Register the serial port */
- add_ns16550_device(DEVICE_ID_DYNAMIC, 0x3f8, 8, 0, &serial_plat);
+ add_ns16550_device(DEVICE_ID_DYNAMIC, 0x3f8, 8, IORESOURCE_IO,
+ &serial_plat);
+ add_ns16550_device(DEVICE_ID_DYNAMIC, 0x2f8, 8, IORESOURCE_IO,
+ &serial_plat);
return 0;
}
diff --git a/arch/x86/include/asm/syslib.h b/arch/x86/include/asm/syslib.h
index a6c44e954e..14e373a5af 100644
--- a/arch/x86/include/asm/syslib.h
+++ b/arch/x86/include/asm/syslib.h
@@ -14,9 +14,6 @@
*
*/
-extern unsigned int x86_uart_read(unsigned long, unsigned char);
-extern void x86_uart_write(unsigned int, unsigned long, unsigned char);
-
#ifdef CONFIG_X86_BIOS_BRINGUP
extern int bios_disk_rw_int13_extensions(int, int, void*) __attribute__((regparm(3)));
diff --git a/arch/x86/mach-i386/Makefile b/arch/x86/mach-i386/Makefile
index 10712e6a3b..e46aa5b5ee 100644
--- a/arch/x86/mach-i386/Makefile
+++ b/arch/x86/mach-i386/Makefile
@@ -1,4 +1,3 @@
-obj-y += generic.o
obj-y += reset.o
# reference clocksource
diff --git a/arch/x86/mach-i386/generic.c b/arch/x86/mach-i386/generic.c
deleted file mode 100644
index 69cf53c8fe..0000000000
--- a/arch/x86/mach-i386/generic.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2009 Juergen Beisert, Pengutronix
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- *
- */
-
-/**
- * @file
- * @brief x86 Architecture Initialization routines
- */
-
-#include <io.h>
-
-/** to work with the 8250 UART driver implementation we need this function */
-unsigned int x86_uart_read(unsigned long base, unsigned char reg_idx)
-{
- return inb(base + reg_idx);
-}
-
-/** to work with the 8250 UART driver implementation we need this function */
-void x86_uart_write(unsigned int val, unsigned long base, unsigned char reg_idx)
-{
- outb(val, base + reg_idx);
-}