rsi: move common part of firmware load to separate function
authorSiva Rebbagondla <siva8118@gmail.com>
Wed, 3 Apr 2019 04:13:03 +0000 (09:43 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 25 Apr 2019 16:44:24 +0000 (19:44 +0300)
Till software bootloader ready state, communication with device is common
for 9113 and 9116. Hence moved that part of firmware loading to separate
function rsi_prepare_fw_load(). Also LMAC_VER_OFFSET is different for 9113
and 9116, so renamed existing macro to LMAC_VER_OFFSET_9113

Signed-off-by: Siva Rebbagondla <siva8118@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_hal.c
drivers/net/wireless/rsi/rsi_hal.h

index 1dbaab2a96b748a2104224bca61051d6dd7db195..b85ffb5595bc5abaf9818e39ef127f3cc53a7785 100644 (file)
@@ -829,21 +829,18 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content,
        return 0;
 }
 
-static int rsi_load_firmware(struct rsi_hw *adapter)
+static int rsi_hal_prepare_fwload(struct rsi_hw *adapter)
 {
-       struct rsi_common *common = adapter->priv;
        struct rsi_host_intf_ops *hif_ops = adapter->host_intf_ops;
-       const struct firmware *fw_entry = NULL;
-       u32 regout_val = 0, content_size;
-       u16 tmp_regout_val = 0;
-       struct ta_metadata *metadata_p;
+       u32 regout_val = 0;
        int status;
 
        bl_start_cmd_timer(adapter, BL_CMD_TIMEOUT);
 
        while (!adapter->blcmd_timer_expired) {
                status = hif_ops->master_reg_read(adapter, SWBL_REGOUT,
-                                             &regout_val, 2);
+                                                 &regout_val,
+                                                 RSI_COMMON_REG_SIZE);
                if (status < 0) {
                        rsi_dbg(ERR_ZONE,
                                "%s: REGOUT read failed\n", __func__);
@@ -865,13 +862,26 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
                (regout_val & 0xff));
 
        status = hif_ops->master_reg_write(adapter, SWBL_REGOUT,
-                                       (REGOUT_INVALID | REGOUT_INVALID << 8),
-                                       2);
-       if (status < 0) {
+                                          (REGOUT_INVALID |
+                                           REGOUT_INVALID << 8),
+                                          RSI_COMMON_REG_SIZE);
+       if (status < 0)
                rsi_dbg(ERR_ZONE, "%s: REGOUT writing failed..\n", __func__);
-               return status;
-       }
-       mdelay(1);
+       else
+               rsi_dbg(INFO_ZONE,
+                       "===> Device is ready to load firmware <===\n");
+
+       return status;
+}
+
+static int rsi_load_9113_firmware(struct rsi_hw *adapter)
+{
+       struct rsi_common *common = adapter->priv;
+       const struct firmware *fw_entry = NULL;
+       u32 content_size;
+       u16 tmp_regout_val = 0;
+       struct ta_metadata *metadata_p;
+       int status;
 
        status = bl_cmd(adapter, CONFIG_AUTO_READ_MODE, CMD_PASS,
                        "AUTO_READ_CMD");
@@ -902,13 +912,15 @@ static int rsi_load_firmware(struct rsi_hw *adapter)
 
        /* Get the firmware version */
        common->lmac_ver.ver.info.fw_ver[0] =
-               fw_entry->data[LMAC_VER_OFFSET] & 0xFF;
+               fw_entry->data[LMAC_VER_OFFSET_9113] & 0xFF;
        common->lmac_ver.ver.info.fw_ver[1] =
-               fw_entry->data[LMAC_VER_OFFSET + 1] & 0xFF;
-       common->lmac_ver.major = fw_entry->data[LMAC_VER_OFFSET + 2] & 0xFF;
+               fw_entry->data[LMAC_VER_OFFSET_9113 + 1] & 0xFF;
+       common->lmac_ver.major =
+               fw_entry->data[LMAC_VER_OFFSET_9113 + 2] & 0xFF;
        common->lmac_ver.release_num =
-               fw_entry->data[LMAC_VER_OFFSET + 3] & 0xFF;
-       common->lmac_ver.minor = fw_entry->data[LMAC_VER_OFFSET + 4] & 0xFF;
+               fw_entry->data[LMAC_VER_OFFSET_9113 + 3] & 0xFF;
+       common->lmac_ver.minor =
+               fw_entry->data[LMAC_VER_OFFSET_9113 + 4] & 0xFF;
        common->lmac_ver.patch_num = 0;
        rsi_print_version(common);
 
@@ -980,10 +992,14 @@ fail:
 int rsi_hal_device_init(struct rsi_hw *adapter)
 {
        struct rsi_common *common = adapter->priv;
+       int status;
 
        switch (adapter->device_model) {
        case RSI_DEV_9113:
-               if (rsi_load_firmware(adapter)) {
+               status = rsi_hal_prepare_fwload(adapter);
+               if (status < 0)
+                       return status;
+               if (rsi_load_9113_firmware(adapter)) {
                        rsi_dbg(ERR_ZONE,
                                "%s: Failed to load TA instructions\n",
                                __func__);
index 327638cdd30b1e746d4afe33309480dcaca8b7ca..f6dc55625516f0b13e5adcf146205604fcd2b68c 100644 (file)
 #define BBP_INFO_40MHZ 0x6
 
 #define FW_FLASH_OFFSET                        0x820
-#define LMAC_VER_OFFSET                        (FW_FLASH_OFFSET + 0x200)
+#define LMAC_VER_OFFSET_9113           (FW_FLASH_OFFSET + 0x200)
 #define MAX_DWORD_ALIGN_BYTES          64
 #define RSI_COMMON_REG_SIZE            2