OpenWrt – Diff between revs 2 and 3
?pathlinks?
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 |