wifi: iwlwifi: pcie: add gen3 iwl_trans_pcie read/write
Add gen3-specific implementations for iwl_trans_pcie_read/write,
iwl_trans_pcie_read/write_prph and read_config
type=feature
ticket=none
Signed-off-by: Rotem Kerem <rotem.kerem@intel.com>
Change-Id: I98708e8cca260d7077039451948bdfc552575a1e
Reviewed-on: https://gerritwcs.ir.intel.com/c/iwlwifi-stack-dev/+/197019
automatic-review: iil_jenkins iil_jenkins <EC.GER.UNIX.IIL.JENKINS@INTEL.COM>
tested: iil_jenkins iil_jenkins <EC.GER.UNIX.IIL.JENKINS@INTEL.COM>
Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
x-iwlwifi-stack-dev: cc9e2fee571c2ddd7130950df2949ab4c6838790
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
index 33b4930..5fa8fea 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c
@@ -439,30 +439,45 @@
void iwl_trans_write8(struct iwl_trans *trans, u32 ofs, u8 val)
{
- iwl_trans_pcie_write8(trans, ofs, val);
+ if (trans->mac_cfg->gen3)
+ iwl_trans_pcie_gen3_write8(trans, ofs, val);
+ else
+ iwl_trans_pcie_write8(trans, ofs, val);
}
IWL_EXPORT_SYMBOL(iwl_trans_write8);
void iwl_trans_write32(struct iwl_trans *trans, u32 ofs, u32 val)
{
- iwl_trans_pcie_write32(trans, ofs, val);
+ if (trans->mac_cfg->gen3)
+ iwl_trans_pcie_gen3_write32(trans, ofs, val);
+ else
+ iwl_trans_pcie_write32(trans, ofs, val);
}
IWL_EXPORT_SYMBOL(iwl_trans_write32);
u32 iwl_trans_read32(struct iwl_trans *trans, u32 ofs)
{
+ if (trans->mac_cfg->gen3)
+ return iwl_trans_pcie_gen3_read32(trans, ofs);
+
return iwl_trans_pcie_read32(trans, ofs);
}
IWL_EXPORT_SYMBOL(iwl_trans_read32);
u32 iwl_trans_read_prph(struct iwl_trans *trans, u32 ofs)
{
+ if (trans->mac_cfg->gen3)
+ return iwl_trans_pcie_gen3_read_prph(trans, ofs);
+
return iwl_trans_pcie_read_prph(trans, ofs);
}
IWL_EXPORT_SYMBOL(iwl_trans_read_prph);
void iwl_trans_write_prph(struct iwl_trans *trans, u32 ofs, u32 val)
{
+ if (trans->mac_cfg->gen3)
+ return iwl_trans_pcie_gen3_write_prph(trans, ofs, val);
+
return iwl_trans_pcie_write_prph(trans, ofs, val);
}
IWL_EXPORT_SYMBOL(iwl_trans_write_prph);
@@ -580,6 +595,9 @@
int iwl_trans_read_config32(struct iwl_trans *trans, u32 ofs,
u32 *val)
{
+ if (trans->mac_cfg->gen3)
+ return iwl_trans_pcie_gen3_read_config32(trans, ofs, val);
+
return iwl_trans_pcie_read_config32(trans, ofs, val);
}
IWL_EXPORT_SYMBOL(iwl_trans_read_config32);
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen3/trans.h b/drivers/net/wireless/intel/iwlwifi/pcie/gen3/trans.h
index d712cca..0171d31 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/gen3/trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen3/trans.h
@@ -55,4 +55,47 @@
spin_unlock(&trans_pcie->reg_lock);
}
+static inline void
+iwl_trans_pcie_gen3_write8(struct iwl_trans *trans, u32 ofs, u8 val)
+{
+ writeb(val, IWL_GET_PCIE_GEN3(trans)->hw_base + ofs);
+}
+
+static inline void
+iwl_trans_pcie_gen3_write32(struct iwl_trans *trans, u32 ofs, u32 val)
+{
+ writel(val, IWL_GET_PCIE_GEN3(trans)->hw_base + ofs);
+}
+
+static inline u32
+iwl_trans_pcie_gen3_read32(struct iwl_trans *trans, u32 ofs)
+{
+ return readl(IWL_GET_PCIE_GEN3(trans)->hw_base + ofs);
+}
+
+#define IWL_PRPH_MASK 0x00FFFFFF
+
+static inline u32
+iwl_trans_pcie_gen3_read_prph(struct iwl_trans *trans, u32 reg)
+{
+ iwl_trans_pcie_gen3_write32(trans, HBUS_TARG_PRPH_RADDR,
+ ((reg & IWL_PRPH_MASK) | (3 << 24)));
+ return iwl_trans_pcie_gen3_read32(trans, HBUS_TARG_PRPH_RDAT);
+}
+
+static inline void
+iwl_trans_pcie_gen3_write_prph(struct iwl_trans *trans, u32 addr, u32 val)
+{
+ iwl_trans_pcie_gen3_write32(trans, HBUS_TARG_PRPH_WADDR,
+ ((addr & IWL_PRPH_MASK) | (3 << 24)));
+ iwl_trans_pcie_gen3_write32(trans, HBUS_TARG_PRPH_WDAT, val);
+}
+
+static inline int
+iwl_trans_pcie_gen3_read_config32(struct iwl_trans *trans, u32 ofs, u32 *val)
+{
+ return pci_read_config_dword(IWL_GET_PCIE_GEN3(trans)->pci_dev,
+ ofs, val);
+}
+
#endif /* __iwl_trans_pcie_gen3_h__ */
diff --git a/versions b/versions
index 9131739..ff3ad4e 100644
--- a/versions
+++ b/versions
@@ -2,4 +2,4 @@
BACKPORTED_KERNEL_VERSION="(see git)"
BACKPORTED_KERNEL_NAME="iwlwifi"
BACKPORTS_BUILD_TSTAMP=__DATE__ \" \" __TIME__
-BACKPORTS_GIT_TRACKED="iwlwifi-stack-public:master:13852:f0a6ea51"
+BACKPORTS_GIT_TRACKED="iwlwifi-stack-public:master:13853:cc9e2fee"