Loading drivers/pci/host/pci-msm.c +239 −87 Original line number Diff line number Diff line Loading @@ -46,6 +46,20 @@ #include <linux/ipc_logging.h> #include <linux/msm_pcie.h> #ifdef CONFIG_ARCH_MDMCALIFORNIUM #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0302 #define PCIE20_PARF_DBI_BASE_ADDR 0x350 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x358 #else #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0104 #define PCIE20_PARF_DBI_BASE_ADDR 0x168 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C #endif #define TX_BASE 0x1000 #define RX_BASE 0x1200 #define PCS_BASE 0x1400 Loading Loading @@ -161,16 +175,16 @@ #define PCIE20_PARF_PHY_REFCLK 0x4C #define PCIE20_PARF_CONFIG_BITS 0x50 #define PCIE20_PARF_TEST_BUS 0xE4 #define PCIE20_PARF_DBI_BASE_ADDR 0x168 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C #define PCIE20_PARF_MHI_CLOCK_RESET_CTRL 0x174 #define PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT 0x1A8 #define PCIE20_PARF_LTSSM 0x1B0 #define PCIE20_PARF_INT_ALL_STATUS 0x224 #define PCIE20_PARF_INT_ALL_CLEAR 0x228 #define PCIE20_PARF_INT_ALL_MASK 0x22C #define PCIE20_PARF_SID_OFFSET 0x234 #define PCIE20_PARF_BDF_TRANSLATE_CFG 0x24C #define PCIE20_PARF_BDF_TRANSLATE_N 0x250 #define PCIE20_ELBI_VERSION 0x00 #define PCIE20_ELBI_SYS_CTRL 0x04 #define PCIE20_ELBI_SYS_STTS 0x08 Loading Loading @@ -214,9 +228,6 @@ #define PCIE20_AER_ROOT_ERR_STATUS_REG 0x130 #define PCIE20_AER_ERR_SRC_ID_REG 0x134 #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0104 #define RD 0 #define WR 1 #define MSM_PCIE_ERROR -1 Loading Loading @@ -286,9 +297,6 @@ #define BDF_OFFSET(bus, devfn) \ ((bus << 24) | (devfn << 16)) #define PCIE_BUS_PRIV_DATA(pdev) \ (struct msm_pcie_dev_t *)(pdev->bus->sysdata) #define PCIE_GEN_DBG(x...) do { \ if (msm_pcie_debug_mask) \ pr_alert(x); \ Loading Loading @@ -374,9 +382,29 @@ enum msm_pcie_irq { MSM_PCIE_INT_LINK_UP, MSM_PCIE_INT_LINK_DOWN, MSM_PCIE_INT_BRIDGE_FLUSH_N, MSM_PCIE_INT_GLOBAL_INT, MSM_PCIE_MAX_IRQ, }; enum msm_pcie_irq_event { MSM_PCIE_INT_EVT_LINK_DOWN = 1, MSM_PCIE_INT_EVT_BME, MSM_PCIE_INT_EVT_PM_TURNOFF, MSM_PCIE_INT_EVT_DEBUG, MSM_PCIE_INT_EVT_LTR, MSM_PCIE_INT_EVT_MHI_Q6, MSM_PCIE_INT_EVT_MHI_A7, MSM_PCIE_INT_EVT_DSTATE_CHANGE, MSM_PCIE_INT_EVT_L1SUB_TIMEOUT, MSM_PCIE_INT_EVT_MMIO_WRITE, MSM_PCIE_INT_EVT_CFG_WRITE, MSM_PCIE_INT_EVT_BRIDGE_FLUSH_N, MSM_PCIE_INT_EVT_LINK_UP, MSM_PCIE_INT_EVT_AER_LEGACY, MSM_PCIE_INT_EVT_AER_ERR, MSM_PCIE_INT_EVT_MAX = 15, }; enum msm_pcie_gpio { MSM_PCIE_GPIO_PERST, MSM_PCIE_GPIO_WAKE, Loading Loading @@ -522,6 +550,7 @@ struct msm_pcie_dev_t { struct mutex recovery_lock; spinlock_t linkdown_lock; spinlock_t wakeup_lock; spinlock_t global_irq_lock; spinlock_t aer_lock; ulong linkdown_counter; ulong link_turned_on_counter; Loading Loading @@ -690,7 +719,8 @@ static const struct msm_pcie_irq_info_t msm_pcie_irq_info[MSM_PCIE_MAX_IRQ] = { {"int_aer_legacy", 0}, {"int_pls_link_up", 0}, {"int_pls_link_down", 0}, {"int_bridge_flush_n", 0} {"int_bridge_flush_n", 0}, {"int_global_int", 0} }; /* MSIs */ Loading @@ -705,6 +735,38 @@ static const struct msm_pcie_irq_info_t msm_pcie_msi_info[MSM_PCIE_MAX_MSI] = { {"msi_28", 0}, {"msi_29", 0}, {"msi_30", 0}, {"msi_31", 0} }; #ifdef CONFIG_ARM #define PCIE_BUS_PRIV_DATA(bus) \ (((struct pci_sys_data *)bus->sysdata)->private_data) static struct pci_sys_data msm_pcie_sys_data[MAX_RC_NUM]; static inline void *msm_pcie_setup_sys_data(struct msm_pcie_dev_t *dev) { msm_pcie_sys_data[dev->rc_idx].domain = dev->rc_idx; msm_pcie_sys_data[dev->rc_idx].private_data = dev; return &msm_pcie_sys_data[dev->rc_idx]; } static inline void msm_pcie_fixup_irqs(struct msm_pcie_dev_t *dev) { pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci); } #else #define PCIE_BUS_PRIV_DATA(bus) \ (struct msm_pcie_dev_t *)(bus->sysdata) static inline void *msm_pcie_setup_sys_data(struct msm_pcie_dev_t *dev) { return dev; } static inline void msm_pcie_fixup_irqs(struct msm_pcie_dev_t *dev) { } #endif static inline void msm_pcie_write_reg(void *base, u32 offset, u32 value) { writel_relaxed(value, base + offset); Loading Loading @@ -2009,7 +2071,7 @@ int msm_pcie_debug_info(struct pci_dev *dev, u32 option, u32 base, } } pdev = PCIE_BUS_PRIV_DATA(dev); pdev = PCIE_BUS_PRIV_DATA(dev->bus); rc_sel = 1 << pdev->rc_idx; msm_pcie_sel_debug_testcase(pdev, option); Loading Loading @@ -2532,7 +2594,7 @@ static inline int msm_pcie_oper_conf(struct pci_bus *bus, u32 devfn, int oper, u32 bdf = BDF_OFFSET(bus->number, devfn); int i; dev = bus->sysdata; dev = PCIE_BUS_PRIV_DATA(bus); if (!dev) { pr_err("PCIe: No device found for this bus.\n"); Loading Loading @@ -3529,15 +3591,8 @@ static int msm_pcie_get_resources(struct msm_pcie_dev_t *dev, irq_info->name); if (!res) { int j; for (j = 0; j < MSM_PCIE_MAX_RES; j++) { iounmap(dev->res[j].base); dev->res[j].base = NULL; } PCIE_ERR(dev, "PCIe: RC%d can't find IRQ # for %s.\n", PCIE_DBG(dev, "PCIe: RC%d can't find IRQ # for %s.\n", dev->rc_idx, irq_info->name); ret = -ENODEV; goto out; } else { irq_info->num = res->start; PCIE_DBG(dev, "IRQ # for %s is %d.\n", irq_info->name, Loading @@ -3552,15 +3607,8 @@ static int msm_pcie_get_resources(struct msm_pcie_dev_t *dev, msi_info->name); if (!res) { int j; for (j = 0; j < MSM_PCIE_MAX_RES; j++) { iounmap(dev->res[j].base); dev->res[j].base = NULL; } PCIE_ERR(dev, "PCIe: RC%d can't find IRQ # for %s.\n", PCIE_DBG(dev, "PCIe: RC%d can't find IRQ # for %s.\n", dev->rc_idx, msi_info->name); ret = -ENODEV; goto out; } else { msi_info->num = res->start; PCIE_DBG(dev, "IRQ # for %s is %d.\n", msi_info->name, Loading Loading @@ -3662,6 +3710,20 @@ int msm_pcie_enable(struct msm_pcie_dev_t *dev, u32 options) msm_pcie_write_mask(dev->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL, 0, BIT(4)); /* enable selected IRQ */ if (dev->irq[MSM_PCIE_INT_GLOBAL_INT].num) { msm_pcie_write_reg(dev->parf, PCIE20_PARF_INT_ALL_MASK, 0); msm_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_MASK, 0, MSM_PCIE_INT_EVT_LINK_DOWN | MSM_PCIE_INT_EVT_AER_LEGACY | MSM_PCIE_INT_EVT_AER_ERR); PCIE_DBG(dev, "PCIe: RC%d: PCIE20_PARF_INT_ALL_MASK: 0x%x\n", dev->rc_idx, readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_MASK)); } if (dev->dev_mem_res->end - dev->dev_mem_res->start > SZ_16M) writel_relaxed(SZ_32M, dev->parf + PCIE20_PARF_SLV_ADDR_SPACE_SIZE); Loading Loading @@ -4126,7 +4188,7 @@ EXPORT_SYMBOL(msm_pcie_configure_sid); int msm_pcie_enumerate(u32 rc_idx) { int ret = 0, bus_ret = 0; int ret = 0, bus_ret = 0, scan_ret = 0; struct msm_pcie_dev_t *dev = &msm_pcie_dev[rc_idx]; PCIE_DBG(dev, "Enumerate RC%d\n", rc_idx); Loading Loading @@ -4166,7 +4228,9 @@ int msm_pcie_enumerate(u32 rc_idx) } bus = pci_create_root_bus(&dev->pdev->dev, 0, &msm_pcie_ops, dev, &res); &msm_pcie_ops, msm_pcie_setup_sys_data(dev), &res); if (!bus) { PCIE_ERR(dev, "PCIe: failed to create root bus for RC%d\n", Loading @@ -4175,7 +4239,14 @@ int msm_pcie_enumerate(u32 rc_idx) return -ENOMEM; } pci_rescan_bus(bus); scan_ret = pci_scan_child_bus(bus); PCIE_DBG(dev, "PCIe: RC%d: The max subordinate bus number discovered is %d\n", dev->rc_idx, ret); msm_pcie_fixup_irqs(dev); pci_assign_unassigned_bus_resources(bus); pci_bus_add_devices(bus); dev->enumerated = true; Loading @@ -4195,7 +4266,7 @@ int msm_pcie_enumerate(u32 rc_idx) device_id, pcidev); if (pcidev && (&msm_pcie_dev[rc_idx] == (struct msm_pcie_dev_t *) PCIE_BUS_PRIV_DATA(pcidev))) { PCIE_BUS_PRIV_DATA(pcidev->bus))) { msm_pcie_dev[rc_idx].dev = pcidev; found = true; PCIE_DBG(&msm_pcie_dev[rc_idx], Loading Loading @@ -4606,6 +4677,55 @@ static irqreturn_t handle_msi_irq(int irq, void *data) return IRQ_HANDLED; } static irqreturn_t handle_global_irq(int irq, void *data) { int i; struct msm_pcie_dev_t *dev = data; unsigned long irqsave_flags; u32 status; PCIE_DBG2(dev, "RC%d: Global IRQ %d received: 0x%x\n", dev->rc_idx, irq, status); spin_lock_irqsave(&dev->global_irq_lock, irqsave_flags); status = readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_STATUS); msm_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_CLEAR, 0, status); for (i = 0; i <= MSM_PCIE_INT_EVT_MAX; i++) { if (status & BIT(i)) { switch (i) { case MSM_PCIE_INT_EVT_LINK_DOWN: PCIE_DBG(dev, "PCIe: RC%d: handle linkdown event.\n", dev->rc_idx); handle_linkdown_irq(irq, data); break; case MSM_PCIE_INT_EVT_AER_LEGACY: PCIE_DBG(dev, "PCIe: RC%d: AER legacy event.\n", dev->rc_idx); handle_aer_irq(irq, data); break; case MSM_PCIE_INT_EVT_AER_ERR: PCIE_DBG(dev, "PCIe: RC%d: AER event.\n", dev->rc_idx); handle_aer_irq(irq, data); break; default: PCIE_ERR(dev, "PCIe: RC%d: Unexpected event %d is caught!\n", dev->rc_idx, i); } } } spin_unlock_irqrestore(&dev->global_irq_lock, irqsave_flags); return IRQ_HANDLED; } void msm_pcie_destroy_irq(unsigned int irq, struct msm_pcie_dev_t *pcie_dev) { int pos, i; Loading Loading @@ -4659,7 +4779,7 @@ void arch_teardown_msi_irq(unsigned int irq) void arch_teardown_msi_irqs(struct pci_dev *dev) { struct msi_desc *entry; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC:%d EP: vendor_id:0x%x device_id:0x%x\n", pcie_dev->rc_idx, dev->vendor, dev->device); Loading Loading @@ -4721,7 +4841,7 @@ static int arch_setup_msi_irq_default(struct pci_dev *pdev, { int irq; struct msi_msg msg; struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4786,7 +4906,7 @@ static int arch_setup_msi_irq_qgic(struct pci_dev *pdev, { int irq, index, firstirq = 0; struct msi_msg msg; struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4815,7 +4935,7 @@ static int arch_setup_msi_irq_qgic(struct pci_dev *pdev, int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) { struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4843,7 +4963,7 @@ int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) { struct msi_desc *entry; int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -4901,27 +5021,39 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) wakeup_source_init(&dev->ws, "RC0 pcie_wakeup_source"); /* register handler for linkdown interrupt */ if (dev->irq[MSM_PCIE_INT_LINK_DOWN].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_LINK_DOWN].num, handle_linkdown_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_LINK_DOWN].name, dev->irq[MSM_PCIE_INT_LINK_DOWN].num, handle_linkdown_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_LINK_DOWN].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: Unable to request linkdown interrupt:%d\n", PCIE_ERR(dev, "PCIe: Unable to request linkdown interrupt:%d\n", dev->irq[MSM_PCIE_INT_LINK_DOWN].num); return rc; } } /* register handler for physical MSI interrupt line */ if (dev->irq[MSM_PCIE_INT_MSI].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_MSI].num, handle_msi_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_MSI].name, dev); dev->irq[MSM_PCIE_INT_MSI].num, handle_msi_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_MSI].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: RC%d: Unable to request MSI interrupt\n", PCIE_ERR(dev, "PCIe: RC%d: Unable to request MSI interrupt\n", dev->rc_idx); return rc; } } /* register handler for AER interrupt */ if (dev->irq[MSM_PCIE_INT_PLS_ERR].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_PLS_ERR].num, handle_aer_irq, Loading @@ -4935,8 +5067,10 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) dev->irq[MSM_PCIE_INT_PLS_ERR].num); return rc; } } /* register handler for AER legacy interrupt */ if (dev->irq[MSM_PCIE_INT_AER_LEGACY].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_AER_LEGACY].num, handle_aer_irq, Loading @@ -4950,6 +5084,23 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) dev->irq[MSM_PCIE_INT_AER_LEGACY].num); return rc; } } if (dev->irq[MSM_PCIE_INT_GLOBAL_INT].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_GLOBAL_INT].num, handle_global_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_GLOBAL_INT].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: RC%d: Unable to request global_int interrupt: %d\n", dev->rc_idx, dev->irq[MSM_PCIE_INT_GLOBAL_INT].num); return rc; } } /* register handler for PCIE_WAKE_N interrupt line */ if (dev->wake_n) { Loading Loading @@ -5427,6 +5578,7 @@ int __init pcie_init(void) mutex_init(&msm_pcie_dev[i].recovery_lock); spin_lock_init(&msm_pcie_dev[i].linkdown_lock); spin_lock_init(&msm_pcie_dev[i].wakeup_lock); spin_lock_init(&msm_pcie_dev[i].global_irq_lock); spin_lock_init(&msm_pcie_dev[i].aer_lock); msm_pcie_dev[i].drv_ready = false; } Loading Loading @@ -5466,7 +5618,7 @@ module_exit(pcie_exit); /* RC do not represent the right class; set it to PCI_CLASS_BRIDGE_PCI */ static void msm_pcie_fixup_early(struct pci_dev *dev) { struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "hdr_type %d\n", dev->hdr_type); if (dev->hdr_type == 1) dev->class = (dev->class & 0xff) | (PCI_CLASS_BRIDGE_PCI << 8); Loading @@ -5482,7 +5634,7 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev, u32 val = 0; int ret_l23; unsigned long irqsave_flags; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d: entry\n", pcie_dev->rc_idx); Loading Loading @@ -5549,7 +5701,7 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev, static void msm_pcie_fixup_suspend(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -5586,7 +5738,7 @@ static int msm_pcie_pm_resume(struct pci_dev *dev, void *user, void *data, u32 options) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d: entry\n", pcie_dev->rc_idx); Loading Loading @@ -5647,7 +5799,7 @@ static int msm_pcie_pm_resume(struct pci_dev *dev, void msm_pcie_fixup_resume(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading @@ -5670,7 +5822,7 @@ DECLARE_PCI_FIXUP_RESUME(PCIE_VENDOR_ID_RCP, PCIE_DEVICE_ID_RCP, void msm_pcie_fixup_resume_early(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -5707,7 +5859,7 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, goto out; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)user)->bus); if (pcie_dev) { rc_idx = pcie_dev->rc_idx; Loading Loading @@ -5884,7 +6036,7 @@ int msm_pcie_register_event(struct msm_pcie_register_event *reg) return -ENODEV; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)->bus); if (!pcie_dev) { PCIE_ERR(pcie_dev, "%s", Loading Loading @@ -5955,7 +6107,7 @@ int msm_pcie_deregister_event(struct msm_pcie_register_event *reg) return -ENODEV; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)->bus); if (!pcie_dev) { PCIE_ERR(pcie_dev, "%s", Loading Loading @@ -5999,7 +6151,7 @@ int msm_pcie_recover_config(struct pci_dev *dev) struct msm_pcie_dev_t *pcie_dev; if (dev) { pcie_dev = PCIE_BUS_PRIV_DATA(dev); pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "Recovery for the link of RC%d\n", pcie_dev->rc_idx); } else { Loading Loading @@ -6041,7 +6193,7 @@ int msm_pcie_shadow_control(struct pci_dev *dev, bool enable) struct msm_pcie_dev_t *pcie_dev; if (dev) { pcie_dev = PCIE_BUS_PRIV_DATA(dev); pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "User requests to %s shadow\n", enable ? "enable" : "disable"); Loading Loading
drivers/pci/host/pci-msm.c +239 −87 Original line number Diff line number Diff line Loading @@ -46,6 +46,20 @@ #include <linux/ipc_logging.h> #include <linux/msm_pcie.h> #ifdef CONFIG_ARCH_MDMCALIFORNIUM #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0302 #define PCIE20_PARF_DBI_BASE_ADDR 0x350 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x358 #else #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0104 #define PCIE20_PARF_DBI_BASE_ADDR 0x168 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C #endif #define TX_BASE 0x1000 #define RX_BASE 0x1200 #define PCS_BASE 0x1400 Loading Loading @@ -161,16 +175,16 @@ #define PCIE20_PARF_PHY_REFCLK 0x4C #define PCIE20_PARF_CONFIG_BITS 0x50 #define PCIE20_PARF_TEST_BUS 0xE4 #define PCIE20_PARF_DBI_BASE_ADDR 0x168 #define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C #define PCIE20_PARF_MHI_CLOCK_RESET_CTRL 0x174 #define PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT 0x1A8 #define PCIE20_PARF_LTSSM 0x1B0 #define PCIE20_PARF_INT_ALL_STATUS 0x224 #define PCIE20_PARF_INT_ALL_CLEAR 0x228 #define PCIE20_PARF_INT_ALL_MASK 0x22C #define PCIE20_PARF_SID_OFFSET 0x234 #define PCIE20_PARF_BDF_TRANSLATE_CFG 0x24C #define PCIE20_PARF_BDF_TRANSLATE_N 0x250 #define PCIE20_ELBI_VERSION 0x00 #define PCIE20_ELBI_SYS_CTRL 0x04 #define PCIE20_ELBI_SYS_STTS 0x08 Loading Loading @@ -214,9 +228,6 @@ #define PCIE20_AER_ROOT_ERR_STATUS_REG 0x130 #define PCIE20_AER_ERR_SRC_ID_REG 0x134 #define PCIE_VENDOR_ID_RCP 0x17cb #define PCIE_DEVICE_ID_RCP 0x0104 #define RD 0 #define WR 1 #define MSM_PCIE_ERROR -1 Loading Loading @@ -286,9 +297,6 @@ #define BDF_OFFSET(bus, devfn) \ ((bus << 24) | (devfn << 16)) #define PCIE_BUS_PRIV_DATA(pdev) \ (struct msm_pcie_dev_t *)(pdev->bus->sysdata) #define PCIE_GEN_DBG(x...) do { \ if (msm_pcie_debug_mask) \ pr_alert(x); \ Loading Loading @@ -374,9 +382,29 @@ enum msm_pcie_irq { MSM_PCIE_INT_LINK_UP, MSM_PCIE_INT_LINK_DOWN, MSM_PCIE_INT_BRIDGE_FLUSH_N, MSM_PCIE_INT_GLOBAL_INT, MSM_PCIE_MAX_IRQ, }; enum msm_pcie_irq_event { MSM_PCIE_INT_EVT_LINK_DOWN = 1, MSM_PCIE_INT_EVT_BME, MSM_PCIE_INT_EVT_PM_TURNOFF, MSM_PCIE_INT_EVT_DEBUG, MSM_PCIE_INT_EVT_LTR, MSM_PCIE_INT_EVT_MHI_Q6, MSM_PCIE_INT_EVT_MHI_A7, MSM_PCIE_INT_EVT_DSTATE_CHANGE, MSM_PCIE_INT_EVT_L1SUB_TIMEOUT, MSM_PCIE_INT_EVT_MMIO_WRITE, MSM_PCIE_INT_EVT_CFG_WRITE, MSM_PCIE_INT_EVT_BRIDGE_FLUSH_N, MSM_PCIE_INT_EVT_LINK_UP, MSM_PCIE_INT_EVT_AER_LEGACY, MSM_PCIE_INT_EVT_AER_ERR, MSM_PCIE_INT_EVT_MAX = 15, }; enum msm_pcie_gpio { MSM_PCIE_GPIO_PERST, MSM_PCIE_GPIO_WAKE, Loading Loading @@ -522,6 +550,7 @@ struct msm_pcie_dev_t { struct mutex recovery_lock; spinlock_t linkdown_lock; spinlock_t wakeup_lock; spinlock_t global_irq_lock; spinlock_t aer_lock; ulong linkdown_counter; ulong link_turned_on_counter; Loading Loading @@ -690,7 +719,8 @@ static const struct msm_pcie_irq_info_t msm_pcie_irq_info[MSM_PCIE_MAX_IRQ] = { {"int_aer_legacy", 0}, {"int_pls_link_up", 0}, {"int_pls_link_down", 0}, {"int_bridge_flush_n", 0} {"int_bridge_flush_n", 0}, {"int_global_int", 0} }; /* MSIs */ Loading @@ -705,6 +735,38 @@ static const struct msm_pcie_irq_info_t msm_pcie_msi_info[MSM_PCIE_MAX_MSI] = { {"msi_28", 0}, {"msi_29", 0}, {"msi_30", 0}, {"msi_31", 0} }; #ifdef CONFIG_ARM #define PCIE_BUS_PRIV_DATA(bus) \ (((struct pci_sys_data *)bus->sysdata)->private_data) static struct pci_sys_data msm_pcie_sys_data[MAX_RC_NUM]; static inline void *msm_pcie_setup_sys_data(struct msm_pcie_dev_t *dev) { msm_pcie_sys_data[dev->rc_idx].domain = dev->rc_idx; msm_pcie_sys_data[dev->rc_idx].private_data = dev; return &msm_pcie_sys_data[dev->rc_idx]; } static inline void msm_pcie_fixup_irqs(struct msm_pcie_dev_t *dev) { pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci); } #else #define PCIE_BUS_PRIV_DATA(bus) \ (struct msm_pcie_dev_t *)(bus->sysdata) static inline void *msm_pcie_setup_sys_data(struct msm_pcie_dev_t *dev) { return dev; } static inline void msm_pcie_fixup_irqs(struct msm_pcie_dev_t *dev) { } #endif static inline void msm_pcie_write_reg(void *base, u32 offset, u32 value) { writel_relaxed(value, base + offset); Loading Loading @@ -2009,7 +2071,7 @@ int msm_pcie_debug_info(struct pci_dev *dev, u32 option, u32 base, } } pdev = PCIE_BUS_PRIV_DATA(dev); pdev = PCIE_BUS_PRIV_DATA(dev->bus); rc_sel = 1 << pdev->rc_idx; msm_pcie_sel_debug_testcase(pdev, option); Loading Loading @@ -2532,7 +2594,7 @@ static inline int msm_pcie_oper_conf(struct pci_bus *bus, u32 devfn, int oper, u32 bdf = BDF_OFFSET(bus->number, devfn); int i; dev = bus->sysdata; dev = PCIE_BUS_PRIV_DATA(bus); if (!dev) { pr_err("PCIe: No device found for this bus.\n"); Loading Loading @@ -3529,15 +3591,8 @@ static int msm_pcie_get_resources(struct msm_pcie_dev_t *dev, irq_info->name); if (!res) { int j; for (j = 0; j < MSM_PCIE_MAX_RES; j++) { iounmap(dev->res[j].base); dev->res[j].base = NULL; } PCIE_ERR(dev, "PCIe: RC%d can't find IRQ # for %s.\n", PCIE_DBG(dev, "PCIe: RC%d can't find IRQ # for %s.\n", dev->rc_idx, irq_info->name); ret = -ENODEV; goto out; } else { irq_info->num = res->start; PCIE_DBG(dev, "IRQ # for %s is %d.\n", irq_info->name, Loading @@ -3552,15 +3607,8 @@ static int msm_pcie_get_resources(struct msm_pcie_dev_t *dev, msi_info->name); if (!res) { int j; for (j = 0; j < MSM_PCIE_MAX_RES; j++) { iounmap(dev->res[j].base); dev->res[j].base = NULL; } PCIE_ERR(dev, "PCIe: RC%d can't find IRQ # for %s.\n", PCIE_DBG(dev, "PCIe: RC%d can't find IRQ # for %s.\n", dev->rc_idx, msi_info->name); ret = -ENODEV; goto out; } else { msi_info->num = res->start; PCIE_DBG(dev, "IRQ # for %s is %d.\n", msi_info->name, Loading Loading @@ -3662,6 +3710,20 @@ int msm_pcie_enable(struct msm_pcie_dev_t *dev, u32 options) msm_pcie_write_mask(dev->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL, 0, BIT(4)); /* enable selected IRQ */ if (dev->irq[MSM_PCIE_INT_GLOBAL_INT].num) { msm_pcie_write_reg(dev->parf, PCIE20_PARF_INT_ALL_MASK, 0); msm_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_MASK, 0, MSM_PCIE_INT_EVT_LINK_DOWN | MSM_PCIE_INT_EVT_AER_LEGACY | MSM_PCIE_INT_EVT_AER_ERR); PCIE_DBG(dev, "PCIe: RC%d: PCIE20_PARF_INT_ALL_MASK: 0x%x\n", dev->rc_idx, readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_MASK)); } if (dev->dev_mem_res->end - dev->dev_mem_res->start > SZ_16M) writel_relaxed(SZ_32M, dev->parf + PCIE20_PARF_SLV_ADDR_SPACE_SIZE); Loading Loading @@ -4126,7 +4188,7 @@ EXPORT_SYMBOL(msm_pcie_configure_sid); int msm_pcie_enumerate(u32 rc_idx) { int ret = 0, bus_ret = 0; int ret = 0, bus_ret = 0, scan_ret = 0; struct msm_pcie_dev_t *dev = &msm_pcie_dev[rc_idx]; PCIE_DBG(dev, "Enumerate RC%d\n", rc_idx); Loading Loading @@ -4166,7 +4228,9 @@ int msm_pcie_enumerate(u32 rc_idx) } bus = pci_create_root_bus(&dev->pdev->dev, 0, &msm_pcie_ops, dev, &res); &msm_pcie_ops, msm_pcie_setup_sys_data(dev), &res); if (!bus) { PCIE_ERR(dev, "PCIe: failed to create root bus for RC%d\n", Loading @@ -4175,7 +4239,14 @@ int msm_pcie_enumerate(u32 rc_idx) return -ENOMEM; } pci_rescan_bus(bus); scan_ret = pci_scan_child_bus(bus); PCIE_DBG(dev, "PCIe: RC%d: The max subordinate bus number discovered is %d\n", dev->rc_idx, ret); msm_pcie_fixup_irqs(dev); pci_assign_unassigned_bus_resources(bus); pci_bus_add_devices(bus); dev->enumerated = true; Loading @@ -4195,7 +4266,7 @@ int msm_pcie_enumerate(u32 rc_idx) device_id, pcidev); if (pcidev && (&msm_pcie_dev[rc_idx] == (struct msm_pcie_dev_t *) PCIE_BUS_PRIV_DATA(pcidev))) { PCIE_BUS_PRIV_DATA(pcidev->bus))) { msm_pcie_dev[rc_idx].dev = pcidev; found = true; PCIE_DBG(&msm_pcie_dev[rc_idx], Loading Loading @@ -4606,6 +4677,55 @@ static irqreturn_t handle_msi_irq(int irq, void *data) return IRQ_HANDLED; } static irqreturn_t handle_global_irq(int irq, void *data) { int i; struct msm_pcie_dev_t *dev = data; unsigned long irqsave_flags; u32 status; PCIE_DBG2(dev, "RC%d: Global IRQ %d received: 0x%x\n", dev->rc_idx, irq, status); spin_lock_irqsave(&dev->global_irq_lock, irqsave_flags); status = readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_STATUS); msm_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_CLEAR, 0, status); for (i = 0; i <= MSM_PCIE_INT_EVT_MAX; i++) { if (status & BIT(i)) { switch (i) { case MSM_PCIE_INT_EVT_LINK_DOWN: PCIE_DBG(dev, "PCIe: RC%d: handle linkdown event.\n", dev->rc_idx); handle_linkdown_irq(irq, data); break; case MSM_PCIE_INT_EVT_AER_LEGACY: PCIE_DBG(dev, "PCIe: RC%d: AER legacy event.\n", dev->rc_idx); handle_aer_irq(irq, data); break; case MSM_PCIE_INT_EVT_AER_ERR: PCIE_DBG(dev, "PCIe: RC%d: AER event.\n", dev->rc_idx); handle_aer_irq(irq, data); break; default: PCIE_ERR(dev, "PCIe: RC%d: Unexpected event %d is caught!\n", dev->rc_idx, i); } } } spin_unlock_irqrestore(&dev->global_irq_lock, irqsave_flags); return IRQ_HANDLED; } void msm_pcie_destroy_irq(unsigned int irq, struct msm_pcie_dev_t *pcie_dev) { int pos, i; Loading Loading @@ -4659,7 +4779,7 @@ void arch_teardown_msi_irq(unsigned int irq) void arch_teardown_msi_irqs(struct pci_dev *dev) { struct msi_desc *entry; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC:%d EP: vendor_id:0x%x device_id:0x%x\n", pcie_dev->rc_idx, dev->vendor, dev->device); Loading Loading @@ -4721,7 +4841,7 @@ static int arch_setup_msi_irq_default(struct pci_dev *pdev, { int irq; struct msi_msg msg; struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4786,7 +4906,7 @@ static int arch_setup_msi_irq_qgic(struct pci_dev *pdev, { int irq, index, firstirq = 0; struct msi_msg msg; struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4815,7 +4935,7 @@ static int arch_setup_msi_irq_qgic(struct pci_dev *pdev, int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc) { struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev); struct msm_pcie_dev_t *dev = PCIE_BUS_PRIV_DATA(pdev->bus); PCIE_DBG(dev, "RC%d\n", dev->rc_idx); Loading Loading @@ -4843,7 +4963,7 @@ int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) { struct msi_desc *entry; int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -4901,27 +5021,39 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) wakeup_source_init(&dev->ws, "RC0 pcie_wakeup_source"); /* register handler for linkdown interrupt */ if (dev->irq[MSM_PCIE_INT_LINK_DOWN].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_LINK_DOWN].num, handle_linkdown_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_LINK_DOWN].name, dev->irq[MSM_PCIE_INT_LINK_DOWN].num, handle_linkdown_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_LINK_DOWN].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: Unable to request linkdown interrupt:%d\n", PCIE_ERR(dev, "PCIe: Unable to request linkdown interrupt:%d\n", dev->irq[MSM_PCIE_INT_LINK_DOWN].num); return rc; } } /* register handler for physical MSI interrupt line */ if (dev->irq[MSM_PCIE_INT_MSI].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_MSI].num, handle_msi_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_MSI].name, dev); dev->irq[MSM_PCIE_INT_MSI].num, handle_msi_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_MSI].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: RC%d: Unable to request MSI interrupt\n", PCIE_ERR(dev, "PCIe: RC%d: Unable to request MSI interrupt\n", dev->rc_idx); return rc; } } /* register handler for AER interrupt */ if (dev->irq[MSM_PCIE_INT_PLS_ERR].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_PLS_ERR].num, handle_aer_irq, Loading @@ -4935,8 +5067,10 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) dev->irq[MSM_PCIE_INT_PLS_ERR].num); return rc; } } /* register handler for AER legacy interrupt */ if (dev->irq[MSM_PCIE_INT_AER_LEGACY].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_AER_LEGACY].num, handle_aer_irq, Loading @@ -4950,6 +5084,23 @@ int32_t msm_pcie_irq_init(struct msm_pcie_dev_t *dev) dev->irq[MSM_PCIE_INT_AER_LEGACY].num); return rc; } } if (dev->irq[MSM_PCIE_INT_GLOBAL_INT].num) { rc = devm_request_irq(pdev, dev->irq[MSM_PCIE_INT_GLOBAL_INT].num, handle_global_irq, IRQF_TRIGGER_RISING, dev->irq[MSM_PCIE_INT_GLOBAL_INT].name, dev); if (rc) { PCIE_ERR(dev, "PCIe: RC%d: Unable to request global_int interrupt: %d\n", dev->rc_idx, dev->irq[MSM_PCIE_INT_GLOBAL_INT].num); return rc; } } /* register handler for PCIE_WAKE_N interrupt line */ if (dev->wake_n) { Loading Loading @@ -5427,6 +5578,7 @@ int __init pcie_init(void) mutex_init(&msm_pcie_dev[i].recovery_lock); spin_lock_init(&msm_pcie_dev[i].linkdown_lock); spin_lock_init(&msm_pcie_dev[i].wakeup_lock); spin_lock_init(&msm_pcie_dev[i].global_irq_lock); spin_lock_init(&msm_pcie_dev[i].aer_lock); msm_pcie_dev[i].drv_ready = false; } Loading Loading @@ -5466,7 +5618,7 @@ module_exit(pcie_exit); /* RC do not represent the right class; set it to PCI_CLASS_BRIDGE_PCI */ static void msm_pcie_fixup_early(struct pci_dev *dev) { struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "hdr_type %d\n", dev->hdr_type); if (dev->hdr_type == 1) dev->class = (dev->class & 0xff) | (PCI_CLASS_BRIDGE_PCI << 8); Loading @@ -5482,7 +5634,7 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev, u32 val = 0; int ret_l23; unsigned long irqsave_flags; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d: entry\n", pcie_dev->rc_idx); Loading Loading @@ -5549,7 +5701,7 @@ static int msm_pcie_pm_suspend(struct pci_dev *dev, static void msm_pcie_fixup_suspend(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -5586,7 +5738,7 @@ static int msm_pcie_pm_resume(struct pci_dev *dev, void *user, void *data, u32 options) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d: entry\n", pcie_dev->rc_idx); Loading Loading @@ -5647,7 +5799,7 @@ static int msm_pcie_pm_resume(struct pci_dev *dev, void msm_pcie_fixup_resume(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading @@ -5670,7 +5822,7 @@ DECLARE_PCI_FIXUP_RESUME(PCIE_VENDOR_ID_RCP, PCIE_DEVICE_ID_RCP, void msm_pcie_fixup_resume_early(struct pci_dev *dev) { int ret; struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev); struct msm_pcie_dev_t *pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "RC%d\n", pcie_dev->rc_idx); Loading Loading @@ -5707,7 +5859,7 @@ int msm_pcie_pm_control(enum msm_pcie_pm_opt pm_opt, u32 busnr, void *user, goto out; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)user)->bus); if (pcie_dev) { rc_idx = pcie_dev->rc_idx; Loading Loading @@ -5884,7 +6036,7 @@ int msm_pcie_register_event(struct msm_pcie_register_event *reg) return -ENODEV; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)->bus); if (!pcie_dev) { PCIE_ERR(pcie_dev, "%s", Loading Loading @@ -5955,7 +6107,7 @@ int msm_pcie_deregister_event(struct msm_pcie_register_event *reg) return -ENODEV; } pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)); pcie_dev = PCIE_BUS_PRIV_DATA(((struct pci_dev *)reg->user)->bus); if (!pcie_dev) { PCIE_ERR(pcie_dev, "%s", Loading Loading @@ -5999,7 +6151,7 @@ int msm_pcie_recover_config(struct pci_dev *dev) struct msm_pcie_dev_t *pcie_dev; if (dev) { pcie_dev = PCIE_BUS_PRIV_DATA(dev); pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "Recovery for the link of RC%d\n", pcie_dev->rc_idx); } else { Loading Loading @@ -6041,7 +6193,7 @@ int msm_pcie_shadow_control(struct pci_dev *dev, bool enable) struct msm_pcie_dev_t *pcie_dev; if (dev) { pcie_dev = PCIE_BUS_PRIV_DATA(dev); pcie_dev = PCIE_BUS_PRIV_DATA(dev->bus); PCIE_DBG(pcie_dev, "User requests to %s shadow\n", enable ? "enable" : "disable"); Loading