OpenWrt – Diff between revs 2 and 3

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 2 Rev 3
Line 126... Line 126...
126   126  
127 return t; 127 return t;
Line 128... Line 128...
128 } 128 }
129   -  
130 static void -  
131 ar8327_phy_rgmii_set(struct ar8xxx_priv *priv, struct phy_device *phydev) -  
132 { -  
133 u16 phy_val = 0; -  
134 int phyaddr = phydev->mdio.addr; -  
135 struct device_node *np = phydev->mdio.dev.of_node; -  
136   -  
137 if (!np) -  
138 return; -  
139   -  
140 if (!of_property_read_bool(np, "qca,phy-rgmii-en")) { -  
141 pr_err("ar8327: qca,phy-rgmii-en is not specified\n"); -  
142 return; -  
143 } -  
144 ar8xxx_phy_dbg_read(priv, phyaddr, -  
145 AR8327_PHY_MODE_SEL, &phy_val); -  
146 phy_val |= AR8327_PHY_MODE_SEL_RGMII; -  
147 ar8xxx_phy_dbg_write(priv, phyaddr, -  
148 AR8327_PHY_MODE_SEL, phy_val); -  
149   -  
150 /* set rgmii tx clock delay if needed */ -  
151 if (!of_property_read_bool(np, "qca,txclk-delay-en")) { -  
152 pr_err("ar8327: qca,txclk-delay-en is not specified\n"); -  
153 return; -  
154 } -  
155 ar8xxx_phy_dbg_read(priv, phyaddr, -  
156 AR8327_PHY_SYS_CTRL, &phy_val); -  
157 phy_val |= AR8327_PHY_SYS_CTRL_RGMII_TX_DELAY; -  
158 ar8xxx_phy_dbg_write(priv, phyaddr, -  
159 AR8327_PHY_SYS_CTRL, phy_val); -  
160   -  
161 /* set rgmii rx clock delay if needed */ -  
162 if (!of_property_read_bool(np, "qca,rxclk-delay-en")) { -  
163 pr_err("ar8327: qca,rxclk-delay-en is not specified\n"); -  
164 return; -  
165 } -  
166 ar8xxx_phy_dbg_read(priv, phyaddr, -  
167 AR8327_PHY_TEST_CTRL, &phy_val); -  
168 phy_val |= AR8327_PHY_TEST_CTRL_RGMII_RX_DELAY; -  
169 ar8xxx_phy_dbg_write(priv, phyaddr, -  
170 AR8327_PHY_TEST_CTRL, phy_val); -  
171 } -  
172   129  
173 static void 130 static void
174 ar8327_phy_fixup(struct ar8xxx_priv *priv, int phy) 131 ar8327_phy_fixup(struct ar8xxx_priv *priv, int phy)
175 { 132 {
176 switch (priv->chip_rev) { 133 switch (priv->chip_rev) {
Line 547... Line 504...
547 if (chip_is_ar8337(priv) && !pdata->pad0_cfg->mac06_exchange_dis) 504 if (chip_is_ar8337(priv) && !pdata->pad0_cfg->mac06_exchange_dis)
548 t |= AR8337_PAD_MAC06_EXCHANGE_EN; 505 t |= AR8337_PAD_MAC06_EXCHANGE_EN;
549 ar8xxx_write(priv, AR8327_REG_PAD0_MODE, t); 506 ar8xxx_write(priv, AR8327_REG_PAD0_MODE, t);
Line 550... Line 507...
550   507  
-   508 t = ar8327_get_pad_cfg(pdata->pad5_cfg);
-   509 if (chip_is_ar8337(priv)) {
-   510 /*
-   511 * Workaround: RGMII RX delay setting needs to be
-   512 * always specified for AR8337 to avoid port 5
-   513 * RX hang on high traffic / flood conditions
-   514 */
-   515 t |= AR8327_PAD_RGMII_RXCLK_DELAY_EN;
551 t = ar8327_get_pad_cfg(pdata->pad5_cfg); 516 }
552 ar8xxx_write(priv, AR8327_REG_PAD5_MODE, t); 517 ar8xxx_write(priv, AR8327_REG_PAD5_MODE, t);
553 t = ar8327_get_pad_cfg(pdata->pad6_cfg); 518 t = ar8327_get_pad_cfg(pdata->pad6_cfg);
Line 554... Line 519...
554 ar8xxx_write(priv, AR8327_REG_PAD6_MODE, t); 519 ar8xxx_write(priv, AR8327_REG_PAD6_MODE, t);
Line 711... Line 676...
711 AR8327_MODULE_EN_MIB); 676 AR8327_MODULE_EN_MIB);
Line 712... Line 677...
712   677  
713 /* Disable EEE on all phy's due to stability issues */ 678 /* Disable EEE on all phy's due to stability issues */
714 for (i = 0; i < AR8XXX_NUM_PHYS; i++) 679 for (i = 0; i < AR8XXX_NUM_PHYS; i++)
-   680 data->eee[i] = false;
-   681  
-   682 if (chip_is_ar8337(priv)) {
-   683 /* Update HOL registers with values suggested by QCA switch team */
-   684 for (i = 0; i < AR8327_NUM_PORTS; i++) {
-   685 if (i == AR8216_PORT_CPU || i == 5 || i == 6) {
-   686 t = 0x3 << AR8327_PORT_HOL_CTRL0_EG_PRI0_BUF_S;
-   687 t |= 0x4 << AR8327_PORT_HOL_CTRL0_EG_PRI1_BUF_S;
-   688 t |= 0x4 << AR8327_PORT_HOL_CTRL0_EG_PRI2_BUF_S;
-   689 t |= 0x4 << AR8327_PORT_HOL_CTRL0_EG_PRI3_BUF_S;
-   690 t |= 0x6 << AR8327_PORT_HOL_CTRL0_EG_PRI4_BUF_S;
-   691 t |= 0x8 << AR8327_PORT_HOL_CTRL0_EG_PRI5_BUF_S;
-   692 t |= 0x1e << AR8327_PORT_HOL_CTRL0_EG_PORT_BUF_S;
-   693 } else {
-   694 t = 0x3 << AR8327_PORT_HOL_CTRL0_EG_PRI0_BUF_S;
-   695 t |= 0x4 << AR8327_PORT_HOL_CTRL0_EG_PRI1_BUF_S;
-   696 t |= 0x6 << AR8327_PORT_HOL_CTRL0_EG_PRI2_BUF_S;
-   697 t |= 0x8 << AR8327_PORT_HOL_CTRL0_EG_PRI3_BUF_S;
-   698 t |= 0x19 << AR8327_PORT_HOL_CTRL0_EG_PORT_BUF_S;
-   699 }
-   700 ar8xxx_write(priv, AR8327_REG_PORT_HOL_CTRL0(i), t);
-   701  
-   702 t = 0x6 << AR8327_PORT_HOL_CTRL1_ING_BUF_S;
-   703 t |= AR8327_PORT_HOL_CTRL1_EG_PRI_BUF_EN;
-   704 t |= AR8327_PORT_HOL_CTRL1_EG_PORT_BUF_EN;
-   705 t |= AR8327_PORT_HOL_CTRL1_WRED_EN;
-   706 ar8xxx_rmw(priv, AR8327_REG_PORT_HOL_CTRL1(i),
-   707 AR8327_PORT_HOL_CTRL1_ING_BUF |
-   708 AR8327_PORT_HOL_CTRL1_EG_PRI_BUF_EN |
-   709 AR8327_PORT_HOL_CTRL1_EG_PORT_BUF_EN |
-   710 AR8327_PORT_HOL_CTRL1_WRED_EN,
-   711 t);
-   712 }
715 data->eee[i] = false; 713 }
Line 716... Line 714...
716 } 714 }
717   715  
718 static void 716 static void
Line 1098... Line 1096...
1098 struct arl_entry *a, u32 *status, enum arl_op op) 1096 struct arl_entry *a, u32 *status, enum arl_op op)
1099 { 1097 {
1100 struct mii_bus *bus = priv->mii_bus; 1098 struct mii_bus *bus = priv->mii_bus;
1101 u16 r2, page; 1099 u16 r2, page;
1102 u16 r1_data0, r1_data1, r1_data2, r1_func; 1100 u16 r1_data0, r1_data1, r1_data2, r1_func;
1103 u32 val0, val1, val2; 1101 u32 t, val0, val1, val2;
-   1102 int i;
Line 1104... Line 1103...
1104   1103  
1105 split_addr(AR8327_REG_ATU_DATA0, &r1_data0, &r2, &page); 1104 split_addr(AR8327_REG_ATU_DATA0, &r1_data0, &r2, &page);
Line 1106... Line 1105...
1106 r2 |= 0x10; 1105 r2 |= 0x10;
Line 1135... Line 1134...
1135   1134  
1136 *status = val2 & AR8327_ATU_STATUS; 1135 *status = val2 & AR8327_ATU_STATUS;
1137 if (!*status) 1136 if (!*status)
Line -... Line 1137...
-   1137 break;
-   1138  
1138 break; 1139 i = 0;
-   1140 t = AR8327_ATU_PORT0;
-   1141 while (!(val1 & t) && ++i < AR8327_NUM_PORTS)
-   1142 t <<= 1;
1139   1143  
1140 a->portmap = (val1 & AR8327_ATU_PORTS) >> AR8327_ATU_PORTS_S; 1144 a->port = i;
1141 a->mac[0] = (val0 & AR8327_ATU_ADDR0) >> AR8327_ATU_ADDR0_S; 1145 a->mac[0] = (val0 & AR8327_ATU_ADDR0) >> AR8327_ATU_ADDR0_S;
1142 a->mac[1] = (val0 & AR8327_ATU_ADDR1) >> AR8327_ATU_ADDR1_S; 1146 a->mac[1] = (val0 & AR8327_ATU_ADDR1) >> AR8327_ATU_ADDR1_S;
1143 a->mac[2] = (val0 & AR8327_ATU_ADDR2) >> AR8327_ATU_ADDR2_S; 1147 a->mac[2] = (val0 & AR8327_ATU_ADDR2) >> AR8327_ATU_ADDR2_S;
Line 1492... Line 1496...
1492 .read_port_eee_status = ar8327_read_port_eee_status, 1496 .read_port_eee_status = ar8327_read_port_eee_status,
1493 .atu_flush = ar8327_atu_flush, 1497 .atu_flush = ar8327_atu_flush,
1494 .atu_flush_port = ar8327_atu_flush_port, 1498 .atu_flush_port = ar8327_atu_flush_port,
1495 .vtu_flush = ar8327_vtu_flush, 1499 .vtu_flush = ar8327_vtu_flush,
1496 .vtu_load_vlan = ar8327_vtu_load_vlan, 1500 .vtu_load_vlan = ar8327_vtu_load_vlan,
1497 .phy_fixup = ar8327_phy_fixup, -  
1498 .set_mirror_regs = ar8327_set_mirror_regs, 1501 .set_mirror_regs = ar8327_set_mirror_regs,
1499 .get_arl_entry = ar8327_get_arl_entry, 1502 .get_arl_entry = ar8327_get_arl_entry,
1500 .sw_hw_apply = ar8327_sw_hw_apply, 1503 .sw_hw_apply = ar8327_sw_hw_apply,
Line 1501... Line 1504...
1501   1504  
Line 1531... Line 1534...
1531 .vtu_load_vlan = ar8327_vtu_load_vlan, 1534 .vtu_load_vlan = ar8327_vtu_load_vlan,
1532 .phy_fixup = ar8327_phy_fixup, 1535 .phy_fixup = ar8327_phy_fixup,
1533 .set_mirror_regs = ar8327_set_mirror_regs, 1536 .set_mirror_regs = ar8327_set_mirror_regs,
1534 .get_arl_entry = ar8327_get_arl_entry, 1537 .get_arl_entry = ar8327_get_arl_entry,
1535 .sw_hw_apply = ar8327_sw_hw_apply, 1538 .sw_hw_apply = ar8327_sw_hw_apply,
1536 .phy_rgmii_set = ar8327_phy_rgmii_set, -  
Line 1537... Line 1539...
1537   1539  
1538 .num_mibs = ARRAY_SIZE(ar8236_mibs), 1540 .num_mibs = ARRAY_SIZE(ar8236_mibs),
1539 .mib_decs = ar8236_mibs, 1541 .mib_decs = ar8236_mibs,
1540 .mib_func = AR8327_REG_MIB_FUNC 1542 .mib_func = AR8327_REG_MIB_FUNC