drm/nouveau/flcn: specify EMEM address from subdev
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
ca3190e3c7
commit
bc3cfd18ac
@ -30,7 +30,6 @@ struct nvkm_falcon {
|
||||
u8 version;
|
||||
u8 secret;
|
||||
bool debug;
|
||||
bool has_emem;
|
||||
|
||||
struct nvkm_memory *core;
|
||||
bool external;
|
||||
@ -84,6 +83,7 @@ struct nvkm_falcon_func {
|
||||
void (*load_imem)(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool);
|
||||
void (*load_dmem)(struct nvkm_falcon *, void *, u32, u32, u8);
|
||||
void (*read_dmem)(struct nvkm_falcon *, u32, u32, u8, void *);
|
||||
u32 emem_addr;
|
||||
void (*bind_context)(struct nvkm_falcon *, struct nvkm_memory *);
|
||||
int (*wait_for_halt)(struct nvkm_falcon *, u32);
|
||||
int (*clear_interrupt)(struct nvkm_falcon *, u32);
|
||||
|
@ -92,6 +92,7 @@ gp102_sec2_flcn = {
|
||||
.load_imem = nvkm_falcon_v1_load_imem,
|
||||
.load_dmem = nvkm_falcon_v1_load_dmem,
|
||||
.read_dmem = nvkm_falcon_v1_read_dmem,
|
||||
.emem_addr = 0x01000000,
|
||||
.bind_context = gp102_sec2_flcn_bind_context,
|
||||
.wait_for_halt = nvkm_falcon_v1_wait_for_halt,
|
||||
.clear_interrupt = nvkm_falcon_v1_clear_interrupt,
|
||||
|
@ -27,6 +27,7 @@ tu102_sec2_flcn = {
|
||||
.load_imem = nvkm_falcon_v1_load_imem,
|
||||
.load_dmem = nvkm_falcon_v1_load_dmem,
|
||||
.read_dmem = nvkm_falcon_v1_read_dmem,
|
||||
.emem_addr = 0x01000000,
|
||||
.bind_context = gp102_sec2_flcn_bind_context,
|
||||
.wait_for_halt = nvkm_falcon_v1_wait_for_halt,
|
||||
.clear_interrupt = nvkm_falcon_v1_clear_interrupt,
|
||||
|
@ -170,7 +170,6 @@ nvkm_falcon_oneinit(struct nvkm_falcon *falcon)
|
||||
break;
|
||||
case NVKM_ENGINE_SEC2:
|
||||
debug_reg = 0x408;
|
||||
falcon->has_emem = true;
|
||||
break;
|
||||
case NVKM_SUBDEV_GSP:
|
||||
debug_reg = 0x0; /*XXX*/
|
||||
|
@ -89,18 +89,17 @@ nvkm_falcon_v1_load_emem(struct nvkm_falcon *falcon, void *data, u32 start,
|
||||
}
|
||||
}
|
||||
|
||||
static const u32 EMEM_START_ADDR = 0x1000000;
|
||||
|
||||
void
|
||||
nvkm_falcon_v1_load_dmem(struct nvkm_falcon *falcon, void *data, u32 start,
|
||||
u32 size, u8 port)
|
||||
{
|
||||
const struct nvkm_falcon_func *func = falcon->func;
|
||||
u8 rem = size % 4;
|
||||
int i;
|
||||
|
||||
if (start >= EMEM_START_ADDR && falcon->has_emem)
|
||||
if (func->emem_addr && start >= func->emem_addr)
|
||||
return nvkm_falcon_v1_load_emem(falcon, data,
|
||||
start - EMEM_START_ADDR, size,
|
||||
start - func->emem_addr, size,
|
||||
port);
|
||||
|
||||
size -= rem;
|
||||
@ -152,11 +151,12 @@ void
|
||||
nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size,
|
||||
u8 port, void *data)
|
||||
{
|
||||
const struct nvkm_falcon_func *func = falcon->func;
|
||||
u8 rem = size % 4;
|
||||
int i;
|
||||
|
||||
if (start >= EMEM_START_ADDR && falcon->has_emem)
|
||||
return nvkm_falcon_v1_read_emem(falcon, start - EMEM_START_ADDR,
|
||||
if (func->emem_addr && start >= func->emem_addr)
|
||||
return nvkm_falcon_v1_read_emem(falcon, start - func->emem_addr,
|
||||
size, port, data);
|
||||
|
||||
size -= rem;
|
||||
|
Loading…
x
Reference in New Issue
Block a user