drm/nouveau/pmu/gk20a: use falcon library functions
authorAlexandre Courbot <acourbot@nvidia.com>
Tue, 13 Dec 2016 08:11:24 +0000 (17:11 +0900)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 17 Feb 2017 05:14:31 +0000 (15:14 +1000)
Use the falcon library functions where relevant.

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

index 4a0f80983564b0f0db6de7143ce25cd890d6c4d8..9ca0db796cbe4fe581d0b88b6f7a71c1a5434483 100644 (file)
@@ -95,17 +95,19 @@ static void
 gk20a_pmu_dvfs_get_dev_status(struct gk20a_pmu *pmu,
                              struct gk20a_pmu_dvfs_dev_status *status)
 {
-       struct nvkm_device *device = pmu->base.subdev.device;
-       status->busy = nvkm_rd32(device, 0x10a508 + (BUSY_SLOT * 0x10));
-       status->total= nvkm_rd32(device, 0x10a508 + (CLK_SLOT * 0x10));
+       struct nvkm_falcon *falcon = pmu->base.falcon;
+
+       status->busy = nvkm_falcon_rd32(falcon, 0x508 + (BUSY_SLOT * 0x10));
+       status->total= nvkm_falcon_rd32(falcon, 0x508 + (CLK_SLOT * 0x10));
 }
 
 static void
 gk20a_pmu_dvfs_reset_dev_status(struct gk20a_pmu *pmu)
 {
-       struct nvkm_device *device = pmu->base.subdev.device;
-       nvkm_wr32(device, 0x10a508 + (BUSY_SLOT * 0x10), 0x80000000);
-       nvkm_wr32(device, 0x10a508 + (CLK_SLOT * 0x10), 0x80000000);
+       struct nvkm_falcon *falcon = pmu->base.falcon;
+
+       nvkm_falcon_wr32(falcon, 0x508 + (BUSY_SLOT * 0x10), 0x80000000);
+       nvkm_falcon_wr32(falcon, 0x508 + (CLK_SLOT * 0x10), 0x80000000);
 }
 
 static void
@@ -157,18 +159,29 @@ gk20a_pmu_fini(struct nvkm_pmu *pmu)
 {
        struct gk20a_pmu *gpmu = gk20a_pmu(pmu);
        nvkm_timer_alarm_cancel(pmu->subdev.device->timer, &gpmu->alarm);
+
+       nvkm_falcon_put(pmu->falcon, &pmu->subdev);
 }
 
 static int
 gk20a_pmu_init(struct nvkm_pmu *pmu)
 {
        struct gk20a_pmu *gpmu = gk20a_pmu(pmu);
+       struct nvkm_subdev *subdev = &pmu->subdev;
        struct nvkm_device *device = pmu->subdev.device;
+       struct nvkm_falcon *falcon = pmu->falcon;
+       int ret;
+
+       ret = nvkm_falcon_get(falcon, subdev);
+       if (ret) {
+               nvkm_error(subdev, "cannot acquire %s falcon!\n", falcon->name);
+               return ret;
+       }
 
        /* init pwr perf counter */
-       nvkm_wr32(device, 0x10a504 + (BUSY_SLOT * 0x10), 0x00200001);
-       nvkm_wr32(device, 0x10a50c + (BUSY_SLOT * 0x10), 0x00000002);
-       nvkm_wr32(device, 0x10a50c + (CLK_SLOT * 0x10), 0x00000003);
+       nvkm_falcon_wr32(falcon, 0x504 + (BUSY_SLOT * 0x10), 0x00200001);
+       nvkm_falcon_wr32(falcon, 0x50c + (BUSY_SLOT * 0x10), 0x00000002);
+       nvkm_falcon_wr32(falcon, 0x50c + (CLK_SLOT * 0x10), 0x00000003);
 
        nvkm_timer_alarm(device->timer, 2000000000, &gpmu->alarm);
        return 0;