diff options
author | 2016-04-08 17:24:40 +1000 | |
---|---|---|
committer | 2016-05-20 14:43:04 +1000 | |
commit | 6defde5ab3e1d8b8fcd187517f878955b5e30465 (patch) | |
tree | 584b5a1cba48b799ef46c8876ab29cf4a81b933f /drivers/gpu/drm/nouveau/nvkm/subdev/mc | |
parent | drm/nouveau/mc: rename struct nvkm_mc_intr to nvkm_mc_map (diff) | |
download | linux-dev-6defde5ab3e1d8b8fcd187517f878955b5e30465.tar.xz linux-dev-6defde5ab3e1d8b8fcd187517f878955b5e30465.zip |
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 e6c5bc461ba6..95183011510e 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) { |