Lines Matching refs:pcie

83 	struct iproc_pcie *pcie;  in iproc_data()  local
87 pcie = sys->private_data; in iproc_data()
89 pcie = bus->sysdata; in iproc_data()
91 return pcie; in iproc_data()
102 struct iproc_pcie *pcie = iproc_data(bus); in iproc_pcie_map_cfg_bus() local
113 pcie->base + CFG_IND_ADDR_OFFSET); in iproc_pcie_map_cfg_bus()
114 return (pcie->base + CFG_IND_DATA_OFFSET); in iproc_pcie_map_cfg_bus()
126 writel(val, pcie->base + CFG_ADDR_OFFSET); in iproc_pcie_map_cfg_bus()
128 return (pcie->base + CFG_DATA_OFFSET); in iproc_pcie_map_cfg_bus()
137 static void iproc_pcie_reset(struct iproc_pcie *pcie) in iproc_pcie_reset() argument
145 val = readl(pcie->base + CLK_CONTROL_OFFSET); in iproc_pcie_reset()
148 writel(val, pcie->base + CLK_CONTROL_OFFSET); in iproc_pcie_reset()
152 writel(val, pcie->base + CLK_CONTROL_OFFSET); in iproc_pcie_reset()
156 static int iproc_pcie_check_link(struct iproc_pcie *pcie, struct pci_bus *bus) in iproc_pcie_check_link() argument
163 val = readl(pcie->base + PCIE_LINK_STATUS_OFFSET); in iproc_pcie_check_link()
165 dev_err(pcie->dev, "PHY or data link is INACTIVE!\n"); in iproc_pcie_check_link()
172 dev_err(pcie->dev, "in EP mode, hdr=%#02x\n", hdr_type); in iproc_pcie_check_link()
217 dev_info(pcie->dev, "link: %s\n", link_is_active ? "UP" : "DOWN"); in iproc_pcie_check_link()
222 static void iproc_pcie_enable(struct iproc_pcie *pcie) in iproc_pcie_enable() argument
224 writel(SYS_RC_INTX_MASK, pcie->base + SYS_RC_INTX_EN); in iproc_pcie_enable()
238 static int iproc_pcie_setup_ob(struct iproc_pcie *pcie, u64 axi_addr, in iproc_pcie_setup_ob() argument
241 struct iproc_pcie_ob *ob = &pcie->ob; in iproc_pcie_setup_ob()
247 dev_err(pcie->dev, in iproc_pcie_setup_ob()
255 dev_err(pcie->dev, in iproc_pcie_setup_ob()
262 dev_err(pcie->dev, in iproc_pcie_setup_ob()
276 (ob->set_oarr_size ? 1 : 0), pcie->base + OARR_LO(i)); in iproc_pcie_setup_ob()
277 writel(upper_32_bits(axi_addr), pcie->base + OARR_HI(i)); in iproc_pcie_setup_ob()
278 writel(lower_32_bits(pci_addr), pcie->base + OMAP_LO(i)); in iproc_pcie_setup_ob()
279 writel(upper_32_bits(pci_addr), pcie->base + OMAP_HI(i)); in iproc_pcie_setup_ob()
292 static int iproc_pcie_map_ranges(struct iproc_pcie *pcie, in iproc_pcie_map_ranges() argument
307 ret = iproc_pcie_setup_ob(pcie, res->start, in iproc_pcie_map_ranges()
314 dev_err(pcie->dev, "invalid resource %pR\n", res); in iproc_pcie_map_ranges()
322 int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res) in iproc_pcie_setup() argument
328 if (!pcie || !pcie->dev || !pcie->base) in iproc_pcie_setup()
331 ret = phy_init(pcie->phy); in iproc_pcie_setup()
333 dev_err(pcie->dev, "unable to initialize PCIe PHY\n"); in iproc_pcie_setup()
337 ret = phy_power_on(pcie->phy); in iproc_pcie_setup()
339 dev_err(pcie->dev, "unable to power on PCIe PHY\n"); in iproc_pcie_setup()
343 iproc_pcie_reset(pcie); in iproc_pcie_setup()
345 if (pcie->need_ob_cfg) { in iproc_pcie_setup()
346 ret = iproc_pcie_map_ranges(pcie, res); in iproc_pcie_setup()
348 dev_err(pcie->dev, "map failed\n"); in iproc_pcie_setup()
354 pcie->sysdata.private_data = pcie; in iproc_pcie_setup()
355 sysdata = &pcie->sysdata; in iproc_pcie_setup()
357 sysdata = pcie; in iproc_pcie_setup()
360 bus = pci_create_root_bus(pcie->dev, 0, &iproc_pcie_ops, sysdata, res); in iproc_pcie_setup()
362 dev_err(pcie->dev, "unable to create PCI root bus\n"); in iproc_pcie_setup()
366 pcie->root_bus = bus; in iproc_pcie_setup()
368 ret = iproc_pcie_check_link(pcie, bus); in iproc_pcie_setup()
370 dev_err(pcie->dev, "no PCIe EP device detected\n"); in iproc_pcie_setup()
374 iproc_pcie_enable(pcie); in iproc_pcie_setup()
378 pci_fixup_irqs(pci_common_swizzle, pcie->map_irq); in iproc_pcie_setup()
388 phy_power_off(pcie->phy); in iproc_pcie_setup()
390 phy_exit(pcie->phy); in iproc_pcie_setup()
395 int iproc_pcie_remove(struct iproc_pcie *pcie) in iproc_pcie_remove() argument
397 pci_stop_root_bus(pcie->root_bus); in iproc_pcie_remove()
398 pci_remove_root_bus(pcie->root_bus); in iproc_pcie_remove()
400 phy_power_off(pcie->phy); in iproc_pcie_remove()
401 phy_exit(pcie->phy); in iproc_pcie_remove()