Skip to content

Commit 62240a8

Browse files
robherringLorenzo Pieralisi
authored andcommitted
PCI: rockchip: Drop storing driver private outbound resource data
The Rockchip host bridge driver doesn't need to store outboard resources in its private struct as they are already stored in struct pci_host_bridge. Signed-off-by: Rob Herring <[email protected]> Signed-off-by: Lorenzo Pieralisi <[email protected]> Cc: Shawn Lin <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Andrew Murray <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: Heiko Stuebner <[email protected]> Cc: [email protected]
1 parent 5c1306a commit 62240a8

File tree

2 files changed

+23
-36
lines changed

2 files changed

+23
-36
lines changed

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

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -806,19 +806,28 @@ static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip,
806806
static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
807807
{
808808
struct device *dev = rockchip->dev;
809+
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip);
810+
struct resource_entry *entry;
811+
u64 pci_addr, size;
809812
int offset;
810813
int err;
811814
int reg_no;
812815

813816
rockchip_pcie_cfg_configuration_accesses(rockchip,
814817
AXI_WRAPPER_TYPE0_CFG);
818+
entry = resource_list_first_type(&bridge->windows, IORESOURCE_MEM);
819+
if (!entry)
820+
return -ENODEV;
821+
822+
size = resource_size(entry->res);
823+
pci_addr = entry->res->start - entry->offset;
824+
rockchip->msg_bus_addr = pci_addr;
815825

816-
for (reg_no = 0; reg_no < (rockchip->mem_size >> 20); reg_no++) {
826+
for (reg_no = 0; reg_no < (size >> 20); reg_no++) {
817827
err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1,
818828
AXI_WRAPPER_MEM_WRITE,
819829
20 - 1,
820-
rockchip->mem_bus_addr +
821-
(reg_no << 20),
830+
pci_addr + (reg_no << 20),
822831
0);
823832
if (err) {
824833
dev_err(dev, "program RC mem outbound ATU failed\n");
@@ -832,14 +841,20 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
832841
return err;
833842
}
834843

835-
offset = rockchip->mem_size >> 20;
836-
for (reg_no = 0; reg_no < (rockchip->io_size >> 20); reg_no++) {
844+
entry = resource_list_first_type(&bridge->windows, IORESOURCE_IO);
845+
if (!entry)
846+
return -ENODEV;
847+
848+
size = resource_size(entry->res);
849+
pci_addr = entry->res->start - entry->offset;
850+
851+
offset = size >> 20;
852+
for (reg_no = 0; reg_no < (size >> 20); reg_no++) {
837853
err = rockchip_pcie_prog_ob_atu(rockchip,
838854
reg_no + 1 + offset,
839855
AXI_WRAPPER_IO_WRITE,
840856
20 - 1,
841-
rockchip->io_bus_addr +
842-
(reg_no << 20),
857+
pci_addr + (reg_no << 20),
843858
0);
844859
if (err) {
845860
dev_err(dev, "program RC io outbound ATU failed\n");
@@ -852,8 +867,7 @@ static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
852867
AXI_WRAPPER_NOR_MSG,
853868
20 - 1, 0, 0);
854869

855-
rockchip->msg_bus_addr = rockchip->mem_bus_addr +
856-
((reg_no + offset) << 20);
870+
rockchip->msg_bus_addr += ((reg_no + offset) << 20);
857871
return err;
858872
}
859873

@@ -951,7 +965,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
951965
struct pci_bus *bus, *child;
952966
struct pci_host_bridge *bridge;
953967
struct resource *bus_res;
954-
struct resource_entry *win;
955968
int err;
956969

957970
if (!dev->of_node)
@@ -997,27 +1010,6 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
9971010

9981011
rockchip->root_bus_nr = bus_res->start;
9991012

1000-
/* Get the I/O and memory ranges from DT */
1001-
resource_list_for_each_entry(win, &bridge->windows) {
1002-
switch (resource_type(win->res)) {
1003-
case IORESOURCE_IO:
1004-
io = win->res;
1005-
io->name = "I/O";
1006-
rockchip->io_size = resource_size(io);
1007-
rockchip->io_bus_addr = io->start - win->offset;
1008-
rockchip->io = io;
1009-
break;
1010-
case IORESOURCE_MEM:
1011-
mem = win->res;
1012-
mem->name = "MEM";
1013-
rockchip->mem_size = resource_size(mem);
1014-
rockchip->mem_bus_addr = mem->start - win->offset;
1015-
break;
1016-
default:
1017-
continue;
1018-
}
1019-
}
1020-
10211013
err = rockchip_pcie_cfg_atu(rockchip);
10221014
if (err)
10231015
goto err_remove_irq_domain;

drivers/pci/controller/pcie-rockchip.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,8 @@ struct rockchip_pcie {
304304
struct irq_domain *irq_domain;
305305
int offset;
306306
struct pci_bus *root_bus;
307-
struct resource *io;
308-
phys_addr_t io_bus_addr;
309-
u32 io_size;
310307
void __iomem *msg_region;
311-
u32 mem_size;
312308
phys_addr_t msg_bus_addr;
313-
phys_addr_t mem_bus_addr;
314309
bool is_rc;
315310
struct resource *mem_res;
316311
};

0 commit comments

Comments
 (0)