[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 1/5] xen/arm: Create tee command line parameter
Hi Julien, > On 26 Mar 2025, at 23:49, Julien Grall <julien@xxxxxxx> wrote: > > Hi Bertrand, > > On 24/03/2025 13:52, Bertrand Marquis 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 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 | 31 ++++++++++++++++++++++++++++++ >> 3 files changed, 49 insertions(+) >> diff --git a/docs/misc/xen-command-line.pandoc >> b/docs/misc/xen-command-line.pandoc >> index 89db6e83be66..0c2ff542a138 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 supported TEEs supported by Xen and >> use > > > typo: I think there is one too many "supported". Maybe keep the one after > TEEs? ack > >> +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` of `ffa` if the corresponding mediators > > typo: s/of/or/ ack > >> +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..066b5ba40f9d 100644 >> --- a/xen/arch/arm/tee/tee.c >> +++ b/xen/arch/arm/tee/tee.c >> @@ -19,12 +19,17 @@ >> #include <xen/errno.h> >> #include <xen/init.h> >> #include <xen/types.h> >> +#include <xen/param.h> > > Coding style: The includes are order. So this wants to be moved before > xen/types.h ack > >> #include <asm/tee/tee.h> >> 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. >> @@ -81,14 +86,40 @@ static int __init tee_init(void) >> { >> const struct tee_mediator_desc *desc; >> + if ( strcmp(opt_mediator, "") ) > > You are using 'strcmp(opt_mediator, "")' several time in the code. This > should never changed, so can we introduce a boolean within the function to > indicate whether opt_mediator is set? Very good point, I will do that. > >> + 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 ( strcmp(opt_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 ( strcmp(opt_mediator, "") ) >> + { >> + panic("TEE mediator %s from command line probe failed\n", >> + opt_mediator); >> + return -EFAULT; >> + } >> + } >> + >> + if ( strcmp(opt_mediator, "") ) >> + { >> + panic("TEE Mediator %s from command line not supported\n", >> + opt_mediator); >> + return -EINVAL; >> } >> return 0; Thanks a lot for the review. Cheers Bertrand > > Cheers, > > -- > Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |