net: txgbe: change LAN reset mode
authorJiawen Wu <jiawenwu@trustnetic.com>
Mon, 17 Jul 2023 02:13:33 +0000 (10:13 +0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 19 Jul 2023 00:45:09 +0000 (17:45 -0700)
The old way to do LAN reset is sending reset command to firmware. Once
firmware performs reset, it reconfigures what it needs.

In the new firmware versions, veto bit is introduced for NCSI/LLDP to
block PHY domain in LAN reset. At this point, writing register of LAN
reset directly makes the same effect as the old way. And it does not
reset MNG domain, so that veto bit does not change.

Since veto bit was never used, the old firmware is compatible with the
driver before and after this change. The new firmware needs to use with
the driver after this change if it wants to implement the new feature,
otherwise it is the same as the old firmware.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20230717021333.94181-1-jiawenwu@trustnetic.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/wangxun/libwx/wx_hw.c
drivers/net/ethernet/wangxun/libwx/wx_hw.h
drivers/net/ethernet/wangxun/txgbe/txgbe_hw.c

index ad09ab1d120956a18e6793e87df7f35cc5f4f9a7..f833c84a787680caedf83ee06b190daae9cf96ae 100644 (file)
@@ -431,71 +431,6 @@ out:
 }
 EXPORT_SYMBOL(wx_read_ee_hostif_buffer);
 
-/**
- *  wx_calculate_checksum - Calculate checksum for buffer
- *  @buffer: pointer to EEPROM
- *  @length: size of EEPROM to calculate a checksum for
- *  Calculates the checksum for some buffer on a specified length.  The
- *  checksum calculated is returned.
- **/
-static u8 wx_calculate_checksum(u8 *buffer, u32 length)
-{
-       u8 sum = 0;
-       u32 i;
-
-       if (!buffer)
-               return 0;
-
-       for (i = 0; i < length; i++)
-               sum += buffer[i];
-
-       return (u8)(0 - sum);
-}
-
-/**
- *  wx_reset_hostif - send reset cmd to fw
- *  @wx: pointer to hardware structure
- *
- *  Sends reset cmd to firmware through the manageability
- *  block.
- **/
-int wx_reset_hostif(struct wx *wx)
-{
-       struct wx_hic_reset reset_cmd;
-       int ret_val = 0;
-       int i;
-
-       reset_cmd.hdr.cmd = FW_RESET_CMD;
-       reset_cmd.hdr.buf_len = FW_RESET_LEN;
-       reset_cmd.hdr.cmd_or_resp.cmd_resv = FW_CEM_CMD_RESERVED;
-       reset_cmd.lan_id = wx->bus.func;
-       reset_cmd.reset_type = (u16)wx->reset_type;
-       reset_cmd.hdr.checksum = 0;
-       reset_cmd.hdr.checksum = wx_calculate_checksum((u8 *)&reset_cmd,
-                                                      (FW_CEM_HDR_LEN +
-                                                       reset_cmd.hdr.buf_len));
-
-       for (i = 0; i <= FW_CEM_MAX_RETRIES; i++) {
-               ret_val = wx_host_interface_command(wx, (u32 *)&reset_cmd,
-                                                   sizeof(reset_cmd),
-                                                   WX_HI_COMMAND_TIMEOUT,
-                                                   true);
-               if (ret_val != 0)
-                       continue;
-
-               if (reset_cmd.hdr.cmd_or_resp.ret_status ==
-                   FW_CEM_RESP_STATUS_SUCCESS)
-                       ret_val = 0;
-               else
-                       ret_val = -EFAULT;
-
-               break;
-       }
-
-       return ret_val;
-}
-EXPORT_SYMBOL(wx_reset_hostif);
-
 /**
  *  wx_init_eeprom_params - Initialize EEPROM params
  *  @wx: pointer to hardware structure
index b95090e973aeb5c382b7d586bd9272298cc7e9d4..0b3447bc6f2fec53fac9ccd5144430380b17d46b 100644 (file)
@@ -14,7 +14,6 @@ int wx_host_interface_command(struct wx *wx, u32 *buffer,
 int wx_read_ee_hostif(struct wx *wx, u16 offset, u16 *data);
 int wx_read_ee_hostif_buffer(struct wx *wx,
                             u16 offset, u16 words, u16 *data);
-int wx_reset_hostif(struct wx *wx);
 void wx_init_eeprom_params(struct wx *wx);
 void wx_get_mac_addr(struct wx *wx, u8 *mac_addr);
 void wx_init_rx_addrs(struct wx *wx);
index 0772eb14eabf6e8fda0c8b6c3f8a4e002d37f05b..6e130d1f7a7bb37b823f9ca57d445fd9a664790f 100644 (file)
@@ -257,16 +257,16 @@ static void txgbe_reset_misc(struct wx *wx)
 int txgbe_reset_hw(struct wx *wx)
 {
        int status;
+       u32 val;
 
        /* Call adapter stop to disable tx/rx and clear interrupts */
        status = wx_stop_adapter(wx);
        if (status != 0)
                return status;
 
-       if (!(((wx->subsystem_device_id & WX_NCSI_MASK) == WX_NCSI_SUP) ||
-             ((wx->subsystem_device_id & WX_WOL_MASK) == WX_WOL_SUP)))
-               wx_reset_hostif(wx);
-
+       val = WX_MIS_RST_LAN_RST(wx->bus.func);
+       wr32(wx, WX_MIS_RST, val | rd32(wx, WX_MIS_RST));
+       WX_WRITE_FLUSH(wx);
        usleep_range(10, 100);
 
        status = wx_check_flash_load(wx, TXGBE_SPI_ILDR_STATUS_LAN_SW_RST(wx->bus.func));