summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe SAVE2012-08-24 16:34:21 +0200
committerCyril Jourdan2012-09-20 16:56:19 +0200
commit8ee108bc6d5016718ba1fac4287c6e0cbea29a51 (patch)
treeede12ac948c00a78d4aefbe30cbf486fb5782dd4
parentb9dca0525213300b05e2bd6224d9370cb89599a8 (diff)
cleo/{linux, buildroot}: handle eth clks and rgmii on MSE500, refs #3318
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/arizona/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/mse500/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/mse500dini_300/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/scr310/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/spk300/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/spk300g/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/spk310/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/spr300/linux26.config2
-rw-r--r--cleopatre/buildroot/target/device/Spidcom/spr310/linux26.config2
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig7
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/spc300-devices.c16
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c21
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.h1
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.c70
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.h1
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_reg.h3
16 files changed, 118 insertions, 19 deletions
diff --git a/cleopatre/buildroot/target/device/Spidcom/arizona/linux26.config b/cleopatre/buildroot/target/device/Spidcom/arizona/linux26.config
index b18854bd2f..0bd9aac92e 100644
--- a/cleopatre/buildroot/target/device/Spidcom/arizona/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/arizona/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/mse500/linux26.config b/cleopatre/buildroot/target/device/Spidcom/mse500/linux26.config
index 24f59607eb..5435f593a9 100644
--- a/cleopatre/buildroot/target/device/Spidcom/mse500/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/mse500/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_GIC_64_LINES=y
CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS=y
# CONFIG_CHIP_FEATURE_SPCPLL is not set
CONFIG_CHIP_FEATURE_MSEPLL=y
+# CONFIG_CHIP_FEATURE_SPCETH is not set
+CONFIG_CHIP_FEATURE_MSEETH=y
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/mse500dini_300/linux26.config b/cleopatre/buildroot/target/device/Spidcom/mse500dini_300/linux26.config
index f7ff1f00ec..1eab86ceff 100644
--- a/cleopatre/buildroot/target/device/Spidcom/mse500dini_300/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/mse500dini_300/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_GIC_64_LINES=y
CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS=y
# CONFIG_CHIP_FEATURE_SPCPLL is not set
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+# CONFIG_CHIP_FEATURE_SPCETH is not set
+# CONFIG_CHIP_FEATURE_MSEETH is not set
# CONFIG_HAVE_MTD_SPC300_LARGE is not set
CONFIG_HAVE_MTD_SPC300_MEDIUM=y
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/scr310/linux26.config b/cleopatre/buildroot/target/device/Spidcom/scr310/linux26.config
index d54bc8ce9d..7142b8d835 100644
--- a/cleopatre/buildroot/target/device/Spidcom/scr310/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/scr310/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
# CONFIG_HAVE_MTD_SPC300_LARGE is not set
CONFIG_HAVE_MTD_SPC300_MEDIUM=y
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/spk300/linux26.config b/cleopatre/buildroot/target/device/Spidcom/spk300/linux26.config
index 2d61166143..c55d0fb339 100644
--- a/cleopatre/buildroot/target/device/Spidcom/spk300/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/spk300/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/spk300g/linux26.config b/cleopatre/buildroot/target/device/Spidcom/spk300g/linux26.config
index 8d968a54f4..13b5b7d8cc 100644
--- a/cleopatre/buildroot/target/device/Spidcom/spk300g/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/spk300g/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/spk310/linux26.config b/cleopatre/buildroot/target/device/Spidcom/spk310/linux26.config
index 83ad5906a6..093c8d682d 100644
--- a/cleopatre/buildroot/target/device/Spidcom/spk310/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/spk310/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/spr300/linux26.config b/cleopatre/buildroot/target/device/Spidcom/spr300/linux26.config
index 1a4c978797..04cd6f7b0d 100644
--- a/cleopatre/buildroot/target/device/Spidcom/spr300/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/spr300/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
# CONFIG_HAVE_MTD_SPC300_LARGE is not set
CONFIG_HAVE_MTD_SPC300_MEDIUM=y
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/buildroot/target/device/Spidcom/spr310/linux26.config b/cleopatre/buildroot/target/device/Spidcom/spr310/linux26.config
index bf066205a0..4288a00f44 100644
--- a/cleopatre/buildroot/target/device/Spidcom/spr310/linux26.config
+++ b/cleopatre/buildroot/target/device/Spidcom/spr310/linux26.config
@@ -201,6 +201,8 @@ CONFIG_CHIP_FEATURE_PCM=y
# CONFIG_CHIP_FEATURE_EXTRA_NVRAM_FIELDS is not set
CONFIG_CHIP_FEATURE_SPCPLL=y
# CONFIG_CHIP_FEATURE_MSEPLL is not set
+CONFIG_CHIP_FEATURE_SPCETH=y
+# CONFIG_CHIP_FEATURE_MSEETH is not set
CONFIG_HAVE_MTD_SPC300_LARGE=y
# CONFIG_HAVE_MTD_SPC300_MEDIUM is not set
# CONFIG_HAVE_MTD_SPC300_SMALL is not set
diff --git a/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig b/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig
index 36c64b4ffe..f6bc3fb574 100644
--- a/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig
+++ b/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/Kconfig
@@ -100,6 +100,7 @@ config CHIP_SPC300
select CHIP_FEATURE_I2S
select CHIP_FEATURE_PCM
select CHIP_FEATURE_SPCPLL
+ select CHIP_FEATURE_SPCETH
config CHIP_SPC300ARIZONA
def_bool n
@@ -111,6 +112,7 @@ config CHIP_SPC300ARIZONA
select CHIP_FEATURE_I2S
select CHIP_FEATURE_PCM
select CHIP_FEATURE_SPCPLL
+ select CHIP_FEATURE_SPCETH
config CHIP_MSE500DINI_300
def_bool n
@@ -130,6 +132,7 @@ config CHIP_MSE500
select CHIP_FEATURE_GIC_64_LINES
select CHIP_FEATURE_EXTRA_NVRAM_FIELDS
select CHIP_FEATURE_MSEPLL
+ select CHIP_FEATURE_MSEETH
# Chip features (CHIP_FEATURE_*)
# ==============================
@@ -171,6 +174,10 @@ config CHIP_FEATURE_SPCPLL
def_bool n
config CHIP_FEATURE_MSEPLL
def_bool n
+config CHIP_FEATURE_SPCETH
+ def_bool n
+config CHIP_FEATURE_MSEETH
+ def_bool n
source "arch/arm/mach-spc300/Kconfig.flash"
diff --git a/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/spc300-devices.c b/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/spc300-devices.c
index 8ba7b14845..5bca2a5e4f 100644
--- a/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/spc300-devices.c
+++ b/cleopatre/linux-2.6.25.10-spc300/arch/arm/mach-spc300/spc300-devices.c
@@ -80,6 +80,7 @@ static struct synop3504_platform_data spc300_ethernet_data = {
.support_mii = 1,
.support_rmii = 0,
.support_gmii = 0,
+ .support_rgmii = 0,
.phy_addr = 0,
.mac_addr = {0x00, 0x13, 0xD7, 0x00, 0x00, 0x00}
};
@@ -99,12 +100,6 @@ static struct resource spc300_ethernet_resource[] = {
.end = INT_ETH,
.flags = IORESOURCE_IRQ,
},
- //TODO: create a PHY driver
-/* [2] = {
- .start = INT_ETH_PHY,
- .end = INT_ETH_PHY,
- .flags = IORESOURCE_IRQ,
- },*/
};
static struct platform_device spc300_ethernet_device = {
.name = "synopsys3504",
@@ -398,16 +393,25 @@ void spc300_add_device_ethernet(void)
spc300_ethernet_data.support_mii = 0;
spc300_ethernet_data.support_rmii = 1;
spc300_ethernet_data.support_gmii = 0;
+ spc300_ethernet_data.support_rgmii = 0;
break;
case 2: //GMII
spc300_ethernet_data.support_mii = 0;
spc300_ethernet_data.support_rmii = 0;
spc300_ethernet_data.support_gmii = 1;
+ spc300_ethernet_data.support_rgmii = 0;
+ break;
+ case 3: //RGMII
+ spc300_ethernet_data.support_mii = 0;
+ spc300_ethernet_data.support_rmii = 0;
+ spc300_ethernet_data.support_gmii = 0;
+ spc300_ethernet_data.support_rgmii = 1;
break;
default:
spc300_ethernet_data.support_mii = 1;
spc300_ethernet_data.support_rmii = 0;
spc300_ethernet_data.support_gmii = 0;
+ spc300_ethernet_data.support_rgmii = 0;
}
//Find PHY address from NVRAM
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
index c139e3db1a..f2dd1e42d9 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
@@ -115,6 +115,7 @@ struct net_priv
{
uint32_t gmac_addr;
uint32_t dma_addr;
+ uint32_t support_rgmii;
uint32_t support_gmii;
uint32_t support_rmii;
uint32_t phy_addr;
@@ -1352,7 +1353,7 @@ static int synop3504_mii_probe(struct net_device *dev)
pdata = priv->pdev->dev.platform_data;
phydev = priv->mii_bus->phy_map[pdata->phy_addr];
- if (!phydev)
+ if (!phydev)
{
printk (KERN_ERR "%s: no PHY found\n", dev->name);
return -1;
@@ -1360,16 +1361,13 @@ static int synop3504_mii_probe(struct net_device *dev)
// attach the mac to the phy
if (pdata && pdata->support_gmii)
- {
phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_GMII);
- }
+ else if (pdata && pdata->support_rgmii)
+ phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_RGMII);
+ else if (pdata && pdata->support_rmii)
+ phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_RMII);
else
- {
- if (pdata && pdata->support_rmii)
- phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_RMII);
- else
- phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_MII);
- }
+ phydev = phy_connect(dev, phydev->dev.bus_id, &synop3504_handle_link_change, 0, PHY_INTERFACE_MODE_MII);
if (IS_ERR(phydev))
{
@@ -1612,6 +1610,8 @@ static int synop3504_init(struct net_device *dev)
//Attach hardware layer addresses
if(priv->support_gmii)
SynopsysAttach(&priv->synop, priv->gmac_addr, priv->dma_addr, IS_GMII);
+ else if(priv->support_rgmii)
+ SynopsysAttach(&priv->synop, priv->gmac_addr, priv->dma_addr, IS_RGMII);
else if(priv->support_rmii)
SynopsysAttach(&priv->synop, priv->gmac_addr, priv->dma_addr, IS_RMII);
else
@@ -1653,7 +1653,7 @@ static int synop3504_init(struct net_device *dev)
priv->mii_if.mdio_read = mdio_read;
priv->mii_if.mdio_write = mdio_write;
priv->mii_if.phy_id = priv->phy_addr;
- priv->mii_if.supports_gmii = priv->support_gmii;
+ priv->mii_if.supports_gmii = priv->support_gmii | priv->support_rgmii;
priv->mii_if.phy_id_mask = 0x1F;
priv->mii_if.reg_num_mask = 0x1F;
@@ -1742,6 +1742,7 @@ static int __init synop3504_module_probe(struct platform_device *pdev)
dev->dev_addr[3] = pdata->mac_addr[3];
dev->dev_addr[4] = pdata->mac_addr[4];
dev->dev_addr[5] = pdata->mac_addr[5];
+ priv->support_rgmii = pdata->support_rgmii;
priv->support_gmii = pdata->support_gmii;
priv->support_rmii = pdata->support_rmii;
priv->phy_addr = pdata->phy_addr;
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.h b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.h
index 736fbf7363..487435020a 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.h
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.h
@@ -32,6 +32,7 @@ struct synop3504_platform_data {
uint8_t support_mii;
uint8_t support_rmii;
uint8_t support_gmii;
+ uint8_t support_rgmii;
uint32_t phy_addr;
uint8_t mac_addr[6];
};
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.c b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.c
index e6db3e1160..0566a7258a 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.c
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.c
@@ -197,15 +197,21 @@ void SynopsysInit(Synopsys *synop, uint32_t txaddr, uint32_t rxaddr)
SynopsysWriteMacReg(synop, MmcIntrMaskTx, 0xFFFFFFFF);
SynopsysWriteMacReg(synop, MmcIntrMaskRx, 0xFFFFFFFF);
SynopsysWriteMacReg(synop, GmacFrameFilter, GmacFilterOff|GmacPassControl2|GmacBroadcastEnable);
- if(synop->mode == IS_GMII)
+ if(synop->mode == IS_RGMII)
+ {
+ SynopsysWriteMacReg(synop, GmacConfig, GmacRGMIIEnable|GmacWatchdogDisable|GmacJabberDisable|
+ GmacSelectGmii|GmacLoopbackOff|GmacFESpeed10|GmacFullDuplex|
+ GmacTxEnable|GmacRxEnable);
+ }
+ else if(synop->mode == IS_GMII)
{
- SynopsysWriteMacReg(synop, GmacConfig, GmacWatchdogDisable|GmacJabberDisable|
+ SynopsysWriteMacReg(synop, GmacConfig, GmacRGMIIDisable|GmacWatchdogDisable|GmacJabberDisable|
GmacSelectGmii|GmacLoopbackOff|GmacFESpeed10|GmacFullDuplex|
GmacTxEnable|GmacRxEnable);
}
else
{
- SynopsysWriteMacReg(synop, GmacConfig, GmacWatchdogDisable|GmacJabberDisable|
+ SynopsysWriteMacReg(synop, GmacConfig, GmacRGMIIDisable|GmacWatchdogDisable|GmacJabberDisable|
GmacSelectMii|GmacLoopbackOff|GmacFESpeed10|GmacFullDuplex|
GmacTxEnable|GmacRxEnable);
}
@@ -229,6 +235,62 @@ void SynopsysInit(Synopsys *synop, uint32_t txaddr, uint32_t rxaddr)
*/
void SynopsysSetMiiClkCap(Synopsys *synop, uint32_t speed)
{
+#if defined(CONFIG_CHIP_FEATURE_MSEETH)
+
+ uint32_t timeout;
+
+ if(synop->mode == IS_GMII)
+ {
+ if(speed == 1000)
+ {
+ /* 1G was negotiate switch to GMII mode */
+ RB_CLK_CMD_ETH1_TX_VA = CLK_CMD_OFF;
+ RB_CLK_SEL_ETH1_TX_VA = CLK_SEL_ETH_TX_RX_PLL_CLK;
+ RB_CLK_CMD_ETH1_TX_VA = CLK_CMD_PLL_ON;
+ for (timeout=0xF;
+ (RB_CLK_STAT_ETH1_TX_VA != CLK_ETH_TX_RX_PLL_IS_ON) && timeout;
+ timeout--)
+ ;
+ }
+ else
+ {
+ /* 1G wasn't negotiate swith to MII mode */
+ RB_CLK_CMD_ETH1_TX_VA = CLK_CMD_OFF;
+ RB_CLK_SEL_ETH1_TX_VA = CLK_SEL_ETH_TX_RX_MII_CLK;
+ RB_CLK_CMD_ETH1_TX_VA = CLK_CMD_MII_ON;
+ for (timeout=0xF;
+ (RB_CLK_STAT_ETH1_TX_VA != CLK_ETH_TX_RX_MII_IS_ON) && timeout;
+ timeout--)
+ ;
+ }
+ }
+
+ if(synop->mode == IS_RMII)
+ {
+ if (speed == 10)
+ {
+ RB_CLK_DIV_ETH1_TX_PLL_VA = CLK_ETH_DIV_TX_PLL_100;
+ RB_CLK_DIV_ETH1_RX_PLL_VA = CLK_ETH_DIV_RX_PLL_100;
+ }
+ else
+ {
+ RB_CLK_DIV_ETH1_TX_PLL_VA = CLK_ETH_DIV_TX_PLL_10;
+ RB_CLK_DIV_ETH1_RX_PLL_VA = CLK_ETH_DIV_RX_PLL_10;
+ }
+ }
+
+ if(synop->mode == IS_RGMII)
+ {
+ if (speed == 1000)
+ RB_CLK_DIV_ETH1_TX_PLL_VA = CLK_ETH_DIV_TX_PLL_2;
+ else if (speed == 10)
+ RB_CLK_DIV_ETH1_TX_PLL_VA = CLK_ETH_DIV_TX_PLL_100;
+ else
+ RB_CLK_DIV_ETH1_TX_PLL_VA = CLK_ETH_DIV_TX_PLL_10;
+ }
+
+#elif defined(CONFIG_CHIP_FEATURE_SPCETH)
+
volatile uint32_t eth_cfg;
volatile uint32_t rmii_clk;
uint32_t timeout;
@@ -276,6 +338,8 @@ void SynopsysSetMiiClkCap(Synopsys *synop, uint32_t speed)
RB_ETH_CONFIG_VA = eth_cfg;
RB_CLK_DIV_ETH_25_VA = rmii_clk;
}
+
+#endif
}
/**
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.h b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.h
index df778cc7b4..edfc67c8fb 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.h
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_hw.h
@@ -156,6 +156,7 @@ typedef enum
IS_MII=0,
IS_RMII=1,
IS_GMII=2,
+ IS_RGMII=3
} mii_type;
/** Synopsys device data */
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_reg.h b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_reg.h
index 304814ebb7..4452a3cc5f 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_reg.h
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504_reg.h
@@ -193,6 +193,9 @@ enum DmaRegisters
/** GmacConfig registers field */
enum GmacConfigReg
{
+ GmacRGMIIEnable = 0x01000000, //Enable RGMII mode
+ GmacRGMIIDisable = 0x00000000, //Disable RGMII mode
+
GmacWatchdogDisable = 0x00800000, //Disable watchdog timer on Rx
GmacWatchdogEnable = 0x00000000, //Enable watchdog timer