net: hns: delete redundancy ring enable operations
[deliverable/linux.git] / drivers / net / ethernet / hisilicon / hns / hns_dsaf_misc.c
index 96cb628a7c5f626d6f764984d0b56a10c296d237..aff9d779156d08b62437fca197697e986e6bc939 100644 (file)
@@ -271,7 +271,11 @@ static void hns_dsaf_ge_srst_by_port(struct dsaf_device *dsaf_dev, u32 port,
                }
        } else {
                reg_val_1 = 0x15540 << dsaf_dev->reset_offset;
-               reg_val_2 = 0x100 << dsaf_dev->reset_offset;
+
+               if (AE_IS_VER1(dsaf_dev->dsaf_ver))
+                       reg_val_2 = 0x100 << dsaf_dev->reset_offset;
+               else
+                       reg_val_2 = 0x40 << dsaf_dev->reset_offset;
 
                if (!dereset) {
                        dsaf_write_sub(dsaf_dev, DSAF_SUB_SC_GE_RESET_REQ1_REG,
@@ -431,11 +435,6 @@ int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt)
  */
 static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en)
 {
-       /* port 0-3 hilink4 base is serdes_vaddr + 0x00280000
-        * port 4-7 hilink3 base is serdes_vaddr + 0x00200000
-        */
-       u8 *base_addr = (u8 *)mac_cb->serdes_vaddr +
-                      (mac_cb->mac_id <= 3 ? 0x00280000 : 0x00200000);
        const u8 lane_id[] = {
                0,      /* mac 0 -> lane 0 */
                1,      /* mac 1 -> lane 1 */
@@ -461,11 +460,30 @@ static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en)
        }
 
        if (mac_cb->serdes_ctrl) {
-               u32 origin = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset);
+               u32 origin;
+
+               if (!AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver)) {
+#define HILINK_ACCESS_SEL_CFG          0x40008
+                       /* hilink4 & hilink3 use the same xge training and
+                        * xge u adaptor. There is a hilink access sel cfg
+                        * register to select which one to be configed
+                        */
+                       if ((!HNS_DSAF_IS_DEBUG(mac_cb->dsaf_dev)) &&
+                           (mac_cb->mac_id <= 3))
+                               dsaf_write_syscon(mac_cb->serdes_ctrl,
+                                                 HILINK_ACCESS_SEL_CFG, 0);
+                       else
+                               dsaf_write_syscon(mac_cb->serdes_ctrl,
+                                                 HILINK_ACCESS_SEL_CFG, 3);
+               }
+
+               origin = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset);
 
                dsaf_set_field(origin, 1ull << 10, 10, en);
                dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin);
        } else {
+               u8 *base_addr = (u8 *)mac_cb->serdes_vaddr +
+                               (mac_cb->mac_id <= 3 ? 0x00280000 : 0x00200000);
                dsaf_set_reg_field(base_addr, reg_offset, 1ull << 10, 10, en);
        }
 
This page took 0.025 seconds and 5 git commands to generate.