mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Merge tag 'qcom-drivers-for-7.1' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into soc/drivers
Qualcomm driver updates for v7.1 Add ECS LIVA QC710, Glymur CRD, Mahua CRD, Purwa IoT EVK, and Asus Vivobook to the QSEECOM allow-list, to enable UEFI variable access through uefisecapp. Register the Gunyah watchdog device if the SCM driver finds itself running under Gunyah. Clean up some locking using guards. Handle possible cases where AOSS cooling state is given a non-boolean state. Replace LLCC per-slice activation bitmap with reference counting. Also add SDM670 support. Improve probe deferral handling in the OCMEM driver. Add Milos, QCS615, Eliza, Glymur, and Mahua support to the pd-mapper. Add support for SoCCP-based pmic-glink, as found in Glymur and Kaanapali. Add common QMI service ids to the main qmi headerfile, to avoid spreading these constants in various drivers. Add support for version 2 of SMP2P and implement the irqchip state reading support. Add CQ7790, SA8650P, SM7450, SM7450P, and IPQ5210 SoC and the PM7550BA PMIC identifiers to the socinfo driver. Add Eliza and Mahua support to the UBWC driver, introduce helpers for drivers to read out min_acc length and other programmable values, and disable bank swizzling for Glymur. Simplify the logic related to allocation of NV download request in the WCNSS control driver. * tag 'qcom-drivers-for-7.1' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux: (51 commits) soc: qcom: ubwc: add helpers to get programmable values soc: qcom: ubwc: add helper to get min_acc length firmware: qcom: scm: Register gunyah watchdog device soc: qcom: socinfo: Add SoC ID for SA8650P dt-bindings: arm: qcom,ids: Add SoC ID for SA8650P firmware: qcom: scm: Allow QSEECOM on Mahua CRD soc: qcom: wcnss: simplify allocation of req soc: qcom: pd-mapper: Add support for Eliza soc: qcom: aoss: compare against normalized cooling state soc: qcom: llcc: fix v1 SB syndrome register offset dt-bindings: firmware: qcom,scm: Document ipq9650 SCM soc: qcom: ubwc: Add support for Mahua soc: qcom: pd-mapper: Add support for Glymur and Mahua soc: qcom: ubwc: Add configuration Eliza SoC soc: qcom: ubwc: Remove redundant x1e80100_data dt-bindings: firmware: qcom,scm: document Eliza SCM Firmware Interface soc: qcom: ocmem: return -EPROBE_DEFER is ocmem is not available soc: qcom: ocmem: register reasons for probe deferrals soc: qcom: ocmem: make the core clock optional soc: qcom: ubwc: disable bank swizzling for Glymur platform ... Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -699,20 +699,18 @@ static DEFINE_MUTEX(__qcuefi_lock);
|
||||
|
||||
static int qcuefi_set_reference(struct qcuefi_client *qcuefi)
|
||||
{
|
||||
mutex_lock(&__qcuefi_lock);
|
||||
guard(mutex)(&__qcuefi_lock);
|
||||
|
||||
if (qcuefi && __qcuefi) {
|
||||
mutex_unlock(&__qcuefi_lock);
|
||||
if (qcuefi && __qcuefi)
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
__qcuefi = qcuefi;
|
||||
|
||||
mutex_unlock(&__qcuefi_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct qcuefi_client *qcuefi_acquire(void)
|
||||
__acquires(__qcuefi_lock)
|
||||
{
|
||||
mutex_lock(&__qcuefi_lock);
|
||||
if (!__qcuefi) {
|
||||
@@ -723,6 +721,7 @@ static struct qcuefi_client *qcuefi_acquire(void)
|
||||
}
|
||||
|
||||
static void qcuefi_release(void)
|
||||
__releases(__qcuefi_lock)
|
||||
{
|
||||
mutex_unlock(&__qcuefi_lock);
|
||||
}
|
||||
|
||||
@@ -199,19 +199,18 @@ static int qcom_scm_bw_enable(void)
|
||||
if (!__scm->path)
|
||||
return 0;
|
||||
|
||||
mutex_lock(&__scm->scm_bw_lock);
|
||||
guard(mutex)(&__scm->scm_bw_lock);
|
||||
|
||||
if (!__scm->scm_vote_count) {
|
||||
ret = icc_set_bw(__scm->path, 0, UINT_MAX);
|
||||
if (ret < 0) {
|
||||
dev_err(__scm->dev, "failed to set bandwidth request\n");
|
||||
goto err_bw;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
__scm->scm_vote_count++;
|
||||
err_bw:
|
||||
mutex_unlock(&__scm->scm_bw_lock);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qcom_scm_bw_disable(void)
|
||||
@@ -923,14 +922,13 @@ struct resource_table *qcom_scm_pas_get_rsc_table(struct qcom_scm_pas_context *c
|
||||
goto free_input_rt;
|
||||
}
|
||||
|
||||
tbl_ptr = kzalloc(size, GFP_KERNEL);
|
||||
tbl_ptr = kmemdup(output_rt_tzm, size, GFP_KERNEL);
|
||||
if (!tbl_ptr) {
|
||||
qcom_tzmem_free(output_rt_tzm);
|
||||
ret = -ENOMEM;
|
||||
goto free_input_rt;
|
||||
}
|
||||
|
||||
memcpy(tbl_ptr, output_rt_tzm, size);
|
||||
*output_rt_size = size;
|
||||
qcom_tzmem_free(output_rt_tzm);
|
||||
|
||||
@@ -2290,11 +2288,13 @@ EXPORT_SYMBOL_GPL(qcom_scm_qseecom_app_send);
|
||||
*/
|
||||
static const struct of_device_id qcom_scm_qseecom_allowlist[] __maybe_unused = {
|
||||
{ .compatible = "asus,vivobook-s15" },
|
||||
{ .compatible = "asus,vivobook-s15-x1p4" },
|
||||
{ .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 = "ecs,liva-qc710" },
|
||||
{ .compatible = "hp,elitebook-ultra-g1q" },
|
||||
{ .compatible = "hp,omnibook-x14" },
|
||||
{ .compatible = "huawei,gaokun3" },
|
||||
@@ -2309,7 +2309,10 @@ static const struct of_device_id qcom_scm_qseecom_allowlist[] __maybe_unused = {
|
||||
{ .compatible = "microsoft,denali", },
|
||||
{ .compatible = "microsoft,romulus13", },
|
||||
{ .compatible = "microsoft,romulus15", },
|
||||
{ .compatible = "qcom,glymur-crd" },
|
||||
{ .compatible = "qcom,hamoa-iot-evk" },
|
||||
{ .compatible = "qcom,mahua-crd" },
|
||||
{ .compatible = "qcom,purwa-iot-evk" },
|
||||
{ .compatible = "qcom,sc8180x-primus" },
|
||||
{ .compatible = "qcom,x1e001de-devkit" },
|
||||
{ .compatible = "qcom,x1e80100-crd" },
|
||||
@@ -2467,6 +2470,56 @@ int qcom_scm_qtee_callback_response(phys_addr_t buf, size_t buf_size,
|
||||
}
|
||||
EXPORT_SYMBOL(qcom_scm_qtee_callback_response);
|
||||
|
||||
static void qcom_scm_gunyah_wdt_free(void *data)
|
||||
{
|
||||
struct platform_device *gunyah_wdt_dev = data;
|
||||
|
||||
platform_device_unregister(gunyah_wdt_dev);
|
||||
}
|
||||
|
||||
static void qcom_scm_gunyah_wdt_init(struct qcom_scm *scm)
|
||||
{
|
||||
struct platform_device *gunyah_wdt_dev;
|
||||
struct device_node *np;
|
||||
bool of_wdt_available;
|
||||
int i;
|
||||
static const uuid_t gunyah_uuid = UUID_INIT(0xc1d58fcd, 0xa453, 0x5fdb,
|
||||
0x92, 0x65, 0xce, 0x36,
|
||||
0x67, 0x3d, 0x5f, 0x14);
|
||||
static const char * const of_wdt_compatible[] = {
|
||||
"qcom,kpss-wdt",
|
||||
"arm,sbsa-gwdt",
|
||||
};
|
||||
|
||||
/* Bail out if we are not running under Gunyah */
|
||||
if (!IS_ENABLED(CONFIG_HAVE_ARM_SMCCC_DISCOVERY) ||
|
||||
!arm_smccc_hypervisor_has_uuid(&gunyah_uuid))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Gunyah emulates either of Qualcomm watchdog or ARM SBSA watchdog on
|
||||
* newer platforms. Bail out if we find them in the devicetree.
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(of_wdt_compatible); i++) {
|
||||
np = of_find_compatible_node(NULL, NULL, of_wdt_compatible[i]);
|
||||
of_wdt_available = of_device_is_available(np);
|
||||
of_node_put(np);
|
||||
if (of_wdt_available)
|
||||
return;
|
||||
}
|
||||
|
||||
gunyah_wdt_dev = platform_device_register_simple("gunyah-wdt", -1,
|
||||
NULL, 0);
|
||||
if (IS_ERR(gunyah_wdt_dev)) {
|
||||
dev_err(scm->dev, "Failed to register Gunyah watchdog device: %ld\n",
|
||||
PTR_ERR(gunyah_wdt_dev));
|
||||
return;
|
||||
}
|
||||
|
||||
devm_add_action_or_reset(scm->dev, qcom_scm_gunyah_wdt_free,
|
||||
gunyah_wdt_dev);
|
||||
}
|
||||
|
||||
static void qcom_scm_qtee_free(void *data)
|
||||
{
|
||||
struct platform_device *qtee_dev = data;
|
||||
@@ -2811,6 +2864,9 @@ static int qcom_scm_probe(struct platform_device *pdev)
|
||||
/* Initialize the QTEE object interface. */
|
||||
qcom_scm_qtee_init(scm);
|
||||
|
||||
/* Initialize the Gunyah watchdog platform device. */
|
||||
qcom_scm_gunyah_wdt_init(scm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user