WIP FPC-III support
[linux/fpc-iii.git] / drivers / gpu / drm / nouveau / nvkm / subdev / acr / priv.h
blobd71af17a169a40e6837bffb56de71b93dbd27828
1 #ifndef __NVKM_ACR_PRIV_H__
2 #define __NVKM_ACR_PRIV_H__
3 #include <subdev/acr.h>
4 struct lsb_header_tail;
6 struct nvkm_acr_fwif {
7 int version;
8 int (*load)(struct nvkm_acr *, int version,
9 const struct nvkm_acr_fwif *);
10 const struct nvkm_acr_func *func;
13 int gm200_acr_nofw(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
14 int gm20b_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
15 int gp102_acr_load(struct nvkm_acr *, int, const struct nvkm_acr_fwif *);
17 struct nvkm_acr_lsf;
18 struct nvkm_acr_func {
19 const struct nvkm_acr_hsf_fwif *load;
20 const struct nvkm_acr_hsf_fwif *ahesasc;
21 const struct nvkm_acr_hsf_fwif *asb;
22 const struct nvkm_acr_hsf_fwif *unload;
23 int (*wpr_parse)(struct nvkm_acr *);
24 u32 (*wpr_layout)(struct nvkm_acr *);
25 int (*wpr_alloc)(struct nvkm_acr *, u32 wpr_size);
26 int (*wpr_build)(struct nvkm_acr *, struct nvkm_acr_lsf *rtos);
27 void (*wpr_patch)(struct nvkm_acr *, s64 adjust);
28 void (*wpr_check)(struct nvkm_acr *, u64 *start, u64 *limit);
29 int (*init)(struct nvkm_acr *);
30 void (*fini)(struct nvkm_acr *);
31 u64 bootstrap_falcons;
34 extern const struct nvkm_acr_func gm200_acr;
35 int gm200_acr_wpr_parse(struct nvkm_acr *);
36 u32 gm200_acr_wpr_layout(struct nvkm_acr *);
37 int gm200_acr_wpr_build(struct nvkm_acr *, struct nvkm_acr_lsf *);
38 void gm200_acr_wpr_patch(struct nvkm_acr *, s64);
39 void gm200_acr_wpr_check(struct nvkm_acr *, u64 *, u64 *);
40 void gm200_acr_wpr_build_lsb_tail(struct nvkm_acr_lsfw *,
41 struct lsb_header_tail *);
42 int gm200_acr_init(struct nvkm_acr *);
44 int gm20b_acr_wpr_alloc(struct nvkm_acr *, u32 wpr_size);
46 int gp102_acr_wpr_parse(struct nvkm_acr *);
47 u32 gp102_acr_wpr_layout(struct nvkm_acr *);
48 int gp102_acr_wpr_alloc(struct nvkm_acr *, u32 wpr_size);
49 int gp102_acr_wpr_build(struct nvkm_acr *, struct nvkm_acr_lsf *);
50 int gp102_acr_wpr_build_lsb(struct nvkm_acr *, struct nvkm_acr_lsfw *);
51 void gp102_acr_wpr_patch(struct nvkm_acr *, s64);
53 struct nvkm_acr_hsfw {
54 const struct nvkm_acr_hsf_func *func;
55 const char *name;
56 struct list_head head;
58 u32 imem_size;
59 u32 imem_tag;
60 u32 *imem;
62 u8 *image;
63 u32 image_size;
64 u32 non_sec_addr;
65 u32 non_sec_size;
66 u32 sec_addr;
67 u32 sec_size;
68 u32 data_addr;
69 u32 data_size;
71 struct {
72 struct {
73 void *data;
74 u32 size;
75 } prod, dbg;
76 u32 patch_loc;
77 } sig;
80 struct nvkm_acr_hsf_fwif {
81 int version;
82 int (*load)(struct nvkm_acr *, const char *bl, const char *fw,
83 const char *name, int version,
84 const struct nvkm_acr_hsf_fwif *);
85 const struct nvkm_acr_hsf_func *func;
88 int nvkm_acr_hsfw_load(struct nvkm_acr *, const char *, const char *,
89 const char *, int, const struct nvkm_acr_hsf_fwif *);
90 void nvkm_acr_hsfw_del_all(struct nvkm_acr *);
92 struct nvkm_acr_hsf {
93 const struct nvkm_acr_hsf_func *func;
94 const char *name;
95 struct list_head head;
97 u32 imem_size;
98 u32 imem_tag;
99 u32 *imem;
101 u32 non_sec_addr;
102 u32 non_sec_size;
103 u32 sec_addr;
104 u32 sec_size;
105 u32 data_addr;
106 u32 data_size;
108 struct nvkm_memory *ucode;
109 struct nvkm_vma *vma;
110 struct nvkm_falcon *falcon;
113 struct nvkm_acr_hsf_func {
114 int (*load)(struct nvkm_acr *, struct nvkm_acr_hsfw *);
115 int (*boot)(struct nvkm_acr *, struct nvkm_acr_hsf *);
116 void (*bld)(struct nvkm_acr *, struct nvkm_acr_hsf *);
119 int gm200_acr_hsfw_load(struct nvkm_acr *, struct nvkm_acr_hsfw *,
120 struct nvkm_falcon *);
121 int gm200_acr_hsfw_boot(struct nvkm_acr *, struct nvkm_acr_hsf *,
122 u32 clear_intr, u32 mbox0_ok);
124 int gm200_acr_load_boot(struct nvkm_acr *, struct nvkm_acr_hsf *);
126 extern const struct nvkm_acr_hsf_func gm200_acr_unload_0;
127 int gm200_acr_unload_load(struct nvkm_acr *, struct nvkm_acr_hsfw *);
128 int gm200_acr_unload_boot(struct nvkm_acr *, struct nvkm_acr_hsf *);
129 void gm200_acr_hsfw_bld(struct nvkm_acr *, struct nvkm_acr_hsf *);
131 extern const struct nvkm_acr_hsf_func gm20b_acr_load_0;
133 int gp102_acr_load_load(struct nvkm_acr *, struct nvkm_acr_hsfw *);
135 extern const struct nvkm_acr_hsf_func gp108_acr_unload_0;
136 void gp108_acr_hsfw_bld(struct nvkm_acr *, struct nvkm_acr_hsf *);
138 int nvkm_acr_new_(const struct nvkm_acr_fwif *, struct nvkm_device *, int,
139 struct nvkm_acr **);
140 int nvkm_acr_hsf_boot(struct nvkm_acr *, const char *name);
142 struct nvkm_acr_lsf {
143 const struct nvkm_acr_lsf_func *func;
144 struct nvkm_falcon *falcon;
145 enum nvkm_acr_lsf_id id;
146 struct list_head head;
149 struct nvkm_acr_lsfw *nvkm_acr_lsfw_add(const struct nvkm_acr_lsf_func *,
150 struct nvkm_acr *, struct nvkm_falcon *,
151 enum nvkm_acr_lsf_id);
152 void nvkm_acr_lsfw_del(struct nvkm_acr_lsfw *);
153 void nvkm_acr_lsfw_del_all(struct nvkm_acr *);
154 #endif