From patchwork Thu Dec 17 04:20:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1417479 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256 header.s=google header.b=ay1UYt/e; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CxJhj1dShz9sSf for ; Thu, 17 Dec 2020 15:20:58 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B6A3382B1A; Thu, 17 Dec 2020 05:20:48 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="ay1UYt/e"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3B9D182AB8; Thu, 17 Dec 2020 05:20:46 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-il1-x133.google.com (mail-il1-x133.google.com [IPv6:2607:f8b0:4864:20::133]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 8E64E82AB8 for ; Thu, 17 Dec 2020 05:20:41 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sjg@chromium.org Received: by mail-il1-x133.google.com with SMTP id g1so24703295ilk.7 for ; Wed, 16 Dec 2020 20:20:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=KobRfr7I0aGgXdIFvI/T4bBKM0o+lemxbkCS+9vE4uU=; b=ay1UYt/ewqUGvpje422aMj2WxNbJloPJosuGIIgU490PP/Ts+FRaHs5+TD/FRD8SOy +LUmzXfzcLv4c0N73kIHLvnHDMDm/x8JNfz8YpvoOzoxkbgdbq8fEWaRHCPpBoQDQ9k+ dBZH9nPoU0qn2TlyAvzhACUmkV3jw2oKRZtFs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=KobRfr7I0aGgXdIFvI/T4bBKM0o+lemxbkCS+9vE4uU=; b=Zh+d3iDcUa22+yxlYayPmRCMxTyqaKEFmi4UNrWr6GIFC6buyXWqunyaxiIp7qey0f tdRTf7V0MP6NpKWqiC4HUzRlvX2xd8rBm7rdZHthIDeq9fJlBjwMWlkJUACJgtWwIITA tUHj/ySdfHcFy6feiFcKijviGBUnl+twaen39S6BsUvol1w78+I4MWH+jB9CVtezY4+/ DLUoWQwyZwCjwgwLz9yCg3Q9R8qaLFfyiovDjmXw4jAl3zX45+Kct0Zca0l3OXyjXdjJ KP4D4GClIYJpDEim23/dpTO/CB43KnNrEw80TN74vGs1SeUO2VTkG6Y0xq6CKz8sWHy0 inKw== X-Gm-Message-State: AOAM530IE9XL1NjkVP2R5quKs/oBXXcXrfZHjZPErI1Xm+EFT0mW6k6H YSBxK1RXPG96zypXI0GjYnXAqp6ttovRULp+ X-Google-Smtp-Source: ABdhPJzPFG9qDVwP6tqXSDB145GZQkadurGgZ4TlCUec0Tl2n4JU7xwMYLqPsLSsHt7FUf7VM+AthA== X-Received: by 2002:a05:6e02:12cc:: with SMTP id i12mr40020619ilm.23.1608178839966; Wed, 16 Dec 2020 20:20:39 -0800 (PST) Received: from localhost.localdomain (c-67-190-101-114.hsd1.co.comcast.net. [67.190.101.114]) by smtp.gmail.com with ESMTPSA id n16sm2351870ilj.19.2020.12.16.20.20.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Dec 2020 20:20:38 -0800 (PST) From: Simon Glass To: U-Boot Mailing List Cc: Michal Simek , Heinrich Schuchardt , Michael Walle , Tom Rini , Simon Glass , Bin Meng , Heiko Schocher , Jagan Teki , Jagannadha Sutradharudu Teki , Joe Hershberger , Marek Vasut , Pavel Herrmann Subject: [PATCH v3 00/28] dm: Change the way sequence numbers are implemented Date: Wed, 16 Dec 2020 21:20:05 -0700 Message-Id: <20201217042034.411902-1-sjg@chromium.org> X-Mailer: git-send-email 2.29.2.684.gfbc64c5ab5-goog MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean 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 assign sequence numbers to their devices, so that as soon as a device is bound, it has a sequence number. If the uclass flag DM_UC_FLAG_SEQ_ALIAS is enabled (as well as the CONFIG option), a devicetree alias provides the number. Otherwise, the next available number (after the last alias and avoiding existing devices) is used. Note that it is still possible to have the uclass manually allocate sequence numbers, using the DM_UC_FLAG_NO_SEQ flag. This is used by PCI, due to its special requirements. 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. This series is available at u-boot-dm/seq-working Changes in v3: - Update PCI to use manual sequence numbering - Add new patch to test DM_UC_FLAG_NO_AUTO_SEQ Changes in v2: - Give all devices a sequence number - Drop uclass_alloc_all_seqs() and GD_FLG_DM_NO_SEQ flag - Drop the GD_FLG_DM_NO_SEQ flag - Drop special numbering in the i2c uclass - Add new patch to allow manual sequence numbering - Use the sequence number directly instead of max bus - Adjust the tests to handle the new allocation scheme - Drop the networking changes which are no-longer needed - Update for new logic - Adjust commit message - Drop pointless check for max == -1 - Adjust the tests to handle the new allocation scheme - Simplify the logic so auto_seq is positive - Update the docs to indicate all devices get a sequence number - Update the docs to explain how aliases reserve sequence numbers - Drop commit changing efi_uc_destroy() Simon Glass (28): linker_lists: Fix alignment issue 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: Check all devices have a 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 dm: core: Allow manual sequence numbering 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: test: Add a test for DM_UC_FLAG_NO_AUTO_SEQ dm: Drop uclass_resolve_seq() dm: Drop the unused arg in uclass_find_device_by_seq() dm: core: Update uclass_find_next_free_req_seq() for new scheme 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 | 15 +- 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 | 59 ++++++++ doc/driver-model/design.rst | 59 ++++---- drivers/core/device-remove.c | 1 - drivers/core/device.c | 50 ++----- drivers/core/dump.c | 4 +- drivers/core/read.c | 4 +- drivers/core/root.c | 8 +- drivers/core/uclass.c | 86 +++--------- 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 | 39 +----- 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 | 6 +- 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 | 77 ++++++----- drivers/pci/pci_auto.c | 16 +-- 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/dm/device.h | 32 ++--- include/dm/uclass-id.h | 1 + include/dm/uclass-internal.h | 37 +++-- include/dm/uclass.h | 18 +-- include/linker_lists.h | 3 +- include/pci.h | 2 +- include/spi.h | 2 +- lib/acpi/acpi_device.c | 27 +--- 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/i2c.c | 3 - test/dm/spi.c | 3 - test/dm/test-fdt.c | 168 +++++++++++++++++------ 139 files changed, 634 insertions(+), 613 deletions(-) Tested-by: Michael Walle [on kontron_sl28]