| From 61aefbdf4ca3f6643eea7860d03897a50980e661 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 30 May 2018 15:19:56 +0300 |
| Subject: iwlwifi: pcie: read correct prph address for newer devices |
| |
| From: Sara Sharon <sara.sharon@intel.com> |
| |
| [ Upstream commit 84fb372c892e231e9a2ffdaa5c2df52d94aa536c ] |
| |
| For newer devices we have higher range of periphery |
| addresses. Currently it is masked out, so we end up |
| reading another address. |
| |
| Signed-off-by: Sara Sharon <sara.sharon@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 16 ++++++++++++++-- |
| 1 file changed, 14 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
| index 7d319b6863feb..954f932e9c88e 100644 |
| --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
| +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c |
| @@ -1830,18 +1830,30 @@ static u32 iwl_trans_pcie_read32(struct iwl_trans *trans, u32 ofs) |
| return readl(IWL_TRANS_GET_PCIE_TRANS(trans)->hw_base + ofs); |
| } |
| |
| +static u32 iwl_trans_pcie_prph_msk(struct iwl_trans *trans) |
| +{ |
| + if (trans->cfg->device_family >= IWL_DEVICE_FAMILY_22560) |
| + return 0x00FFFFFF; |
| + else |
| + return 0x000FFFFF; |
| +} |
| + |
| static u32 iwl_trans_pcie_read_prph(struct iwl_trans *trans, u32 reg) |
| { |
| + u32 mask = iwl_trans_pcie_prph_msk(trans); |
| + |
| iwl_trans_pcie_write32(trans, HBUS_TARG_PRPH_RADDR, |
| - ((reg & 0x000FFFFF) | (3 << 24))); |
| + ((reg & mask) | (3 << 24))); |
| return iwl_trans_pcie_read32(trans, HBUS_TARG_PRPH_RDAT); |
| } |
| |
| static void iwl_trans_pcie_write_prph(struct iwl_trans *trans, u32 addr, |
| u32 val) |
| { |
| + u32 mask = iwl_trans_pcie_prph_msk(trans); |
| + |
| iwl_trans_pcie_write32(trans, HBUS_TARG_PRPH_WADDR, |
| - ((addr & 0x000FFFFF) | (3 << 24))); |
| + ((addr & mask) | (3 << 24))); |
| iwl_trans_pcie_write32(trans, HBUS_TARG_PRPH_WDAT, val); |
| } |
| |
| -- |
| 2.20.1 |
| |