Commit c257d5fb authored by Johannes Berg's avatar Johannes Berg Committed by Emmanuel Grumbach

iwlwifi: treat iwl_parse_nvm_data() MAC addr as little endian

The MAC address parameters passed to iwl_parse_nvm_data() are passed on
to iwl_set_hw_address_family_8000() which treats them as little endian.
Annotate them as such, and add the missing byte-swapping in mvm.

While at it, add the MAC address to the error to make debugging issues
with it easier.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 81f02ba3
...@@ -539,7 +539,7 @@ static void iwl_set_hw_address_family_8000(struct device *dev, ...@@ -539,7 +539,7 @@ static void iwl_set_hw_address_family_8000(struct device *dev,
struct iwl_nvm_data *data, struct iwl_nvm_data *data,
const __le16 *mac_override, const __le16 *mac_override,
const __le16 *nvm_hw, const __le16 *nvm_hw,
u32 mac_addr0, u32 mac_addr1) __le32 mac_addr0, __le32 mac_addr1)
{ {
const u8 *hw_addr; const u8 *hw_addr;
...@@ -583,7 +583,8 @@ static void iwl_set_hw_address_family_8000(struct device *dev, ...@@ -583,7 +583,8 @@ static void iwl_set_hw_address_family_8000(struct device *dev,
if (!is_valid_ether_addr(data->hw_addr)) if (!is_valid_ether_addr(data->hw_addr))
IWL_ERR_DEV(dev, IWL_ERR_DEV(dev,
"mac address from hw section is not valid\n"); "mac address (%pM) from hw section is not valid\n",
data->hw_addr);
return; return;
} }
...@@ -597,7 +598,7 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, ...@@ -597,7 +598,7 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
const __le16 *nvm_calib, const __le16 *regulatory, const __le16 *nvm_calib, const __le16 *regulatory,
const __le16 *mac_override, const __le16 *phy_sku, const __le16 *mac_override, const __le16 *phy_sku,
u8 tx_chains, u8 rx_chains, bool lar_fw_supported, u8 tx_chains, u8 rx_chains, bool lar_fw_supported,
u32 mac_addr0, u32 mac_addr1) __le32 mac_addr0, __le32 mac_addr1)
{ {
struct iwl_nvm_data *data; struct iwl_nvm_data *data;
u32 sku; u32 sku;
......
...@@ -79,7 +79,7 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, ...@@ -79,7 +79,7 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
const __le16 *nvm_calib, const __le16 *regulatory, const __le16 *nvm_calib, const __le16 *regulatory,
const __le16 *mac_override, const __le16 *phy_sku, const __le16 *mac_override, const __le16 *phy_sku,
u8 tx_chains, u8 rx_chains, bool lar_fw_supported, u8 tx_chains, u8 rx_chains, bool lar_fw_supported,
u32 mac_addr0, u32 mac_addr1); __le32 mac_addr0, __le32 mac_addr1);
/** /**
* iwl_parse_mcc_info - parse MCC (mobile country code) info coming from FW * iwl_parse_mcc_info - parse MCC (mobile country code) info coming from FW
......
...@@ -300,7 +300,7 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) ...@@ -300,7 +300,7 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
struct iwl_nvm_section *sections = mvm->nvm_sections; struct iwl_nvm_section *sections = mvm->nvm_sections;
const __le16 *hw, *sw, *calib, *regulatory, *mac_override, *phy_sku; const __le16 *hw, *sw, *calib, *regulatory, *mac_override, *phy_sku;
bool lar_enabled; bool lar_enabled;
u32 mac_addr0, mac_addr1; __le32 mac_addr0, mac_addr1;
/* Checking for required sections */ /* Checking for required sections */
if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) { if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) {
...@@ -337,8 +337,10 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) ...@@ -337,8 +337,10 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
return NULL; return NULL;
/* read the mac address from WFMP registers */ /* read the mac address from WFMP registers */
mac_addr0 = iwl_trans_read_prph(mvm->trans, WFMP_MAC_ADDR_0); mac_addr0 = cpu_to_le32(iwl_trans_read_prph(mvm->trans,
mac_addr1 = iwl_trans_read_prph(mvm->trans, WFMP_MAC_ADDR_1); WFMP_MAC_ADDR_0));
mac_addr1 = cpu_to_le32(iwl_trans_read_prph(mvm->trans,
WFMP_MAC_ADDR_1));
hw = (const __le16 *)sections[mvm->cfg->nvm_hw_section_num].data; hw = (const __le16 *)sections[mvm->cfg->nvm_hw_section_num].data;
sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data; sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment