diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/include/nvif/cl5070.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c | 10 |
3 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl5070.h b/drivers/gpu/drm/nouveau/include/nvif/cl5070.h index 7cdf53615d7b..bced81987269 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/cl5070.h +++ b/drivers/gpu/drm/nouveau/include/nvif/cl5070.h | |||
| @@ -69,7 +69,10 @@ struct nv50_disp_sor_hdmi_pwr_v0 { | |||
| 69 | __u8 rekey; | 69 | __u8 rekey; |
| 70 | __u8 avi_infoframe_length; | 70 | __u8 avi_infoframe_length; |
| 71 | __u8 vendor_infoframe_length; | 71 | __u8 vendor_infoframe_length; |
| 72 | __u8 pad06[2]; | 72 | #define NV50_DISP_SOR_HDMI_PWR_V0_SCDC_SCRAMBLE (1 << 0) |
| 73 | #define NV50_DISP_SOR_HDMI_PWR_V0_SCDC_DIV_BY_4 (1 << 1) | ||
| 74 | __u8 scdc; | ||
| 75 | __u8 pad07[1]; | ||
| 73 | }; | 76 | }; |
| 74 | 77 | ||
| 75 | struct nv50_disp_sor_lvds_script_v0 { | 78 | struct nv50_disp_sor_lvds_script_v0 { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h index 19911211a12a..aa7aa2f21cf6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.h | |||
| @@ -61,6 +61,7 @@ struct nvkm_ior_func { | |||
| 61 | void (*ctrl)(struct nvkm_ior *, int head, bool enable, | 61 | void (*ctrl)(struct nvkm_ior *, int head, bool enable, |
| 62 | u8 max_ac_packet, u8 rekey, u8 *avi, u8 avi_size, | 62 | u8 max_ac_packet, u8 rekey, u8 *avi, u8 avi_size, |
| 63 | u8 *vendor, u8 vendor_size); | 63 | u8 *vendor, u8 vendor_size); |
| 64 | void (*scdc)(struct nvkm_ior *, int head, u8 scdc); | ||
| 64 | } hdmi; | 65 | } hdmi; |
| 65 | 66 | ||
| 66 | struct { | 67 | struct { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c index 3aa5a2879239..5f758948d6e1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c | |||
| @@ -176,9 +176,10 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
| 176 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); | 176 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
| 177 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { | 177 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
| 178 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " | 178 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " |
| 179 | "max_ac_packet %d rekey %d\n", | 179 | "max_ac_packet %d rekey %d scdc %d\n", |
| 180 | args->v0.version, args->v0.state, | 180 | args->v0.version, args->v0.state, |
| 181 | args->v0.max_ac_packet, args->v0.rekey); | 181 | args->v0.max_ac_packet, args->v0.rekey, |
| 182 | args->v0.scdc); | ||
| 182 | if (args->v0.max_ac_packet > 0x1f || args->v0.rekey > 0x7f) | 183 | if (args->v0.max_ac_packet > 0x1f || args->v0.rekey > 0x7f) |
| 183 | return -EINVAL; | 184 | return -EINVAL; |
| 184 | if ((args->v0.avi_infoframe_length | 185 | if ((args->v0.avi_infoframe_length |
| @@ -202,6 +203,11 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
| 202 | args->v0.max_ac_packet, | 203 | args->v0.max_ac_packet, |
| 203 | args->v0.rekey, avi, avi_size, | 204 | args->v0.rekey, avi, avi_size, |
| 204 | vendor, vendor_size); | 205 | vendor, vendor_size); |
| 206 | |||
| 207 | if (outp->ior->func->hdmi.scdc) | ||
| 208 | outp->ior->func->hdmi.scdc( | ||
| 209 | outp->ior, hidx, args->v0.scdc); | ||
| 210 | |||
| 205 | return 0; | 211 | return 0; |
| 206 | } | 212 | } |
| 207 | break; | 213 | break; |
