Skip to content

Support builds for both UFS and NVMe on IQ-X7181#1453

Closed
shoudil wants to merge 2 commits intoqualcomm-linux:masterfrom
shoudil:hamoa-ufs-nvme-build
Closed

Support builds for both UFS and NVMe on IQ-X7181#1453
shoudil wants to merge 2 commits intoqualcomm-linux:masterfrom
shoudil:hamoa-ufs-nvme-build

Conversation

@shoudil
Copy link
Copy Markdown
Contributor

@shoudil shoudil commented Jan 29, 2026

On Hamoa IoT EVK device, both UFS and NVMe storage are supported. To generate both UFS and NVMe builds together in image folder, Add flags to control the partition bins/xml files deployment for both NVMe and UFS in image folder. These partition files under subfolder can be combined with HLOS images in root folder to construct flashable builds as per need.

Copy link
Copy Markdown
Contributor

@lumag lumag left a comment

Choose a reason for hiding this comment

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

Describe why the change is necessary. I would have expected that the root folder contains partition and image files for the main storage (e.g. NVMe in this case).

@test-reporting-app
Copy link
Copy Markdown

test-reporting-app Bot commented Jan 29, 2026

Test Results

 28 files   -    18   28 suites   - 139   1h 45m 7s ⏱️ - 27m 42s
 13 tests  -    34    9 ✅  -    37  0 💤 ±0  4 ❌ +3 
245 runs   - 1 344  241 ✅  - 1 339  0 💤  - 7  4 ❌ +2 

For more details on these failures, see this check.

Results for commit 55c9703. ± Comparison against base commit d7f8538.

This pull request removes 36 and adds 2 tests. Note that renamed tests count towards both.
0_BT_FW_KMD_Service ‑ BT_FW_KMD_Service
0_hotplug ‑ hotplug
10_AudioRecord ‑ AudioRecord
11_DSP_AudioPD ‑ DSP_AudioPD
11_Ethernet ‑ Ethernet
12_DSP_AudioPD ‑ DSP_AudioPD
1_BT_SCAN ‑ BT_SCAN
1_CPUFreq_Validation ‑ CPUFreq_Validation
2_Interrupts ‑ Interrupts
3_cdsp_remoteproc ‑ cdsp_remoteproc
…
lava ‑ auto-login-action
lava ‑ minimal-boot

♻️ This comment has been updated with latest results.

@shoudil
Copy link
Copy Markdown
Contributor Author

shoudil commented Jan 30, 2026

Describe why the change is necessary. I would have expected that the root folder contains partition and image files for the main storage (e.g. NVMe in this case).

I will rebase this PR on #1422, in which UFS build is supported by default.

@shoudil shoudil force-pushed the hamoa-ufs-nvme-build branch from 8ec40ab to b0b7e75 Compare January 30, 2026 03:36
@shoudil shoudil changed the title image_types_qcom: add support to deploy partition files for NVMe Add support to deploy partition files for NVMe Jan 30, 2026
@shoudil shoudil changed the title Add support to deploy partition files for NVMe Support builds for both UFS and NVMe on IQ-X7181 Jan 30, 2026
@@ -18,6 +18,7 @@ QCOM_DTB_FILE ?= "dtb.bin"
QCOM_BOOT_FILES_SUBDIR ?= ""
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.

Instructions to create NVMe flat build:

No need to. Please instead describe, why this is necessary. Your commits should start with the description of the issue or the problem.

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 your commit message is still not fixed.

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.

Updated in a07975d

QCOM_CDT_FILE = "IQ_X_EVK_CDT"
QCOM_BOOT_FILES_SUBDIR = "iq-x7181"
QCOM_PARTITION_FILES_SUBDIR ?= "partitions/iq-x7181-evk/ufs"
QCOM_PARTITION_FILES_SUBDIR_NVME ?= "partitions/iq-x7181-evk/nvme"
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.

Likewise. I can see your changes. Why are they performed?

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.

Hi @lumag,

We want to support both UFS and NVMe build together in image folder, like this:

UFS: HLOS flat build for UFS in root folder
NVMe: partition bins/xml placed under nvme subfolder, which can be combined with HLOS image in root folder to construct a flat build for NVMe.
Spinor: in spinor subfolder, included non-hlos images and spinor part bins/xml.

/iq-x7181-evk/qcom-multimedia-proprietary-image-iq-x7181-evk.rootfs-20260129045123.qcomflash$ tree -L 2
.
|-- efi.bin
|-- gpt_backup0.bin
|-- gpt_both0.bin
|-- gpt_main0.bin
|-- nvme
| |-- efi.bin
| |-- gpt_backup0.bin
| |-- gpt_both0.bin
| |-- gpt_main0.bin
| |-- patch0.xml
| |-- qdl
| |-- rawprogram0.xml
| |-- rootfs.img
| |-- xbl_s_devprg_ns.melf
| |-- zeros_1sector.bin
| `-- zeros_33sectors.bin

|-- patch0.xml
|-- rawprogram0.xml
|-- rootfs.img
|-- spinor
| |-- adsp_dtbs.elf

| |-- adsp_lite.lzma
| |-- aop_devcfg.mbn
| |-- aop.mbn
| |-- cdt.bin
| |-- contents.xml
| |-- cpucp_dtbs.elf
| |-- cpucp.elf
| |-- devcfg_iot.mbn

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.

Hi @lumag,

We want to support both UFS and NVMe build together in image folder, like this:

It should be explained in the commit messages.

UFS: HLOS flat build for UFS in root folder NVMe: partition bins/xml placed under nvme subfolder, which can be combined with HLOS image in root folder to construct a flat build for NVMe. Spinor: in spinor subfolder, included non-hlos images and spinor part bins/xml.

What is the reason for asymmetry: UFS is the root folder, while NVMe is in the subfolder?

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.

As per current design, only one build could be supported in root folder, here we support UFS by default. For nmve subfolder we put the nvme partition files (part of the NVMe build to be constructed). We don't need ufs subfolder to place ufs partition files as they are present in root folder already.

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 create asymmetry. From my PoV we should either have two (three, four, etc.) subfolders, one for each storage type, or have multiple machines (I'm not sure about this one, but older machines were not using SPI NOR when booting from UFS).

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.

Having subfolder for both cases here would probably make more sense, if the artifacts are indeed common to both.

Copy link
Copy Markdown
Contributor Author

@shoudil shoudil Feb 4, 2026

Choose a reason for hiding this comment

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

Updated in commit d63ba16 9339632

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 update the commit message, explaining the reasons for the change rather than the patch itself.

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.

Updated in 55c9703

@github-actions
Copy link
Copy Markdown

Test run workflow

Test jobs for commit b0b7e75

Test dragonboard-410c dragonboard-820c qcs6490 qcs8300 qcs9100 qcs9100-rb8 qrb2210-rb1
BT_ON_OFF 🚫 🚫 pass pass pass ⚠️ skip pass
CPUFreq_Validation 🚫 🚫 pass pass pass pass pass
Interrupts 🚫 🚫 pass pass pass pass pass
OpenCV 🚫 🚫 pass pass pass pass pass
WiFi_Firmware_Driver 🚫 🚫 pass pass pass pass pass
WiFi_OnOff 🚫 🚫 pass pass pass ⚠️ skip pass
adsp_remoteproc 🚫 🚫 pass pass pass pass pass
boot pass pass pass pass pass pass pass
cdsp_remoteproc 🚫 🚫 pass 🚫 pass pass ⚠️ skip
hotplug 🚫 🚫 pass pass pass pass pass
irq 🚫 🚫 pass pass pass pass pass

All jobs summary

Job ID Device State Health
136679 qrb2210-rb1 Finished Complete
136697 qrb2210-rb1 Finished Complete
136677 qcs6490 Finished Complete
136682 dragonboard-820c Finished Complete
136678 qcs9100 Finished Complete
136681 qcs9100 Finished Complete
136676 qcs9100-rb8 Finished Complete
136686 qcs9100-rb8 Finished Complete
136687 qrb2210-rb1 Finished Complete
136698 qcs8300 Finished Complete
136685 qcs6490 Finished Complete
136695 qcs9100-rb8 Finished Complete
136696 qcs9100 Finished Complete
136675 qcs8300 Finished Complete
136680 dragonboard-410c Finished Complete
136688 qcs8300 Finished Complete
136684 dragonboard-820c Finished Complete
136694 qcs6490 Finished Complete
136683 dragonboard-410c Finished Complete

@shoudil shoudil force-pushed the hamoa-ufs-nvme-build branch from b0b7e75 to 9339632 Compare February 4, 2026 02:52
Comment thread classes-recipe/image_types_qcom.bbclass Outdated
install -d ufs
deploy_partition_files ${DEPLOY_DIR_IMAGE}/${QCOM_PARTITION_FILES_SUBDIR_UFS} ufs
fi

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 code tied to the presense of the SPI NOR? What about devices which support UFS and eMMC, but they don't have SPI-NOR?

Copy link
Copy Markdown
Contributor Author

@shoudil shoudil Feb 10, 2026

Choose a reason for hiding this comment

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

Initial intention here is to support both builds for Hamoa (may be applicable for Purwa/Glymur as well) as spinor exist and only two hlos images (efi/rootfs) in root folder. I am fine to generalize the design, but may not able to verify on all boards (some boards are not available), platform PoC of targets can decide whether to specify flags in machine conf and validate by themselves.

QCOM_CDT_FILE = "IQ_X_EVK_CDT"
QCOM_BOOT_FILES_SUBDIR = "iq-x7181"
QCOM_PARTITION_FILES_SUBDIR ?= "partitions/iq-x7181-evk/ufs"
QCOM_PARTITION_FILES_SUBDIR_NVME ?= "partitions/iq-x7181-evk/nvme"
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 update the commit message, explaining the reasons for the change rather than the patch itself.

@shoudil shoudil force-pushed the hamoa-ufs-nvme-build branch from 9339632 to 600c521 Compare February 10, 2026 04:26
…rages

For targets with more than one storage type supported on single board,
add support to deploy partition files for different storages in image
folder. These partition files under subfolder can be used to create
flashable builds as per need.

Signed-off-by: Shoudi Li <shoudil@qti.qualcomm.com>
Create subfolder under image folder to place partition files for NVMe
and UFS storage, which can be used to create flashable builds.

Signed-off-by: Shoudi Li <shoudil@qti.qualcomm.com>
@shoudil shoudil force-pushed the hamoa-ufs-nvme-build branch from 600c521 to 55c9703 Compare February 10, 2026 04:30
@github-actions
Copy link
Copy Markdown

Test run workflow

Test jobs for commit 55c9703

Test dragonboard-410c dragonboard-820c qcs6490 qcs8300 qcs9100 qcs9100-rb8 qrb2210-rb1
boot pass pass pass pass pass pass pass

All jobs summary

Job ID Device State Health
140502 qcs9100-rb8 Finished Complete
140501 qcs6490 Finished Complete
140504 qcs8300 Finished Complete
140509 qrb2210-rb1 Finished Complete
140505 qcs9100 Finished Complete
140516 qcs6490 Finished Complete
140518 qcs8300 Finished Complete
140510 qcs9100-rb8 Finished Complete
140512 dragonboard-820c Finished Complete
140492 qrb2210-rb1 Finished Complete
140496 qcs8300 Finished Complete
140506 dragonboard-410c Finished Complete
140519 qcs6490 Finished Complete
140500 qcs8300 Finished Complete
140508 qcs9100 Finished Complete
140507 dragonboard-410c Finished Complete
140493 qrb2210-rb1 Finished Complete
140495 dragonboard-820c Finished Complete
140511 dragonboard-410c Finished Complete
140514 dragonboard-820c Finished Complete
140499 qcs6490 Finished Complete
140513 qcs9100 Finished Complete
140497 dragonboard-820c Finished Complete
140503 qrb2210-rb1 Finished Complete
140494 qcs9100 Finished Complete
140498 qcs9100-rb8 Finished Complete
140515 qcs9100-rb8 Finished Incomplete
140517 dragonboard-410c Finished Complete


# partition bins/xml files
# partition bins/xml files for supported build by default
if [ -n "${QCOM_PARTITION_FILES_SUBDIR}" ]; then
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.

Should we drop QCOM_PARTITION_FILES_SUBDIR and always use one of NVME / UFS variants?

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.

I think we need to keep this configurable (in machine conf) as different storage will be supported with priority across targets, especially on early BU stage.

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.

Exactly! Supporting different storage means supporting both eMMC and UFS or UFS and NVME deployments.

@github-actions
Copy link
Copy Markdown

This pull request has been marked as stale due to 30 days of inactivity. To prevent automatic closure in 5 days, remove the stale label or add a comment. You can reopen a closed pull request at any time.

@github-actions github-actions Bot added the Stale label Mar 13, 2026
@github-actions github-actions Bot closed this Mar 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants