|
@@ -265,37 +265,31 @@ phy_interface_t hns_mac_get_phy_if(struct hns_mac_cb *mac_cb)
|
|
|
{
|
|
|
u32 mode;
|
|
|
u32 reg;
|
|
|
- u32 shift;
|
|
|
- u32 phy_offset;
|
|
|
bool is_ver1 = AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver);
|
|
|
int mac_id = mac_cb->mac_id;
|
|
|
- phy_interface_t phy_if = PHY_INTERFACE_MODE_NA;
|
|
|
+ phy_interface_t phy_if;
|
|
|
|
|
|
- if (is_ver1 && HNS_DSAF_IS_DEBUG(mac_cb->dsaf_dev)) {
|
|
|
- phy_if = PHY_INTERFACE_MODE_SGMII;
|
|
|
- } else if (mac_id >= 0 && mac_id <= 3 &&
|
|
|
- !HNS_DSAF_IS_DEBUG(mac_cb->dsaf_dev)) {
|
|
|
- reg = is_ver1 ? HNS_MAC_HILINK4_REG : HNS_MAC_HILINK4V2_REG;
|
|
|
- mode = dsaf_read_sub(mac_cb->dsaf_dev, reg);
|
|
|
- /* mac_id 0, 1, 2, 3 ---> hilink4 lane 0, 1, 2, 3 */
|
|
|
- shift = is_ver1 ? 0 : mac_id;
|
|
|
- if (dsaf_get_bit(mode, shift))
|
|
|
- phy_if = PHY_INTERFACE_MODE_XGMII;
|
|
|
+ if (is_ver1) {
|
|
|
+ if (HNS_DSAF_IS_DEBUG(mac_cb->dsaf_dev))
|
|
|
+ return PHY_INTERFACE_MODE_SGMII;
|
|
|
+
|
|
|
+ if (mac_id >= 0 && mac_id <= 3)
|
|
|
+ reg = HNS_MAC_HILINK4_REG;
|
|
|
else
|
|
|
- phy_if = PHY_INTERFACE_MODE_SGMII;
|
|
|
- } else {
|
|
|
- reg = is_ver1 ? HNS_MAC_HILINK3_REG : HNS_MAC_HILINK3V2_REG;
|
|
|
- mode = dsaf_read_sub(mac_cb->dsaf_dev, reg);
|
|
|
- /* mac_id 4, 5,---> hilink3 lane 2, 3
|
|
|
- * debug port 0(6), 1(7) ---> hilink3 lane 0, 1
|
|
|
- */
|
|
|
- phy_offset = mac_cb->dsaf_dev->reset_offset - 1;
|
|
|
- shift = is_ver1 ? 0 : mac_id >= 4 ? mac_id - 2 : phy_offset;
|
|
|
- if (dsaf_get_bit(mode, shift))
|
|
|
- phy_if = PHY_INTERFACE_MODE_XGMII;
|
|
|
+ reg = HNS_MAC_HILINK3_REG;
|
|
|
+ } else{
|
|
|
+ if (!HNS_DSAF_IS_DEBUG(mac_cb->dsaf_dev) && mac_id <= 3)
|
|
|
+ reg = HNS_MAC_HILINK4V2_REG;
|
|
|
else
|
|
|
- phy_if = PHY_INTERFACE_MODE_SGMII;
|
|
|
+ reg = HNS_MAC_HILINK3V2_REG;
|
|
|
}
|
|
|
+
|
|
|
+ mode = dsaf_read_sub(mac_cb->dsaf_dev, reg);
|
|
|
+ if (dsaf_get_bit(mode, mac_cb->port_mode_off))
|
|
|
+ phy_if = PHY_INTERFACE_MODE_XGMII;
|
|
|
+ else
|
|
|
+ phy_if = PHY_INTERFACE_MODE_SGMII;
|
|
|
+
|
|
|
return phy_if;
|
|
|
}
|
|
|
|