History

PCI: Use bridge window names (PCI_BRIDGE_IO_WINDOW etc)

Use bridge resource definitions instead of using the PCI_BRIDGE_RESOURCES constant with an integer offeset.

Krzysztof Wilczynski committed 6 years ago

Commit 6e0688d1 parent 7b38fd93 files · +84 −60Browse files

Unified · Split

3 files
  1. drivers/pci/setup-bus.c +61 −53
  2. drivers/pcmcia/yenta_socket.c +10 −6
  3. include/linux/pci.h +13 −1
drivers/pci/setup-bus.c+61−53
@@ -583,7 +583,7 @@ static void pci_setup_bridge_io(struct pci_dev *bridge) · 582 unmodified lines
583583 io_mask = PCI_IO_1K_RANGE_MASK;
584584
585585 /* Set up the top and bottom of the PCI I/O segment for this bus */
586− res = &bridge->resource[PCI_BRIDGE_RESOURCES + 0];
586+ res = &bridge->resource[PCI_BRIDGE_IO_WINDOW];
587587 pcibios_resource_to_bus(bridge->bus, &region, res);
588588 if (res->flags & IORESOURCE_IO) {
589589 pci_read_config_word(bridge, PCI_IO_BASE, &l);
@@ -613,7 +613,7 @@ static void pci_setup_bridge_mmio(struct pci_dev *bridge) · 23 unmodified lines
613613 u32 l;
614614
615615 /* Set up the top and bottom of the PCI Memory segment for this bus */
616− res = &bridge->resource[PCI_BRIDGE_RESOURCES + 1];
616+ res = &bridge->resource[PCI_BRIDGE_MEM_WINDOW];
617617 pcibios_resource_to_bus(bridge->bus, &region, res);
618618 if (res->flags & IORESOURCE_MEM) {
619619 l = (region.start >> 16) & 0xfff0;
@@ -640,7 +640,7 @@ static void pci_setup_bridge_mmio_pref(struct pci_dev *bridge) · 20 unmodified lines
640640
641641 /* Set up PREF base/limit */
642642 bu = lu = 0;
643− res = &bridge->resource[PCI_BRIDGE_RESOURCES + 2];
643+ res = &bridge->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
644644 pcibios_resource_to_bus(bridge->bus, &region, res);
645645 if (res->flags & IORESOURCE_PREFETCH) {
646646 l = (region.start >> 16) & 0xfff0;
@@ -707,14 +707,14 @@ int pci_claim_bridge_resource(struct pci_dev *bridge, int i) · 60 unmodified lines
707707 if (!pci_bus_clip_resource(bridge, i))
708708 return -EINVAL; /* Clipping didn't change anything */
709709
710− switch (i - PCI_BRIDGE_RESOURCES) {
711− case 0:
710+ switch (i) {
711+ case PCI_BRIDGE_IO_WINDOW:
712712 pci_setup_bridge_io(bridge);
713713 break;
714− case 1:
714+ case PCI_BRIDGE_MEM_WINDOW:
715715 pci_setup_bridge_mmio(bridge);
716716 break;
717− case 2:
717+ case PCI_BRIDGE_PREF_MEM_WINDOW:
718718 pci_setup_bridge_mmio_pref(bridge);
719719 break;
720720 default:
@@ -735,18 +735,22 @@ int pci_claim_bridge_resource(struct pci_dev *bridge, int i) · 14 unmodified lines
735735 static void pci_bridge_check_ranges(struct pci_bus *bus)
736736 {
737737 struct pci_dev *bridge = bus->self;
738− struct resource *b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
738+ struct resource *b_res;
739739
740− b_res[1].flags |= IORESOURCE_MEM;
740+ b_res = &bridge->resource[PCI_BRIDGE_MEM_WINDOW];
741+ b_res->flags |= IORESOURCE_MEM;
741742
742− if (bridge->io_window)
743− b_res[0].flags |= IORESOURCE_IO;
743+ if (bridge->io_window) {
744+ b_res = &bridge->resource[PCI_BRIDGE_IO_WINDOW];
745+ b_res->flags |= IORESOURCE_IO;
746+ }
744747
745748 if (bridge->pref_window) {
746− b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
749+ b_res = &bridge->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
750+ b_res->flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
747751 if (bridge->pref_64_window) {
748− b_res[2].flags |= IORESOURCE_MEM_64;
749− b_res[2].flags |= PCI_PREF_RANGE_TYPE_64;
752+ b_res->flags |= IORESOURCE_MEM_64 |
753+ PCI_PREF_RANGE_TYPE_64;
750754 }
751755 }
752756 }
@@ -1105,35 +1109,37 @@ static void pci_bus_size_cardbus(struct pci_bus *bus, · 352 unmodified lines
11051109 struct list_head *realloc_head)
11061110 {
11071111 struct pci_dev *bridge = bus->self;
1108− struct resource *b_res = &bridge->resource[PCI_BRIDGE_RESOURCES];
1112+ struct resource *b_res;
11091113 resource_size_t b_res_3_size = pci_cardbus_mem_size * 2;
11101114 u16 ctrl;
11111115
1112− if (b_res[0].parent)
1116+ b_res = &bridge->resource[PCI_CB_BRIDGE_IO_0_WINDOW];
1117+ if (b_res->parent)
11131118 goto handle_b_res_1;
11141119 /*
11151120 * Reserve some resources for CardBus. We reserve a fixed amount
11161121 * of bus space for CardBus bridges.
11171122 */
1118− b_res[0].start = pci_cardbus_io_size;
1119− b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
1120− b_res[0].flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
1123+ b_res->start = pci_cardbus_io_size;
1124+ b_res->end = b_res->start + pci_cardbus_io_size - 1;
1125+ b_res->flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
11211126 if (realloc_head) {
1122− b_res[0].end -= pci_cardbus_io_size;
1127+ b_res->end -= pci_cardbus_io_size;
11231128 add_to_list(realloc_head, bridge, b_res, pci_cardbus_io_size,
1124− pci_cardbus_io_size);
1129+ pci_cardbus_io_size);
11251130 }
11261131
11271132 handle_b_res_1:
1128− if (b_res[1].parent)
1133+ b_res = &bridge->resource[PCI_CB_BRIDGE_IO_1_WINDOW];
1134+ if (b_res->parent)
11291135 goto handle_b_res_2;
1130− b_res[1].start = pci_cardbus_io_size;
1131− b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
1132− b_res[1].flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
1136+ b_res->start = pci_cardbus_io_size;
1137+ b_res->end = b_res->start + pci_cardbus_io_size - 1;
1138+ b_res->flags |= IORESOURCE_IO | IORESOURCE_STARTALIGN;
11331139 if (realloc_head) {
1134− b_res[1].end -= pci_cardbus_io_size;
1135− add_to_list(realloc_head, bridge, b_res+1, pci_cardbus_io_size,
1136− pci_cardbus_io_size);
1140+ b_res->end -= pci_cardbus_io_size;
1141+ add_to_list(realloc_head, bridge, b_res, pci_cardbus_io_size,
1142+ pci_cardbus_io_size);
11371143 }
11381144
11391145 handle_b_res_2:
@@ -1153,21 +1159,22 @@ handle_b_res_2: · 13 unmodified lines
11531159 pci_read_config_word(bridge, PCI_CB_BRIDGE_CONTROL, &ctrl);
11541160 }
11551161
1156− if (b_res[2].parent)
1162+ b_res = &bridge->resource[PCI_CB_BRIDGE_MEM_0_WINDOW];
1163+ if (b_res->parent)
11571164 goto handle_b_res_3;
11581165 /*
11591166 * If we have prefetchable memory support, allocate two regions.
11601167 * Otherwise, allocate one region of twice the size.
11611168 */
11621169 if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
1163− b_res[2].start = pci_cardbus_mem_size;
1164− b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
1165− b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH |
1166− IORESOURCE_STARTALIGN;
1170+ b_res->start = pci_cardbus_mem_size;
1171+ b_res->end = b_res->start + pci_cardbus_mem_size - 1;
1172+ b_res->flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH |
1173+ IORESOURCE_STARTALIGN;
11671174 if (realloc_head) {
1168− b_res[2].end -= pci_cardbus_mem_size;
1169− add_to_list(realloc_head, bridge, b_res+2,
1170− pci_cardbus_mem_size, pci_cardbus_mem_size);
1175+ b_res->end -= pci_cardbus_mem_size;
1176+ add_to_list(realloc_head, bridge, b_res,
1177+ pci_cardbus_mem_size, pci_cardbus_mem_size);
11711178 }
11721179
11731180 /* Reduce that to half */
@@ -1175,15 +1182,16 @@ handle_b_res_2: · 1 unmodified line
11751182 }
11761183
11771184 handle_b_res_3:
1178− if (b_res[3].parent)
1185+ b_res = &bridge->resource[PCI_CB_BRIDGE_MEM_1_WINDOW];
1186+ if (b_res->parent)
11791187 goto handle_done;
1180− b_res[3].start = pci_cardbus_mem_size;
1181− b_res[3].end = b_res[3].start + b_res_3_size - 1;
1182− b_res[3].flags |= IORESOURCE_MEM | IORESOURCE_STARTALIGN;
1188+ b_res->start = pci_cardbus_mem_size;
1189+ b_res->end = b_res->start + b_res_3_size - 1;
1190+ b_res->flags |= IORESOURCE_MEM | IORESOURCE_STARTALIGN;
11831191 if (realloc_head) {
1184− b_res[3].end -= b_res_3_size;
1185− add_to_list(realloc_head, bridge, b_res+3, b_res_3_size,
1186− pci_cardbus_mem_size);
1192+ b_res->end -= b_res_3_size;
1193+ add_to_list(realloc_head, bridge, b_res, b_res_3_size,
1194+ pci_cardbus_mem_size);
11871195 }
11881196
11891197 handle_done:
@@ -1227,7 +1235,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) · 37 unmodified lines
12271235 break;
12281236 hdr_type = -1; /* Intentionally invalid - not a PCI device. */
12291237 } else {
1230− pref = &bus->self->resource[PCI_BRIDGE_RESOURCES + 2];
1238+ pref = &bus->self->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
12311239 hdr_type = bus->self->hdr_type;
12321240 }
12331241
@@ -1885,9 +1893,9 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, · 651 unmodified lines
18851893 struct pci_dev *dev, *bridge = bus->self;
18861894 resource_size_t io_per_hp, mmio_per_hp, mmio_pref_per_hp, align;
18871895
1888− io_res = &bridge->resource[PCI_BRIDGE_RESOURCES + 0];
1889− mmio_res = &bridge->resource[PCI_BRIDGE_RESOURCES + 1];
1890− mmio_pref_res = &bridge->resource[PCI_BRIDGE_RESOURCES + 2];
1896+ io_res = &bridge->resource[PCI_BRIDGE_IO_WINDOW];
1897+ mmio_res = &bridge->resource[PCI_BRIDGE_MEM_WINDOW];
1898+ mmio_pref_res = &bridge->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
18911899
18921900 /*
18931901 * The alignment of this bridge is yet to be considered, hence it must
@@ -1960,21 +1968,21 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, · 66 unmodified lines
19601968 * Reduce the available resource space by what the
19611969 * bridge and devices below it occupy.
19621970 */
1963− res = &dev->resource[PCI_BRIDGE_RESOURCES + 0];
1971+ res = &dev->resource[PCI_BRIDGE_IO_WINDOW];
19641972 align = pci_resource_alignment(dev, res);
19651973 align = align ? ALIGN(io.start, align) - io.start : 0;
19661974 used_size = align + resource_size(res);
19671975 if (!res->parent)
19681976 io.start = min(io.start + used_size, io.end + 1);
19691977
1970− res = &dev->resource[PCI_BRIDGE_RESOURCES + 1];
1978+ res = &dev->resource[PCI_BRIDGE_MEM_WINDOW];
19711979 align = pci_resource_alignment(dev, res);
19721980 align = align ? ALIGN(mmio.start, align) - mmio.start : 0;
19731981 used_size = align + resource_size(res);
19741982 if (!res->parent)
19751983 mmio.start = min(mmio.start + used_size, mmio.end + 1);
19761984
1977− res = &dev->resource[PCI_BRIDGE_RESOURCES + 2];
1985+ res = &dev->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
19781986 align = pci_resource_alignment(dev, res);
19791987 align = align ? ALIGN(mmio_pref.start, align) -
19801988 mmio_pref.start : 0;
@@ -2027,9 +2035,9 @@ static void pci_bridge_distribute_available_resources(struct pci_dev *bridge, · 46 unmodified lines
20272035 return;
20282036
20292037 /* Take the initial extra resources from the hotplug port */
2030− available_io = bridge->resource[PCI_BRIDGE_RESOURCES + 0];
2031− available_mmio = bridge->resource[PCI_BRIDGE_RESOURCES + 1];
2032− available_mmio_pref = bridge->resource[PCI_BRIDGE_RESOURCES + 2];
2038+ available_io = bridge->resource[PCI_BRIDGE_IO_WINDOW];
2039+ available_mmio = bridge->resource[PCI_BRIDGE_MEM_WINDOW];
2040+ available_mmio_pref = bridge->resource[PCI_BRIDGE_PREF_MEM_WINDOW];
20332041
20342042 pci_bus_distribute_available_resources(bridge->subordinate,
20352043 add_list, available_io,
drivers/pcmcia/yenta_socket.c+10−6
@@ -694,7 +694,7 @@ static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type · 693 unmodified lines
694694 struct pci_bus_region region;
695695 unsigned mask;
696696
697− res = dev->resource + PCI_BRIDGE_RESOURCES + nr;
697+ res = &dev->resource[nr];
698698 /* Already allocated? */
699699 if (res->parent)
700700 return 0;
@@ -711,7 +711,7 @@ static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type · 10 unmodified lines
711711 region.end = config_readl(socket, addr_end) | ~mask;
712712 if (region.start && region.end > region.start && !override_bios) {
713713 pcibios_bus_to_resource(dev->bus, res, &region);
714− if (pci_claim_resource(dev, PCI_BRIDGE_RESOURCES + nr) == 0)
714+ if (pci_claim_resource(dev, nr) == 0)
715715 return 0;
716716 dev_info(&dev->dev,
717717 "Preassigned resource %d busy or not available, reconfiguring...\n",
@@ -751,13 +751,17 @@ static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type · 33 unmodified lines
751751 static void yenta_allocate_resources(struct yenta_socket *socket)
752752 {
753753 int program = 0;
754− program += yenta_allocate_res(socket, 0, IORESOURCE_IO,
754+ program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_0_WINDOW,
755+ IORESOURCE_IO,
755756 PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
756− program += yenta_allocate_res(socket, 1, IORESOURCE_IO,
757+ program += yenta_allocate_res(socket, PCI_CB_BRIDGE_IO_1_WINDOW,
758+ IORESOURCE_IO,
757759 PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
758− program += yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
760+ program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_0_WINDOW,
761+ IORESOURCE_MEM | IORESOURCE_PREFETCH,
759762 PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
760− program += yenta_allocate_res(socket, 3, IORESOURCE_MEM,
763+ program += yenta_allocate_res(socket, PCI_CB_BRIDGE_MEM_1_WINDOW,
764+ IORESOURCE_MEM,
761765 PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
762766 if (program)
763767 pci_setup_cardbus(socket->dev->subordinate);
include/linux/pci.h+13−1
@@ -100,9 +100,21 @@ enum { · 99 unmodified lines
100100 PCI_IOV_RESOURCE_END = PCI_IOV_RESOURCES + PCI_SRIOV_NUM_BARS - 1,
101101 #endif
102102
103− /* Resources assigned to buses behind the bridge */
103+/* PCI-to-PCI (P2P) bridge windows */
104+#define PCI_BRIDGE_IO_WINDOW (PCI_BRIDGE_RESOURCES + 0)
105+#define PCI_BRIDGE_MEM_WINDOW (PCI_BRIDGE_RESOURCES + 1)
106+#define PCI_BRIDGE_PREF_MEM_WINDOW (PCI_BRIDGE_RESOURCES + 2)
107+
108+/* CardBus bridge windows */
109+#define PCI_CB_BRIDGE_IO_0_WINDOW (PCI_BRIDGE_RESOURCES + 0)
110+#define PCI_CB_BRIDGE_IO_1_WINDOW (PCI_BRIDGE_RESOURCES + 1)
111+#define PCI_CB_BRIDGE_MEM_0_WINDOW (PCI_BRIDGE_RESOURCES + 2)
112+#define PCI_CB_BRIDGE_MEM_1_WINDOW (PCI_BRIDGE_RESOURCES + 3)
113+
114+/* Total number of bridge resources for P2P and CardBus */
104115 #define PCI_BRIDGE_RESOURCE_NUM 4
105116
117+ /* Resources assigned to buses behind the bridge */
106118 PCI_BRIDGE_RESOURCES,
107119 PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES +
108120 PCI_BRIDGE_RESOURCE_NUM - 1,