mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 23:24:50 +00:00
Merge branch 'pci/controller/qcom'
- Disable register write access after init for IP v2.3.3, v2.9.0 (Manivannan Sadhasivam) - Use DWC helpers for enabling/disabling writes to DBI registers (Manivannan Sadhasivam) - Hide slot hotplug capability for IP v1.0.0, v1.9.0, v2.1.0, v2.3.2, v2.3.3, v2.7.0, v2.9.0 (Manivannan Sadhasivam) - Reuse v2.3.2 post-init sequence for v2.4.0 (Manivannan Sadhasivam) - * pci/controller/qcom: PCI: qcom: Do not advertise hotplug capability for IP v2.1.0 PCI: qcom: Do not advertise hotplug capability for IP v1.0.0 PCI: qcom: Use post init sequence of IP v2.3.2 for v2.4.0 PCI: qcom: Do not advertise hotplug capability for IP v2.3.2 PCI: qcom: Do not advertise hotplug capability for IPs v2.3.3 and v2.9.0 PCI: qcom: Do not advertise hotplug capability for IPs v2.7.0 and v1.9.0 PCI: qcom: Disable write access to read only registers for IP v2.9.0 PCI: qcom: Use DWC helpers for modifying the read-only DBI registers PCI: qcom: Disable write access to read only registers for IP v2.3.3
This commit is contained in:
commit
5c13b3c19a
1 changed files with 38 additions and 35 deletions
|
@ -61,7 +61,6 @@
|
|||
/* DBI registers */
|
||||
#define AXI_MSTR_RESP_COMP_CTRL0 0x818
|
||||
#define AXI_MSTR_RESP_COMP_CTRL1 0x81c
|
||||
#define MISC_CONTROL_1_REG 0x8bc
|
||||
|
||||
/* MHI registers */
|
||||
#define PARF_DEBUG_CNT_PM_LINKST_IN_L2 0xc04
|
||||
|
@ -132,9 +131,6 @@
|
|||
/* AXI_MSTR_RESP_COMP_CTRL1 register fields */
|
||||
#define CFG_BRIDGE_SB_INIT BIT(0)
|
||||
|
||||
/* MISC_CONTROL_1_REG register fields */
|
||||
#define DBI_RO_WR_EN 1
|
||||
|
||||
/* PCI_EXP_SLTCAP register fields */
|
||||
#define PCIE_CAP_SLOT_POWER_LIMIT_VAL FIELD_PREP(PCI_EXP_SLTCAP_SPLV, 250)
|
||||
#define PCIE_CAP_SLOT_POWER_LIMIT_SCALE FIELD_PREP(PCI_EXP_SLTCAP_SPLS, 1)
|
||||
|
@ -144,7 +140,6 @@
|
|||
PCI_EXP_SLTCAP_AIP | \
|
||||
PCI_EXP_SLTCAP_PIP | \
|
||||
PCI_EXP_SLTCAP_HPS | \
|
||||
PCI_EXP_SLTCAP_HPC | \
|
||||
PCI_EXP_SLTCAP_EIP | \
|
||||
PCIE_CAP_SLOT_POWER_LIMIT_VAL | \
|
||||
PCIE_CAP_SLOT_POWER_LIMIT_SCALE)
|
||||
|
@ -274,6 +269,20 @@ static int qcom_pcie_start_link(struct dw_pcie *pci)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void qcom_pcie_clear_hpc(struct dw_pcie *pci)
|
||||
{
|
||||
u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
|
||||
u32 val;
|
||||
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
|
||||
val = readl(pci->dbi_base + offset + PCI_EXP_SLTCAP);
|
||||
val &= ~PCI_EXP_SLTCAP_HPC;
|
||||
writel(val, pci->dbi_base + offset + PCI_EXP_SLTCAP);
|
||||
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
}
|
||||
|
||||
static void qcom_pcie_2_1_0_ltssm_enable(struct qcom_pcie *pcie)
|
||||
{
|
||||
u32 val;
|
||||
|
@ -429,6 +438,8 @@ static int qcom_pcie_post_init_2_1_0(struct qcom_pcie *pcie)
|
|||
writel(CFG_BRIDGE_SB_INIT,
|
||||
pci->dbi_base + AXI_MSTR_RESP_COMP_CTRL1);
|
||||
|
||||
qcom_pcie_clear_hpc(pcie->pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -512,6 +523,8 @@ static int qcom_pcie_post_init_1_0_0(struct qcom_pcie *pcie)
|
|||
writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
|
||||
}
|
||||
|
||||
qcom_pcie_clear_hpc(pcie->pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -607,6 +620,8 @@ static int qcom_pcie_post_init_2_3_2(struct qcom_pcie *pcie)
|
|||
val |= EN;
|
||||
writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
|
||||
|
||||
qcom_pcie_clear_hpc(pcie->pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -692,34 +707,6 @@ static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qcom_pcie_post_init_2_4_0(struct qcom_pcie *pcie)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
/* enable PCIe clocks and resets */
|
||||
val = readl(pcie->parf + PARF_PHY_CTRL);
|
||||
val &= ~PHY_TEST_PWR_DOWN;
|
||||
writel(val, pcie->parf + PARF_PHY_CTRL);
|
||||
|
||||
/* change DBI base address */
|
||||
writel(0, pcie->parf + PARF_DBI_BASE_ADDR);
|
||||
|
||||
/* MAC PHY_POWERDOWN MUX DISABLE */
|
||||
val = readl(pcie->parf + PARF_SYS_CTRL);
|
||||
val &= ~MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN;
|
||||
writel(val, pcie->parf + PARF_SYS_CTRL);
|
||||
|
||||
val = readl(pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
|
||||
val |= BYPASS;
|
||||
writel(val, pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
|
||||
|
||||
val = readl(pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
|
||||
val |= EN;
|
||||
writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qcom_pcie_get_resources_2_3_3(struct qcom_pcie *pcie)
|
||||
{
|
||||
struct qcom_pcie_resources_2_3_3 *res = &pcie->res.v2_3_3;
|
||||
|
@ -826,7 +813,9 @@ static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie)
|
|||
writel(0, pcie->parf + PARF_Q2A_FLUSH);
|
||||
|
||||
writel(PCI_COMMAND_MASTER, pci->dbi_base + PCI_COMMAND);
|
||||
writel(DBI_RO_WR_EN, pci->dbi_base + MISC_CONTROL_1_REG);
|
||||
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
|
||||
writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP);
|
||||
|
||||
val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);
|
||||
|
@ -836,6 +825,8 @@ static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie)
|
|||
writel(PCI_EXP_DEVCTL2_COMP_TMOUT_DIS, pci->dbi_base + offset +
|
||||
PCI_EXP_DEVCTL2);
|
||||
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -966,6 +957,13 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int qcom_pcie_post_init_2_7_0(struct qcom_pcie *pcie)
|
||||
{
|
||||
qcom_pcie_clear_hpc(pcie->pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie)
|
||||
{
|
||||
struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
|
||||
|
@ -1136,6 +1134,7 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie)
|
|||
writel(0, pcie->parf + PARF_Q2A_FLUSH);
|
||||
|
||||
dw_pcie_dbi_ro_wr_en(pci);
|
||||
|
||||
writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP);
|
||||
|
||||
val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);
|
||||
|
@ -1145,6 +1144,8 @@ static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie)
|
|||
writel(PCI_EXP_DEVCTL2_COMP_TMOUT_DIS, pci->dbi_base + offset +
|
||||
PCI_EXP_DEVCTL2);
|
||||
|
||||
dw_pcie_dbi_ro_wr_dis(pci);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
writel(0, pcie->parf + PARF_BDF_TO_SID_TABLE_N + (4 * i));
|
||||
|
||||
|
@ -1251,7 +1252,7 @@ static const struct qcom_pcie_ops ops_2_3_2 = {
|
|||
static const struct qcom_pcie_ops ops_2_4_0 = {
|
||||
.get_resources = qcom_pcie_get_resources_2_4_0,
|
||||
.init = qcom_pcie_init_2_4_0,
|
||||
.post_init = qcom_pcie_post_init_2_4_0,
|
||||
.post_init = qcom_pcie_post_init_2_3_2,
|
||||
.deinit = qcom_pcie_deinit_2_4_0,
|
||||
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
|
||||
};
|
||||
|
@ -1269,6 +1270,7 @@ static const struct qcom_pcie_ops ops_2_3_3 = {
|
|||
static const struct qcom_pcie_ops ops_2_7_0 = {
|
||||
.get_resources = qcom_pcie_get_resources_2_7_0,
|
||||
.init = qcom_pcie_init_2_7_0,
|
||||
.post_init = qcom_pcie_post_init_2_7_0,
|
||||
.deinit = qcom_pcie_deinit_2_7_0,
|
||||
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
|
||||
};
|
||||
|
@ -1277,6 +1279,7 @@ static const struct qcom_pcie_ops ops_2_7_0 = {
|
|||
static const struct qcom_pcie_ops ops_1_9_0 = {
|
||||
.get_resources = qcom_pcie_get_resources_2_7_0,
|
||||
.init = qcom_pcie_init_2_7_0,
|
||||
.post_init = qcom_pcie_post_init_2_7_0,
|
||||
.deinit = qcom_pcie_deinit_2_7_0,
|
||||
.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
|
||||
.config_sid = qcom_pcie_config_sid_1_9_0,
|
||||
|
|
Loading…
Reference in a new issue