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

Bin Meng bmeng.cn at gmail.com
Mon Sep 4 03:59:27 UTC 2017


Hi Heinrich,

On Fri, Sep 1, 2017 at 1:24 AM, Heinrich Schuchardt <xypron.glpk at 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 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.
>

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


More information about the U-Boot mailing list