Lines Matching refs:pp

32 #define to_imx6_pcie(x)	container_of(x, struct imx6_pcie, pp)
39 struct pcie_port pp; member
217 static int imx6_pcie_assert_core_reset(struct pcie_port *pp) in imx6_pcie_assert_core_reset() argument
219 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); in imx6_pcie_assert_core_reset()
238 val = readl(pp->dbi_base + PCIE_PL_PFLR); in imx6_pcie_assert_core_reset()
241 writel(val, pp->dbi_base + PCIE_PL_PFLR); in imx6_pcie_assert_core_reset()
255 static int imx6_pcie_deassert_core_reset(struct pcie_port *pp) in imx6_pcie_deassert_core_reset() argument
257 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); in imx6_pcie_deassert_core_reset()
262 dev_err(pp->dev, "unable to enable pcie_phy clock\n"); in imx6_pcie_deassert_core_reset()
268 dev_err(pp->dev, "unable to enable pcie_bus clock\n"); in imx6_pcie_deassert_core_reset()
274 dev_err(pp->dev, "unable to enable pcie clock\n"); in imx6_pcie_deassert_core_reset()
311 static void imx6_pcie_init_phy(struct pcie_port *pp) in imx6_pcie_init_phy() argument
313 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); in imx6_pcie_init_phy()
336 static int imx6_pcie_wait_for_link(struct pcie_port *pp) in imx6_pcie_wait_for_link() argument
340 while (!dw_pcie_link_up(pp)) { in imx6_pcie_wait_for_link()
345 dev_err(pp->dev, "phy link never came up\n"); in imx6_pcie_wait_for_link()
346 dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n", in imx6_pcie_wait_for_link()
347 readl(pp->dbi_base + PCIE_PHY_DEBUG_R0), in imx6_pcie_wait_for_link()
348 readl(pp->dbi_base + PCIE_PHY_DEBUG_R1)); in imx6_pcie_wait_for_link()
357 struct pcie_port *pp = arg; in imx6_pcie_msi_handler() local
359 return dw_handle_msi_irq(pp); in imx6_pcie_msi_handler()
362 static int imx6_pcie_start_link(struct pcie_port *pp) in imx6_pcie_start_link() argument
364 struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); in imx6_pcie_start_link()
373 tmp = readl(pp->dbi_base + PCIE_RC_LCR); in imx6_pcie_start_link()
376 writel(tmp, pp->dbi_base + PCIE_RC_LCR); in imx6_pcie_start_link()
382 ret = imx6_pcie_wait_for_link(pp); in imx6_pcie_start_link()
387 tmp = readl(pp->dbi_base + PCIE_RC_LCR); in imx6_pcie_start_link()
390 writel(tmp, pp->dbi_base + PCIE_RC_LCR); in imx6_pcie_start_link()
396 tmp = readl(pp->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); in imx6_pcie_start_link()
398 writel(tmp, pp->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); in imx6_pcie_start_link()
402 tmp = readl(pp->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); in imx6_pcie_start_link()
411 ret = imx6_pcie_wait_for_link(pp); in imx6_pcie_start_link()
416 dev_err(pp->dev, "Failed to bring link up!\n"); in imx6_pcie_start_link()
418 tmp = readl(pp->dbi_base + 0x80); in imx6_pcie_start_link()
419 dev_dbg(pp->dev, "Link up, Gen=%i\n", (tmp >> 16) & 0xf); in imx6_pcie_start_link()
425 static void imx6_pcie_host_init(struct pcie_port *pp) in imx6_pcie_host_init() argument
427 imx6_pcie_assert_core_reset(pp); in imx6_pcie_host_init()
429 imx6_pcie_init_phy(pp); in imx6_pcie_host_init()
431 imx6_pcie_deassert_core_reset(pp); in imx6_pcie_host_init()
433 dw_pcie_setup_rc(pp); in imx6_pcie_host_init()
435 imx6_pcie_start_link(pp); in imx6_pcie_host_init()
438 dw_pcie_msi_init(pp); in imx6_pcie_host_init()
441 static void imx6_pcie_reset_phy(struct pcie_port *pp) in imx6_pcie_reset_phy() argument
445 pcie_phy_read(pp->dbi_base, PHY_RX_OVRD_IN_LO, &temp); in imx6_pcie_reset_phy()
448 pcie_phy_write(pp->dbi_base, PHY_RX_OVRD_IN_LO, temp); in imx6_pcie_reset_phy()
452 pcie_phy_read(pp->dbi_base, PHY_RX_OVRD_IN_LO, &temp); in imx6_pcie_reset_phy()
455 pcie_phy_write(pp->dbi_base, PHY_RX_OVRD_IN_LO, temp); in imx6_pcie_reset_phy()
458 static int imx6_pcie_link_up(struct pcie_port *pp) in imx6_pcie_link_up() argument
480 rc = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1); in imx6_pcie_link_up()
487 dev_dbg(pp->dev, "Link is up, but still in training\n"); in imx6_pcie_link_up()
501 pcie_phy_read(pp->dbi_base, PCIE_PHY_RX_ASIC_OUT, &rx_valid); in imx6_pcie_link_up()
502 debug_r0 = readl(pp->dbi_base + PCIE_PHY_DEBUG_R0); in imx6_pcie_link_up()
510 dev_err(pp->dev, "transition to gen2 is stuck, reset PHY!\n"); in imx6_pcie_link_up()
511 dev_dbg(pp->dev, "debug_r0=%08x debug_r1=%08x\n", debug_r0, rc); in imx6_pcie_link_up()
513 imx6_pcie_reset_phy(pp); in imx6_pcie_link_up()
523 static int __init imx6_add_pcie_port(struct pcie_port *pp, in imx6_add_pcie_port() argument
529 pp->msi_irq = platform_get_irq_byname(pdev, "msi"); in imx6_add_pcie_port()
530 if (pp->msi_irq <= 0) { in imx6_add_pcie_port()
535 ret = devm_request_irq(&pdev->dev, pp->msi_irq, in imx6_add_pcie_port()
538 "mx6-pcie-msi", pp); in imx6_add_pcie_port()
545 pp->root_bus_nr = -1; in imx6_add_pcie_port()
546 pp->ops = &imx6_pcie_host_ops; in imx6_add_pcie_port()
548 ret = dw_pcie_host_init(pp); in imx6_add_pcie_port()
560 struct pcie_port *pp; in imx6_pcie_probe() local
569 pp = &imx6_pcie->pp; in imx6_pcie_probe()
570 pp->dev = &pdev->dev; in imx6_pcie_probe()
577 pp->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base); in imx6_pcie_probe()
578 if (IS_ERR(pp->dbi_base)) in imx6_pcie_probe()
579 return PTR_ERR(pp->dbi_base); in imx6_pcie_probe()
622 ret = imx6_add_pcie_port(pp, pdev); in imx6_pcie_probe()
635 imx6_pcie_assert_core_reset(&imx6_pcie->pp); in imx6_pcie_shutdown()