Skip to content

Working minimal image build for Radxa Dragon Q6A.#32

Merged
lumag merged 5 commits intoqualcomm-linux:mainfrom
navinreddy23:main
Apr 27, 2026
Merged

Working minimal image build for Radxa Dragon Q6A.#32
lumag merged 5 commits intoqualcomm-linux:mainfrom
navinreddy23:main

Conversation

@navinreddy23
Copy link
Copy Markdown
Contributor

Please note that the layer compat is modified to work with stable sources that are in https://github.com/qualcomm-linux/meta-qcom-releases/tree/main. To use the release build a lock file has been created. Without this file, the build fails due to missing file paths when a patch is applied.

Use kas build meta-qcom-3rdparty/ci/radxa-dragon-q6a-minimal-image.yml to build the image.

whinlatter should be removed when the build with master branch of meta-qcom succeeds.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

Thanks for the contribution, we will need to break this down in a series of patches in order to get this merged, please split the changes into logical chunks, like adding the machine conf, kas files, kernel changes etc.

For the kernel we might just need a fragment for your hardware (or missing features).

We will need to get this working with master in order to be able to merge.

@navinreddy23
Copy link
Copy Markdown
Contributor Author

Hi @ricardosalveti,

Thank you for the review.

How shall we split into chunks?

  • By dropping the changes and add one after another?
  • Or By requesting separate PR's from feature branches?

@quaresmajose
Copy link
Copy Markdown
Contributor

Pleae use the same PR and force psuh to the same branch with git push -f.

By dropping the changes and add one after another?

That right, start from the begining and you will add everything again but in small chunks. In the end you will have the same code but spread in more commits. Take this #16 as reference.

@navinreddy23
Copy link
Copy Markdown
Contributor Author

@quaresmajose @ricardosalveti

Thank you for the feedback! I have pushed the changes and verified the build with qcom-minimal-image.

Please let me know if any modifications are needed.


FILES:${PN} = "${nonarch_base_libdir}/firmware/qcom/qcs6490/radxa/dragon-q6a"

RDEPENDS:${PN} = "packagegroup-rb3gen2-hexagon-dsp-binaries" No newline at end of file
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.

There is a separate set of Hexagon packages for Radxa Q6A

Comment thread recipes-bsp/firmware/radxa-dragon-q6a-firmware-symlinks.bb Outdated
Comment thread ci/radxa-dragon-q6a-minimal-image.yml Outdated
systemd-networkd \
btop \
"
BAD_RECOMMENDATIONS:remove = "systemd-networkd" No newline at end of file
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? It's not mentioned in the commit message.

Comment thread ci/radxa-dragon-q6a-minimal-image.yml Outdated
dropbear \
openssh-sftp-server \
systemd-networkd \
btop \
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.

Could you please sort the lists? It would make it easier to extend them later.

Comment thread conf/machine/radxa-dragon-q6a.conf Outdated

require conf/machine/include/qcom-qcs6490.inc

MACHINE_FEATURES += "efi pci wifi bluetooth"
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.

"wifi" and "bluetooth" are already set in qcom-common.inc.

Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
packagegroup-qcom-boot-essential \
packagegroup-machine-essential-qcom-qcs6490-soc \
packagegroup-rb3gen2-firmware \
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.

Please add Radxa-specific packagegroups using firmware and DSP binaries for Q6A.

@navinreddy23
Copy link
Copy Markdown
Contributor Author

@lumag

Thank you for your feedback, I have made all the changes you have suggested and tested the build locally.

Comment thread ci/radxa-dragon-q6a-minimal-image.yml Outdated
Comment thread recipes-bsp/packagegroups/packagegroup-radxa-dragon-q6a.bb
Comment thread ci/radxa-dragon-q6a.yml
FILESEXTRAPATHS:prepend:radxa-dragon-q6a := "${THISDIR}/radxa-dragon-q6a:"

SRC_URI:append:radxa-dragon-q6a = " \
file://realtek-eth-8169.cfg \
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.

Here you will probably only need the realtek-eth-8169.cfg.

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.

How are the other two configs applied? Or are they applied by default?

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 other two are present in defconfig.

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.

In linux-qcom-next these configs are available as part of the tree, see https://github.com/qualcomm-linux/kernel/tree/qcom-next/arch/arm64/configs

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.

Is the defconfig generic to arm64, qcom or the SoC?

Copy link
Copy Markdown
Collaborator

@ricardosalveti ricardosalveti Apr 23, 2026

Choose a reason for hiding this comment

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

defconfig is generic to arm64, but here we also have an additional qcom.config that is specific to add additional qcom related drivers and hardware.

This additional config is enabled via KBUILD_CONFIG_EXTRA:append:aarch64 = " ${S}/arch/arm64/configs/qcom.config" in linux-qcom-next.

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.

We would then still need qcom-qcm6490.cfg, right?

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.

They are all in defconfig there:

rsalveti@evatuf:~/projects/kernel/linux/arch/arm64/configs$ grep 7280 *
defconfig:CONFIG_PINCTRL_SC7280=y
defconfig:CONFIG_PINCTRL_SC7280_LPASS_LPI=m
defconfig:CONFIG_SND_SOC_SC7280=m
defconfig:CONFIG_SC_CAMCC_7280=m
defconfig:CONFIG_SC_DISPCC_7280=m
defconfig:CONFIG_SC_GCC_7280=y
defconfig:CONFIG_SC_GPUCC_7280=m
defconfig:CONFIG_SC_LPASS_CORECC_7280=m
defconfig:CONFIG_SC_VIDEOCC_7280=m
defconfig:CONFIG_INTERCONNECT_QCOM_SC7280=y
rsalveti@evatuf:~/projects/kernel/linux/arch/arm64/configs$ grep QCOM_USB *
defconfig:CONFIG_REGULATOR_QCOM_USB_VBUS=m
defconfig:CONFIG_PHY_QCOM_USB_HS=m
defconfig:CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=m
defconfig:CONFIG_PHY_QCOM_USB_HS_28NM=m
defconfig:CONFIG_PHY_QCOM_USB_SS=m
rsalveti@evatuf:~/projects/kernel/linux/arch/arm64/configs$ grep USB_DWC3 *
defconfig:CONFIG_USB_DWC3=y

So not required.

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.

Nice, got it.

I had to remove it when I initially tested with the mainline kernel.

KBUILD_CONFIG_EXTRA:remove:aarch64 = " ${S}/arch/arm64/configs/prune.config"
KBUILD_CONFIG_EXTRA:remove:aarch64 = " ${S}/arch/arm64/configs/qcom.config"

@navinreddy23 navinreddy23 force-pushed the main branch 2 times, most recently from 38ae845 to 7ebe39b Compare April 23, 2026 14:58
Comment thread recipes-bsp/packagegroups/packagegroup-radxa-dragon-q6a.bb Outdated
Comment thread recipes-kernel/linux/linux-qcom-next_git.bbappend Outdated
Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
Comment thread conf/machine/radxa-dragon-q6a.conf
Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
Comment thread conf/machine/radxa-dragon-q6a.conf Outdated
Comment thread ci/radxa-dragon-q6a.yml Outdated
Comment thread ci/radxa-dragon-q6a.yml
@ricardosalveti
Copy link
Copy Markdown
Collaborator

Looking better, can you please add a commit message (with body, not just subject) to every commit you have, justifying the change?

Add board-specific packagegroup for the Radxa Dragon Q6A.

Firmware packages:
- GPU: Adreno A660 (conditional on opencl/opengl/vulkan)
- HDMI bridge: Lontium LT9611UXC
- Audio DSP: qcs6490-radxa-dragon-q6a-audio
- Compute DSP: qcs6490-radxa-dragon-q6a-compute
- QUP serial engine: qcm6490-qupv3fw
- Camera ISP: camxfirmware-kodiak
- Video encoder/decoder: VPU

Hexagon DSP binaries:
- ADSP: hexagon-dsp-binaries-radxa-dragon-q6a-adsp
- CDSP: hexagon-dsp-binaries-radxa-dragon-q6a-cdsp

These use board-specific firmware paths under
qcom/qcs6490/radxa/dragon-q6a/ as the UEFI patches the device tree
at boot to redirect firmware loading to these paths.

Signed-off-by: Navin Reddy <navinreddy23@gmail.com>
Add kernel config fragment and bbappend for the Radxa Dragon Q6A.

The Realtek RTL8168 ethernet controller is connected via PCIe and
requires CONFIG_R8169 and related PHY/MDIO configs to be enabled.
The fragment is applied only for the radxa-dragon-q6a machine via
the FILESEXTRAPATHS and SRC_URI machine overrides.

Signed-off-by: Navin Reddy <navinreddy23@gmail.com>
Add machine configuration for the Radxa Dragon Q6A (QCS6490).

The Dragon Q6A uses a split boot model where firmware lives on SPI
NOR and the OS on SD/NVMe/UFS. All boot firmware variables are
blanked as the SPI NOR contents are managed by Radxa independently.
As Radxa provides the firmware binaries and the edl-ng tool supports
SPI NOR flashing, qcomflash integration could be added in the future
to produce a single flashable package for both firmware and OS.

The image is produced as a GPT disk image with an EFI System
Partition (systemd-boot + UKI) and an ext4 rootfs using the standard
efi-uki-bootdisk WKS template.

Key configuration decisions:
- KERNEL_DEVICETREE set to the mainline DTS (merged in Linux 6.19)
- PREFERRED_PROVIDER_virtual/kernel set to linux-qcom-next
- EFI_PROVIDER is systemd-boot (from qcom-common.inc)
- No U-Boot, no FIT image, no qcomflash partition layout
- Firmware packagegroups use board-specific Radxa packages instead
  of the RB3gen2 equivalents

Signed-off-by: Navin Reddy <navinreddy23@gmail.com>
Add KAS build configuration for the Radxa Dragon Q6A. Includes the
base configuration from ci/base.yml which provides layer setup,
mirrors, and build settings.

The machine is set to radxa-dragon-q6a, matching the machine
configuration added in the previous commit. Additional KAS fragments
for distro, image targets, and kernel providers can be chained on
the command line. For example:

  kas build meta-qcom-3rdparty/ci/radxa-dragon-q6a.yml:\
    meta-qcom-3rdparty/ci/qcom-distro.yml:\
    meta-qcom-3rdparty/ci/radxa-dragon-q6a-minimal-image.yml

The minimal-image fragment is kept out of the repo as it contains
user-specific settings (passwords, extra packages, local overrides)
and is not covered by CI.

Signed-off-by: Navin Reddy <navinreddy23@gmail.com>
Add radxa-dragon-q6a to the CI build matrix.

Signed-off-by: Navin Reddy <navinreddy23@gmail.com>
@navinreddy23
Copy link
Copy Markdown
Contributor Author

@ricardosalveti
I have added the description to the body of the commits.
Please let me know if there are additional changes. I shall test this build tomorrow and verify again.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

@ricardosalveti I have added the description to the body of the commits. Please let me know if there are additional changes. I shall test this build tomorrow and verify again.

Thanks, approved for CI, now we wait :-)

@navinreddy23
Copy link
Copy Markdown
Contributor Author

@ricardosalveti I have added the description to the body of the commits. Please let me know if there are additional changes. I shall test this build tomorrow and verify again.

Thanks, approved for CI, now we wait :-)

Exciting! Thank you for the feedback, it's been fun to work on this PR.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

Problem: package packagegroup-radxa-dragon-q6a-hexagon-dsp-binaries-1.0-r0.noarch from oe-repo requires hexagon-dsp-binaries-radxa-dragon-q6a-cdsp, but none of the providers can be installed\n', ' - conflicting requests\n', ' - nothing provides libc++.so.1 needed by hexagon-dsp-binaries-radxa-dragon-q6a-cdsp-20260309-r0.noarch from oe-repo\n', ' - nothing provides libc++abi.so.1 needed by hexagon-dsp-binaries-radxa-dragon-q6a-cdsp-20260309-r0.noarch from oe-repo\n', ' -

We will need something similar to qualcomm-linux/meta-qcom@3fe8ee9, but for ${PN}-radxa-dragon-q6a-adsp and ${PN}-radxa-dragon-q6a-cdsp.

You can fix via a local bbappend to unblock the build here, but please send this change to meta-qcom as well.

@navinreddy23
Copy link
Copy Markdown
Contributor Author

@ricardosalveti I have added the description to the body of the commits. Please let me know if there are additional changes. I shall test this build tomorrow and verify again.

@ricardosalveti I have tested the build with the changes and it works. Something I noticed is that the boot times are much longer.
default_vs_applied.txt

I have compared the configs after boot and looks like some of the modules are "y" when the default config is used. When we include the configs in the meta layer, then most of them are "m" modules.

Although it does not affect the functionality, it would be nice to boot as fast as possible :)

@navinreddy23
Copy link
Copy Markdown
Contributor Author

navinreddy23 commented Apr 24, 2026

@ricardosalveti
I have added a new commit with bbappend to make the CI build pass.
Could you please review?

I have also made PR for the above message.
qualcomm-linux/meta-qcom#2038

@ricardosalveti
Copy link
Copy Markdown
Collaborator

You can drop the bbappend now that the change was merged in meta-qcom.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

I have compared the configs after boot and looks like some of the modules are "y" when the default config is used. When we include the configs in the meta layer, then most of them are "m" modules.

Although it does not affect the functionality, it would be nice to boot as fast as possible :)

Hm, unclear from the diff, can you try to change the config until you get the fast behavior so we can isolate the config responsible for this different behavior? Then we can even propose to qcom.config.

@navinreddy23
Copy link
Copy Markdown
Contributor Author

Hm, unclear from the diff, can you try to change the config until you get the fast behavior so we can isolate the config responsible for this different behavior? Then we can even propose to qcom.config.

Shall we do this as another PR? I do not have access to the device until Tuesday.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

Shall we do this as another PR? I do not have access to the device until Tuesday.

That can be done at a follow up.

Both images built fine now.

@ricardosalveti
Copy link
Copy Markdown
Collaborator

Failures are uno-q specific, not related to this PR.

@@ -0,0 +1,10 @@
CONFIG_NET_SELFTESTS=y
CONFIG_R8169=y
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've created a PR to stop disabling R8169 (REALTEK_PHY is already removed from prune.config). Once those are merged and reach qcom-next, we should be able to drop this .config fragment (note: they are still going to be enabled as modules).

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.

... and once corresponding qcom-next lands in meta-qcom...

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.

That should be okay if the driver is available as module for Dragon Q6A as the Ethernet is connected via PCIe bus.

Comment thread conf/machine/radxa-dragon-q6a.conf
Comment thread conf/machine/radxa-dragon-q6a.conf
Copy link
Copy Markdown
Contributor

@quaresmajose quaresmajose left a comment

Choose a reason for hiding this comment

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

LGTM, thank you very much for your contribution.

@lumag lumag merged commit 087cc40 into qualcomm-linux:main Apr 27, 2026
31 of 35 checks passed
@navinreddy23
Copy link
Copy Markdown
Contributor Author

Thank you all for the review and feedback!

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