So far NuttX has supported OP-TEE interfacing over local and RPMsg sockets. This commit introduces support for direct invocation of OP-TEE through arm SMCs. The SMC transport is enabled through CONFIG_DEV_OPTEE_SMC. This SMC implementation has been tested only with arm64, OP-TEE rev 4.4. Note that it does not support reverse direction RPCs, i.e. from the Secure World to the Normal World to something like optee supplicant. A basic RPC handling skeleton is provided with implementation for some basic functions (alloc/free mem, and foreign interrupts) but no supplicant command handling. (+one minor change s/parm/param in arch/arm64/include/syscall to satisfy the spellchecker during PR) Signed-off-by: George Poulios <gpoulios@census-labs.com>
188 lines
4.4 KiB
Text
188 lines
4.4 KiB
Text
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
config DEV_SIMPLE_ADDRENV
|
|
bool "Simple AddrEnv"
|
|
default n
|
|
|
|
config DEV_NULL
|
|
bool "Enable /dev/null"
|
|
default !DEFAULT_SMALL
|
|
|
|
config DEV_ZERO
|
|
bool "Enable /dev/zero"
|
|
default !DEFAULT_SMALL
|
|
|
|
config DEV_MEM
|
|
bool "Enable /dev/mem"
|
|
default n
|
|
---help---
|
|
It is a full image of physical memory and can be used to
|
|
access physical memory.
|
|
|
|
config DEV_ASCII
|
|
bool "Enable /dev/ascii"
|
|
default n
|
|
---help---
|
|
Enable the /dev/ascii device driver. This is a character driver
|
|
that will return all characters from 0x21-0x7f.
|
|
|
|
config DEV_RPMSG
|
|
bool "RPMSG Device Client Support"
|
|
default n
|
|
depends on RPMSG
|
|
|
|
config DEV_RPMSG_SERVER
|
|
bool "RPMSG Device Server Support"
|
|
default n
|
|
depends on RPMSG
|
|
|
|
choice
|
|
prompt "Select OP-TEE dev implementation"
|
|
default DEV_OPTEE_NONE
|
|
---help---
|
|
There are three implementations of optee server,
|
|
one is soft tee server which does not distinguish
|
|
between secure and non-secure states and uses socket communication,
|
|
and the other two is teeos which runs in the secure state of
|
|
the cpu and uses either RPMsg cross-core communication or arm SMCs.
|
|
Warning: SMC implementation has only been tested on arm64.
|
|
|
|
config DEV_OPTEE_LOCAL
|
|
bool "OPTEE Local Socket Support"
|
|
depends on NET_LOCAL
|
|
depends on LIBC_MEMFD_SHMFS
|
|
depends on ALLOW_BSD_COMPONENTS
|
|
|
|
config DEV_OPTEE_RPMSG
|
|
bool "OP-TEE RPMSG Socket Support"
|
|
depends on NET_RPMSG
|
|
depends on LIBC_MEMFD_SHMFS
|
|
depends on ALLOW_BSD_COMPONENTS
|
|
|
|
config DEV_OPTEE_SMC
|
|
bool "OP-TEE SMC CC Support"
|
|
depends on ARCH_ARM || ARCH_ARM64
|
|
depends on LIBC_MEMFD_SHMFS
|
|
depends on ALLOW_BSD_COMPONENTS
|
|
|
|
config DEV_OPTEE_NONE
|
|
bool "Disable OP-TEE driver"
|
|
|
|
endchoice
|
|
|
|
if DEV_OPTEE_RPMSG
|
|
|
|
config OPTEE_REMOTE_CPU_NAME
|
|
string "The cpuname on which the OP-TEE server runs"
|
|
default "tee"
|
|
|
|
endif # DEV_OPTEE_RPMSG
|
|
|
|
if DEV_OPTEE_SMC
|
|
|
|
choice
|
|
prompt "Select OP-TEE conduit method"
|
|
default DEV_OPTEE_SMC_CONDUIT_SMC
|
|
---help---
|
|
Select between the 2 supported conduit methods for invoking the secure
|
|
world: SMC (when running at EL1) and HVC (when running at EL2, which is
|
|
not supported by NuttX yet).
|
|
|
|
config DEV_OPTEE_SMC_CONDUIT_SMC
|
|
bool "Use SMC calls to invoke OP-TEE"
|
|
|
|
config DEV_OPTEE_SMC_CONDUIT_HVC
|
|
bool "Use HVC calls to invoke OP-TEE"
|
|
|
|
endchoice
|
|
|
|
endif # DEV_OPTEE_SMC
|
|
|
|
config DRVR_MKRD
|
|
bool "RAM disk wrapper (mkrd)"
|
|
default n
|
|
---help---
|
|
Build the mkrd() function which serves as a wrapper to simplify
|
|
creation of RAM disks. If the boardctrl() interface is enabled,
|
|
the selecting this option will also enable the BOARDIOC_MKRD
|
|
command that will support creation of RAM disks from applications.
|
|
|
|
config BLK_RPMSG
|
|
bool "RPMSG Block Client Support"
|
|
default n
|
|
depends on RPMSG
|
|
|
|
config BLK_RPMSG_SERVER
|
|
bool "RPMSG Block Server Support"
|
|
default n
|
|
depends on RPMSG
|
|
|
|
config GOLDFISH_PIPE
|
|
bool "Goldfish Pipe Support"
|
|
default n
|
|
|
|
# ARCH needs to support memory access while CPU is running to be able to use
|
|
# the LWL CONSOLE
|
|
|
|
config ARCH_HAVE_RDWR_MEM_CPU_RUN
|
|
bool
|
|
default n
|
|
|
|
config LWL_CONSOLE
|
|
bool "Lightweight Link Console Support"
|
|
default n
|
|
depends on DEV_CONSOLE && ARCH_HAVE_RDWR_MEM_CPU_RUN
|
|
---help---
|
|
Use the lightweight link console which provides console over a
|
|
debug channel by means of shared memory. A terminal application
|
|
for openocd as the debugger is available in tools/ocdconsole.py.
|
|
|
|
menu "Buffering"
|
|
|
|
config DRVR_WRITEBUFFER
|
|
bool "Enable write buffer support"
|
|
default n
|
|
---help---
|
|
Enable generic write buffering support that can be used by a variety
|
|
of drivers.
|
|
|
|
if DRVR_WRITEBUFFER
|
|
|
|
config DRVR_WRDELAY
|
|
int "Write flush delay"
|
|
default 350
|
|
---help---
|
|
If there is no write activity for this configured amount of time,
|
|
then the contents will be automatically flushed to the media. This
|
|
reduces the likelihood that data will be stuck in the write buffer
|
|
at the time of power down.
|
|
|
|
endif # DRVR_WRITEBUFFER
|
|
|
|
config DRVR_READAHEAD
|
|
bool "Enable read-ahead buffer support"
|
|
default n
|
|
---help---
|
|
Enable generic read-ahead buffering support that can be used by a
|
|
variety of drivers.
|
|
|
|
if DRVR_WRITEBUFFER || DRVR_READAHEAD
|
|
|
|
config DRVR_READBYTES
|
|
bool "Support byte read method"
|
|
default MTD_BYTE_WRITE
|
|
|
|
config DRVR_REMOVABLE
|
|
bool "Support removable media"
|
|
default n
|
|
|
|
config DRVR_INVALIDATE
|
|
bool "Support cache invalidation"
|
|
default n
|
|
|
|
endif # DRVR_WRITEBUFFER || DRVR_READAHEAD
|
|
|
|
endmenu # Buffering
|