[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <265e23fb-8865-4dee-99ed-f08450975ba8@oss.qualcomm.com>
Date: Wed, 27 Aug 2025 16:06:16 +1000
From: Amirreza Zarrabi <amirreza.zarrabi@....qualcomm.com>
To: Bjorn Andersson <andersson@...nel.org>
Cc: Jens Wiklander <jens.wiklander@...aro.org>,
Sumit Garg <sumit.garg@...nel.org>,
Konrad Dybcio <konradybcio@...nel.org>,
Bartosz Golaszewski <bartosz.golaszewski@...aro.org>,
Apurupa Pattapu <quic_apurupa@...cinc.com>,
Kees Cook <kees@...nel.org>,
"Gustavo A. R. Silva" <gustavoars@...nel.org>,
Sumit Semwal <sumit.semwal@...aro.org>,
Christian König <christian.koenig@....com>,
Harshal Dev <quic_hdev@...cinc.com>, linux-arm-msm@...r.kernel.org,
op-tee@...ts.trustedfirmware.org, linux-kernel@...r.kernel.org,
linux-hardening@...r.kernel.org, dri-devel@...ts.freedesktop.org,
linaro-mm-sig@...ts.linaro.org, linux-doc@...r.kernel.org,
Neil Armstrong <neil.armstrong@...aro.org>
Subject: Re: [PATCH v8 06/11] firmware: qcom: scm: add support for object
invocation
Hi Bjorn,
On 8/27/2025 1:52 AM, Bjorn Andersson wrote:
> On Wed, Aug 20, 2025 at 04:38:53PM -0700, Amirreza Zarrabi wrote:
>> diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c
> [..]
>> +static void qcom_scm_qtee_free(void *data)
>> +{
>> + struct platform_device *qtee_dev = data;
>> +
>> + platform_device_unregister(qtee_dev);
>> +}
>> +
>> +static int qcom_scm_qtee_init(struct qcom_scm *scm)
>> +{
>> + struct platform_device *qtee_dev;
>> + u64 result, response_type;
>> + int ret;
>> +
>> + /*
>> + * Check if QTEE supports smcinvoke:
>> + * This will fail due to invalid buffers, but first, it checks whether
>> + * the call is supported in QTEE syscall handler.
>> + * If not supported, -EIO is returned.
>> + */
>> + ret = qcom_scm_qtee_invoke_smc(0, 0, 0, 0, &result, &response_type);
>> + if (ret == -EIO)
>> + return -EIO;
>> +
>> + /* Setup QTEE interface device. */
>> + qtee_dev = platform_device_alloc("qcomtee", -1);
>> + if (!qtee_dev)
>> + return -ENOMEM;
>> +
>> + qtee_dev->dev.parent = scm->dev;
>> +
>> + ret = platform_device_add(qtee_dev);
>> + if (ret) {
>> + platform_device_put(qtee_dev);
>> + return ret;
>> + }
>
> Wouldn't this work instead of the alloc + parent + add?
>
> qtee_dev = platform_device_alloc_data(scm->dev, "qcomtee", -1, NULL, 0);
> if (IS_ERR(qtee_dev))
> return PTR_ERR(qtee_dev);
>
You are right, I'll replace it with platform_device_register_data().
>> +
>> + return devm_add_action_or_reset(scm->dev, qcom_scm_qtee_free, qtee_dev);
>> +}
>> +
>> /**
>> * qcom_scm_is_available() - Checks if SCM is available
>> */
>> @@ -2326,6 +2450,16 @@ static int qcom_scm_probe(struct platform_device *pdev)
>> ret = qcom_scm_qseecom_init(scm);
>> WARN(ret < 0, "failed to initialize qseecom: %d\n", ret);
>>
>> + /*
>> + * Initialize the QTEE object interface.
>> + *
>> + * This only represents the availability for QTEE object invocation
>> + * and callback support. On failure, ignore the result. Any subsystem
>> + * depending on it may fail if it tries to access this interface.
>> + */
>> + ret = qcom_scm_qtee_init(scm);
>> + dev_warn_probe(scm->dev, ret, "Failed to initialize qcomtee\n");
>
> A successful boot of db410c (APQ8016) now has the following in the log:
>
> [ 0.161437] qcom_scm firmware:scm: error -EIO: Failed to initialize qcomtee
>
> If the target doesn't implement qtee, I'd expect that you tell me that -
> or preferably stay silent.
>
> Looking at the other error conditions, we find -ENOMEM, for which you
> should also avoid printing. In fact, I believe all other error paths of
> qcom_scm_qtee_init() will have printed an error already (if not, please
> move the error print to the place(s) where it's needed).
>
> As you're ignoring the return value, please then also change the return
> type of the function to void.
>
> Regards,
> Bjorn
>
Sure, a successful QTEE boot already logs its version from TEE SS,
along with any internal error messages. Based on those logs,
it's quite clear whether this function failed or succeeded at the
beginning. I'll remove the print statements.
Regards,
Amir
>> +
>> return 0;
>> }
Powered by blists - more mailing lists