Merge tag 'ata-6.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux

Pull ata fixes from Damien Le Moal:

- Fix missing error checks during controller probe in the sata_sx4
driver (Wentao)

- Fix missing error checks during controller probe in the pata_pxa
driver (Henry)

* tag 'ata-6.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
ata: sata_sx4: Add error handling in pdc20621_i2c_read()
ata: pata_pxa: Fix potential NULL pointer dereference in pxa_ata_probe()

+16 -3
+6
drivers/ata/pata_pxa.c
··· 223 224 ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, cmd_res->start, 225 resource_size(cmd_res)); 226 ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, 227 resource_size(ctl_res)); 228 ap->ioaddr.bmdma_addr = devm_ioremap(&pdev->dev, dma_res->start, 229 resource_size(dma_res)); 230 231 /* 232 * Adjust register offsets
··· 223 224 ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, cmd_res->start, 225 resource_size(cmd_res)); 226 + if (!ap->ioaddr.cmd_addr) 227 + return -ENOMEM; 228 ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, 229 resource_size(ctl_res)); 230 + if (!ap->ioaddr.ctl_addr) 231 + return -ENOMEM; 232 ap->ioaddr.bmdma_addr = devm_ioremap(&pdev->dev, dma_res->start, 233 resource_size(dma_res)); 234 + if (!ap->ioaddr.bmdma_addr) 235 + return -ENOMEM; 236 237 /* 238 * Adjust register offsets
+10 -3
drivers/ata/sata_sx4.c
··· 1117 mmio += PDC_CHIP0_OFS; 1118 1119 for (i = 0; i < ARRAY_SIZE(pdc_i2c_read_data); i++) 1120 - pdc20621_i2c_read(host, PDC_DIMM0_SPD_DEV_ADDRESS, 1121 - pdc_i2c_read_data[i].reg, 1122 - &spd0[pdc_i2c_read_data[i].ofs]); 1123 1124 data |= (spd0[4] - 8) | ((spd0[21] != 0) << 3) | ((spd0[3]-11) << 4); 1125 data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) | ··· 1289 1290 /* Programming DIMM0 Module Control Register (index_CID0:80h) */ 1291 size = pdc20621_prog_dimm0(host); 1292 dev_dbg(host->dev, "Local DIMM Size = %dMB\n", size); 1293 1294 /* Programming DIMM Module Global Control Register (index_CID0:88h) */
··· 1117 mmio += PDC_CHIP0_OFS; 1118 1119 for (i = 0; i < ARRAY_SIZE(pdc_i2c_read_data); i++) 1120 + if (!pdc20621_i2c_read(host, PDC_DIMM0_SPD_DEV_ADDRESS, 1121 + pdc_i2c_read_data[i].reg, 1122 + &spd0[pdc_i2c_read_data[i].ofs])) { 1123 + dev_err(host->dev, 1124 + "Failed in i2c read at index %d: device=%#x, reg=%#x\n", 1125 + i, PDC_DIMM0_SPD_DEV_ADDRESS, pdc_i2c_read_data[i].reg); 1126 + return -EIO; 1127 + } 1128 1129 data |= (spd0[4] - 8) | ((spd0[21] != 0) << 3) | ((spd0[3]-11) << 4); 1130 data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) | ··· 1284 1285 /* Programming DIMM0 Module Control Register (index_CID0:80h) */ 1286 size = pdc20621_prog_dimm0(host); 1287 + if (size < 0) 1288 + return size; 1289 dev_dbg(host->dev, "Local DIMM Size = %dMB\n", size); 1290 1291 /* Programming DIMM Module Global Control Register (index_CID0:88h) */