bloblist: add API to check the register conventions

Add bloblist_check_reg_conv() to check whether the bloblist is compliant
to the register conventions defined in Firmware Handoff specification.
This API can be used for all Arm platforms.

Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
This commit is contained in:
Raymond Mao 2024-02-03 08:36:20 -08:00 committed by Tom Rini
parent 819abd0a1e
commit 1c4751fd1a
2 changed files with 31 additions and 0 deletions

View file

@ -542,3 +542,14 @@ int bloblist_maybe_init(void)
return 0;
}
int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong rsig)
{
if (rzero || rsig != (BLOBLIST_MAGIC | BLOBLIST_REGCONV_VER) ||
rfdt != (ulong)bloblist_find(BLOBLISTT_CONTROL_FDT, 0)) {
gd->bloblist = NULL; /* Reset the gd bloblist pointer */
return -EIO;
}
return 0;
}

View file

@ -78,6 +78,13 @@ enum {
BLOBLIST_VERSION = 1,
BLOBLIST_MAGIC = 0x4a0fb10b,
/*
* FIXME:
* Register convention version should be placed into a higher byte
* https://github.com/FirmwareHandoff/firmware_handoff/issues/32
*/
BLOBLIST_REGCONV_VER = 1 << 24,
BLOBLIST_BLOB_ALIGN_LOG2 = 3,
BLOBLIST_BLOB_ALIGN = 1 << BLOBLIST_BLOB_ALIGN_LOG2,
@ -461,4 +468,17 @@ static inline int bloblist_maybe_init(void)
}
#endif /* BLOBLIST */
/**
* bloblist_check_reg_conv() - Check whether the bloblist is compliant to
* the register conventions according to the
* Firmware Handoff spec.
*
* @rfdt: Register that holds the FDT base address.
* @rzero: Register that must be zero.
* @rsig: Register that holds signature and register conventions version.
* Return: 0 if OK, -EIO if the bloblist is not compliant to the register
* conventions.
*/
int bloblist_check_reg_conv(ulong rfdt, ulong rzero, ulong rsig);
#endif /* __BLOBLIST_H */