xref: /openbmc/u-boot/board/spear/spear310/spear310.c (revision c62db35d52c6ba5f31ac36e690c58ec54b273298)
1080cfee7SVipin KUMAR /*
2080cfee7SVipin KUMAR  * (C) Copyright 2009
3080cfee7SVipin KUMAR  * Ryan Chen, ST Micoelectronics, ryan.chen@st.com.
4080cfee7SVipin KUMAR  * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com.
5080cfee7SVipin KUMAR  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
7080cfee7SVipin KUMAR  */
8080cfee7SVipin KUMAR 
9080cfee7SVipin KUMAR #include <common.h>
109afc1af0SVipin Kumar #include <miiphy.h>
11deb00562SVipin KUMAR #include <netdev.h>
12080cfee7SVipin KUMAR #include <nand.h>
13080cfee7SVipin KUMAR #include <asm/io.h>
141fa943b9SVipin KUMAR #include <linux/mtd/fsmc_nand.h>
15*c62db35dSSimon Glass #include <asm/mach-types.h>
16080cfee7SVipin KUMAR #include <asm/arch/hardware.h>
17080cfee7SVipin KUMAR #include <asm/arch/spr_defs.h>
18080cfee7SVipin KUMAR #include <asm/arch/spr_misc.h>
191fa943b9SVipin KUMAR 
201fa943b9SVipin KUMAR static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE];
21080cfee7SVipin KUMAR 
22080cfee7SVipin KUMAR int board_init(void)
23080cfee7SVipin KUMAR {
249d69e33dSVipin Kumar 	return spear_board_init(MACH_TYPE_SPEAR310);
25080cfee7SVipin KUMAR }
26080cfee7SVipin KUMAR 
27080cfee7SVipin KUMAR /*
28080cfee7SVipin KUMAR  * board_nand_init - Board specific NAND initialization
29080cfee7SVipin KUMAR  * @nand:	mtd private chip structure
30080cfee7SVipin KUMAR  *
31080cfee7SVipin KUMAR  * Called by nand_init_chip to initialize the board specific functions
32080cfee7SVipin KUMAR  */
33080cfee7SVipin KUMAR 
341fa943b9SVipin KUMAR void board_nand_init()
35080cfee7SVipin KUMAR {
36080cfee7SVipin KUMAR 	struct misc_regs *const misc_regs_p =
37080cfee7SVipin KUMAR 	    (struct misc_regs *)CONFIG_SPEAR_MISCBASE;
381fa943b9SVipin KUMAR 	struct nand_chip *nand = &nand_chip[0];
39080cfee7SVipin KUMAR 
401fa943b9SVipin KUMAR #if defined(CONFIG_NAND_FSMC)
41080cfee7SVipin KUMAR 	if (((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
42080cfee7SVipin KUMAR 	     MISC_SOCCFG30) ||
43080cfee7SVipin KUMAR 	    ((readl(&misc_regs_p->auto_cfg_reg) & MISC_SOCCFGMSK) ==
44080cfee7SVipin KUMAR 	     MISC_SOCCFG31)) {
45080cfee7SVipin KUMAR 
461fa943b9SVipin KUMAR 		fsmc_nand_init(nand);
47080cfee7SVipin KUMAR 	}
481fa943b9SVipin KUMAR #endif
491fa943b9SVipin KUMAR 	return;
50080cfee7SVipin KUMAR }
51deb00562SVipin KUMAR 
52deb00562SVipin KUMAR int board_eth_init(bd_t *bis)
53deb00562SVipin KUMAR {
548eb0ee6aSVipin KUMAR 	int ret = 0;
558eb0ee6aSVipin KUMAR 
56ef48f6ddSSimon Glass #if defined(CONFIG_ETH_DESIGNWARE)
579afc1af0SVipin Kumar 	u32 interface = PHY_INTERFACE_MODE_MII;
5892a190aaSAlexey Brodkin 	if (designware_initialize(CONFIG_SPEAR_ETHBASE, interface) >= 0)
599afc1af0SVipin Kumar 		ret++;
60deb00562SVipin KUMAR #endif
618eb0ee6aSVipin KUMAR #if defined(CONFIG_MACB)
628eb0ee6aSVipin KUMAR 	if (macb_eth_initialize(0, (void *)CONFIG_SYS_MACB0_BASE,
639afc1af0SVipin Kumar 				CONFIG_MACB0_PHY) >= 0)
649afc1af0SVipin Kumar 		ret++;
658eb0ee6aSVipin KUMAR 
668eb0ee6aSVipin KUMAR 	if (macb_eth_initialize(1, (void *)CONFIG_SYS_MACB1_BASE,
679afc1af0SVipin Kumar 				CONFIG_MACB1_PHY) >= 0)
689afc1af0SVipin Kumar 		ret++;
698eb0ee6aSVipin KUMAR 
708eb0ee6aSVipin KUMAR 	if (macb_eth_initialize(2, (void *)CONFIG_SYS_MACB2_BASE,
719afc1af0SVipin Kumar 				CONFIG_MACB2_PHY) >= 0)
729afc1af0SVipin Kumar 		ret++;
738eb0ee6aSVipin KUMAR 
748eb0ee6aSVipin KUMAR 	if (macb_eth_initialize(3, (void *)CONFIG_SYS_MACB3_BASE,
759afc1af0SVipin Kumar 				CONFIG_MACB3_PHY) >= 0)
769afc1af0SVipin Kumar 		ret++;
778eb0ee6aSVipin KUMAR #endif
788eb0ee6aSVipin KUMAR 	return ret;
79deb00562SVipin KUMAR }
80