xref: /OK3568_Linux_fs/kernel/arch/arm/mach-mv78xx0/buffalo-wxl-setup.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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