On Tue, 21 May 2024 at 13:20, Kalle Valo <kvalo@xxxxxxxxxx> wrote: > > Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> writes: > > > On Tue, 21 May 2024 at 12:52, <neil.armstrong@xxxxxxxxxx> wrote: > >> > >> On 21/05/2024 11:45, Dmitry Baryshkov wrote: > >> > Qualcomm platforms have different sets of the firmware files, which > >> > differ from platform to platform (and from board to board, due to the > >> > embedded signatures). Rather than listing all the firmware files, > >> > including full paths, in the DT, provide a way to determine firmware > >> > path based on the root DT node compatible. > >> > >> Ok this looks quite over-engineered but necessary to handle the legacy, > >> but I really think we should add a way to look for a board-specific path > >> first and fallback to those SoC specific paths. > > > > Again, CONFIG_FW_LOADER_USER_HELPER => delays. > > To me this also looks like very over-engineered, can you elaborate more > why this is needed? Concrete examples would help to understand better. Sure. During the meeting last week Arnd suggested evaluating if we can drop firmware-name from the board DT files. Several reasons for that: - DT should describe the hardware, not the Linux-firmware locations - having firmware name in DT complicates updating the tree to use different firmware API (think of mbn vs mdt vs any other format) - If the DT gets supplied by the vendor (e.g. for SystemReady-certified devices), there should be a sync between the vendor's DT, linux kernel and the rootfs. Dropping firmware names from DT solves that by removing one piece of the equation Now for the complexity of the solution. Each SoC family has their own firmware set. This includes firmware for the DSPs, for modem, WiFi bits, GPU shader, etc. For the development boards these devices are signed by the testing key and the actual signature is not validated against the root of trust certificate. For the end-user devices the signature is actually validated against the bits fused to the SoC during manufacturing process. CA certificate (and thus the fuses) differ from vendor to vendor (and from the device to device) Not all of the firmware files are a part of the public linux-firmware tree. However we need to support the rootfs bundled with the firmware for different platforms (both public and vendor). The non-signed files come from the Adreno GPU and can be shared between platforms. All other files are SoC-specific and in some cases device-specific. So for example the SDM845 db845c (open device) loads following firmware files: Not signed: - qcom/a630_sqe.fw - qcom/a630_gmu.bin Signed, will work for any non-secured sdm845 device: - qcom/sdm845/a630_zap.mbn - qcom/sdm845/adsp.mbn - qcom/sdm845/cdsp.mbn - qcom/sdm485/mba.mbn - qcom/sdm845/modem.mbn - qcom/sdm845/wlanmdsp.mbn (loaded via TQFTP) - qcom/venus-5.2/venus.mbn Signed, works only for DB845c. - qcom/sdm845/Thundercomm/db845c/slpi.mbn In comparison, the SDM845 Pixel-3 phone (aka blueline) should load the following firmware files: - qcom/a630_sqe.fw (the same, non-signed file) - qcom/a630_gmu.bin (the same, non-signed file) - qcom/sdm845/Google/blueline/a630_zap.mbn - qcom/sdm845/Google/blueline/adsp.mbn - qcom/sdm845/Google/blueline/cdsp.mbn - qcom/sdm845/Google/blueline/ipa_fws.mbn - qcom/sdm845/Google/blueline/mba.mbn - qcom/sdm845/Google/blueline/modem.mbn - qcom/sdm845/Google/blueline/venus.mbn - qcom/sdm845/Google/blueline/wlanmdsp.mbn - qcom/sdm845/Google/blueline/slpi.mbn The Lenovo Yoga C630 WoS laptop (SDM850 is a variant of SDM845) uses another set of files: - qcom/a630_sqe.fw (the same, non-signed file) - qcom/a630_gmu.bin (the same, non-signed file) - qcom/sdm850/LENOVO/81JL/qcdxkmsuc850.mbn - qcom/sdm850/LENOVO/81JL/qcadsp850.mbn - qcom/sdm850/LENOVO/81JL/qccdsp850.mbn - qcom/sdm850/LENOVO/81JL/ipa_fws.elf - qcom/sdm850/LENOVO/81JL/qcdsp1v2850.mbn - qcom/sdm850/LENOVO/81JL/qcdsp2850.mbn - qcom/sdm850/LENOVO/81JL/qcvss850.mbn - qcom/sdm850/LENOVO/81JL/wlanmdsp.mbn - qcom/sdm850/LENOVO/81JL/qcslpi850.mbn If we look at one of the recent platforms, e.g. SM8650-QRD, this list also grows up: - qcom/gen70900_sqe.fw (generic, non-signed) - qcom/gmu_gen70900.bin (generic, non-signed) - qcom/sm8650/gen70900_zap.mbn - qcom/sm8650/adsp.mbn - qcom/sm8650/adsp_dtb.mbn - qcom/sm8650/cdsp.mbn - qcom/sm8650/cdsp_dtb.mbn - qcom/sm8650/ipa_fws.mbn - qcom/sm8650/modem.mbn - qcom/sm8650/modem_dtb.mbn - qcom/sm8650/vpu33_4v.mbn (or maybe qcom/vpu-33/vpu_4v.mbn) -- With best wishes Dmitry