mirror of https://gitee.com/openkylin/linux.git
drm/nouveau/secboot: add LS firmware post-run hooks
Add the ability for LS firmwares to declare a post-run hook that is invoked right after the HS firmware is executed. This allows them to e.g. write some initialization data into the falcon's DMEM. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
9bb55bb79f
commit
0117b3369f
|
@ -852,6 +852,8 @@ acr_r352_shutdown(struct acr_r352 *acr, struct nvkm_secboot *sb)
|
||||||
static int
|
static int
|
||||||
acr_r352_bootstrap(struct acr_r352 *acr, struct nvkm_secboot *sb)
|
acr_r352_bootstrap(struct acr_r352 *acr, struct nvkm_secboot *sb)
|
||||||
{
|
{
|
||||||
|
unsigned long managed_falcons = acr->base.managed_falcons;
|
||||||
|
int falcon_id;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (sb->wpr_set)
|
if (sb->wpr_set)
|
||||||
|
@ -872,6 +874,15 @@ acr_r352_bootstrap(struct acr_r352 *acr, struct nvkm_secboot *sb)
|
||||||
|
|
||||||
sb->wpr_set = true;
|
sb->wpr_set = true;
|
||||||
|
|
||||||
|
/* Run LS firmwares post_run hooks */
|
||||||
|
for_each_set_bit(falcon_id, &managed_falcons, NVKM_SECBOOT_FALCON_END) {
|
||||||
|
const struct acr_r352_ls_func *func =
|
||||||
|
acr->func->ls_func[falcon_id];
|
||||||
|
|
||||||
|
if (func->post_run)
|
||||||
|
func->post_run(&acr->base, sb);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ hsf_load_header_app_size(const struct hsf_load_header *hdr, u32 app)
|
||||||
* @generate_bl_desc: function called on a block of bl_desc_size to generate the
|
* @generate_bl_desc: function called on a block of bl_desc_size to generate the
|
||||||
* proper bootloader descriptor for this LS firmware
|
* proper bootloader descriptor for this LS firmware
|
||||||
* @bl_desc_size: size of the bootloader descriptor
|
* @bl_desc_size: size of the bootloader descriptor
|
||||||
|
* @post_run: hook called right after the ACR is executed
|
||||||
* @lhdr_flags: LS flags
|
* @lhdr_flags: LS flags
|
||||||
*/
|
*/
|
||||||
struct acr_r352_ls_func {
|
struct acr_r352_ls_func {
|
||||||
|
@ -85,6 +86,7 @@ struct acr_r352_ls_func {
|
||||||
void (*generate_bl_desc)(const struct nvkm_acr *,
|
void (*generate_bl_desc)(const struct nvkm_acr *,
|
||||||
const struct ls_ucode_img *, u64, void *);
|
const struct ls_ucode_img *, u64, void *);
|
||||||
u32 bl_desc_size;
|
u32 bl_desc_size;
|
||||||
|
void (*post_run)(const struct nvkm_acr *, const struct nvkm_secboot *);
|
||||||
u32 lhdr_flags;
|
u32 lhdr_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue