|
@@ -47,6 +47,7 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
|
|
|
/* QE_MUX_MDIO */
|
|
|
{2, 30, 3, 0, 2}, /* QE_MUX_MDIO */
|
|
|
|
|
|
+#if defined(CONFIG_SYS_UCC_RGMII_MODE)
|
|
|
/* UCC_1_RGMII */
|
|
|
{2, 11, 2, 0, 1}, /* CLK12 */
|
|
|
{0, 0, 1, 0, 3}, /* ENET1_TXD0_SER1_TXD0 */
|
|
@@ -107,6 +108,44 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
|
|
|
{2, 17, 2, 0, 2}, /* ENET4_GRXCLK */
|
|
|
{2, 24, 1, 0, 2}, /* ENET4_GTXCLK */
|
|
|
|
|
|
+#elif defined(CONFIG_SYS_UCC_RMII_MODE)
|
|
|
+ /* UCC_1_RMII */
|
|
|
+ {2, 15, 2, 0, 1}, /* CLK16 */
|
|
|
+ {0, 0, 1, 0, 3}, /* ENET1_TXD0_SER1_TXD0 */
|
|
|
+ {0, 1, 1, 0, 3}, /* ENET1_TXD1_SER1_TXD1 */
|
|
|
+ {0, 6, 2, 0, 3}, /* ENET1_RXD0_SER1_RXD0 */
|
|
|
+ {0, 7, 2, 0, 1}, /* ENET1_RXD1_SER1_RXD1 */
|
|
|
+ {0, 4, 1, 0, 2}, /* ENET1_TX_EN_SER1_RTS_B */
|
|
|
+ {0, 12, 2, 0, 3}, /* ENET1_RX_DV_SER1_CTS_B */
|
|
|
+
|
|
|
+ /* UCC_2_RMII */
|
|
|
+ {2, 15, 2, 0, 1}, /* CLK16 */
|
|
|
+ {0, 14, 1, 0, 2}, /* ENET2_TXD0_SER2_TXD0 */
|
|
|
+ {0, 15, 1, 0, 2}, /* ENET2_TXD1_SER2_TXD1 */
|
|
|
+ {0, 20, 2, 0, 2}, /* ENET2_RXD0_SER2_RXD0 */
|
|
|
+ {0, 21, 2, 0, 1}, /* ENET2_RXD1_SER2_RXD1 */
|
|
|
+ {0, 18, 1, 0, 2}, /* ENET2_TX_EN_SER2_RTS_B */
|
|
|
+ {0, 26, 2, 0, 3}, /* ENET2_RX_DV_SER2_CTS_B */
|
|
|
+
|
|
|
+ /* UCC_3_RMII */
|
|
|
+ {2, 15, 2, 0, 1}, /* CLK16 */
|
|
|
+ {0, 29, 1, 0, 2}, /* ENET3_TXD0_SER3_TXD0 */
|
|
|
+ {0, 30, 1, 0, 3}, /* ENET3_TXD1_SER3_TXD1 */
|
|
|
+ {1, 3, 2, 0, 3}, /* ENET3_RXD0_SER3_RXD0 */
|
|
|
+ {1, 4, 2, 0, 1}, /* ENET3_RXD1_SER3_RXD1 */
|
|
|
+ {1, 1, 1, 0, 1}, /* ENET3_TX_EN_SER3_RTS_B */
|
|
|
+ {1, 9, 2, 0, 3}, /* ENET3_RX_DV_SER3_CTS_B */
|
|
|
+
|
|
|
+ /* UCC_4_RMII */
|
|
|
+ {2, 15, 2, 0, 1}, /* CLK16 */
|
|
|
+ {1, 12, 1, 0, 2}, /* ENET4_TXD0_SER4_TXD0 */
|
|
|
+ {1, 13, 1, 0, 2}, /* ENET4_TXD1_SER4_TXD1 */
|
|
|
+ {1, 18, 2, 0, 2}, /* ENET4_RXD0_SER4_RXD0 */
|
|
|
+ {1, 19, 2, 0, 1}, /* ENET4_RXD1_SER4_RXD1 */
|
|
|
+ {1, 16, 1, 0, 2}, /* ENET4_TX_EN_SER4_RTS_B */
|
|
|
+ {1, 24, 2, 0, 3}, /* ENET4_RX_DV_SER4_CTS_B */
|
|
|
+#endif
|
|
|
+
|
|
|
/* UART1 is muxed with QE PortF bit [9-12].*/
|
|
|
{5, 12, 2, 0, 3}, /* UART1_SIN */
|
|
|
{5, 9, 1, 0, 3}, /* UART1_SOUT */
|
|
@@ -128,7 +167,7 @@ int board_early_init_f (void)
|
|
|
enable_8569mds_flash_write();
|
|
|
|
|
|
#ifdef CONFIG_QE
|
|
|
- enable_8569mds_qe_mdio();
|
|
|
+ enable_8569mds_qe_uec();
|
|
|
#endif
|
|
|
|
|
|
#if CONFIG_SYS_I2C2_OFFSET
|
|
@@ -350,6 +389,61 @@ pci_init_board(void)
|
|
|
#if defined(CONFIG_OF_BOARD_SETUP)
|
|
|
void ft_board_setup(void *blob, bd_t *bd)
|
|
|
{
|
|
|
+#if defined(CONFIG_SYS_UCC_RMII_MODE)
|
|
|
+ int nodeoff, off, err;
|
|
|
+ unsigned int val;
|
|
|
+ const u32 *ph;
|
|
|
+ const u32 *index;
|
|
|
+
|
|
|
+ /* fixup device tree for supporting rmii mode */
|
|
|
+ nodeoff = -1;
|
|
|
+ while ((nodeoff = fdt_node_offset_by_compatible(blob, nodeoff,
|
|
|
+ "ucc_geth")) >= 0) {
|
|
|
+ err = fdt_setprop_string(blob, nodeoff, "tx-clock-name",
|
|
|
+ "clk16");
|
|
|
+ if (err < 0) {
|
|
|
+ printf("WARNING: could not set tx-clock-name %s.\n",
|
|
|
+ fdt_strerror(err));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = fdt_setprop_string(blob, nodeoff, "phy-connection-type",
|
|
|
+ "rmii");
|
|
|
+ if (err < 0) {
|
|
|
+ printf("WARNING: could not set phy-connection-type "
|
|
|
+ "%s.\n", fdt_strerror(err));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ index = fdt_getprop(blob, nodeoff, "cell-index", 0);
|
|
|
+ if (index == NULL) {
|
|
|
+ printf("WARNING: could not get cell-index of ucc\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ ph = fdt_getprop(blob, nodeoff, "phy-handle", 0);
|
|
|
+ if (ph == NULL) {
|
|
|
+ printf("WARNING: could not get phy-handle of ucc\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ off = fdt_node_offset_by_phandle(blob, *ph);
|
|
|
+ if (off < 0) {
|
|
|
+ printf("WARNING: could not get phy node %s.\n",
|
|
|
+ fdt_strerror(err));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ val = 0x7 + *index; /* RMII phy address starts from 0x8 */
|
|
|
+
|
|
|
+ err = fdt_setprop(blob, off, "reg", &val, sizeof(u32));
|
|
|
+ if (err < 0) {
|
|
|
+ printf("WARNING: could not set reg for phy-handle "
|
|
|
+ "%s.\n", fdt_strerror(err));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
ft_cpu_setup(blob, bd);
|
|
|
|
|
|
#ifdef CONFIG_PCIE1
|