Lines Matching refs:pci
30 #include <linux/pci.h>
41 #include <linux/pci-epf.h>
44 #include "../../pci.h"
119 struct dw_pcie *pci;
204 dev_err(rk_pcie->pci->dev, "Read APB address failed\n");
216 dev_err(rk_pcie->pci->dev, "Write APB address failed\n");
230 static u8 rk_pcie_iatu_unroll_enabled(struct dw_pcie *pci)
234 val = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT);
242 static void rk_pcie_writel_atu(struct dw_pcie *pci, u32 reg, u32 val)
246 if (pci->ops->write_dbi) {
247 pci->ops->write_dbi(pci, pci->atu_base, reg, 0x04, val);
251 ret = dw_pcie_write(pci->atu_base + reg, 0x04, val);
253 dev_err(pci->dev, "Write ATU address failed\n");
257 static void rk_pcie_writel_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg, u32 val)
261 rk_pcie_writel_atu(pci, offset + reg, val);
264 static u32 rk_pcie_readl_atu(struct dw_pcie *pci, u32 reg)
269 if (pci->ops->read_dbi) {
270 return pci->ops->read_dbi(pci, pci->atu_base, reg, 0x04);
273 ret = dw_pcie_read(pci->atu_base + reg, 0x04, &val);
275 dev_err(pci->dev, "Read ATU address failed\n");
281 static u32 rk_pcie_readl_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg)
285 return rk_pcie_readl_atu(pci, offset + reg);
288 static int rk_pcie_prog_inbound_atu_unroll(struct dw_pcie *pci, u8 func_no, int index, int bar, u64 cpu_addr,
294 rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, lower_32_bits(cpu_addr));
295 rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, upper_32_bits(cpu_addr));
308 rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, type | PCIE_ATU_FUNC_NUM(func_no));
309 rk_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2,
317 val = rk_pcie_readl_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2);
324 dev_err(pci->dev, "Inbound iATU is not being enabled\n");
329 static int rk_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index, int bar, u64 cpu_addr,
335 if (pci->iatu_unroll_enabled) {
336 return rk_pcie_prog_inbound_atu_unroll(pci, func_no, index, bar, cpu_addr, as_type);
339 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, PCIE_ATU_REGION_INBOUND | index);
340 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, lower_32_bits(cpu_addr));
341 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, upper_32_bits(cpu_addr));
354 dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | PCIE_ATU_FUNC_NUM(func_no));
355 dw_pcie_writel_dbi(pci, PCIE_ATU_CR2,
363 val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2);
370 dev_err(pci->dev, "Inbound iATU is not being enabled\n");
387 dev_err(rk_pcie->pci->dev, "No free inbound window\n");
392 ret = rk_pcie_prog_inbound_atu(rk_pcie->pci, func_no, free_win, bar, cpu_addr, as_type);
394 dev_err(rk_pcie->pci->dev, "Failed to program IB window\n");
408 static void rk_pcie_writel_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg, u32 val)
412 rk_pcie_writel_atu(pci, offset + reg, val);
415 static u32 rk_pcie_readl_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg)
419 return rk_pcie_readl_atu(pci, offset + reg);
422 static void rk_pcie_prog_outbound_atu_unroll(struct dw_pcie *pci, u8 func_no, int index, int type, u64 cpu_addr,
428 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_BASE, lower_32_bits(cpu_addr));
429 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_BASE, upper_32_bits(cpu_addr));
430 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_LIMIT, lower_32_bits(limit_addr));
431 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_LIMIT, upper_32_bits(limit_addr));
432 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, lower_32_bits(pci_addr));
433 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, upper_32_bits(pci_addr));
434 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, type | PCIE_ATU_FUNC_NUM(func_no));
435 rk_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, PCIE_ATU_ENABLE);
442 val = rk_pcie_readl_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2);
449 dev_err(pci->dev, "Outbound iATU is not being enabled\n");
452 static void rk_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type, u64 cpu_addr, u64 pci_addr, u32 size)
456 if (pci->ops->cpu_addr_fixup) {
457 cpu_addr = pci->ops->cpu_addr_fixup(pci, cpu_addr);
460 if (pci->iatu_unroll_enabled) {
461 rk_pcie_prog_outbound_atu_unroll(pci, 0x0, index, type, cpu_addr, pci_addr, size);
465 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, PCIE_ATU_REGION_OUTBOUND | index);
466 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_BASE, lower_32_bits(cpu_addr));
467 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_BASE, upper_32_bits(cpu_addr));
468 dw_pcie_writel_dbi(pci, PCIE_ATU_LIMIT, lower_32_bits(cpu_addr + size - 1));
469 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, lower_32_bits(pci_addr));
470 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, upper_32_bits(pci_addr));
471 dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | PCIE_ATU_FUNC_NUM(0x0));
472 dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, PCIE_ATU_ENABLE);
479 val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2);
486 dev_err(pci->dev, "Outbound iATU is not being enabled\n");
498 dev_err(rk_pcie->pci->dev, "No free outbound window\n");
503 rk_pcie_prog_outbound_atu(rk_pcie->pci, free_win, PCIE_ATU_TYPE_MEM, phys_addr, pci_addr, size);
520 dw_pcie_writel_dbi(rk_pcie->pci, reg, 0x0);
522 dw_pcie_writel_dbi(rk_pcie->pci, reg + 4, 0x0);
577 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_PL_ORDER_RULE_CTRL_OFF, 0xff00);
598 static int rk_pcie_link_up(struct dw_pcie *pci)
600 struct rk_pcie *rk_pcie = to_rk_pcie(pci);
637 struct dw_pcie *pci = rk_pcie->pci;
639 dev_info(pci->dev, "ltssm = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
641 dev_info(pci->dev, "fifo_status = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_STATUS));
646 static int rk_pcie_establish_link(struct dw_pcie *pci)
649 struct rk_pcie *rk_pcie = to_rk_pcie(pci);
651 if (dw_pcie_link_up(pci)) {
652 dev_err(pci->dev, "link is already up\n");
679 if (dw_pcie_link_up(pci)) {
680 dev_info(pci->dev, "PCIe Link up, LTSSM is 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
685 dev_info_ratelimited(pci->dev, "PCIe Linking... LTSSM is 0x%x\n",
691 dev_err(pci->dev, "PCIe Link Fail\n");
698 rk_pcie->dma_obj = rk_pcie_dma_obj_probe(rk_pcie->pci->dev);
700 dev_err(rk_pcie->pci->dev, "failed to prepare dma object\n");
708 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_MASK, 0x0);
710 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_MASK, 0x0);
719 struct device *dev = rk_pcie->pci->dev;
726 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_MASK, 0x0);
728 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_RD_INT_MASK, 0x0);
736 val = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_PORT_LINK_CONTROL);
756 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_PORT_LINK_CONTROL, val);
759 val = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
778 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
781 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_TYPE0_STATUS_COMMAND_REG, 0x6);
785 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_RESBAR_CTRL_REG0_REG, 0x600);
789 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_SB_BAR0_MASK_REG, val);
792 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_TYPE0_BAR0_REG, rk_pcie->mem_start);
799 struct device *dev = rk_pcie->pci->dev;
852 struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
856 ret = rk_pcie_establish_link(pci);
869 struct dw_pcie *pci = rk_pcie->pci;
870 struct pcie_port *pp = &pci->pp;
871 struct device *dev = pci->dev;
892 struct device *dev = rk_pcie->pci->dev;
918 rk_pcie->pci->iatu_unroll_enabled = rk_pcie_iatu_unroll_enabled(rk_pcie->pci);
928 ret = rk_pcie_establish_link(rk_pcie->pci);
951 struct device *dev = rk_pcie->pci->dev;
1012 rk_pcie->pci->dbi_base = rk_pcie->dbi_base;
1036 struct device *dev = rk_pcie->pci->dev;
1081 struct device *dev = rk_pcie->pci->dev;
1141 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_ENB, obj->cur->wr_enb.asdword);
1142 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_CTRL_LO, obj->cur->ctx_reg.ctrllo.asdword);
1143 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_CTRL_HI, obj->cur->ctx_reg.ctrlhi.asdword);
1144 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_XFERSIZE, obj->cur->ctx_reg.xfersize);
1145 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_SAR_PTR_LO, obj->cur->ctx_reg.sarptrlo);
1146 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_SAR_PTR_HI, obj->cur->ctx_reg.sarptrhi);
1147 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_DAR_PTR_LO, obj->cur->ctx_reg.darptrlo);
1148 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_DAR_PTR_HI, obj->cur->ctx_reg.darptrhi);
1149 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_WEILO, obj->cur->wr_weilo.asdword);
1150 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_DOORBELL, obj->cur->start.asdword);
1195 status.asdword = dw_pcie_readl_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_STATUS);
1203 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, clears.asdword);
1208 dev_err(rk_pcie->pci->dev, "%s, abort\n", __func__);
1210 dw_pcie_writel_dbi(rk_pcie->pci, PCIE_DMA_OFFSET + PCIE_DMA_WR_INT_CLEAR, clears.asdword);
1223 dev_err(rk_pcie->pci->dev, "missing sys IRQ resource\n");
1227 ret = devm_request_irq(rk_pcie->pci->dev, irq, rk_pcie_sys_irq_handler, IRQF_SHARED, "pcie-sys", rk_pcie);
1229 dev_err(rk_pcie->pci->dev, "failed to request PCIe subsystem IRQ\n");
1274 struct device *dev = rk_pcie->pci->dev;
1330 struct device *dev = rockchip->pci->dev;
1357 struct device *dev = rockchip->pci->dev;
1377 struct device *dev = rk_pcie->pci->dev;
1400 struct device *dev = rk_pcie->pci->dev;
1425 struct dw_pcie *pci;
1448 pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
1449 if (!pci) {
1453 pci->dev = dev;
1454 pci->ops = &dw_pcie_ops;
1457 rk_pcie->pci = pci;
1515 dw_pcie_dbi_ro_wr_en(pci);
1544 val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL);
1546 dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val);
1552 val = dw_pcie_readl_dbi(pci, PCIE_CAP_LINK_CONTROL2_LINK_STATUS);
1554 dw_pcie_writel_dbi(pci, PCIE_CAP_LINK_CONTROL2_LINK_STATUS, val);
1588 dw_pcie_dbi_ro_wr_dis(pci);
1674 dw_pcie_dbi_ro_wr_en(rk_pcie->pci);
1690 dw_pcie_setup_rc(&rk_pcie->pci->pp);
1693 ret = rk_pcie_establish_link(rk_pcie->pci);
1714 dw_pcie_dbi_ro_wr_dis(rk_pcie->pci);