diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pcie-al.c')
| -rw-r--r-- | drivers/pci/controller/dwc/pcie-al.c | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/drivers/pci/controller/dwc/pcie-al.c b/drivers/pci/controller/dwc/pcie-al.c index 6dfdda59f328..643115f74092 100644 --- a/drivers/pci/controller/dwc/pcie-al.c +++ b/drivers/pci/controller/dwc/pcie-al.c @@ -242,18 +242,24 @@ static struct pci_ops al_child_pci_ops = {  	.write = pci_generic_config_write,  }; -static void al_pcie_config_prepare(struct al_pcie *pcie) +static int al_pcie_config_prepare(struct al_pcie *pcie)  {  	struct al_pcie_target_bus_cfg *target_bus_cfg;  	struct dw_pcie_rp *pp = &pcie->pci->pp;  	unsigned int ecam_bus_mask; +	struct resource_entry *ft;  	u32 cfg_control_offset; +	struct resource *bus;  	u8 subordinate_bus;  	u8 secondary_bus;  	u32 cfg_control;  	u32 reg; -	struct resource *bus = resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS)->res; +	ft = resource_list_first_type(&pp->bridge->windows, IORESOURCE_BUS); +	if (!ft) +		return -ENODEV; + +	bus = ft->res;  	target_bus_cfg = &pcie->target_bus_cfg;  	ecam_bus_mask = (pcie->ecam_size >> PCIE_ECAM_BUS_SHIFT) - 1; @@ -287,6 +293,8 @@ static void al_pcie_config_prepare(struct al_pcie *pcie)  	       FIELD_PREP(CFG_CONTROL_SEC_BUS_MASK, secondary_bus);  	al_pcie_controller_writel(pcie, cfg_control_offset, reg); + +	return 0;  }  static int al_pcie_host_init(struct dw_pcie_rp *pp) @@ -305,7 +313,9 @@ static int al_pcie_host_init(struct dw_pcie_rp *pp)  	if (rc)  		return rc; -	al_pcie_config_prepare(pcie); +	rc = al_pcie_config_prepare(pcie); +	if (rc) +		return rc;  	return 0;  } |