[U-Boot] ** Can't read Driver Desriptor Block **

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Aug 31 17:24:49 UTC 2017


On 08/31/2017 02:55 PM, Bin Meng wrote:
> Hi Simon,
> 
> On Thu, Aug 31, 2017 at 8:52 PM, Simon Glass <sjg at chromium.org> wrote:
>> Hi Bin,
>>
>> On 31 August 2017 at 10:53, Bin Meng <bmeng.cn at gmail.com> wrote:
>>> Hi Heinrich,
>>>
>>> On Thu, Aug 31, 2017 at 5:19 AM, Heinrich Schuchardt <xypron.glpk at 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 at 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.

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.

Regards

Heinrich
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-foo.patch
Type: text/x-patch
Size: 1368 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170831/bbf7bef3/attachment.bin>


More information about the U-Boot mailing list