Hi all,
I am trying to get my enet up and running in Linux. I am using the 6.0 dev kit.
1) I have been able to configure the pinmux for both ETH0 and ETH1.
2) Set the interface to use the external 50mhz clock.
3) Change the interface to RMII mode.
Despite all of this, the link keeps going up and down at 100mbs, and eventually defaults to 10mbs. However, I can not ping anything, even at this speed. I am at a loss as to where to look next. question: I saw in the code calls to
phy_register_fixup_for_uid(BBB_PHY_ID, BBB_PHY_MASK,beaglebone_phy_fixup);
do I need to do this for the TLK105?
Thanks!
Chuck
Here is my Pin Muxing code:
in the /arch/arm/mach-omap2/board-am335xevm.c file I added:
+/* Module pin mux for rmii1 */
+static struct pinmux_config rmii1_pin_mux[] = {
+ {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxerr.rmii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_txen.rmii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd1.rmii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_txd0.rmii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},
+ {"mii1_rxd1.rmii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_rxd0.rmii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
+ {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},
+ {"mcasp0_axr1.gpio3_20", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, // FOR INTERRUPT
+ {NULL, 0},
+};
+/* Module pin mux for rmii2 */
+static struct pinmux_config rmii2_pin_mux[] = {
+ {"gpmc_wait0.rmii2_crs_dv", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"gpmc_wpn.rmii2_rxerr", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"gpmc_a0.rmii2_txen", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},
+ {"gpmc_a4.rmii2_txd1", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},
+ {"gpmc_a5.rmii2_txd0", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},
+ {"gpmc_a10.rmii2_rxd1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"gpmc_a11.rmii2_rxd0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mii1_col.rmii2_refclk", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},
+ {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP}, // FOR INTERRUPT
+ {NULL, 0},
};
+static void rmii1_init(void)
+{
+ setup_pin_mux(rmii1_pin_mux);
+ return;
+}
+
+static void rmii2_init(void)
+{
+ setup_pin_mux(rmii2_pin_mux);
+ return;
+}
+void setup_enet (void)
+{
+/* Fillup global mac id */
+ am33xx_cpsw_macidfillup("0:1e", "0:00");
+ am33xx_cpsw_init(AM33XX_CPSW_MODE_RGMII, NULL, NULL);
+}
static void __init am335x_evm_init(void)
am33xx_cpuidle_init();
am33xx_mux_init(NULL);
omap_serial_init();
+ rmii1_init();
+ rmii2_init();
+ setup_enet();
am335x_rtc_init();
to setup the 50mhz clock as an input:
in /arch/arm/mach-omap2/control.h
@@ -372,7 +372,8 @@
#define AM33XX_CONTROL_GMII_SEL_OFFSET 0x650
#define AM33XX_RGMII_DISABLE_INT_DLY (BIT(4) | BIT(5))
#define AM33XX_MII_MODE_EN 0x0
-#define AM33XX_RMII_MODE_EN ((1 << 0) | (1 << 2))
+// Chuck Kamas, added bits 6 and 7 set to have AM335x rx the 50mhz clock, not generate it
+#define AM33XX_RMII_MODE_EN ((1 << 0) | (1 << 2) | (1<<6) | (1<<7))
#define AM33XX_RGMII_MODE_EN ((0x2 << 0) | (0x2 << 2) | \
(AM33XX_RGMII_DISABLE_INT_DLY))