[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