[BUG] bind command leads to invalid state where plaform data is NULL

Simon Glass sjg at chromium.org
Mon Jun 19 14:57:41 CEST 2023


Hi Heinrich,

On Mon, 19 Jun 2023 at 13:48, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 6/19/23 14:37, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Sun, 18 Jun 2023 at 11:12, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>
> >> Hello Simon,
> >>
> >> from origin/next I build qemu_arm64_defconfig with CONFIG_CMD_BIND=yes.
> >>
> >> I ran the image with:
> >>
> >> qemu-system-aarch64 -semihosting \
> >>       -machine virt,gic-version=max -accel $(ACCEL) -m 1G -smp cores=2 \
> >>       -bios u-boot.bin -cpu $(CPU) -nographic -gdb tcp::1234 \
> >>       -netdev user,id=eth0,tftp=tftp -device e1000,netdev=eth0,romfile= \
> >>       -drive if=none,file=arm64.img,format=raw,id=mydisk \
> >>       -drive if=pflash,format=raw,index=1,file=envstore.img \
> >>       -device virtio-rng-pci \
> >>       -device ich9-ahci,id=ahci -device ide-hd,drive=mydisk,bus=ahci.0
> >>
> >> => scsi bind
> >> => dm tree
> >>    Class     Index  Probed  Driver                Name
> >> -----------------------------------------------------------
> >>    root          0  [ + ]   root_driver           root_driver
> >>    pci           0  [ + ]   pci_generic_ecam      |-- pcie at 10000000
> >>    pci_generi    0  [   ]   pci_generic_drv       |   |-- pci_0:0.0
> >>    ahci          0  [ + ]   ahci_pci              |   `-- ahci_pci
> >>    scsi          0  [ + ]   ahci_scsi             |       `-- ahci_scsi
> >>    blk           0  [ + ]   scsi_blk              |           |--
> >> ahci_scsi.id0lun0
> >>    partition     0  [ + ]   blk_partition         |           |   |--
> >> ahci_scsi.id0lun0:1
> >>    partition     1  [ + ]   blk_partition         |           |   `--
> >> ahci_scsi.id0lun0:15
> >>    bootdev       2  [   ]   scsi_bootdev          |           `--
> >> ahci_scsi.id0lun0.bootdev
> >> => unbind blk 0
> >> => dm tree
> >>    Class     Index  Probed  Driver                Name
> >> -----------------------------------------------------------
> >>    root          0  [ + ]   root_driver           root_driver
> >>    pci           0  [ + ]   pci_generic_ecam      |-- pcie at 10000000
> >>    pci_generi    0  [   ]   pci_generic_drv       |   |-- pci_0:0.0
> >>    ahci          0  [ + ]   ahci_pci              |   `-- ahci_pci
> >>    scsi          0  [ + ]   ahci_scsi             |       `-- ahci_scsi
> >>    bootdev       2  [   ]   scsi_bootdev          |           `--
> >> ahci_scsi.id0lun0.bootdev
> >> => bind scsi 0 scsi_blk
> >> => dm tree
> >>    Class     Index  Probed  Driver                Name
> >> -----------------------------------------------------------
> >>    root          0  [ + ]   root_driver           root_driver
> >>    pci           0  [ + ]   pci_generic_ecam      |-- pcie at 10000000
> >>    pci_generi    0  [   ]   pci_generic_drv       |   |-- pci_0:0.0
> >>    ahci          0  [ + ]   ahci_pci              |   `-- ahci_pci
> >>    scsi          0  [ + ]   ahci_scsi             |       `-- ahci_scsi
> >>    bootdev       2  [   ]   scsi_bootdev          |           |--
> >> ahci_scsi.id0lun0.bootdev
> >>    blk           0  [   ]   scsi_blk              |           `-- scsi_blk
> >> => part list scsi 0
> >> dev_get_uclass_plat: null device
> >> "Synchronous Abort" handler, esr 0x96000004, far 0xd503201f14000072
> >> elr: 000000000003392c lr : 0000000000033924 (reloc)
> >> elr: 000000007ff1492c lr : 000000007ff14924
> >> x0 : d503201f1400000a x1 : 0000000000000000
> >> x2 : 0000000000000090 x3 : 0000000000000013
> >> x4 : 000000007eda0419 x5 : 0000000000000020
> >> x6 : 00000000ffffffd0 x7 : 000000007eda06b0
> >> x8 : 0000000000000010 x9 : 0000000000000000
> >> x10: 0000000000000006 x11: 000000000001869f
> >> x12: 0000000000000016 x13: 0000000000000004
> >> x14: 0000000000000000 x15: 000000007eda073c
> >> x16: 000000007ff2547c x17: 0000000000000000
> >> x18: 000000007eea0db0 x19: 0000000000000000
> >> x20: 0000000000000000 x21: 0000000000000001
> >> x22: 0000000000000000 x23: 000000007eda0740
> >> x24: 0000000000000000 x25: 0000000000000000
> >> x26: 0000000000000000 x27: 0000000000000000
> >> x28: 0000000000000000 x29: 000000007eda06d0
> >>
> >> Code: aa0303f7 94000287 aa0003f4 f9400260 (f9403418)
> >> Resetting CPU ...
> >>
> >> The crash occurs in blk_read(). blk_read() does not check if desc == NULL.
> >>
> >> I would have expected "bind scsi 0 scsi_blk" to create a valid state
> >> where the platform data is set up.
> >>
> >> Best regards
> >>
> >> Heinrich
> >
> > I am not sure what 'scsi bind' does.
> >
> > But binding a blk device needs to be done by its parent device. I
> > suspect the 'bind' command does not know how to set up things
> > correctly. See for example blk_create_device() which does quite a lot
> > of setup.
> >
> > What are you trying to fix / do?
>
> I just wanted to have an example for creating a man-page for the bind
> command. Unfortunately new commands were created without man-page.
>
> I have an example for "<node path> <driver>". Do you have a better
> example for "bind <class> <index> <driver>"?

I suggest a simple device that needs no setup. The original commit[1]
suggests using USB - does that worK?

Regards,
Simon

[1] 49c752c93a78 ("cmd: Add bind/unbind commands to bind a device to a
driver from the command line")


More information about the U-Boot mailing list