ath6kl: read firmware start address from hardware
authorKalle Valo <kvalo@qca.qualcomm.com>
Mon, 12 Sep 2011 09:48:09 +0000 (12:48 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 16 Sep 2011 15:48:34 +0000 (18:48 +0300)
It's actually possible to read the firmware start address from hardware,
that way there's no need to hardcode the address in hardware.

Thanks to Chilam Ng for the idea.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/init.c
drivers/net/wireless/ath/ath6kl/target.h

index bf0385ec0e05e8fa114ddbe9327662d09e7995b6..5865466e884cfe0e65f00c4210ec49f519f8d0f2 100644 (file)
@@ -1146,9 +1146,21 @@ static int ath6kl_upload_otp(struct ath6kl *ar)
                return ret;
        }
 
+       /* read firmware start address */
+       ret = ath6kl_bmi_read(ar,
+                             ath6kl_get_hi_item_addr(ar,
+                                                     HI_ITEM(hi_app_start)),
+                             (u8 *) &address, sizeof(address));
+
+       if (ret) {
+               ath6kl_err("Failed to read hi_app_start: %d\n", ret);
+               return ret;
+       }
+
+       ar->hw.app_start_override_addr = address;
+
        /* execute the OTP code */
        param = 0;
-       address = ar->hw.app_start_override_addr;
        ath6kl_bmi_execute(ar, address, &param);
 
        return ret;
@@ -1343,21 +1355,18 @@ static int ath6kl_init_hw_params(struct ath6kl *ar)
        case AR6003_REV2_VERSION:
                ar->hw.dataset_patch_addr = AR6003_REV2_DATASET_PATCH_ADDRESS;
                ar->hw.app_load_addr = AR6003_REV2_APP_LOAD_ADDRESS;
-               ar->hw.app_start_override_addr = AR6003_REV2_APP_START_OVERRIDE;
                ar->hw.board_ext_data_addr = AR6003_REV2_BOARD_EXT_DATA_ADDRESS;
                ar->hw.reserved_ram_size = AR6003_REV2_RAM_RESERVE_SIZE;
                break;
        case AR6003_REV3_VERSION:
                ar->hw.dataset_patch_addr = AR6003_REV3_DATASET_PATCH_ADDRESS;
                ar->hw.app_load_addr = 0x1234;
-               ar->hw.app_start_override_addr = AR6003_REV3_APP_START_OVERRIDE;
                ar->hw.board_ext_data_addr = AR6003_REV3_BOARD_EXT_DATA_ADDRESS;
                ar->hw.reserved_ram_size = AR6003_REV3_RAM_RESERVE_SIZE;
                break;
        case AR6004_REV1_VERSION:
                ar->hw.dataset_patch_addr = AR6003_REV2_DATASET_PATCH_ADDRESS;
                ar->hw.app_load_addr = AR6003_REV3_APP_LOAD_ADDRESS;
-               ar->hw.app_start_override_addr = AR6003_REV3_APP_START_OVERRIDE;
                ar->hw.board_ext_data_addr = AR6004_REV1_BOARD_EXT_DATA_ADDRESS;
                ar->hw.reserved_ram_size = AR6004_REV1_RAM_RESERVE_SIZE;
                break;
index 7db06a5d919405b1f863ccf7c649640e4bbad9cb..c9a76051f0424fd6f9a139a6a15b1776fe63a768 100644 (file)
@@ -331,13 +331,11 @@ struct host_interest {
        (((target_type) == TARGET_TYPE_AR6003) ? AR6003_VTOP(vaddr) : \
        (((target_type) == TARGET_TYPE_AR6004) ? AR6004_VTOP(vaddr) : 0))
 
-#define AR6003_REV2_APP_START_OVERRIDE          0x944C00
 #define AR6003_REV2_APP_LOAD_ADDRESS            0x543180
 #define AR6003_REV2_BOARD_EXT_DATA_ADDRESS      0x57E500
 #define AR6003_REV2_DATASET_PATCH_ADDRESS       0x57e884
 #define AR6003_REV2_RAM_RESERVE_SIZE            6912
 
-#define AR6003_REV3_APP_START_OVERRIDE          0x945d00
 #define AR6003_REV3_APP_LOAD_ADDRESS            0x545000
 #define AR6003_REV3_BOARD_EXT_DATA_ADDRESS      0x542330
 #define AR6003_REV3_DATASET_PATCH_ADDRESS       0x57FF74