Skip to content

[FEATURE][Zephyr] implement clk.h with native Zephyr interface and drop platform clk.h #9541

Open

Description

@kv2019i

Is your feature request related to a problem? Please describe.
Implement the SOF clk.h interface without depending on SOF platform interface and rather implement the functions using direct calls to Zephyr. This allows to move the platform specifics to Zephyr side and reduce the work needed to be done on SOF side to add new platforms.

Part of #5794

Additional context
Primary use in code base is for clock_get_freq() (e.g. in basefw.c). Most of the other uses are in XTOS drivers, which can be ignored for Zephyr builds. All in all, it's a good question whether clk.h interface is needed at all for application use and whether the clk.h could be just dropped (and only used for XTOS driver and platform code).

IOW, is there any need to query the CPU frequency from application code? After all, clock gating and scaling can be used and any logic dependent on exact frequency, is potentially sensitive to platform differences.

Activity

  1. added this to the v2.12 milestone on Oct 3, 2024
  2. kv2019i commented on Oct 4, 2024

    @kv2019i
    CollaboratorAuthor

    Ok this is somewhat more complex as src/lib/cpu-clk-manager.c has non-trivial use of clk.h and this is used on many native Zephyr SOF platforms.

  3. lgirdwood commented on Oct 15, 2024

    @lgirdwood
    Member

    Ok this is somewhat more complex as src/lib/cpu-clk-manager.c has non-trivial use of clk.h and this is used on many native Zephyr SOF platforms.

    Ok, pls do create a new generic application header for cpu-clk manager and we can transition to that and remove the old headers.

  4. kv2019i commented on Nov 19, 2024

    @kv2019i
    CollaboratorAuthor

    Further observations of current design:

    • src/lib/clk.h still used in Zephyr builds (initialized by platform layer)
    • SOF clk.h provides interfaces to enumerate platform DSP clocks
      - Zephyr clock_control.h and DTS can describe invididual clocks but AFAIK there is not way to query and enumerate core clocks
    • SOF clk.h provides interfaces to use SOF notifier to get async events on DSP core freq change
      - no matching fucnction in Zephyr, but also no actual users of this in SOF Zephyr builds, so maybe can be dropped
    • Intel platforms use zephyr/dts/bindings/clock/intel,adsp-shim-clkctl.yaml schema to describe the DT data
    • platform clk.h provides platform specific defaults to KCPS control (like PRIMARY_CORE_BASE_CPS_USAGE)
    • sof/zephyr/lib/clk.c provides a mapping from SOF to zephyr interface, but is "DEVICE_DT_GET(DT_NODELABEL(clkctl))" generic enough?

    Ripping out the cpu-clk-manager usage to its own interface might still be the best course of action, but above is stll useful to input even if we go down on this path.

  5. lgirdwood commented on Nov 21, 2024

    @lgirdwood
    Member

    Ripping out the cpu-clk-manager usage to its own interface might still be the best course of action, but above is stll useful to input even if we go down on this path.

    We need to rip out the SOF side code that deals with clock IP and clock change notifications, i.e. any RTOS service/API should be used and the SOF code should be a client that asks for clock changes.

    Agree, I dont think we have any notifier usage for clock change so can be dropped.

  6. kv2019i commented on Nov 22, 2024

    @kv2019i
    CollaboratorAuthor

    Some study into implementing clock management on top of Zephyr:

    Next step would be to clean up the Intel ACE platform code in SOF to use more Zephyr definitions.

  7. kv2019i commented on Dec 13, 2024

    @kv2019i
    CollaboratorAuthor

    Feature cutoff for v2.12. The remaining work has complex dependencies to Zephyr, so I won't move this to 2.13 directly. Needs to be separately planned, when SOF can intercept the clock framework.

  8. removed this from the v2.12 milestone on Dec 13, 2024
  9. added
    ZephyrIssues only observed with Zephyr integrated
    on Dec 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ZephyrIssues only observed with Zephyr integratedenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions