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

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Sep 4 05:41:33 UTC 2017


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

Best regards

Heinrich

U-Boot 2017.09-rc3-00130-g54c022cc0e (Sep 04 2017 - 07:30:09 +0200)

CPU: x86_64, vendor AMD, device 663h
DRAM:  1 GiB
Using default environment

Video: 640x480x16
Model: QEMU x86 (I440FX)
Net:   e1000: 52:54:00:12:34:56

Warning: e1000#0 using MAC address from ROM
eth0: e1000#0
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)
  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
Hit any key to stop autoboot:  0
** Bad device scsi 0 **
Error: Invalid Boot Flag (found 0x0000, expected 0xaa55)
## Kernel loading failed ...
zboot - Boot bzImage

Usage:
zboot [addr] [size] [initrd addr] [initrd size]
      addr -        The optional starting address of the bzimage.
                    If not set it defaults to the environment
                    variable "fileaddr".
      size -        The optional size of the bzimage. Defaults to
                    zero.
      initrd addr - The address of the initrd image to use, if any.
      initrd size - The size of the initrd image to use, if any.

=> ide info
Device 0: Model: QEMU HARDDISK  Firm: 2.5+ Ser#: QM00001
            Type: Hard Disk
            Capacity: 128.0 MB = 0.1 GB (262144 x 512)
=> fatls ide 0:1
** Bad device ide 0 **





More information about the U-Boot mailing list