[PATCH v3 0/7] Implement the Generic System Interconnect Subsystem for U-Boot
    Neil Armstrong 
    neil.armstrong at linaro.org
       
    Mon Oct 27 13:51:36 CET 2025
    
    
  
Hi,
On 10/10/25 16:35, Neil Armstrong wrote:
> Let's introduce the Generic System Interconnect subsystem based on
> the counterpart Linux framework which is used to vote for bandwidth
> across multiple SoC busses.
> 
> Documentation for the Linux Generic System Interconnect Subsystem can
> be found at [1].
> 
> Each bus endpoints are materialised as "nodes" which are linked together,
> and the DT will specify a pair of nodes to enable and set a bandwidth
> on the route between those endpoints.
> 
> The hardware resources that provide those nodes and provides the way
> to vote for the bandwidth are called "providers".
> 
> The Interconnect uclass code is heavily based on the Linux one, with
> some small differences:
> - nodes are allocated as udevices instead of Linux idr_alloc()
> - tag management is minimal, only normal xlate is supported
> - getting nodes states at probe is not implemented
> - providers are probed on demand while the nodes links are traversed
> - nodes are populated on bind
> - id management is simplified, static IDs and dynamics IDs can be used
> - identical consume API as Linux, only implementation differs
> 
> DM Testsuite is provided, testing all the API and nodes lifetime.
Is there any comments on this patchset ? or at least the DM emums and
the general code organization ?
Thanks,
Neil
> 
> A first implementation for Qualcomm SoCs using the RPMh subsystem
> is added, bandwidth vote is required to have full bandwidth for
> storage devices and enabling some subsystem like Display to access
> the DDR memory.
> 
> [1] https://docs.kernel.org/driver-api/interconnect.html
> 
> Qcom implementation depends on:
> - https://lore.kernel.org/all/20250711143851.1490617-2-aswin.murugan@oss.qualcomm.com/
> 
> Signed-off-by: Neil Armstrong <neil.armstrong at linaro.org>
> ---
> Changes in v3:
> - Add doc page, hevily based on the linux one
> - Documented all the structs and functions
> - Removed id field from icc_node, now using the device driver_data
> - icc_node id is not an ulong, can accept a pointer for dynamic id
> - Removed all functions call with icc_provider, now using the struct device only
> - Removed the icc_node provider entry, now only using dev->parent
> - Removed the interconnect pre_remove and pre_unbind, they are not needed
> - Removed more unused struct entries
> - Fixed the icc_path alloc, added the called dev to print errors with dev_err()
> - Removed IDs in sandbox interconnect, uses the "dynamic id" using the node pointers as ID
> - Now of_icc_get/_index will return NULL is prop is missing, like for Linux
> - Cleaned all the debug() calls, added new ones to track the bw agregations
> - Renamed node_find() to icc_node_find() to avoid name collision
> - Moved icc_node busy check to icc_node_busy()
> - Now icc_node_create passes the ID via driver_data
> - Added more bw test after put() calls, moved enable() after disable()
> - Used "Generic System Interconnect Subsystem" when possible
> - Dropped the icc_node init_avg/init_peak which is a Linux thing for sync_state
> - Dropped icc_node_add
> - Link to v2: https://lore.kernel.org/r/20251008-topic-interconnect-next-v2-0-c46e94dd328e@linaro.org
> 
> Changes in v2:
> - Simplified nodes linking, looking for nodes at traversal instead of complexe debice reparent
> - Populates nodes at bind time, only probinf nodes and providers when a path if found
> - With proper refcounting the node lifetime is safe
> - DM test is added, testing with a small graph that calculations are good
> - Fixed plenty of typo and errors, and dropped useless code
> - Dropped RFC since DM test is available, and code works as expected
> - Link to v1: https://lore.kernel.org/r/20251003-topic-interconnect-next-v1-0-955eef068b6e@linaro.org
> 
> ---
> Neil Armstrong (7):
>        Introduce the Generic System Interconnect Subsystem
>        interconnect: add DM test suite
>        MAINTAINERS: add myself as Maintainer of the Generic System Interconnect Subsystem
>        interconnect: add support for the Qualcomm RPMh helpers
>        interconnect: add support for the SM8650 SoC
>        ufs: qcom: vote for interconnect bandwidth on probe
>        qcom_defconfig: enable interconnect for SM8650
> 
>   MAINTAINERS                                      |   11 +
>   arch/sandbox/dts/test.dts                        |   36 +
>   arch/sandbox/include/asm/interconnect.h          |   19 +
>   configs/qcom_defconfig                           |    3 +
>   configs/sandbox64_defconfig                      |    2 +
>   configs/sandbox_defconfig                        |    2 +
>   doc/api/index.rst                                |    1 +
>   doc/api/interconnect.rst                         |  117 ++
>   drivers/Kconfig                                  |    2 +
>   drivers/Makefile                                 |    1 +
>   drivers/interconnect/Kconfig                     |   22 +
>   drivers/interconnect/Makefile                    |    8 +
>   drivers/interconnect/interconnect-uclass.c       |  543 +++++++
>   drivers/interconnect/qcom/Kconfig                |   12 +
>   drivers/interconnect/qcom/Makefile               |    7 +
>   drivers/interconnect/qcom/bcm-voter.c            |  340 +++++
>   drivers/interconnect/qcom/bcm-voter.h            |   19 +
>   drivers/interconnect/qcom/icc-rpmh.c             |  215 +++
>   drivers/interconnect/qcom/icc-rpmh.h             |  129 ++
>   drivers/interconnect/qcom/sm8650.c               | 1664 ++++++++++++++++++++++
>   drivers/interconnect/qcom/sm8650.h               |  144 ++
>   drivers/interconnect/sandbox-interconnect-test.c |   89 ++
>   drivers/interconnect/sandbox-interconnect.c      |  293 ++++
>   drivers/ufs/ufs-qcom.c                           |   13 +
>   include/dm/uclass-id.h                           |    2 +
>   include/interconnect-uclass.h                    |  136 ++
>   include/interconnect.h                           |  155 ++
>   test/dm/Makefile                                 |    1 +
>   test/dm/interconnect.c                           |  195 +++
>   29 files changed, 4181 insertions(+)
> ---
> base-commit: b8cea886d50e6c09985256e546904d640f600e4d
> change-id: 20251003-topic-interconnect-next-4ed75aecc01c
> 
> Best regards,
    
    
More information about the U-Boot
mailing list