Message ID | 20240529072559.2486986-6-jens.wiklander@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | FF-A notifications | expand |
Hi Jens, > On 29 May 2024, at 09:25, Jens Wiklander <jens.wiklander@linaro.org> wrote: > > Add init_tee_interrupt() to the TEE mediator framework and call it from > start_secondary() late enough that per-cpu interrupts can be configured > on CPUs as they are initialized. This is needed in later patches. Just a NIT: The function you are adding is in fact just an init on secondary cores and wether you are using to initialise interrupts or something does not really matter so I would suggest to rename it to "init_secondary" instead to allow future use cases that are possible. With that done, feel free to add my R-b on the next version. Cheers Bertrand > > Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> > --- > xen/arch/arm/include/asm/tee/tee.h | 8 ++++++++ > xen/arch/arm/smpboot.c | 2 ++ > xen/arch/arm/tee/tee.c | 6 ++++++ > 3 files changed, 16 insertions(+) > > diff --git a/xen/arch/arm/include/asm/tee/tee.h b/xen/arch/arm/include/asm/tee/tee.h > index da324467e130..eda8a8aa38f2 100644 > --- a/xen/arch/arm/include/asm/tee/tee.h > +++ b/xen/arch/arm/include/asm/tee/tee.h > @@ -28,6 +28,9 @@ struct tee_mediator_ops { > */ > bool (*probe)(void); > > + /* Initialize eventual interrupt handlers on the secondary CPUs */ > + void (*init_interrupt)(void); > + > /* > * Called during domain construction if toolstack requests to enable > * TEE support so mediator can inform TEE about new > @@ -66,6 +69,7 @@ int tee_domain_init(struct domain *d, uint16_t tee_type); > int tee_domain_teardown(struct domain *d); > int tee_relinquish_resources(struct domain *d); > uint16_t tee_get_type(void); > +void init_tee_interrupt(void); > > #define REGISTER_TEE_MEDIATOR(_name, _namestr, _type, _ops) \ > static const struct tee_mediator_desc __tee_desc_##_name __used \ > @@ -105,6 +109,10 @@ static inline uint16_t tee_get_type(void) > return XEN_DOMCTL_CONFIG_TEE_NONE; > } > > +static inline void init_tee_interrupt(void) > +{ > +} > + > #endif /* CONFIG_TEE */ > > #endif /* __ARCH_ARM_TEE_TEE_H__ */ > diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c > index 93a10d7721b4..e1c1e20efd98 100644 > --- a/xen/arch/arm/smpboot.c > +++ b/xen/arch/arm/smpboot.c > @@ -29,6 +29,7 @@ > #include <asm/procinfo.h> > #include <asm/psci.h> > #include <asm/acpi.h> > +#include <asm/tee/tee.h> > > /* Override macros from asm/page.h to make them work with mfn_t */ > #undef virt_to_mfn > @@ -401,6 +402,7 @@ void asmlinkage start_secondary(void) > */ > init_maintenance_interrupt(); > init_timer_interrupt(); > + init_tee_interrupt(); > > local_abort_enable(); > > diff --git a/xen/arch/arm/tee/tee.c b/xen/arch/arm/tee/tee.c > index ddd17506a9ff..8117fd55123e 100644 > --- a/xen/arch/arm/tee/tee.c > +++ b/xen/arch/arm/tee/tee.c > @@ -96,6 +96,12 @@ static int __init tee_init(void) > > __initcall(tee_init); > > +void __init init_tee_interrupt(void) > +{ > + if ( cur_mediator && cur_mediator->ops->init_interrupt) > + cur_mediator->ops->init_interrupt(); > +} > + > /* > * Local variables: > * mode: C > -- > 2.34.1 >
diff --git a/xen/arch/arm/include/asm/tee/tee.h b/xen/arch/arm/include/asm/tee/tee.h index da324467e130..eda8a8aa38f2 100644 --- a/xen/arch/arm/include/asm/tee/tee.h +++ b/xen/arch/arm/include/asm/tee/tee.h @@ -28,6 +28,9 @@ struct tee_mediator_ops { */ bool (*probe)(void); + /* Initialize eventual interrupt handlers on the secondary CPUs */ + void (*init_interrupt)(void); + /* * Called during domain construction if toolstack requests to enable * TEE support so mediator can inform TEE about new @@ -66,6 +69,7 @@ int tee_domain_init(struct domain *d, uint16_t tee_type); int tee_domain_teardown(struct domain *d); int tee_relinquish_resources(struct domain *d); uint16_t tee_get_type(void); +void init_tee_interrupt(void); #define REGISTER_TEE_MEDIATOR(_name, _namestr, _type, _ops) \ static const struct tee_mediator_desc __tee_desc_##_name __used \ @@ -105,6 +109,10 @@ static inline uint16_t tee_get_type(void) return XEN_DOMCTL_CONFIG_TEE_NONE; } +static inline void init_tee_interrupt(void) +{ +} + #endif /* CONFIG_TEE */ #endif /* __ARCH_ARM_TEE_TEE_H__ */ diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c index 93a10d7721b4..e1c1e20efd98 100644 --- a/xen/arch/arm/smpboot.c +++ b/xen/arch/arm/smpboot.c @@ -29,6 +29,7 @@ #include <asm/procinfo.h> #include <asm/psci.h> #include <asm/acpi.h> +#include <asm/tee/tee.h> /* Override macros from asm/page.h to make them work with mfn_t */ #undef virt_to_mfn @@ -401,6 +402,7 @@ void asmlinkage start_secondary(void) */ init_maintenance_interrupt(); init_timer_interrupt(); + init_tee_interrupt(); local_abort_enable(); diff --git a/xen/arch/arm/tee/tee.c b/xen/arch/arm/tee/tee.c index ddd17506a9ff..8117fd55123e 100644 --- a/xen/arch/arm/tee/tee.c +++ b/xen/arch/arm/tee/tee.c @@ -96,6 +96,12 @@ static int __init tee_init(void) __initcall(tee_init); +void __init init_tee_interrupt(void) +{ + if ( cur_mediator && cur_mediator->ops->init_interrupt) + cur_mediator->ops->init_interrupt(); +} + /* * Local variables: * mode: C
Add init_tee_interrupt() to the TEE mediator framework and call it from start_secondary() late enough that per-cpu interrupts can be configured on CPUs as they are initialized. This is needed in later patches. Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> --- xen/arch/arm/include/asm/tee/tee.h | 8 ++++++++ xen/arch/arm/smpboot.c | 2 ++ xen/arch/arm/tee/tee.c | 6 ++++++ 3 files changed, 16 insertions(+)