Skip to content

media: iris: add context bank support via iommu-map for lemans and hamoa#452

Open
gouravk-qualcomm wants to merge 7 commits intoqualcomm-linux:qcom-6.18.yfrom
gouravk-qualcomm:cb-iris-dt
Open

media: iris: add context bank support via iommu-map for lemans and hamoa#452
gouravk-qualcomm wants to merge 7 commits intoqualcomm-linux:qcom-6.18.yfrom
gouravk-qualcomm:cb-iris-dt

Conversation

@gouravk-qualcomm
Copy link
Copy Markdown

@gouravk-qualcomm gouravk-qualcomm commented Apr 10, 2026

This series adds context bank support to the Qualcomm iris video codec driver
by migrating from the legacy 'iommus' DT property to 'iommu-map', enabling
per-context-bank IOMMU domain management across multiple platforms.

Driver changes (media: iris):

  • Enable sm8550 context banks via init_cb_devs
  • Add context bank devices using iommu-map
  • Add helper to select context bank device
  • Add sm8550 iris context bank function IDs to dt-bindings

DT changes (arm64: dts: qcom):

  • lemans (sa8775p): switch iris iommus to iommu-map using
    IRIS_NON_PIXEL_VCODEC and IRIS_PIXEL function IDs
  • lemans-ride: Drop video firmware from common
  • hamoa: switch iris iommus to iommu-map using IRIS_NON_PIXEL_VCODEC
    and IRIS_PIXEL function IDs

Exception JIRA: https://jira-dc.qualcomm.com/jira/browse/QLIJIRA-115
CRs-Fixed: 4496236
Depends-on: #445

@gouravk-qualcomm gouravk-qualcomm requested a review from a team April 10, 2026 18:48
@shashim-quic
Copy link
Copy Markdown

Exception JIRA: https://jira-dc.qualcomm.com/jira/browse/QLIJIRA-115

Product requirement warranting exception. Approved.

@qcomlnxci
Copy link
Copy Markdown

Test Matrix

Test Case lemans-evk monaco-evk qcs615-ride qcs6490-rb3gen2 qcs8300-ride qcs9100-ride-r3 sm8750-mtp x1e80100-crd
BT_FW_KMD_Service ❌ Fail ❌ Fail ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
BT_ON_OFF ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
BT_SCAN ❌ Fail ❌ Fail ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
CPUFreq_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
CPU_affinity ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
DSP_AudioPD ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Ethernet ✅ Pass ✅ Pass ⚠️ skip ⚠️ skip ✅ Pass ⚠️ skip ◻️ ◻️
Freq_Scaling ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
GIC ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
IPA ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Interrupts ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
OpenCV ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ◻️
PCIe ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Probe_Failure_Check ❌ Fail ❌ Fail ✅ Pass ❌ Fail ❌ Fail ❌ Fail ◻️ ◻️
RMNET ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
UFS_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
USBHost ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ✅ Pass ◻️ ◻️
WiFi_Firmware_Driver ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ◻️
WiFi_OnOff ✅ Pass ⚠️ skip ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
cdsp_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
hotplug ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
irq ❌ Fail ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
kaslr ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
pinctrl ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
qcom_hwrng ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
rngtest ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
shmbridge ✅ Pass ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
smmu ✅ Pass ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
watchdog ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
wpss_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️

@qcomlnxci
Copy link
Copy Markdown

Test Matrix

Test Case lemans-evk monaco-evk qcs615-ride qcs6490-rb3gen2 qcs8300-ride qcs9100-ride-r3 sm8750-mtp x1e80100-crd
BT_FW_KMD_Service ❌ Fail ❌ Fail ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
BT_ON_OFF ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
BT_SCAN ❌ Fail ❌ Fail ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
CPUFreq_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
CPU_affinity ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
DSP_AudioPD ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Ethernet ✅ Pass ✅ Pass ⚠️ skip ⚠️ skip ✅ Pass ⚠️ skip ◻️ ◻️
Freq_Scaling ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
GIC ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
IPA ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Interrupts ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
OpenCV ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ◻️
PCIe ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Probe_Failure_Check ❌ Fail ❌ Fail ✅ Pass ❌ Fail ❌ Fail ❌ Fail ◻️ ◻️
RMNET ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
UFS_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
USBHost ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ✅ Pass ◻️ ◻️
WiFi_Firmware_Driver ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ◻️
WiFi_OnOff ✅ Pass ⚠️ skip ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
cdsp_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
hotplug ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
irq ❌ Fail ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
kaslr ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
pinctrl ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
qcom_hwrng ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
rngtest ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
shmbridge ✅ Pass ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
smmu ✅ Pass ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ◻️
watchdog ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
wpss_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️

Copy link
Copy Markdown
Contributor

@sgaud-quic sgaud-quic left a comment

Choose a reason for hiding this comment

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

As dependency PR is merged, please rebase the PR on tip.

Also check one of the test case (irg) is failing on RB8 device :
https://lava-oss.qualcomm.com/scheduler/job/71633#results_4207

+ /lava-71633/0/tests/0_qcom-next-ci-premerge-tests/Runner/suites/Kernel/Baseport/irq/run.sh
[INFO] 2026-04-11 08:33:21 - -----------------------------------------------------------------------------------------
[INFO] 2026-04-11 08:33:21 - -------------------Starting irq Testcase----------------------------
[INFO] 2026-04-11 08:33:21 - === Test Initialization ===
[INFO] 2026-04-11 08:33:21 - Initial timer count:
[INFO] 2026-04-11 08:33:21 -  11:       4239       4405       4949       3403       2198       3291       3063       2286    GICv3  27 Level     arch_timer
[INFO] 2026-04-11 08:33:41 - Timer count after 20 secs:
[INFO] 2026-04-11 08:33:41 -  11:       4357       4409       5245       3411       2198       3298       3436       2293    GICv3  27 Level     arch_timer
[INFO] 2026-04-11 08:33:41 - Comparing timer counts:
[INFO] 2026-04-11 08:33:41 - Detected timer counters: initial=8 final=8
[PASS] 2026-04-11 08:33:41 - CPU 0: Timer count has incremented. Test PASSED
[PASS] 2026-04-11 08:33:41 - CPU 1: Timer count has incremented. Test PASSED
[PASS] 2026-04-11 08:33:41 - CPU 2: Timer count has incremented. Test PASSED
[PASS] 2026-04-11 08:33:41 - CPU 3: Timer count has incremented. Test PASSED
[FAIL] 2026-04-11 08:33:41 - CPU 4: Timer count has not incremented. Test FAILED
[PASS] 2026-04-11 08:33:41 - CPU 5: Timer count has incremented. Test PASSED
[PASS] 2026-04-11 08:33:41 - CPU 6: Timer count has incremented. Test PASSED
[PASS] 2026-04-11 08:33:41 - CPU 7: Timer count has incremented. Test PASSED
+ true
+ /lava-71633/0/tests/0_qcom-next-ci-premerge-tests/Runner/utils/send-to-lava.sh /lava-71633/0/tests/0_qcom-next-ci-premerge-tests/Runner/suites/Kernel/Baseport/irq/irq.res
<<<LAVA_SIGNAL_TESTCASE TEST_CASE_ID=irq RESULT=FAIL>>>

Vishnu Reddy and others added 7 commits April 11, 2026 21:56
Wire up sm8550_init_cb_devs() in iris_platform_gen2.c to register the
two child context-bank devices (iris_non_pixel and iris_pixel)
using iris_create_cb_dev(), and hook it into the sm8550_data platform
data via the .init_cb_devs callback.

Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Signed-off-by: Gourav Kumar <gouravk@qti.qualcomm.com>
Different stream IDs from VPU would be associated to one of these CB.
Multiple CBs are needed to increase the IOVA for the video usecases
like higher concurrent sessions.

Co-developed-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Depending on the buffer type (input, output and internal), associated
context bank is selected, if available. Fallback to parent device for
backward compatibility.

Co-developed-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
…ion IDs

Add a dt-bindings header include/dt-bindings/media/qcom,sm8550-iris.h
defining IRIS_NON_PIXEL_VCODEC (0) and IRIS_PIXEL (1) function IDs
used to identify the non-pixel and pixel context bank SMMU stream
mappings via iommu-map.

Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Signed-off-by: Gourav Kumar <gouravk@qti.qualcomm.com>
Switch the iris video codec node in sa8775p (lemans) from the legacy
'iommus' property to 'iommu-map', using IRIS_NON_PIXEL_VCODEC and
IRIS_PIXEL function IDs to identify the non-pixel and pixel context
bank SMMU stream mappings respectively.

Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Signed-off-by: Gourav Kumar <gouravk@qti.qualcomm.com>
As per memory map, video firmware memory region is 7MB for sa8775*
variants while it is 16MB for qcs9100* variants. Keeping the 7MB variant
of video firmware in ride common DTS does not allow qcs9100* to pick the
16MB variant. Drop it from common and define in respective variant DTS.

Signed-off-by: Gourav Kumar <gouravk@qti.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Signed-off-by: Venkata Siva Pavan KumarVenkatapatigari <venvenk@qti.qualcomm.com>
Switch the iris video codec node in hamoa from the legacy 'iommus'
property to 'iommu-map', using IRIS_NON_PIXEL_VCODEC and IRIS_PIXEL
function IDs to identify the non-pixel and pixel context bank SMMU
stream mappings respectively.

Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Signed-off-by: Gourav Kumar <gouravk@qti.qualcomm.com>
@qcomlnxci qcomlnxci requested a review from a team April 11, 2026 16:29
@gouravk-qualcomm
Copy link
Copy Markdown
Author

As dependency PR is merged, please rebase the PR on tip.

@sgaud-quic Done, rebased cleanly on the latest tip.

@gouravk-qualcomm
Copy link
Copy Markdown
Author

As dependency PR is merged, please rebase the PR on tip.

@shashim-quic Please re-approve.

@qcomlnxci
Copy link
Copy Markdown

Test Matrix

Test Case lemans-evk monaco-evk qcs615-ride qcs6490-rb3gen2 qcs8300-ride qcs9100-ride-r3 sm8750-mtp x1e80100-crd
BT_FW_KMD_Service ❌ Fail ❌ Fail ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
BT_ON_OFF ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
BT_SCAN ❌ Fail ❌ Fail ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
CPUFreq_Validation ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
CPU_affinity ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
DSP_AudioPD ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
Ethernet ✅ Pass ✅ Pass ◻️ ◻️ ⚠️ skip ◻️ ◻️ ◻️
Freq_Scaling ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
GIC ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
IPA ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
Interrupts ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
OpenCV ⚠️ skip ⚠️ skip ◻️ ◻️ ⚠️ skip ◻️ ◻️ ◻️
PCIe ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
Probe_Failure_Check ❌ Fail ❌ Fail ◻️ ◻️ ❌ Fail ◻️ ◻️ ◻️
RMNET ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
UFS_Validation ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
USBHost ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
WiFi_Firmware_Driver ⚠️ skip ⚠️ skip ◻️ ◻️ ⚠️ skip ◻️ ◻️ ◻️
WiFi_OnOff ✅ Pass ⚠️ skip ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
cdsp_remoteproc ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
hotplug ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
irq ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
kaslr ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
pinctrl ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
qcom_hwrng ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
remoteproc ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
rngtest ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
shmbridge ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
smmu ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
watchdog ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️
wpss_remoteproc ✅ Pass ✅ Pass ◻️ ◻️ ✅ Pass ◻️ ◻️ ◻️

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.

5 participants