Lines Matching +full:num +full:- +full:ss +full:- +full:bits

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.
10 #include <linux/bits.h>
58 prop[0] = FIELD_PREP(OF_PCI_ADDR_FIELD_BUS, pdev->bus->number) | in of_pci_set_address()
59 FIELD_PREP(OF_PCI_ADDR_FIELD_DEV, PCI_SLOT(pdev->devfn)) | in of_pci_set_address()
60 FIELD_PREP(OF_PCI_ADDR_FIELD_FUNC, PCI_FUNC(pdev->devfn)); in of_pci_set_address()
74 u32 ss; in of_pci_get_addr_flags() local
76 if (res->flags & IORESOURCE_IO) in of_pci_get_addr_flags()
77 ss = OF_PCI_ADDR_SPACE_IO; in of_pci_get_addr_flags()
78 else if (res->flags & IORESOURCE_MEM_64) in of_pci_get_addr_flags()
79 ss = OF_PCI_ADDR_SPACE_MEM64; in of_pci_get_addr_flags()
80 else if (res->flags & IORESOURCE_MEM) in of_pci_get_addr_flags()
81 ss = OF_PCI_ADDR_SPACE_MEM32; in of_pci_get_addr_flags()
83 return -EINVAL; in of_pci_get_addr_flags()
86 if (res->flags & IORESOURCE_PREFETCH) in of_pci_get_addr_flags()
89 *flags |= FIELD_PREP(OF_PCI_ADDR_FIELD_SS, ss); in of_pci_get_addr_flags()
98 u32 bus_range[] = { pdev->subordinate->busn_res.start, in of_pci_prop_bus_range()
99 pdev->subordinate->busn_res.end }; in of_pci_prop_bus_range()
101 return of_changeset_add_prop_u32_array(ocs, np, "bus-range", bus_range, in of_pci_prop_bus_range()
111 u32 flags, num; in of_pci_prop_ranges() local
115 num = PCI_BRIDGE_RESOURCE_NUM; in of_pci_prop_ranges()
116 res = &pdev->resource[PCI_BRIDGE_RESOURCES]; in of_pci_prop_ranges()
118 num = PCI_STD_NUM_BARS; in of_pci_prop_ranges()
119 res = &pdev->resource[PCI_STD_RESOURCES]; in of_pci_prop_ranges()
122 rp = kcalloc(num, sizeof(*rp), GFP_KERNEL); in of_pci_prop_ranges()
124 return -ENOMEM; in of_pci_prop_ranges()
126 for (i = 0, j = 0; j < num; j++) { in of_pci_prop_ranges()
133 val64 = pci_bus_address(pdev, &res[j] - pdev->resource); in of_pci_prop_ranges()
141 * For endpoint device, the lower 64-bits of child in of_pci_prop_ranges()
203 ret = of_changeset_add_prop_u32(ocs, np, "#interrupt-cells", 1); in of_pci_prop_intr_ctrl()
207 return of_changeset_add_prop_bool(ocs, np, "interrupt-controller"); in of_pci_prop_intr_ctrl()
223 pnode = pci_device_to_OF_node(pdev->bus->self); in of_pci_prop_intr_map()
225 pnode = pci_bus_to_OF_node(pdev->bus); in of_pci_prop_intr_map()
229 return -EINVAL; in of_pci_prop_intr_map()
232 laddr[0] = cpu_to_be32((pdev->bus->number << 16) | (pdev->devfn << 8)); in of_pci_prop_intr_map()
234 i = pin - 1; in of_pci_prop_intr_map()
244 of_property_read_u32(out_irq[i].np, "#address-cells", in of_pci_prop_intr_map()
248 list_for_each_entry(child, &pdev->subordinate->devices, bus_list) { in of_pci_prop_intr_map()
250 i = pci_swizzle_interrupt_pin(child, pin) - 1; in of_pci_prop_intr_map()
259 * need to generate interrupt-map property. in of_pci_prop_intr_map()
266 return -ENOMEM; in of_pci_prop_intr_map()
269 list_for_each_entry(child, &pdev->subordinate->devices, bus_list) { in of_pci_prop_intr_map()
271 i = pci_swizzle_interrupt_pin(child, pin) - 1; in of_pci_prop_intr_map()
275 *mapp = (child->bus->number << 16) | in of_pci_prop_intr_map()
276 (child->devfn << 8); in of_pci_prop_intr_map()
280 *mapp = out_irq[i].np->phandle; in of_pci_prop_intr_map()
296 ret = of_changeset_add_prop_u32_array(ocs, np, "interrupt-map", int_map, in of_pci_prop_intr_map()
301 ret = of_changeset_add_prop_u32(ocs, np, "#interrupt-cells", 1); in of_pci_prop_intr_map()
305 ret = of_changeset_add_prop_u32_array(ocs, np, "interrupt-map-mask", in of_pci_prop_intr_map()
327 kasprintf(GFP_KERNEL, "pci%x,%x", pdev->vendor, pdev->device); in of_pci_prop_compatible()
329 kasprintf(GFP_KERNEL, "pciclass,%06x", pdev->class); in of_pci_prop_compatible()
331 kasprintf(GFP_KERNEL, "pciclass,%04x", pdev->class >> 8); in of_pci_prop_compatible()
373 ret = of_changeset_add_prop_u32(ocs, np, "#address-cells", in of_pci_add_properties()
378 ret = of_changeset_add_prop_u32(ocs, np, "#size-cells", in of_pci_add_properties()
426 return -EINVAL; in of_pci_host_bridge_prop_ranges()
428 resource_list_for_each_entry(window, &bridge->windows) { in of_pci_host_bridge_prop_ranges()
429 res = window->res; in of_pci_host_bridge_prop_ranges()
443 return -ENOMEM; in of_pci_host_bridge_prop_ranges()
445 resource_list_for_each_entry(window, &bridge->windows) { in of_pci_host_bridge_prop_ranges()
446 res = window->res; in of_pci_host_bridge_prop_ranges()
451 val64 = res->start; in of_pci_host_bridge_prop_ranges()
453 val64 - window->offset, 0, flags, false); in of_pci_host_bridge_prop_ranges()
484 ret = of_changeset_add_prop_u32(ocs, np, "#address-cells", in of_pci_add_host_bridge_properties()
489 ret = of_changeset_add_prop_u32(ocs, np, "#size-cells", in of_pci_add_host_bridge_properties()