66enum nvkm_falcon_mem {
77 IMEM ,
88 DMEM ,
9+ EMEM ,
910};
1011
1112static inline const char *
@@ -14,6 +15,7 @@ nvkm_falcon_mem(enum nvkm_falcon_mem mem)
1415 switch (mem ) {
1516 case IMEM : return "imem" ;
1617 case DMEM : return "dmem" ;
18+ case EMEM : return "emem" ;
1719 default :
1820 WARN_ON (1 );
1921 return "?mem" ;
@@ -25,6 +27,8 @@ struct nvkm_falcon_func_pio {
2527 int max ;
2628 void (* wr_init )(struct nvkm_falcon * , u8 port , bool sec , u32 mem_base );
2729 void (* wr )(struct nvkm_falcon * , u8 port , const u8 * img , int len , u16 tag );
30+ void (* rd_init )(struct nvkm_falcon * , u8 port , u32 mem_base );
31+ void (* rd )(struct nvkm_falcon * , u8 port , const u8 * img , int len );
2832};
2933
3034int nvkm_falcon_ctor (const struct nvkm_falcon_func * , struct nvkm_subdev * owner ,
@@ -33,27 +37,25 @@ void nvkm_falcon_dtor(struct nvkm_falcon *);
3337int nvkm_falcon_reset (struct nvkm_falcon * );
3438int nvkm_falcon_pio_wr (struct nvkm_falcon * , const u8 * img , u32 img_base , u8 port ,
3539 enum nvkm_falcon_mem mem_type , u32 mem_base , int len , u16 tag , bool sec );
40+ int nvkm_falcon_pio_rd (struct nvkm_falcon * , u8 port , enum nvkm_falcon_mem type , u32 mem_base ,
41+ const u8 * img , u32 img_base , int len );
3642
3743int gm200_flcn_reset_wait_mem_scrubbing (struct nvkm_falcon * );
3844int gm200_flcn_disable (struct nvkm_falcon * );
3945int gm200_flcn_enable (struct nvkm_falcon * );
46+ void gm200_flcn_bind_inst (struct nvkm_falcon * , int , u64 );
47+ int gm200_flcn_bind_stat (struct nvkm_falcon * , bool );
4048extern const struct nvkm_falcon_func_pio gm200_flcn_imem_pio ;
4149extern const struct nvkm_falcon_func_pio gm200_flcn_dmem_pio ;
4250
4351int gp102_flcn_reset_eng (struct nvkm_falcon * );
52+ extern const struct nvkm_falcon_func_pio gp102_flcn_emem_pio ;
4453
4554void nvkm_falcon_v1_load_imem (struct nvkm_falcon * ,
4655 void * , u32 , u32 , u16 , u8 , bool );
4756void nvkm_falcon_v1_load_dmem (struct nvkm_falcon * , void * , u32 , u32 , u8 );
48- void nvkm_falcon_v1_read_dmem (struct nvkm_falcon * , u32 , u32 , u8 , void * );
49- void nvkm_falcon_v1_bind_context (struct nvkm_falcon * , struct nvkm_memory * );
50- int nvkm_falcon_v1_wait_for_halt (struct nvkm_falcon * , u32 );
51- int nvkm_falcon_v1_clear_interrupt (struct nvkm_falcon * , u32 );
52- void nvkm_falcon_v1_set_start_addr (struct nvkm_falcon * , u32 start_addr );
5357void nvkm_falcon_v1_start (struct nvkm_falcon * );
5458
55- void gp102_sec2_flcn_bind_context (struct nvkm_falcon * , struct nvkm_memory * );
56-
5759#define FLCN_PRINTK (f ,l ,p ,fmt ,a ...) ({ \
5860 if ((f)->owner->name != (f)->name) \
5961 nvkm_printk___((f)->owner, (f)->user, NV_DBG_##l, p, "%s:"fmt, (f)->name, ##a); \
@@ -70,7 +72,9 @@ struct nvkm_falcon_fw {
7072 const struct nvkm_falcon_fw_func {
7173 int (* signature )(struct nvkm_falcon_fw * , u32 * sig_base_src );
7274 int (* reset )(struct nvkm_falcon_fw * );
75+ int (* setup )(struct nvkm_falcon_fw * );
7376 int (* load )(struct nvkm_falcon_fw * );
77+ int (* load_bld )(struct nvkm_falcon_fw * );
7478 int (* boot )(struct nvkm_falcon_fw * ,
7579 u32 * mbox0 , u32 * mbox1 , u32 mbox0_ok , u32 irqsclr );
7680 } * func ;
@@ -96,11 +100,14 @@ struct nvkm_falcon_fw {
96100 u32 dmem_size ;
97101 u32 dmem_sign ;
98102
103+ u8 * boot ;
104+ u32 boot_size ;
99105 u32 boot_addr ;
100106
101107 struct nvkm_falcon * falcon ;
102108 struct nvkm_memory * inst ;
103109 struct nvkm_vmm * vmm ;
110+ struct nvkm_vma * vma ;
104111};
105112
106113int nvkm_falcon_fw_ctor (const struct nvkm_falcon_fw_func * , const char * name , struct nvkm_device * ,
0 commit comments