We only use one member of the ide_dev_desc[] array at a time and it does not stick around outside ide_probe(). Use a single element instead.
Copy over the missing members of blk_desc at the same, since this was missing from the previous code. Signed-off-by: Simon Glass <s...@chromium.org> Fixes: 68e6f221ed0 ("block: ide: Fix block read/write with driver model") --- drivers/block/ide.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/block/ide.c b/drivers/block/ide.c index b1c897d6a41b..4c2a6a8e5309 100644 --- a/drivers/block/ide.c +++ b/drivers/block/ide.c @@ -1005,7 +1005,6 @@ BOOTDEV_HUNTER(ide_bootdev_hunter) = { static int ide_probe(struct udevice *udev) { - struct blk_desc ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE]; bool bus_ok[CONFIG_SYS_IDE_MAXBUS]; int i, bus; @@ -1028,7 +1027,7 @@ static int ide_probe(struct udevice *udev) schedule(); for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) { - struct blk_desc *desc; + struct blk_desc *desc, pdesc; struct udevice *blk; lbaint_t size; char name[20]; @@ -1038,16 +1037,16 @@ static int ide_probe(struct udevice *udev) if (!bus_ok[IDE_BUS(i)]) continue; - ret = ide_ident(i, &ide_dev_desc[i]); - dev_print(&ide_dev_desc[i]); + ret = ide_ident(i, &pdesc); + dev_print(&pdesc); if (ret) continue; sprintf(name, "blk#%d", i); - blksz = ide_dev_desc[i].blksz; - size = blksz * ide_dev_desc[i].lba; + blksz = pdesc.blksz; + size = blksz * pdesc.lba; /* * With CDROM, if there is no CD inserted, blksz will @@ -1066,12 +1065,13 @@ static int ide_probe(struct udevice *udev) /* fill in device vendor/product/rev strings */ desc = dev_get_uclass_plat(blk); - strlcpy(desc->vendor, ide_dev_desc[desc->devnum].vendor, - BLK_VEN_SIZE); - strlcpy(desc->product, ide_dev_desc[desc->devnum].product, - BLK_PRD_SIZE); - strlcpy(desc->revision, ide_dev_desc[desc->devnum].revision, - BLK_REV_SIZE); + strlcpy(desc->vendor, pdesc.vendor, BLK_VEN_SIZE); + strlcpy(desc->product, pdesc.product, BLK_PRD_SIZE); + strlcpy(desc->revision, pdesc.revision, BLK_REV_SIZE); + desc->removable = pdesc.removable; + desc->atapi = pdesc.atapi; + desc->lba48 = pdesc.lba48; + desc->type = pdesc.type; ret = bootdev_setup_for_dev(udev, "ide_bootdev"); if (ret) -- 2.40.0.348.gf938b09366-goog