|
@@ -73,6 +73,11 @@ static inline int board_is_idk(void)
|
|
return !strncmp(header.config, "SKU#02", 6);
|
|
return !strncmp(header.config, "SKU#02", 6);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int board_is_gp_evm(void)
|
|
|
|
+{
|
|
|
|
+ return !strncmp("A33515BB", header.name, 8);
|
|
|
|
+}
|
|
|
|
+
|
|
int board_is_evm_15_or_later(void)
|
|
int board_is_evm_15_or_later(void)
|
|
{
|
|
{
|
|
return (!strncmp("A33515BB", header.name, 8) &&
|
|
return (!strncmp("A33515BB", header.name, 8) &&
|
|
@@ -466,6 +471,28 @@ int board_eth_init(bd_t *bis)
|
|
printf("Error %d registering CPSW switch\n", rv);
|
|
printf("Error %d registering CPSW switch\n", rv);
|
|
else
|
|
else
|
|
n += rv;
|
|
n += rv;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ *
|
|
|
|
+ * CPSW RGMII Internal Delay Mode is not supported in all PVT
|
|
|
|
+ * operating points. So we must set the TX clock delay feature
|
|
|
|
+ * in the AR8051 PHY. Since we only support a single ethernet
|
|
|
|
+ * device in U-Boot, we only do this for the first instance.
|
|
|
|
+ */
|
|
|
|
+#define AR8051_PHY_DEBUG_ADDR_REG 0x1d
|
|
|
|
+#define AR8051_PHY_DEBUG_DATA_REG 0x1e
|
|
|
|
+#define AR8051_DEBUG_RGMII_CLK_DLY_REG 0x5
|
|
|
|
+#define AR8051_RGMII_TX_CLK_DLY 0x100
|
|
|
|
+
|
|
|
|
+ if (board_is_evm_sk() || board_is_gp_evm()) {
|
|
|
|
+ const char *devname;
|
|
|
|
+ devname = miiphy_get_current_dev();
|
|
|
|
+
|
|
|
|
+ miiphy_write(devname, 0x0, AR8051_PHY_DEBUG_ADDR_REG,
|
|
|
|
+ AR8051_DEBUG_RGMII_CLK_DLY_REG);
|
|
|
|
+ miiphy_write(devname, 0x0, AR8051_PHY_DEBUG_DATA_REG,
|
|
|
|
+ AR8051_RGMII_TX_CLK_DLY);
|
|
|
|
+ }
|
|
#endif
|
|
#endif
|
|
try_usbether:
|
|
try_usbether:
|
|
#if defined(CONFIG_USB_ETHER) && !defined(CONFIG_SPL_BUILD)
|
|
#if defined(CONFIG_USB_ETHER) && !defined(CONFIG_SPL_BUILD)
|