Hi Mukesh, On 10/01/2025 07:56, Mukesh Kumar Savaliya wrote: > Thanks Caleb for your testing and sharing results. Since Viken is on > leave, i am following on this. > > On 1/7/2025 4:55 PM, Caleb Connolly wrote: >> Hi Viken, >> >> On 04/12/2024 16:03, Viken Dadhaniya wrote: >>> In Qualcomm SoCs, firmware loading for Serial Engines (SE) in the QUP >>> hardware has traditionally been managed by TrustZone (TZ). This setup >>> handled Serial Engines(SE) assignments and access control permissions, >>> ensuring a high level of security but limiting flexibility and >>> accessibility. >>> This limitation poses a significant challenge for developers who >>> need more >>> flexibility to enable any protocol on any of the SEs within the QUP >>> hardware. >>> To address this, we are introducing a change that opens the firmware >>> loading mechanism to the Linux environment. This enhancement increases >>> flexibility and allows for more streamlined and efficient management. We >>> can now handle SE assignments and access control permissions directly >>> within Linux, eliminating the dependency on TZ. >>> We propose an alternative method for firmware loading and SE >>> ownership/transfer mode configuration based on device tree >>> configuration. >>> This method does not rely on other execution environments, making it >>> accessible to all developers. >>> For SEs used prior to the kernel, their firmware will be loaded by the >>> respective image drivers (e.g., Debug UART, Secure or trusted SE). >>> Additionally, the GSI firmware, which is common to all SEs per QUPV3 >>> core, >>> will not be loaded by Linux driver but TZ only. At the kernel level, >>> only >>> the SE protocol driver should load the respective protocol firmware. >> >> I gave this series a spin on the RB3 Gen 2 with U-Boot. >> > Is it possible to try on RB8 board ? Because that's where this support > is enabled. It also needs respective TZ configuration to allow FW > loading from Linux. I don't have access to RB8, so no... This support will also be useful on RB3 Gen 2 for U-Boot support, can the next tz release for this platform include the necessary changes? > > >> After fixing the compilation errors, it seems like there is a consistent >> hard crash (the board freezes and resets) at some point during i2c >> controller init with this series. >> > Can you please share exact repro steps ? We can try locally and check > what's wrong and also review in future how we make it working for U-boot > combination. If it's true that tz changes are needed that would certainly explain the crash. Unfortunately it isn't currently possible to boot QC Linux via U-Boot since the ESP uses a 512 byte sector size on 4k block size UFS which is not supported. If you build an image with a correct ESP (mkfs.vfat -S 4096) then you can boot U-Boot from upstream by following the RB3 Gen 2 documentation https://docs.u-boot.org/en/latest/board/qualcomm/rb3gen2.html You'll also need to apply this patch to fix a boot regression https://lore.kernel.org/u-boot/20250122-qcom-parse-memory-updates-v2-0-98dfcac821d7@xxxxxxxxxxx/ On the Linux/DTS side, apply this series, add the appropriate properties to enable fw loading as-per the dt-bindings added by this series and place the qupv3fw.elf file. Kind regards, >> I noticed a similar issue with this same logic implemented in U-Boot. >> >> Could you clarify which xfer mode is appropriate for the i2c controllers >> on the RB3 Gen 2 and maybe give this a try yourself, or let me know what >> other info you'd need to debug this. >> > Yes, please share the procedure , we will try internally. > is there any DTSI change done as part of your testing ? >> Thanks and kind regards, >>> >>> Viken Dadhaniya (7): >>> dt-bindings: i2c: qcom,i2c-geni: Document DT properties for QUP >>> firmware loading >>> spi: dt-bindings: Document DT properties for QUP firmware loading >>> dt-bindings: serial: Document DT properties for QUP firmware loading >>> soc: qcom: geni-se:: Add support to load QUP SE Firmware via Linux >>> subsystem >>> i2c: qcom-geni: Load i2c qup Firmware from linux side >>> spi: geni-qcom: Load spi qup Firmware from linux side >>> serial: qcom-geni: Load UART qup Firmware from linux side >>> >>> .../bindings/i2c/qcom,i2c-geni-qcom.yaml | 11 + >>> .../serial/qcom,serial-geni-qcom.yaml | 12 + >>> .../bindings/spi/qcom,spi-geni-qcom.yaml | 11 + >>> drivers/i2c/busses/i2c-qcom-geni.c | 11 +- >>> drivers/soc/qcom/qcom-geni-se.c | 445 ++++++++++++++++++ >>> drivers/spi/spi-geni-qcom.c | 7 +- >>> drivers/tty/serial/qcom_geni_serial.c | 7 +- >>> include/linux/soc/qcom/geni-se.h | 17 + >>> include/linux/soc/qcom/qup-fw-load.h | 179 +++++++ >>> 9 files changed, 692 insertions(+), 8 deletions(-) >>> create mode 100644 include/linux/soc/qcom/qup-fw-load.h >>> >> > -- // Caleb (they/them)