[MIPS] Put an end to <asm/serial.h>'s long and annyoing existence
[firefly-linux-kernel-4.4.55.git] / arch / mips / momentum / ocelot_3 / platform.c
index 57cfe5c6e4a8e71cef2c89e1c34f2a7d749fcc9b..cb63c82ef6504c26523f8dbf5810ae8362ee4f27 100644 (file)
@@ -1,8 +1,19 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2006, 07 Ralf Baechle (ralf@linux-mips.org)
+ * Copyright (C) 2007 Dale Farnsworth (dale@farnsworth.org)
+ */
 #include <linux/delay.h>
 #include <linux/if_ether.h>
+#include <linux/init.h>
 #include <linux/ioport.h>
+#include <linux/module.h>
 #include <linux/mv643xx.h>
 #include <linux/platform_device.h>
+#include <linux/serial_8250.h>
 
 #include "ocelot_3_fpga.h"
 
@@ -38,8 +49,6 @@ static struct platform_device mv643xx_eth_shared_device = {
 #define MV64x60_IRQ_ETH_1 49
 #define MV64x60_IRQ_ETH_2 50
 
-#ifdef CONFIG_MV643XX_ETH_0
-
 static struct resource mv64x60_eth0_resources[] = {
        [0] = {
                .name   = "eth0 irq",
@@ -49,10 +58,8 @@ static struct resource mv64x60_eth0_resources[] = {
        },
 };
 
-static char eth0_mac_addr[ETH_ALEN];
-
 static struct mv643xx_eth_platform_data eth0_pd = {
-       .mac_addr       = eth0_mac_addr,
+       .port_number    = 0,
 
        .tx_sram_addr   = MV_SRAM_BASE_ETH0,
        .tx_sram_size   = MV_SRAM_TXRING_SIZE,
@@ -72,9 +79,6 @@ static struct platform_device eth0_device = {
                .platform_data = &eth0_pd,
        },
 };
-#endif /* CONFIG_MV643XX_ETH_0 */
-
-#ifdef CONFIG_MV643XX_ETH_1
 
 static struct resource mv64x60_eth1_resources[] = {
        [0] = {
@@ -85,10 +89,8 @@ static struct resource mv64x60_eth1_resources[] = {
        },
 };
 
-static char eth1_mac_addr[ETH_ALEN];
-
 static struct mv643xx_eth_platform_data eth1_pd = {
-       .mac_addr       = eth1_mac_addr,
+       .port_number    = 1,
 
        .tx_sram_addr   = MV_SRAM_BASE_ETH1,
        .tx_sram_size   = MV_SRAM_TXRING_SIZE,
@@ -108,9 +110,6 @@ static struct platform_device eth1_device = {
                .platform_data = &eth1_pd,
        },
 };
-#endif /* CONFIG_MV643XX_ETH_1 */
-
-#ifdef CONFIG_MV643XX_ETH_2
 
 static struct resource mv64x60_eth2_resources[] = {
        [0] = {
@@ -121,10 +120,8 @@ static struct resource mv64x60_eth2_resources[] = {
        },
 };
 
-static char eth2_mac_addr[ETH_ALEN];
-
 static struct mv643xx_eth_platform_data eth2_pd = {
-       .mac_addr       = eth2_mac_addr,
+       .port_number    = 2,
 };
 
 static struct platform_device eth2_device = {
@@ -136,19 +133,12 @@ static struct platform_device eth2_device = {
                .platform_data = &eth2_pd,
        },
 };
-#endif /* CONFIG_MV643XX_ETH_2 */
 
 static struct platform_device *mv643xx_eth_pd_devs[] __initdata = {
        &mv643xx_eth_shared_device,
-#ifdef CONFIG_MV643XX_ETH_0
        &eth0_device,
-#endif
-#ifdef CONFIG_MV643XX_ETH_1
        &eth1_device,
-#endif
-#ifdef CONFIG_MV643XX_ETH_2
        &eth2_device,
-#endif
 };
 
 static u8 __init exchange_bit(u8 val, u8 cs)
@@ -215,15 +205,9 @@ static int __init mv643xx_eth_add_pds(void)
        int ret;
 
        get_mac(mac);
-#ifdef CONFIG_MV643XX_ETH_0
-       eth_mac_add(eth1_mac_addr, mac, 0);
-#endif
-#ifdef CONFIG_MV643XX_ETH_1
-       eth_mac_add(eth1_mac_addr, mac, 1);
-#endif
-#ifdef CONFIG_MV643XX_ETH_2
-       eth_mac_add(eth2_mac_addr, mac, 2);
-#endif
+       eth_mac_add(eth0_pd.mac_addr, mac, 0);
+       eth_mac_add(eth1_pd.mac_addr, mac, 1);
+       eth_mac_add(eth2_pd.mac_addr, mac, 2);
        ret = platform_add_devices(mv643xx_eth_pd_devs,
                        ARRAY_SIZE(mv643xx_eth_pd_devs));
 
@@ -233,3 +217,36 @@ static int __init mv643xx_eth_add_pds(void)
 device_initcall(mv643xx_eth_add_pds);
 
 #endif /* defined(CONFIG_MV643XX_ETH) || defined(CONFIG_MV643XX_ETH_MODULE) */
+
+#define OCELOT3_UART_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST)
+
+static struct plat_serial8250_port uart8250_data[] = {
+       {
+               .membase        = (signed long) 0xfd000020,
+               .irq            = 6,
+               .uartclk        = 20000000,
+               .iotype         = UPIO_MEM,
+               .flags          = OCELOT3_UART_FLAGS,
+               .regshift       = 2,
+       },
+       { },
+};
+
+static struct platform_device uart8250_device = {
+       .name                   = "serial8250",
+       .id                     = PLAT8250_DEV_PLATFORM,
+       .dev                    = {
+               .platform_data  = uart8250_data,
+       },
+};
+
+static int __init uart8250_init(void)
+{
+       return platform_device_register(&uart8250_device);
+}
+
+module_init(uart8250_init);
+
+MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("8250 UART probe driver for the Ocelot 3");