Lines Matching refs:bios

66 static uint16_t clkcmptable(struct nvbios *bios, uint16_t clktable, int pxclk)
71 if (bios->major_version < 5) /* pre BIT */
77 compareclk = ROM16(bios->data[clktable + compare_record_len * i]);
79 if (bios->major_version < 5) {
80 uint8_t tmdssub = bios->data[clktable + 2 + compare_record_len * i];
81 scriptptr = ROM16(bios->data[bios->init_script_tbls_ptr + tmdssub * 2]);
83 scriptptr = ROM16(bios->data[clktable + 2 + compare_record_len * i]);
110 struct nvbios *bios = &drm->vbios;
111 uint8_t sub = bios->data[bios->fp.xlated_entry + script] + (bios->fp.link_c_increment && dcbent->or & DCB_OUTPUT_C ? 1 : 0);
112 uint16_t scriptofs = ROM16(bios->data[bios->init_script_tbls_ptr + sub * 2]);
117 if (!bios->fp.xlated_entry || !sub || !scriptofs)
120 run_digital_op_script(dev, scriptofs, dcbent, head, bios->fp.dual_link);
124 mdelay(ROM16(bios->data[bios->fp.xlated_entry + 7]));
150 struct nvbios *bios = &drm->vbios;
164 scriptptr = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 7 + outputset * 2]);
168 scriptptr = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 11 + outputset * 2]);
171 clktable = bios->fp.lvdsmanufacturerpointer + 15;
176 if (bios->fp.dual_link)
178 if (bios->fp.if_is_24bit)
184 if (bios->fp.dual_link) {
189 if (bios->fp.strapless_is_24bit & cmpval_24bit)
193 clktable = ROM16(bios->data[clktable]);
198 scriptptr = clkcmptable(bios, clktable, pxclk);
205 run_digital_op_script(dev, scriptptr, dcbent, head, bios->fp.dual_link);
220 struct nvbios *bios = &drm->vbios;
221 uint8_t lvds_ver = bios->data[bios->fp.lvdsmanufacturerpointer];
225 if (bios->fp.last_script_invoc == (script << 1 | head) || !lvds_ver ||
229 if (!bios->fp.lvds_init_run) {
230 bios->fp.lvds_init_run = true;
234 if (script == LVDS_PANEL_ON && bios->fp.reset_after_pclk_change)
236 if (script == LVDS_RESET && bios->fp.power_off_for_reset)
249 bios->fp.last_script_invoc = (script << 1 | head);
263 static int parse_lvds_manufacturer_table_header(struct drm_device *dev, struct nvbios *bios, struct lvdstableheader *lth)
277 if (bios->fp.lvdsmanufacturerpointer == 0x0) {
282 lvds_ver = bios->data[bios->fp.lvdsmanufacturerpointer];
287 recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1];
290 headerlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1];
295 recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 2];
298 headerlen = bios->data[bios->fp.lvdsmanufacturerpointer + 1];
303 recordlen = bios->data[bios->fp.lvdsmanufacturerpointer + 2];
320 get_fp_strap(struct drm_device *dev, struct nvbios *bios)
334 if (bios->major_version < 5 && bios->data[0x48] & 0x4)
346 static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios)
354 if (bios->fp.fptablepointer == 0x0) {
357 bios->digital_min_front_porch = 0x4b;
361 fptable = &bios->data[bios->fp.fptablepointer];
390 bios->digital_min_front_porch = fptable[4];
400 if (!bios->is_mobile) /* !mobile only needs digital_min_front_porch */
403 ret = parse_lvds_manufacturer_table_header(dev, bios, &lth);
408 bios->fp.fpxlatetableptr = bios->fp.lvdsmanufacturerpointer +
410 bios->fp.xlatwidth = lth.recordlen;
412 if (bios->fp.fpxlatetableptr == 0x0) {
417 fpstrapping = get_fp_strap(dev, bios);
419 fpindex = bios->data[bios->fp.fpxlatetableptr +
420 fpstrapping * bios->fp.xlatwidth];
429 bios->fp_no_ddc = fpstrapping != 0xf || fpindex != 0xf;
433 * panel using a strap-derived bios mode present. this condition
439 bios->fp.mode_ptr = bios->fp.fptablepointer + headerlen +
443 ROM16(bios->data[bios->fp.mode_ptr + 11]) + 1,
444 ROM16(bios->data[bios->fp.mode_ptr + 25]) + 1,
445 ROM16(bios->data[bios->fp.mode_ptr + 7]) * 10);
453 struct nvbios *bios = &drm->vbios;
454 uint8_t *mode_entry = &bios->data[bios->fp.mode_ptr];
457 return bios->fp.mode_ptr;
493 return bios->fp.mode_ptr;
524 struct nvbios *bios = &drm->vbios;
525 int fpstrapping = get_fp_strap(dev, bios), lvdsmanufacturerindex = 0;
528 int ret, chip_version = bios->chip_version;
530 ret = parse_lvds_manufacturer_table_header(dev, bios, &lth);
536 lvdsmanufacturerindex = bios->data[
537 bios->fp.fpxlatemanufacturertableptr +
551 (bios->legacy.lvds_single_a_script_ptr & 1) ?
553 if (pxclk >= bios->fp.duallink_transition_clk)
569 if (pxclk >= bios->fp.duallink_transition_clk)
589 lvdsofs = bios->fp.xlated_entry = bios->fp.lvdsmanufacturerpointer + lth.headerlen + lth.recordlen * lvdsmanufacturerindex;
592 bios->fp.power_off_for_reset = bios->data[lvdsofs] & 1;
593 bios->fp.reset_after_pclk_change = bios->data[lvdsofs] & 2;
594 bios->fp.dual_link = bios->data[lvdsofs] & 4;
595 bios->fp.link_c_increment = bios->data[lvdsofs] & 8;
596 *if_is_24bit = bios->data[lvdsofs] & 16;
604 bios->fp.power_off_for_reset = true;
605 bios->fp.reset_after_pclk_change = true;
611 bios->fp.dual_link = bios->data[lvdsofs] & 1;
612 bios->fp.if_is_24bit = bios->data[lvdsofs] & 2;
613 bios->fp.strapless_is_24bit = bios->data[bios->fp.lvdsmanufacturerpointer + 4];
614 bios->fp.duallink_transition_clk = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 5]) * 10;
620 bios->fp.dual_link = (pxclk >= bios->fp.duallink_transition_clk);
622 *dl = bios->fp.dual_link;
632 * This runs the TMDS regs setting code found on BIT bios cards
640 struct nvbios *bios = &drm->vbios;
641 int cv = bios->chip_version;
652 clktable = bios->tmds.output0_script_ptr;
656 clktable = bios->tmds.output1_script_ptr;
665 scriptptr = clkcmptable(bios, clktable, pxclk);
681 static void parse_script_table_pointers(struct nvbios *bios, uint16_t offset)
695 bios->init_script_tbls_ptr = ROM16(bios->data[offset]);
698 static int parse_bit_A_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
715 load_table_ptr = ROM16(bios->data[bitentry->offset]);
722 version = bios->data[load_table_ptr];
730 headerlen = bios->data[load_table_ptr + 1];
731 entrylen = bios->data[load_table_ptr + 2];
732 num_entries = bios->data[load_table_ptr + 3];
740 bios->dactestval = ROM32(bios->data[load_table_ptr + headerlen]) & 0x3ff;
745 static int parse_bit_display_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
762 bios->fp.fptablepointer = ROM16(bios->data[bitentry->offset + 2]);
767 static int parse_bit_init_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
781 parse_script_table_pointers(bios, bitentry->offset);
785 static int parse_bit_i_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
808 * bit 4 seems to indicate a mobile bios (doesn't suffer from BMP's
811 bios->feature_byte = bios->data[bitentry->offset + 5];
812 bios->is_mobile = bios->feature_byte & FEATURE_MOBILE;
820 daccmpoffset = ROM16(bios->data[bitentry->offset + 13]);
832 dacver = bios->data[daccmpoffset];
833 dacheaderlen = bios->data[daccmpoffset + 1];
841 bios->dactestval = ROM32(bios->data[daccmpoffset + dacheaderlen]);
842 bios->tvdactestval = ROM32(bios->data[daccmpoffset + dacheaderlen + 4]);
847 static int parse_bit_lvds_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
867 bios->fp.lvdsmanufacturerpointer = ROM16(bios->data[bitentry->offset]);
873 parse_bit_M_tbl_entry(struct drm_device *dev, struct nvbios *bios,
887 * Older bios versions don't have a sufficiently long table for
894 bios->ram_restrict_group_count = bios->data[bitentry->offset + 2];
895 bios->ram_restrict_tbl_ptr = ROM16(bios->data[bitentry->offset + 3]);
897 bios->ram_restrict_group_count = bios->data[bitentry->offset + 0];
898 bios->ram_restrict_tbl_ptr = ROM16(bios->data[bitentry->offset + 1]);
904 static int parse_bit_tmds_tbl_entry(struct drm_device *dev, struct nvbios *bios, struct bit_entry *bitentry)
937 tmdstableptr = ROM16(bios->data[bitentry->offset]);
944 bios->data[tmdstableptr] >> 4, bios->data[tmdstableptr] & 0xf);
947 if (bios->data[tmdstableptr] != 0x11)
954 script1 = ROM16(bios->data[tmdstableptr + 7]);
955 script2 = ROM16(bios->data[tmdstableptr + 9]);
956 if (bios->data[script1] != 'q' || bios->data[script2] != 'q')
959 bios->tmds.output0_script_ptr = ROM16(bios->data[tmdstableptr + 11]);
960 bios->tmds.output1_script_ptr = ROM16(bios->data[tmdstableptr + 13]);
976 struct nvbios *bios = &drm->vbios;
979 if (bios->type != NVBIOS_BIT)
982 entries = bios->data[bios->offset + 10];
983 entry = &bios->data[bios->offset + 12];
994 entry += bios->data[bios->offset + 9];
1001 parse_bit_table(struct nvbios *bios, const uint16_t bitoffset,
1004 struct drm_device *dev = bios->dev;
1009 return table->parse_fn(dev, bios, &bitentry);
1016 parse_bit_structure(struct nvbios *bios, const uint16_t bitoffset)
1022 * for use of bios->*_version or bios->feature_byte while parsing;
1024 * data from the image into the bios struct, thus no interdependencies
1026 ret = parse_bit_table(bios, bitoffset, &BIT_TABLE('i', i));
1029 if (bios->major_version >= 0x60) /* g80+ */
1030 parse_bit_table(bios, bitoffset, &BIT_TABLE('A', A));
1031 parse_bit_table(bios, bitoffset, &BIT_TABLE('D', display));
1032 ret = parse_bit_table(bios, bitoffset, &BIT_TABLE('I', init));
1035 parse_bit_table(bios, bitoffset, &BIT_TABLE('M', M)); /* memory? */
1036 parse_bit_table(bios, bitoffset, &BIT_TABLE('L', lvds));
1037 parse_bit_table(bios, bitoffset, &BIT_TABLE('T', tmds));
1042 static int parse_bmp_structure(struct drm_device *dev, struct nvbios *bios, unsigned int offset)
1052 * offset + 18: init script table pointer (for bios versions < 5.10h)
1053 * offset + 20: extra init script table pointer (for bios
1056 * offset + 24: memory init table pointer (used on early bios versions)
1088 uint8_t *bmp = &bios->data[offset], bmp_version_major, bmp_version_minor;
1093 bios->digital_min_front_porch = 0x4b;
1094 bios->fmaxvco = 256000;
1095 bios->fminvco = 128000;
1096 bios->fp.duallink_transition_clk = 90000;
1109 *(uint16_t *)&bios->data[0x36] = 0;
1118 "Please send in your bios\n");
1171 * Bit 4 seems to indicate either a mobile bios or a quadro card --
1174 * bit 6 a tv bios.
1176 bios->feature_byte = bmp[9];
1179 bios->old_style_init = true;
1183 bios->init_script_tbls_ptr = ROM16(bmp[legacy_scripts_offset]);
1184 bios->extra_init_script_tbl_ptr = ROM16(bmp[legacy_scripts_offset + 2]);
1187 bios->legacy.mem_init_tbl_ptr = ROM16(bmp[24]);
1188 bios->legacy.sdr_seq_tbl_ptr = ROM16(bmp[26]);
1189 bios->legacy.ddr_seq_tbl_ptr = ROM16(bmp[28]);
1195 bios->legacy.i2c_indices.crt = bios->data[legacy_i2c_offset];
1196 bios->legacy.i2c_indices.tv = bios->data[legacy_i2c_offset + 1];
1197 bios->legacy.i2c_indices.panel = bios->data[legacy_i2c_offset + 2];
1200 bios->fmaxvco = ROM32(bmp[67]);
1201 bios->fminvco = ROM32(bmp[71]);
1204 parse_script_table_pointers(bios, offset + 75);
1206 bios->tmds.output0_script_ptr = ROM16(bmp[89]);
1207 bios->tmds.output1_script_ptr = ROM16(bmp[91]);
1213 bios->legacy.lvds_single_a_script_ptr = ROM16(bmp[95]);
1216 bios->fp.fptablepointer = ROM16(bmp[105]);
1217 bios->fp.fpxlatetableptr = ROM16(bmp[107]);
1218 bios->fp.xlatwidth = 1;
1221 bios->fp.lvdsmanufacturerpointer = ROM16(bmp[117]);
1222 bios->fp.fpxlatemanufacturertableptr = ROM16(bmp[119]);
1226 bios->pll_limit_tbl_ptr = ROM16(bmp[142]);
1230 bios->fp.duallink_transition_clk = ROM16(bmp[156]) * 10;
1756 fabricate_dcb_encoder_table(struct drm_device *dev, struct nvbios *bios)
1758 struct dcb_table *dcb = &bios->dcb;
1772 bios->legacy.i2c_indices.crt, 1, 1);
1774 if (nv04_tv_identify(dev, bios->legacy.i2c_indices.tv) >= 0)
1776 bios->legacy.i2c_indices.tv,
1779 else if (bios->tmds.output0_script_ptr ||
1780 bios->tmds.output1_script_ptr)
1782 bios->legacy.i2c_indices.panel,
1822 dcb_fake_connectors(struct nvbios *bios)
1824 struct dcb_table *dcbt = &bios->dcb;
1831 * and, as usual, a blacklist of boards with bad bios data..
1833 if (!nv_match_device(bios->dev, 0x0392, 0x107d, 0x20a2)) {
1861 u8 *conntab = olddcb_conntab(bios->dev);
1868 parse_dcb_table(struct drm_device *dev, struct nvbios *bios)
1871 struct dcb_table *dcb = &bios->dcb;
1878 if (bios->type == NVBIOS_BMP) {
1879 fabricate_dcb_encoder_table(dev, bios);
1910 dcb_fake_connectors(bios);
1914 static int load_nv17_hwsq_ucode_entry(struct drm_device *dev, struct nvbios *bios, uint16_t hwsq_offset, int entry)
1931 if (bios->data[hwsq_offset] <= entry) {
1937 bytes_to_write = bios->data[hwsq_offset + 1];
1949 nvif_wr32(device, 0x00001304, ROM32(bios->data[hwsq_entry_offset]));
1954 nvif_wr32(device, 0x00001400 + i, ROM32(bios->data[hwsq_entry_offset + i + 4]));
1963 struct nvbios *bios)
1978 hwsq_offset = findstr(bios->data, bios->length, hwsq_signature, sz);
1983 return load_nv17_hwsq_ucode_entry(dev, bios, hwsq_offset + sz, 0);
1989 struct nvbios *bios = &drm->vbios;
1996 if (bios->fp.edid)
1997 return bios->fp.edid;
2000 newoffset = findstr(&bios->data[offset], searchlen,
2005 if (!nv_cksum(&bios->data[offset], EDID1_LEN))
2014 return bios->fp.edid = &bios->data[offset];
2020 struct nvkm_bios *bios = nvxx_bios(&drm->client.device);
2027 legacy->data = bios->data;
2028 legacy->length = bios->size;
2029 legacy->major_version = bios->version.major;
2030 legacy->chip_version = bios->version.chip;
2031 if (bios->bit_offset) {
2033 legacy->offset = bios->bit_offset;
2036 if (bios->bmp_offset) {
2038 legacy->offset = bios->bmp_offset;
2049 struct nvbios *bios = &drm->vbios;
2052 bios->state.crtchead = 0;
2054 if (bios->major_version < 5) /* BMP only */
2055 load_nv17_hw_sequencer_ucode(dev, bios);
2057 if (bios->execute) {
2058 bios->fp.last_script_invoc = 0;
2059 bios->fp.lvds_init_run = false;
2086 struct nvbios *bios = &drm->vbios;
2096 ret = parse_dcb_table(dev, bios);
2100 if (!bios->major_version) /* we don't run version 0 bios */
2104 bios->execute = false;
2110 bios->execute = true;
2118 if (bios->major_version < 5)
2119 bios->is_mobile = NVReadVgaCrtc(dev, 0, NV_CIO_CRE_4B) & 0x40;
2122 if (bios->is_mobile || bios->major_version >= 5)
2123 ret = parse_fp_mode_table(dev, bios);
2126 bios->execute = true;