Loading drivers/gpu/drm/nouveau/nouveau_bios.c +2 −1 Original line number Diff line number Diff line Loading @@ -1144,7 +1144,8 @@ init_dp_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) break; case 1: case 2: if (!(entry[5] & cond)) if ((table[0] < 0x40 && !(entry[5] & cond)) || (table[0] == 0x40 && !(entry[4] & cond))) iexec->execute = false; break; case 5: Loading drivers/gpu/drm/nouveau/nouveau_dp.c +11 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,7 @@ nouveau_dp_bios_data(struct drm_device *dev, struct dcb_entry *dcb, u8 **entry) case 0x20: case 0x21: case 0x30: case 0x40: break; default: NV_ERROR(dev, "displayport table 0x%02x unknown\n", table[0]); Loading Loading @@ -366,6 +367,10 @@ dp_set_downspread(struct drm_device *dev, struct dp_state *dp, bool enable) if (table[0] >= 0x20 && table[0] <= 0x30) { if (enable) script = ROM16(entry[12]); else script = ROM16(entry[14]); } else if (table[0] == 0x40) { if (enable) script = ROM16(entry[11]); else script = ROM16(entry[13]); } } Loading @@ -380,6 +385,9 @@ dp_link_train_init(struct drm_device *dev, struct dp_state *dp) if (table) { if (table[0] >= 0x20 && table[0] <= 0x30) script = ROM16(entry[6]); else if (table[0] == 0x40) script = ROM16(entry[5]); } nouveau_bios_run_init_table(dev, script, dp->dcb, dp->crtc); Loading @@ -393,6 +401,9 @@ dp_link_train_fini(struct drm_device *dev, struct dp_state *dp) if (table) { if (table[0] >= 0x20 && table[0] <= 0x30) script = ROM16(entry[8]); else if (table[0] == 0x40) script = ROM16(entry[7]); } nouveau_bios_run_init_table(dev, script, dp->dcb, dp->crtc); Loading drivers/gpu/drm/nouveau/nvd0_display.c +6 −0 Original line number Diff line number Diff line Loading @@ -1226,6 +1226,11 @@ nvd0_sor_dp_train_adj(struct drm_device *dev, struct dcb_entry *dcb, if (table[0] == 0x30) { config = entry + table[4]; config += table[5] * preem; } else if (table[0] == 0x40) { config = table + table[1]; config += table[2] * table[3]; config += table[6] * preem; } } Loading Loading @@ -1258,6 +1263,7 @@ nvd0_sor_dp_link_set(struct drm_device *dev, struct dcb_entry *dcb, int crtc, table = nouveau_dp_bios_data(dev, dcb, &entry); if (table) { if (table[0] == 0x30) entry = ROMPTR(dev, entry[10]); else if (table[0] == 0x40) entry = ROMPTR(dev, entry[9]); else entry = NULL; while (entry) { Loading Loading
drivers/gpu/drm/nouveau/nouveau_bios.c +2 −1 Original line number Diff line number Diff line Loading @@ -1144,7 +1144,8 @@ init_dp_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec) break; case 1: case 2: if (!(entry[5] & cond)) if ((table[0] < 0x40 && !(entry[5] & cond)) || (table[0] == 0x40 && !(entry[4] & cond))) iexec->execute = false; break; case 5: Loading
drivers/gpu/drm/nouveau/nouveau_dp.c +11 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,7 @@ nouveau_dp_bios_data(struct drm_device *dev, struct dcb_entry *dcb, u8 **entry) case 0x20: case 0x21: case 0x30: case 0x40: break; default: NV_ERROR(dev, "displayport table 0x%02x unknown\n", table[0]); Loading Loading @@ -366,6 +367,10 @@ dp_set_downspread(struct drm_device *dev, struct dp_state *dp, bool enable) if (table[0] >= 0x20 && table[0] <= 0x30) { if (enable) script = ROM16(entry[12]); else script = ROM16(entry[14]); } else if (table[0] == 0x40) { if (enable) script = ROM16(entry[11]); else script = ROM16(entry[13]); } } Loading @@ -380,6 +385,9 @@ dp_link_train_init(struct drm_device *dev, struct dp_state *dp) if (table) { if (table[0] >= 0x20 && table[0] <= 0x30) script = ROM16(entry[6]); else if (table[0] == 0x40) script = ROM16(entry[5]); } nouveau_bios_run_init_table(dev, script, dp->dcb, dp->crtc); Loading @@ -393,6 +401,9 @@ dp_link_train_fini(struct drm_device *dev, struct dp_state *dp) if (table) { if (table[0] >= 0x20 && table[0] <= 0x30) script = ROM16(entry[8]); else if (table[0] == 0x40) script = ROM16(entry[7]); } nouveau_bios_run_init_table(dev, script, dp->dcb, dp->crtc); Loading
drivers/gpu/drm/nouveau/nvd0_display.c +6 −0 Original line number Diff line number Diff line Loading @@ -1226,6 +1226,11 @@ nvd0_sor_dp_train_adj(struct drm_device *dev, struct dcb_entry *dcb, if (table[0] == 0x30) { config = entry + table[4]; config += table[5] * preem; } else if (table[0] == 0x40) { config = table + table[1]; config += table[2] * table[3]; config += table[6] * preem; } } Loading Loading @@ -1258,6 +1263,7 @@ nvd0_sor_dp_link_set(struct drm_device *dev, struct dcb_entry *dcb, int crtc, table = nouveau_dp_bios_data(dev, dcb, &entry); if (table) { if (table[0] == 0x30) entry = ROMPTR(dev, entry[10]); else if (table[0] == 0x40) entry = ROMPTR(dev, entry[9]); else entry = NULL; while (entry) { Loading