
Hi Heinrich,
On Fri, Sep 1, 2017 at 1:24 AM, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 08/31/2017 02:55 PM, Bin Meng wrote:
Hi Simon,
On Thu, Aug 31, 2017 at 8:52 PM, Simon Glass sjg@chromium.org wrote:
Hi Bin,
On 31 August 2017 at 10:53, Bin Meng bmeng.cn@gmail.com wrote:
Hi Heinrich,
On Thu, Aug 31, 2017 at 5:19 AM, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 08/30/2017 06:37 AM, Heinrich Schuchardt wrote:
On 08/30/2017 03:54 AM, Bin Meng wrote: > Hi Heinrich, > > On Wed, Aug 30, 2017 at 4:26 AM, Heinrich Schuchardt xypron.glpk@gmx.de wrote: >> Hello Simon, >> >> U-Boot HEAD qemu-86_defconfig cannot discover an IDE disk with one FAT >> partition in qemu-system-x86_64. >> >> By bisection I found this patch. >> >> b7c6baef2891ce8978cbfddb66e944943473ac21 >> x86: Convert MMC to driver model >> >> With this patch I get >> >> IDE: Bus 0: OK Bus 1: OK >> Device 0: Model: QEMU HARDDISK Firm: 2.5+ Ser#: QM00001 >> Type: Hard Disk >> Supports 48-bit addressing >> Capacity: 128.0 MB = 0.1 GB (262144 x 512) >> ** Can't read Driver Desriptor Block ** >> Device 1: not available >> Device 2: Model: QEMU Firm: 2.5+ Ser#: QEMU DVD-ROM >> Type: Removable CD ROM >> Capacity: not available >> Device 3: not available >> >> => ide info >> => >> >> Without the patch I get=> ide info >> Device 0: Model: QEMU HARDDISK Firm: 2.5+ Ser#: QM00001 >> Type: Hard Disk >> Supports 48-bit addressing >> Capacity: 128.0 MB = 0.1 GB (262144 x 512) >> Device 2: Model: QEMU Firm: 2.5+ Ser#: QEMU DVD-ROM >> Type: Removable CD ROM >> Capacity: not available >> >> I think we observe two independent errors here: >> >> - The hard disk Device 0 is not read. >> - The ide command stops at the first device that is not available. >> >> I guess only the first is caused by your patch. > > Both logs look fine to me. The "Can't read Driver Desriptor Block" > comes from part_mac.c. Did you verify the actual IDE read/write fails > with current HEAD? > > Regards, > Bin >
Hello Bin,
I have not checked block level read but used the shell commands for testing.
Before the patch I can read the directory of the drive:
=> ide info Device 0: Model: QEMU HARDDISK Firm: 2.5+ Ser#: QM00001 Type: Hard Disk Supports 48-bit addressing Capacity: 128.0 MB = 0.1 GB (262144 x 512) Device 2: Model: QEMU Firm: 2.5+ Ser#: QEMU DVD-ROM Type: Removable CD ROM Capacity: not available => fat2ls ide 0:1 Unknown command 'fat2ls' - try 'help' => fatls ide 0:1 164768 snp.efi 0 file1 0 file2
After the patch (including HEAD) I cannot read the directory and cannot load the file snp.efi either:
=> ide info => fatls ide 0:1 ** Bad device ide 0 ** => => fatls mmc 0:1 ** Bad device mmc 0 **
In both cases I have loaded the same image with:
export BUILD_ROM=y make distclean && make qemu-x86_defconfig && make -j6
qemu-system-x86_64 -m 1G -bios u-boot.rom -nographic \ -netdev \ user,id=eth0,tftp=tftp,net=192.168.76.0/24,dhcpstart=192.168.76.9 \ -device e1000,netdev=eth0 -machine pc-i440fx-2.8 -hda img
Best regards
Heinrich
Hello Bin, hello Simon,
I think the bug is in functions ide_init (drivers/block/ide.c).
Platform X86 implies CONFIG_BLK=y.
So we should initialize ide_dev_desc[i].bdev.
We don't, so blk_dread fails after finding no read operation with ENOSYS when called from part_test_dos.
The following comment in include/blk.h confirms that bdev has to be filled:
#if CONFIG_IS_ENABLED(BLK) /*
- For now we have a few functions which take struct blk_desc as a
- parameter. This field allows them to look up the associated
- device. Once these functions are removed we can drop this field.
*/ struct udevice *bdev; #else
I assume that we have the same issue in in __sata_initialize (drivers/ata/sata.c) but have not tested.
Thanks for the testing!
Simon, are you going to fix this?
I am not going to race you to it, if you are thinking of fixing it. I am back from travels in a few days but have a busy week ahead and the release is imminent :-(
Or maybe Heinrich, do you plan to work on a fix? If not, I will put it on my todo list.
Regards, Bin
Hello hello Bin,
I am aware that this bug is release critical. But unfortunately I am departing on vacation tomorrow.
Since there is not much time before the release, I did minimal conversion of the IDE driver to the driver model, and now it works.
I guess there should be CONFIG_SYS_IDE_MAXDEVICE times an U_BOOT_IDE_DEVICE(ide_disk[i]) which should refer to driver U_BOOT_DRIVER(ide_blk).
Just as prove of concept I append a patch to this mail. With the patch the IDE partitions are discovered in disk/part.c. But they are not usable to access the disk because the devices are not registered in a uclass.
Hopefully you will find the time to fix the problem.
Please check the patches [1] that I just sent.
[1] http://patchwork.ozlabs.org/project/uboot/list/?series=1298
Regards, Bin