1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * arch/arm/mach-mv78xx0/buffalo-wxl-setup.c
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Buffalo WXL (Terastation Duo) Setup routines
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * sebastien requiem <sebastien@requiem.fr>
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * This file is licensed under the terms of the GNU General Public
9*4882a593Smuzhiyun * License version 2. This program is licensed "as is" without any
10*4882a593Smuzhiyun * warranty of any kind, whether express or implied.
11*4882a593Smuzhiyun */
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun #include <linux/kernel.h>
14*4882a593Smuzhiyun #include <linux/init.h>
15*4882a593Smuzhiyun #include <linux/platform_device.h>
16*4882a593Smuzhiyun #include <linux/ata_platform.h>
17*4882a593Smuzhiyun #include <linux/mv643xx_eth.h>
18*4882a593Smuzhiyun #include <linux/ethtool.h>
19*4882a593Smuzhiyun #include <linux/i2c.h>
20*4882a593Smuzhiyun #include <asm/mach-types.h>
21*4882a593Smuzhiyun #include <asm/mach/arch.h>
22*4882a593Smuzhiyun #include "mv78xx0.h"
23*4882a593Smuzhiyun #include "common.h"
24*4882a593Smuzhiyun #include "mpp.h"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun /* This arch has 2 Giga Ethernet */
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun static struct mv643xx_eth_platform_data db78x00_ge00_data = {
30*4882a593Smuzhiyun .phy_addr = MV643XX_ETH_PHY_ADDR(0),
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun static struct mv643xx_eth_platform_data db78x00_ge01_data = {
34*4882a593Smuzhiyun .phy_addr = MV643XX_ETH_PHY_ADDR(8),
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun /* 2 SATA controller supporting HotPlug */
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun static struct mv_sata_platform_data db78x00_sata_data = {
41*4882a593Smuzhiyun .n_ports = 2,
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun static struct i2c_board_info __initdata db78x00_i2c_rtc = {
45*4882a593Smuzhiyun I2C_BOARD_INFO("ds1338", 0x68),
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun static unsigned int wxl_mpp_config[] __initdata = {
50*4882a593Smuzhiyun MPP0_GE1_TXCLK,
51*4882a593Smuzhiyun MPP1_GE1_TXCTL,
52*4882a593Smuzhiyun MPP2_GE1_RXCTL,
53*4882a593Smuzhiyun MPP3_GE1_RXCLK,
54*4882a593Smuzhiyun MPP4_GE1_TXD0,
55*4882a593Smuzhiyun MPP5_GE1_TXD1,
56*4882a593Smuzhiyun MPP6_GE1_TXD2,
57*4882a593Smuzhiyun MPP7_GE1_TXD3,
58*4882a593Smuzhiyun MPP8_GE1_RXD0,
59*4882a593Smuzhiyun MPP9_GE1_RXD1,
60*4882a593Smuzhiyun MPP10_GE1_RXD2,
61*4882a593Smuzhiyun MPP11_GE1_RXD3,
62*4882a593Smuzhiyun MPP12_GPIO,
63*4882a593Smuzhiyun MPP13_SYSRST_OUTn,
64*4882a593Smuzhiyun MPP14_SATA1_ACTn,
65*4882a593Smuzhiyun MPP15_SATA0_ACTn,
66*4882a593Smuzhiyun MPP16_GPIO,
67*4882a593Smuzhiyun MPP17_GPIO,
68*4882a593Smuzhiyun MPP18_GPIO,
69*4882a593Smuzhiyun MPP19_GPIO,
70*4882a593Smuzhiyun MPP20_GPIO,
71*4882a593Smuzhiyun MPP21_GPIO,
72*4882a593Smuzhiyun MPP22_GPIO,
73*4882a593Smuzhiyun MPP23_GPIO,
74*4882a593Smuzhiyun MPP24_UA2_TXD,
75*4882a593Smuzhiyun MPP25_UA2_RXD,
76*4882a593Smuzhiyun MPP26_UA2_CTSn,
77*4882a593Smuzhiyun MPP27_UA2_RTSn,
78*4882a593Smuzhiyun MPP28_GPIO,
79*4882a593Smuzhiyun MPP29_SYSRST_OUTn,
80*4882a593Smuzhiyun MPP30_GPIO,
81*4882a593Smuzhiyun MPP31_GPIO,
82*4882a593Smuzhiyun MPP32_GPIO,
83*4882a593Smuzhiyun MPP33_GPIO,
84*4882a593Smuzhiyun MPP34_GPIO,
85*4882a593Smuzhiyun MPP35_GPIO,
86*4882a593Smuzhiyun MPP36_GPIO,
87*4882a593Smuzhiyun MPP37_GPIO,
88*4882a593Smuzhiyun MPP38_GPIO,
89*4882a593Smuzhiyun MPP39_GPIO,
90*4882a593Smuzhiyun MPP40_UNUSED,
91*4882a593Smuzhiyun MPP41_UNUSED,
92*4882a593Smuzhiyun MPP42_UNUSED,
93*4882a593Smuzhiyun MPP43_UNUSED,
94*4882a593Smuzhiyun MPP44_UNUSED,
95*4882a593Smuzhiyun MPP45_UNUSED,
96*4882a593Smuzhiyun MPP46_UNUSED,
97*4882a593Smuzhiyun MPP47_UNUSED,
98*4882a593Smuzhiyun MPP48_SATA1_ACTn,
99*4882a593Smuzhiyun MPP49_SATA0_ACTn,
100*4882a593Smuzhiyun 0
101*4882a593Smuzhiyun };
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun
wxl_init(void)104*4882a593Smuzhiyun static void __init wxl_init(void)
105*4882a593Smuzhiyun {
106*4882a593Smuzhiyun /*
107*4882a593Smuzhiyun * Basic MV78xx0 setup. Needs to be called early.
108*4882a593Smuzhiyun */
109*4882a593Smuzhiyun mv78xx0_init();
110*4882a593Smuzhiyun mv78xx0_mpp_conf(wxl_mpp_config);
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun /*
113*4882a593Smuzhiyun * Partition on-chip peripherals between the two CPU cores.
114*4882a593Smuzhiyun */
115*4882a593Smuzhiyun mv78xx0_ehci0_init();
116*4882a593Smuzhiyun mv78xx0_ehci1_init();
117*4882a593Smuzhiyun mv78xx0_ehci2_init();
118*4882a593Smuzhiyun mv78xx0_ge00_init(&db78x00_ge00_data);
119*4882a593Smuzhiyun mv78xx0_ge01_init(&db78x00_ge01_data);
120*4882a593Smuzhiyun mv78xx0_sata_init(&db78x00_sata_data);
121*4882a593Smuzhiyun mv78xx0_uart0_init();
122*4882a593Smuzhiyun mv78xx0_uart1_init();
123*4882a593Smuzhiyun mv78xx0_uart2_init();
124*4882a593Smuzhiyun mv78xx0_uart3_init();
125*4882a593Smuzhiyun mv78xx0_i2c_init();
126*4882a593Smuzhiyun i2c_register_board_info(0, &db78x00_i2c_rtc, 1);
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun
wxl_pci_init(void)129*4882a593Smuzhiyun static int __init wxl_pci_init(void)
130*4882a593Smuzhiyun {
131*4882a593Smuzhiyun if (machine_is_terastation_wxl()) {
132*4882a593Smuzhiyun /*
133*4882a593Smuzhiyun * Assign the x16 PCIe slot on the board to CPU core
134*4882a593Smuzhiyun * #0, and let CPU core #1 have the four x1 slots.
135*4882a593Smuzhiyun */
136*4882a593Smuzhiyun if (mv78xx0_core_index() == 0)
137*4882a593Smuzhiyun mv78xx0_pcie_init(0, 1);
138*4882a593Smuzhiyun else
139*4882a593Smuzhiyun mv78xx0_pcie_init(1, 0);
140*4882a593Smuzhiyun }
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun return 0;
143*4882a593Smuzhiyun }
144*4882a593Smuzhiyun subsys_initcall(wxl_pci_init);
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun MACHINE_START(TERASTATION_WXL, "Buffalo Nas WXL")
147*4882a593Smuzhiyun /* Maintainer: Sebastien Requiem <sebastien@requiem.fr> */
148*4882a593Smuzhiyun .atag_offset = 0x100,
149*4882a593Smuzhiyun .nr_irqs = MV78XX0_NR_IRQS,
150*4882a593Smuzhiyun .init_machine = wxl_init,
151*4882a593Smuzhiyun .map_io = mv78xx0_map_io,
152*4882a593Smuzhiyun .init_early = mv78xx0_init_early,
153*4882a593Smuzhiyun .init_irq = mv78xx0_init_irq,
154*4882a593Smuzhiyun .init_time = mv78xx0_timer_init,
155*4882a593Smuzhiyun .restart = mv78xx0_restart,
156*4882a593Smuzhiyun MACHINE_END
157