Lines Matching full:pci
16 #include "../../pci.h"
21 * are for configuring host controllers, which are bridges *to* PCI devices but
22 * are not PCI devices themselves.
24 static u8 __dw_pcie_find_next_cap(struct dw_pcie *pci, u8 cap_ptr, in __dw_pcie_find_next_cap() argument
33 reg = dw_pcie_readw_dbi(pci, cap_ptr); in __dw_pcie_find_next_cap()
43 return __dw_pcie_find_next_cap(pci, next_cap_ptr, cap); in __dw_pcie_find_next_cap()
46 u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap) in dw_pcie_find_capability() argument
51 reg = dw_pcie_readw_dbi(pci, PCI_CAPABILITY_LIST); in dw_pcie_find_capability()
54 return __dw_pcie_find_next_cap(pci, next_cap_ptr, cap); in dw_pcie_find_capability()
58 static u16 dw_pcie_find_next_ext_capability(struct dw_pcie *pci, u16 start, in dw_pcie_find_next_ext_capability() argument
71 header = dw_pcie_readl_dbi(pci, pos); in dw_pcie_find_next_ext_capability()
87 header = dw_pcie_readl_dbi(pci, pos); in dw_pcie_find_next_ext_capability()
93 u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap) in dw_pcie_find_ext_capability() argument
95 return dw_pcie_find_next_ext_capability(pci, 0, cap); in dw_pcie_find_ext_capability()
139 u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size) in dw_pcie_read_dbi() argument
144 if (pci->ops->read_dbi) in dw_pcie_read_dbi()
145 return pci->ops->read_dbi(pci, pci->dbi_base, reg, size); in dw_pcie_read_dbi()
147 ret = dw_pcie_read(pci->dbi_base + reg, size, &val); in dw_pcie_read_dbi()
149 dev_err(pci->dev, "Read DBI address failed\n"); in dw_pcie_read_dbi()
155 void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val) in dw_pcie_write_dbi() argument
159 if (pci->ops->write_dbi) { in dw_pcie_write_dbi()
160 pci->ops->write_dbi(pci, pci->dbi_base, reg, size, val); in dw_pcie_write_dbi()
164 ret = dw_pcie_write(pci->dbi_base + reg, size, val); in dw_pcie_write_dbi()
166 dev_err(pci->dev, "Write DBI address failed\n"); in dw_pcie_write_dbi()
170 void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val) in dw_pcie_write_dbi2() argument
174 if (pci->ops->write_dbi2) { in dw_pcie_write_dbi2()
175 pci->ops->write_dbi2(pci, pci->dbi_base2, reg, size, val); in dw_pcie_write_dbi2()
179 ret = dw_pcie_write(pci->dbi_base2 + reg, size, val); in dw_pcie_write_dbi2()
181 dev_err(pci->dev, "write DBI address failed\n"); in dw_pcie_write_dbi2()
184 static u32 dw_pcie_readl_atu(struct dw_pcie *pci, u32 reg) in dw_pcie_readl_atu() argument
189 if (pci->ops->read_dbi) in dw_pcie_readl_atu()
190 return pci->ops->read_dbi(pci, pci->atu_base, reg, 4); in dw_pcie_readl_atu()
192 ret = dw_pcie_read(pci->atu_base + reg, 4, &val); in dw_pcie_readl_atu()
194 dev_err(pci->dev, "Read ATU address failed\n"); in dw_pcie_readl_atu()
199 static void dw_pcie_writel_atu(struct dw_pcie *pci, u32 reg, u32 val) in dw_pcie_writel_atu() argument
203 if (pci->ops->write_dbi) { in dw_pcie_writel_atu()
204 pci->ops->write_dbi(pci, pci->atu_base, reg, 4, val); in dw_pcie_writel_atu()
208 ret = dw_pcie_write(pci->atu_base + reg, 4, val); in dw_pcie_writel_atu()
210 dev_err(pci->dev, "Write ATU address failed\n"); in dw_pcie_writel_atu()
213 static u32 dw_pcie_readl_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg) in dw_pcie_readl_ob_unroll() argument
217 return dw_pcie_readl_atu(pci, offset + reg); in dw_pcie_readl_ob_unroll()
220 static void dw_pcie_writel_ob_unroll(struct dw_pcie *pci, u32 index, u32 reg, in dw_pcie_writel_ob_unroll() argument
225 dw_pcie_writel_atu(pci, offset + reg, val); in dw_pcie_writel_ob_unroll()
228 static void dw_pcie_prog_outbound_atu_unroll(struct dw_pcie *pci, u8 func_no, in dw_pcie_prog_outbound_atu_unroll() argument
236 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_BASE, in dw_pcie_prog_outbound_atu_unroll()
238 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_BASE, in dw_pcie_prog_outbound_atu_unroll()
240 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_LIMIT, in dw_pcie_prog_outbound_atu_unroll()
242 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_LIMIT, in dw_pcie_prog_outbound_atu_unroll()
244 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, in dw_pcie_prog_outbound_atu_unroll()
246 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, in dw_pcie_prog_outbound_atu_unroll()
248 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, in dw_pcie_prog_outbound_atu_unroll()
250 dw_pcie_writel_ob_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, in dw_pcie_prog_outbound_atu_unroll()
258 val = dw_pcie_readl_ob_unroll(pci, index, in dw_pcie_prog_outbound_atu_unroll()
265 dev_err(pci->dev, "Outbound iATU is not being enabled\n"); in dw_pcie_prog_outbound_atu_unroll()
268 static void __dw_pcie_prog_outbound_atu(struct dw_pcie *pci, u8 func_no, in __dw_pcie_prog_outbound_atu() argument
274 if (pci->ops->cpu_addr_fixup) in __dw_pcie_prog_outbound_atu()
275 cpu_addr = pci->ops->cpu_addr_fixup(pci, cpu_addr); in __dw_pcie_prog_outbound_atu()
277 if (pci->iatu_unroll_enabled) { in __dw_pcie_prog_outbound_atu()
278 dw_pcie_prog_outbound_atu_unroll(pci, func_no, index, type, in __dw_pcie_prog_outbound_atu()
283 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, in __dw_pcie_prog_outbound_atu()
285 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_BASE, in __dw_pcie_prog_outbound_atu()
287 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_BASE, in __dw_pcie_prog_outbound_atu()
289 dw_pcie_writel_dbi(pci, PCIE_ATU_LIMIT, in __dw_pcie_prog_outbound_atu()
291 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, in __dw_pcie_prog_outbound_atu()
293 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, in __dw_pcie_prog_outbound_atu()
295 dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | in __dw_pcie_prog_outbound_atu()
297 dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, PCIE_ATU_ENABLE); in __dw_pcie_prog_outbound_atu()
304 val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2); in __dw_pcie_prog_outbound_atu()
310 dev_err(pci->dev, "Outbound iATU is not being enabled\n"); in __dw_pcie_prog_outbound_atu()
313 void dw_pcie_prog_outbound_atu(struct dw_pcie *pci, int index, int type, in dw_pcie_prog_outbound_atu() argument
316 __dw_pcie_prog_outbound_atu(pci, 0, index, type, in dw_pcie_prog_outbound_atu()
320 void dw_pcie_prog_ep_outbound_atu(struct dw_pcie *pci, u8 func_no, int index, in dw_pcie_prog_ep_outbound_atu() argument
324 __dw_pcie_prog_outbound_atu(pci, func_no, index, type, in dw_pcie_prog_ep_outbound_atu()
328 static u32 dw_pcie_readl_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg) in dw_pcie_readl_ib_unroll() argument
332 return dw_pcie_readl_atu(pci, offset + reg); in dw_pcie_readl_ib_unroll()
335 static void dw_pcie_writel_ib_unroll(struct dw_pcie *pci, u32 index, u32 reg, in dw_pcie_writel_ib_unroll() argument
340 dw_pcie_writel_atu(pci, offset + reg, val); in dw_pcie_writel_ib_unroll()
343 static int dw_pcie_prog_inbound_atu_unroll(struct dw_pcie *pci, u8 func_no, in dw_pcie_prog_inbound_atu_unroll() argument
350 dw_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_LOWER_TARGET, in dw_pcie_prog_inbound_atu_unroll()
352 dw_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_UPPER_TARGET, in dw_pcie_prog_inbound_atu_unroll()
366 dw_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL1, type | in dw_pcie_prog_inbound_atu_unroll()
368 dw_pcie_writel_ib_unroll(pci, index, PCIE_ATU_UNR_REGION_CTRL2, in dw_pcie_prog_inbound_atu_unroll()
378 val = dw_pcie_readl_ib_unroll(pci, index, in dw_pcie_prog_inbound_atu_unroll()
385 dev_err(pci->dev, "Inbound iATU is not being enabled\n"); in dw_pcie_prog_inbound_atu_unroll()
390 int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, u8 func_no, int index, in dw_pcie_prog_inbound_atu() argument
397 if (pci->iatu_unroll_enabled) in dw_pcie_prog_inbound_atu()
398 return dw_pcie_prog_inbound_atu_unroll(pci, func_no, index, bar, in dw_pcie_prog_inbound_atu()
401 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, PCIE_ATU_REGION_INBOUND | in dw_pcie_prog_inbound_atu()
403 dw_pcie_writel_dbi(pci, PCIE_ATU_LOWER_TARGET, lower_32_bits(cpu_addr)); in dw_pcie_prog_inbound_atu()
404 dw_pcie_writel_dbi(pci, PCIE_ATU_UPPER_TARGET, upper_32_bits(cpu_addr)); in dw_pcie_prog_inbound_atu()
417 dw_pcie_writel_dbi(pci, PCIE_ATU_CR1, type | in dw_pcie_prog_inbound_atu()
419 dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, PCIE_ATU_ENABLE | in dw_pcie_prog_inbound_atu()
428 val = dw_pcie_readl_dbi(pci, PCIE_ATU_CR2); in dw_pcie_prog_inbound_atu()
434 dev_err(pci->dev, "Inbound iATU is not being enabled\n"); in dw_pcie_prog_inbound_atu()
439 void dw_pcie_disable_atu(struct dw_pcie *pci, int index, in dw_pcie_disable_atu() argument
455 dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, region | index); in dw_pcie_disable_atu()
456 dw_pcie_writel_dbi(pci, PCIE_ATU_CR2, ~(u32)PCIE_ATU_ENABLE); in dw_pcie_disable_atu()
459 int dw_pcie_wait_for_link(struct dw_pcie *pci) in dw_pcie_wait_for_link() argument
465 if (dw_pcie_link_up(pci)) { in dw_pcie_wait_for_link()
466 dev_info(pci->dev, "Link up\n"); in dw_pcie_wait_for_link()
472 dev_info(pci->dev, "Phy link never came up\n"); in dw_pcie_wait_for_link()
478 int dw_pcie_link_up(struct dw_pcie *pci) in dw_pcie_link_up() argument
482 if (pci->ops->link_up) in dw_pcie_link_up()
483 return pci->ops->link_up(pci); in dw_pcie_link_up()
485 val = readl(pci->dbi_base + PCIE_PORT_DEBUG1); in dw_pcie_link_up()
490 void dw_pcie_upconfig_setup(struct dw_pcie *pci) in dw_pcie_upconfig_setup() argument
494 val = dw_pcie_readl_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL); in dw_pcie_upconfig_setup()
496 dw_pcie_writel_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL, val); in dw_pcie_upconfig_setup()
500 static void dw_pcie_link_set_max_speed(struct dw_pcie *pci, u32 link_gen) in dw_pcie_link_set_max_speed() argument
503 u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in dw_pcie_link_set_max_speed()
505 cap = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCAP); in dw_pcie_link_set_max_speed()
506 ctrl2 = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCTL2); in dw_pcie_link_set_max_speed()
529 dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCTL2, ctrl2 | link_speed); in dw_pcie_link_set_max_speed()
532 dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCAP, cap | link_speed); in dw_pcie_link_set_max_speed()
536 static u8 dw_pcie_iatu_unroll_enabled(struct dw_pcie *pci) in dw_pcie_iatu_unroll_enabled() argument
540 val = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT); in dw_pcie_iatu_unroll_enabled()
547 void dw_pcie_setup(struct dw_pcie *pci) in dw_pcie_setup() argument
550 struct device *dev = pci->dev; in dw_pcie_setup()
554 if (pci->version >= 0x480A || (!pci->version && in dw_pcie_setup()
555 dw_pcie_iatu_unroll_enabled(pci))) { in dw_pcie_setup()
556 pci->iatu_unroll_enabled = true; in dw_pcie_setup()
557 if (!pci->atu_base) in dw_pcie_setup()
558 pci->atu_base = in dw_pcie_setup()
560 if (IS_ERR(pci->atu_base)) in dw_pcie_setup()
561 pci->atu_base = pci->dbi_base + DEFAULT_DBI_ATU_OFFSET; in dw_pcie_setup()
563 dev_dbg(pci->dev, "iATU unroll: %s\n", pci->iatu_unroll_enabled ? in dw_pcie_setup()
566 if (pci->link_gen > 0) in dw_pcie_setup()
567 dw_pcie_link_set_max_speed(pci, pci->link_gen); in dw_pcie_setup()
570 if (pci->n_fts[0]) { in dw_pcie_setup()
571 val = dw_pcie_readl_dbi(pci, PCIE_PORT_AFR); in dw_pcie_setup()
573 val |= PORT_AFR_N_FTS(pci->n_fts[0]); in dw_pcie_setup()
574 val |= PORT_AFR_CC_N_FTS(pci->n_fts[0]); in dw_pcie_setup()
575 dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val); in dw_pcie_setup()
579 if (pci->n_fts[1]) { in dw_pcie_setup()
580 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL); in dw_pcie_setup()
582 val |= pci->n_fts[pci->link_gen - 1]; in dw_pcie_setup()
583 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val); in dw_pcie_setup()
586 val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL); in dw_pcie_setup()
589 dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val); in dw_pcie_setup()
591 of_property_read_u32(np, "num-lanes", &pci->num_lanes); in dw_pcie_setup()
592 if (!pci->num_lanes) { in dw_pcie_setup()
593 dev_dbg(pci->dev, "Using h/w default number of lanes\n"); in dw_pcie_setup()
600 switch (pci->num_lanes) { in dw_pcie_setup()
614 dev_err(pci->dev, "num-lanes %u: invalid value\n", pci->num_lanes); in dw_pcie_setup()
617 dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val); in dw_pcie_setup()
620 val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL); in dw_pcie_setup()
622 switch (pci->num_lanes) { in dw_pcie_setup()
636 dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val); in dw_pcie_setup()
639 val = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS); in dw_pcie_setup()
642 dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val); in dw_pcie_setup()