162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */
262306a36Sopenharmony_ci#ifndef __NVFW_FLCN_H__
362306a36Sopenharmony_ci#define __NVFW_FLCN_H__
462306a36Sopenharmony_ci#include <core/os.h>
562306a36Sopenharmony_cistruct nvkm_subdev;
662306a36Sopenharmony_ci
762306a36Sopenharmony_cistruct loader_config {
862306a36Sopenharmony_ci	u32 dma_idx;
962306a36Sopenharmony_ci	u32 code_dma_base;
1062306a36Sopenharmony_ci	u32 code_size_total;
1162306a36Sopenharmony_ci	u32 code_size_to_load;
1262306a36Sopenharmony_ci	u32 code_entry_point;
1362306a36Sopenharmony_ci	u32 data_dma_base;
1462306a36Sopenharmony_ci	u32 data_size;
1562306a36Sopenharmony_ci	u32 overlay_dma_base;
1662306a36Sopenharmony_ci	u32 argc;
1762306a36Sopenharmony_ci	u32 argv;
1862306a36Sopenharmony_ci	u32 code_dma_base1;
1962306a36Sopenharmony_ci	u32 data_dma_base1;
2062306a36Sopenharmony_ci	u32 overlay_dma_base1;
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_civoid
2462306a36Sopenharmony_ciloader_config_dump(struct nvkm_subdev *, const struct loader_config *);
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct loader_config_v1 {
2762306a36Sopenharmony_ci	u32 reserved;
2862306a36Sopenharmony_ci	u32 dma_idx;
2962306a36Sopenharmony_ci	u64 code_dma_base;
3062306a36Sopenharmony_ci	u32 code_size_total;
3162306a36Sopenharmony_ci	u32 code_size_to_load;
3262306a36Sopenharmony_ci	u32 code_entry_point;
3362306a36Sopenharmony_ci	u64 data_dma_base;
3462306a36Sopenharmony_ci	u32 data_size;
3562306a36Sopenharmony_ci	u64 overlay_dma_base;
3662306a36Sopenharmony_ci	u32 argc;
3762306a36Sopenharmony_ci	u32 argv;
3862306a36Sopenharmony_ci} __packed;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_civoid
4162306a36Sopenharmony_ciloader_config_v1_dump(struct nvkm_subdev *, const struct loader_config_v1 *);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistruct flcn_bl_dmem_desc {
4462306a36Sopenharmony_ci	u32 reserved[4];
4562306a36Sopenharmony_ci	u32 signature[4];
4662306a36Sopenharmony_ci	u32 ctx_dma;
4762306a36Sopenharmony_ci	u32 code_dma_base;
4862306a36Sopenharmony_ci	u32 non_sec_code_off;
4962306a36Sopenharmony_ci	u32 non_sec_code_size;
5062306a36Sopenharmony_ci	u32 sec_code_off;
5162306a36Sopenharmony_ci	u32 sec_code_size;
5262306a36Sopenharmony_ci	u32 code_entry_point;
5362306a36Sopenharmony_ci	u32 data_dma_base;
5462306a36Sopenharmony_ci	u32 data_size;
5562306a36Sopenharmony_ci	u32 code_dma_base1;
5662306a36Sopenharmony_ci	u32 data_dma_base1;
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_civoid
6062306a36Sopenharmony_ciflcn_bl_dmem_desc_dump(struct nvkm_subdev *, const struct flcn_bl_dmem_desc *);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cistruct flcn_bl_dmem_desc_v1 {
6362306a36Sopenharmony_ci	u32 reserved[4];
6462306a36Sopenharmony_ci	u32 signature[4];
6562306a36Sopenharmony_ci	u32 ctx_dma;
6662306a36Sopenharmony_ci	u64 code_dma_base;
6762306a36Sopenharmony_ci	u32 non_sec_code_off;
6862306a36Sopenharmony_ci	u32 non_sec_code_size;
6962306a36Sopenharmony_ci	u32 sec_code_off;
7062306a36Sopenharmony_ci	u32 sec_code_size;
7162306a36Sopenharmony_ci	u32 code_entry_point;
7262306a36Sopenharmony_ci	u64 data_dma_base;
7362306a36Sopenharmony_ci	u32 data_size;
7462306a36Sopenharmony_ci} __packed;
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_civoid flcn_bl_dmem_desc_v1_dump(struct nvkm_subdev *,
7762306a36Sopenharmony_ci			       const struct flcn_bl_dmem_desc_v1 *);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistruct flcn_bl_dmem_desc_v2 {
8062306a36Sopenharmony_ci	u32 reserved[4];
8162306a36Sopenharmony_ci	u32 signature[4];
8262306a36Sopenharmony_ci	u32 ctx_dma;
8362306a36Sopenharmony_ci	u64 code_dma_base;
8462306a36Sopenharmony_ci	u32 non_sec_code_off;
8562306a36Sopenharmony_ci	u32 non_sec_code_size;
8662306a36Sopenharmony_ci	u32 sec_code_off;
8762306a36Sopenharmony_ci	u32 sec_code_size;
8862306a36Sopenharmony_ci	u32 code_entry_point;
8962306a36Sopenharmony_ci	u64 data_dma_base;
9062306a36Sopenharmony_ci	u32 data_size;
9162306a36Sopenharmony_ci	u32 argc;
9262306a36Sopenharmony_ci	u32 argv;
9362306a36Sopenharmony_ci} __packed;
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_civoid flcn_bl_dmem_desc_v2_dump(struct nvkm_subdev *,
9662306a36Sopenharmony_ci			       const struct flcn_bl_dmem_desc_v2 *);
9762306a36Sopenharmony_ci#endif
98