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. -----BEGIN PGP SIGNATURE----- iQJJBAABCAAzFiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAmjDQ+kVHGFuZGVyc3Nv bkBrZXJuZWwub3JnAAoJEAsfOT8Nma3F0S4P/RkgxyLagOcz78CCRG2kgYvxak29 C1SF9AP3V//xX/oJ+o9anAmcx/3no+q8QX+/ngnfhypBf9g0OPxpbNEWN8jqZQ2C tBAMtjEViXDhdfrNH8AEsYlstj67Si9E9OgQ/UO56U6VEsqDtGui7D1H46VwkKS2 LcxpsWVBgyEd8RA6fskZx/bb/S4Um/SKm3Yaux3VQ2xsSyUp6y29ubNVRU9eVwUN dpiKqDjkXSKvt6Y9DxyhL2Sa2aHm7K0+ulUGIWrswKckzj8LFdzX4snzf7AIItju DNYXYqnKeZsj54fwLKH4nKVS4iZA1rPKRkXxYNPEWS8nmgRy6E+Ye1IknWAFxe8I aw/otkp9Dh2JOITZUi6cU8NzTvKQ7HAMDSkCEMHCaBopK8DSnA5gwDlzQI8YQWJm Md2Ga1XpP9/Y4Z9uNal3fCU2bPulH+8w9l7A4sVqSJITXxX7vNF+tvEsNjlx4AaH NRIk5gLavZ2m3CW8wczyHPpF/Ojl+N0GFYgBBgWCi0jRTTq3Cb0jNuZAfJszn4jB cXWSPnMc8BAqiNnlG0EI6/ydVeAlSDssYzRXmx4dvyinMGvgdlE6s6V4dvZQRMhh 8gsSe3xVkYFVkjSAhfrx4vI0PFEU0DfjVyS5Dq0Y3I3sutTP6eF8vYEq3DgqudPS SZW2s7ZiO86dUqYG =CIAf -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmjIGv8ACgkQmmx57+YA GNlyvBAAu2zlrRL9dBZyUAr05hz3rY4+SJXDqXofeILKBIXioHVW+8iX/RSdNxwk 3L88ZNb1GJ7tszNDENnb0ObEIRYAirg4zLilVqUoikRrNv7bhoTXve13pk63imOP feHwPu+euGyq0KOLCO2eB4mqWlOIVxU2y0BI+rCdJ2ogVAMEfK7ZA/SoDKUAoKGV 8kBX/0i7/SICL809vgKqyeK8wtmKNtitQGYrux4yclnznoXqUXRyrKyYPx9o+7RN HO3D2v44W2tn8rvLOTP92TdazEoN7cYJf8557I/tooZDTSjNzdgcEeO4qZqhT5Gy H2HCBaS1b4gwSJAGNQs8SeCgcBg9usm77rSGAbtNai5fW0LRb7Ig7lkJbRCBsWJy /Zjr77SOiWAS0ALytv8XWiv8s707P+IUWktGzoq7e6QuEFnXRboU8RKt8aLce5wt rcqAl7qCSbjEig980hL5p8nbI7ZEBEU+mcxxqN5M/qkDx9FiadxPzZ0+vvplP97p dScGRcftLD1+jF8TycbyWPuxQT7naZNARDFWMxMScHuw2hVfyg0y+KcdadH5Evc9 ocT+XrzZM7xCDYFd1ksZmuaIzM6rVXINqdkQc/mDbbKqsBKLkvHaonHP2eMo0Tld Tgum98+WUkLcHpJtWEgyRZmcqRoEy6HLYO8vXLZhFcTguUqeBrE= =y2UQ -----END PGP SIGNATURE----- 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>pull/1354/merge
commit
ecdca1af96
|
|
@ -36,6 +36,7 @@ properties:
|
|||
- qcom,scm-msm8226
|
||||
- qcom,scm-msm8660
|
||||
- qcom,scm-msm8916
|
||||
- qcom,scm-msm8937
|
||||
- qcom,scm-msm8953
|
||||
- qcom,scm-msm8960
|
||||
- qcom,scm-msm8974
|
||||
|
|
@ -134,6 +135,7 @@ allOf:
|
|||
- qcom,scm-msm8226
|
||||
- qcom,scm-msm8660
|
||||
- qcom,scm-msm8916
|
||||
- qcom,scm-msm8937
|
||||
- qcom,scm-msm8953
|
||||
- qcom,scm-msm8960
|
||||
- qcom,scm-msm8974
|
||||
|
|
@ -177,6 +179,7 @@ allOf:
|
|||
- qcom,scm-mdm9607
|
||||
- qcom,scm-msm8226
|
||||
- qcom,scm-msm8916
|
||||
- qcom,scm-msm8937
|
||||
- qcom,scm-msm8953
|
||||
- qcom,scm-msm8974
|
||||
- qcom,scm-msm8976
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ description: |
|
|||
SLEEP - Triggered by F/W
|
||||
WAKE - Triggered by F/W
|
||||
CONTROL - Triggered by F/W
|
||||
See also:: <dt-bindings/soc/qcom,rpmh-rsc.h>
|
||||
See also: <dt-bindings/soc/qcom,rpmh-rsc.h>
|
||||
|
||||
The order in which they are described in the DT, should match the hardware
|
||||
configuration.
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ properties:
|
|||
items:
|
||||
- enum:
|
||||
- qcom,apq8064-imem
|
||||
- qcom,ipq5424-imem
|
||||
- qcom,msm8226-imem
|
||||
- qcom,msm8974-imem
|
||||
- qcom,msm8976-imem
|
||||
|
|
|
|||
|
|
@ -1119,7 +1119,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
|
|||
if (ret) {
|
||||
dev_err(__scm->dev,
|
||||
"Assign memory protection call failed %d\n", ret);
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
*srcvm = next_vm;
|
||||
|
|
@ -1994,11 +1994,14 @@ static const struct of_device_id qcom_scm_qseecom_allowlist[] __maybe_unused = {
|
|||
{ .compatible = "asus,vivobook-s15" },
|
||||
{ .compatible = "asus,zenbook-a14-ux3407qa" },
|
||||
{ .compatible = "asus,zenbook-a14-ux3407ra" },
|
||||
{ .compatible = "dell,inspiron-14-plus-7441" },
|
||||
{ .compatible = "dell,latitude-7455" },
|
||||
{ .compatible = "dell,xps13-9345" },
|
||||
{ .compatible = "hp,elitebook-ultra-g1q" },
|
||||
{ .compatible = "hp,omnibook-x14" },
|
||||
{ .compatible = "huawei,gaokun3" },
|
||||
{ .compatible = "lenovo,flex-5g" },
|
||||
{ .compatible = "lenovo,thinkbook-16" },
|
||||
{ .compatible = "lenovo,thinkpad-t14s" },
|
||||
{ .compatible = "lenovo,thinkpad-x13s", },
|
||||
{ .compatible = "lenovo,yoga-slim7x" },
|
||||
|
|
@ -2006,6 +2009,7 @@ static const struct of_device_id qcom_scm_qseecom_allowlist[] __maybe_unused = {
|
|||
{ .compatible = "microsoft,blackrock" },
|
||||
{ .compatible = "microsoft,romulus13", },
|
||||
{ .compatible = "microsoft,romulus15", },
|
||||
{ .compatible = "qcom,hamoa-iot-evk" },
|
||||
{ .compatible = "qcom,sc8180x-primus" },
|
||||
{ .compatible = "qcom,x1e001de-devkit" },
|
||||
{ .compatible = "qcom,x1e80100-crd" },
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ static bool qcom_tzmem_using_shm_bridge;
|
|||
|
||||
/* List of machines that are known to not support SHM bridge correctly. */
|
||||
static const char *const qcom_tzmem_blacklist[] = {
|
||||
"qcom,sc7180", /* hang in rmtfs memory assignment */
|
||||
"qcom,sc8180x",
|
||||
"qcom,sdm670", /* failure in GPU firmware loading */
|
||||
"qcom,sdm845", /* reset in rmtfs memory assignment */
|
||||
|
|
|
|||
|
|
@ -136,8 +136,8 @@ static int venus_load_fw(struct venus_core *core, const char *fwname,
|
|||
ret = qcom_mdt_load(dev, mdt, fwname, VENUS_PAS_ID,
|
||||
mem_va, *mem_phys, *mem_size, NULL);
|
||||
else
|
||||
ret = qcom_mdt_load_no_init(dev, mdt, fwname, VENUS_PAS_ID,
|
||||
mem_va, *mem_phys, *mem_size, NULL);
|
||||
ret = qcom_mdt_load_no_init(dev, mdt, fwname, mem_va,
|
||||
*mem_phys, *mem_size, NULL);
|
||||
|
||||
memunmap(mem_va);
|
||||
err_release_fw:
|
||||
|
|
|
|||
|
|
@ -414,7 +414,7 @@ static int ath12k_ahb_power_up(struct ath12k_base *ab)
|
|||
goto err_fw2;
|
||||
}
|
||||
|
||||
ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, pasid, mem_region, mem_phys,
|
||||
ret = qcom_mdt_load_no_init(dev, fw2, fw2_name, mem_region, mem_phys,
|
||||
mem_size, &mem_phys);
|
||||
if (ret) {
|
||||
ath12k_err(ab, "Failed to load MDT segments: %d\n", ret);
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ static int adsp_load(struct rproc *rproc, const struct firmware *fw)
|
|||
struct qcom_adsp *adsp = rproc->priv;
|
||||
int ret;
|
||||
|
||||
ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, 0,
|
||||
ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware,
|
||||
adsp->mem_region, adsp->mem_phys,
|
||||
adsp->mem_size, &adsp->mem_reloc);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -242,9 +242,8 @@ static int qcom_pas_load(struct rproc *rproc, const struct firmware *fw)
|
|||
goto release_dtb_firmware;
|
||||
|
||||
ret = qcom_mdt_load_no_init(pas->dev, pas->dtb_firmware, pas->dtb_firmware_name,
|
||||
pas->dtb_pas_id, pas->dtb_mem_region,
|
||||
pas->dtb_mem_phys, pas->dtb_mem_size,
|
||||
&pas->dtb_mem_reloc);
|
||||
pas->dtb_mem_region, pas->dtb_mem_phys,
|
||||
pas->dtb_mem_size, &pas->dtb_mem_reloc);
|
||||
if (ret)
|
||||
goto release_dtb_metadata;
|
||||
}
|
||||
|
|
@ -307,7 +306,7 @@ static int qcom_pas_start(struct rproc *rproc)
|
|||
if (ret)
|
||||
goto disable_px_supply;
|
||||
|
||||
ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware, pas->pas_id,
|
||||
ret = qcom_mdt_load_no_init(pas->dev, pas->firmware, rproc->firmware,
|
||||
pas->mem_region, pas->mem_phys, pas->mem_size,
|
||||
&pas->mem_reloc);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -757,7 +757,7 @@ static int q6v5_wcss_load(struct rproc *rproc, const struct firmware *fw)
|
|||
int ret;
|
||||
|
||||
ret = qcom_mdt_load_no_init(wcss->dev, fw, rproc->firmware,
|
||||
0, wcss->mem_region, wcss->mem_phys,
|
||||
wcss->mem_region, wcss->mem_phys,
|
||||
wcss->mem_size, &wcss->mem_reloc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -656,6 +656,9 @@ static irqreturn_t bwmon_intr_thread(int irq, void *dev_id)
|
|||
if (IS_ERR(target_opp) && PTR_ERR(target_opp) == -ERANGE)
|
||||
target_opp = dev_pm_opp_find_bw_floor(bwmon->dev, &bw_kbps, 0);
|
||||
|
||||
if (IS_ERR(target_opp))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
bwmon->target_kbps = bw_kbps;
|
||||
|
||||
bw_kbps--;
|
||||
|
|
|
|||
|
|
@ -4409,7 +4409,6 @@ static struct regmap *qcom_llcc_init_mmio(struct platform_device *pdev, u8 index
|
|||
.reg_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
base = devm_platform_ioremap_resource(pdev, index);
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@ out:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_mdt_pas_init);
|
||||
|
||||
static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_name)
|
||||
static bool qcom_mdt_bins_are_split(const struct firmware *fw)
|
||||
{
|
||||
const struct elf32_phdr *phdrs;
|
||||
const struct elf32_hdr *ehdr;
|
||||
|
|
@ -331,9 +331,9 @@ static bool qcom_mdt_bins_are_split(const struct firmware *fw, const char *fw_na
|
|||
}
|
||||
|
||||
static int __qcom_mdt_load(struct device *dev, const struct firmware *fw,
|
||||
const char *fw_name, int pas_id, void *mem_region,
|
||||
const char *fw_name, void *mem_region,
|
||||
phys_addr_t mem_phys, size_t mem_size,
|
||||
phys_addr_t *reloc_base, bool pas_init)
|
||||
phys_addr_t *reloc_base)
|
||||
{
|
||||
const struct elf32_phdr *phdrs;
|
||||
const struct elf32_phdr *phdr;
|
||||
|
|
@ -353,7 +353,7 @@ static int __qcom_mdt_load(struct device *dev, const struct firmware *fw,
|
|||
if (!mdt_header_valid(fw))
|
||||
return -EINVAL;
|
||||
|
||||
is_split = qcom_mdt_bins_are_split(fw, fw_name);
|
||||
is_split = qcom_mdt_bins_are_split(fw);
|
||||
ehdr = (struct elf32_hdr *)fw->data;
|
||||
phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff);
|
||||
|
||||
|
|
@ -458,8 +458,8 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys,
|
||||
mem_size, reloc_base, true);
|
||||
return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys,
|
||||
mem_size, reloc_base);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_mdt_load);
|
||||
|
||||
|
|
@ -468,7 +468,6 @@ EXPORT_SYMBOL_GPL(qcom_mdt_load);
|
|||
* @dev: device handle to associate resources with
|
||||
* @fw: firmware object for the mdt file
|
||||
* @firmware: name of the firmware, for construction of segment file names
|
||||
* @pas_id: PAS identifier
|
||||
* @mem_region: allocated memory region to load firmware into
|
||||
* @mem_phys: physical address of allocated memory region
|
||||
* @mem_size: size of the allocated memory region
|
||||
|
|
@ -477,12 +476,11 @@ EXPORT_SYMBOL_GPL(qcom_mdt_load);
|
|||
* Returns 0 on success, negative errno otherwise.
|
||||
*/
|
||||
int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw,
|
||||
const char *firmware, int pas_id,
|
||||
void *mem_region, phys_addr_t mem_phys,
|
||||
const char *firmware, void *mem_region, phys_addr_t mem_phys,
|
||||
size_t mem_size, phys_addr_t *reloc_base)
|
||||
{
|
||||
return __qcom_mdt_load(dev, fw, firmware, pas_id, mem_region, mem_phys,
|
||||
mem_size, reloc_base, false);
|
||||
return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys,
|
||||
mem_size, reloc_base);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_mdt_load_no_init);
|
||||
|
||||
|
|
|
|||
|
|
@ -584,6 +584,7 @@ static const struct of_device_id qcom_pdm_domains[] __maybe_unused = {
|
|||
{ .compatible = "qcom,sm8450", .data = sm8350_domains, },
|
||||
{ .compatible = "qcom,sm8550", .data = sm8550_domains, },
|
||||
{ .compatible = "qcom,sm8650", .data = sm8550_domains, },
|
||||
{ .compatible = "qcom,sm8750", .data = sm8550_domains, },
|
||||
{ .compatible = "qcom,x1e80100", .data = x1e80100_domains, },
|
||||
{ .compatible = "qcom,x1p42100", .data = x1e80100_domains, },
|
||||
{},
|
||||
|
|
|
|||
|
|
@ -229,7 +229,6 @@ static const struct regmap_config qrc_regmap_config = {
|
|||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x68,
|
||||
.fast_io = true,
|
||||
};
|
||||
|
||||
static const struct reg_sequence msm8976_cfg_dfs_sid[] = {
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ static int master_stats_probe(struct platform_device *pdev)
|
|||
if (count < 0)
|
||||
return count;
|
||||
|
||||
data = devm_kzalloc(dev, count * sizeof(*data), GFP_KERNEL);
|
||||
data = devm_kcalloc(dev, count, sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -453,13 +453,10 @@ static irqreturn_t tcs_tx_done(int irq, void *p)
|
|||
|
||||
trace_rpmh_tx_done(drv, i, req);
|
||||
|
||||
/*
|
||||
* If wake tcs was re-purposed for sending active
|
||||
* votes, clear AMC trigger & enable modes and
|
||||
/* Clear AMC trigger & enable modes and
|
||||
* disable interrupt for this TCS
|
||||
*/
|
||||
if (!drv->tcs[ACTIVE_TCS].num_tcs)
|
||||
__tcs_set_trigger(drv, i, false);
|
||||
__tcs_set_trigger(drv, i, false);
|
||||
skip:
|
||||
/* Reclaim the TCS */
|
||||
write_tcs_reg(drv, drv->regs[RSC_DRV_CMD_ENABLE], i, 0);
|
||||
|
|
|
|||
|
|
@ -898,7 +898,7 @@ static u32 qcom_smem_get_item_count(struct qcom_smem *smem)
|
|||
if (IS_ERR_OR_NULL(ptable))
|
||||
return SMEM_ITEM_COUNT;
|
||||
|
||||
info = (struct smem_info *)&ptable->entry[ptable->num_entries];
|
||||
info = (struct smem_info *)&ptable->entry[le32_to_cpu(ptable->num_entries)];
|
||||
if (memcmp(info->magic, SMEM_INFO_MAGIC, sizeof(info->magic)))
|
||||
return SMEM_ITEM_COUNT;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw,
|
|||
phys_addr_t *reloc_base);
|
||||
|
||||
int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw,
|
||||
const char *fw_name, int pas_id, void *mem_region,
|
||||
const char *fw_name, void *mem_region,
|
||||
phys_addr_t mem_phys, size_t mem_size,
|
||||
phys_addr_t *reloc_base);
|
||||
void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len,
|
||||
|
|
@ -54,9 +54,8 @@ static inline int qcom_mdt_load(struct device *dev, const struct firmware *fw,
|
|||
|
||||
static inline int qcom_mdt_load_no_init(struct device *dev,
|
||||
const struct firmware *fw,
|
||||
const char *fw_name, int pas_id,
|
||||
void *mem_region, phys_addr_t mem_phys,
|
||||
size_t mem_size,
|
||||
const char *fw_name, void *mem_region,
|
||||
phys_addr_t mem_phys, size_t mem_size,
|
||||
phys_addr_t *reloc_base)
|
||||
{
|
||||
return -ENODEV;
|
||||
|
|
|
|||
Loading…
Reference in New Issue