Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI: thunder: Drop error data fabrication when config read fails

If config pci_ops.read() methods return failure, the PCI_OP_READ() and
PCI_USER_READ_CONFIG() wrappers use PCI_SET_ERROR_RESPONSE() to set the
data value, so there's no need to set it in the pci_ops.read() methods
themselves.

Drop the unnecessary data value fabrication when pci_ops.read() fails.

Link: https://lore.kernel.org/r/22f471b638276422926c49f3d42ac41bc7b28b3d.1637243717.git.naveennaidu479@gmail.com
Signed-off-by: Naveen Naidu <naveennaidu479@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>

authored by

Naveen Naidu and committed by
Bjorn Helgaas
658f7ecd 316df706

+17 -33
+16 -30
drivers/pci/controller/pci-thunder-ecam.c
··· 41 41 } 42 42 if (where_a == 0x4) { 43 43 addr = bus->ops->map_bus(bus, devfn, bar); /* BAR 0 */ 44 - if (!addr) { 45 - *val = ~0; 44 + if (!addr) 46 45 return PCIBIOS_DEVICE_NOT_FOUND; 47 - } 46 + 48 47 v = readl(addr); 49 48 v &= ~0xf; 50 49 v |= 2; /* EA entry-1. Base-L */ ··· 55 56 u32 barl_rb; 56 57 57 58 addr = bus->ops->map_bus(bus, devfn, bar); /* BAR 0 */ 58 - if (!addr) { 59 - *val = ~0; 59 + if (!addr) 60 60 return PCIBIOS_DEVICE_NOT_FOUND; 61 - } 61 + 62 62 barl_orig = readl(addr + 0); 63 63 writel(0xffffffff, addr + 0); 64 64 barl_rb = readl(addr + 0); ··· 70 72 } 71 73 if (where_a == 0xc) { 72 74 addr = bus->ops->map_bus(bus, devfn, bar + 4); /* BAR 1 */ 73 - if (!addr) { 74 - *val = ~0; 75 + if (!addr) 75 76 return PCIBIOS_DEVICE_NOT_FOUND; 76 - } 77 + 77 78 v = readl(addr); /* EA entry-3. Base-H */ 78 79 set_val(v, where, size, val); 79 80 return PCIBIOS_SUCCESSFUL; ··· 101 104 } 102 105 103 106 addr = bus->ops->map_bus(bus, devfn, where_a); 104 - if (!addr) { 105 - *val = ~0; 107 + if (!addr) 106 108 return PCIBIOS_DEVICE_NOT_FOUND; 107 - } 108 109 109 110 v = readl(addr); 110 111 ··· 130 135 int where_a = where & ~3; 131 136 132 137 addr = bus->ops->map_bus(bus, devfn, 0xc); 133 - if (!addr) { 134 - *val = ~0; 138 + if (!addr) 135 139 return PCIBIOS_DEVICE_NOT_FOUND; 136 - } 137 140 138 141 v = readl(addr); 139 142 ··· 139 146 cfg_type = (v >> 16) & 0x7f; 140 147 141 148 addr = bus->ops->map_bus(bus, devfn, 8); 142 - if (!addr) { 143 - *val = ~0; 149 + if (!addr) 144 150 return PCIBIOS_DEVICE_NOT_FOUND; 145 - } 146 151 147 152 class_rev = readl(addr); 148 153 if (class_rev == 0xffffffff) ··· 167 176 } 168 177 169 178 addr = bus->ops->map_bus(bus, devfn, 0); 170 - if (!addr) { 171 - *val = ~0; 179 + if (!addr) 172 180 return PCIBIOS_DEVICE_NOT_FOUND; 173 - } 174 181 175 182 vendor_device = readl(addr); 176 183 if (vendor_device == 0xffffffff) ··· 185 196 bool is_tns = (vendor_device == 0xa01f177d); 186 197 187 198 addr = bus->ops->map_bus(bus, devfn, 0x70); 188 - if (!addr) { 189 - *val = ~0; 199 + if (!addr) 190 200 return PCIBIOS_DEVICE_NOT_FOUND; 191 - } 201 + 192 202 /* E_CAP */ 193 203 v = readl(addr); 194 204 has_msix = (v & 0xff00) != 0; ··· 199 211 } 200 212 if (where_a == 0xb0) { 201 213 addr = bus->ops->map_bus(bus, devfn, where_a); 202 - if (!addr) { 203 - *val = ~0; 214 + if (!addr) 204 215 return PCIBIOS_DEVICE_NOT_FOUND; 205 - } 216 + 206 217 v = readl(addr); 207 218 if (v & 0xff00) 208 219 pr_err("Bad MSIX cap header: %08x\n", v); ··· 255 268 256 269 if (where_a == 0x70) { 257 270 addr = bus->ops->map_bus(bus, devfn, where_a); 258 - if (!addr) { 259 - *val = ~0; 271 + if (!addr) 260 272 return PCIBIOS_DEVICE_NOT_FOUND; 261 - } 273 + 262 274 v = readl(addr); 263 275 if (v & 0xff00) 264 276 pr_err("Bad PCIe cap header: %08x\n", v);
+1 -3
drivers/pci/controller/pci-thunder-pem.c
··· 41 41 struct pci_config_window *cfg = bus->sysdata; 42 42 struct thunder_pem_pci *pem_pci = (struct thunder_pem_pci *)cfg->priv; 43 43 44 - if (devfn != 0 || where >= 2048) { 45 - *val = ~0; 44 + if (devfn != 0 || where >= 2048) 46 45 return PCIBIOS_DEVICE_NOT_FOUND; 47 - } 48 46 49 47 /* 50 48 * 32-bit accesses only. Write the address to the low order