diff options
Diffstat (limited to 'board/freescale/mpc8548cds/mpc8548cds.c')
| -rw-r--r-- | board/freescale/mpc8548cds/mpc8548cds.c | 69 | 
1 files changed, 58 insertions, 11 deletions
| diff --git a/board/freescale/mpc8548cds/mpc8548cds.c b/board/freescale/mpc8548cds/mpc8548cds.c index a8d57cddd..e5563f7c7 100644 --- a/board/freescale/mpc8548cds/mpc8548cds.c +++ b/board/freescale/mpc8548cds/mpc8548cds.c @@ -33,6 +33,9 @@  #include <miiphy.h>  #include <libfdt.h>  #include <fdt_support.h> +#include <tsec.h> +#include <fsl_mdio.h> +#include <netdev.h>  #include "../common/cadmus.h"  #include "../common/eeprom.h" @@ -81,12 +84,10 @@ local_bus_init(void)  	volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;  	uint clkdiv; -	uint lbc_hz;  	sys_info_t sysinfo;  	get_sys_info(&sysinfo);  	clkdiv = (lbc->lcrr & LCRR_CLKDIV) * 2; -	lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;  	gur->lbiuiplldcr1 = 0x00078080;  	if (clkdiv == 16) { @@ -115,7 +116,6 @@ void lbc_sdram_init(void)  	uint idx;  	volatile fsl_lbc_t *lbc = LBC_BASE_ADDR;  	uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE; -	uint cpu_board_rev;  	uint lsdmr_common;  	puts("LBC SDRAM: "); @@ -137,7 +137,6 @@ void lbc_sdram_init(void)  	/*  	 * MPC8548 uses "new" 15-16 style addressing.  	 */ -	cpu_board_rev = get_cpu_board_revision();  	lsdmr_common = CONFIG_SYS_LBC_LSDMR_COMMON;  	lsdmr_common |= LSDMR_BSMA1516; @@ -287,7 +286,7 @@ void pci_init_board(void)  	fsl_pcie_init_board(first_free_busno);  } -int last_stage_init(void) +void configure_rgmii(void)  {  	unsigned short temp; @@ -295,29 +294,77 @@ int last_stage_init(void)  	/* This is needed to get the RGMII working for the 1.3+  	 * CDS cards */  	if (get_board_version() ==  0x13) { -		miiphy_write(CONFIG_TSEC1_NAME, +		miiphy_write(DEFAULT_MII_NAME,  				TSEC1_PHY_ADDR, 29, 18); -		miiphy_read(CONFIG_TSEC1_NAME, +		miiphy_read(DEFAULT_MII_NAME,  				TSEC1_PHY_ADDR, 30, &temp);  		temp = (temp & 0xf03f);  		temp |= 2 << 9;		/* 36 ohm */  		temp |= 2 << 6;		/* 39 ohm */ -		miiphy_write(CONFIG_TSEC1_NAME, +		miiphy_write(DEFAULT_MII_NAME,  				TSEC1_PHY_ADDR, 30, temp); -		miiphy_write(CONFIG_TSEC1_NAME, +		miiphy_write(DEFAULT_MII_NAME,  				TSEC1_PHY_ADDR, 29, 3); -		miiphy_write(CONFIG_TSEC1_NAME, +		miiphy_write(DEFAULT_MII_NAME,  				TSEC1_PHY_ADDR, 30, 0x8000);  	} -	return 0; +	return;  } +#ifdef CONFIG_TSEC_ENET +int board_eth_init(bd_t *bis) +{ +	struct fsl_pq_mdio_info mdio_info; +	struct tsec_info_struct tsec_info[4]; +	int num = 0; + +#ifdef CONFIG_TSEC1 +	SET_STD_TSEC_INFO(tsec_info[num], 1); +	num++; +#endif +#ifdef CONFIG_TSEC2 +	SET_STD_TSEC_INFO(tsec_info[num], 2); +	num++; +#endif +#ifdef CONFIG_TSEC3 +	/* initialize TSEC3 only if Carrier is 1.3 or above on CDS */ +	if (get_board_version() >= 0x13) { +		SET_STD_TSEC_INFO(tsec_info[num], 3); +		tsec_info[num].interface = PHY_INTERFACE_MODE_RGMII_ID; +		num++; +	} +#endif +#ifdef CONFIG_TSEC4 +	/* initialize TSEC4 only if Carrier is 1.3 or above on CDS */ +	if (get_board_version() >= 0x13) { +		SET_STD_TSEC_INFO(tsec_info[num], 4); +		tsec_info[num].interface = PHY_INTERFACE_MODE_RGMII_ID; +		num++; +	} +#endif + +	if (!num) { +		printf("No TSECs initialized\n"); + +		return 0; +	} + +	mdio_info.regs = (struct tsec_mii_mng *)CONFIG_SYS_MDIO_BASE_ADDR; +	mdio_info.name = DEFAULT_MII_NAME; +	fsl_pq_mdio_init(bis, &mdio_info); + +	tsec_eth_init(bis, tsec_info, num); +	configure_rgmii(); + +	return pci_eth_init(bis); +} +#endif  #if defined(CONFIG_OF_BOARD_SETUP)  void ft_pci_setup(void *blob, bd_t *bd) |