drm/nouveau/secboot: abstract fixup_hs_desc function
As different firmare versions use different HS descriptor formats, we need to abstract this part as well. Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
f7152a232c
commit
9bb55bb79f
|
@ -583,10 +583,11 @@ acr_r352_hsf_patch_signature(struct nvkm_secboot *sb, void *acr_image)
|
||||||
memcpy(hs_data + fw_hdr->patch_loc, sig + fw_hdr->patch_sig, sig_size);
|
memcpy(hs_data + fw_hdr->patch_loc, sig + fw_hdr->patch_sig, sig_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
acr_r352_fixup_hs_desc(struct acr_r352 *acr, struct nvkm_secboot *sb,
|
acr_r352_fixup_hs_desc(struct acr_r352 *acr, struct nvkm_secboot *sb,
|
||||||
struct hsflcn_acr_desc *desc)
|
void *_desc)
|
||||||
{
|
{
|
||||||
|
struct hsflcn_acr_desc *desc = _desc;
|
||||||
struct nvkm_gpuobj *ls_blob = acr->ls_blob;
|
struct nvkm_gpuobj *ls_blob = acr->ls_blob;
|
||||||
|
|
||||||
/* WPR region information if WPR is not fixed */
|
/* WPR region information if WPR is not fixed */
|
||||||
|
@ -668,7 +669,7 @@ acr_r352_prepare_hs_blob(struct acr_r352 *acr, struct nvkm_secboot *sb,
|
||||||
struct hsflcn_acr_desc *desc;
|
struct hsflcn_acr_desc *desc;
|
||||||
|
|
||||||
desc = acr_data + load_hdr->data_dma_base;
|
desc = acr_data + load_hdr->data_dma_base;
|
||||||
acr_r352_fixup_hs_desc(acr, sb, desc);
|
acr->func->fixup_hs_desc(acr, sb, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (load_hdr->num_apps > ACR_R352_MAX_APPS) {
|
if (load_hdr->num_apps > ACR_R352_MAX_APPS) {
|
||||||
|
@ -952,6 +953,7 @@ acr_r352_ls_gpccs_func = {
|
||||||
|
|
||||||
const struct acr_r352_func
|
const struct acr_r352_func
|
||||||
acr_r352_func = {
|
acr_r352_func = {
|
||||||
|
.fixup_hs_desc = acr_r352_fixup_hs_desc,
|
||||||
.generate_hs_bl_desc = acr_r352_generate_hs_bl_desc,
|
.generate_hs_bl_desc = acr_r352_generate_hs_bl_desc,
|
||||||
.hs_bl_desc_size = sizeof(struct acr_r352_flcn_bl_desc),
|
.hs_bl_desc_size = sizeof(struct acr_r352_flcn_bl_desc),
|
||||||
.ls_ucode_img_load = acr_r352_ls_ucode_img_load,
|
.ls_ucode_img_load = acr_r352_ls_ucode_img_load,
|
||||||
|
|
|
@ -100,6 +100,7 @@ struct acr_r352;
|
||||||
struct acr_r352_func {
|
struct acr_r352_func {
|
||||||
void (*generate_hs_bl_desc)(const struct hsf_load_header *, void *,
|
void (*generate_hs_bl_desc)(const struct hsf_load_header *, void *,
|
||||||
u64);
|
u64);
|
||||||
|
void (*fixup_hs_desc)(struct acr_r352 *, struct nvkm_secboot *, void *);
|
||||||
u32 hs_bl_desc_size;
|
u32 hs_bl_desc_size;
|
||||||
|
|
||||||
struct ls_ucode_img *(*ls_ucode_img_load)(const struct acr_r352 *,
|
struct ls_ucode_img *(*ls_ucode_img_load)(const struct acr_r352 *,
|
||||||
|
@ -168,4 +169,6 @@ int acr_r352_ls_fill_headers(struct acr_r352 *, struct list_head *);
|
||||||
int acr_r352_ls_write_wpr(struct acr_r352 *, struct list_head *,
|
int acr_r352_ls_write_wpr(struct acr_r352 *, struct list_head *,
|
||||||
struct nvkm_gpuobj *, u64);
|
struct nvkm_gpuobj *, u64);
|
||||||
|
|
||||||
|
void acr_r352_fixup_hs_desc(struct acr_r352 *, struct nvkm_secboot *, void *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -118,6 +118,7 @@ acr_r361_ls_gpccs_func = {
|
||||||
|
|
||||||
const struct acr_r352_func
|
const struct acr_r352_func
|
||||||
acr_r361_func = {
|
acr_r361_func = {
|
||||||
|
.fixup_hs_desc = acr_r352_fixup_hs_desc,
|
||||||
.generate_hs_bl_desc = acr_r361_generate_hs_bl_desc,
|
.generate_hs_bl_desc = acr_r361_generate_hs_bl_desc,
|
||||||
.hs_bl_desc_size = sizeof(struct acr_r361_flcn_bl_desc),
|
.hs_bl_desc_size = sizeof(struct acr_r361_flcn_bl_desc),
|
||||||
.ls_ucode_img_load = acr_r352_ls_ucode_img_load,
|
.ls_ucode_img_load = acr_r352_ls_ucode_img_load,
|
||||||
|
|
Loading…
Reference in New Issue