Lines Matching +full:pcie +full:- +full:ep

4  * SPDX-License-Identifier: Apache-2.0
8 #include <zephyr/drivers/pcie/endpoint/pcie_ep.h>
22 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_conf_read()
25 pcie_write32(offset, &cfg->base->paxb_config_ind_addr); in iproc_pcie_conf_read()
28 *data = pcie_read32(&cfg->base->paxb_config_ind_data); in iproc_pcie_conf_read()
36 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_conf_write()
39 pcie_write32(offset, &cfg->base->paxb_config_ind_addr); in iproc_pcie_conf_write()
42 pcie_write32(data, &cfg->base->paxb_config_ind_data); in iproc_pcie_conf_write()
49 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_map_addr()
50 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_map_addr()
57 key = k_spin_lock(&ctx->ob_map_lock); in iproc_pcie_map_addr()
63 ob_mem_type == PCIE_OB_ANYMEM) && !ctx->highmem_in_use) { in iproc_pcie_map_addr()
65 pcie_ob_base = cfg->map_high_base; in iproc_pcie_map_addr()
66 pcie_ob_size = cfg->map_high_size; in iproc_pcie_map_addr()
68 ob_mem_type == PCIE_OB_ANYMEM) && !ctx->lowmem_in_use) { in iproc_pcie_map_addr()
70 pcie_ob_base = cfg->map_low_base; in iproc_pcie_map_addr()
71 pcie_ob_size = cfg->map_low_size; in iproc_pcie_map_addr()
73 ret = -EBUSY; in iproc_pcie_map_addr()
79 ret = -ENOTSUP; in iproc_pcie_map_addr()
83 /* Host PCIe address should be aligned to outbound window size */ in iproc_pcie_map_addr()
84 pcie_addr_start = pcie_addr & ~(pcie_ob_size - 1); in iproc_pcie_map_addr()
86 /* Program OARR with PCIe outbound address */ in iproc_pcie_map_addr()
87 pcie_write32(((pcie_ob_base & ~(pcie_ob_size - 1)) | PAXB_OARR_VALID), in iproc_pcie_map_addr()
88 &cfg->base->paxb_oarr[idx].lower); in iproc_pcie_map_addr()
89 pcie_write32(pcie_ob_base >> 32, &cfg->base->paxb_oarr[idx].upper); in iproc_pcie_map_addr()
91 /* Program OMAP with Host PCIe address */ in iproc_pcie_map_addr()
93 &cfg->base->paxb_omap[idx].lower); in iproc_pcie_map_addr()
95 &cfg->base->paxb_omap[idx].upper); in iproc_pcie_map_addr()
99 ctx->highmem_in_use = true; in iproc_pcie_map_addr()
101 ctx->lowmem_in_use = true; in iproc_pcie_map_addr()
105 offset = pcie_addr - pcie_addr_start; in iproc_pcie_map_addr()
107 mapped_size = pcie_ob_size - offset; in iproc_pcie_map_addr()
110 k_spin_unlock(&ctx->ob_map_lock, key); in iproc_pcie_map_addr()
118 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_unmap_addr()
121 key = k_spin_lock(&ctx->ob_map_lock); in iproc_pcie_unmap_addr()
124 ctx->highmem_in_use = false; in iproc_pcie_unmap_addr()
126 ctx->lowmem_in_use = false; in iproc_pcie_unmap_addr()
129 k_spin_unlock(&ctx->ob_map_lock, key); in iproc_pcie_unmap_addr()
136 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_raise_irq()
140 key = k_spin_lock(&ctx->raise_irq_lock); in iproc_pcie_raise_irq()
150 ret = -ENOTSUP; in iproc_pcie_raise_irq()
154 ret = -EINVAL; in iproc_pcie_raise_irq()
157 k_spin_unlock(&ctx->raise_irq_lock, key); in iproc_pcie_raise_irq()
165 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_register_reset_cb()
168 return -EINVAL; in iproc_pcie_register_reset_cb()
172 ctx->reset_cb[reset] = cb; in iproc_pcie_register_reset_cb()
173 ctx->reset_data[reset] = arg; in iproc_pcie_register_reset_cb()
184 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_pl330_dma_xfer()
188 int ret = -EINVAL; in iproc_pcie_pl330_dma_xfer()
190 if (!device_is_ready(cfg->pl330_dev)) { in iproc_pcie_pl330_dma_xfer()
192 ret = -ENODEV; in iproc_pcie_pl330_dma_xfer()
205 chan_id = cfg->pl330_tx_chan_id; in iproc_pcie_pl330_dma_xfer()
209 chan_id = cfg->pl330_rx_chan_id; in iproc_pcie_pl330_dma_xfer()
212 ret = dma_config(cfg->pl330_dev, chan_id, &dma_cfg); in iproc_pcie_pl330_dma_xfer()
219 ret = dma_start(cfg->pl330_dev, chan_id); in iproc_pcie_pl330_dma_xfer()
231 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_perst()
241 if (ctx->reset_cb[PCIE_PERST] != NULL) { in iproc_pcie_perst()
242 reset_data = ctx->reset_data[PCIE_PERST]; in iproc_pcie_perst()
243 ctx->reset_cb[PCIE_PERST](reset_data); in iproc_pcie_perst()
252 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_hot_reset()
262 if (ctx->reset_cb[PCIE_PERST_INB] != NULL) { in iproc_pcie_hot_reset()
263 reset_data = ctx->reset_data[PCIE_PERST_INB]; in iproc_pcie_hot_reset()
264 ctx->reset_cb[PCIE_PERST_INB](reset_data); in iproc_pcie_hot_reset()
273 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_flr()
274 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_flr()
278 data = pcie_read32(&cfg->base->paxb_paxb_intr_status); in iproc_pcie_flr()
282 pcie_write32(PCIE0_FLR_INTR, &cfg->base->paxb_paxb_intr_clear); in iproc_pcie_flr()
284 if (ctx->reset_cb[PCIE_FLR] != NULL) { in iproc_pcie_flr()
285 reset_data = ctx->reset_data[PCIE_FLR]; in iproc_pcie_flr()
286 ctx->reset_cb[PCIE_FLR](reset_data); in iproc_pcie_flr()
295 pcie_write32(data, &cfg->base->paxb_paxb_intr_clear); in iproc_pcie_flr()
308 __unused const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_reset_config()
350 pcie_write32(PCIE0_FLR_INTR, &cfg->base->paxb_paxb_intr_clear); in iproc_pcie_reset_config()
358 data = pcie_read32(&cfg->base->paxb_paxb_intr_en); in iproc_pcie_reset_config()
360 pcie_write32(data, &cfg->base->paxb_paxb_intr_en); in iproc_pcie_reset_config()
372 __unused const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_msix_pvm_config()
373 __unused struct iproc_pcie_reg *base = cfg->base; in iproc_pcie_msix_pvm_config()
378 data = pcie_read32(&cfg->base->paxb_snoop_addr_cfg[1]); in iproc_pcie_msix_pvm_config()
381 pcie_write32(data, &cfg->base->paxb_snoop_addr_cfg[1]); in iproc_pcie_msix_pvm_config()
383 data = pcie_read32(&base->paxb_pcie_cfg_intr_mask); in iproc_pcie_msix_pvm_config()
385 pcie_write32(data, &base->paxb_pcie_cfg_intr_mask); in iproc_pcie_msix_pvm_config()
402 /* Start of PBA is end of MSI-X table in our case */ in iproc_pcie_msix_pvm_config()
414 LOG_DBG("pcie pmon lite interrupt configured\n"); in iproc_pcie_msix_pvm_config()
423 data = pcie_read32(&cfg->base->paxb_strap_status); in iproc_pcie_mode_check()
427 return -ENOTSUP; in iproc_pcie_mode_check()
435 const struct iproc_pcie_ep_config *cfg = dev->config; in iproc_pcie_ep_init()
436 struct iproc_pcie_ep_ctx *ctx = dev->data; in iproc_pcie_ep_init()
442 LOG_ERR("ERROR: Only PCIe EP mode is supported\n"); in iproc_pcie_ep_init()
447 LOG_INF("PCIe linkup speed 0x%x\n", ((data >> in iproc_pcie_ep_init()
449 LOG_INF("PCIe linkup width 0x%x\n", ((data >> in iproc_pcie_ep_init()
457 /* configure interrupts for MSI-X Per-Vector Masking feature */ in iproc_pcie_ep_init()
464 ctx->highmem_in_use = false; in iproc_pcie_ep_init()
465 ctx->lowmem_in_use = false; in iproc_pcie_ep_init()
466 LOG_INF("PCIe initialized successfully\n"); in iproc_pcie_ep_init()