You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -1118,12 +1118,21 @@ nouveau_connector_hotplug(struct nvif_notify *notify)
|
||||
struct nouveau_drm *drm = nouveau_drm(connector->dev);
|
||||
const struct nvif_notify_conn_rep_v0 *rep = notify->data;
|
||||
const char *name = connector->name;
|
||||
struct nouveau_encoder *nv_encoder;
|
||||
|
||||
if (rep->mask & NVIF_NOTIFY_CONN_V0_IRQ) {
|
||||
NV_DEBUG(drm, "service %s\n", name);
|
||||
if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP)))
|
||||
nv50_mstm_service(nv_encoder->dp.mstm);
|
||||
} else {
|
||||
bool plugged = (rep->mask != NVIF_NOTIFY_CONN_V0_UNPLUG);
|
||||
|
||||
NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name);
|
||||
if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP))) {
|
||||
if (!plugged)
|
||||
nv50_mstm_remove(nv_encoder->dp.mstm);
|
||||
}
|
||||
|
||||
drm_helper_hpd_irq_event(connector->dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,10 @@
|
||||
#include <nvif/class.h>
|
||||
#include <nvif/cl5070.h>
|
||||
|
||||
MODULE_PARM_DESC(mst, "Enable DisplayPort multi-stream (default: enabled)");
|
||||
static int nouveau_mst = 1;
|
||||
module_param_named(mst, nouveau_mst, int, 0400);
|
||||
|
||||
static void
|
||||
nouveau_dp_probe_oui(struct drm_device *dev, struct nvkm_i2c_aux *aux, u8 *dpcd)
|
||||
{
|
||||
@@ -88,7 +92,9 @@ nouveau_dp_detect(struct nouveau_encoder *nv_encoder)
|
||||
|
||||
nouveau_dp_probe_oui(dev, aux, dpcd);
|
||||
|
||||
ret = nv50_mstm_detect(nv_encoder->dp.mstm, dpcd, 0);
|
||||
ret = nv50_mstm_detect(nv_encoder->dp.mstm, dpcd, nouveau_mst);
|
||||
if (ret == 1)
|
||||
return NOUVEAU_DP_MST;
|
||||
if (ret == 0)
|
||||
return NOUVEAU_DP_SST;
|
||||
return ret;
|
||||
|
||||
@@ -103,4 +103,6 @@ struct nouveau_connector *
|
||||
nouveau_encoder_connector_get(struct nouveau_encoder *encoder);
|
||||
|
||||
int nv50_mstm_detect(struct nv50_mstm *, u8 dpcd[8], int allow);
|
||||
void nv50_mstm_remove(struct nv50_mstm *);
|
||||
void nv50_mstm_service(struct nv50_mstm *);
|
||||
#endif /* __NOUVEAU_ENCODER_H__ */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user