Commit 48eee549 authored by Alexandre Courbot's avatar Alexandre Courbot Committed by Ben Skeggs
Browse files

drm/nouveau/secboot: store ucode offset in base image structure



This allows the bootloader descriptor generation code to not rely on
specialized ls_ucode_img structures, making it reusable in other
instances.

Signed-off-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 5c4e0602
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -95,15 +95,14 @@ struct acr_r352_flcn_bl_desc {
 */
static void
acr_r352_generate_flcn_bl_desc(const struct nvkm_acr *acr,
			       const struct ls_ucode_img *_img, u64 wpr_addr,
			       const struct ls_ucode_img *img, u64 wpr_addr,
			       void *_desc)
{
	struct ls_ucode_img_r352 *img = ls_ucode_img_r352(_img);
	struct acr_r352_flcn_bl_desc *desc = _desc;
	const struct ls_ucode_img_desc *pdesc = &_img->ucode_desc;
	const struct ls_ucode_img_desc *pdesc = &img->ucode_desc;
	u64 base, addr_code, addr_data;

	base = wpr_addr + img->lsb_header.ucode_off + pdesc->app_start_offset;
	base = wpr_addr + img->ucode_off + pdesc->app_start_offset;
	addr_code = (base + pdesc->app_resident_code_offset) >> 8;
	addr_data = (base + pdesc->app_resident_data_offset) >> 8;

@@ -255,7 +254,7 @@ acr_r352_ls_img_fill_headers(struct acr_r352 *acr,
	 * image size
	 */
	offset = ALIGN(offset, LSF_UCODE_DATA_ALIGN);
	lhdr->ucode_off = offset;
	_img->ucode_off = lhdr->ucode_off = offset;
	offset += _img->ucode_size;

	/*
+3 −4
Original line number Diff line number Diff line
@@ -63,15 +63,14 @@ struct acr_r361_flcn_bl_desc {

static void
acr_r361_generate_flcn_bl_desc(const struct nvkm_acr *acr,
			       const struct ls_ucode_img *_img, u64 wpr_addr,
			       const struct ls_ucode_img *img, u64 wpr_addr,
			       void *_desc)
{
	struct ls_ucode_img_r352 *img = ls_ucode_img_r352(_img);
	struct acr_r361_flcn_bl_desc *desc = _desc;
	const struct ls_ucode_img_desc *pdesc = &img->base.ucode_desc;
	const struct ls_ucode_img_desc *pdesc = &img->ucode_desc;
	u64 base, addr_code, addr_data;

	base = wpr_addr + img->lsb_header.ucode_off + pdesc->app_start_offset;
	base = wpr_addr + img->ucode_off + pdesc->app_start_offset;
	addr_code = base + pdesc->app_resident_code_offset;
	addr_data = base + pdesc->app_resident_data_offset;

+2 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ struct ls_ucode_img_desc {
 * @ucode_desc:		loaded or generated map of ucode_data
 * @ucode_data:		firmware payload (code and data)
 * @ucode_size:		size in bytes of data in ucode_data
 * @ucode_off:		offset of the ucode in ucode_data
 * @sig:		signature for this firmware
 * @sig:size:		size of the signature in bytes
 *
@@ -97,6 +98,7 @@ struct ls_ucode_img {
	struct ls_ucode_img_desc ucode_desc;
	u8 *ucode_data;
	u32 ucode_size;
	u32 ucode_off;

	u8 *sig;
	u32 sig_size;