On 24-01-18, Sascha Hauer wrote:
> On Tue, Jan 16, 2024 at 06:07:38PM +0100, Marco Felsch wrote:
> > The current code checks only if "/firmware/optee" exist on the builtin
> > dtb and applys the fixup if not found and if found nothing is done. If a
> > builtin dts contains the node but an external don't the fixup won't be
> > applied. Also if the external dts does have a node + the reserved memory
> > region nodes but the barebox builtin dts don't we do add additional
> > reserved memory nodes which may conflict due to different name scheme:
> > <name> vs. <name>@<addr>.
> > 
> > Move the "/firmware/optee" check into the of_optee_fixup() so the check
> > is done on the correct dtb root nodes.
> > 
> > Signed-off-by: Marco Felsch <m.fel...@pengutronix.de>
> > ---
> >  arch/arm/mach-imx/imx8m.c    | 3 +--
> >  drivers/tee/optee/of_fixup.c | 6 +++++-
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> > 
> > diff --git a/arch/arm/mach-imx/imx8m.c b/arch/arm/mach-imx/imx8m.c
> > index 6db16f024148..73b420b38697 100644
> > --- a/arch/arm/mach-imx/imx8m.c
> > +++ b/arch/arm/mach-imx/imx8m.c
> > @@ -68,8 +68,7 @@ static int imx8m_init(const char *cputypestr)
> >     imx_set_reset_reason(src + IMX7_SRC_SRSR, imx7_reset_reasons);
> >     pr_info("%s unique ID: %llx\n", cputypestr, imx8m_uid());
> >  
> > -   if (IS_ENABLED(CONFIG_PBL_OPTEE) && tzc380_is_enabled() &&
> > -       !of_find_node_by_path_from(NULL, "/firmware/optee")) {
> > +   if (IS_ENABLED(CONFIG_PBL_OPTEE) && tzc380_is_enabled()) {
> >             static struct of_optee_fixup_data optee_fixup_data = {
> >                     .shm_size = OPTEE_SHM_SIZE,
> >                     .method = "smc",
> > diff --git a/drivers/tee/optee/of_fixup.c b/drivers/tee/optee/of_fixup.c
> > index cdf650592e90..2ff1f01964c8 100644
> > --- a/drivers/tee/optee/of_fixup.c
> > +++ b/drivers/tee/optee/of_fixup.c
> > @@ -9,12 +9,16 @@
> >  int of_optee_fixup(struct device_node *root, void *_data)
> >  {
> >     struct of_optee_fixup_data *fixup_data = _data;
> > +   const char *optee_of_path = "/firmware/optee";
> >     struct resource res = {};
> >     struct device_node *node;
> >     u64 optee_membase;
> >     int ret;
> >  
> > -   node = of_create_node(root, "/firmware/optee");
> > +   if (of_find_node_by_path_from(NULL, optee_of_path))
> > +           return 0;
> 
> This implements a "when the internal dts does have a OP-TEE node, then
> do not fixup the external dts". This is surely not what you meant. 

Arg..

> Should this be
> 
>       if (of_find_node_by_path_from(root, optee_of_path))
>               return 0;

exactly, thanks.

Regards,
  Marco

> or something else?
> 
> Sascha
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 

Reply via email to