Skip to content

Commit ec64e27

Browse files
robherringLorenzo Pieralisi
authored andcommitted
PCI: cadence: Remove private bus number and range storage
There's no need to store the bus number or range resource as the driver only needs the bus number which is already in the pci_host_bridge. For endpoint mode, the bus number is always 0. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rob Herring <[email protected]> Signed-off-by: Lorenzo Pieralisi <[email protected]> Acked-by: Bjorn Helgaas <[email protected]> Cc: Tom Joseph <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Bjorn Helgaas <[email protected]>
1 parent 06ff98f commit ec64e27

File tree

4 files changed

+24
-26
lines changed

4 files changed

+24
-26
lines changed

drivers/pci/controller/cadence/pcie-cadence-ep.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ static int cdns_pcie_ep_map_addr(struct pci_epc *epc, u8 fn, phys_addr_t addr,
156156
return -EINVAL;
157157
}
158158

159-
cdns_pcie_set_outbound_region(pcie, fn, r, false, addr, pci_addr, size);
159+
cdns_pcie_set_outbound_region(pcie, 0, fn, r, false, addr, pci_addr, size);
160160

161161
set_bit(r, &ep->ob_region_map);
162162
ep->ob_addr[r] = addr;
@@ -239,7 +239,7 @@ static void cdns_pcie_ep_assert_intx(struct cdns_pcie_ep *ep, u8 fn,
239239
if (unlikely(ep->irq_pci_addr != CDNS_PCIE_EP_IRQ_PCI_ADDR_LEGACY ||
240240
ep->irq_pci_fn != fn)) {
241241
/* First region was reserved for IRQ writes. */
242-
cdns_pcie_set_outbound_region_for_normal_msg(pcie, fn, 0,
242+
cdns_pcie_set_outbound_region_for_normal_msg(pcie, 0, fn, 0,
243243
ep->irq_phys_addr);
244244
ep->irq_pci_addr = CDNS_PCIE_EP_IRQ_PCI_ADDR_LEGACY;
245245
ep->irq_pci_fn = fn;
@@ -318,7 +318,7 @@ static int cdns_pcie_ep_send_msi_irq(struct cdns_pcie_ep *ep, u8 fn,
318318
if (unlikely(ep->irq_pci_addr != (pci_addr & ~pci_addr_mask) ||
319319
ep->irq_pci_fn != fn)) {
320320
/* First region was reserved for IRQ writes. */
321-
cdns_pcie_set_outbound_region(pcie, fn, 0,
321+
cdns_pcie_set_outbound_region(pcie, 0, fn, 0,
322322
false,
323323
ep->irq_phys_addr,
324324
pci_addr & ~pci_addr_mask,

drivers/pci/controller/cadence/pcie-cadence-host.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ static void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
2020
unsigned int busn = bus->number;
2121
u32 addr0, desc0;
2222

23-
if (busn == rc->bus_range->start) {
23+
if (pci_is_root_bus(bus)) {
2424
/*
2525
* Only the root port (devfn == 0) is connected to this bus.
2626
* All other PCI devices are behind some bridge hence on another
@@ -50,7 +50,7 @@ static void __iomem *cdns_pci_map_bus(struct pci_bus *bus, unsigned int devfn,
5050
* The bus number was already set once for all in desc1 by
5151
* cdns_pcie_host_init_address_translation().
5252
*/
53-
if (busn == rc->bus_range->start + 1)
53+
if (busn == bridge->busnr + 1)
5454
desc0 |= CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE0;
5555
else
5656
desc0 |= CDNS_PCIE_AT_OB_REGION_DESC0_TYPE_CONF_TYPE1;
@@ -106,20 +106,23 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
106106
struct cdns_pcie *pcie = &rc->pcie;
107107
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc);
108108
struct resource *mem_res = pcie->mem_res;
109-
struct resource *bus_range = rc->bus_range;
110109
struct resource *cfg_res = rc->cfg_res;
111110
struct resource_entry *entry;
112111
u32 addr0, addr1, desc1;
113112
u64 cpu_addr;
114-
int r;
113+
int r, busnr = 0;
114+
115+
entry = resource_list_first_type(&bridge->windows, IORESOURCE_BUS);
116+
if (entry)
117+
busnr = entry->res->start;
115118

116119
/*
117120
* Reserve region 0 for PCI configure space accesses:
118121
* OB_REGION_PCI_ADDR0 and OB_REGION_DESC0 are updated dynamically by
119122
* cdns_pci_map_bus(), other region registers are set here once for all.
120123
*/
121124
addr1 = 0; /* Should be programmed to zero. */
122-
desc1 = CDNS_PCIE_AT_OB_REGION_DESC1_BUS(bus_range->start);
125+
desc1 = CDNS_PCIE_AT_OB_REGION_DESC1_BUS(busnr);
123126
cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(0), addr1);
124127
cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_DESC1(0), desc1);
125128

@@ -136,12 +139,14 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
136139
u64 pci_addr = res->start - entry->offset;
137140

138141
if (resource_type(res) == IORESOURCE_IO)
139-
cdns_pcie_set_outbound_region(pcie, 0, r, true,
142+
cdns_pcie_set_outbound_region(pcie, busnr, 0, r,
143+
true,
140144
pci_pio_to_address(res->start),
141145
pci_addr,
142146
resource_size(res));
143147
else
144-
cdns_pcie_set_outbound_region(pcie, 0, r, false,
148+
cdns_pcie_set_outbound_region(pcie, busnr, 0, r,
149+
false,
145150
res->start,
146151
pci_addr,
147152
resource_size(res));
@@ -167,18 +172,13 @@ static int cdns_pcie_host_init(struct device *dev,
167172
struct cdns_pcie_rc *rc)
168173
{
169174
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rc);
170-
struct resource *bus_range = NULL;
171175
int err;
172176

173177
/* Parse our PCI ranges and request their resources */
174-
err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL,
175-
&bus_range);
178+
err = pci_parse_request_of_pci_ranges(dev, &bridge->windows, NULL, NULL);
176179
if (err)
177180
return err;
178181

179-
rc->bus_range = bus_range;
180-
rc->pcie.bus = bus_range->start;
181-
182182
err = cdns_pcie_host_init_root_port(rc);
183183
if (err)
184184
return err;
@@ -236,7 +236,6 @@ int cdns_pcie_host_setup(struct cdns_pcie_rc *rc)
236236
if (ret)
237237
goto err_init;
238238

239-
bridge->busnr = pcie->bus;
240239
bridge->ops = &cdns_pcie_host_ops;
241240
bridge->map_irq = of_irq_parse_and_map_pci;
242241
bridge->swizzle_irq = pci_common_swizzle;

drivers/pci/controller/cadence/pcie-cadence.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
#include "pcie-cadence.h"
99

10-
void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 fn,
10+
void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 fn,
1111
u32 r, bool is_io,
1212
u64 cpu_addr, u64 pci_addr, size_t size)
1313
{
@@ -60,7 +60,7 @@ void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 fn,
6060
/* The device and function numbers are always 0. */
6161
desc0 |= CDNS_PCIE_AT_OB_REGION_DESC0_HARDCODED_RID |
6262
CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(0);
63-
desc1 |= CDNS_PCIE_AT_OB_REGION_DESC1_BUS(pcie->bus);
63+
desc1 |= CDNS_PCIE_AT_OB_REGION_DESC1_BUS(busnr);
6464
} else {
6565
/*
6666
* Use captured values for bus and device numbers but still
@@ -82,7 +82,8 @@ void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 fn,
8282
cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_CPU_ADDR1(r), addr1);
8383
}
8484

85-
void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie, u8 fn,
85+
void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie,
86+
u8 busnr, u8 fn,
8687
u32 r, u64 cpu_addr)
8788
{
8889
u32 addr0, addr1, desc0, desc1;
@@ -94,7 +95,7 @@ void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie, u8 fn,
9495
if (pcie->is_rc) {
9596
desc0 |= CDNS_PCIE_AT_OB_REGION_DESC0_HARDCODED_RID |
9697
CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(0);
97-
desc1 |= CDNS_PCIE_AT_OB_REGION_DESC1_BUS(pcie->bus);
98+
desc1 |= CDNS_PCIE_AT_OB_REGION_DESC1_BUS(busnr);
9899
} else {
99100
desc0 |= CDNS_PCIE_AT_OB_REGION_DESC0_DEVFN(fn);
100101
}

drivers/pci/controller/cadence/pcie-cadence.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@ struct cdns_pcie {
235235
struct resource *mem_res;
236236
struct device *dev;
237237
bool is_rc;
238-
u8 bus;
239238
int phy_count;
240239
struct phy **phy;
241240
struct device_link **link;
@@ -248,7 +247,6 @@ struct cdns_pcie {
248247
* @dev: pointer to PCIe device
249248
* @cfg_res: start/end offsets in the physical system memory to map PCI
250249
* configuration space accesses
251-
* @bus_range: first/last buses behind the PCIe host controller
252250
* @cfg_base: IO mapped window to access the PCI configuration space of a
253251
* single function at a time
254252
* @no_bar_nbits: Number of bits to keep for inbound (PCIe -> CPU) address
@@ -259,7 +257,6 @@ struct cdns_pcie {
259257
struct cdns_pcie_rc {
260258
struct cdns_pcie pcie;
261259
struct resource *cfg_res;
262-
struct resource *bus_range;
263260
void __iomem *cfg_base;
264261
u32 no_bar_nbits;
265262
u32 vendor_id;
@@ -381,11 +378,12 @@ static inline int cdns_pcie_ep_setup(struct cdns_pcie_ep *ep)
381378
return 0;
382379
}
383380
#endif
384-
void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 fn,
381+
void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 fn,
385382
u32 r, bool is_io,
386383
u64 cpu_addr, u64 pci_addr, size_t size);
387384

388-
void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie, u8 fn,
385+
void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie,
386+
u8 busnr, u8 fn,
389387
u32 r, u64 cpu_addr);
390388

391389
void cdns_pcie_reset_outbound_region(struct cdns_pcie *pcie, u32 r);

0 commit comments

Comments
 (0)