From be6b37ba50a57b851d55d8eae6f35232ccd35dc7 Mon Sep 17 00:00:00 2001 From: mkumbar Date: Tue, 21 Jul 2020 07:14:22 +0530 Subject: [PATCH] gpu: nvgpu: add support for ls_falcon_ucode_desc_v1 igpu-next LSPMU ucode built with newer ucode descriptor which adds changes to ACR blob construction. Constructing ACR blob with legacy ucode descriptor by fetching required data from ucode using newer descriptor. JIRA NVGPU-5857 Change-Id: I6d830be1ec955242b95f522e648528a6b36e7cf5 Signed-off-by: mkumbar Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2382855 Reviewed-by: automaticguardword Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-cert Reviewed-by: Deepak Nibade Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions --- .../gpu/nvgpu/common/acr/acr_blob_construct.c | 16 +++++++++++ .../gpu/nvgpu/common/acr/acr_blob_construct.h | 28 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nvgpu/common/acr/acr_blob_construct.c b/drivers/gpu/nvgpu/common/acr/acr_blob_construct.c index ee5955e2f..777ccd273 100644 --- a/drivers/gpu/nvgpu/common/acr/acr_blob_construct.c +++ b/drivers/gpu/nvgpu/common/acr/acr_blob_construct.c @@ -48,6 +48,7 @@ #if defined(CONFIG_NVGPU_DGPU) || defined(CONFIG_NVGPU_LS_PMU) #define UCODE_PARAMS (1) +#define UCODE_DESC_TOOL_VERSION 0x4U #else #define UCODE_PARAMS (0) #endif @@ -61,6 +62,7 @@ int nvgpu_acr_lsf_pmu_ucode_details(struct gk20a *g, void *lsf_ucode_img) struct nvgpu_firmware *fw_image; struct flcn_ucode_img *p_img = (struct flcn_ucode_img *)lsf_ucode_img; + struct ls_falcon_ucode_desc_v1 tmp_desc_v1; int err = 0; lsf_desc = nvgpu_kzalloc(g, sizeof(struct lsf_ucode_desc)); @@ -79,6 +81,20 @@ int nvgpu_acr_lsf_pmu_ucode_details(struct gk20a *g, void *lsf_ucode_img) lsf_desc->falcon_id = FALCON_ID_PMU; p_img->desc = (struct ls_falcon_ucode_desc *)(void *)fw_desc->data; + if (p_img->desc->tools_version >= UCODE_DESC_TOOL_VERSION) { + (void) memset((u8 *)&tmp_desc_v1, 0, + sizeof(struct ls_falcon_ucode_desc_v1)); + + nvgpu_memcpy((u8 *)&tmp_desc_v1, (u8 *)fw_desc->data, + sizeof(struct ls_falcon_ucode_desc_v1)); + + nvgpu_memcpy((u8 *)&p_img->desc->bootloader_start_offset, + (u8 *)&tmp_desc_v1.bootloader_start_offset, + sizeof(struct ls_falcon_ucode_desc) - + offsetof(struct ls_falcon_ucode_desc, + bootloader_start_offset)); + } + p_img->data = (u32 *)(void *)fw_image->data; p_img->data_size = p_img->desc->app_start_offset + p_img->desc->app_size; p_img->lsf_desc = (struct lsf_ucode_desc *)lsf_desc; diff --git a/drivers/gpu/nvgpu/common/acr/acr_blob_construct.h b/drivers/gpu/nvgpu/common/acr/acr_blob_construct.h index 92d879db8..1407a023b 100644 --- a/drivers/gpu/nvgpu/common/acr/acr_blob_construct.h +++ b/drivers/gpu/nvgpu/common/acr/acr_blob_construct.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -54,6 +54,32 @@ struct ls_falcon_ucode_desc { u32 compressed; }; +struct ls_falcon_ucode_desc_v1 { + u32 descriptor_size; + u32 image_size; + u32 tools_version; + u32 app_version; + char date[UCODE_NB_MAX_DATE_LENGTH]; + u32 secure_bootloader; + u32 bootloader_start_offset; + u32 bootloader_size; + u32 bootloader_imem_offset; + u32 bootloader_entry_point; + u32 app_start_offset; + u32 app_size; + u32 app_imem_offset; + u32 app_imem_entry; + u32 app_dmem_offset; + u32 app_resident_code_offset; + u32 app_resident_code_size; + u32 app_resident_data_offset; + u32 app_resident_data_size; + u32 nb_imem_overlays; + u32 nb_dmem_overlays; + struct {u32 start; u32 size; } load_ovl[64]; + u32 compressed; +}; + struct flcn_ucode_img { u32 *data; struct ls_falcon_ucode_desc *desc;