mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
Add nvgpu_firmware data structure, and return it instead of Linux struct firmare from nvgpu_request_firmware. Also add abstraction for releasing firmware: nvgpu_release_firmware. JIRA NVGPU-16 Change-Id: I6dae8262957c0d4506f710289e3a43a6c1729fc7 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1463538 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
97 lines
2.2 KiB
C
97 lines
2.2 KiB
C
/*
|
|
* Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*/
|
|
|
|
#ifndef __NVGPU_ACR_H__
|
|
#define __NVGPU_ACR_H__
|
|
|
|
#include "gk20a/mm_gk20a.h"
|
|
|
|
#include "acr_lsfm.h"
|
|
#include "acr_flcnbl.h"
|
|
#include "acr_objlsfm.h"
|
|
#include "acr_objflcn.h"
|
|
|
|
struct nvgpu_firmware;
|
|
|
|
#define MAX_SUPPORTED_LSFM 3 /*PMU, FECS, GPCCS*/
|
|
|
|
#define ACR_COMPLETION_TIMEOUT_MS 10000 /*in msec */
|
|
|
|
#define PMU_SECURE_MODE (0x1)
|
|
#define PMU_LSFM_MANAGED (0x2)
|
|
|
|
struct bin_hdr {
|
|
/* 0x10de */
|
|
u32 bin_magic;
|
|
/* versioning of bin format */
|
|
u32 bin_ver;
|
|
/* Entire image size including this header */
|
|
u32 bin_size;
|
|
/*
|
|
* Header offset of executable binary metadata,
|
|
* start @ offset- 0x100 *
|
|
*/
|
|
u32 header_offset;
|
|
/*
|
|
* Start of executable binary data, start @
|
|
* offset- 0x200
|
|
*/
|
|
u32 data_offset;
|
|
/* Size of executable binary */
|
|
u32 data_size;
|
|
};
|
|
|
|
struct acr_fw_header {
|
|
u32 sig_dbg_offset;
|
|
u32 sig_dbg_size;
|
|
u32 sig_prod_offset;
|
|
u32 sig_prod_size;
|
|
u32 patch_loc;
|
|
u32 patch_sig;
|
|
u32 hdr_offset; /* This header points to acr_ucode_header_t210_load */
|
|
u32 hdr_size; /* Size of above header */
|
|
};
|
|
|
|
struct wpr_carveout_info {
|
|
u64 wpr_base;
|
|
u64 nonwpr_base;
|
|
u64 size;
|
|
};
|
|
|
|
struct acr_desc {
|
|
struct nvgpu_mem ucode_blob;
|
|
struct nvgpu_mem wpr_dummy;
|
|
struct bin_hdr *bl_bin_hdr;
|
|
struct hsflcn_bl_desc *pmu_hsbl_desc;
|
|
struct bin_hdr *hsbin_hdr;
|
|
struct acr_fw_header *fw_hdr;
|
|
u32 pmu_args;
|
|
struct nvgpu_firmware *acr_fw;
|
|
union{
|
|
struct flcn_acr_desc *acr_dmem_desc;
|
|
struct flcn_acr_desc_v1 *acr_dmem_desc_v1;
|
|
};
|
|
struct nvgpu_mem acr_ucode;
|
|
struct nvgpu_firmware *hsbl_fw;
|
|
struct nvgpu_mem hsbl_ucode;
|
|
union {
|
|
struct flcn_bl_dmem_desc bl_dmem_desc;
|
|
struct flcn_bl_dmem_desc_v1 bl_dmem_desc_v1;
|
|
};
|
|
struct nvgpu_firmware *pmu_fw;
|
|
struct nvgpu_firmware *pmu_desc;
|
|
u32 capabilities;
|
|
};
|
|
|
|
#endif /*__NVGPU_ACR_H__*/
|