]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/nouveau/flcn: specify EMEM address from subdev
authorBen Skeggs <bskeggs@redhat.com>
Tue, 14 Jan 2020 20:34:21 +0000 (06:34 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 15 Jan 2020 00:50:27 +0000 (10:50 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h
drivers/gpu/drm/nouveau/nvkm/engine/sec2/gp102.c
drivers/gpu/drm/nouveau/nvkm/engine/sec2/tu102.c
drivers/gpu/drm/nouveau/nvkm/falcon/base.c
drivers/gpu/drm/nouveau/nvkm/falcon/v1.c

index adf33bfffa9f262c12f8d61254ea4cf6fc0dfe5e..e9e3fde9d6a16e12ac7a8a77457c55f8593102eb 100644 (file)
@@ -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);
index 278eb4dfedd74dc53eb24f624528a3732e5a13ea..9ef5623457613bf1ded5a88169940a22d2bed509 100644 (file)
@@ -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,
index cbd89b4291632254a3de56977e6ee87618c7914f..f4dd2a4814b05c11e06178e5985073d980ffab36 100644 (file)
@@ -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,
index fc66cdb825728efccc0cba02c1d36bffffc37ccf..9e9e6808afb7400c018f5504633bb25d2a976c94 100644 (file)
@@ -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*/
index 93e97c31df6c7d991129e8eff6e97c218a13d4bb..1ff9b9c2e651ff8614d3d7718806258b0b892878 100644 (file)
@@ -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;