mirror of https://gitee.com/openkylin/linux.git
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 <bskeggs@redhat.com>
This commit is contained in:
parent
6defde5ab3
commit
70b01f07db
|
@ -81,8 +81,21 @@ static void
|
||||||
nvkm_mc_reset_(struct nvkm_mc *mc, enum nvkm_devidx devidx)
|
nvkm_mc_reset_(struct nvkm_mc *mc, enum nvkm_devidx devidx)
|
||||||
{
|
{
|
||||||
struct nvkm_device *device = mc->subdev.device;
|
struct nvkm_device *device = mc->subdev.device;
|
||||||
struct nvkm_subdev *subdev = nvkm_device_subdev(device, devidx);
|
const struct nvkm_mc_map *map;
|
||||||
u64 pmc_enable = subdev->pmc_enable;
|
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) {
|
if (pmc_enable) {
|
||||||
nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
|
nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
|
||||||
nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);
|
nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);
|
||||||
|
|
|
@ -20,6 +20,7 @@ struct nvkm_mc_func {
|
||||||
void (*intr_rearm)(struct nvkm_mc *);
|
void (*intr_rearm)(struct nvkm_mc *);
|
||||||
/* retrieve pending interrupt mask (NV_PMC_INTR) */
|
/* retrieve pending interrupt mask (NV_PMC_INTR) */
|
||||||
u32 (*intr_mask)(struct nvkm_mc *);
|
u32 (*intr_mask)(struct nvkm_mc *);
|
||||||
|
const struct nvkm_mc_map *reset;
|
||||||
void (*unk260)(struct nvkm_mc *, u32);
|
void (*unk260)(struct nvkm_mc *, u32);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue