[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] arm: dom0less: add TEE support
Hi Julien, > On 30 May 2024, at 09:59, Julien Grall <julien@xxxxxxx> wrote: > > > > On 29/05/2024 22:34, Volodymyr Babchuk wrote: >> Hi Julien, > > Hi Volodymyr, > >> Julien Grall <julien@xxxxxxx> writes: >>> Hi Volodymyr, >>> >>> Can you clarify whether this is intended for the next release cycle? >> Well, I don't think that this patch should be committed ASAP if this is >> what you are asking about. >>> On 29/05/2024 21:43, Volodymyr Babchuk wrote: >>>> Allow to provide TEE type for a Dom0less guest via "xen,tee" >>>> property. Create appropriate nodes in the guests' device tree and >>>> initialize tee subsystem for it. >>> >>> The new property needs to be documented in >>> docs/misc/arm/device-tree/booting.txt. >>> >> Yes, missed that. >>>> Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx> >>>> --- >>>> xen/arch/arm/dom0less-build.c | 69 +++++++++++++++++++++++++++++++ >>>> xen/arch/arm/include/asm/kernel.h | 3 ++ >>>> 2 files changed, 72 insertions(+) >>>> diff --git a/xen/arch/arm/dom0less-build.c >>>> b/xen/arch/arm/dom0less-build.c >>>> index fb63ec6fd1..1ea3ecc45c 100644 >>>> --- a/xen/arch/arm/dom0less-build.c >>>> +++ b/xen/arch/arm/dom0less-build.c >>>> @@ -15,6 +15,7 @@ >>>> #include <asm/domain_build.h> >>>> #include <asm/static-memory.h> >>>> #include <asm/static-shmem.h> >>>> +#include <asm/tee/tee.h> >>>> bool __init is_dom0less_mode(void) >>>> { >>>> @@ -277,6 +278,42 @@ static int __init make_vpl011_uart_node(struct >>>> kernel_info *kinfo) >>>> } >>>> #endif >>>> +#ifdef CONFIG_OPTEE >>>> +static int __init make_optee_node(struct kernel_info *kinfo) >>> >>> Please introduce a callback in the TEE framework that will create the >>> OPTEE node. >> This is the reason why this is RFC. > > If this is meant an RFC, then I would recommend to tag your series with RFC. > Similarly... > > >> I wanted to discuss the right method >> of doing this. > > ... if you have any open questions. Then please write them down after the > "---" (so they are not committed). So this is not a guessing game for the > reviewer. > > For instance, if you hadn't asked the question, I wouldn't have realized you > were not entirely happy with your solution. To me it looked fine because this > is self-contained in an OP-TEE specific function. > >> "optee" node should reside in "/firmware/" node as per >> device tree bindings. But "/firmware/" node can contain additional >> entries, for example linux device tree bindings also define >> "/firmware/sdei". So, probably correct solution is to implement function >> "make_firmware_node()" in this file, which in turn will call TEE >> framework. > > Longer term possibly. But at the moment, we have no implementation of the > "sdei" node and I am not aware of any future plan. So I don't think it is > necessary to split the work in two functions. > >> But we are making assumption that all TEE implementation will have its >> node inside "/firmware/". I am not 100% sure that this is correct. For >> example I saw that Google Trusty uses "/trusty" node (directly inside >> the DTS root). On other hand, it is not defined in dts bindings, as far >> as I know. > > TBH, if there is no official binding documentation, then Xen cannot sensibly > create those nodes because they are not "stable". So the first step would be > to have official binding. > > > Bertrand, I couldn't find any documentation for the FFA binding. Do you know > if they will be created under /firmware? There is not device tree entry needed for FF-A because it is detected through a FF-A call. > >>>> /* >>>> * Scan device tree properties for passthrough specific information. >>>> * Returns < 0 on error >>>> @@ -650,6 +687,15 @@ static int __init prepare_dtb_domU(struct domain *d, >>>> struct kernel_info *kinfo) >>>> if ( ret ) >>>> goto err; >>>> +#ifdef CONFIG_OPTEE >>>> + if ( kinfo->tee_type == XEN_DOMCTL_CONFIG_TEE_OPTEE) >>>> + { >>>> + ret = make_optee_node(kinfo); >>>> + if ( ret ) >>>> + goto err; >>>> + } >>>> +#endif >>>> + >>>> /* >>>> * domain_handle_dtb_bootmodule has to be called before the rest of >>>> * the device tree is generated because it depends on the value of >>>> @@ -743,6 +789,9 @@ static int __init construct_domU(struct domain *d, >>>> { >>>> struct kernel_info kinfo = {}; >>>> const char *dom0less_enhanced; >>>> +#ifdef CONFIG_TEE >>>> + const char *tee; >>>> +#endif >>>> int rc; >>>> u64 mem; >>>> u32 p2m_mem_mb; >>>> @@ -786,6 +835,18 @@ static int __init construct_domU(struct domain *d, >>>> else if ( rc == 0 && !strcmp(dom0less_enhanced, "no-xenstore") ) >>>> kinfo.dom0less_feature = DOM0LESS_ENHANCED_NO_XS; >>>> +#ifdef CONFIG_TEE >>> >>> I would rather prefer if this code is implemented in tee.c. We also... >>> >>>> + rc = dt_property_read_string(node, "xen,tee", &tee); >>> >>> ... want to return an error if "xen,tee" exists because CONFIG_TEE is >>> not set. >>> >>>> + if ( rc == -EILSEQ || >>>> + rc == -ENODATA || >>>> + (rc == 0 && !strcmp(tee, "none")) ) >>>> + { >>>> + if ( !hardware_domain ) >>> >>> >>> I don't understand this check. Why would we require dom0 for OP-TEE? >> OP-TEE is enabled for Dom0 unconditionally in create_dom0(void); > > I am sorry but this still doesn't make sense. AFAICT, this path is only used > by domU. In some dom0less setup, we may not have dom0 at all. So why do you > want to prevent OP-TEE for such case? > > Or are you intending to check that "d" is not the hardware domain? If so, you > have the wrong check (you want to check is_hardware_domain(d) and AFAIK this > path is not called for dom0. > >> This is another topic I wanted to discuss, actually, Should we use the >> same "xen,tee" for Dom0? In this case we might want to alter Dom0 DTB to >> remove TEE entry if user wants it to be disabled. > Is there any existing use case to disable OP-TEE in dom0? I am asking because > removing the nodes will make the code a bit more complicated. So if there is > no need, then my preference is to not do it. I would say there are several: - optee not supported in Xen (dom0 cannot access it anyway) - optee to be used in a guest instead of dom0 - ff-a used to communicate with optee (in this case optee support is not used but ff-a is). On this subject, I will not ask you to add support for FF-A for this but whatever you do please keep in mind that we will probably add the same for FF-A so that we end up with something coherent where the tee can be selected by configuration for guests or by device tree for dom0 or dom0less guests. I will make a path on the next version of the patch for this. Cheers Bertrand
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |