Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d414268 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Bjorn Helgaas
Browse files

PCI: thunder-pem: Factor out resource lookup



Pull the register resource lookup out of thunder_pem_init() so we can
easily add a corresponding lookup using ACPI.  No functional change
intended.

Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent 5f00f1a0
Loading
Loading
Loading
Loading
+27 −23
Original line number Original line Diff line number Diff line
@@ -284,35 +284,16 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn,
	return pci_generic_config_write(bus, devfn, where, size, val);
	return pci_generic_config_write(bus, devfn, where, size, val);
}
}


static int thunder_pem_init(struct pci_config_window *cfg)
static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,
			    struct resource *res_pem)
{
{
	struct device *dev = cfg->parent;
	resource_size_t bar4_start;
	struct resource *res_pem;
	struct thunder_pem_pci *pem_pci;
	struct thunder_pem_pci *pem_pci;
	struct platform_device *pdev;
	resource_size_t bar4_start;

	/* Only OF support for now */
	if (!dev->of_node)
		return -EINVAL;


	pem_pci = devm_kzalloc(dev, sizeof(*pem_pci), GFP_KERNEL);
	pem_pci = devm_kzalloc(dev, sizeof(*pem_pci), GFP_KERNEL);
	if (!pem_pci)
	if (!pem_pci)
		return -ENOMEM;
		return -ENOMEM;


	pdev = to_platform_device(dev);

	/*
	 * The second register range is the PEM bridge to the PCIe
	 * bus.  It has a different config access method than those
	 * devices behind the bridge.
	 */
	res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
	if (!res_pem) {
		dev_err(dev, "missing \"reg[1]\"property\n");
		return -EINVAL;
	}

	pem_pci->pem_reg_base = devm_ioremap(dev, res_pem->start, 0x10000);
	pem_pci->pem_reg_base = devm_ioremap(dev, res_pem->start, 0x10000);
	if (!pem_pci->pem_reg_base)
	if (!pem_pci->pem_reg_base)
		return -ENOMEM;
		return -ENOMEM;
@@ -332,9 +313,32 @@ static int thunder_pem_init(struct pci_config_window *cfg)
	return 0;
	return 0;
}
}


static int thunder_pem_platform_init(struct pci_config_window *cfg)
{
	struct device *dev = cfg->parent;
	struct platform_device *pdev = to_platform_device(dev);
	struct resource *res_pem;

	if (!dev->of_node)
		return -EINVAL;

	/*
	 * The second register range is the PEM bridge to the PCIe
	 * bus.  It has a different config access method than those
	 * devices behind the bridge.
	 */
	res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
	if (!res_pem) {
		dev_err(dev, "missing \"reg[1]\"property\n");
		return -EINVAL;
	}

	return thunder_pem_init(dev, cfg, res_pem);
}

static struct pci_ecam_ops pci_thunder_pem_ops = {
static struct pci_ecam_ops pci_thunder_pem_ops = {
	.bus_shift	= 24,
	.bus_shift	= 24,
	.init		= thunder_pem_init,
	.init		= thunder_pem_platform_init,
	.pci_ops	= {
	.pci_ops	= {
		.map_bus	= pci_ecam_map_bus,
		.map_bus	= pci_ecam_map_bus,
		.read		= thunder_pem_config_read,
		.read		= thunder_pem_config_read,