Skip to content
Snippets Groups Projects
Commit 9afc1af0 authored by Vipin Kumar's avatar Vipin Kumar Committed by Albert ARIBAUD
Browse files

SPEAr: Add interface information in initialization


Few Designware peripheral registers need to be modified based on the
ethernet interface selected by the board. This patch supports interface
information in ethernet driver

Signed-off-by: default avatarVipin Kumar <vipin.kumar@st.com>
Signed-off-by: default avatarAmit Virdi <amit.virdi@st.com>
Signed-off-by: default avatarStefan Roese <sr@denx.de>
parent 8eb0ee6a
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@
*/
#include <common.h>
#include <miiphy.h>
#include <netdev.h>
#include <nand.h>
#include <asm/io.h>
......@@ -64,9 +65,13 @@ void board_nand_init()
int board_eth_init(bd_t *bis)
{
int ret = 0;
#if defined(CONFIG_DESIGNWARE_ETH)
return designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY);
#else
return -1;
u32 interface = PHY_INTERFACE_MODE_MII;
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY,
interface) >= 0)
ret++;
#endif
return ret;
}
......@@ -23,6 +23,7 @@
*/
#include <common.h>
#include <miiphy.h>
#include <netdev.h>
#include <nand.h>
#include <asm/io.h>
......@@ -68,25 +69,27 @@ int board_eth_init(bd_t *bis)
int ret = 0;
#if defined(CONFIG_DESIGNWARE_ETH)
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY) < 0)
ret += -1;
u32 interface = PHY_INTERFACE_MODE_MII;
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY,
interface) >= 0)
ret++;
#endif
#if defined(CONFIG_MACB)
if (macb_eth_initialize(0, (void *)CONFIG_SYS_MACB0_BASE,
CONFIG_MACB0_PHY) < 0)
ret += -1;
CONFIG_MACB0_PHY) >= 0)
ret++;
if (macb_eth_initialize(1, (void *)CONFIG_SYS_MACB1_BASE,
CONFIG_MACB1_PHY) < 0)
ret += -1;
CONFIG_MACB1_PHY) >= 0)
ret++;
if (macb_eth_initialize(2, (void *)CONFIG_SYS_MACB2_BASE,
CONFIG_MACB2_PHY) < 0)
ret += -1;
CONFIG_MACB2_PHY) >= 0)
ret++;
if (macb_eth_initialize(3, (void *)CONFIG_SYS_MACB3_BASE,
CONFIG_MACB3_PHY) < 0)
ret += -1;
CONFIG_MACB3_PHY) >= 0)
ret++;
#endif
return ret;
}
......@@ -23,6 +23,7 @@
*/
#include <common.h>
#include <miiphy.h>
#include <netdev.h>
#include <nand.h>
#include <asm/io.h>
......@@ -31,10 +32,20 @@
#include <asm/arch/spr_defs.h>
#include <asm/arch/spr_misc.h>
#define PLGPIO_SEL_36 0xb3000028
#define PLGPIO_IO_36 0xb3000038
static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE];
static void spear_phy_reset(void)
{
writel(0x10, PLGPIO_IO_36);
writel(0x10, PLGPIO_SEL_36);
}
int board_init(void)
{
spear_phy_reset();
return spear_board_init(MACH_TYPE_SPEAR320);
}
......@@ -67,14 +78,17 @@ void board_nand_init()
int board_eth_init(bd_t *bis)
{
int ret = 0;
#if defined(CONFIG_DESIGNWARE_ETH)
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY) < 0)
ret += -1;
u32 interface = PHY_INTERFACE_MODE_MII;
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY,
interface) >= 0)
ret++;
#endif
#if defined(CONFIG_MACB)
if (macb_eth_initialize(0, (void *)CONFIG_SYS_MACB0_BASE,
CONFIG_MACB0_PHY) < 0)
ret += -1;
CONFIG_MACB0_PHY) >= 0)
ret++;
#endif
return ret;
}
......@@ -22,6 +22,7 @@
*/
#include <common.h>
#include <miiphy.h>
#include <netdev.h>
#include <nand.h>
#include <asm/io.h>
......@@ -59,9 +60,16 @@ void board_nand_init()
int board_eth_init(bd_t *bis)
{
int ret = 0;
#if defined(CONFIG_DESIGNWARE_ETH)
return designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY);
#else
return -1;
u32 interface = PHY_INTERFACE_MODE_MII;
#if defined(CONFIG_DW_AUTONEG)
interface = PHY_INTERFACE_MODE_GMII;
#endif
if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_DW0_PHY,
interface) >= 0)
ret++;
#endif
return ret;
}
......@@ -171,6 +171,13 @@ static int dw_eth_init(struct eth_device *dev, bd_t *bis)
if (priv->speed != SPEED_1000M)
conf |= MII_PORTSELECT;
if ((priv->interface != PHY_INTERFACE_MODE_MII) &&
(priv->interface != PHY_INTERFACE_MODE_GMII)) {
if (priv->speed == SPEED_100M)
conf |= FES_100;
}
if (priv->duplex == FULL_DUPLEX)
conf |= FULLDPLXMODE;
......@@ -531,7 +538,7 @@ static int dw_mii_write(const char *devname, u8 addr, u8 reg, u16 val)
}
#endif
int designware_initialize(u32 id, ulong base_addr, u32 phy_addr)
int designware_initialize(u32 id, ulong base_addr, u32 phy_addr, u32 interface)
{
struct eth_device *dev;
struct dw_eth_dev *priv;
......@@ -565,6 +572,7 @@ int designware_initialize(u32 id, ulong base_addr, u32 phy_addr)
DW_DMA_BASE_OFFSET);
priv->address = phy_addr;
priv->phy_configured = 0;
priv->interface = interface;
if (mac_reset(dev) < 0)
return -1;
......
......@@ -234,6 +234,7 @@ struct dmamacdescr {
struct dw_eth_dev {
u32 address;
u32 interface;
u32 speed;
u32 duplex;
u32 tx_currdescnum;
......
......@@ -52,7 +52,7 @@ int calxedaxgmac_initialize(u32 id, ulong base_addr);
int cs8900_initialize(u8 dev_num, int base_addr);
int davinci_emac_initialize(void);
int dc21x4x_initialize(bd_t *bis);
int designware_initialize(u32 id, ulong base_addr, u32 phy_addr);
int designware_initialize(u32 id, ulong base_addr, u32 phy_addr, u32 interface);
int dm9000_initialize(bd_t *bis);
int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr);
int e1000_initialize(bd_t *bis);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment