From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heinrich Schuchardt Date: Wed, 30 Aug 2017 23:19:13 +0200 Subject: [U-Boot] ** Can't read Driver Desriptor Block ** In-Reply-To: <8f9d03a8-ba34-88f0-66ba-a434844cecc0@gmx.de> References: <34c835e4-920c-19c8-5202-dcd26ee219ce@gmx.de> <8f9d03a8-ba34-88f0-66ba-a434844cecc0@gmx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 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. Best regards Heinrich