Skip to content

app: make the Linux configuration the default, keep old default as internal_ci_overlay - #11403

Draft
lgirdwood wants to merge 4 commits into
thesofproject:mainfrom
lgirdwood:topic/linux-default-kconfig
Draft

lgirdwood wants to merge 4 commits into
thesofproject:mainfrom
lgirdwood:topic/linux-default-kconfig

Conversation

@lgirdwood

Copy link
Copy Markdown
Member

The Intel board configs (app/boards/intel_adsp_*.conf) currently hold the non-Linux configuration. To build firmware for the Linux SOF driver you have to add -o app/os_linux_overlay.conf, and on ACE3.x+ app/CMakeLists.txt then also pulls in ll_userspace_overlay.conf. This PR makes the Linux configuration the default and keeps the current default as app/internal_ci_overlay.conf.

Changes

  • Kconfig: SOF_OS_LINUX_COMPAT_PRIORITY now defaults to y. VIRTUAL_HEAP_EXTENDED defaults to y only if !SOF_OS_LINUX_COMPAT_PRIORITY, which matches the intent of f66d005 ("limit additional buffers to non-Linux configurations").
  • Board configs:
    • ADSP_IMR_CONTEXT_SAVE=n on lnl, ptl, wcl, nvl and nvl-s
    • ptl no longer enables SOF_USERSPACE_PROXY
    • nvl and nvl-s use runtime log level 3
  • app/CMakeLists.txt:
    • On ACE3.x+, ll_userspace_overlay.conf is always included, unless internal_ci_overlay is used.
    • With internal_ci_overlay, app/overlays/internal_ci/<board>.conf is also included. This holds the per-board settings: IMR context save, the ptl userspace proxy, and the nvl log level.
    • The board name is normalised from BOARD + BOARD_QUALIFIERS, so both the full and the split form work.
    • The overlays CMake adds are now put explicitly before the user overlays. This is already the effective order today: Zephyr merges EXTRA_CONF_FILE with MERGE REVERSE and keeps the last duplicate.
  • os_linux_overlay.conf: now empty and marked deprecated, so scripts that pass it keep working. To be removed in a later release.
  • CI: adds an lnl+ptl build with internal_ci_overlay.conf. The artifact names of the existing jobs don't change, so the Linux-vs-Windows reproducibility check still pairs them.
  • Docs: the userspace README is updated. The userspace test build instructions now add internal_ci_overlay.conf, so the test keeps the same config as before.

Verification

I ran a configure-only build for tgl, tgl-h, mtl, lnl, ptl, ptl-sim, wcl, wcl-sim, nvl and nvl-s, and diffed the generated .config against main. All three comparisons are identical on all 10 targets:

This PR main
default default + os_linux_overlay.conf
default + os_linux_overlay.conf default + os_linux_overlay.conf
default + internal_ci_overlay.conf default
  • For imx8, imx8m and acp_7_0 the only difference is SOF_OS_LINUX_COMPAT_PRIORITY=y, which only Intel code reads.
  • There are no new Kconfig warnings. One goes away: LOG_RUNTIME_DEFAULT_LEVEL was assigned on boards without runtime log filtering.
  • The zephyr/test/userspace build config is unchanged.
  • TGL (CAVS2.5) hardware: firmware built with the new default boots, plays (HDA, deep buffer) and captures (HDA, DMIC), and passes 3 runtime-PM suspend/resume cycles.

Open points

  • Downstream builds: any non-Linux build that relies on the current default must switch to -o app/internal_ci_overlay.conf before this merges. Otherwise it silently gets the Linux configuration.
  • LL userspace in default CI: on ACE3.x+ the default now includes LL userspace. The default CI jobs for ptl and wcl therefore build with the settings that overlay turns off for now: SOF_BOOT_TEST_ALLOWED=n, CROSS_CORE_STREAM=n, INTEL_ADSP_MIC_PRIVACY=n and XRUN_NOTIFICATIONS_ENABLE=n. The new internal CI job keeps the previous configuration covered.
  • Hardware coverage: only TGL was tested on hardware. TGL only picks up the compatibility default, so the flipped settings (IMR context save, userspace proxy) still need a run on ACE hardware.

🤖 Generated with Claude Code

Make SOF_OS_LINUX_COMPAT_PRIORITY default to y so that a plain SOF
build targets the Linux SOF driver without needing any overlay. Non
Linux builds (e.g. internal CI) can still disable it via an overlay.

Also derive the VIRTUAL_HEAP_EXTENDED default from it, as the
additional virtual heap buffers are only needed by non-Linux
configurations. This keeps the behaviour of os_linux_overlay.conf,
which disables both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The internal CI check ignores the environment-provided EXTRA_CONF_FILE, causing ACE3.x+ builds to select LL userspace without preserving the required board-specific IMR context-save and PTL proxy settings.

1 open issue
What changed in this PR

This PR makes Linux-compatible firmware the default SOF build and preserves the previous non-Linux configuration through an explicit internal CI overlay.

Changes:

  • Updates Kconfig and Intel board defaults, including automatic LL userspace on ACE3.x+.
  • Adds shared and board-specific internal CI overlays while retaining the deprecated Linux overlay for script compatibility.
  • Adds internal CI build coverage and updates userspace documentation.
File Description
zephyr/​test/​userspace/​README.md Preserves the test configuration with the internal CI overlay.
zephyr/​Kconfig Defaults extended virtual heap buffers to non-Linux configurations.
src/​include/​sof/​userspace/​README.md Documents the default and internal CI privilege configurations.
Kconfig.sof Enables Linux compatibility by default.
app/​overlays/​internal_ci/​intel_adsp_ace40_nvls.conf Restores NVL-S context saving and error-level logging.
app/​overlays/​internal_ci/​intel_adsp_ace40_nvl.conf Restores NVL context saving and error-level logging.
app/​overlays/​internal_ci/​intel_adsp_ace30_wcl.conf Restores WCL context saving.
app/​overlays/​internal_ci/​intel_adsp_ace30_ptl.conf Restores PTL context saving and the userspace proxy.
app/​overlays/​internal_ci/​intel_adsp_ace20_lnl.conf Restores LNL context saving.
app/​os_linux_overlay.conf Retains an empty, deprecated compatibility overlay.
app/​ll_userspace_overlay.conf Updates comments describing automatic inclusion.
app/​internal_ci_overlay.conf Disables Linux compatibility and documents restoration behavior.
app/​CMakeLists.txt Selects automatic overlays and normalizes board names.
app/​boards/​intel_adsp_ace40_nvls.conf Disables context saving and defaults runtime logging to INFO.
app/​boards/​intel_adsp_ace40_nvl.conf Disables context saving and defaults runtime logging to INFO.
app/​boards/​intel_adsp_ace30_wcl.conf Disables context saving by default.
app/​boards/​intel_adsp_ace30_ptl.conf Disables context saving and removes explicit proxy enablement.
app/​boards/​intel_adsp_ace20_lnl.conf Disables context saving by default.
.github/​workflows/​zephyr.yml Adds LNL/PTL internal CI builds with distinct artifact names.

Review effort: Balanced

Comment thread app/CMakeLists.txt Resolved

@kv2019i kv2019i left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. We certainly have had many issues with people not using the correct overlay when trying to build SOF (to be used with Linux kernel), so making it default will avoid a lot of user (and increasingly, agent) errors.

The copilot comment seems valid. The extra-conf handling is quite complex in Zephyr build, a lot of cases to cover.

@lgirdwood

Copy link
Copy Markdown
Member Author

@harajend @lrudyX heads up if any CI changes needed - I will be merging in next 2 weeks.

lrgirdwo and others added 3 commits November 5, 2026 20:41
Until now the Intel board configurations described the non-Linux
configuration and Linux builds had to add os_linux_overlay.conf
(which, for ACE3.x and newer, also pulled in ll_userspace_overlay.conf).
Make the Linux configuration the default instead:

 - set ADSP_IMR_CONTEXT_SAVE=n for lnl, ptl, wcl, nvl and nvl-s
 - do not enable SOF_USERSPACE_PROXY on ptl
 - use runtime log level INFO on nvl and nvl-s
 - always include ll_userspace_overlay.conf for ACE3.x and newer

The previous default configuration is kept as internal_ci_overlay.conf.
As some of the settings are board specific, app/CMakeLists.txt also
includes app/overlays/internal_ci/<board>.conf when building with
internal_ci_overlay.conf, and it then omits ll_userspace_overlay.conf.

The overlays are looked up in EXTRA_CONF_FILE and the deprecated
OVERLAY_CONFIG, given either as CMake variables or in the
environment, as Zephyr merges all of them.

The overlays added by app/CMakeLists.txt are now explicitly placed
before user provided overlays. This matches the effective order
Zephyr already produced when merging EXTRA_CONF_FILE from the cache
and the local scope.

The resulting .config is identical for all Intel targets (tgl, tgl-h,
mtl, lnl, ptl, ptl-sim, wcl, wcl-sim, nvl, nvl-s):
 - new default == old default + os_linux_overlay.conf
 - new default + internal_ci_overlay.conf == old default

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
The default SOF build now targets the Linux SOF driver, so
os_linux_overlay.conf is no longer needed. Keep it as an empty
overlay so that existing build scripts keep working, and remove
it in a future release.

Update the overlay and userspace documentation to describe the
new default, and add internal_ci_overlay.conf to the userspace
test build instructions so that the test keeps building with the
same configuration as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
The default configuration now targets the Linux SOF driver. Add a
build of lnl and ptl with app/internal_ci_overlay.conf so that the
previous default (non-Linux) configuration keeps being built in CI.

The artifact name only gets the overlay suffix when one is used, so
that the Linux vs Windows reproducibility comparison keeps matching
the existing artifact names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
@lgirdwood
lgirdwood force-pushed the topic/linux-default-kconfig branch from 03bda73 to 7459d97 Compare November 5, 2026 20:42
@lgirdwood
lgirdwood requested a balanced review from Copilot November 6, 2026 16:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Copilot review overview

2 open issues
1 resolved since last review

Review effort: Lite

Comment thread app/CMakeLists.txt
Comment on lines +24 to 31
if("${_sof_conf_files}" MATCHES "internal_ci_overlay")
# Internal CI build: also add the board specific internal CI overlay,
# if there is one.
set(_sof_ci_overlay
"${CMAKE_CURRENT_SOURCE_DIR}/overlays/internal_ci/${_sof_board_conf}.conf")
if(EXISTS "${_sof_ci_overlay}")
list(PREPEND EXTRA_CONF_FILE "${_sof_ci_overlay}")
endif()
@@ -0,0 +1,8 @@
# Board specific internal CI settings for ptl, automatically
# included after internal_ci_overlay.conf. See internal_ci_overlay.conf.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants