drm/nouveau/falcon: fix IMEM port access
authorAlexandre Courbot <acourbot@nvidia.com>
Tue, 14 Feb 2017 06:55:23 +0000 (15:55 +0900)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 7 Mar 2017 07:05:11 +0000 (17:05 +1000)
All IMEM registers are duplicated per port.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/falcon/v1.c

index 0f5f0f6..7085432 100644 (file)
@@ -40,8 +40,8 @@ nvkm_falcon_v1_load_imem(struct nvkm_falcon *falcon, void *data, u32 start,
        for (i = 0; i < size / 4; i++) {
                /* write new tag every 256B */
                if ((i & 0x3f) == 0)
-                       nvkm_falcon_wr32(falcon, 0x188, tag++);
-               nvkm_falcon_wr32(falcon, 0x184, ((u32 *)data)[i]);
+                       nvkm_falcon_wr32(falcon, 0x188 + (port * 16), tag++);
+               nvkm_falcon_wr32(falcon, 0x184 + (port * 16), ((u32 *)data)[i]);
        }
 
        /*
@@ -53,14 +53,15 @@ nvkm_falcon_v1_load_imem(struct nvkm_falcon *falcon, void *data, u32 start,
 
                /* write new tag every 256B */
                if ((i & 0x3f) == 0)
-                       nvkm_falcon_wr32(falcon, 0x188, tag++);
-               nvkm_falcon_wr32(falcon, 0x184, extra & (BIT(rem * 8) - 1));
+                       nvkm_falcon_wr32(falcon, 0x188 + (port * 16), tag++);
+               nvkm_falcon_wr32(falcon, 0x184 + (port * 16),
+                                extra & (BIT(rem * 8) - 1));
                ++i;
        }
 
        /* code must be padded to 0x40 words */
        for (; i & 0x3f; i++)
-               nvkm_falcon_wr32(falcon, 0x184, 0);
+               nvkm_falcon_wr32(falcon, 0x184 + (port * 16), 0);
 }
 
 static void