mbox series

[v6,0/6] firmware: Add initial support for Arm FF-A

Message ID 20210505093843.3308691-1-sudeep.holla@arm.com (mailing list archive)
Headers show
Series firmware: Add initial support for Arm FF-A | expand

Message

Sudeep Holla May 5, 2021, 9:38 a.m. UTC
Hi all,

This is very basic implementation for in-kernel support for Arm FF-A
specification.

Arm Firmware Framework for Armv8-A specification[1] describes a software
architecture that provides mechanism to utilise the virtualization
extension to isolate software images and describes interfaces that
standardize communication between the various software images. This
includes communication between images in the Secure and Normal world.

The main idea here is to create FFA device to establish any communication
with a secure partition. This is currently tested with OPTEE(with changes
to OPTEE driver adding FFA as transport)

The series can be fetched from [2]

--
Regards,
Sudeep

[1] https://developer.arm.com/documentation/den0077/latest
[2] git://git.kerniel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git v5.13/ffa


v5->v6:
	- Dropped DT dependecy completely and use the discovery APIs for
	  adding FFA partitions on the bus. They is some workaround added
	  as v1.0 doesn't provide UUID as part of the discovery APIs which
	  is used to match the devices and driver on FFA bus.
	- Extended SMCCC v1.2 API to support full set of input and output
	  registers.
	- Couple of minor bug fixes found as part of testing

v4->v5:
	- Fixed couple of comments in DT bindings
	- Moved to use native version of RXTX_MAP call, fixed vm_id param
	  to RXTX_UNMAP, dropped couple of unused confusingly named macros
	  (can be added back with correct name when we need to use them)

v3->v4:
	- Added support to allow partitions to set 32bit only mode
	- Addressed all the comments from Jens Wiklander

v2->v3:
	- Dropped hypervisor partitions and userspace support as it is
	  no longer in the list of requirements
	- Moved away from ioctl style interface for in-kernel users as
	  there is no need to keep in sync with userspace anymore
	- Some kerneldoc fixes as pointed out in earlier reviews

v1->v2:
	- Moved userspace code to a separate unit, will move to separate
	  module. Still working on minimizing initcall dependencies and
	  exported functions to reuse some of the code.
	- Fixed couple of minor issues pointed out
	- Dropped ASYNC send message as I haven't been able to test

Sudeep Holla (6):
  arm64: smccc: Add support for SMCCCv1.2 extended input/output registers
  firmware: arm_ffa: Add initial FFA bus support for device enumeration
  firmware: arm_ffa: Add initial Arm FFA driver support
  firmware: arm_ffa: Add support for SMCCC as transport to FFA driver
  firmware: arm_ffa: Setup in-kernel users of FFA partitions
  firmware: arm_ffa: Add support for MEM_* interfaces

 MAINTAINERS                       |   7 +
 arch/arm64/kernel/asm-offsets.c   |   9 +
 arch/arm64/kernel/smccc-call.S    |  57 +++
 drivers/firmware/Kconfig          |   1 +
 drivers/firmware/Makefile         |   1 +
 drivers/firmware/arm_ffa/Kconfig  |  21 +
 drivers/firmware/arm_ffa/Makefile |   6 +
 drivers/firmware/arm_ffa/bus.c    | 210 +++++++++
 drivers/firmware/arm_ffa/common.h |  31 ++
 drivers/firmware/arm_ffa/driver.c | 719 ++++++++++++++++++++++++++++++
 drivers/firmware/arm_ffa/smccc.c  |  39 ++
 include/linux/arm-smccc.h         |  55 +++
 include/linux/arm_ffa.h           | 266 +++++++++++
 13 files changed, 1422 insertions(+)
 create mode 100644 drivers/firmware/arm_ffa/Kconfig
 create mode 100644 drivers/firmware/arm_ffa/Makefile
 create mode 100644 drivers/firmware/arm_ffa/bus.c
 create mode 100644 drivers/firmware/arm_ffa/common.h
 create mode 100644 drivers/firmware/arm_ffa/driver.c
 create mode 100644 drivers/firmware/arm_ffa/smccc.c
 create mode 100644 include/linux/arm_ffa.h

Comments

Jens Wiklander May 20, 2021, 1:20 p.m. UTC | #1
On Wed, May 5, 2021 at 11:38 AM Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> Hi all,
>
> This is very basic implementation for in-kernel support for Arm FF-A
> specification.
>
> Arm Firmware Framework for Armv8-A specification[1] describes a software
> architecture that provides mechanism to utilise the virtualization
> extension to isolate software images and describes interfaces that
> standardize communication between the various software images. This
> includes communication between images in the Secure and Normal world.
>
> The main idea here is to create FFA device to establish any communication
> with a secure partition. This is currently tested with OPTEE(with changes
> to OPTEE driver adding FFA as transport)
>
> The series can be fetched from [2]
>
> --
> Regards,
> Sudeep
>
> [1] https://developer.arm.com/documentation/den0077/latest
> [2] git://git.kerniel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git v5.13/ffa

Tested OK with my OP-TEE driver patches on top of 755e78187c4e
("firmware: arm_ffa: Add support for MEM_* interfaces"), which is the
latest on the v5.13/ffa branch above.

Tested-by: Jens Wiklander <jens.wiklander@linaro.org>

Cheers,
Jens


>
>
> v5->v6:
>         - Dropped DT dependecy completely and use the discovery APIs for
>           adding FFA partitions on the bus. They is some workaround added
>           as v1.0 doesn't provide UUID as part of the discovery APIs which
>           is used to match the devices and driver on FFA bus.
>         - Extended SMCCC v1.2 API to support full set of input and output
>           registers.
>         - Couple of minor bug fixes found as part of testing
>
> v4->v5:
>         - Fixed couple of comments in DT bindings
>         - Moved to use native version of RXTX_MAP call, fixed vm_id param
>           to RXTX_UNMAP, dropped couple of unused confusingly named macros
>           (can be added back with correct name when we need to use them)
>
> v3->v4:
>         - Added support to allow partitions to set 32bit only mode
>         - Addressed all the comments from Jens Wiklander
>
> v2->v3:
>         - Dropped hypervisor partitions and userspace support as it is
>           no longer in the list of requirements
>         - Moved away from ioctl style interface for in-kernel users as
>           there is no need to keep in sync with userspace anymore
>         - Some kerneldoc fixes as pointed out in earlier reviews
>
> v1->v2:
>         - Moved userspace code to a separate unit, will move to separate
>           module. Still working on minimizing initcall dependencies and
>           exported functions to reuse some of the code.
>         - Fixed couple of minor issues pointed out
>         - Dropped ASYNC send message as I haven't been able to test
>
> Sudeep Holla (6):
>   arm64: smccc: Add support for SMCCCv1.2 extended input/output registers
>   firmware: arm_ffa: Add initial FFA bus support for device enumeration
>   firmware: arm_ffa: Add initial Arm FFA driver support
>   firmware: arm_ffa: Add support for SMCCC as transport to FFA driver
>   firmware: arm_ffa: Setup in-kernel users of FFA partitions
>   firmware: arm_ffa: Add support for MEM_* interfaces
>
>  MAINTAINERS                       |   7 +
>  arch/arm64/kernel/asm-offsets.c   |   9 +
>  arch/arm64/kernel/smccc-call.S    |  57 +++
>  drivers/firmware/Kconfig          |   1 +
>  drivers/firmware/Makefile         |   1 +
>  drivers/firmware/arm_ffa/Kconfig  |  21 +
>  drivers/firmware/arm_ffa/Makefile |   6 +
>  drivers/firmware/arm_ffa/bus.c    | 210 +++++++++
>  drivers/firmware/arm_ffa/common.h |  31 ++
>  drivers/firmware/arm_ffa/driver.c | 719 ++++++++++++++++++++++++++++++
>  drivers/firmware/arm_ffa/smccc.c  |  39 ++
>  include/linux/arm-smccc.h         |  55 +++
>  include/linux/arm_ffa.h           | 266 +++++++++++
>  13 files changed, 1422 insertions(+)
>  create mode 100644 drivers/firmware/arm_ffa/Kconfig
>  create mode 100644 drivers/firmware/arm_ffa/Makefile
>  create mode 100644 drivers/firmware/arm_ffa/bus.c
>  create mode 100644 drivers/firmware/arm_ffa/common.h
>  create mode 100644 drivers/firmware/arm_ffa/driver.c
>  create mode 100644 drivers/firmware/arm_ffa/smccc.c
>  create mode 100644 include/linux/arm_ffa.h
>
> --
> 2.25.1
>
Sudeep Holla May 20, 2021, 1:34 p.m. UTC | #2
On Thu, May 20, 2021 at 03:20:46PM +0200, Jens Wiklander wrote:
> On Wed, May 5, 2021 at 11:38 AM Sudeep Holla <sudeep.holla@arm.com> wrote:
> >
> > Hi all,
> >
> > This is very basic implementation for in-kernel support for Arm FF-A
> > specification.
> >
> > Arm Firmware Framework for Armv8-A specification[1] describes a software
> > architecture that provides mechanism to utilise the virtualization
> > extension to isolate software images and describes interfaces that
> > standardize communication between the various software images. This
> > includes communication between images in the Secure and Normal world.
> >
> > The main idea here is to create FFA device to establish any communication
> > with a secure partition. This is currently tested with OPTEE(with changes
> > to OPTEE driver adding FFA as transport)
> >
> > The series can be fetched from [2]
> >
> > --
> > Regards,
> > Sudeep
> >
> > [1] https://developer.arm.com/documentation/den0077/latest
> > [2] git://git.kerniel.org/pub/scm/linux/kernel/git/sudeep.holla/linux.git v5.13/ffa
> 
> Tested OK with my OP-TEE driver patches on top of 755e78187c4e
> ("firmware: arm_ffa: Add support for MEM_* interfaces"), which is the
> latest on the v5.13/ffa branch above.
> 
> Tested-by: Jens Wiklander <jens.wiklander@linaro.org>
> 

Thanks Jens for testing, much appreciated!