Lines Matching +full:- +full:- +full:root

25 #include "hw/qdev-properties.h"
27 #include "hw/pci-host/xilinx-pcie.h"
45 /* Root Port Status/Control Register */
54 /* Root Port Interrupt FIFO Read Register 1 */
59 /* Root Port Interrupt FIFO Read Register 2 */
68 s->intr |= set; in xilinx_pcie_update_intr()
69 s->intr &= ~clear; in xilinx_pcie_update_intr()
71 if (s->intr_fifo_r != s->intr_fifo_w) { in xilinx_pcie_update_intr()
72 s->intr |= ROOTCFG_INTMASK_INTX; in xilinx_pcie_update_intr()
75 level = !!(s->intr & s->intr_mask); in xilinx_pcie_update_intr()
76 qemu_set_irq(s->irq, level); in xilinx_pcie_update_intr()
85 new_w = (s->intr_fifo_w + 1) % ARRAY_SIZE(s->intr_fifo); in xilinx_pcie_queue_intr()
86 if (new_w == s->intr_fifo_r) { in xilinx_pcie_queue_intr()
87 s->rpscr |= ROOTCFG_RPSCR_INTOVF; in xilinx_pcie_queue_intr()
91 intr = &s->intr_fifo[s->intr_fifo_w]; in xilinx_pcie_queue_intr()
92 s->intr_fifo_w = new_w; in xilinx_pcie_queue_intr()
94 intr->fifo_reg1 = fifo_reg1; in xilinx_pcie_queue_intr()
95 intr->fifo_reg2 = fifo_reg2; in xilinx_pcie_queue_intr()
118 snprintf(s->name, sizeof(s->name), "pcie%u", s->bus_nr); in xilinx_pcie_host_realize()
121 pcie_host_mmcfg_init(pex, s->cfg_size); in xilinx_pcie_host_realize()
124 memory_region_init(&s->mmio, OBJECT(s), "mmio", UINT64_MAX); in xilinx_pcie_host_realize()
125 memory_region_set_enabled(&s->mmio, false); in xilinx_pcie_host_realize()
128 memory_region_init(&s->io, OBJECT(s), "io", 16); in xilinx_pcie_host_realize()
131 qdev_init_gpio_out_named(dev, &s->irq, "interrupt_out", 1); in xilinx_pcie_host_realize()
133 sysbus_init_mmio(sbd, &pex->mmio); in xilinx_pcie_host_realize()
134 sysbus_init_mmio(sbd, &s->mmio); in xilinx_pcie_host_realize()
136 pci->bus = pci_register_root_bus(dev, s->name, xilinx_pcie_set_irq, in xilinx_pcie_host_realize()
137 pci_swizzle_map_irq_fn, s, &s->mmio, in xilinx_pcie_host_realize()
138 &s->io, 0, 4, TYPE_PCIE_BUS); in xilinx_pcie_host_realize()
140 qdev_realize(DEVICE(&s->root), BUS(pci->bus), &error_fatal); in xilinx_pcie_host_realize()
152 XilinxPCIERoot *root = &s->root; in xilinx_pcie_host_init() local
154 object_initialize_child(obj, "root", root, TYPE_XILINX_PCIE_ROOT); in xilinx_pcie_host_init()
155 qdev_prop_set_int32(DEVICE(root), "addr", PCI_DEVFN(0, 0)); in xilinx_pcie_host_init()
156 qdev_prop_set_bit(DEVICE(root), "multifunction", false); in xilinx_pcie_host_init()
173 hc->root_bus_path = xilinx_pcie_host_root_bus_path; in xilinx_pcie_host_class_init()
174 dc->realize = xilinx_pcie_host_realize; in xilinx_pcie_host_class_init()
175 set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); in xilinx_pcie_host_class_init()
176 dc->fw_name = "pci"; in xilinx_pcie_host_class_init()
191 XilinxPCIEHost *s = XILINX_PCIE_HOST(OBJECT(d)->parent); in xilinx_pcie_root_config_read()
196 val = s->intr; in xilinx_pcie_root_config_read()
199 val = s->intr_mask; in xilinx_pcie_root_config_read()
202 val = s->link_up ? ROOTCFG_PSCR_LINK_UP : 0; in xilinx_pcie_root_config_read()
205 if (s->intr_fifo_r != s->intr_fifo_w) { in xilinx_pcie_root_config_read()
206 s->rpscr &= ~ROOTCFG_RPSCR_INTNEMPTY; in xilinx_pcie_root_config_read()
208 s->rpscr |= ROOTCFG_RPSCR_INTNEMPTY; in xilinx_pcie_root_config_read()
210 val = s->rpscr; in xilinx_pcie_root_config_read()
213 if (s->intr_fifo_w == s->intr_fifo_r) { in xilinx_pcie_root_config_read()
217 val = s->intr_fifo[s->intr_fifo_r].fifo_reg1; in xilinx_pcie_root_config_read()
221 if (s->intr_fifo_w == s->intr_fifo_r) { in xilinx_pcie_root_config_read()
225 val = s->intr_fifo[s->intr_fifo_r].fifo_reg2; in xilinx_pcie_root_config_read()
238 XilinxPCIEHost *s = XILINX_PCIE_HOST(OBJECT(d)->parent); in xilinx_pcie_root_config_write()
244 s->intr_mask = val; in xilinx_pcie_root_config_write()
248 s->rpscr &= ~ROOTCFG_RPSCR_BRIDGEEN; in xilinx_pcie_root_config_write()
249 s->rpscr |= val & ROOTCFG_RPSCR_BRIDGEEN; in xilinx_pcie_root_config_write()
250 memory_region_set_enabled(&s->mmio, val & ROOTCFG_RPSCR_BRIDGEEN); in xilinx_pcie_root_config_write()
253 s->rpscr &= ~ROOTCFG_INTMASK_INTX; in xilinx_pcie_root_config_write()
258 if (s->intr_fifo_w == s->intr_fifo_r) { in xilinx_pcie_root_config_write()
262 s->intr_fifo_r = (s->intr_fifo_r + 1) % ARRAY_SIZE(s->intr_fifo); in xilinx_pcie_root_config_write()
274 XilinxPCIEHost *s = XILINX_PCIE_HOST(bus->parent); in xilinx_pcie_root_realize()
276 pci_set_word(pci_dev->config + PCI_COMMAND, in xilinx_pcie_root_realize()
278 pci_set_word(pci_dev->config + PCI_MEMORY_BASE, s->mmio_base >> 16); in xilinx_pcie_root_realize()
279 pci_set_word(pci_dev->config + PCI_MEMORY_LIMIT, in xilinx_pcie_root_realize()
280 ((s->mmio_base + s->mmio_size - 1) >> 16) & 0xfff0); in xilinx_pcie_root_realize()
294 set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); in xilinx_pcie_root_class_init()
295 dc->desc = "Xilinx AXI-PCIe Host Bridge"; in xilinx_pcie_root_class_init()
296 k->vendor_id = PCI_VENDOR_ID_XILINX; in xilinx_pcie_root_class_init()
297 k->device_id = 0x7021; in xilinx_pcie_root_class_init()
298 k->revision = 0; in xilinx_pcie_root_class_init()
299 k->class_id = PCI_CLASS_BRIDGE_HOST; in xilinx_pcie_root_class_init()
300 k->realize = xilinx_pcie_root_realize; in xilinx_pcie_root_class_init()
301 k->exit = pci_bridge_exitfn; in xilinx_pcie_root_class_init()
303 k->config_read = xilinx_pcie_root_config_read; in xilinx_pcie_root_class_init()
304 k->config_write = xilinx_pcie_root_config_write; in xilinx_pcie_root_class_init()
306 * PCI-facing part of the host bridge, not usable without the in xilinx_pcie_root_class_init()
307 * host-facing part, which can't be device_add'ed, yet. in xilinx_pcie_root_class_init()
309 dc->user_creatable = false; in xilinx_pcie_root_class_init()