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

Bin Meng bmeng.cn at gmail.com
Mon Sep 4 07:30:43 UTC 2017


Hi Heinrich,

On Mon, Sep 4, 2017 at 1:41 PM, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> On 09/04/2017 05:59 AM, Bin Meng wrote:
>> 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
>>
>
> Hello Bin,
>
> thank you for working on this.
>
> The command 'ide info' now produces a reasonable output for the one
> drive I attached to qemu.
>
> But 'fatls ide 0:1' still claims there is no device ide 0.
>
> See output below.
>
> This is how I start my image:
>
> qemu-system-x86_64 -m 1G -bios denx/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

I think you need pass "-hdb" to QEMU to enable ide 0:1.

[snip]

Regards,
Bin


More information about the U-Boot mailing list