msm: ep_pcie: Add IPA MSI ATU config

All transactions originating from IPA have the Relaxed Ordering
bit set by default. Setup an ATU region to clear the bit for
MSIs triggered via IPA DMA as MSI writes shouldn't have it set.

Change-Id: Ib092834ca2d1a3e01aa3e63e1b35f7ab6766d9a0
Signed-off-by: Siva Kumar Akkireddi <sivaa@codeaurora.org>
Signed-off-by: Gauri Joshi <gaurjosh@codeaurora.org>
This commit is contained in:
Gauri Joshi 2020-10-21 15:37:49 +05:30
parent 9186f10287
commit dd572f2351
2 changed files with 21 additions and 0 deletions
drivers/platform/msm/ep_pcie

View File

@ -187,6 +187,7 @@
#define EP_PCIE_OATU_INDEX_MSI 1
#define EP_PCIE_OATU_INDEX_CTRL 2
#define EP_PCIE_OATU_INDEX_DATA 3
#define EP_PCIE_OATU_INDEX_IPA_MSI 4
#define EP_PCIE_OATU_UPPER 0x100
@ -402,6 +403,7 @@ struct ep_pcie_dev_t {
atomic_t ep_pcie_dev_wake;
atomic_t perst_deast;
atomic_t host_wake_pending;
bool conf_ipa_msi_iatu;
struct ep_pcie_register_event *event_reg;
struct work_struct handle_perst_work;

View File

@ -2015,6 +2015,7 @@ int ep_pcie_core_disable_endpoint(void)
EP_PCIE_DBG(dev, "PCIe V%d: shut down the link\n",
dev->rev);
}
dev->conf_ipa_msi_iatu = false;
val = readl_relaxed(dev->elbi + PCIE20_ELBI_SYS_STTS);
EP_PCIE_DBG(dev, "PCIe V%d: LTSSM_STATE during disable:0x%x\n",
@ -2947,6 +2948,24 @@ int ep_pcie_core_get_msi_config(struct ep_pcie_msi_config *cfg)
ep_pcie_dev.msi_cfg.upper = upper;
ep_pcie_dev.msi_cfg.data = data;
ep_pcie_dev.msi_cfg.msg_num = cfg->msg_num;
ep_pcie_dev.conf_ipa_msi_iatu = false;
}
/*
* All transactions originating from IPA have the RO
* bit set by default. Setup another ATU region to clear
* the RO bit for MSIs triggered via IPA DMA.
*/
if (ep_pcie_dev.active_config &&
!ep_pcie_dev.conf_ipa_msi_iatu) {
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_IPA_MSI,
lower, 0,
(lower + resource_size(msi) - 1),
lower, upper);
ep_pcie_dev.conf_ipa_msi_iatu = true;
EP_PCIE_DBG(&ep_pcie_dev,
"PCIe V%d: Conf iATU for IPA MSI info: lower:0x%x; upper:0x%x\n",
ep_pcie_dev.rev, lower, upper);
}
return 0;
}