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