[PATCH 00/27] dm: Change the way sequence numbers are implemented

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Dec 1 09:01:34 CET 2020


On 11/30/20 2:53 AM, Simon Glass wrote:
> At present each device has two sequence numbers, with 'req_seq' being
> set up at bind time and 'seq' at probe time. The idea is that devices
> can 'request' a sequence number and then the conflicts are resolved when
> the device is probed.
>
> This makes things complicated in a few cases, since we don't really know
> (at bind time) what the sequence number will end up being. We want to
> honour the bind-time requests if at all possible, but in fact the only
> source of these at present is the devicetree aliases.
>
> Apart from the obvious need for sequence numbers to supports U-Boot's
> numbering on devices on the command line, the current scheme was
> designed to:
>
> - avoid calculating the sequence number until it is needed, to save
>    execution time
> - allow multiple devices to obtain a particular sequence number as they
>    are probed and removed
> - retain a record of the 'requested' sequence number even if it turns out
>    that a device could not get it (to allow debugging and retrying)
>
> After some years using the current scheme it seems on balance that these
> goals don't have as much merit as first thought. The first point would
> be persuasive except that we end up reading the devicetree aliases at
> bind-time anyway. So the work of resolving the sequence numbers during
> probing is not that great. The second point hasn't really been an issue,
> as there is typically no contention for sequence numbers (boards tend to
> allocate them statically in the devicetree). Re the third point, we can
> often figure out what was requested by looking at aliases, and in the
> cases where we can't, it doesn't seem to matter much.
>
> Since we have the devicetree available at bind time, we may as well just
> use it, in the hope that the required processing will turn out to be
> useful later (i.e. the device actually gets used). In addition, it is
> simpler to use a single sequence number, since it avoids confusion and
> some extra code.
>
> This series moves U-Boot to use a single, bind-time sequence number. All
> uclasses with the DM_UC_FLAG_SEQ_ALIAS flag enabled will assign sequence
> numbers to their devices, so that as soon as a device is bound, it has a
> sequence number. If a devicetree alias provides the number, it will be
> used. Otherwise, during initial binding, the first free number is used.
> For ad-hoc calls to device_bind() afterwards (e.g. from driver code), the
> sequence is set to the maximum sequence number for the uclass + 1.
>
> Apart from the simplicity gains, overall these changes seem to reduce the
> number of tweaks and workarounds needed to get the desired behaviour.
>
> However there will certainly be some problems created, so board
> maintainers should test this out.

What is the effect of the series on removable devices like USB storage,
USB Ethernet, SATA disks, ...?

Is there a test for removable devices?

Best regards

Heinrich

>
>
> Simon Glass (27):
>    linker_lists: Fix alignment issue
>    efi: Drop unwanted message in efi_uc_destroy()
>    dm: Avoid accessing seq directly
>    dm: core: Update uclass_find_next_free_req_seq() args
>    dm: core: Add a new sequence number for devices
>    dm: test: Add support for new sequence numbers
>    dm: core: Switch binding to use new sequence numbers
>    dm: Fix return value in dev_read_alias_seq()
>    dm: test: Drop assumptions of no sequence numbers
>    octeon: Don't attempt to set the sequence number
>    i2c: Update for new sequence numbers
>    net: Update to use new sequence numbers
>    pci: Update to use new sequence numbers
>    spi: Update for new sequence numbers
>    usb: ehci-mx6: Drop assignment of sequence number
>    usb: Update for new sequence numbers
>    x86: Drop unnecessary mp_init logic
>    x86: Simplify acpi_device_infer_name()
>    gpio: Update for new sequence numbers
>    pinctrl: Update for new sequence numbers
>    dm: Switch over to use new sequence number for dev_seq()
>    dm: Drop uclass_resolve_seq()
>    dm: Drop the unused arg in uclass_find_device_by_seq()
>    dm: core: Simplify uclass_find_next_free_req_seq()
>    cmd: Drop use of old sequence numbers in commands
>    dm: core: Drop seq and req_seq
>    dm: Update documentation for new sequence numbers
>
>   arch/Kconfig                             |  11 +++
>   arch/arm/include/asm/mach-imx/mxc_i2c.h  |   2 +-
>   arch/arm/mach-k3/am6_init.c              |   2 +-
>   arch/arm/mach-k3/j721e_init.c            |   2 +-
>   arch/arm/mach-k3/sysfw-loader.c          |   2 +-
>   arch/sandbox/dts/test.dts                |   2 +-
>   arch/x86/cpu/apollolake/cpu.c            |   2 +-
>   arch/x86/cpu/broadwell/cpu_full.c        |   2 +-
>   arch/x86/cpu/ivybridge/model_206ax.c     |   2 +-
>   arch/x86/cpu/mp_init.c                   |  23 ++---
>   arch/x86/include/asm/mp.h                |   2 +-
>   board/xilinx/versal/board.c              |  12 +--
>   board/xilinx/zynqmp/zynqmp.c             |  12 +--
>   cmd/axi.c                                |   6 +-
>   cmd/cpu.c                                |   2 +-
>   cmd/i2c.c                                |   6 +-
>   cmd/misc.c                               |   2 +-
>   cmd/osd.c                                |   6 +-
>   cmd/pci.c                                |   7 +-
>   cmd/pmic.c                               |   4 +-
>   cmd/remoteproc.c                         |   2 +-
>   cmd/w1.c                                 |   4 +-
>   doc/api/linker_lists.rst                 |  62 ++++++++++++
>   doc/driver-model/design.rst              |  58 +++++++-----
>   drivers/core/device-remove.c             |   1 -
>   drivers/core/device.c                    |  52 ++++------
>   drivers/core/dump.c                      |   4 +-
>   drivers/core/read.c                      |   4 +-
>   drivers/core/root.c                      |  21 ++++-
>   drivers/core/uclass.c                    | 115 ++++++++++-------------
>   drivers/gpio/imx_rgpio2p.c               |   2 +-
>   drivers/gpio/iproc_gpio.c                |   2 +-
>   drivers/gpio/mvebu_gpio.c                |   2 +-
>   drivers/gpio/mxc_gpio.c                  |   2 +-
>   drivers/gpio/octeon_gpio.c               |   2 +-
>   drivers/gpio/vybrid_gpio.c               |   2 +-
>   drivers/i2c/ast_i2c.c                    |   4 +-
>   drivers/i2c/davinci_i2c.c                |   2 +-
>   drivers/i2c/designware_i2c_pci.c         |  16 +---
>   drivers/i2c/exynos_hs_i2c.c              |   2 +-
>   drivers/i2c/i2c-gpio.c                   |   2 +-
>   drivers/i2c/i2c-uclass.c                 |   8 +-
>   drivers/i2c/i2c-versatile.c              |   5 -
>   drivers/i2c/imx_lpi2c.c                  |  12 +--
>   drivers/i2c/intel_i2c.c                  |  12 +--
>   drivers/i2c/lpc32xx_i2c.c                |   6 +-
>   drivers/i2c/muxes/i2c-mux-uclass.c       |   4 +-
>   drivers/i2c/mvtwsi.c                     |   4 +-
>   drivers/i2c/mxc_i2c.c                    |  10 +-
>   drivers/i2c/nx_i2c.c                     |   2 +-
>   drivers/i2c/octeon_i2c.c                 |   3 +-
>   drivers/i2c/s3c24x0_i2c.c                |   2 +-
>   drivers/i2c/tegra_i2c.c                  |   5 +-
>   drivers/mmc/fsl_esdhc_imx.c              |   4 +-
>   drivers/mmc/octeontx_hsmmc.c             |   2 -
>   drivers/mtd/spi/sandbox.c                |   4 +-
>   drivers/net/dwc_eth_qos.c                |   2 +-
>   drivers/net/fec_mxc.c                    |   7 +-
>   drivers/net/fsl-mc/mc.c                  |   2 +-
>   drivers/net/fsl_mcdmafec.c               |   2 +-
>   drivers/net/ftgmac100.c                  |   2 +-
>   drivers/net/higmacv300.c                 |   2 +-
>   drivers/net/mcffec.c                     |   2 +-
>   drivers/net/octeontx/nicvf_main.c        |   9 +-
>   drivers/net/octeontx/smi.c               |   3 +-
>   drivers/net/octeontx2/nix.c              |   2 +-
>   drivers/net/octeontx2/rvu_pf.c           |   6 +-
>   drivers/net/xilinx_axi_emac.c            |   2 +-
>   drivers/net/xilinx_emaclite.c            |   2 +-
>   drivers/net/zynq_gem.c                   |   2 +-
>   drivers/pci/pci-aardvark.c               |   2 +-
>   drivers/pci/pci-uclass.c                 |  42 ++++-----
>   drivers/pci/pci_auto.c                   |   6 +-
>   drivers/pci/pcie_dw_mvebu.c              |   6 +-
>   drivers/pci/pcie_dw_ti.c                 |   6 +-
>   drivers/pci/pcie_ecam_generic.c          |   2 +-
>   drivers/pci/pcie_fsl.c                   |  16 ++--
>   drivers/pci/pcie_intel_fpga.c            |   2 +-
>   drivers/pci/pcie_layerscape_fixup.c      |   4 +-
>   drivers/pci/pcie_layerscape_gen4.c       |  10 +-
>   drivers/pci/pcie_layerscape_gen4_fixup.c |   2 +-
>   drivers/pci/pcie_layerscape_rc.c         |  12 +--
>   drivers/pci/pcie_mediatek.c              |   2 +-
>   drivers/pci/pcie_rockchip.c              |   6 +-
>   drivers/pinctrl/exynos/pinctrl-exynos.c  |   2 +-
>   drivers/serial/serial_mcf.c              |   2 +-
>   drivers/serial/serial_s5p.c              |   2 +-
>   drivers/spi/altera_spi.c                 |   2 +-
>   drivers/spi/cf_spi.c                     |  12 +--
>   drivers/spi/fsl_dspi.c                   |   8 +-
>   drivers/spi/fsl_espi.c                   |   2 +-
>   drivers/spi/octeon_spi.c                 |   2 +-
>   drivers/spi/pic32_spi.c                  |   4 +-
>   drivers/spi/rk_spi.c                     |   1 -
>   drivers/spi/sandbox_spi.c                |   2 +-
>   drivers/spi/spi-uclass.c                 |   4 +-
>   drivers/spi/tegra114_spi.c               |   2 +-
>   drivers/spi/tegra20_sflash.c             |   2 +-
>   drivers/spi/tegra20_slink.c              |   2 +-
>   drivers/spi/tegra210_qspi.c              |   2 +-
>   drivers/spi/xilinx_spi.c                 |   2 +-
>   drivers/spi/zynq_qspi.c                  |   2 +-
>   drivers/spi/zynq_spi.c                   |   2 +-
>   drivers/usb/gadget/max3420_udc.c         |   2 +-
>   drivers/usb/host/ehci-mx5.c              |   2 +-
>   drivers/usb/host/ehci-mx6.c              |  14 ++-
>   drivers/usb/host/ehci-omap.c             |   2 +-
>   drivers/usb/host/ehci-vf.c               |   8 +-
>   drivers/usb/host/usb-sandbox.c           |   2 +-
>   drivers/usb/host/usb-uclass.c            |   6 +-
>   drivers/video/vidconsole-uclass.c        |   4 +-
>   drivers/virtio/virtio-uclass.c           |   2 +-
>   drivers/watchdog/ast_wdt.c               |   2 +-
>   drivers/watchdog/at91sam9_wdt.c          |   2 +-
>   drivers/watchdog/cdns_wdt.c              |   2 +-
>   drivers/watchdog/omap_wdt.c              |   2 +-
>   drivers/watchdog/orion_wdt.c             |   2 +-
>   drivers/watchdog/sbsa_gwdt.c             |   2 +-
>   drivers/watchdog/sp805_wdt.c             |   2 +-
>   drivers/watchdog/tangier_wdt.c           |   2 +-
>   drivers/watchdog/xilinx_tb_wdt.c         |   2 +-
>   drivers/watchdog/xilinx_wwdt.c           |   2 +-
>   include/asm-generic/global_data.h        |   2 +
>   include/configs/sandbox.h                |   2 +-
>   include/dm/device.h                      |  32 +++----
>   include/dm/uclass-internal.h             |  34 +++----
>   include/dm/uclass.h                      |  15 +--
>   include/linker_lists.h                   |   3 +-
>   include/pci.h                            |   2 +-
>   include/spi.h                            |   2 +-
>   lib/acpi/acpi_device.c                   |  27 +-----
>   lib/efi_driver/efi_uclass.c              |   1 -
>   lib/efi_loader/efi_device_path.c         |   4 +-
>   net/eth-uclass.c                         |  24 +++--
>   test/dm/acpi.c                           |   6 +-
>   test/dm/blk.c                            |   3 -
>   test/dm/bus.c                            |  15 +--
>   test/dm/core.c                           |  19 ++++
>   test/dm/eth.c                            |  14 +--
>   test/dm/i2c.c                            |   3 -
>   test/dm/spi.c                            |   3 -
>   test/dm/test-fdt.c                       | 100 ++++++++++++--------
>   test/dm/test-main.c                      |   6 ++
>   143 files changed, 583 insertions(+), 569 deletions(-)
>



More information about the U-Boot mailing list