Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dependency: add support for loading auxiliary code as LLEXT modules #9399

Draft
wants to merge 22 commits into
base: main
Choose a base branch
from

Commits on Sep 2, 2024

  1. llext: add a convenience Kconfig option to build LLEXT modules

    Add a Kconfig option that can be used to flip all LLEXT-supporting
    code to a modular build. Use that global flag for smart-amp-test,
    mixin-mixout and eq-iir.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    736e7a9 View commit details
    Browse the repository at this point in the history
  2. lnl: build all supporting code as LLEXT modules

    Enable CONFIG_LIBRARY_DEFAULT_MODULAR for LNL to build all supporting
    code as LLEXT modules.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    11e76b6 View commit details
    Browse the repository at this point in the history
  3. llext: automatically calculate module addresses

    Currently LLEXT module starting addresses are hard-coded in their
    respective CMakeLists.txt files. This is very wasteful, since it's
    unknown in what order modules are loaded, inflexible and not easily
    extendible to other platforms. Switch to calculating addresses
    automatically based on a single per-platform Kconfig value.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    afc30e4 View commit details
    Browse the repository at this point in the history
  4. llext: add missing modules to LNL overlay

    LNL modules overlay is missing eq_iir and mixin_mixout entries, add
    them there.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    859996e View commit details
    Browse the repository at this point in the history
  5. src: convert to a loadable module

    Build src as a loadable llext module.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    543ee6a View commit details
    Browse the repository at this point in the history
  6. volume: move gain.toml and peakvol.toml into volume.toml

    To make volume an LLEXT module it should have a single TOML
    configuration file named volume.toml. This is easy to do, using
    respective Kconfig options.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    45ae3a2 View commit details
    Browse the repository at this point in the history
  7. llext: export 2 symbols, required for modular volume

    When building volume as an LLEXT module, two more symbols are
    required: __divdi3() and module_set_configuration(), export them.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    877dbf3 View commit details
    Browse the repository at this point in the history
  8. volume: add LLEXT support

    This makes it possible to build volume as an LLEXT module to be
    loaded at run-time.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    4f0e94c View commit details
    Browse the repository at this point in the history
  9. eq-fir: enable building as an llext module

    Add support for LLEXT building to eq-fir.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    4c2eca8 View commit details
    Browse the repository at this point in the history
  10. llext: move logging context to base firmware

    Move the logging context of eq_iir and mixin_mixout to the base
    firmware image too. This improves logging entries, dropped due to
    LLEXT unloading.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    830f9a2 View commit details
    Browse the repository at this point in the history
  11. asrc: enable building as an llext module

    Add support for LLEXT building to asrc.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    80abcf7 View commit details
    Browse the repository at this point in the history
  12. llext: export symbols, required for eq_fir

    When built as an llext module, eq_fir requires several base-firmware
    provided symbols, export them.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    75ee4a0 View commit details
    Browse the repository at this point in the history
  13. llext: fix multi-core use cases

    MOD_INIT_INSTANCE IPCs can be processed on different cores, different
    cores can use the same modules. Make shared data uncached.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    951ea73 View commit details
    Browse the repository at this point in the history
  14. tdfb: enable building as an llext module

    Add support for LLEXT building to tdfb.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    dfe4bce View commit details
    Browse the repository at this point in the history
  15. llext: add auxiliary library type

    Add a dedicated type for auxiliary LLEXT objects, not implementing
    the Module Adapter API.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    1bc75fc View commit details
    Browse the repository at this point in the history
  16. fir: enable building FIR support code as an LLEXT object

    FIR support code is used by eq-fir and by tdfb. When both of them are
    built as LLEXT modules, FIR supporting functions can be dynamically
    loaded too.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    ba52d85 View commit details
    Browse the repository at this point in the history
  17. llext: change a function parameter

    llext_manager_link() doesn't the whole of struct module_data, it only
    needs a pointer to a pointer to struct llext. Modify it to only
    receive the scope, that it needs.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    b83285d View commit details
    Browse the repository at this point in the history
  18. llext: move the llext pointer to struct lib_manager_mod_ctx

    The LLEXT context is currently bound to the Module Adapter API which
    shouldn't be the case because we also need generic LLEXT-based
    loadable SOF objects. This patch moves the context to struct
    lib_manager_mod_ctx which is safe, because the library manager is
    always needed when dynamically loading modules.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    21a5246 View commit details
    Browse the repository at this point in the history
  19. llext: (cosmetic) remove function names from logs

    Zephyr logging adds function names automatically, no need to also
    provide them explicitly in format strings.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    8d47ad3 View commit details
    Browse the repository at this point in the history
  20. llext: call llext_unload() internally

    Currently lib_manager_module_free() first checks, if an LLEXT module
    is being freed. If so, it first calls llext_unload() and then - if
    the use-count is reported as zero, calls llext_manager_free_module().
    Simplify this process by just calling llext_manager_free_module() and
    letting it handle llext_unload() internally.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    b8c5357 View commit details
    Browse the repository at this point in the history
  21. llext: add auxiliary library dependency support

    LLEXT modules can depend on other LLEXT auxiliary libraries. Zephyr
    LLEXT core takes core to link them. This commit implements their
    loading into and unloading from SRAM when the first dependent is
    added or the last one is removed respectively.
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    7381cd1 View commit details
    Browse the repository at this point in the history
  22. test Zephyr PR 77473

    Test zephyrproject-rtos/zephyr#77473
    
    Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
    lyakh committed Sep 2, 2024
    Configuration menu
    Copy the full SHA
    4bc7ca5 View commit details
    Browse the repository at this point in the history