Skip to content

Switch to KVM hypervisor on Rb3Gen2-Core-Kit and QCM6490-IDP - #2879

Open
Viswanath Kraleti (vkraleti) wants to merge 5 commits into
qualcomm-linux:masterfrom
vkraleti:kodiak-kvm
Open

Switch to KVM hypervisor on Rb3Gen2-Core-Kit and QCM6490-IDP#2879
Viswanath Kraleti (vkraleti) wants to merge 5 commits into
qualcomm-linux:masterfrom
vkraleti:kodiak-kvm

Conversation

@vkraleti

@vkraleti Viswanath Kraleti (vkraleti) commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

All PILs are functioning correctly with KVM on Rb3Gen2-Core-Kit and QCM6490-IDP. Update
FIT_DTB_COMPATIBLE entries and machine configurations to switch to KVM on these boards.

Comment thread .github/workflows/build-yocto.yml
Comment thread .github/workflows/build-yocto.yml Outdated
@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit c4dcacb

  • qcomdistro: multimedia image-prop
    Pass: 38 | Fail: 3 | Others: 12 | Total: 53
  • qcomdistro: multimedia image
    Pass: 8 | Fail: 1 | Total: 9

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown

Test run workflow

Test jobs for commit 62eb8a7

qcom-distro
Pass: 296 | Fail: 37 | Total: 357
qcom-distro_linux-qcom-6.18
Pass: 233 | Fail: 0 | Total: 259
nodistro
Pass: 10 | Fail: 0 | Total: 10

@test-reporting-app

test-reporting-app Bot commented Aug 19, 2026

Copy link
Copy Markdown

Test Results

  119 files  +   38    715 suites  +289   10h 17m 50s ⏱️ + 2h 51m 31s
  175 tests +    2    132 ✅  -    23   1 💤 + 1  42 ❌ +24 
4 579 runs  +1 816  4 471 ✅ +1 775  50 💤 +12  58 ❌ +29 

For more details on these failures, see this check.

Results for commit 62eb8a7. ± Comparison against base commit 1efd355.

♻️ This comment has been updated with latest results.

@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit a0d5c14

  • qcomdistro: multimedia image-prop
    Pass: 26 | Fail: 0 | Total: 26
  • qcomdistro: multimedia image
    Pass: 9 | Fail: 0 | Total: 9

Comment thread ci/gunyah.yml Outdated

local_conf_header:
gunyah: |
MACHINE_FEATURES:remove = "kvm"

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.

It's no a distro configuration. Changing it in the distro-like Kas fragment is invalid.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Renamed the config as ci/gunyah.yml and removed distro include so that, any machine+distro combination can be build with Gunyah.

Comment thread .github/workflows/build-yocto.yml Outdated
- machine: iq-615-evk
distro:
name: qcom-distro-gunyah
yamlfile: ':ci/qcom-distro-gunyah.yml'

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.

We are not changing the distro here, so this is incorrect.

@vkraleti Viswanath Kraleti (vkraleti) Aug 20, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

qcom-distro in the name is to indicate the build is with gunyah and qcom-distro. It can't be called as qcom-distro+gunyah, as having any other separator apart from hypen(-) / underscore(_) caused issues while copying to S3 in the past.

FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-el2 kodiak-staging"

FIT_DTB_COMPATIBLE[qcom_qcs5430-iot-el2kvm] = \
FIT_DTB_COMPATIBLE[qcom_qcs5430-iot] = \

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.

This will break users switching from QLI 2.0 to QLI 2.1 or master without erasing UEFI variables. This doesn't sound good.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

But is there any option to clear efivars? Even for L,M, and T this was an agreed short coming and users need to perform one time efivars cleanup.

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.

The switch itself is already something that is not really ideal to push as part of 2.x, as this is a major change in the end.

The user will have to remove efivars, update both the OS and the firmware via capsule-updates, and hopefully it will work :-)

Comment thread .github/workflows/build-yocto.yml Outdated
Comment thread .github/workflows/build-yocto.yml
@vkraleti
Viswanath Kraleti (vkraleti) force-pushed the kodiak-kvm branch 2 times, most recently from c9890b0 to d3973df Compare August 20, 2026 10:55
@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit d3973df

  • qcomdistro: multimedia image-prop
    Pass: 44 | Fail: 0 | Total: 44
  • qcomdistro: multimedia image
    Pass: 9 | Fail: 0 | Total: 9

@vkraleti

Copy link
Copy Markdown
Contributor Author

Dmitry Baryshkov (@lumag) Ricardo Salveti (@ricardosalveti) KVM enablement for QCS6490 is planned for the upcoming release, and we are running short on time to complete the full L4 test cycle. Could you please review this PR and let me know if you see any issues or required modifications?

As you are already aware, supporting both hypervisors is being tracked in another PR, on which we can continue discussions for a clean switching solution.

@lumag

Copy link
Copy Markdown
Contributor

KVM enablement for QCS6490 is planned for the upcoming release,

We have two different items here. KVM enablement and KVM being a default. Could we separate them? I don't think we require KVM being a default for completing L4 testing?

@vkraleti

Copy link
Copy Markdown
Contributor Author

KVM enablement for QCS6490 is planned for the upcoming release,

We have two different items here. KVM enablement and KVM being a default. Could we separate them? I don't think we require KVM being a default for completing L4 testing?

Commitment for Sep release is to switch to default KVM and perform complete L4 testing on KVM.

@lumag

Copy link
Copy Markdown
Contributor

KVM enablement for QCS6490 is planned for the upcoming release,

We have two different items here. KVM enablement and KVM being a default. Could we separate them? I don't think we require KVM being a default for completing L4 testing?

Commitment for Sep release is to switch to default KVM and perform complete L4 testing on KVM.

This means it must be implemented correctly. No shortcuts,

@vkraleti Viswanath Kraleti (vkraleti) changed the title Enable KVM by default on Rb3Gen2-Core-Kit and QCM6490-IDP Switch to KVM hypervisor on Rb3Gen2-Core-Kit and QCM6490-IDP Sep 1, 2026
@vkraleti

Copy link
Copy Markdown
Contributor Author

Dmitry Baryshkov (@lumag) Ricardo Salveti (@ricardosalveti) as discussed over the call with sahitya-tummala, I updated the commit messages in the current PR and also created #3052 to add Gunyah support in CI. Can you please review?

"qcs6490-rb3gen2 qcs6490-rb3gen2-industrial-mezzanine kodiak-el2 qcs6490-rb3gen2-industrial-mezzanine-staging"
FIT_DTB_COMPATIBLE[qcom_qcs6490-iot-subtype9-staging] = \
"qcs6490-rb3gen2 qcs6490-rb3gen2-industrial-mezzanine kodiak-staging qcs6490-rb3gen2-industrial-mezzanine-staging"
"qcs6490-rb3gen2 qcs6490-rb3gen2-industrial-mezzanine kodiak-el2 qcs6490-rb3gen2-industrial-mezzanine-staging"

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.

kodiak-staging removed on both lines here.

@ricardosalveti

Copy link
Copy Markdown
Contributor

linux-yocto builds will boot without the el2 overlay and with the kvm firmware, that will be broken (lemans is also broken similarly today).

@ricardosalveti

Copy link
Copy Markdown
Contributor

It seems it is not really working correctly on rb3gen2, ADSP seems to be failing, and iris seems to be giving errors as well.

Comment thread conf/machine/include/fit-dtb-compatible-linux-qcom.inc
Comment thread conf/machine/include/fit-dtb-compatible-linux-qcom.inc Outdated
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-staging"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-el2kvm] = "qcm6490-idp kodiak-el2"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp] = "qcm6490-idp kodiak-el2"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-el2 kodiak-staging"

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.

Don't reorder the lines. It's impossible to review your changes. If you want to retain a certain order, split the reordering into a separate commit.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Broke this commit into two, for easy review.

@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit 373420d

  • qcomdistro: multimedia image-prop
    Pass: 21 | Fail: 0 | Total: 21
  • qcomdistro: multimedia image
    Pass: 9 | Fail: 0 | Total: 9

@vkraleti
Viswanath Kraleti (vkraleti) force-pushed the kodiak-kvm branch 2 times, most recently from 24d0264 to 37cc3bb Compare September 2, 2026 09:53
@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit 24d0264

  • qcomdistro: multimedia image
    Pass: 1 | Fail: 0 | Total: 1


# ---------- glymur ----------
FIT_DTB_COMPATIBLE[qcom_glymur-crd-staging] = "glymur-crd glymur-staging"
FIT_DTB_COMPATIBLE[qcom_glymur-crd-camx] = "glymur-crd glymur-crd-camx"

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.

What kind of sorting order do you have in mind? In my opinion, camx comes before staging.

FIT_DTB_COMPATIBLE[qcom_qcs6490-iot-subtype9] = \
"qcs6490-rb3gen2 qcs6490-rb3gen2-industrial-mezzanine"

FIT_DTB_COMPATIBLE[qcom_qcs5430-iot-subtype2] = \

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.

Again, subtype2 < subtype9.

"qcs6490-rb3gen2 qcs6490-rb3gen2-vision-mezzanine kodiak-staging"

FIT_DTB_COMPATIBLE[qcom_qcs5430-iot-camx] = \
"qcs6490-rb3gen2 qcs5430-fps-camx"

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.

These entries got moved. You wrote that you are changing compats. No mention of moving anything


# ---------- kodiak ----------
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-staging"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-el2 kodiak-staging"

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.

Why is this a separate commit? Why are you adding overlays? Just add -el2gh where applicable. Can you glance at the commit and see what was changed? No. If you just changed the compatible strings, it would have been much easier.

#
# Syntax:
# FIT_DTB_COMPATIBLE[<compatible-encoded>] = "<dtb-stem> [<overlay-stem> [<overlay-stem>...]]"
#

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.

"Foo, in addition bar" means two different actions. Two separate commits.

@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit 37cc3bb

  • qcomdistro: multimedia image
    Pass: 9 | Fail: 0 | Total: 9
  • qcomdistro: multimedia image-prop
    Pass: 30 | Fail: 0 | Total: 30

@vkraleti

Copy link
Copy Markdown
Contributor Author

It seems it is not really working correctly on rb3gen2, ADSP seems to be failing, and iris seems to be giving errors as well.

The issue narrowed down to the devconfig.mbn currently being used. This version doesn't support KVM, preventing the PILs from initializing correctly.

@lumag

Copy link
Copy Markdown
Contributor

It seems it is not really working correctly on rb3gen2, ADSP seems to be failing, and iris seems to be giving errors as well.

The issue narrowed down to the devconfig.mbn currently being used. This version doesn't support KVM, preventing the PILs from initializing correctly.

And how was KVM tested then?

@sahitya-tummala

sahitya-tummala commented Sep 8, 2026

Copy link
Copy Markdown

It seems it is not really working correctly on rb3gen2, ADSP seems to be failing, and iris seems to be giving errors as well.

The issue narrowed down to the devconfig.mbn currently being used. This version doesn't support KVM, preventing the PILs from initializing correctly.

And how was KVM tested then?

The issue is with devcfg.mbn, but other devcfg variants its fine and those other devcfg variants are for internal consumption only, not to be released externally. Hence, a new FW bin is being released with the fix to devcfg.mbn, which is the right one to use on Kodiak. The fix is part of #3069.

Viswanath Kraleti (@vkraleti) pls rebase your change on that and trigger the CI tests again, these should pass now. Note that the above PR also has boot changes to update efivar with el2gh/el2kvm based on the XBL image flashed.

@lumag

Copy link
Copy Markdown
Contributor

And how was KVM tested then?

The issue is with devcfg.mbn, but other devcfg variants its fine and those other devcfg variants are for internal consumption only, not to be released externally. Hence, a new FW bin is being released with the fix to devcfg.mbn, which is the right one to use on Kodiak. The fix is part of #3069.

This is all fine, but how was this PR tested? Why was it not tested with the devcfg.mbn that we have in meta-qcom?

Viswanath Kraleti (@vkraleti) should we treat your PRs as completely untested and thus requiring more scrunity?

@vkraleti

Copy link
Copy Markdown
Contributor Author

And how was KVM tested then?

The issue is with devcfg.mbn, but other devcfg variants its fine and those other devcfg variants are for internal consumption only, not to be released externally. Hence, a new FW bin is being released with the fix to devcfg.mbn, which is the right one to use on Kodiak. The fix is part of #3069.

This is all fine, but how was this PR tested? Why was it not tested with the devcfg.mbn that we have in meta-qcom?

Viswanath Kraleti (Viswanath Kraleti (@vkraleti)) should we treat your PRs as completely untested and thus requiring more scrunity?

Due to HLOS and nHLOS interdependencies (both are developed in different environments) this couldn't be tested with the devcfg.mbn present in meta-qcom. Instead it was validated with the internal builds with an expectation that meta-qcom CI can validate with published bins. #2939 is supposed to bring in nHLOS changes how ever it was an integration miss.

@lumag

Copy link
Copy Markdown
Contributor

Due to HLOS and nHLOS interdependencies (both are developed in different environments) this couldn't be tested with the devcfg.mbn present in meta-qcom.

Was this ever mentioned in the PR description or in the commit message? How was this supposed to be merged at all if this PR was opened before the NHLOS update?

The el2gh suffix selects the Gunyah hypervisor variant of a board's
compatible string, the same way el2kvm selects the KVM variant. Like
camx and staging, it is a feature/hypervisor selector rather than board
metadata, so it has no corresponding node in qcom-metadata.dtb.

test_fitimage_compatible_metadata_validation validates every
dash-separated suffix of the generated ITS compatible strings against
the metadata node names, and so already fails today on the pre-existing
el2gh entries in fit-dtb-compatible-linux-qcom.inc. Add el2gh to the
skip set to match the metadata-check script's blacklist, and to
COMPAT_EXTENSIONS so the unit-level fixtures stay in sync.

Signed-off-by: Viswanath Kraleti <viswanath.kraleti@oss.qualcomm.com>
KVM is the preffered hypervisor for Qualcomm Linux SoCs. Gunyah was
used as an interim solution till KVM is fully functional. Now that
KVM support on Rb3Gen2 Core Kit has been validated, it no longer
requires Gunyah as an interim solution.

Add 'kvm' to MACHINE_FEATURES so that the KVM-specific XBL configuration
is selected during boot. This switches the default hypervisor to KVM and
aligns Rb3Gen2 Core Kit with IQ-615-EVK, IQ-8275-EVK, and IQ-9075-EVK.

Signed-off-by: Viswanath Kraleti <viswanath.kraleti@oss.qualcomm.com>
KVM is the preffered hypervisor for Qualcomm Linux SoCs. Gunyah was
used as an interim solution till KVM is fully functional. Now that
KVM support on QCM6490-IDP has been validated, it no longer requires
Gunyah as an interim solution.

Add 'kvm' to MACHINE_FEATURES so that the KVM-specific XBL configuration
is selected during boot. This switches the default hypervisor to KVM and
aligns QCM6490-IDP with IQ-615-EVK, IQ-8275-EVK, and IQ-9075-EVK.

Signed-off-by: Viswanath Kraleti <viswanath.kraleti@oss.qualcomm.com>
Currently FIT_DTB_COMPATIBLE entries in fit-dtb-compatible-linux-qcom.inc
and fit-dtb-compatible.inc are not sorted and it is hard to identify
missing and duplicate entires. Group them per SoC for easier navigation.
Within each SoC section, compatible string entries containing el2gh string
(indicating Gunyah hypervisor usage) are further grouped together
and labeled for easier identification.

No entries were added, removed, or changed, so there is no functional
impact.

Signed-off-by: Viswanath Kraleti <viswanath.kraleti@oss.qualcomm.com>
Kodiak FIT_DTB_COMPATIBLE entries currently use el2kvm-specific compatible
strings to load el2.dtbo. As KVM is the default hypervisor now, update the
compatible entries to load kodiak-el2.dtbo without requiring an el2kvm
suffix. Introduce dedicated el2gh variants for Gunyah configurations and
group them under the corresponding Gunyah compatible strings.

After dropping el2kvm suffix from Kodiak FIT_DTB_COMPATIBLE keys, four keys,
qcom_qcs5430-iot-camx, qcom_qcs5430-iot-subtype2-camx, qcom_qcs6490-iot-camx
and qcom_qcs6490-iot-subtype2-camx each defined twice with different values.
Drop the stale first occurrence of each of the four keys, keeping the
kodiak-el2-inclusive value that these are supposed to be resolving to.

Signed-off-by: Viswanath Kraleti <viswanath.kraleti@oss.qualcomm.com>
@vkraleti

Viswanath Kraleti (vkraleti) commented Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

Dmitry Baryshkov (@lumag) Ricardo Salveti (@ricardosalveti) updated nHLOS is consumed by meta-qcom and boot tests on Rb3Gen2 are successful. Can you please review one moretime?

@lumag

Copy link
Copy Markdown
Contributor

Let's wait for the tests to conclude

FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-el2kvm] = "qcm6490-idp kodiak-el2"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-staging"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp] = "qcm6490-idp kodiak-el2"
FIT_DTB_COMPATIBLE[qcom_qcm6490-idp-staging] = "qcm6490-idp kodiak-el2 kodiak-staging"

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.

I think it was written several times. Don't mix functional changes and refactoring / reordering. This commit really should have only one kind of changes: drop -el2kvm if it's a part of the compat string, otherwise add -el2gh. No reordering, no moving, etc.

@qcomlnxci

Copy link
Copy Markdown

Test Coral run workflow

Test jobs for commit 62eb8a7

  • qcomdistro: multimedia image-prop
    Pass: 41 | Fail: 0 | Total: 41
  • qcomdistro: multimedia image
    Pass: 9 | Fail: 0 | Total: 9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants