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/dp: restructure link training code
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -1179,19 +1179,18 @@ init_dp_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
||||
*
|
||||
*/
|
||||
|
||||
struct bit_displayport_encoder_table *dpe = NULL;
|
||||
struct dcb_entry *dcb = bios->display.output;
|
||||
struct drm_device *dev = bios->dev;
|
||||
uint8_t cond = bios->data[offset + 1];
|
||||
int dummy;
|
||||
uint8_t *table, headerlen;
|
||||
|
||||
BIOSLOG(bios, "0x%04X: subop 0x%02X\n", offset, cond);
|
||||
|
||||
if (!iexec->execute)
|
||||
return 3;
|
||||
|
||||
dpe = nouveau_bios_dp_table(dev, dcb, &dummy);
|
||||
if (!dpe) {
|
||||
table = nouveau_bios_dp_table(dev, dcb, &headerlen);
|
||||
if (!table) {
|
||||
NV_ERROR(dev, "0x%04X: INIT_3A: no encoder table!!\n", offset);
|
||||
return 3;
|
||||
}
|
||||
@@ -1208,7 +1207,7 @@ init_dp_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
if (!(dpe->unknown & cond))
|
||||
if (!(table[5] & cond))
|
||||
iexec->execute = false;
|
||||
break;
|
||||
case 5:
|
||||
@@ -4480,7 +4479,7 @@ bios_output_config_match(struct drm_device *dev, struct dcb_entry *dcbent,
|
||||
|
||||
void *
|
||||
nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
||||
int *length)
|
||||
uint8_t *headerlen)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
struct nvbios *bios = &dev_priv->vbios;
|
||||
@@ -4498,7 +4497,7 @@ nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*length = table[4];
|
||||
*headerlen = table[4];
|
||||
return bios_output_config_match(dev, dcbent,
|
||||
bios->display.dp_table_ptr + table[1],
|
||||
table[2], table[3], table[0] >= 0x21);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1081,7 +1081,7 @@ extern int get_pll_limits(struct drm_device *, uint32_t limit_match,
|
||||
extern int nouveau_bios_run_display_table(struct drm_device *, u16 id, int clk,
|
||||
struct dcb_entry *, int crtc);
|
||||
extern void *nouveau_bios_dp_table(struct drm_device *, struct dcb_entry *,
|
||||
int *length);
|
||||
u8 *headerlen);
|
||||
extern bool nouveau_bios_fp_mode(struct drm_device *, struct drm_display_mode *);
|
||||
extern uint8_t *nouveau_bios_embedded_edid(struct drm_device *);
|
||||
extern int nouveau_bios_parse_lvds_table(struct drm_device *, int pxclk,
|
||||
|
||||
@@ -84,21 +84,4 @@ nouveau_encoder_connector_get(struct nouveau_encoder *encoder);
|
||||
int nv50_sor_create(struct drm_connector *, struct dcb_entry *);
|
||||
int nv50_dac_create(struct drm_connector *, struct dcb_entry *);
|
||||
|
||||
struct bit_displayport_encoder_table {
|
||||
uint32_t match;
|
||||
uint8_t record_nr;
|
||||
uint8_t unknown;
|
||||
uint16_t script0;
|
||||
uint16_t script1;
|
||||
uint16_t unknown_table;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct bit_displayport_encoder_table_entry {
|
||||
uint8_t vs_level;
|
||||
uint8_t pre_level;
|
||||
uint8_t reg0;
|
||||
uint8_t reg1;
|
||||
uint8_t reg2;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#endif /* __NOUVEAU_ENCODER_H__ */
|
||||
|
||||
Reference in New Issue
Block a user