diff options
Diffstat (limited to 'drivers/pci/controller/pci-thunder-ecam.c')
| -rw-r--r-- | drivers/pci/controller/pci-thunder-ecam.c | 46 | 
1 files changed, 16 insertions, 30 deletions
diff --git a/drivers/pci/controller/pci-thunder-ecam.c b/drivers/pci/controller/pci-thunder-ecam.c index e9d5ca245f5e..b5bd10a62adb 100644 --- a/drivers/pci/controller/pci-thunder-ecam.c +++ b/drivers/pci/controller/pci-thunder-ecam.c @@ -41,10 +41,9 @@ static int handle_ea_bar(u32 e0, int bar, struct pci_bus *bus,  	}  	if (where_a == 0x4) {  		addr = bus->ops->map_bus(bus, devfn, bar); /* BAR 0 */ -		if (!addr) { -			*val = ~0; +		if (!addr)  			return PCIBIOS_DEVICE_NOT_FOUND; -		} +  		v = readl(addr);  		v &= ~0xf;  		v |= 2; /* EA entry-1. Base-L */ @@ -56,10 +55,9 @@ static int handle_ea_bar(u32 e0, int bar, struct pci_bus *bus,  		u32 barl_rb;  		addr = bus->ops->map_bus(bus, devfn, bar); /* BAR 0 */ -		if (!addr) { -			*val = ~0; +		if (!addr)  			return PCIBIOS_DEVICE_NOT_FOUND; -		} +  		barl_orig = readl(addr + 0);  		writel(0xffffffff, addr + 0);  		barl_rb = readl(addr + 0); @@ -72,10 +70,9 @@ static int handle_ea_bar(u32 e0, int bar, struct pci_bus *bus,  	}  	if (where_a == 0xc) {  		addr = bus->ops->map_bus(bus, devfn, bar + 4); /* BAR 1 */ -		if (!addr) { -			*val = ~0; +		if (!addr)  			return PCIBIOS_DEVICE_NOT_FOUND; -		} +  		v = readl(addr); /* EA entry-3. Base-H */  		set_val(v, where, size, val);  		return PCIBIOS_SUCCESSFUL; @@ -104,10 +101,8 @@ static int thunder_ecam_p2_config_read(struct pci_bus *bus, unsigned int devfn,  	}  	addr = bus->ops->map_bus(bus, devfn, where_a); -	if (!addr) { -		*val = ~0; +	if (!addr)  		return PCIBIOS_DEVICE_NOT_FOUND; -	}  	v = readl(addr); @@ -135,10 +130,8 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  	int where_a = where & ~3;  	addr = bus->ops->map_bus(bus, devfn, 0xc); -	if (!addr) { -		*val = ~0; +	if (!addr)  		return PCIBIOS_DEVICE_NOT_FOUND; -	}  	v = readl(addr); @@ -146,10 +139,8 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  	cfg_type = (v >> 16) & 0x7f;  	addr = bus->ops->map_bus(bus, devfn, 8); -	if (!addr) { -		*val = ~0; +	if (!addr)  		return PCIBIOS_DEVICE_NOT_FOUND; -	}  	class_rev = readl(addr);  	if (class_rev == 0xffffffff) @@ -176,10 +167,8 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  	}  	addr = bus->ops->map_bus(bus, devfn, 0); -	if (!addr) { -		*val = ~0; +	if (!addr)  		return PCIBIOS_DEVICE_NOT_FOUND; -	}  	vendor_device = readl(addr);  	if (vendor_device == 0xffffffff) @@ -196,10 +185,9 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  		bool is_tns = (vendor_device == 0xa01f177d);  		addr = bus->ops->map_bus(bus, devfn, 0x70); -		if (!addr) { -			*val = ~0; +		if (!addr)  			return PCIBIOS_DEVICE_NOT_FOUND; -		} +  		/* E_CAP */  		v = readl(addr);  		has_msix = (v & 0xff00) != 0; @@ -211,10 +199,9 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  		}  		if (where_a == 0xb0) {  			addr = bus->ops->map_bus(bus, devfn, where_a); -			if (!addr) { -				*val = ~0; +			if (!addr)  				return PCIBIOS_DEVICE_NOT_FOUND; -			} +  			v = readl(addr);  			if (v & 0xff00)  				pr_err("Bad MSIX cap header: %08x\n", v); @@ -268,10 +255,9 @@ static int thunder_ecam_config_read(struct pci_bus *bus, unsigned int devfn,  		if (where_a == 0x70) {  			addr = bus->ops->map_bus(bus, devfn, where_a); -			if (!addr) { -				*val = ~0; +			if (!addr)  				return PCIBIOS_DEVICE_NOT_FOUND; -			} +  			v = readl(addr);  			if (v & 0xff00)  				pr_err("Bad PCIe cap header: %08x\n", v);  | 
