aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
diff options
context:
space:
mode:
authorBen Skeggs <[email protected]>2016-04-08 17:24:40 +1000
committerBen Skeggs <[email protected]>2016-05-20 14:43:04 +1000
commit70b01f07dbd093c96e9910ba613c3d40346ee222 (patch)
treef25d92f7268958c624caed9e04c757f476bd0937 /drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
parent6defde5ab3e1d8b8fcd187517f878955b5e30465 (diff)
drm/nouveau/mc: allow for local definition of reset bits
With the addition of PTOP-specified reset bits, it makes more sense to move the definitions here rather than in individual subdev implementations. Signed-off-by: Ben Skeggs <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
index 95183011510e..3793bc7889d5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
@@ -81,8 +81,21 @@ 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;
+ const struct nvkm_mc_map *map;
+ u64 pmc_enable = 0;
+
+ for (map = mc->func->reset; map && map->stat; map++) {
+ if (map->unit == devidx) {
+ pmc_enable = map->stat;
+ break;
+ }
+ }
+
+ if (!pmc_enable) {
+ struct nvkm_subdev *subdev = nvkm_device_subdev(device, devidx);
+ pmc_enable = subdev->pmc_enable;
+ }
+
if (pmc_enable) {
nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);