Lines Matching refs:pcie

33 static int ls_pcie_g4_ltssm(struct ls_pcie_g4 *pcie)  in ls_pcie_g4_ltssm()  argument
37 state = pf_ctrl_readl(pcie, PCIE_LTSSM_STA) & LTSSM_STATE_MASK; in ls_pcie_g4_ltssm()
42 static int ls_pcie_g4_link_up(struct ls_pcie_g4 *pcie) in ls_pcie_g4_link_up() argument
46 ltssm = ls_pcie_g4_ltssm(pcie); in ls_pcie_g4_link_up()
53 static void ls_pcie_g4_ep_enable_cfg(struct ls_pcie_g4 *pcie) in ls_pcie_g4_ep_enable_cfg() argument
55 ccsr_writel(pcie, GPEX_CFG_READY, PCIE_CONFIG_READY); in ls_pcie_g4_ep_enable_cfg()
58 static void ls_pcie_g4_cfg_set_target(struct ls_pcie_g4 *pcie, u32 target) in ls_pcie_g4_cfg_set_target() argument
60 ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_L(0), target); in ls_pcie_g4_cfg_set_target()
61 ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_H(0), 0); in ls_pcie_g4_cfg_set_target()
64 static int ls_pcie_g4_outbound_win_set(struct ls_pcie_g4 *pcie, int idx, in ls_pcie_g4_outbound_win_set() argument
77 val = ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(idx)); in ls_pcie_g4_outbound_win_set()
85 ccsr_writel(pcie, PAB_AXI_AMAP_CTRL(idx), val); in ls_pcie_g4_outbound_win_set()
87 ccsr_writel(pcie, PAB_AXI_AMAP_AXI_WIN(idx), lower_32_bits(phys)); in ls_pcie_g4_outbound_win_set()
88 ccsr_writel(pcie, PAB_EXT_AXI_AMAP_AXI_WIN(idx), upper_32_bits(phys)); in ls_pcie_g4_outbound_win_set()
89 ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_L(idx), lower_32_bits(bus_addr)); in ls_pcie_g4_outbound_win_set()
90 ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_H(idx), upper_32_bits(bus_addr)); in ls_pcie_g4_outbound_win_set()
91 ccsr_writel(pcie, PAB_EXT_AXI_AMAP_SIZE(idx), size_h); in ls_pcie_g4_outbound_win_set()
96 static int ls_pcie_g4_rc_inbound_win_set(struct ls_pcie_g4 *pcie, int idx, in ls_pcie_g4_rc_inbound_win_set() argument
103 val = ccsr_readl(pcie, PAB_PEX_AMAP_CTRL(idx)); in ls_pcie_g4_rc_inbound_win_set()
110 ccsr_writel(pcie, PAB_PEX_AMAP_CTRL(idx), in ls_pcie_g4_rc_inbound_win_set()
113 ccsr_writel(pcie, PAB_EXT_PEX_AMAP_SIZE(idx), upper_32_bits(win_size)); in ls_pcie_g4_rc_inbound_win_set()
114 ccsr_writel(pcie, PAB_PEX_AMAP_AXI_WIN(idx), lower_32_bits(phys)); in ls_pcie_g4_rc_inbound_win_set()
115 ccsr_writel(pcie, PAB_EXT_PEX_AMAP_AXI_WIN(idx), upper_32_bits(phys)); in ls_pcie_g4_rc_inbound_win_set()
116 ccsr_writel(pcie, PAB_PEX_AMAP_PEX_WIN_L(idx), lower_32_bits(bus_addr)); in ls_pcie_g4_rc_inbound_win_set()
117 ccsr_writel(pcie, PAB_PEX_AMAP_PEX_WIN_H(idx), upper_32_bits(bus_addr)); in ls_pcie_g4_rc_inbound_win_set()
122 static void ls_pcie_g4_dump_wins(struct ls_pcie_g4 *pcie, int wins) in ls_pcie_g4_dump_wins() argument
129 ccsr_readl(pcie, PAB_AXI_AMAP_AXI_WIN(i))); in ls_pcie_g4_dump_wins()
131 ccsr_readl(pcie, PAB_EXT_AXI_AMAP_AXI_WIN(i))); in ls_pcie_g4_dump_wins()
133 ccsr_readl(pcie, PAB_AXI_AMAP_PEX_WIN_L(i))); in ls_pcie_g4_dump_wins()
135 ccsr_readl(pcie, PAB_AXI_AMAP_PEX_WIN_H(i))); in ls_pcie_g4_dump_wins()
137 ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(i)) & in ls_pcie_g4_dump_wins()
140 ccsr_readl(pcie, PAB_EXT_AXI_AMAP_SIZE(i))); in ls_pcie_g4_dump_wins()
142 ccsr_readl(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(i))); in ls_pcie_g4_dump_wins()
144 ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(i))); in ls_pcie_g4_dump_wins()
148 static void ls_pcie_g4_setup_wins(struct ls_pcie_g4 *pcie) in ls_pcie_g4_setup_wins() argument
154 ls_pcie_g4_rc_inbound_win_set(pcie, 0, IB_TYPE_MEM_F, 0, 0, SIZE_1T); in ls_pcie_g4_setup_wins()
157 ls_pcie_g4_outbound_win_set(pcie, 0, PAB_AXI_TYPE_CFG, in ls_pcie_g4_setup_wins()
158 pcie->cfg_res.start, 0, in ls_pcie_g4_setup_wins()
159 fdt_resource_size(&pcie->cfg_res)); in ls_pcie_g4_setup_wins()
161 pci_get_regions(pcie->bus, &io, &mem, &pref); in ls_pcie_g4_setup_wins()
165 ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_IO, in ls_pcie_g4_setup_wins()
171 ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_MEM, in ls_pcie_g4_setup_wins()
177 ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_MEM, in ls_pcie_g4_setup_wins()
181 ls_pcie_g4_dump_wins(pcie, idx); in ls_pcie_g4_setup_wins()
185 static int ls_pcie_g4_addr_valid(struct ls_pcie_g4 *pcie, pci_dev_t bdf) in ls_pcie_g4_addr_valid() argument
187 struct udevice *bus = pcie->bus; in ls_pcie_g4_addr_valid()
189 if (pcie->mode == PCI_HEADER_TYPE_NORMAL) in ls_pcie_g4_addr_valid()
192 if (!pcie->enabled) in ls_pcie_g4_addr_valid()
198 if ((PCI_BUS(bdf) > dev_seq(bus)) && (!ls_pcie_g4_link_up(pcie))) in ls_pcie_g4_addr_valid()
207 void *ls_pcie_g4_conf_address(struct ls_pcie_g4 *pcie, pci_dev_t bdf, in ls_pcie_g4_conf_address() argument
210 struct udevice *bus = pcie->bus; in ls_pcie_g4_conf_address()
215 ccsr_set_page(pcie, 0); in ls_pcie_g4_conf_address()
216 return pcie->ccsr + offset; in ls_pcie_g4_conf_address()
219 ccsr_set_page(pcie, OFFSET_TO_PAGE_IDX(offset)); in ls_pcie_g4_conf_address()
220 return pcie->ccsr + OFFSET_TO_PAGE_ADDR(offset); in ls_pcie_g4_conf_address()
227 ls_pcie_g4_cfg_set_target(pcie, target); in ls_pcie_g4_conf_address()
229 return pcie->cfg + offset; in ls_pcie_g4_conf_address()
236 struct ls_pcie_g4 *pcie = dev_get_priv(bus); in ls_pcie_g4_read_config() local
240 if (ls_pcie_g4_addr_valid(pcie, bdf)) { in ls_pcie_g4_read_config()
245 address = ls_pcie_g4_conf_address(pcie, bdf, offset); in ls_pcie_g4_read_config()
269 struct ls_pcie_g4 *pcie = dev_get_priv(bus); in ls_pcie_g4_write_config() local
272 if (ls_pcie_g4_addr_valid(pcie, bdf)) in ls_pcie_g4_write_config()
275 address = ls_pcie_g4_conf_address(pcie, bdf, offset); in ls_pcie_g4_write_config()
292 static void ls_pcie_g4_setup_ctrl(struct ls_pcie_g4 *pcie) in ls_pcie_g4_setup_ctrl() argument
297 val = ccsr_readl(pcie, GPEX_CLASSCODE); in ls_pcie_g4_setup_ctrl()
300 ccsr_writel(pcie, GPEX_CLASSCODE, val); in ls_pcie_g4_setup_ctrl()
303 val = ccsr_readl(pcie, PAB_AXI_PIO_CTRL(0)); in ls_pcie_g4_setup_ctrl()
305 ccsr_writel(pcie, PAB_AXI_PIO_CTRL(0), val); in ls_pcie_g4_setup_ctrl()
307 ls_pcie_g4_setup_wins(pcie); in ls_pcie_g4_setup_ctrl()
309 pcie->stream_id_cur = 0; in ls_pcie_g4_setup_ctrl()
312 static void ls_pcie_g4_ep_inbound_win_set(struct ls_pcie_g4 *pcie, int pf, in ls_pcie_g4_ep_inbound_win_set() argument
319 ccsr_writel(pcie, PAB_PEX_BAR_AMAP(pf, bar), BAR_AMAP_EN); in ls_pcie_g4_ep_inbound_win_set()
324 ccsr_writel(pcie, PAB_EXT_PEX_BAR_AMAP(pf, bar), val); in ls_pcie_g4_ep_inbound_win_set()
326 ccsr_writel(pcie, PAB_PEX_BAR_AMAP(pf, bar), val); in ls_pcie_g4_ep_inbound_win_set()
329 static void ls_pcie_g4_ep_setup_wins(struct ls_pcie_g4 *pcie, int pf) in ls_pcie_g4_ep_setup_wins() argument
335 if ((!pcie->sriov_support && pf > LS_G4_PF0) || pf > LS_G4_PF1) in ls_pcie_g4_ep_setup_wins()
340 ls_pcie_g4_ep_inbound_win_set(pcie, pf, bar, phys); in ls_pcie_g4_ep_setup_wins()
345 ls_pcie_g4_outbound_win_set(pcie, pf, PAB_AXI_TYPE_MEM, in ls_pcie_g4_ep_setup_wins()
346 pcie->cfg_res.start + in ls_pcie_g4_ep_setup_wins()
350 val = ccsr_readl(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(pf)); in ls_pcie_g4_ep_setup_wins()
353 ccsr_writel(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(pf), val); in ls_pcie_g4_ep_setup_wins()
356 static void ls_pcie_g4_ep_enable_bar(struct ls_pcie_g4 *pcie, int pf, in ls_pcie_g4_ep_enable_bar() argument
362 val = ccsr_readl(pcie, GPEX_BAR_ENABLE); in ls_pcie_g4_ep_enable_bar()
367 ccsr_writel(pcie, GPEX_BAR_ENABLE, val); in ls_pcie_g4_ep_enable_bar()
370 static void ls_pcie_g4_ep_set_bar_size(struct ls_pcie_g4 *pcie, int pf, in ls_pcie_g4_ep_set_bar_size() argument
377 ccsr_writel(pcie, GPEX_BAR_SELECT, bar_pos); in ls_pcie_g4_ep_set_bar_size()
378 ccsr_writel(pcie, GPEX_BAR_SIZE_LDW, mask_l); in ls_pcie_g4_ep_set_bar_size()
379 ccsr_writel(pcie, GPEX_BAR_SIZE_UDW, mask_h); in ls_pcie_g4_ep_set_bar_size()
382 static void ls_pcie_g4_ep_setup_bar(struct ls_pcie_g4 *pcie, int pf, in ls_pcie_g4_ep_setup_bar() argument
387 ls_pcie_g4_ep_enable_bar(pcie, pf, bar, vf_bar, en); in ls_pcie_g4_ep_setup_bar()
388 ls_pcie_g4_ep_set_bar_size(pcie, pf, bar, vf_bar, size); in ls_pcie_g4_ep_setup_bar()
391 static void ls_pcie_g4_ep_setup_bars(struct ls_pcie_g4 *pcie, int pf) in ls_pcie_g4_ep_setup_bars() argument
397 ls_pcie_g4_ep_setup_bar(pcie, pf, bar, false, bar_size[bar]); in ls_pcie_g4_ep_setup_bars()
399 if (!pcie->sriov_support) in ls_pcie_g4_ep_setup_bars()
404 ls_pcie_g4_ep_setup_bar(pcie, pf, bar, true, bar_size[bar]); in ls_pcie_g4_ep_setup_bars()
407 static void ls_pcie_g4_set_sriov(struct ls_pcie_g4 *pcie, int pf) in ls_pcie_g4_set_sriov() argument
411 val = ccsr_readl(pcie, GPEX_SRIOV_INIT_VFS_TOTAL_VF(pf)); in ls_pcie_g4_set_sriov()
416 ccsr_writel(pcie, GPEX_SRIOV_INIT_VFS_TOTAL_VF(pf), val); in ls_pcie_g4_set_sriov()
418 val = ccsr_readl(pcie, PCIE_SRIOV_VF_OFFSET_STRIDE); in ls_pcie_g4_set_sriov()
420 ccsr_writel(pcie, GPEX_SRIOV_VF_OFFSET_STRIDE(pf), val); in ls_pcie_g4_set_sriov()
423 static void ls_pcie_g4_setup_ep(struct ls_pcie_g4 *pcie) in ls_pcie_g4_setup_ep() argument
430 val = ccsr_readl(pcie, PAB_AXI_PIO_CTRL(0)); in ls_pcie_g4_setup_ep()
432 ccsr_writel(pcie, PAB_AXI_PIO_CTRL(0), val); in ls_pcie_g4_setup_ep()
434 sriov = ccsr_readl(pcie, PCIE_SRIOV_CAPABILITY); in ls_pcie_g4_setup_ep()
436 pcie->sriov_support = 1; in ls_pcie_g4_setup_ep()
438 pf = pcie->sriov_support ? PCIE_PF_NUM : 1; in ls_pcie_g4_setup_ep()
441 ls_pcie_g4_ep_setup_bars(pcie, i); in ls_pcie_g4_setup_ep()
442 ls_pcie_g4_ep_setup_wins(pcie, i); in ls_pcie_g4_setup_ep()
443 if (pcie->sriov_support) in ls_pcie_g4_setup_ep()
444 ls_pcie_g4_set_sriov(pcie, i); in ls_pcie_g4_setup_ep()
447 ls_pcie_g4_ep_enable_cfg(pcie); in ls_pcie_g4_setup_ep()
448 ls_pcie_g4_dump_wins(pcie, pf); in ls_pcie_g4_setup_ep()
453 struct ls_pcie_g4 *pcie = dev_get_priv(dev); in ls_pcie_g4_probe() local
461 pcie->bus = dev; in ls_pcie_g4_probe()
464 "ccsr", &pcie->ccsr_res); in ls_pcie_g4_probe()
470 pcie->idx = (pcie->ccsr_res.start - PCIE_SYS_BASE_ADDR) / in ls_pcie_g4_probe()
473 list_add(&pcie->list, &ls_pcie_g4_list); in ls_pcie_g4_probe()
475 pcie->enabled = is_serdes_configured(PCIE_SRDS_PRTCL(pcie->idx)); in ls_pcie_g4_probe()
476 if (!pcie->enabled) { in ls_pcie_g4_probe()
477 printf("PCIe%d: %s disabled\n", PCIE_SRDS_PRTCL(pcie->idx), in ls_pcie_g4_probe()
482 pcie->ccsr = map_physmem(pcie->ccsr_res.start, in ls_pcie_g4_probe()
483 fdt_resource_size(&pcie->ccsr_res), in ls_pcie_g4_probe()
487 "config", &pcie->cfg_res); in ls_pcie_g4_probe()
493 cfg_size = fdt_resource_size(&pcie->cfg_res); in ls_pcie_g4_probe()
496 PCIE_SRDS_PRTCL(pcie->idx), dev->name, cfg_size, SZ_4K); in ls_pcie_g4_probe()
500 pcie->cfg = map_physmem(pcie->cfg_res.start, in ls_pcie_g4_probe()
501 fdt_resource_size(&pcie->cfg_res), in ls_pcie_g4_probe()
505 "lut", &pcie->lut_res); in ls_pcie_g4_probe()
511 pcie->lut = map_physmem(pcie->lut_res.start, in ls_pcie_g4_probe()
512 fdt_resource_size(&pcie->lut_res), in ls_pcie_g4_probe()
516 "pf_ctrl", &pcie->pf_ctrl_res); in ls_pcie_g4_probe()
522 pcie->pf_ctrl = map_physmem(pcie->pf_ctrl_res.start, in ls_pcie_g4_probe()
523 fdt_resource_size(&pcie->pf_ctrl_res), in ls_pcie_g4_probe()
526 pcie->big_endian = fdtdec_get_bool(fdt, node, "big-endian"); in ls_pcie_g4_probe()
529 dev->name, (unsigned long)pcie->ccsr, (unsigned long)pcie->cfg, in ls_pcie_g4_probe()
530 pcie->big_endian); in ls_pcie_g4_probe()
532 pcie->mode = readb(pcie->ccsr + PCI_HEADER_TYPE) & 0x7f; in ls_pcie_g4_probe()
534 if (pcie->mode == PCI_HEADER_TYPE_NORMAL) { in ls_pcie_g4_probe()
535 printf("PCIe%u: %s %s", PCIE_SRDS_PRTCL(pcie->idx), dev->name, in ls_pcie_g4_probe()
537 ls_pcie_g4_setup_ep(pcie); in ls_pcie_g4_probe()
539 printf("PCIe%u: %s %s", PCIE_SRDS_PRTCL(pcie->idx), dev->name, in ls_pcie_g4_probe()
541 ls_pcie_g4_setup_ctrl(pcie); in ls_pcie_g4_probe()
545 val = ccsr_readl(pcie, PAB_CTRL); in ls_pcie_g4_probe()
547 ccsr_writel(pcie, PAB_CTRL, val); in ls_pcie_g4_probe()
549 val = ccsr_readl(pcie, PAB_PEX_PIO_CTRL(0)); in ls_pcie_g4_probe()
551 ccsr_writel(pcie, PAB_PEX_PIO_CTRL(0), val); in ls_pcie_g4_probe()
553 if (!ls_pcie_g4_link_up(pcie)) { in ls_pcie_g4_probe()
560 link_ctrl_sta = ccsr_readl(pcie, PCIE_LINK_CTRL_STA); in ls_pcie_g4_probe()