mbox series

[00/11] arm64: qcom: add and enable SHM Bridge support

Message ID 20230828192507.117334-1-bartosz.golaszewski@linaro.org (mailing list archive)
Headers show
Series arm64: qcom: add and enable SHM Bridge support | expand

Message

Bartosz Golaszewski Aug. 28, 2023, 7:24 p.m. UTC
SHM Bridge is a mechanism allowing to map limited areas of kernel's
virtual memory to physical addresses and share those with the
trustzone in order to not expose the entire RAM for SMC calls.

This series adds support for Qualcomm SHM Bridge in form of a platform
driver and library functions available to users. It enables SHM Bridge
support for three platforms and contains a bunch of cleanups for
qcom-scm.

Bartosz Golaszewski (11):
  firmware: qcom-scm: drop unneeded 'extern' specifiers
  firmware: qcom-scm: order includes alphabetically
  firmware: qcom-scm: atomically assign and read the global __scm
    pointer
  firmware: qcom-scm: add support for SHM bridge operations
  dt-bindings: document the Qualcomm TEE Shared Memory Bridge
  firmware: qcom-shm-bridge: new driver
  firmware: qcom-scm: use SHM bridge if available
  arm64: defconfig: enable Qualcomm SHM bridge module
  arm64: dts: qcom: sm8450: enable SHM bridge
  arm64: dts: qcom: sa8775p: enable SHM bridge
  arm64: dts: qcom: sm8150: enable SHM bridge

 .../bindings/firmware/qcom,shm-bridge.yaml    |  36 ++
 arch/arm64/boot/dts/qcom/sa8775p.dtsi         |   4 +
 arch/arm64/boot/dts/qcom/sm8150.dtsi          |   4 +
 arch/arm64/boot/dts/qcom/sm8450.dtsi          |   4 +
 arch/arm64/configs/defconfig                  |   1 +
 drivers/firmware/Kconfig                      |   8 +
 drivers/firmware/Makefile                     |   1 +
 drivers/firmware/qcom-shm-bridge.c            | 452 ++++++++++++++++++
 drivers/firmware/qcom_scm-smc.c               |  20 +-
 drivers/firmware/qcom_scm.c                   | 106 +++-
 drivers/firmware/qcom_scm.h                   |   3 +
 include/linux/firmware/qcom/qcom_scm.h        | 109 +++--
 include/linux/firmware/qcom/shm-bridge.h      |  32 ++
 13 files changed, 712 insertions(+), 68 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/firmware/qcom,shm-bridge.yaml
 create mode 100644 drivers/firmware/qcom-shm-bridge.c
 create mode 100644 include/linux/firmware/qcom/shm-bridge.h

Comments

Dmitry Baryshkov Aug. 28, 2023, 9:23 p.m. UTC | #1
On Mon, 28 Aug 2023 at 22:29, Bartosz Golaszewski
<bartosz.golaszewski@linaro.org> wrote:
>
> SHM Bridge is a mechanism allowing to map limited areas of kernel's
> virtual memory to physical addresses and share those with the
> trustzone in order to not expose the entire RAM for SMC calls.
>
> This series adds support for Qualcomm SHM Bridge in form of a platform
> driver and library functions available to users. It enables SHM Bridge
> support for three platforms and contains a bunch of cleanups for
> qcom-scm.

Which users do you expect for this API?

Also, could you please describe your design a bit more? Why have you
implemented the shm-bridge as a separate driver rather than a part of
the SCM driver?

>
> Bartosz Golaszewski (11):
>   firmware: qcom-scm: drop unneeded 'extern' specifiers
>   firmware: qcom-scm: order includes alphabetically
>   firmware: qcom-scm: atomically assign and read the global __scm
>     pointer
>   firmware: qcom-scm: add support for SHM bridge operations
>   dt-bindings: document the Qualcomm TEE Shared Memory Bridge
>   firmware: qcom-shm-bridge: new driver
>   firmware: qcom-scm: use SHM bridge if available
>   arm64: defconfig: enable Qualcomm SHM bridge module
>   arm64: dts: qcom: sm8450: enable SHM bridge
>   arm64: dts: qcom: sa8775p: enable SHM bridge
>   arm64: dts: qcom: sm8150: enable SHM bridge
>
>  .../bindings/firmware/qcom,shm-bridge.yaml    |  36 ++
>  arch/arm64/boot/dts/qcom/sa8775p.dtsi         |   4 +
>  arch/arm64/boot/dts/qcom/sm8150.dtsi          |   4 +
>  arch/arm64/boot/dts/qcom/sm8450.dtsi          |   4 +
>  arch/arm64/configs/defconfig                  |   1 +
>  drivers/firmware/Kconfig                      |   8 +
>  drivers/firmware/Makefile                     |   1 +
>  drivers/firmware/qcom-shm-bridge.c            | 452 ++++++++++++++++++
>  drivers/firmware/qcom_scm-smc.c               |  20 +-
>  drivers/firmware/qcom_scm.c                   | 106 +++-
>  drivers/firmware/qcom_scm.h                   |   3 +
>  include/linux/firmware/qcom/qcom_scm.h        | 109 +++--
>  include/linux/firmware/qcom/shm-bridge.h      |  32 ++
>  13 files changed, 712 insertions(+), 68 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/firmware/qcom,shm-bridge.yaml
>  create mode 100644 drivers/firmware/qcom-shm-bridge.c
>  create mode 100644 include/linux/firmware/qcom/shm-bridge.h
>
> --
> 2.39.2
>
Bartosz Golaszewski Aug. 29, 2023, 7:03 p.m. UTC | #2
On Mon, 28 Aug 2023 at 23:24, Dmitry Baryshkov
<dmitry.baryshkov@linaro.org> wrote:
>
> On Mon, 28 Aug 2023 at 22:29, Bartosz Golaszewski
> <bartosz.golaszewski@linaro.org> wrote:
> >
> > SHM Bridge is a mechanism allowing to map limited areas of kernel's
> > virtual memory to physical addresses and share those with the
> > trustzone in order to not expose the entire RAM for SMC calls.
> >
> > This series adds support for Qualcomm SHM Bridge in form of a platform
> > driver and library functions available to users. It enables SHM Bridge
> > support for three platforms and contains a bunch of cleanups for
> > qcom-scm.
>
> Which users do you expect for this API?
>

This series adds a single user: the SCM driver. We have another user
almost ready for upstream in the form of the scminvoke driver and I
learned today, I can already convert another user upstream right now
that I will try to get ready for v2.

> Also, could you please describe your design a bit more? Why have you
> implemented the shm-bridge as a separate driver rather than a part of
> the SCM driver?
>

It's self-contained enough to be put into a separate module and not
all platforms support it so in order to avoid unnecessary ifdeffery in
the scm driver, I made it separate.

Bart

> >
> > Bartosz Golaszewski (11):
> >   firmware: qcom-scm: drop unneeded 'extern' specifiers
> >   firmware: qcom-scm: order includes alphabetically
> >   firmware: qcom-scm: atomically assign and read the global __scm
> >     pointer
> >   firmware: qcom-scm: add support for SHM bridge operations
> >   dt-bindings: document the Qualcomm TEE Shared Memory Bridge
> >   firmware: qcom-shm-bridge: new driver
> >   firmware: qcom-scm: use SHM bridge if available
> >   arm64: defconfig: enable Qualcomm SHM bridge module
> >   arm64: dts: qcom: sm8450: enable SHM bridge
> >   arm64: dts: qcom: sa8775p: enable SHM bridge
> >   arm64: dts: qcom: sm8150: enable SHM bridge
> >
> >  .../bindings/firmware/qcom,shm-bridge.yaml    |  36 ++
> >  arch/arm64/boot/dts/qcom/sa8775p.dtsi         |   4 +
> >  arch/arm64/boot/dts/qcom/sm8150.dtsi          |   4 +
> >  arch/arm64/boot/dts/qcom/sm8450.dtsi          |   4 +
> >  arch/arm64/configs/defconfig                  |   1 +
> >  drivers/firmware/Kconfig                      |   8 +
> >  drivers/firmware/Makefile                     |   1 +
> >  drivers/firmware/qcom-shm-bridge.c            | 452 ++++++++++++++++++
> >  drivers/firmware/qcom_scm-smc.c               |  20 +-
> >  drivers/firmware/qcom_scm.c                   | 106 +++-
> >  drivers/firmware/qcom_scm.h                   |   3 +
> >  include/linux/firmware/qcom/qcom_scm.h        | 109 +++--
> >  include/linux/firmware/qcom/shm-bridge.h      |  32 ++
> >  13 files changed, 712 insertions(+), 68 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/firmware/qcom,shm-bridge.yaml
> >  create mode 100644 drivers/firmware/qcom-shm-bridge.c
> >  create mode 100644 include/linux/firmware/qcom/shm-bridge.h
> >
> > --
> > 2.39.2
> >
>
>
> --
> With best wishes
> Dmitry
Dmitry Baryshkov Aug. 29, 2023, 8:48 p.m. UTC | #3
On Tue, 29 Aug 2023 at 22:03, Bartosz Golaszewski
<bartosz.golaszewski@linaro.org> wrote:
>
> On Mon, 28 Aug 2023 at 23:24, Dmitry Baryshkov
> <dmitry.baryshkov@linaro.org> wrote:
> >
> > On Mon, 28 Aug 2023 at 22:29, Bartosz Golaszewski
> > <bartosz.golaszewski@linaro.org> wrote:
> > >
> > > SHM Bridge is a mechanism allowing to map limited areas of kernel's
> > > virtual memory to physical addresses and share those with the
> > > trustzone in order to not expose the entire RAM for SMC calls.
> > >
> > > This series adds support for Qualcomm SHM Bridge in form of a platform
> > > driver and library functions available to users. It enables SHM Bridge
> > > support for three platforms and contains a bunch of cleanups for
> > > qcom-scm.
> >
> > Which users do you expect for this API?
> >
>
> This series adds a single user: the SCM driver. We have another user
> almost ready for upstream in the form of the scminvoke driver and I
> learned today, I can already convert another user upstream right now
> that I will try to get ready for v2.
>
> > Also, could you please describe your design a bit more? Why have you
> > implemented the shm-bridge as a separate driver rather than a part of
> > the SCM driver?
> >
>
> It's self-contained enough to be put into a separate module and not
> all platforms support it so in order to avoid unnecessary ifdeffery in
> the scm driver, I made it separate.

Judging from other reviews, I'm not the only one who questioned this
design. I still suppose that it might be better to move it into the
SCM driver. You can put ifdef's to the header file defining the
interface between SCM and SHM bridge part.
Bjorn Andersson Sept. 14, 2023, 7:36 p.m. UTC | #4
On Mon, 28 Aug 2023 21:24:56 +0200, Bartosz Golaszewski wrote:
> SHM Bridge is a mechanism allowing to map limited areas of kernel's
> virtual memory to physical addresses and share those with the
> trustzone in order to not expose the entire RAM for SMC calls.
> 
> This series adds support for Qualcomm SHM Bridge in form of a platform
> driver and library functions available to users. It enables SHM Bridge
> support for three platforms and contains a bunch of cleanups for
> qcom-scm.
> 
> [...]

Applied, thanks!

[01/11] firmware: qcom-scm: drop unneeded 'extern' specifiers
        commit: 2758ac3a11d78af56e6969af04dec611806a62de
[02/11] firmware: qcom-scm: order includes alphabetically
        commit: bc7fbb5ea701b22c09c0fa5acbc122207283366a

Best regards,