brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · 73d2a6a Raw
155 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __NVKM_ACR_H__3#define __NVKM_ACR_H__4#define nvkm_acr(p) container_of((p), struct nvkm_acr, subdev)5#include <core/subdev.h>6#include <core/falcon.h>7 8enum nvkm_acr_lsf_id {9	NVKM_ACR_LSF_PMU = 0,10	NVKM_ACR_LSF_GSPLITE = 1,11	NVKM_ACR_LSF_FECS = 2,12	NVKM_ACR_LSF_GPCCS = 3,13	NVKM_ACR_LSF_NVDEC = 4,14	NVKM_ACR_LSF_SEC2 = 7,15	NVKM_ACR_LSF_MINION = 10,16	NVKM_ACR_LSF_NUM17};18 19static inline const char *20nvkm_acr_lsf_id(enum nvkm_acr_lsf_id id)21{22	switch (id) {23	case NVKM_ACR_LSF_PMU    : return "pmu";24	case NVKM_ACR_LSF_GSPLITE: return "gsplite";25	case NVKM_ACR_LSF_FECS   : return "fecs";26	case NVKM_ACR_LSF_GPCCS  : return "gpccs";27	case NVKM_ACR_LSF_NVDEC  : return "nvdec";28	case NVKM_ACR_LSF_SEC2   : return "sec2";29	case NVKM_ACR_LSF_MINION : return "minion";30	default:31		return "unknown";32	}33}34 35struct nvkm_acr {36	const struct nvkm_acr_func *func;37	struct nvkm_subdev subdev;38 39	struct list_head hsfw;40	struct list_head lsfw, lsf;41 42	u64 managed_falcons;43 44	struct nvkm_memory *wpr;45	u64 wpr_start;46	u64 wpr_end;47	u64 shadow_start;48 49	struct nvkm_memory *inst;50	struct nvkm_vmm *vmm;51 52	bool done;53	struct nvkm_acr_lsf *rtos;54 55	const struct firmware *wpr_fw;56	bool wpr_comp;57	u64 wpr_prev;58};59 60bool nvkm_acr_managed_falcon(struct nvkm_device *, enum nvkm_acr_lsf_id);61int nvkm_acr_bootstrap_falcons(struct nvkm_device *, unsigned long mask);62 63int gm200_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);64int gm20b_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);65int gp102_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);66int gp108_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);67int gp10b_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);68int gv100_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);69int tu102_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);70int ga102_acr_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_acr **);71 72struct nvkm_acr_lsfw {73	const struct nvkm_acr_lsf_func *func;74	struct nvkm_falcon *falcon;75	enum nvkm_acr_lsf_id id;76 77	struct list_head head;78 79	struct nvkm_blob img;80 81	const struct firmware *sig;82 83	bool secure_bootloader;84	u32 bootloader_size;85	u32 bootloader_imem_offset;86 87	u32 app_size;88	u32 app_start_offset;89	u32 app_imem_entry;90	u32 app_resident_code_offset;91	u32 app_resident_code_size;92	u32 app_resident_data_offset;93	u32 app_resident_data_size;94	u32 app_imem_offset;95	u32 app_dmem_offset;96 97	u32 ucode_size;98	u32 data_size;99 100	u32 fuse_ver;101	u32 engine_id;102	u32 ucode_id;103	u32 sig_size;104	u32 sig_nr;105	u8 *sigs;106 107	struct {108		u32 lsb;109		u32 img;110		u32 bld;111	} offset;112	u32 bl_data_size;113};114 115struct nvkm_acr_lsf_func {116/* The (currently) map directly to LSB header flags. */117#define NVKM_ACR_LSF_LOAD_CODE_AT_0                                  0x00000001118#define NVKM_ACR_LSF_DMACTL_REQ_CTX                                  0x00000004119#define NVKM_ACR_LSF_FORCE_PRIV_LOAD                                 0x00000008120	u32 flags;121	u32 bl_entry;122	u32 bld_size;123	void (*bld_write)(struct nvkm_acr *, u32 bld, struct nvkm_acr_lsfw *);124	void (*bld_patch)(struct nvkm_acr *, u32 bld, s64 adjust);125	u64 bootstrap_falcons;126	int (*bootstrap_falcon)(struct nvkm_falcon *, enum nvkm_acr_lsf_id);127	int (*bootstrap_multiple_falcons)(struct nvkm_falcon *, u32 mask);128};129 130int131nvkm_acr_lsfw_load_sig_image_desc(struct nvkm_subdev *, struct nvkm_falcon *,132				  enum nvkm_acr_lsf_id, const char *path,133				  int ver, const struct nvkm_acr_lsf_func *);134int135nvkm_acr_lsfw_load_sig_image_desc_v1(struct nvkm_subdev *, struct nvkm_falcon *,136				     enum nvkm_acr_lsf_id, const char *path,137				     int ver, const struct nvkm_acr_lsf_func *);138 139int140nvkm_acr_lsfw_load_sig_image_desc_v2(struct nvkm_subdev *, struct nvkm_falcon *,141				     enum nvkm_acr_lsf_id, const char *path,142				     int ver, const struct nvkm_acr_lsf_func *);143 144int145nvkm_acr_lsfw_load_bl_inst_data_sig(struct nvkm_subdev *, struct nvkm_falcon *,146				    enum nvkm_acr_lsf_id, const char *path,147				    int ver, const struct nvkm_acr_lsf_func *);148 149int150nvkm_acr_lsfw_load_bl_sig_net(struct nvkm_subdev *, struct nvkm_falcon *,151				    enum nvkm_acr_lsf_id, const char *path,152				    int ver, const struct nvkm_acr_lsf_func *,153				    const void *, u32, const void *, u32);154#endif155