Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'qcom-drivers-for-6.18' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into soc/drivers

Qualcomm driver updates for v6.18

Allowlist the uefisec application, to provide UEFI variable access on
Dell Inspiron 7441 and Latitude 7455, the Hamoa EVK, and the Lenovo
Thinkbook 16.

Disable tzmem on the SC7180 platform, as this causes problems with
rmtfs.

Clean up unused, lingering, parameters in the MDT loader API.

Unconditinally clear TCS trigger bit, to avoid false completion IRQs in
the RPMh/RSC driver. Fix endianess issue in SMEM driver.

Add pd-mapper support for SM8750.

* tag 'qcom-drivers-for-6.18' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux:
firmware: qcom: tzmem: disable sc7180 platform
soc: qcom: use devm_kcalloc() for array space allocation
dt-bindings: firmware: qcom,scm: Add MSM8937
firmware: qcom: scm: Allow QSEECOM on Dell Inspiron 7441 / Latitude 7455
firmware: qcom: scm: Allow QSEECOM on Lenovo Thinkbook 16
soc: qcom: rpmh-rsc: Unconditionally clear _TRIGGER bit for TCS
soc: qcom: pd-mapper: Add SM8750 compatible
soc: qcom: icc-bwmon: Fix handling dev_pm_opp_find_bw_*() errors
soc: remove unneeded 'fast_io' parameter in regmap_config
soc: qcom: smem: Fix endian-unaware access of num_entries
dt-bindings: soc: qcom,rpmh-rsc: Remove double colon from description
dt-bindings: sram: qcom,imem: Document IPQ5424 compatible
firmware: qcom: scm: Allow QSEECOM on HAMOA-IOT-EVK
soc: qcom: mdt_loader: Remove unused parameter
soc: qcom: mdt_loader: Remove pas id parameter
soc: qcom: mdt_loader: Remove unused parameter
firmware: qcom: scm: preserve assign_mem() error return value

Link: https://lore.kernel.org/r/20250911215017.3020481-1-andersson@kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+39 -35
+3
Documentation/devicetree/bindings/firmware/qcom,scm.yaml
··· 36 36 - qcom,scm-msm8226 37 37 - qcom,scm-msm8660 38 38 - qcom,scm-msm8916 39 + - qcom,scm-msm8937 39 40 - qcom,scm-msm8953 40 41 - qcom,scm-msm8960 41 42 - qcom,scm-msm8974 ··· 135 134 - qcom,scm-msm8226 136 135 - qcom,scm-msm8660 137 136 - qcom,scm-msm8916 137 + - qcom,scm-msm8937 138 138 - qcom,scm-msm8953 139 139 - qcom,scm-msm8960 140 140 - qcom,scm-msm8974 ··· 179 177 - qcom,scm-mdm9607 180 178 - qcom,scm-msm8226 181 179 - qcom,scm-msm8916 180 + - qcom,scm-msm8937 182 181 - qcom,scm-msm8953 183 182 - qcom,scm-msm8974 184 183 - qcom,scm-msm8976
+1 -1
Documentation/devicetree/bindings/soc/qcom/qcom,rpmh-rsc.yaml
··· 28 28 SLEEP - Triggered by F/W 29 29 WAKE - Triggered by F/W 30 30 CONTROL - Triggered by F/W 31 - See also:: <dt-bindings/soc/qcom,rpmh-rsc.h> 31 + See also: <dt-bindings/soc/qcom,rpmh-rsc.h> 32 32 33 33 The order in which they are described in the DT, should match the hardware 34 34 configuration.
+1
Documentation/devicetree/bindings/sram/qcom,imem.yaml
··· 18 18 items: 19 19 - enum: 20 20 - qcom,apq8064-imem 21 + - qcom,ipq5424-imem 21 22 - qcom,msm8226-imem 22 23 - qcom,msm8974-imem 23 24 - qcom,msm8976-imem
+5 -1
drivers/firmware/qcom/qcom_scm.c
··· 1119 1119 if (ret) { 1120 1120 dev_err(__scm->dev, 1121 1121 "Assign memory protection call failed %d\n", ret); 1122 - return -EINVAL; 1122 + return ret; 1123 1123 } 1124 1124 1125 1125 *srcvm = next_vm; ··· 1994 1994 { .compatible = "asus,vivobook-s15" }, 1995 1995 { .compatible = "asus,zenbook-a14-ux3407qa" }, 1996 1996 { .compatible = "asus,zenbook-a14-ux3407ra" }, 1997 + { .compatible = "dell,inspiron-14-plus-7441" }, 1998 + { .compatible = "dell,latitude-7455" }, 1997 1999 { .compatible = "dell,xps13-9345" }, 1998 2000 { .compatible = "hp,elitebook-ultra-g1q" }, 1999 2001 { .compatible = "hp,omnibook-x14" }, 2000 2002 { .compatible = "huawei,gaokun3" }, 2001 2003 { .compatible = "lenovo,flex-5g" }, 2004 + { .compatible = "lenovo,thinkbook-16" }, 2002 2005 { .compatible = "lenovo,thinkpad-t14s" }, 2003 2006 { .compatible = "lenovo,thinkpad-x13s", }, 2004 2007 { .compatible = "lenovo,yoga-slim7x" }, ··· 2009 2006 { .compatible = "microsoft,blackrock" }, 2010 2007 { .compatible = "microsoft,romulus13", }, 2011 2008 { .compatible = "microsoft,romulus15", }, 2009 + { .compatible = "qcom,hamoa-iot-evk" }, 2012 2010 { .compatible = "qcom,sc8180x-primus" }, 2013 2011 { .compatible = "qcom,x1e001de-devkit" }, 2014 2012 { .compatible = "qcom,x1e80100-crd" },
+1
drivers/firmware/qcom/qcom_tzmem.c
··· 77 77 78 78 /* List of machines that are known to not support SHM bridge correctly. */ 79 79 static const char *const qcom_tzmem_blacklist[] = { 80 + "qcom,sc7180", /* hang in rmtfs memory assignment */ 80 81 "qcom,sc8180x", 81 82 "qcom,sdm670", /* failure in GPU firmware loading */ 82 83 "qcom,sdm845", /* reset in rmtfs memory assignment */
+2 -2
drivers/media/platform/qcom/venus/firmware.c
··· 136 136 ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID, 137 137 mem_va, *mem_phys, *mem_size, NULL); 138 138 else 139 - ret = qcom_mdt_load_no_init(dev, mdt, fwname, VENUS_PAS_ID, 140 - mem_va, *mem_phys, *mem_size, NULL); 139 + ret = qcom_mdt_load_no_init(dev, mdt, fwname, mem_va, 140 + *mem_phys, *mem_size, NULL); 141 141 142 142 memunmap(mem_va); 143 143 err_release_fw:
+1 -1
drivers/net/wireless/ath/ath12k/ahb.c
··· 414 414 goto err_fw2; 415 415 } 416 416 417 - ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, pasid, mem_region, mem_phys, 417 + ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, mem_region, mem_phys, 418 418 mem_size, &mem_phys); 419 419 if (ret) { 420 420 ath12k_err(ab, "Failed to load MDT segments: %d\n", ret);
+1 -1
drivers/remoteproc/qcom_q6v5_adsp.c
··· 317 317 struct qcom_adsp *adsp = rproc->priv; 318 318 int ret; 319 319 320 - ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0, 320 + ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 321 321 adsp->mem_region, adsp->mem_phys, 322 322 adsp->mem_size, &adsp->mem_reloc); 323 323 if (ret)
+3 -4
drivers/remoteproc/qcom_q6v5_pas.c
··· 242 242 goto release_dtb_firmware; 243 243 244 244 ret = qcom_mdt_load_no_init(pas->dev, pas->dtb_firmware, pas->dtb_firmware_name, 245 - pas->dtb_pas_id, pas->dtb_mem_region, 246 - pas->dtb_mem_phys, pas->dtb_mem_size, 247 - &pas->dtb_mem_reloc); 245 + pas->dtb_mem_region, pas->dtb_mem_phys, 246 + pas->dtb_mem_size, &pas->dtb_mem_reloc); 248 247 if (ret) 249 248 goto release_dtb_metadata; 250 249 } ··· 306 307 if (ret) 307 308 goto disable_px_supply; 308 309 309 - ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware, pas->pas_id, 310 + ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware, 310 311 pas->mem_region, pas->mem_phys, pas->mem_size, 311 312 &pas->mem_reloc); 312 313 if (ret)
+1 -1
drivers/remoteproc/qcom_q6v5_wcss.c
··· 757 757 int ret; 758 758 759 759 ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware, 760 - 0, wcss->mem_region, wcss->mem_phys, 760 + wcss->mem_region, wcss->mem_phys, 761 761 wcss->mem_size, &wcss->mem_reloc); 762 762 if (ret) 763 763 return ret;
+3
drivers/soc/qcom/icc-bwmon.c
··· 656 656 if (IS_ERR(target_opp) && PTR_ERR(target_opp) == -ERANGE) 657 657 target_opp = dev_pm_opp_find_bw_floor(bwmon->dev, &bw_kbps, 0); 658 658 659 + if (IS_ERR(target_opp)) 660 + return IRQ_HANDLED; 661 + 659 662 bwmon->target_kbps = bw_kbps; 660 663 661 664 bw_kbps--;
-1
drivers/soc/qcom/llcc-qcom.c
··· 4409 4409 .reg_bits = 32, 4410 4410 .reg_stride = 4, 4411 4411 .val_bits = 32, 4412 - .fast_io = true, 4413 4412 }; 4414 4413 4415 4414 base = devm_platform_ioremap_resource(pdev, index);
+9 -11
drivers/soc/qcom/mdt_loader.c
··· 302 302 } 303 303 EXPORT_SYMBOL_GPL(qcom_mdt_pas_init); 304 304 305 - static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_name) 305 + static bool qcom_mdt_bins_are_split(const struct firmware *fw) 306 306 { 307 307 const struct elf32_phdr *phdrs; 308 308 const struct elf32_hdr *ehdr; ··· 331 331 } 332 332 333 333 static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, 334 - const char *fw_name, int pas_id, void *mem_region, 334 + const char *fw_name, void *mem_region, 335 335 phys_addr_t mem_phys, size_t mem_size, 336 - phys_addr_t *reloc_base, bool pas_init) 336 + phys_addr_t *reloc_base) 337 337 { 338 338 const struct elf32_phdr *phdrs; 339 339 const struct elf32_phdr *phdr; ··· 353 353 if (!mdt_header_valid(fw)) 354 354 return -EINVAL; 355 355 356 - is_split = qcom_mdt_bins_are_split(fw, fw_name); 356 + is_split = qcom_mdt_bins_are_split(fw); 357 357 ehdr = (struct elf32_hdr *)fw->data; 358 358 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); 359 359 ··· 458 458 if (ret) 459 459 return ret; 460 460 461 - return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, 462 - mem_size, reloc_base, true); 461 + return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, 462 + mem_size, reloc_base); 463 463 } 464 464 EXPORT_SYMBOL_GPL(qcom_mdt_load); 465 465 ··· 468 468 * @dev: device handle to associate resources with 469 469 * @fw: firmware object for the mdt file 470 470 * @firmware: name of the firmware, for construction of segment file names 471 - * @pas_id: PAS identifier 472 471 * @mem_region: allocated memory region to load firmware into 473 472 * @mem_phys: physical address of allocated memory region 474 473 * @mem_size: size of the allocated memory region ··· 476 477 * Returns 0 on success, negative errno otherwise. 477 478 */ 478 479 int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, 479 - const char *firmware, int pas_id, 480 - void *mem_region, phys_addr_t mem_phys, 480 + const char *firmware, void *mem_region, phys_addr_t mem_phys, 481 481 size_t mem_size, phys_addr_t *reloc_base) 482 482 { 483 - return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys, 484 - mem_size, reloc_base, false); 483 + return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, 484 + mem_size, reloc_base); 485 485 } 486 486 EXPORT_SYMBOL_GPL(qcom_mdt_load_no_init); 487 487
+1
drivers/soc/qcom/qcom_pd_mapper.c
··· 584 584 { .compatible = "qcom,sm8450", .data = sm8350_domains, }, 585 585 { .compatible = "qcom,sm8550", .data = sm8550_domains, }, 586 586 { .compatible = "qcom,sm8650", .data = sm8550_domains, }, 587 + { .compatible = "qcom,sm8750", .data = sm8550_domains, }, 587 588 { .compatible = "qcom,x1e80100", .data = x1e80100_domains, }, 588 589 { .compatible = "qcom,x1p42100", .data = x1e80100_domains, }, 589 590 {},
-1
drivers/soc/qcom/ramp_controller.c
··· 229 229 .reg_stride = 4, 230 230 .val_bits = 32, 231 231 .max_register = 0x68, 232 - .fast_io = true, 233 232 }; 234 233 235 234 static const struct reg_sequence msm8976_cfg_dfs_sid[] = {
+1 -1
drivers/soc/qcom/rpm_master_stats.c
··· 78 78 if (count < 0) 79 79 return count; 80 80 81 - data = devm_kzalloc(dev, count * sizeof(*data), GFP_KERNEL); 81 + data = devm_kcalloc(dev, count, sizeof(*data), GFP_KERNEL); 82 82 if (!data) 83 83 return -ENOMEM; 84 84
+2 -5
drivers/soc/qcom/rpmh-rsc.c
··· 453 453 454 454 trace_rpmh_tx_done(drv, i, req); 455 455 456 - /* 457 - * If wake tcs was re-purposed for sending active 458 - * votes, clear AMC trigger & enable modes and 456 + /* Clear AMC trigger & enable modes and 459 457 * disable interrupt for this TCS 460 458 */ 461 - if (!drv->tcs[ACTIVE_TCS].num_tcs) 462 - __tcs_set_trigger(drv, i, false); 459 + __tcs_set_trigger(drv, i, false); 463 460 skip: 464 461 /* Reclaim the TCS */ 465 462 write_tcs_reg(drv, drv->regs[RSC_DRV_CMD_ENABLE], i, 0);
+1 -1
drivers/soc/qcom/smem.c
··· 898 898 if (IS_ERR_OR_NULL(ptable)) 899 899 return SMEM_ITEM_COUNT; 900 900 901 - info = (struct smem_info *)&ptable->entry[ptable->num_entries]; 901 + info = (struct smem_info *)&ptable->entry[le32_to_cpu(ptable->num_entries)]; 902 902 if (memcmp(info->magic, SMEM_INFO_MAGIC, sizeof(info->magic))) 903 903 return SMEM_ITEM_COUNT; 904 904
+3 -4
include/linux/soc/qcom/mdt_loader.h
··· 24 24 phys_addr_t *reloc_base); 25 25 26 26 int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, 27 - const char *fw_name, int pas_id, void *mem_region, 27 + const char *fw_name, void *mem_region, 28 28 phys_addr_t mem_phys, size_t mem_size, 29 29 phys_addr_t *reloc_base); 30 30 void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len, ··· 54 54 55 55 static inline int qcom_mdt_load_no_init(struct device *dev, 56 56 const struct firmware *fw, 57 - const char *fw_name, int pas_id, 58 - void *mem_region, phys_addr_t mem_phys, 59 - size_t mem_size, 57 + const char *fw_name, void *mem_region, 58 + phys_addr_t mem_phys, size_t mem_size, 60 59 phys_addr_t *reloc_base) 61 60 { 62 61 return -ENODEV;