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

Bin Meng bmeng.cn at gmail.com
Mon Sep 4 09:05:05 UTC 2017


Hi Heinrich,

On Mon, Sep 4, 2017 at 3:30 PM, Bin Meng <bmeng.cn at gmail.com> wrote:
> 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.
>>

Can you please try the v2 patch series @
http://patchwork.ozlabs.org/project/uboot/list/?series=1338?

Regards,
Bin


More information about the U-Boot mailing list