From: Golan Ben Ami <[email protected]>

In future devices we use different csr addresses for hw addresses.
Update csr addresses to support new and legacy devices.

Signed-off-by: Golan Ben Ami <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
---
 .../net/wireless/intel/iwlwifi/iwl-config.h   | 20 +++++++++++++++++--
 .../wireless/intel/iwlwifi/iwl-nvm-parse.c    | 14 +++++++++----
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-config.h 
b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
index 7752794d0437..cfd14e5ea59c 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-config.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-config.h
@@ -313,6 +313,10 @@ struct iwl_pwr_tx_backoff {
  * @flag_master_dis: disable master
  * @flag_stop_master: stop master
  * @addr_sw_reset: address for resetting the device
+ * @mac_addr0_otp: first part of MAC address from OTP
+ * @mac_addr1_otp: second part of MAC address from OTP
+ * @mac_addr0_strap: first part of MAC address from strap
+ * @mac_addr1_strap: second part of MAC address from strap
  */
 struct iwl_csr_params {
        u8 flag_sw_reset;
@@ -323,6 +327,10 @@ struct iwl_csr_params {
        u8 flag_master_dis;
        u8 flag_stop_master;
        u8 addr_sw_reset;
+       u32 mac_addr0_otp;
+       u32 mac_addr1_otp;
+       u32 mac_addr0_strap;
+       u32 mac_addr1_strap;
 };
 
 /**
@@ -451,7 +459,11 @@ static const struct iwl_csr_params iwl_csr_v1 = {
        .flag_sw_reset = 7,
        .flag_master_dis = 8,
        .flag_stop_master = 9,
-       .addr_sw_reset = (CSR_BASE + 0x020)
+       .addr_sw_reset = (CSR_BASE + 0x020),
+       .mac_addr0_otp = 0x380,
+       .mac_addr1_otp = 0x384,
+       .mac_addr0_strap = 0x388,
+       .mac_addr1_strap = 0x38C
 };
 
 static const struct iwl_csr_params iwl_csr_v2 = {
@@ -462,7 +474,11 @@ static const struct iwl_csr_params iwl_csr_v2 = {
        .flag_master_dis = 28,
        .flag_stop_master = 29,
        .flag_sw_reset = 31,
-       .addr_sw_reset = (CSR_BASE + 0x024)
+       .addr_sw_reset = (CSR_BASE + 0x024),
+       .mac_addr0_otp = 0x30,
+       .mac_addr1_otp = 0x34,
+       .mac_addr0_strap = 0x38,
+       .mac_addr1_strap = 0x3C
 };
 
 /*
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c 
b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
index 6d33c14579d9..aa83db5744df 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
@@ -579,8 +579,12 @@ static void iwl_flip_hw_address(__le32 mac_addr0, __le32 
mac_addr1, u8 *dest)
 static void iwl_set_hw_address_from_csr(struct iwl_trans *trans,
                                        struct iwl_nvm_data *data)
 {
-       __le32 mac_addr0 = cpu_to_le32(iwl_read32(trans, CSR_MAC_ADDR0_STRAP));
-       __le32 mac_addr1 = cpu_to_le32(iwl_read32(trans, CSR_MAC_ADDR1_STRAP));
+       __le32 mac_addr0 =
+               cpu_to_le32(iwl_read32(trans,
+                                      trans->cfg->csr->mac_addr0_strap));
+       __le32 mac_addr1 =
+               cpu_to_le32(iwl_read32(trans,
+                                      trans->cfg->csr->mac_addr1_strap));
 
        iwl_flip_hw_address(mac_addr0, mac_addr1, data->hw_addr);
        /*
@@ -590,8 +594,10 @@ static void iwl_set_hw_address_from_csr(struct iwl_trans 
*trans,
        if (is_valid_ether_addr(data->hw_addr))
                return;
 
-       mac_addr0 = cpu_to_le32(iwl_read32(trans, CSR_MAC_ADDR0_OTP));
-       mac_addr1 = cpu_to_le32(iwl_read32(trans, CSR_MAC_ADDR1_OTP));
+       mac_addr0 = cpu_to_le32(iwl_read32(trans,
+                                          trans->cfg->csr->mac_addr0_otp));
+       mac_addr1 = cpu_to_le32(iwl_read32(trans,
+                                          trans->cfg->csr->mac_addr1_otp));
 
        iwl_flip_hw_address(mac_addr0, mac_addr1, data->hw_addr);
 }
-- 
2.17.0

Reply via email to