|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 1/6] xen/arm: Create tee command line parameter
Hi Bertrand,
On Wed, Apr 16, 2025 at 9:40 AM Bertrand Marquis
<bertrand.marquis@xxxxxxx> wrote:
>
> Add a new command line parameter "tee=" to be used to explicitly select
> what tee mediator is to be used by Xen and fail if it does not exist
> or the probe function for it failed.
>
> Without specifying which tee is to be used, Xen will use the first one
> for which the probe function succeeds which depends on the order of the
> mediator list which depends on the compiler.
> Using the command line argument, it is now possible to explicit request
> a specific TEE mediator and panic on boot if it is not available.
>
> Signed-off-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
> ---
> Changes in v5:
> - Typo fix and rewording in command line doc (Julien)
> - fix include order in tee.c (Julien)
> - use a local bool instead of retesting the string each time in tee_init
> (Julien)
> Changes in v4:
> - None
> Changes in v3:
> - Properly classify tee as arm specific (Jan)
> Changes in v2:
> - Patch introduced to add a command line selection of the TEE
> ---
> docs/misc/xen-command-line.pandoc | 14 +++++++++++++
> xen/arch/arm/include/asm/tee/tee.h | 4 ++++
> xen/arch/arm/tee/tee.c | 32 ++++++++++++++++++++++++++++++
> 3 files changed, 50 insertions(+)
Looks good.
Reviewed-by: Jens Wiklander <jens.wiklander@xxxxxxxxxx>
Cheers,
Jens
>
> diff --git a/docs/misc/xen-command-line.pandoc
> b/docs/misc/xen-command-line.pandoc
> index 89db6e83be66..472de1911363 100644
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -2651,6 +2651,20 @@ Specify the per-cpu trace buffer size in pages.
>
> Flag to enable TSC deadline as the APIC timer mode.
>
> +### tee (arm)
> +> `= <string>`
> +
> +Specify the TEE mediator to be probed and use.
> +
> +The default behaviour is to probe all TEEs supported by Xen and use
> +the first one successfully probed. When this parameter is passed, Xen will
> +probe only the TEE mediator passed as argument and boot will fail if this
> +mediator is not properly probed or if the requested TEE is not supported by
> +Xen.
> +
> +This parameter can be set to `optee` or `ffa` if the corresponding mediators
> +are compiled in.
> +
> ### tevt_mask
> > `= <integer>`
>
> diff --git a/xen/arch/arm/include/asm/tee/tee.h
> b/xen/arch/arm/include/asm/tee/tee.h
> index 0169fd746bcd..15d664e28dce 100644
> --- a/xen/arch/arm/include/asm/tee/tee.h
> +++ b/xen/arch/arm/include/asm/tee/tee.h
> @@ -55,6 +55,9 @@ struct tee_mediator_desc {
> /* Printable name of the TEE. */
> const char *name;
>
> + /* Command line name of the TEE (to be used with tee= cmdline option) */
> + const char *cmdline_name;
> +
> /* Mediator callbacks as described above. */
> const struct tee_mediator_ops *ops;
>
> @@ -77,6 +80,7 @@ void tee_free_domain_ctx(struct domain *d);
> static const struct tee_mediator_desc __tee_desc_##_name __used \
> __section(".teemediator.info") = { \
> .name = _namestr, \
> + .cmdline_name = #_name, \
> .ops = _ops, \
> .tee_type = _type \
> }
> diff --git a/xen/arch/arm/tee/tee.c b/xen/arch/arm/tee/tee.c
> index 3f65e45a7892..8501443c8e57 100644
> --- a/xen/arch/arm/tee/tee.c
> +++ b/xen/arch/arm/tee/tee.c
> @@ -18,6 +18,7 @@
>
> #include <xen/errno.h>
> #include <xen/init.h>
> +#include <xen/param.h>
> #include <xen/types.h>
>
> #include <asm/tee/tee.h>
> @@ -25,6 +26,10 @@
> extern const struct tee_mediator_desc _steemediator[], _eteemediator[];
> static const struct tee_mediator_desc __read_mostly *cur_mediator;
>
> +/* Select the TEE mediator using a name on command line. */
> +static char __initdata opt_mediator[16] = "";
> +string_param("tee", opt_mediator);
> +
> /*
> * TODO: Add function to alter Dom0 DTB, so we can properly describe
> * present TEE.
> @@ -80,15 +85,42 @@ uint16_t tee_get_type(void)
> static int __init tee_init(void)
> {
> const struct tee_mediator_desc *desc;
> + bool select_mediator = strcmp(opt_mediator, "");
> +
> + if ( select_mediator )
> + printk(XENLOG_INFO "TEE Mediator %s selected from command line\n",
> + opt_mediator);
>
> + /*
> + * When a specific TEE is selected using the 'tee=' command line
> + * argument, we panic if the probe fails or if the requested TEE is not
> + * supported.
> + */
> for ( desc = _steemediator; desc != _eteemediator; desc++ )
> {
> + if ( select_mediator &&
> + strncmp(opt_mediator, desc->cmdline_name, sizeof(opt_mediator))
> )
> + continue;
> +
> if ( desc->ops->probe() )
> {
> printk(XENLOG_INFO "Using TEE mediator for %s\n", desc->name);
> cur_mediator = desc;
> return 0;
> }
> + else if ( select_mediator )
> + {
> + panic("TEE mediator %s from command line probe failed\n",
> + opt_mediator);
> + return -EFAULT;
> + }
> + }
> +
> + if ( select_mediator )
> + {
> + panic("TEE Mediator %s from command line not supported\n",
> + opt_mediator);
> + return -EINVAL;
> }
>
> return 0;
> --
> 2.47.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |