diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2016-04-08 07:24:40 (GMT) |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2016-05-20 04:43:04 (GMT) |
commit | 6defde5ab3e1d8b8fcd187517f878955b5e30465 (patch) | |
tree | 584b5a1cba48b799ef46c8876ab29cf4a81b933f /drivers/gpu/drm/nouveau/nvkm/subdev/mc | |
parent | 87f313e6e6dcd1f46cc4ad134980584c822b67d6 (diff) | |
download | linux-6defde5ab3e1d8b8fcd187517f878955b5e30465.tar.xz |
drm/nouveau/mc: add helper function to handle device reset
This will be later extended to handle PTOP-specified reset masks as well
as the hardcoded ones.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/mc')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c index e6c5bc4..9518301 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c @@ -77,6 +77,26 @@ nvkm_mc_intr(struct nvkm_mc *mc, bool *handled) *handled = intr != 0; } +static void +nvkm_mc_reset_(struct nvkm_mc *mc, enum nvkm_devidx devidx) +{ + struct nvkm_device *device = mc->subdev.device; + struct nvkm_subdev *subdev = nvkm_device_subdev(device, devidx); + u64 pmc_enable = subdev->pmc_enable; + if (pmc_enable) { + nvkm_mask(device, 0x000200, pmc_enable, 0x00000000); + nvkm_mask(device, 0x000200, pmc_enable, pmc_enable); + nvkm_rd32(device, 0x000200); + } +} + +void +nvkm_mc_reset(struct nvkm_mc *mc, enum nvkm_devidx devidx) +{ + if (likely(mc)) + nvkm_mc_reset_(mc, devidx); +} + static int nvkm_mc_fini(struct nvkm_subdev *subdev, bool suspend) { |