From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: Stefan Kerkmann <s.kerkmann@pengutronix.de>,
Sascha Hauer <s.hauer@pengutronix.de>,
BAREBOX <barebox@lists.infradead.org>
Subject: Re: [PATCH 1/2] habv4: correct habv4 rom vector table
Date: Thu, 11 Jan 2024 16:57:18 +0100 [thread overview]
Message-ID: <2f94ac17-fb2e-4ebd-ad49-c48f0b06d875@pengutronix.de> (raw)
In-Reply-To: <20240111-fix-habv4-event-report-v1-1-15d9a990f01e@pengutronix.de>
Hello Stefan,
On 11.01.24 16:42, Stefan Kerkmann wrote:
> All function signatures have been taken from the NXP manual "High
> Assurance Boot Version 4 Application Programming Interface Reference
> Manual" revision 1.4 under section "4.5 ROM vector table". A copy can be
> obtained from the imx code signing tool (imx-cst).
>
> Signed-off-by: Stefan Kerkmann <s.kerkmann@pengutronix.de>
> ---
> drivers/hab/habv4.c | 50 ++++++++++++++++++++++++++++++--------------------
> 1 file changed, 30 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/hab/habv4.c b/drivers/hab/habv4.c
> index ed6d4db77c..dfa0207435 100644
> --- a/drivers/hab/habv4.c
> +++ b/drivers/hab/habv4.c
> @@ -144,31 +144,41 @@ struct hab_header {
> uint8_t par;
> } __packed;
>
> -typedef enum hab_status hab_loader_callback_fn(void **start, uint32_t *bytes, const void *boot_data);
> +typedef enum hab_status hab_loader_callback_fn(void **start, size_t *bytes, const void *boot_data);
> +typedef void (*hab_image_entry_fn)(void);
While it only matter for forward declaration, perhaps, change this
to be a non-pointer like hab_loader_callback_fn above?
>
> +/* This table is constructed from the NXP manual "High Assurance Boot Version 4
> + * Application Programming Interface Reference Manual", section 4.5 ROM vector
> + * table. Revision 1.4 */
> struct habv4_rvt {
> struct hab_header header;
> enum hab_status (*entry)(void);
> enum hab_status (*exit)(void);
> - enum hab_status (*check_target)(enum hab_target target, const void *start, uint32_t bytes);
> - void *(*authenticate_image)(uint8_t cid, uint32_t ivt_offset, void **start, uint32_t *bytes, hab_loader_callback_fn *loader);
> - enum hab_status (*run_dcd)(const void *dcd);
> - enum hab_status (*run_csf)(const void *csf, uint8_t cid);
> + enum hab_status (*check_target)(enum hab_target target, const void *start, size_t bytes);
> + void *(*authenticate_image)(uint8_t cid, ptrdiff_t ivt_offset, void **start, size_t *bytes, hab_loader_callback_fn *loader);
Here you explicitly use a pointer to a function.
> + enum hab_status (*run_dcd)(const uint8_t *dcd);
> + enum hab_status (*run_csf)(const uint8_t *csf, uint8_t cid, uint32_t srkmask);
> enum hab_status (*assert)(enum hab_assertion assertion, const void *data, uint32_t count);
> - enum hab_status (*report_event)(enum hab_status status, uint32_t index, void *event, uint32_t *bytes);
> + enum hab_status (*report_event)(enum hab_status status, uint32_t index, uint8_t *event, size_t *bytes);
> enum hab_status (*report_status)(enum hab_config *config, enum habv4_state *state);
> void (*failsafe)(void);
> + hab_image_entry_fn(* authenticate_image_no_dcd)(uint8_t cid, ptrdiff_t ivt_offset, void **start, size_t *bytes, hab_loader_callback_fn loader);
And here you rely on a function pointer being automatically derived.
While that's ok from a correctness point of view, for symmetry, it
would be better to stick to one type.
> + uint32_t(* get_version)(void);
Nitpick: space after uint32_t and not before get_version.
> + enum hab_status (*authenticate_container)(uint8_t cid, ptrdiff_t ivt_offset, void **start, size_t *bytes, hab_loader_callback_fn loader, uint32_t srkmask, int skip_dcd);
> } __packed;
>
> -#define FSL_SIP_HAB 0xC2000007
This is removed without replacement?
> -#define FSL_SIP_HAB_AUTHENTICATE 0x00
> -#define FSL_SIP_HAB_ENTRY 0x01
> -#define FSL_SIP_HAB_EXIT 0x02
> -#define FSL_SIP_HAB_REPORT_EVENT 0x03
> -#define FSL_SIP_HAB_REPORT_STATUS 0x04
> -#define FSL_SIP_HAB_FAILSAFE 0x05
> -#define FSL_SIP_HAB_CHECK_TARGET 0x06
> -#define FSL_SIP_HAB_GET_VERSION 0x07
> +#define FSL_SIP_HAB 0xC2000007
> +
> +enum hab_sip_cmd {
> + FSL_SIP_HAB_AUTHENTICATE = 0x00,
> + FSL_SIP_HAB_ENTRY = 0x01,
> + FSL_SIP_HAB_EXIT = 0x02,
> + FSL_SIP_HAB_REPORT_EVENT = 0x03,
> + FSL_SIP_HAB_REPORT_STATUS = 0x04,
> + FSL_SIP_HAB_FAILSAFE = 0x05,
> + FSL_SIP_HAB_CHECK_TARGET = 0x06,
> + FSL_SIP_HAB_GET_VERSION = 0x07,
> +};
>
> static enum hab_status hab_sip_report_status(enum hab_config *config,
> enum habv4_state *state)
> @@ -211,8 +221,8 @@ static uint32_t hab_sip_get_version(void)
> #define IMX8MP_ROM_OCRAM_ADDRESS 0x90D040
>
> static enum hab_status imx8m_read_sram_events(enum hab_status status,
> - uint32_t index, void *event,
> - uint32_t *bytes)
> + uint32_t index, uint8_t *event,
> + size_t *bytes)
> {
> struct hab_event_record *events[10];
> int num_events = 0;
> @@ -478,7 +488,7 @@ static void habv4_display_event_record(struct hab_event_record *record)
> pr_err("Engine: %s (0x%02x)\n", habv4_get_engine_str(record->engine), record->engine);
> }
>
> -static void habv4_display_event(uint8_t *data, uint32_t len)
> +static void habv4_display_event(uint8_t *data, size_t len)
> {
> unsigned int i;
>
> @@ -525,7 +535,7 @@ static bool is_known_rng_fail_event(const uint8_t *data, size_t len)
> return false;
> }
>
> -static uint8_t *hab_get_event(const struct habv4_rvt *rvt, int index, int *len)
> +static uint8_t *hab_get_event(const struct habv4_rvt *rvt, int index, size_t *len)
> {
> enum hab_status err;
> uint8_t *buf;
> @@ -558,7 +568,7 @@ int habv4_get_state(void)
> static int habv4_get_status(const struct habv4_rvt *rvt)
> {
> uint8_t *data;
> - uint32_t len;
> + size_t len;
> int i;
> enum hab_status status;
> enum hab_config config = 0x0;
>
--
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 |
next prev parent reply other threads:[~2024-01-11 15:58 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-11 15:42 [PATCH 0/2] Use HABv4 report_event implementation for imx8mm and imx8mn Stefan Kerkmann
2024-01-11 15:42 ` [PATCH 1/2] habv4: correct habv4 rom vector table Stefan Kerkmann
2024-01-11 15:57 ` Ahmad Fatoum [this message]
2024-01-12 15:26 ` Stefan Kerkmann
2024-01-12 16:04 ` Ahmad Fatoum
2024-01-12 6:53 ` Marc Kleine-Budde
2024-01-11 15:42 ` [PATCH 2/2] habv4: use hab rom implementation of report_event Stefan Kerkmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2f94ac17-fb2e-4ebd-ad49-c48f0b06d875@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.de \
--cc=s.kerkmann@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox