122dcda45SBen Skeggs /* SPDX-License-Identifier: MIT */ 222dcda45SBen Skeggs #ifndef __NVFW_FLCN_H__ 322dcda45SBen Skeggs #define __NVFW_FLCN_H__ 422dcda45SBen Skeggs #include <core/os.h> 522dcda45SBen Skeggs struct nvkm_subdev; 622dcda45SBen Skeggs 722dcda45SBen Skeggs struct loader_config { 822dcda45SBen Skeggs u32 dma_idx; 922dcda45SBen Skeggs u32 code_dma_base; 1022dcda45SBen Skeggs u32 code_size_total; 1122dcda45SBen Skeggs u32 code_size_to_load; 1222dcda45SBen Skeggs u32 code_entry_point; 1322dcda45SBen Skeggs u32 data_dma_base; 1422dcda45SBen Skeggs u32 data_size; 1522dcda45SBen Skeggs u32 overlay_dma_base; 1622dcda45SBen Skeggs u32 argc; 1722dcda45SBen Skeggs u32 argv; 1822dcda45SBen Skeggs u32 code_dma_base1; 1922dcda45SBen Skeggs u32 data_dma_base1; 2022dcda45SBen Skeggs u32 overlay_dma_base1; 2122dcda45SBen Skeggs }; 2222dcda45SBen Skeggs 2322dcda45SBen Skeggs void 2422dcda45SBen Skeggs loader_config_dump(struct nvkm_subdev *, const struct loader_config *); 2522dcda45SBen Skeggs 2622dcda45SBen Skeggs struct loader_config_v1 { 2722dcda45SBen Skeggs u32 reserved; 2822dcda45SBen Skeggs u32 dma_idx; 2922dcda45SBen Skeggs u64 code_dma_base; 3022dcda45SBen Skeggs u32 code_size_total; 3122dcda45SBen Skeggs u32 code_size_to_load; 3222dcda45SBen Skeggs u32 code_entry_point; 3322dcda45SBen Skeggs u64 data_dma_base; 3422dcda45SBen Skeggs u32 data_size; 3522dcda45SBen Skeggs u64 overlay_dma_base; 3622dcda45SBen Skeggs u32 argc; 3722dcda45SBen Skeggs u32 argv; 3822dcda45SBen Skeggs } __packed; 3922dcda45SBen Skeggs 4022dcda45SBen Skeggs void 4122dcda45SBen Skeggs loader_config_v1_dump(struct nvkm_subdev *, const struct loader_config_v1 *); 4222dcda45SBen Skeggs 4322dcda45SBen Skeggs struct flcn_bl_dmem_desc { 4422dcda45SBen Skeggs u32 reserved[4]; 4522dcda45SBen Skeggs u32 signature[4]; 4622dcda45SBen Skeggs u32 ctx_dma; 4722dcda45SBen Skeggs u32 code_dma_base; 4822dcda45SBen Skeggs u32 non_sec_code_off; 4922dcda45SBen Skeggs u32 non_sec_code_size; 5022dcda45SBen Skeggs u32 sec_code_off; 5122dcda45SBen Skeggs u32 sec_code_size; 5222dcda45SBen Skeggs u32 code_entry_point; 5322dcda45SBen Skeggs u32 data_dma_base; 5422dcda45SBen Skeggs u32 data_size; 5522dcda45SBen Skeggs u32 code_dma_base1; 5622dcda45SBen Skeggs u32 data_dma_base1; 5722dcda45SBen Skeggs }; 5822dcda45SBen Skeggs 5922dcda45SBen Skeggs void 6022dcda45SBen Skeggs flcn_bl_dmem_desc_dump(struct nvkm_subdev *, const struct flcn_bl_dmem_desc *); 6122dcda45SBen Skeggs 6222dcda45SBen Skeggs struct flcn_bl_dmem_desc_v1 { 6322dcda45SBen Skeggs u32 reserved[4]; 6422dcda45SBen Skeggs u32 signature[4]; 6522dcda45SBen Skeggs u32 ctx_dma; 6622dcda45SBen Skeggs u64 code_dma_base; 6722dcda45SBen Skeggs u32 non_sec_code_off; 6822dcda45SBen Skeggs u32 non_sec_code_size; 6922dcda45SBen Skeggs u32 sec_code_off; 7022dcda45SBen Skeggs u32 sec_code_size; 7122dcda45SBen Skeggs u32 code_entry_point; 7222dcda45SBen Skeggs u64 data_dma_base; 7322dcda45SBen Skeggs u32 data_size; 7422dcda45SBen Skeggs } __packed; 7522dcda45SBen Skeggs 7622dcda45SBen Skeggs void flcn_bl_dmem_desc_v1_dump(struct nvkm_subdev *, 7722dcda45SBen Skeggs const struct flcn_bl_dmem_desc_v1 *); 7822dcda45SBen Skeggs 7922dcda45SBen Skeggs struct flcn_bl_dmem_desc_v2 { 8022dcda45SBen Skeggs u32 reserved[4]; 8122dcda45SBen Skeggs u32 signature[4]; 8222dcda45SBen Skeggs u32 ctx_dma; 8322dcda45SBen Skeggs u64 code_dma_base; 8422dcda45SBen Skeggs u32 non_sec_code_off; 8522dcda45SBen Skeggs u32 non_sec_code_size; 8622dcda45SBen Skeggs u32 sec_code_off; 8722dcda45SBen Skeggs u32 sec_code_size; 8822dcda45SBen Skeggs u32 code_entry_point; 8922dcda45SBen Skeggs u64 data_dma_base; 9022dcda45SBen Skeggs u32 data_size; 9122dcda45SBen Skeggs u32 argc; 9222dcda45SBen Skeggs u32 argv; 9322dcda45SBen Skeggs } __packed; 9422dcda45SBen Skeggs 9522dcda45SBen Skeggs void flcn_bl_dmem_desc_v2_dump(struct nvkm_subdev *, 9622dcda45SBen Skeggs const struct flcn_bl_dmem_desc_v2 *); 9722dcda45SBen Skeggs #endif 98