Hello:
I 've a Custom AM335X board with Marvell's 88E1510 RGMII Ethernet Gigabit PHY and I'm not able make the Internet working.
Below is the code snippet used in linux/arch/arm/mach-omap2/board.c
/* Marvell GigaBit PHY 88E1510 */
#define MARVELL_88E15xx 0x1410dd1
#define MARVELL_MII_PAGE2_MAC_CONTROL 21
#define MARVELL_MII_PAGE_ADDRESS 22
#include <linux/marvell_phy.h>
static int marvell_phy_fixup(struct phy_device *phydev)
{
/* This disables internally transmit clock delay */
unsigned int val;
int timeout;
phy_write(phydev, MARVELL_MII_PAGE_ADDRESS, 2); /* select page 2 */
val = phy_read(phydev, MARVELL_MII_PAGE2_MAC_CONTROL);
val &= ~0x10; /* RGMII Transmit Timing Control */
phy_write(phydev, MARVELL_MII_PAGE2_MAC_CONTROL, val);
phy_write(phydev, MARVELL_MII_PAGE_ADDRESS, 0); /* back to page 0 */
/* Changes to MAC CONTROL register must be followed by software reset to take effekt */
val = phy_read(phydev, MII_BMCR);
val |= BMCR_RESET;
phy_write(phydev, MII_BMCR, val);
timeout = 100;
while (--timeout) {
if (!(phy_read(phydev, MII_BMCR) & BMCR_RESET))
break;
udelay(1);
}
if (!timeout)
printk(KERN_ERR "Marvell phy addr %d BMCR reset failed.\n", phydev->phy_id);
return 0;
}
static struct pinmux_config mv_phy_pin_mux[] = {
{"gpmc_a0.rgmii2_tctl", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a1.rgmii2_rctl", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"gpmc_a2.rgmii2_td3", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a3.rgmii2_td2", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a4.rgmii2_td1", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a5.rgmii2_td0", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a6.rgmii2_tclk", OMAP_MUX_MODE2 | AM33XX_PIN_OUTPUT},
{"gpmc_a7.rgmii2_rclk", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"gpmc_a8.rgmii2_rd3", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"gpmc_a9.rgmii2_rd2", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"gpmc_a10.rgmii2_rd1", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"gpmc_a11.rgmii2_rd0", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLDOWN},
{"mcasp0_aclkr.gpio3_18", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT_PULLUP},
{"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},
{"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
{"mii1_col.gpio3_0", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
{NULL, 0},
};
static void __init mv_phy_init(void)
{
setup_pin_mux(mv_phy_pin_mux);
am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, "0:01");
/* Marvell Phy fixup */
phy_register_fixup_for_uid(MARVELL_PHY_ID_88E1510, MARVELL_PHY_ID_MASK,
marvell_phy_fixup);
}
On the custom board;
Linux am335x-evm 3.2.0 #106 PREEMPT Wed Feb 11 17:05:13 IST 2015 armv7l GNU/Linux
[ 1.440246] davincimdio davincimdio.0: detected phy mask fffd
[ 1912.335388] net eth1: CPSW phy found : id is : 0x1410dd1
[ 1917.335968] PHY: 0:01 - Link is Up - 1000/Full
[ 1.468994] davincimdio davincimdio.0: phy[1]: device 0:01, driver Marvell 88E1510
[ 2.066650] cpsw: Detected MACID = d0:ff:50:87:d3:5e
udhcpc fails. So I've statically assigned the IP address but ping is not working.
Any kind of support is highly appreciated.
Regards,
Waman Prabhu.