Lines Matching full:dcb

914 	 * The TMDS table is typically found just before the DCB table, with a  in parse_bit_tmds_tbl_entry()
927 * "or" from the DCB. in parse_bit_tmds_tbl_entry()
1106 * Make sure that 0x36 is blank and can't be mistaken for a DCB in parse_bmp_structure()
1255 u8 *dcb = NULL; in olddcb_table() local
1258 dcb = ROMPTR(dev, drm->vbios.data[0x36]); in olddcb_table()
1259 if (!dcb) { in olddcb_table()
1260 NV_WARN(drm, "No DCB data found in VBIOS\n"); in olddcb_table()
1264 if (dcb[0] >= 0x42) { in olddcb_table()
1265 NV_WARN(drm, "DCB version 0x%02x unknown\n", dcb[0]); in olddcb_table()
1268 if (dcb[0] >= 0x30) { in olddcb_table()
1269 if (ROM32(dcb[6]) == 0x4edcbdcb) in olddcb_table()
1270 return dcb; in olddcb_table()
1272 if (dcb[0] >= 0x20) { in olddcb_table()
1273 if (ROM32(dcb[4]) == 0x4edcbdcb) in olddcb_table()
1274 return dcb; in olddcb_table()
1276 if (dcb[0] >= 0x15) { in olddcb_table()
1277 if (!memcmp(&dcb[-7], "DEV_REC", 7)) in olddcb_table()
1278 return dcb; in olddcb_table()
1297 NV_WARN(drm, "No useful DCB data in VBIOS\n"); in olddcb_table()
1301 NV_WARN(drm, "DCB header validation failed\n"); in olddcb_table()
1308 u8 *dcb = olddcb_table(dev); in olddcb_outp() local
1309 if (dcb && dcb[0] >= 0x30) { in olddcb_outp()
1310 if (idx < dcb[2]) in olddcb_outp()
1311 return dcb + dcb[1] + (idx * dcb[3]); in olddcb_outp()
1313 if (dcb && dcb[0] >= 0x20) { in olddcb_outp()
1314 u8 *i2c = ROMPTR(dev, dcb[2]); in olddcb_outp()
1315 u8 *ent = dcb + 8 + (idx * 8); in olddcb_outp()
1319 if (dcb && dcb[0] >= 0x15) { in olddcb_outp()
1320 u8 *i2c = ROMPTR(dev, dcb[2]); in olddcb_outp()
1321 u8 *ent = dcb + 4 + (idx * 10); in olddcb_outp()
1337 break; /* seen on an NV11 with DCB v1.5 */ in olddcb_outp_foreach()
1339 break; /* seen on an NV17 with DCB v2.0 */ in olddcb_outp_foreach()
1357 u8 *dcb = olddcb_table(dev); in olddcb_conntab() local
1358 if (dcb && dcb[0] >= 0x30 && dcb[1] >= 0x16) { in olddcb_conntab()
1359 u8 *conntab = ROMPTR(dev, dcb[0x14]); in olddcb_conntab()
1375 static struct dcb_output *new_dcb_entry(struct dcb_table *dcb) in new_dcb_entry() argument
1377 struct dcb_output *entry = &dcb->entry[dcb->entries]; in new_dcb_entry()
1380 entry->index = dcb->entries++; in new_dcb_entry()
1385 static void fabricate_dcb_output(struct dcb_table *dcb, int type, int i2c, in fabricate_dcb_output() argument
1388 struct dcb_output *entry = new_dcb_entry(dcb); in fabricate_dcb_output()
1399 parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb, in parse_dcb20_entry() argument
1419 entry->crtconf.maxfreq = (dcb->version < 0x30) ? in parse_dcb20_entry()
1428 if (dcb->version < 0x22) { in parse_dcb20_entry()
1432 * straps when it does, so assume all DCB 2.0 laptops in parse_dcb20_entry()
1456 if (dcb->version >= 0x40) in parse_dcb20_entry()
1466 if (dcb->version >= 0x30) in parse_dcb20_entry()
1507 if (dcb->version >= 0x40) { in parse_dcb20_entry()
1512 else if (dcb->version >= 0x30) in parse_dcb20_entry()
1514 else if (dcb->version >= 0x22) in parse_dcb20_entry()
1519 dcb->entries--; in parse_dcb20_entry()
1525 if (dcb->version < 0x40) { in parse_dcb20_entry()
1535 /* unsure what DCB version introduces this, 3.0? */ in parse_dcb20_entry()
1546 parse_dcb15_entry(struct drm_device *dev, struct dcb_table *dcb, in parse_dcb15_entry() argument
1569 NV_ERROR(drm, "Unknown DCB type %d\n", conn & 0x0000000f); in parse_dcb15_entry()
1600 void merge_like_dcb_entries(struct drm_device *dev, struct dcb_table *dcb) in merge_like_dcb_entries() argument
1603 * DCB v2.0 lists each output combination separately. in merge_like_dcb_entries()
1611 for (i = 0; i < dcb->entries; i++) { in merge_like_dcb_entries()
1612 struct dcb_output *ient = &dcb->entry[i]; in merge_like_dcb_entries()
1615 for (j = i + 1; j < dcb->entries; j++) { in merge_like_dcb_entries()
1616 struct dcb_output *jent = &dcb->entry[j]; in merge_like_dcb_entries()
1626 NV_INFO(drm, "Merging DCB entries %d and %d\n", in merge_like_dcb_entries()
1634 /* Compact entries merged into others out of dcb */ in merge_like_dcb_entries()
1635 for (i = 0; i < dcb->entries; i++) { in merge_like_dcb_entries()
1636 if (dcb->entry[i].type == 100) in merge_like_dcb_entries()
1640 dcb->entry[newentries] = dcb->entry[i]; in merge_like_dcb_entries()
1641 dcb->entry[newentries].index = newentries; in merge_like_dcb_entries()
1646 dcb->entries = newentries; in merge_like_dcb_entries()
1653 struct dcb_table *dcb = &drm->vbios.dcb; in apply_dcb_encoder_quirks() local
1656 * DCB entry 2: 02025312 00000010 in apply_dcb_encoder_quirks()
1657 * DCB entry 3: 02026312 00000020 in apply_dcb_encoder_quirks()
1674 * DCB reports an LVDS output that should be TMDS: in apply_dcb_encoder_quirks()
1675 * DCB entry 1: f2005014 ffffffff in apply_dcb_encoder_quirks()
1679 fabricate_dcb_output(dcb, DCB_OUTPUT_TMDS, 1, 1, DCB_OUTPUT_B); in apply_dcb_encoder_quirks()
1759 struct dcb_table *dcb = &bios->dcb; in fabricate_dcb_encoder_table() local
1765 fabricate_dcb_output(dcb, DCB_OUTPUT_TMDS, 0, all_heads, DCB_OUTPUT_B); in fabricate_dcb_encoder_table()
1766 fabricate_dcb_output(dcb, DCB_OUTPUT_ANALOG, 1, all_heads, DCB_OUTPUT_C); in fabricate_dcb_encoder_table()
1772 fabricate_dcb_output(dcb, DCB_OUTPUT_ANALOG, in fabricate_dcb_encoder_table()
1776 fabricate_dcb_output(dcb, DCB_OUTPUT_TV, in fabricate_dcb_encoder_table()
1782 fabricate_dcb_output(dcb, DCB_OUTPUT_TMDS, in fabricate_dcb_encoder_table()
1791 struct dcb_table *dcb = &drm->vbios.dcb; in parse_dcb_entry() local
1792 u32 conf = (dcb->version >= 0x20) ? ROM32(outp[4]) : ROM32(outp[6]); in parse_dcb_entry()
1797 struct dcb_output *entry = new_dcb_entry(dcb); in parse_dcb_entry()
1799 NV_INFO(drm, "DCB outp %02d: %08x %08x\n", idx, conn, conf); in parse_dcb_entry()
1801 if (dcb->version >= 0x20) in parse_dcb_entry()
1802 ret = parse_dcb20_entry(dev, dcb, conn, conf, entry); in parse_dcb_entry()
1804 ret = parse_dcb15_entry(dev, dcb, conn, conf, entry); in parse_dcb_entry()
1825 struct dcb_table *dcbt = &bios->dcb; in dcb_fake_connectors()
1872 struct dcb_table *dcb = &bios->dcb; in parse_dcb_table() local
1878 /* handle pre-DCB boards */ in parse_dcb_table()
1887 NV_INFO(drm, "DCB version %d.%d\n", dcbt[0] >> 4, dcbt[0] & 0xf); in parse_dcb_table()
1889 dcb->version = dcbt[0]; in parse_dcb_table()
1896 if (dcb->version < 0x21) in parse_dcb_table()
1897 merge_like_dcb_entries(dev, dcb); in parse_dcb_table()
1904 NV_INFO(drm, "DCB conn %02d: %04x\n", in parse_dcb_table()
1907 NV_INFO(drm, "DCB conn %02d: %08x\n", in parse_dcb_table()