Am Sonntag, den 25.11.2018, 23:59 +0100 schrieb Roland Hieber: > Currently, board code needs to call habv4_get_status() explicitely, but > there is no reason that it cannot be called automatically at startup > when HABv4 is enabled. This way the call cannot be forgotten and we can > make sure to report all potentially occuring HAB warnings and errors. This fully fits my needs. Tested on i.MX6. > > Signed-off-by: Roland Hieber <r.hieber@xxxxxxxxxxxxxx> Acked-by: Denis Osterland <Denis Osterland@xxxxxxxxx> > --- > drivers/hab/habv3.c | 4 ++++ > drivers/hab/habv4.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 45 insertions(+) > > diff --git a/drivers/hab/habv3.c b/drivers/hab/habv3.c > index 82ae245f8a..c190c78d40 100644 > --- a/drivers/hab/habv3.c > +++ b/drivers/hab/habv3.c > @@ -78,5 +78,9 @@ int imx_habv3_get_status(uint32_t status) > > int imx25_hab_get_status(void) > { > + if (!cpu_is_mx25()) { > + return 0; > + } > return imx_habv3_get_status(readl(IOMEM(0x780018d4))); > } > +postmmu_initcall(imx25_hab_get_status); > diff --git a/drivers/hab/habv4.c b/drivers/hab/habv4.c > index e64f34870e..09f598631b 100644 > --- a/drivers/hab/habv4.c > +++ b/drivers/hab/habv4.c > @@ -20,6 +20,7 @@ > > #include <common.h> > #include <hab.h> > +#include <init.h> > #include <types.h> > > #include <mach/generic.h> > @@ -500,9 +501,49 @@ int imx6_hab_get_status(void) > return -EINVAL; > } > > +static int init_imx6_hab_get_status(void) > +{ > + int ret = 0; > + > + if (!cpu_is_mx6()) > + /* can happen in multi-image builds and is not an error */ > + return 0; > + > + ret = imx6_hab_get_status(); > + > + /* nobody will check the return value if there were HAB errors, but the > + * initcall will fail spectaculously with a strange error message. */ > + if (ret == -EPERM) > + return 0; > + return ret; > +} > +/* need to run before MMU setup because i.MX6 ROM code is mapped near 0x0, > + * which will no longer be accessible when the MMU sets the zero page to > + * faulting. */ > +postconsole_initcall(init_imx6_hab_get_status); > + > int imx28_hab_get_status(void) > { > const struct habv4_rvt *rvt = (void *)HABV4_RVT_IMX28; > > return habv4_get_status(rvt); > } > + > +static int init_imx28_hab_get_status(void) > +{ > + int ret = 0; > + > + if (!cpu_is_mx28()) > + /* can happen in multi-image builds and is not an error */ > + return 0; > + > + ret = imx28_hab_get_status(); > + > + /* nobody will check the return value if there were HAB errors, but the > + * initcall will fail spectaculously with a strange error message. */ > + if (ret == -EPERM) > + return 0; > + return ret; > +} > +/* i.MX28 ROM code can be run after MMU setup to make use of caching */ > +postmmu_initcall(init_imx28_hab_get_status); Diehl Connectivity Solutions GmbH Geschäftsführung: Horst Leonberger Sitz der Gesellschaft: Nürnberg - Registergericht: Amtsgericht Nürnberg: HRB 32315 ___________________________________________________________________________________________________ Der Inhalt der vorstehenden E-Mail ist nicht rechtlich bindend. Diese E-Mail enthaelt vertrauliche und/oder rechtlich geschuetzte Informationen. Informieren Sie uns bitte, wenn Sie diese E-Mail faelschlicherweise erhalten haben. Bitte loeschen Sie in diesem Fall die Nachricht. Jede unerlaubte Form der Reproduktion, Bekanntgabe, Aenderung, Verteilung und/oder Publikation dieser E-Mail ist strengstens untersagt. The contents of the above mentioned e-mail is not legally binding. This e-mail contains confidential and/or legally protected information. Please inform us if you have received this e-mail by mistake and delete it in such a case. Each unauthorized reproduction, disclosure, alteration, distribution and/or publication of this e-mail is strictly prohibited. _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox