From: Amirreza Zarrabi <quic_azarrabi@quicinc.com>
To: Sumit Garg <sumit.garg@linaro.org>
Cc: Jens Wiklander <jens.wiklander@linaro.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
<linux-arm-msm@vger.kernel.org>,
<op-tee@lists.trustedfirmware.org>,
<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-doc@vger.kernel.org>
Subject: Re: [PATCH v2 0/8] Trusted Execution Environment (TEE) driver for Qualcomm TEE (QTEE)
Date: Fri, 7 Feb 2025 06:55:08 +1100 [thread overview]
Message-ID: <f3b30e00-d6cd-44ee-88a5-e5a523563bb3@quicinc.com> (raw)
In-Reply-To: <CAFA6WYNGH_LP-R4hQx-+XMY3zFN74ij-JngwnuKOsz8=r_-bsQ@mail.gmail.com>
On 2/5/2025 4:38 PM, Sumit Garg wrote:
> Hi Amirreza,
>
> On Mon, 3 Feb 2025 at 08:14, Amirreza Zarrabi <quic_azarrabi@quicinc.com> wrote:
>>
>> This patch series introduces a Trusted Execution Environment (TEE)
>> driver for Qualcomm TEE (QTEE). QTEE enables Trusted Applications (TAs)
>> and services to run securely. It uses an object-based interface, where
>> each service is an object with sets of operations. Clients can invoke
>> these operations on objects, which can generate results, including other
>> objects. For example, an object can load a TA and return another object
>> that represents the loaded TA, allowing access to its services.
>>
>> Kernel and userspace services are also available to QTEE through a
>> similar approach. QTEE makes callback requests that are converted into
>> object invocations. These objects can represent services within the
>> kernel or userspace process.
>>
>> Note: This patch series focuses on QTEE objects and userspace services.
>>
>> Linux already provides a TEE subsystem, which is described in [1]. The
>> tee subsystem provides a generic ioctl interface, TEE_IOC_INVOKE, which
>> can be used by userspace to talk to a TEE backend driver. We extend the
>> Linux TEE subsystem to understand object parameters and an ioctl call so
>> client can invoke objects in QTEE:
>>
>> - TEE_IOCTL_PARAM_ATTR_TYPE_OBJREF_*
>> - TEE_IOC_OBJECT_INVOKE
>>
>> The existing ioctl calls TEE_IOC_SUPPL_RECV and TEE_IOC_SUPPL_SEND are
>> used for invoking services in the userspace process by QTEE.
>>
>> The TEE backend driver uses the QTEE Transport Message to communicate
>> with QTEE. Interactions through the object INVOKE interface are
>> translated into QTEE messages. Likewise, object invocations from QTEE
>> for userspace objects are converted into SEND/RECV ioctl calls to
>> supplicants.
>>
>> The details of QTEE Transport Message to communicate with QTEE is
>> available in [PATCH 10/10] Documentation: tee: Add Qualcomm TEE driver.
>>
>> You can run basic tests with following steps:
>> git clone https://github.com/quic/quic-teec.git
>> cd quic-teec
>> mkdir build
>> cmake .. -DCMAKE_TOOLCHAIN_FILE=CMakeToolchain.txt -DBUILD_UNITTEST=ON
>>
>> https://github.com/quic/quic-teec/blob/main/README.md lists dependancies
>> needed to build the above.
>>
>> This series has been tested for basic QTEE object invocations and
>> callback requests, including loading a TA and requesting services form
>> the TA.
>
> Thanks for sharing these test user-space applications/libraries. Can I
> know which platforms are currently supported by this QTEE driver? I
> would like to run and understand the overall stack on a real device. I
> do have rb3, rb5 and db410c on my desk to test with.
>
> Also, platform support is important information you should put in the
> cover letter as well as the QTEE documentation.
>
> -Sumit
>
I have tested it with sm8650-mtp. But would expect it to work with any platform.
I'll update the cover letter with the details :).
- Amir
>>
>> [1] https://www.kernel.org/doc/Documentation/tee.txt
>>
>> Signed-off-by: Amirreza Zarrabi <quic_azarrabi@quicinc.com>
>> ---
>> Changes in v2:
>> - Clean up commit messages and comments.
>> - Use better names such as ubuf instead of membuf or QCOMTEE prefix
>> instead of QCOM_TEE, or names that are more consistent with other
>> TEE-backend drivers such as qcomtee_context_data instead of
>> qcom_tee_context.
>> - Drop the DTS patch and instantiate the device from the scm driver.
>> - Use a single structure for all driver's internal states.
>> - Drop srcu primitives and use the existing mutex for synchronization
>> between the supplicant and QTEE.
>> - Directly use tee_context to track the lifetime of qcomtee_context_data.
>> - Add close_context() to be called when the user closes the tee_context.
>> - Link to v1: https://lore.kernel.org/r/20241202-qcom-tee-using-tee-ss-without-mem-obj-v1-0-f502ef01e016@quicinc.com
>>
>> Changes in v1:
>> - It is a complete rewrite to utilize the TEE subsystem.
>> - Link to RFC: https://lore.kernel.org/all/20240702-qcom-tee-object-and-ioctls-v1-0-633c3ddf57ee@quicinc.com
>>
>> ---
>> Amirreza Zarrabi (8):
>> tee: allow a driver to allocate a tee_device without a pool
>> tee: add close_context to TEE driver operation
>> tee: add TEE_IOCTL_PARAM_ATTR_TYPE_UBUF
>> tee: add TEE_IOCTL_PARAM_ATTR_TYPE_OBJREF
>> firmware: qcom: scm: add support for object invocation
>> tee: add Qualcomm TEE driver
>> qcomtee: add primordial object
>> Documentation: tee: Add Qualcomm TEE driver
>>
>> Documentation/tee/index.rst | 1 +
>> Documentation/tee/qtee.rst | 150 ++++++
>> drivers/firmware/qcom/qcom_scm.c | 128 ++++++
>> drivers/firmware/qcom/qcom_scm.h | 7 +
>> drivers/tee/Kconfig | 1 +
>> drivers/tee/Makefile | 1 +
>> drivers/tee/qcomtee/Kconfig | 10 +
>> drivers/tee/qcomtee/Makefile | 10 +
>> drivers/tee/qcomtee/async.c | 160 +++++++
>> drivers/tee/qcomtee/call.c | 741 ++++++++++++++++++++++++++++++
>> drivers/tee/qcomtee/core.c | 810 +++++++++++++++++++++++++++++++++
>> drivers/tee/qcomtee/primordial_obj.c | 65 +++
>> drivers/tee/qcomtee/qcom_scm.c | 36 ++
>> drivers/tee/qcomtee/qcomtee_msg.h | 234 ++++++++++
>> drivers/tee/qcomtee/qcomtee_private.h | 226 +++++++++
>> drivers/tee/qcomtee/release.c | 59 +++
>> drivers/tee/qcomtee/shm.c | 102 +++++
>> drivers/tee/qcomtee/user_obj.c | 712 +++++++++++++++++++++++++++++
>> drivers/tee/tee_core.c | 121 ++++-
>> drivers/tee/tee_private.h | 6 -
>> include/linux/firmware/qcom/qcom_scm.h | 27 ++
>> include/linux/firmware/qcom/qcom_tee.h | 286 ++++++++++++
>> include/linux/tee_core.h | 15 +-
>> include/linux/tee_drv.h | 18 +
>> include/uapi/linux/tee.h | 54 ++-
>> 25 files changed, 3964 insertions(+), 16 deletions(-)
>> ---
>> base-commit: dab2734f8e9ecba609d66d1dd087a392a7774c04
>> change-id: 20241202-qcom-tee-using-tee-ss-without-mem-obj-362c66340527
>>
>> Best regards,
>> --
>> Amirreza Zarrabi <quic_azarrabi@quicinc.com>
>>
WARNING: multiple messages have this Message-ID (diff)
From: Amirreza Zarrabi <quic_azarrabi@quicinc.com>
To: op-tee@lists.trustedfirmware.org
Subject: Re: [PATCH v2 0/8] Trusted Execution Environment (TEE) driver for Qualcomm TEE (QTEE)
Date: Fri, 07 Feb 2025 06:55:08 +1100 [thread overview]
Message-ID: <f3b30e00-d6cd-44ee-88a5-e5a523563bb3@quicinc.com> (raw)
In-Reply-To: < <CAFA6WYNGH_LP-R4hQx-+XMY3zFN74ij-JngwnuKOsz8=r_-bsQ@mail.gmail.com>>
[-- Attachment #1: Type: text/plain, Size: 6453 bytes --]
On 2/5/2025 4:38 PM, Sumit Garg wrote:
> Hi Amirreza,
>
> On Mon, 3 Feb 2025 at 08:14, Amirreza Zarrabi <quic_azarrabi@quicinc.com> wrote:
>>
>> This patch series introduces a Trusted Execution Environment (TEE)
>> driver for Qualcomm TEE (QTEE). QTEE enables Trusted Applications (TAs)
>> and services to run securely. It uses an object-based interface, where
>> each service is an object with sets of operations. Clients can invoke
>> these operations on objects, which can generate results, including other
>> objects. For example, an object can load a TA and return another object
>> that represents the loaded TA, allowing access to its services.
>>
>> Kernel and userspace services are also available to QTEE through a
>> similar approach. QTEE makes callback requests that are converted into
>> object invocations. These objects can represent services within the
>> kernel or userspace process.
>>
>> Note: This patch series focuses on QTEE objects and userspace services.
>>
>> Linux already provides a TEE subsystem, which is described in [1]. The
>> tee subsystem provides a generic ioctl interface, TEE_IOC_INVOKE, which
>> can be used by userspace to talk to a TEE backend driver. We extend the
>> Linux TEE subsystem to understand object parameters and an ioctl call so
>> client can invoke objects in QTEE:
>>
>> - TEE_IOCTL_PARAM_ATTR_TYPE_OBJREF_*
>> - TEE_IOC_OBJECT_INVOKE
>>
>> The existing ioctl calls TEE_IOC_SUPPL_RECV and TEE_IOC_SUPPL_SEND are
>> used for invoking services in the userspace process by QTEE.
>>
>> The TEE backend driver uses the QTEE Transport Message to communicate
>> with QTEE. Interactions through the object INVOKE interface are
>> translated into QTEE messages. Likewise, object invocations from QTEE
>> for userspace objects are converted into SEND/RECV ioctl calls to
>> supplicants.
>>
>> The details of QTEE Transport Message to communicate with QTEE is
>> available in [PATCH 10/10] Documentation: tee: Add Qualcomm TEE driver.
>>
>> You can run basic tests with following steps:
>> git clone https://github.com/quic/quic-teec.git
>> cd quic-teec
>> mkdir build
>> cmake .. -DCMAKE_TOOLCHAIN_FILE=CMakeToolchain.txt -DBUILD_UNITTEST=ON
>>
>> https://github.com/quic/quic-teec/blob/main/README.md lists dependancies
>> needed to build the above.
>>
>> This series has been tested for basic QTEE object invocations and
>> callback requests, including loading a TA and requesting services form
>> the TA.
>
> Thanks for sharing these test user-space applications/libraries. Can I
> know which platforms are currently supported by this QTEE driver? I
> would like to run and understand the overall stack on a real device. I
> do have rb3, rb5 and db410c on my desk to test with.
>
> Also, platform support is important information you should put in the
> cover letter as well as the QTEE documentation.
>
> -Sumit
>
I have tested it with sm8650-mtp. But would expect it to work with any platform.
I'll update the cover letter with the details :).
- Amir
>>
>> [1] https://www.kernel.org/doc/Documentation/tee.txt
>>
>> Signed-off-by: Amirreza Zarrabi <quic_azarrabi@quicinc.com>
>> ---
>> Changes in v2:
>> - Clean up commit messages and comments.
>> - Use better names such as ubuf instead of membuf or QCOMTEE prefix
>> instead of QCOM_TEE, or names that are more consistent with other
>> TEE-backend drivers such as qcomtee_context_data instead of
>> qcom_tee_context.
>> - Drop the DTS patch and instantiate the device from the scm driver.
>> - Use a single structure for all driver's internal states.
>> - Drop srcu primitives and use the existing mutex for synchronization
>> between the supplicant and QTEE.
>> - Directly use tee_context to track the lifetime of qcomtee_context_data.
>> - Add close_context() to be called when the user closes the tee_context.
>> - Link to v1: https://lore.kernel.org/r/20241202-qcom-tee-using-tee-ss-without-mem-obj-v1-0-f502ef01e016(a)quicinc.com
>>
>> Changes in v1:
>> - It is a complete rewrite to utilize the TEE subsystem.
>> - Link to RFC: https://lore.kernel.org/all/20240702-qcom-tee-object-and-ioctls-v1-0-633c3ddf57ee(a)quicinc.com
>>
>> ---
>> Amirreza Zarrabi (8):
>> tee: allow a driver to allocate a tee_device without a pool
>> tee: add close_context to TEE driver operation
>> tee: add TEE_IOCTL_PARAM_ATTR_TYPE_UBUF
>> tee: add TEE_IOCTL_PARAM_ATTR_TYPE_OBJREF
>> firmware: qcom: scm: add support for object invocation
>> tee: add Qualcomm TEE driver
>> qcomtee: add primordial object
>> Documentation: tee: Add Qualcomm TEE driver
>>
>> Documentation/tee/index.rst | 1 +
>> Documentation/tee/qtee.rst | 150 ++++++
>> drivers/firmware/qcom/qcom_scm.c | 128 ++++++
>> drivers/firmware/qcom/qcom_scm.h | 7 +
>> drivers/tee/Kconfig | 1 +
>> drivers/tee/Makefile | 1 +
>> drivers/tee/qcomtee/Kconfig | 10 +
>> drivers/tee/qcomtee/Makefile | 10 +
>> drivers/tee/qcomtee/async.c | 160 +++++++
>> drivers/tee/qcomtee/call.c | 741 ++++++++++++++++++++++++++++++
>> drivers/tee/qcomtee/core.c | 810 +++++++++++++++++++++++++++++++++
>> drivers/tee/qcomtee/primordial_obj.c | 65 +++
>> drivers/tee/qcomtee/qcom_scm.c | 36 ++
>> drivers/tee/qcomtee/qcomtee_msg.h | 234 ++++++++++
>> drivers/tee/qcomtee/qcomtee_private.h | 226 +++++++++
>> drivers/tee/qcomtee/release.c | 59 +++
>> drivers/tee/qcomtee/shm.c | 102 +++++
>> drivers/tee/qcomtee/user_obj.c | 712 +++++++++++++++++++++++++++++
>> drivers/tee/tee_core.c | 121 ++++-
>> drivers/tee/tee_private.h | 6 -
>> include/linux/firmware/qcom/qcom_scm.h | 27 ++
>> include/linux/firmware/qcom/qcom_tee.h | 286 ++++++++++++
>> include/linux/tee_core.h | 15 +-
>> include/linux/tee_drv.h | 18 +
>> include/uapi/linux/tee.h | 54 ++-
>> 25 files changed, 3964 insertions(+), 16 deletions(-)
>> ---
>> base-commit: dab2734f8e9ecba609d66d1dd087a392a7774c04
>> change-id: 20241202-qcom-tee-using-tee-ss-without-mem-obj-362c66340527
>>
>> Best regards,
>> --
>> Amirreza Zarrabi <quic_azarrabi@quicinc.com>
>>
next prev parent reply other threads:[~2025-02-06 19:55 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-03 2:43 [PATCH v2 0/8] Trusted Execution Environment (TEE) driver for Qualcomm TEE (QTEE) Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 1/8] tee: allow a driver to allocate a tee_device without a pool Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 2/8] tee: add close_context to TEE driver operation Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-17 9:35 ` Jens Wiklander
2025-02-17 9:35 ` Jens Wiklander
2025-02-17 23:36 ` Amirreza Zarrabi
2025-02-17 23:36 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 3/8] tee: add TEE_IOCTL_PARAM_ATTR_TYPE_UBUF Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-17 10:10 ` Jens Wiklander
2025-02-17 10:10 ` Jens Wiklander
2025-02-17 23:48 ` Amirreza Zarrabi
2025-02-17 23:48 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 4/8] tee: add TEE_IOCTL_PARAM_ATTR_TYPE_OBJREF Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-17 10:28 ` Jens Wiklander
2025-02-17 10:28 ` Jens Wiklander
2025-02-17 23:50 ` Amirreza Zarrabi
2025-02-17 23:50 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 5/8] firmware: qcom: scm: add support for object invocation Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 6/8] tee: add Qualcomm TEE driver Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-03 8:14 ` kernel test robot
2025-02-03 8:14 ` kernel test robot
2025-02-03 10:39 ` kernel test robot
2025-02-03 10:39 ` kernel test robot
2025-02-03 12:44 ` kernel test robot
2025-02-03 12:44 ` kernel test robot
2025-03-04 14:42 ` Jens Wiklander
2025-03-04 14:42 ` Jens Wiklander
2025-03-05 0:12 ` Amirreza Zarrabi
2025-03-05 0:12 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 7/8] qcomtee: add primordial object Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-03 2:43 ` [PATCH v2 8/8] Documentation: tee: Add Qualcomm TEE driver Amirreza Zarrabi
2025-02-03 2:43 ` Amirreza Zarrabi
2025-02-05 2:40 ` Bagas Sanjaya
2025-02-05 2:40 ` Bagas Sanjaya
2025-02-05 5:38 ` [PATCH v2 0/8] Trusted Execution Environment (TEE) driver for Qualcomm TEE (QTEE) Sumit Garg
2025-02-05 5:38 ` Sumit Garg
2025-02-06 19:55 ` Amirreza Zarrabi [this message]
2025-02-06 19:55 ` Amirreza Zarrabi
2025-02-07 5:12 ` Sumit Garg
2025-02-07 5:12 ` Sumit Garg
2025-02-09 20:18 ` Amirreza Zarrabi
2025-02-09 20:18 ` Amirreza Zarrabi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f3b30e00-d6cd-44ee-88a5-e5a523563bb3@quicinc.com \
--to=quic_azarrabi@quicinc.com \
--cc=andersson@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jens.wiklander@linaro.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=op-tee@lists.trustedfirmware.org \
--cc=robh@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
--cc=sumit.garg@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.