forked from Minki/linux
drm/nouveau/mc: support for temporarily masking interrupts from a specific device
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
6e09a57899
commit
66adbfb00d
@ -13,6 +13,7 @@ void nvkm_mc_reset(struct nvkm_device *, enum nvkm_devidx);
|
|||||||
void nvkm_mc_intr(struct nvkm_device *, bool *handled);
|
void nvkm_mc_intr(struct nvkm_device *, bool *handled);
|
||||||
void nvkm_mc_intr_unarm(struct nvkm_device *);
|
void nvkm_mc_intr_unarm(struct nvkm_device *);
|
||||||
void nvkm_mc_intr_rearm(struct nvkm_device *);
|
void nvkm_mc_intr_rearm(struct nvkm_device *);
|
||||||
|
void nvkm_mc_intr_mask(struct nvkm_device *, enum nvkm_devidx, bool enable);
|
||||||
void nvkm_mc_unk260(struct nvkm_device *, u32 data);
|
void nvkm_mc_unk260(struct nvkm_device *, u32 data);
|
||||||
|
|
||||||
int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||||
|
@ -34,6 +34,21 @@ nvkm_mc_unk260(struct nvkm_device *device, u32 data)
|
|||||||
mc->func->unk260(mc, data);
|
mc->func->unk260(mc, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvkm_mc_intr_mask(struct nvkm_device *device, enum nvkm_devidx devidx, bool en)
|
||||||
|
{
|
||||||
|
struct nvkm_mc *mc = device->mc;
|
||||||
|
const struct nvkm_mc_map *map;
|
||||||
|
if (likely(mc) && mc->func->intr_mask) {
|
||||||
|
u32 mask = nvkm_top_intr_mask(device, devidx);
|
||||||
|
for (map = mc->func->intr; !mask && map->stat; map++) {
|
||||||
|
if (map->unit == devidx)
|
||||||
|
mask = map->stat;
|
||||||
|
}
|
||||||
|
mc->func->intr_mask(mc, mask, en ? mask : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvkm_mc_intr_unarm(struct nvkm_device *device)
|
nvkm_mc_intr_unarm(struct nvkm_device *device)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,8 @@ struct nvkm_mc_func {
|
|||||||
void (*intr_unarm)(struct nvkm_mc *);
|
void (*intr_unarm)(struct nvkm_mc *);
|
||||||
/* enable reporting of interrupts to host */
|
/* enable reporting of interrupts to host */
|
||||||
void (*intr_rearm)(struct nvkm_mc *);
|
void (*intr_rearm)(struct nvkm_mc *);
|
||||||
|
/* (un)mask delivery of specific interrupts */
|
||||||
|
void (*intr_mask)(struct nvkm_mc *, u32 mask, u32 stat);
|
||||||
/* retrieve pending interrupt mask (NV_PMC_INTR) */
|
/* retrieve pending interrupt mask (NV_PMC_INTR) */
|
||||||
u32 (*intr_stat)(struct nvkm_mc *);
|
u32 (*intr_stat)(struct nvkm_mc *);
|
||||||
const struct nvkm_mc_map *reset;
|
const struct nvkm_mc_map *reset;
|
||||||
|
Loading…
Reference in New Issue
Block a user