Lines Matching +full:adt7473 +full:- +full:d

2  * Copyright 2007-8 Advanced Micro Devices, Inc.
35 #include "atom-bits.h"
51 if ((rdev->family == CHIP_R420) || in radeon_lookup_i2c_gpio_quirks()
52 (rdev->family == CHIP_R423) || in radeon_lookup_i2c_gpio_quirks()
53 (rdev->family == CHIP_RV410)) { in radeon_lookup_i2c_gpio_quirks()
54 if ((le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0018) || in radeon_lookup_i2c_gpio_quirks()
55 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0019) || in radeon_lookup_i2c_gpio_quirks()
56 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x001a)) { in radeon_lookup_i2c_gpio_quirks()
57 gpio->ucClkMaskShift = 0x19; in radeon_lookup_i2c_gpio_quirks()
58 gpio->ucDataMaskShift = 0x18; in radeon_lookup_i2c_gpio_quirks()
65 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x1936) && in radeon_lookup_i2c_gpio_quirks()
66 (gpio->sucI2cId.ucAccess == 0)) { in radeon_lookup_i2c_gpio_quirks()
67 gpio->sucI2cId.ucAccess = 0x97; in radeon_lookup_i2c_gpio_quirks()
68 gpio->ucDataMaskShift = 8; in radeon_lookup_i2c_gpio_quirks()
69 gpio->ucDataEnShift = 8; in radeon_lookup_i2c_gpio_quirks()
70 gpio->ucDataY_Shift = 8; in radeon_lookup_i2c_gpio_quirks()
71 gpio->ucDataA_Shift = 8; in radeon_lookup_i2c_gpio_quirks()
78 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x1fda) && in radeon_lookup_i2c_gpio_quirks()
79 (gpio->sucI2cId.ucAccess == 0x94)) in radeon_lookup_i2c_gpio_quirks()
80 gpio->sucI2cId.ucAccess = 0x14; in radeon_lookup_i2c_gpio_quirks()
90 i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
91 i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
92 i2c.en_clk_reg = le16_to_cpu(gpio->usClkEnRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
93 i2c.en_data_reg = le16_to_cpu(gpio->usDataEnRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
94 i2c.y_clk_reg = le16_to_cpu(gpio->usClkY_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
95 i2c.y_data_reg = le16_to_cpu(gpio->usDataY_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
96 i2c.a_clk_reg = le16_to_cpu(gpio->usClkA_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
97 i2c.a_data_reg = le16_to_cpu(gpio->usDataA_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
98 i2c.mask_clk_mask = (1 << gpio->ucClkMaskShift); in radeon_get_bus_rec_for_i2c_gpio()
99 i2c.mask_data_mask = (1 << gpio->ucDataMaskShift); in radeon_get_bus_rec_for_i2c_gpio()
100 i2c.en_clk_mask = (1 << gpio->ucClkEnShift); in radeon_get_bus_rec_for_i2c_gpio()
101 i2c.en_data_mask = (1 << gpio->ucDataEnShift); in radeon_get_bus_rec_for_i2c_gpio()
102 i2c.y_clk_mask = (1 << gpio->ucClkY_Shift); in radeon_get_bus_rec_for_i2c_gpio()
103 i2c.y_data_mask = (1 << gpio->ucDataY_Shift); in radeon_get_bus_rec_for_i2c_gpio()
104 i2c.a_clk_mask = (1 << gpio->ucClkA_Shift); in radeon_get_bus_rec_for_i2c_gpio()
105 i2c.a_data_mask = (1 << gpio->ucDataA_Shift); in radeon_get_bus_rec_for_i2c_gpio()
107 if (gpio->sucI2cId.sbfAccess.bfHW_Capable) in radeon_get_bus_rec_for_i2c_gpio()
112 if (gpio->sucI2cId.ucAccess == 0xa0) in radeon_get_bus_rec_for_i2c_gpio()
117 i2c.i2c_id = gpio->sucI2cId.ucAccess; in radeon_get_bus_rec_for_i2c_gpio()
130 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_lookup_i2c_gpio()
142 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in radeon_lookup_i2c_gpio()
144 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_lookup_i2c_gpio()
147 gpio = &i2c_info->asGPIO_Info[0]; in radeon_lookup_i2c_gpio()
152 if (gpio->sucI2cId.ucAccess == id) { in radeon_lookup_i2c_gpio()
166 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_atombios_i2c_init()
176 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in radeon_atombios_i2c_init()
178 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_i2c_init()
181 gpio = &i2c_info->asGPIO_Info[0]; in radeon_atombios_i2c_init()
189 rdev->i2c_bus[i] = radeon_i2c_create(rdev->ddev, &i2c, stmp); in radeon_atombios_i2c_init()
200 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_atombios_lookup_gpio()
212 gpio_info = (struct _ATOM_GPIO_PIN_LUT *)(ctx->bios + data_offset); in radeon_atombios_lookup_gpio()
214 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_lookup_gpio()
217 pin = gpio_info->asGPIO_Pin; in radeon_atombios_lookup_gpio()
219 if (id == pin->ucGPIO_ID) { in radeon_atombios_lookup_gpio()
220 gpio.id = pin->ucGPIO_ID; in radeon_atombios_lookup_gpio()
221 gpio.reg = le16_to_cpu(pin->usGpioPin_AIndex) * 4; in radeon_atombios_lookup_gpio()
222 gpio.shift = pin->ucGpioPinBitShift; in radeon_atombios_lookup_gpio()
223 gpio.mask = (1 << pin->ucGpioPinBitShift); in radeon_atombios_lookup_gpio()
251 if (gpio->reg == reg) { in radeon_atom_get_hpd_info_from_gpio()
252 switch(gpio->mask) { in radeon_atom_get_hpd_info_from_gpio()
287 struct pci_dev *pdev = to_pci_dev(dev->dev); in radeon_atom_apply_quirks()
289 /* Asus M2A-VM HDMI board lists the DVI port as HDMI */ in radeon_atom_apply_quirks()
290 if ((pdev->device == 0x791e) && in radeon_atom_apply_quirks()
291 (pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
292 (pdev->subsystem_device == 0x826d)) { in radeon_atom_apply_quirks()
299 if ((pdev->device == 0x7941) && in radeon_atom_apply_quirks()
300 (pdev->subsystem_vendor == 0x1849) && in radeon_atom_apply_quirks()
301 (pdev->subsystem_device == 0x7941)) { in radeon_atom_apply_quirks()
308 if ((pdev->device == 0x796e) && in radeon_atom_apply_quirks()
309 (pdev->subsystem_vendor == 0x1462) && in radeon_atom_apply_quirks()
310 (pdev->subsystem_device == 0x7302)) { in radeon_atom_apply_quirks()
316 /* a-bit f-i90hd - ciaranm on #radeonhd - this board has no DVI */ in radeon_atom_apply_quirks()
317 if ((pdev->device == 0x7941) && in radeon_atom_apply_quirks()
318 (pdev->subsystem_vendor == 0x147b) && in radeon_atom_apply_quirks()
319 (pdev->subsystem_device == 0x2412)) { in radeon_atom_apply_quirks()
325 if ((pdev->device == 0x5653) && in radeon_atom_apply_quirks()
326 (pdev->subsystem_vendor == 0x1462) && in radeon_atom_apply_quirks()
327 (pdev->subsystem_device == 0x0291)) { in radeon_atom_apply_quirks()
329 i2c_bus->valid = false; in radeon_atom_apply_quirks()
335 if ((pdev->device == 0x7146) && in radeon_atom_apply_quirks()
336 (pdev->subsystem_vendor == 0x17af) && in radeon_atom_apply_quirks()
337 (pdev->subsystem_device == 0x2058)) { in radeon_atom_apply_quirks()
343 if ((pdev->device == 0x7142) && in radeon_atom_apply_quirks()
344 (pdev->subsystem_vendor == 0x1458) && in radeon_atom_apply_quirks()
345 (pdev->subsystem_device == 0x2134)) { in radeon_atom_apply_quirks()
352 if ((pdev->device == 0x71C5) && in radeon_atom_apply_quirks()
353 (pdev->subsystem_vendor == 0x106b) && in radeon_atom_apply_quirks()
354 (pdev->subsystem_device == 0x0080)) { in radeon_atom_apply_quirks()
370 if ((pdev->device == 0x9598) && in radeon_atom_apply_quirks()
371 (pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
372 (pdev->subsystem_device == 0x01da)) { in radeon_atom_apply_quirks()
379 if ((pdev->device == 0x9598) && in radeon_atom_apply_quirks()
380 (pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
381 (pdev->subsystem_device == 0x01e4)) { in radeon_atom_apply_quirks()
388 if ((pdev->device == 0x95C5) && in radeon_atom_apply_quirks()
389 (pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
390 (pdev->subsystem_device == 0x01e2)) { in radeon_atom_apply_quirks()
396 /* some BIOSes seem to report DAC on HDMI - usually this is a board with in radeon_atom_apply_quirks()
415 if (((pdev->device == 0x95c4) || (pdev->device == 0x9591)) && in radeon_atom_apply_quirks()
416 (pdev->subsystem_vendor == 0x1025) && in radeon_atom_apply_quirks()
417 (pdev->subsystem_device == 0x013c)) { in radeon_atom_apply_quirks()
420 /* actually it's a DVI-D port not DVI-I */ in radeon_atom_apply_quirks()
429 if ((pdev->device == 0x9498) && in radeon_atom_apply_quirks()
430 (pdev->subsystem_vendor == 0x1682) && in radeon_atom_apply_quirks()
431 (pdev->subsystem_device == 0x2452) && in radeon_atom_apply_quirks()
432 (i2c_bus->valid == false) && in radeon_atom_apply_quirks()
434 struct radeon_device *rdev = dev->dev_private; in radeon_atom_apply_quirks()
438 /* Fujitsu D3003-S2 board lists DVI-I as DVI-D and VGA */ in radeon_atom_apply_quirks()
439 if (((pdev->device == 0x9802) || in radeon_atom_apply_quirks()
440 (pdev->device == 0x9805) || in radeon_atom_apply_quirks()
441 (pdev->device == 0x9806)) && in radeon_atom_apply_quirks()
442 (pdev->subsystem_vendor == 0x1734) && in radeon_atom_apply_quirks()
443 (pdev->subsystem_device == 0x11bd)) { in radeon_atom_apply_quirks()
479 CONNECTOR_OBJECT_ID_VGA, /* technically DVI-A */
518 struct radeon_device *rdev = dev->dev_private; in radeon_get_atom_connector_info_from_object_table()
519 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_get_atom_connector_info_from_object_table()
520 struct atom_context *ctx = mode_info->atom_context; in radeon_get_atom_connector_info_from_object_table()
543 obj_header = (ATOM_OBJECT_HEADER *) (ctx->bios + data_offset); in radeon_get_atom_connector_info_from_object_table()
545 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
546 le16_to_cpu(obj_header->usDisplayPathTableOffset)); in radeon_get_atom_connector_info_from_object_table()
548 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
549 le16_to_cpu(obj_header->usConnectorObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
551 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
552 le16_to_cpu(obj_header->usEncoderObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
554 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
555 le16_to_cpu(obj_header->usRouterObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
556 device_support = le16_to_cpu(obj_header->usDeviceSupport); in radeon_get_atom_connector_info_from_object_table()
559 for (i = 0; i < path_obj->ucNumOfDispPath; i++) { in radeon_get_atom_connector_info_from_object_table()
560 uint8_t *addr = (uint8_t *) path_obj->asDispPath; in radeon_get_atom_connector_info_from_object_table()
564 path_size += le16_to_cpu(path->usSize); in radeon_get_atom_connector_info_from_object_table()
566 if (device_support & le16_to_cpu(path->usDeviceTag)) { in radeon_get_atom_connector_info_from_object_table()
570 (le16_to_cpu(path->usConnObjectId) & OBJECT_ID_MASK) in radeon_get_atom_connector_info_from_object_table()
573 (le16_to_cpu(path->usConnObjectId) & ENUM_ID_MASK) in radeon_get_atom_connector_info_from_object_table()
577 if (le16_to_cpu(path->usDeviceTag) == in radeon_get_atom_connector_info_from_object_table()
582 if ((rdev->flags & RADEON_IS_IGP) && in radeon_get_atom_connector_info_from_object_table()
598 *) (ctx->bios + igp_offset); in radeon_get_atom_connector_info_from_object_table()
605 igp_obj-> in radeon_get_atom_connector_info_from_object_table()
609 igp_obj-> in radeon_get_atom_connector_info_from_object_table()
641 for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) { in radeon_get_atom_connector_info_from_object_table()
643 (le16_to_cpu(path->usGraphicObjIds[j]) & in radeon_get_atom_connector_info_from_object_table()
647 for (k = 0; k < enc_obj->ucNumberOfObjects; k++) { in radeon_get_atom_connector_info_from_object_table()
648 u16 encoder_obj = le16_to_cpu(enc_obj->asObjects[k].usObjectID); in radeon_get_atom_connector_info_from_object_table()
649 if (le16_to_cpu(path->usGraphicObjIds[j]) == encoder_obj) { in radeon_get_atom_connector_info_from_object_table()
651 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
652 le16_to_cpu(enc_obj->asObjects[k].usRecordOffset)); in radeon_get_atom_connector_info_from_object_table()
656 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
657 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
658 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
659 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
663 caps = le16_to_cpu(cap_record->usEncoderCap); in radeon_get_atom_connector_info_from_object_table()
667 ((char *)record + record->ucRecordSize); in radeon_get_atom_connector_info_from_object_table()
672 (path-> in radeon_get_atom_connector_info_from_object_table()
678 for (k = 0; k < router_obj->ucNumberOfObjects; k++) { in radeon_get_atom_connector_info_from_object_table()
679 u16 router_obj_id = le16_to_cpu(router_obj->asObjects[k].usObjectID); in radeon_get_atom_connector_info_from_object_table()
680 if (le16_to_cpu(path->usGraphicObjIds[j]) == router_obj_id) { in radeon_get_atom_connector_info_from_object_table()
682 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
683 le16_to_cpu(router_obj->asObjects[k].usRecordOffset)); in radeon_get_atom_connector_info_from_object_table()
690 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
691 le16_to_cpu(router_obj->asObjects[k].usSrcDstTableOffset)); in radeon_get_atom_connector_info_from_object_table()
694 (router_src_dst_table->ucNumberOfSrc * 2)); in radeon_get_atom_connector_info_from_object_table()
700 if (le16_to_cpu(path->usConnObjectId) == in radeon_get_atom_connector_info_from_object_table()
705 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
706 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
707 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
708 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
715 &i2c_record->sucI2cId; in radeon_get_atom_connector_info_from_object_table()
718 i2c_config-> in radeon_get_atom_connector_info_from_object_table()
720 router.i2c_addr = i2c_record->ucI2CAddr >> 1; in radeon_get_atom_connector_info_from_object_table()
726 router.ddc_mux_type = ddc_path->ucMuxType; in radeon_get_atom_connector_info_from_object_table()
727 router.ddc_mux_control_pin = ddc_path->ucMuxControlPin; in radeon_get_atom_connector_info_from_object_table()
728 router.ddc_mux_state = ddc_path->ucMuxState[enum_id]; in radeon_get_atom_connector_info_from_object_table()
734 router.cd_mux_type = cd_path->ucMuxType; in radeon_get_atom_connector_info_from_object_table()
735 router.cd_mux_control_pin = cd_path->ucMuxControlPin; in radeon_get_atom_connector_info_from_object_table()
736 router.cd_mux_state = cd_path->ucMuxState[enum_id]; in radeon_get_atom_connector_info_from_object_table()
740 ((char *)record + record->ucRecordSize); in radeon_get_atom_connector_info_from_object_table()
750 if ((le16_to_cpu(path->usDeviceTag) & in radeon_get_atom_connector_info_from_object_table()
752 for (j = 0; j < con_obj->ucNumberOfObjects; j++) { in radeon_get_atom_connector_info_from_object_table()
753 if (le16_to_cpu(path->usConnObjectId) == in radeon_get_atom_connector_info_from_object_table()
754 le16_to_cpu(con_obj->asObjects[j]. in radeon_get_atom_connector_info_from_object_table()
760 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
761 le16_to_cpu(con_obj-> in radeon_get_atom_connector_info_from_object_table()
768 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
769 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
770 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
771 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
778 &i2c_record->sucI2cId; in radeon_get_atom_connector_info_from_object_table()
780 i2c_config-> in radeon_get_atom_connector_info_from_object_table()
788 hpd_record->ucHPDIntGPIOID); in radeon_get_atom_connector_info_from_object_table()
790 hpd.plugged_state = hpd_record->ucPlugged_PinState; in radeon_get_atom_connector_info_from_object_table()
797 record-> in radeon_get_atom_connector_info_from_object_table()
808 conn_id = le16_to_cpu(path->usConnObjectId); in radeon_get_atom_connector_info_from_object_table()
811 (dev, le16_to_cpu(path->usDeviceTag), &connector_type, in radeon_get_atom_connector_info_from_object_table()
817 le16_to_cpu(path-> in radeon_get_atom_connector_info_from_object_table()
838 struct radeon_device *rdev = dev->dev_private; in atombios_get_connector_object_id()
840 if (rdev->flags & RADEON_IS_IGP) { in atombios_get_connector_object_id()
846 struct radeon_mode_info *mode_info = &rdev->mode_info; in atombios_get_connector_object_id()
847 struct atom_context *ctx = mode_info->atom_context; in atombios_get_connector_object_id()
854 xtmds = (ATOM_XTMDS_INFO *)(ctx->bios + data_offset); in atombios_get_connector_object_id()
856 if (xtmds->ucSupportedLink & ATOM_XTMDS_SUPPORTED_DUALLINK) { in atombios_get_connector_object_id()
889 struct radeon_device *rdev = dev->dev_private; in radeon_get_atom_connector_info_from_supported_devices_table()
890 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_get_atom_connector_info_from_supported_devices_table()
891 struct atom_context *ctx = mode_info->atom_context; in radeon_get_atom_connector_info_from_supported_devices_table()
917 (union atom_supported_devices *)(ctx->bios + data_offset); in radeon_get_atom_connector_info_from_supported_devices_table()
919 device_support = le16_to_cpu(supported_devices->info.usDeviceSupport); in radeon_get_atom_connector_info_from_supported_devices_table()
928 supported_devices->info.asConnInfo[i]; in radeon_get_atom_connector_info_from_supported_devices_table()
971 u8 isb = supported_devices->info_2d1.asIntSrcInfo[i].ucIntSrcBitmap; in radeon_get_atom_connector_info_from_supported_devices_table()
1042 /* combine analog and digital for DVI-I */ in radeon_get_atom_connector_info_from_supported_devices_table()
1107 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_dentist_vco_freq()
1113 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_dentist_vco_freq()
1115 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_get_dentist_vco_freq()
1117 rdev->clock.vco_freq = in radeon_atombios_get_dentist_vco_freq()
1118 le32_to_cpu(igp_info->info_6.ulDentistVCOFreq); in radeon_atombios_get_dentist_vco_freq()
1124 struct radeon_device *rdev = dev->dev_private; in radeon_atom_get_clock_info()
1125 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_clock_info()
1129 struct radeon_pll *p1pll = &rdev->clock.p1pll; in radeon_atom_get_clock_info()
1130 struct radeon_pll *p2pll = &rdev->clock.p2pll; in radeon_atom_get_clock_info()
1131 struct radeon_pll *dcpll = &rdev->clock.dcpll; in radeon_atom_get_clock_info()
1132 struct radeon_pll *spll = &rdev->clock.spll; in radeon_atom_get_clock_info()
1133 struct radeon_pll *mpll = &rdev->clock.mpll; in radeon_atom_get_clock_info()
1136 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atom_get_clock_info()
1139 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atom_get_clock_info()
1142 p1pll->reference_freq = in radeon_atom_get_clock_info()
1143 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1144 p1pll->reference_div = 0; in radeon_atom_get_clock_info()
1147 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1148 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1150 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1151 le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1152 p1pll->pll_out_max = in radeon_atom_get_clock_info()
1153 le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output); in radeon_atom_get_clock_info()
1156 p1pll->lcd_pll_out_min = in radeon_atom_get_clock_info()
1157 le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1158 if (p1pll->lcd_pll_out_min == 0) in radeon_atom_get_clock_info()
1159 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1160 p1pll->lcd_pll_out_max = in radeon_atom_get_clock_info()
1161 le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1162 if (p1pll->lcd_pll_out_max == 0) in radeon_atom_get_clock_info()
1163 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1165 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1166 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1169 if (p1pll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1171 p1pll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1173 p1pll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1176 p1pll->pll_in_min = in radeon_atom_get_clock_info()
1177 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Input); in radeon_atom_get_clock_info()
1178 p1pll->pll_in_max = in radeon_atom_get_clock_info()
1179 le16_to_cpu(firmware_info->info.usMaxPixelClockPLL_Input); in radeon_atom_get_clock_info()
1185 spll->reference_freq = in radeon_atom_get_clock_info()
1186 le16_to_cpu(firmware_info->info_21.usCoreReferenceClock); in radeon_atom_get_clock_info()
1188 spll->reference_freq = in radeon_atom_get_clock_info()
1189 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1190 spll->reference_div = 0; in radeon_atom_get_clock_info()
1192 spll->pll_out_min = in radeon_atom_get_clock_info()
1193 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Output); in radeon_atom_get_clock_info()
1194 spll->pll_out_max = in radeon_atom_get_clock_info()
1195 le32_to_cpu(firmware_info->info.ulMaxEngineClockPLL_Output); in radeon_atom_get_clock_info()
1198 if (spll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1200 spll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1202 spll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1205 spll->pll_in_min = in radeon_atom_get_clock_info()
1206 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Input); in radeon_atom_get_clock_info()
1207 spll->pll_in_max = in radeon_atom_get_clock_info()
1208 le16_to_cpu(firmware_info->info.usMaxEngineClockPLL_Input); in radeon_atom_get_clock_info()
1212 mpll->reference_freq = in radeon_atom_get_clock_info()
1213 le16_to_cpu(firmware_info->info_21.usMemoryReferenceClock); in radeon_atom_get_clock_info()
1215 mpll->reference_freq = in radeon_atom_get_clock_info()
1216 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1217 mpll->reference_div = 0; in radeon_atom_get_clock_info()
1219 mpll->pll_out_min = in radeon_atom_get_clock_info()
1220 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1221 mpll->pll_out_max = in radeon_atom_get_clock_info()
1222 le32_to_cpu(firmware_info->info.ulMaxMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1225 if (mpll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1227 mpll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1229 mpll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1232 mpll->pll_in_min = in radeon_atom_get_clock_info()
1233 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1234 mpll->pll_in_max = in radeon_atom_get_clock_info()
1235 le16_to_cpu(firmware_info->info.usMaxMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1237 rdev->clock.default_sclk = in radeon_atom_get_clock_info()
1238 le32_to_cpu(firmware_info->info.ulDefaultEngineClock); in radeon_atom_get_clock_info()
1239 rdev->clock.default_mclk = in radeon_atom_get_clock_info()
1240 le32_to_cpu(firmware_info->info.ulDefaultMemoryClock); in radeon_atom_get_clock_info()
1243 rdev->clock.default_dispclk = in radeon_atom_get_clock_info()
1244 le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq); in radeon_atom_get_clock_info()
1245 if (rdev->clock.default_dispclk == 0) { in radeon_atom_get_clock_info()
1247 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1249 rdev->clock.default_dispclk = 54000; /* 540 Mhz */ in radeon_atom_get_clock_info()
1251 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1254 if (ASIC_IS_DCE6(rdev) && (rdev->clock.default_dispclk < 53900)) { in radeon_atom_get_clock_info()
1256 rdev->clock.default_dispclk / 100); in radeon_atom_get_clock_info()
1257 rdev->clock.default_dispclk = 60000; in radeon_atom_get_clock_info()
1259 rdev->clock.dp_extclk = in radeon_atom_get_clock_info()
1260 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); in radeon_atom_get_clock_info()
1261 rdev->clock.current_dispclk = rdev->clock.default_dispclk; in radeon_atom_get_clock_info()
1265 rdev->clock.max_pixel_clock = le16_to_cpu(firmware_info->info.usMaxPixelClock); in radeon_atom_get_clock_info()
1266 if (rdev->clock.max_pixel_clock == 0) in radeon_atom_get_clock_info()
1267 rdev->clock.max_pixel_clock = 40000; in radeon_atom_get_clock_info()
1270 rdev->mode_info.firmware_flags = in radeon_atom_get_clock_info()
1271 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); in radeon_atom_get_clock_info()
1274 rdev->clock.vco_freq = in radeon_atom_get_clock_info()
1275 le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); in radeon_atom_get_clock_info()
1277 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1281 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1283 if (rdev->clock.vco_freq == 0) in radeon_atom_get_clock_info()
1284 rdev->clock.vco_freq = 360000; /* 3.6 GHz */ in radeon_atom_get_clock_info()
1294 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_sideport_present()
1301 if (rdev->family == CHIP_RS600) in radeon_atombios_sideport_present()
1304 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_sideport_present()
1306 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_sideport_present()
1310 if (le32_to_cpu(igp_info->info.ulBootUpMemoryClock)) in radeon_atombios_sideport_present()
1314 if (le32_to_cpu(igp_info->info_2.ulBootUpSidePortClock)) in radeon_atombios_sideport_present()
1318 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_sideport_present()
1328 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tmds_info()
1329 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tmds_info()
1330 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tmds_info()
1338 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tmds_info()
1341 (struct _ATOM_TMDS_INFO *)(mode_info->atom_context->bios + in radeon_atombios_get_tmds_info()
1344 maxfreq = le16_to_cpu(tmds_info->usMaxFrequency); in radeon_atombios_get_tmds_info()
1346 tmds->tmds_pll[i].freq = in radeon_atombios_get_tmds_info()
1347 le16_to_cpu(tmds_info->asMiscInfo[i].usFrequency); in radeon_atombios_get_tmds_info()
1348 tmds->tmds_pll[i].value = in radeon_atombios_get_tmds_info()
1349 tmds_info->asMiscInfo[i].ucPLL_ChargePump & 0x3f; in radeon_atombios_get_tmds_info()
1350 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1351 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1353 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1354 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1356 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1357 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1361 tmds->tmds_pll[i].freq, in radeon_atombios_get_tmds_info()
1362 tmds->tmds_pll[i].value); in radeon_atombios_get_tmds_info()
1364 if (maxfreq == tmds->tmds_pll[i].freq) { in radeon_atombios_get_tmds_info()
1365 tmds->tmds_pll[i].freq = 0xffffffff; in radeon_atombios_get_tmds_info()
1378 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_ppll_ss_info()
1387 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_ppll_ss_info()
1390 (struct _ATOM_SPREAD_SPECTRUM_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_ppll_ss_info()
1392 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_ppll_ss_info()
1395 ((u8 *)&ss_info->asSS_Info[0]); in radeon_atombios_get_ppll_ss_info()
1397 if (ss_assign->ucSS_Id == id) { in radeon_atombios_get_ppll_ss_info()
1398 ss->percentage = in radeon_atombios_get_ppll_ss_info()
1399 le16_to_cpu(ss_assign->usSpreadSpectrumPercentage); in radeon_atombios_get_ppll_ss_info()
1400 ss->type = ss_assign->ucSpreadSpectrumType; in radeon_atombios_get_ppll_ss_info()
1401 ss->step = ss_assign->ucSS_Step; in radeon_atombios_get_ppll_ss_info()
1402 ss->delay = ss_assign->ucSS_Delay; in radeon_atombios_get_ppll_ss_info()
1403 ss->range = ss_assign->ucSS_Range; in radeon_atombios_get_ppll_ss_info()
1404 ss->refdiv = ss_assign->ucRecommendedRef_Div; in radeon_atombios_get_ppll_ss_info()
1418 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_igp_ss_overrides()
1426 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_igp_ss_overrides()
1429 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_igp_ss_overrides()
1434 percentage = le16_to_cpu(igp_info->info_6.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1435 rate = le16_to_cpu(igp_info->info_6.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1438 percentage = le16_to_cpu(igp_info->info_6.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1439 rate = le16_to_cpu(igp_info->info_6.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1442 percentage = le16_to_cpu(igp_info->info_6.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1443 rate = le16_to_cpu(igp_info->info_6.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1450 percentage = le16_to_cpu(igp_info->info_7.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1451 rate = le16_to_cpu(igp_info->info_7.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1454 percentage = le16_to_cpu(igp_info->info_7.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1455 rate = le16_to_cpu(igp_info->info_7.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1458 percentage = le16_to_cpu(igp_info->info_7.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1459 rate = le16_to_cpu(igp_info->info_7.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1466 percentage = le16_to_cpu(igp_info->info_8.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1467 rate = le16_to_cpu(igp_info->info_8.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1470 percentage = le16_to_cpu(igp_info->info_8.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1471 rate = le16_to_cpu(igp_info->info_8.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1474 percentage = le16_to_cpu(igp_info->info_8.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1475 rate = le16_to_cpu(igp_info->info_8.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1480 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_get_igp_ss_overrides()
1484 ss->percentage = percentage; in radeon_atombios_get_igp_ss_overrides()
1486 ss->rate = rate; in radeon_atombios_get_igp_ss_overrides()
1506 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_asic_ss_info()
1515 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1519 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1524 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_asic_ss_info()
1528 (union asic_ss_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_asic_ss_info()
1532 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1535 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1537 if ((ss_assign->v1.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1538 (clock <= le32_to_cpu(ss_assign->v1.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1539 ss->percentage = in radeon_atombios_get_asic_ss_info()
1540 le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1541 ss->type = ss_assign->v1.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1542 ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); in radeon_atombios_get_asic_ss_info()
1543 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1551 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1553 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_2.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1555 if ((ss_assign->v2.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1556 (clock <= le32_to_cpu(ss_assign->v2.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1557 ss->percentage = in radeon_atombios_get_asic_ss_info()
1558 le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1559 ss->type = ss_assign->v2.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1560 ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1561 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1565 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1573 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1575 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_3.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1577 if ((ss_assign->v3.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1578 (clock <= le32_to_cpu(ss_assign->v3.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1579 ss->percentage = in radeon_atombios_get_asic_ss_info()
1580 le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1581 ss->type = ss_assign->v3.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1582 ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1583 if (ss_assign->v3.ucSpreadSpectrumMode & in radeon_atombios_get_asic_ss_info()
1585 ss->percentage_divider = 1000; in radeon_atombios_get_asic_ss_info()
1587 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1590 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1591 if (rdev->flags & RADEON_IS_IGP) in radeon_atombios_get_asic_ss_info()
1600 DRM_ERROR("Unsupported ASIC_InternalSS_Info table: %d %d\n", frev, crev); in radeon_atombios_get_asic_ss_info()
1617 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_lvds_info()
1618 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_lvds_info()
1619 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_lvds_info()
1625 int encoder_enum = (encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in radeon_atombios_get_lvds_info()
1627 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_lvds_info()
1630 (union lvds_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_lvds_info()
1637 lvds->native_mode.clock = in radeon_atombios_get_lvds_info()
1638 le16_to_cpu(lvds_info->info.sLCDTiming.usPixClk) * 10; in radeon_atombios_get_lvds_info()
1639 lvds->native_mode.hdisplay = in radeon_atombios_get_lvds_info()
1640 le16_to_cpu(lvds_info->info.sLCDTiming.usHActive); in radeon_atombios_get_lvds_info()
1641 lvds->native_mode.vdisplay = in radeon_atombios_get_lvds_info()
1642 le16_to_cpu(lvds_info->info.sLCDTiming.usVActive); in radeon_atombios_get_lvds_info()
1643 lvds->native_mode.htotal = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1644 le16_to_cpu(lvds_info->info.sLCDTiming.usHBlanking_Time); in radeon_atombios_get_lvds_info()
1645 lvds->native_mode.hsync_start = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1646 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncOffset); in radeon_atombios_get_lvds_info()
1647 lvds->native_mode.hsync_end = lvds->native_mode.hsync_start + in radeon_atombios_get_lvds_info()
1648 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncWidth); in radeon_atombios_get_lvds_info()
1649 lvds->native_mode.vtotal = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1650 le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time); in radeon_atombios_get_lvds_info()
1651 lvds->native_mode.vsync_start = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1652 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset); in radeon_atombios_get_lvds_info()
1653 lvds->native_mode.vsync_end = lvds->native_mode.vsync_start + in radeon_atombios_get_lvds_info()
1654 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); in radeon_atombios_get_lvds_info()
1655 lvds->panel_pwr_delay = in radeon_atombios_get_lvds_info()
1656 le16_to_cpu(lvds_info->info.usOffDelayInMs); in radeon_atombios_get_lvds_info()
1657 lvds->lcd_misc = lvds_info->info.ucLVDS_Misc; in radeon_atombios_get_lvds_info()
1659 misc = le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess); in radeon_atombios_get_lvds_info()
1661 lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atombios_get_lvds_info()
1663 lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atombios_get_lvds_info()
1665 lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC; in radeon_atombios_get_lvds_info()
1667 lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atombios_get_lvds_info()
1669 lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atombios_get_lvds_info()
1671 lvds->native_mode.width_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageHSize); in radeon_atombios_get_lvds_info()
1672 lvds->native_mode.height_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageVSize); in radeon_atombios_get_lvds_info()
1675 drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); in radeon_atombios_get_lvds_info()
1677 lvds->lcd_ss_id = lvds_info->info.ucSS_Id; in radeon_atombios_get_lvds_info()
1679 encoder->native_mode = lvds->native_mode; in radeon_atombios_get_lvds_info()
1682 lvds->linkb = true; in radeon_atombios_get_lvds_info()
1684 lvds->linkb = false; in radeon_atombios_get_lvds_info()
1687 if (le16_to_cpu(lvds_info->info.usModePatchTableOffset)) { in radeon_atombios_get_lvds_info()
1695 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1696 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1699 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1701 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1715 if (fake_edid_record->ucFakeEDIDLength) { in radeon_atombios_get_lvds_info()
1718 max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1721 memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], in radeon_atombios_get_lvds_info()
1722 fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1725 rdev->mode_info.bios_hardcoded_edid = edid; in radeon_atombios_get_lvds_info()
1726 rdev->mode_info.bios_hardcoded_edid_size = edid_size; in radeon_atombios_get_lvds_info()
1731 record += fake_edid_record->ucFakeEDIDLength ? in radeon_atombios_get_lvds_info()
1732 fake_edid_record->ucFakeEDIDLength + 2 : in radeon_atombios_get_lvds_info()
1737 lvds->native_mode.width_mm = panel_res_record->usHSize; in radeon_atombios_get_lvds_info()
1738 lvds->native_mode.height_mm = panel_res_record->usVSize; in radeon_atombios_get_lvds_info()
1742 DRM_ERROR("Bad LCD record %d\n", *record); in radeon_atombios_get_lvds_info()
1757 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_primary_dac_info()
1758 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_primary_dac_info()
1759 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_primary_dac_info()
1767 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_primary_dac_info()
1770 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_primary_dac_info()
1777 bg = dac_info->ucDAC1_BG_Adjustment; in radeon_atombios_get_primary_dac_info()
1778 dac = dac_info->ucDAC1_DAC_Adjustment; in radeon_atombios_get_primary_dac_info()
1779 p_dac->ps2_pdac_adj = (bg << 8) | (dac); in radeon_atombios_get_primary_dac_info()
1788 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_tv_timings()
1796 if (!atom_parse_data_header(mode_info->atom_context, data_index, NULL, in radeon_atom_get_tv_timings()
1802 tv_info = (ATOM_ANALOG_TV_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1806 mode->crtc_htotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total); in radeon_atom_get_tv_timings()
1807 mode->crtc_hdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp); in radeon_atom_get_tv_timings()
1808 mode->crtc_hsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart); in radeon_atom_get_tv_timings()
1809 mode->crtc_hsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart) + in radeon_atom_get_tv_timings()
1810 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth); in radeon_atom_get_tv_timings()
1812 mode->crtc_vtotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total); in radeon_atom_get_tv_timings()
1813 mode->crtc_vdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp); in radeon_atom_get_tv_timings()
1814 mode->crtc_vsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart); in radeon_atom_get_tv_timings()
1815 mode->crtc_vsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart) + in radeon_atom_get_tv_timings()
1816 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth); in radeon_atom_get_tv_timings()
1818 mode->flags = 0; in radeon_atom_get_tv_timings()
1819 misc = le16_to_cpu(tv_info->aModeTimings[index].susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1821 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1823 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1825 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1827 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1829 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1831 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1832 le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10; in radeon_atom_get_tv_timings()
1836 mode->crtc_htotal -= 1; in radeon_atom_get_tv_timings()
1837 mode->crtc_vtotal -= 1; in radeon_atom_get_tv_timings()
1841 tv_info_v1_2 = (ATOM_ANALOG_TV_INFO_V1_2 *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1845 dtd_timings = &tv_info_v1_2->aModeTimings[index]; in radeon_atom_get_tv_timings()
1846 mode->crtc_htotal = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1847 le16_to_cpu(dtd_timings->usHBlanking_Time); in radeon_atom_get_tv_timings()
1848 mode->crtc_hdisplay = le16_to_cpu(dtd_timings->usHActive); in radeon_atom_get_tv_timings()
1849 mode->crtc_hsync_start = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1850 le16_to_cpu(dtd_timings->usHSyncOffset); in radeon_atom_get_tv_timings()
1851 mode->crtc_hsync_end = mode->crtc_hsync_start + in radeon_atom_get_tv_timings()
1852 le16_to_cpu(dtd_timings->usHSyncWidth); in radeon_atom_get_tv_timings()
1854 mode->crtc_vtotal = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1855 le16_to_cpu(dtd_timings->usVBlanking_Time); in radeon_atom_get_tv_timings()
1856 mode->crtc_vdisplay = le16_to_cpu(dtd_timings->usVActive); in radeon_atom_get_tv_timings()
1857 mode->crtc_vsync_start = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1858 le16_to_cpu(dtd_timings->usVSyncOffset); in radeon_atom_get_tv_timings()
1859 mode->crtc_vsync_end = mode->crtc_vsync_start + in radeon_atom_get_tv_timings()
1860 le16_to_cpu(dtd_timings->usVSyncWidth); in radeon_atom_get_tv_timings()
1862 mode->flags = 0; in radeon_atom_get_tv_timings()
1863 misc = le16_to_cpu(dtd_timings->susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1865 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1867 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1869 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1871 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1873 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1875 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1876 le16_to_cpu(dtd_timings->usPixClk) * 10; in radeon_atom_get_tv_timings()
1885 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_info()
1892 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_info()
1896 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_info()
1898 switch (tv_info->ucTV_BootUpDefaultStandard) { in radeon_atombios_get_tv_info()
1905 DRM_DEBUG_KMS("Default TV standard: NTSC-J\n"); in radeon_atombios_get_tv_info()
1913 DRM_DEBUG_KMS("Default TV standard: PAL-M\n"); in radeon_atombios_get_tv_info()
1917 DRM_DEBUG_KMS("Default TV standard: PAL-N\n"); in radeon_atombios_get_tv_info()
1921 DRM_DEBUG_KMS("Default TV standard: PAL-CN\n"); in radeon_atombios_get_tv_info()
1925 DRM_DEBUG_KMS("Default TV standard: PAL-60\n"); in radeon_atombios_get_tv_info()
1943 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tv_dac_info()
1944 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tv_dac_info()
1945 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_dac_info()
1953 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_dac_info()
1957 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_dac_info()
1964 bg = dac_info->ucDAC2_CRT2_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1965 dac = dac_info->ucDAC2_CRT2_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1966 tv_dac->ps2_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1968 bg = dac_info->ucDAC2_PAL_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1969 dac = dac_info->ucDAC2_PAL_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1970 tv_dac->pal_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1972 bg = dac_info->ucDAC2_NTSC_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1973 dac = dac_info->ucDAC2_NTSC_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1974 tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1976 tv_dac->tv_std = radeon_atombios_get_tv_info(rdev); in radeon_atombios_get_tv_dac_info()
2002 "adt7473",
2041 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_misc_flags_1_3()
2042 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_misc_flags_1_3()
2045 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2048 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2051 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2054 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2057 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2059 rdev->pm.power_state[state_index].flags &= in radeon_atombios_parse_misc_flags_1_3()
2063 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2066 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2068 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_misc_flags_1_3()
2069 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_misc_flags_1_3()
2070 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_parse_misc_flags_1_3()
2072 rdev->pm.power_state[state_index].clock_info[0].flags |= in radeon_atombios_parse_misc_flags_1_3()
2079 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_1_3()
2089 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_1_3()
2092 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_1_3()
2095 if ((power_info->info.ucOverdriveThermalController > 0) && in radeon_atombios_parse_power_table_1_3()
2096 (power_info->info.ucOverdriveThermalController < ARRAY_SIZE(thermal_controller_names))) { in radeon_atombios_parse_power_table_1_3()
2098 thermal_controller_names[power_info->info.ucOverdriveThermalController], in radeon_atombios_parse_power_table_1_3()
2099 power_info->info.ucOverdriveControllerAddress >> 1); in radeon_atombios_parse_power_table_1_3()
2100 i2c_bus = radeon_lookup_i2c_gpio(rdev, power_info->info.ucOverdriveI2cLine); in radeon_atombios_parse_power_table_1_3()
2101 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_parse_power_table_1_3()
2102 if (rdev->pm.i2c_bus) { in radeon_atombios_parse_power_table_1_3()
2104 const char *name = thermal_controller_names[power_info->info. in radeon_atombios_parse_power_table_1_3()
2106 info.addr = power_info->info.ucOverdriveControllerAddress >> 1; in radeon_atombios_parse_power_table_1_3()
2108 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_parse_power_table_1_3()
2111 num_modes = power_info->info.ucNumOfPowerModeEntries; in radeon_atombios_parse_power_table_1_3()
2116 rdev->pm.power_state = kcalloc(num_modes, in radeon_atombios_parse_power_table_1_3()
2119 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_1_3()
2124 if (!rdev->pm.power_state[state_index].clock_info) { in radeon_atombios_parse_power_table_1_3()
2125 rdev->pm.power_state[state_index].clock_info = in radeon_atombios_parse_power_table_1_3()
2129 if (!rdev->pm.power_state[state_index].clock_info) in radeon_atombios_parse_power_table_1_3()
2131 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_parse_power_table_1_3()
2132 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_parse_power_table_1_3()
2135 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2136 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usMemoryClock); in radeon_atombios_parse_power_table_1_3()
2137 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2138 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usEngineClock); in radeon_atombios_parse_power_table_1_3()
2140 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2141 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2143 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2144 power_info->info.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2145 misc = le32_to_cpu(power_info->info.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2148 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2150 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2152 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2154 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2157 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2160 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2162 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2163 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2165 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2170 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2171 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2172 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2173 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2175 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2176 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2178 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2179 power_info->info_2.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2180 misc = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2181 misc2 = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2184 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2186 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2188 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2190 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2193 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2196 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2198 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2199 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2201 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2206 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2207 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2208 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2209 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2211 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2212 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2214 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2215 power_info->info_3.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2216 misc = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2217 misc2 = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2220 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2222 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2224 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2226 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2229 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2232 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2234 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2235 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2237 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_enabled = in radeon_atombios_parse_power_table_1_3()
2239 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_id = in radeon_atombios_parse_power_table_1_3()
2240 power_info->info_3.asPowerPlayInfo[i].ucVDDCI_VoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2243 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2252 kfree(rdev->pm.power_state[state_index].clock_info); in radeon_atombios_parse_power_table_1_3()
2253 rdev->pm.power_state[state_index].clock_info = NULL; in radeon_atombios_parse_power_table_1_3()
2257 if (state_index && rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_1_3()
2258 rdev->pm.power_state[state_index - 1].type = in radeon_atombios_parse_power_table_1_3()
2260 rdev->pm.default_power_state_index = state_index - 1; in radeon_atombios_parse_power_table_1_3()
2261 rdev->pm.power_state[state_index - 1].default_clock_mode = in radeon_atombios_parse_power_table_1_3()
2262 &rdev->pm.power_state[state_index - 1].clock_info[0]; in radeon_atombios_parse_power_table_1_3()
2263 rdev->pm.power_state[state_index - 1].flags &= in radeon_atombios_parse_power_table_1_3()
2265 rdev->pm.power_state[state_index - 1].misc = 0; in radeon_atombios_parse_power_table_1_3()
2266 rdev->pm.power_state[state_index - 1].misc2 = 0; in radeon_atombios_parse_power_table_1_3()
2277 if (controller->ucType > 0) { in radeon_atombios_add_pplib_thermal_controller()
2278 if (controller->ucFanParameters & ATOM_PP_FANPARAMETERS_NOFAN) in radeon_atombios_add_pplib_thermal_controller()
2279 rdev->pm.no_fan = true; in radeon_atombios_add_pplib_thermal_controller()
2280 rdev->pm.fan_pulses_per_revolution = in radeon_atombios_add_pplib_thermal_controller()
2281 controller->ucFanParameters & ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK; in radeon_atombios_add_pplib_thermal_controller()
2282 if (rdev->pm.fan_pulses_per_revolution) { in radeon_atombios_add_pplib_thermal_controller()
2283 rdev->pm.fan_min_rpm = controller->ucFanMinRPM; in radeon_atombios_add_pplib_thermal_controller()
2284 rdev->pm.fan_max_rpm = controller->ucFanMaxRPM; in radeon_atombios_add_pplib_thermal_controller()
2286 if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV6xx) { in radeon_atombios_add_pplib_thermal_controller()
2288 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2290 rdev->pm.int_thermal_type = THERMAL_TYPE_RV6XX; in radeon_atombios_add_pplib_thermal_controller()
2291 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV770) { in radeon_atombios_add_pplib_thermal_controller()
2293 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2295 rdev->pm.int_thermal_type = THERMAL_TYPE_RV770; in radeon_atombios_add_pplib_thermal_controller()
2296 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_EVERGREEN) { in radeon_atombios_add_pplib_thermal_controller()
2298 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2300 rdev->pm.int_thermal_type = THERMAL_TYPE_EVERGREEN; in radeon_atombios_add_pplib_thermal_controller()
2301 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SUMO) { in radeon_atombios_add_pplib_thermal_controller()
2303 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2305 rdev->pm.int_thermal_type = THERMAL_TYPE_SUMO; in radeon_atombios_add_pplib_thermal_controller()
2306 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_NISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2308 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2310 rdev->pm.int_thermal_type = THERMAL_TYPE_NI; in radeon_atombios_add_pplib_thermal_controller()
2311 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2313 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2315 rdev->pm.int_thermal_type = THERMAL_TYPE_SI; in radeon_atombios_add_pplib_thermal_controller()
2316 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_CISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2318 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2320 rdev->pm.int_thermal_type = THERMAL_TYPE_CI; in radeon_atombios_add_pplib_thermal_controller()
2321 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_KAVERI) { in radeon_atombios_add_pplib_thermal_controller()
2323 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2325 rdev->pm.int_thermal_type = THERMAL_TYPE_KV; in radeon_atombios_add_pplib_thermal_controller()
2326 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2329 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2331 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL_GPIO; in radeon_atombios_add_pplib_thermal_controller()
2332 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2334 DRM_INFO("ADT7473 with internal thermal controller %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2335 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2337 rdev->pm.int_thermal_type = THERMAL_TYPE_ADT7473_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2338 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2341 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2343 rdev->pm.int_thermal_type = THERMAL_TYPE_EMC2103_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2344 } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { in radeon_atombios_add_pplib_thermal_controller()
2346 pp_lib_thermal_controller_names[controller->ucType], in radeon_atombios_add_pplib_thermal_controller()
2347 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2348 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2350 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2351 i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine); in radeon_atombios_add_pplib_thermal_controller()
2352 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_add_pplib_thermal_controller()
2353 if (rdev->pm.i2c_bus) { in radeon_atombios_add_pplib_thermal_controller()
2355 const char *name = pp_lib_thermal_controller_names[controller->ucType]; in radeon_atombios_add_pplib_thermal_controller()
2356 info.addr = controller->ucI2cAddress >> 1; in radeon_atombios_add_pplib_thermal_controller()
2358 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_add_pplib_thermal_controller()
2361 DRM_INFO("Unknown thermal controller type %d at 0x%02x %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2362 controller->ucType, in radeon_atombios_add_pplib_thermal_controller()
2363 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2364 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2373 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_default_voltages()
2383 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_default_voltages()
2386 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atombios_get_default_voltages()
2388 *vddc = le16_to_cpu(firmware_info->info_14.usBootUpVDDCVoltage); in radeon_atombios_get_default_voltages()
2390 *vddci = le16_to_cpu(firmware_info->info_22.usBootUpVDDCIVoltage); in radeon_atombios_get_default_voltages()
2391 *mvdd = le16_to_cpu(firmware_info->info_22.usBootUpMVDDCVoltage); in radeon_atombios_get_default_voltages()
2401 u32 misc = le32_to_cpu(non_clock_info->ulCapsAndSettings); in radeon_atombios_parse_pplib_non_clock_info()
2402 u32 misc2 = le16_to_cpu(non_clock_info->usClassification); in radeon_atombios_parse_pplib_non_clock_info()
2407 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_pplib_non_clock_info()
2408 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_pplib_non_clock_info()
2409 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_pplib_non_clock_info()
2414 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2418 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2422 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2427 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2431 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_parse_pplib_non_clock_info()
2433 rdev->pm.power_state[state_index].flags |= in radeon_atombios_parse_pplib_non_clock_info()
2436 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2438 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_pplib_non_clock_info()
2439 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_pplib_non_clock_info()
2440 &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; in radeon_atombios_parse_pplib_non_clock_info()
2441 if ((rdev->family >= CHIP_BARTS) && !(rdev->flags & RADEON_IS_IGP)) { in radeon_atombios_parse_pplib_non_clock_info()
2443 rdev->pm.default_sclk = rdev->pm.power_state[state_index].clock_info[0].sclk; in radeon_atombios_parse_pplib_non_clock_info()
2444 rdev->pm.default_mclk = rdev->pm.power_state[state_index].clock_info[0].mclk; in radeon_atombios_parse_pplib_non_clock_info()
2445 rdev->pm.default_vddc = rdev->pm.power_state[state_index].clock_info[0].voltage.voltage; in radeon_atombios_parse_pplib_non_clock_info()
2446 rdev->pm.default_vddci = rdev->pm.power_state[state_index].clock_info[0].voltage.vddci; in radeon_atombios_parse_pplib_non_clock_info()
2456 rdev->pm.power_state[state_index].clock_info[j].mclk = in radeon_atombios_parse_pplib_non_clock_info()
2457 rdev->clock.default_mclk; in radeon_atombios_parse_pplib_non_clock_info()
2458 rdev->pm.power_state[state_index].clock_info[j].sclk = in radeon_atombios_parse_pplib_non_clock_info()
2459 rdev->clock.default_sclk; in radeon_atombios_parse_pplib_non_clock_info()
2461 rdev->pm.power_state[state_index].clock_info[j].voltage.voltage = in radeon_atombios_parse_pplib_non_clock_info()
2464 rdev->pm.power_state[state_index].clock_info[j].voltage.vddci = in radeon_atombios_parse_pplib_non_clock_info()
2478 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2479 if (rdev->family >= CHIP_PALM) { in radeon_atombios_parse_pplib_clock_info()
2480 sclk = le16_to_cpu(clock_info->sumo.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2481 sclk |= clock_info->sumo.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2482 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2484 sclk = le16_to_cpu(clock_info->rs780.usLowEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2485 sclk |= clock_info->rs780.ucLowEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2486 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2488 } else if (rdev->family >= CHIP_BONAIRE) { in radeon_atombios_parse_pplib_clock_info()
2489 sclk = le16_to_cpu(clock_info->ci.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2490 sclk |= clock_info->ci.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2491 mclk = le16_to_cpu(clock_info->ci.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2492 mclk |= clock_info->ci.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2493 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2494 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2495 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2497 } else if (rdev->family >= CHIP_TAHITI) { in radeon_atombios_parse_pplib_clock_info()
2498 sclk = le16_to_cpu(clock_info->si.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2499 sclk |= clock_info->si.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2500 mclk = le16_to_cpu(clock_info->si.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2501 mclk |= clock_info->si.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2502 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2503 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2504 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2506 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2507 le16_to_cpu(clock_info->si.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2508 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2509 le16_to_cpu(clock_info->si.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2510 } else if (rdev->family >= CHIP_CEDAR) { in radeon_atombios_parse_pplib_clock_info()
2511 sclk = le16_to_cpu(clock_info->evergreen.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2512 sclk |= clock_info->evergreen.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2513 mclk = le16_to_cpu(clock_info->evergreen.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2514 mclk |= clock_info->evergreen.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2515 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2516 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2517 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2519 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2520 le16_to_cpu(clock_info->evergreen.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2521 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2522 le16_to_cpu(clock_info->evergreen.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2524 sclk = le16_to_cpu(clock_info->r600.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2525 sclk |= clock_info->r600.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2526 mclk = le16_to_cpu(clock_info->r600.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2527 mclk |= clock_info->r600.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2528 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2529 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2530 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2532 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2533 le16_to_cpu(clock_info->r600.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2537 switch (rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage) { in radeon_atombios_parse_pplib_clock_info()
2547 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage, in radeon_atombios_parse_pplib_clock_info()
2549 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = vddc; in radeon_atombios_parse_pplib_clock_info()
2555 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2557 if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0) in radeon_atombios_parse_pplib_clock_info()
2561 if ((rdev->pm.power_state[state_index].clock_info[mode_index].mclk == 0) || in radeon_atombios_parse_pplib_clock_info()
2562 (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0)) in radeon_atombios_parse_pplib_clock_info()
2570 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_4_5()
2582 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_4_5()
2585 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_4_5()
2587 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_4_5()
2588 if (power_info->pplib.ucNumStates == 0) in radeon_atombios_parse_power_table_4_5()
2590 rdev->pm.power_state = kcalloc(power_info->pplib.ucNumStates, in radeon_atombios_parse_power_table_4_5()
2593 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_4_5()
2596 for (i = 0; i < power_info->pplib.ucNumStates; i++) { in radeon_atombios_parse_power_table_4_5()
2599 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2600 le16_to_cpu(power_info->pplib.usStateArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2601 i * power_info->pplib.ucStateEntrySize); in radeon_atombios_parse_power_table_4_5()
2603 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2604 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2605 (power_state->v1.ucNonClockStateIndex * in radeon_atombios_parse_power_table_4_5()
2606 power_info->pplib.ucNonClockSize)); in radeon_atombios_parse_power_table_4_5()
2607 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_4_5()
2608 kcalloc((power_info->pplib.ucStateEntrySize - 1) ? in radeon_atombios_parse_power_table_4_5()
2609 (power_info->pplib.ucStateEntrySize - 1) : 1, in radeon_atombios_parse_power_table_4_5()
2612 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_4_5()
2614 if (power_info->pplib.ucStateEntrySize - 1) { in radeon_atombios_parse_power_table_4_5()
2615 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) { in radeon_atombios_parse_power_table_4_5()
2617 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2618 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2619 (power_state->v1.ucClockStateIndices[j] * in radeon_atombios_parse_power_table_4_5()
2620 power_info->pplib.ucClockInfoSize)); in radeon_atombios_parse_power_table_4_5()
2628 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_4_5()
2629 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_4_5()
2630 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_4_5()
2631 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_4_5()
2634 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_4_5()
2643 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_4_5()
2644 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_4_5()
2648 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_4_5()
2649 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_4_5()
2651 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_4_5()
2652 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_4_5()
2653 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_4_5()
2660 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_6()
2676 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_6()
2679 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_6()
2681 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_6()
2683 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2684 le16_to_cpu(power_info->pplib.usStateArrayOffset)); in radeon_atombios_parse_power_table_6()
2686 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2687 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2689 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2690 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2691 if (state_array->ucNumEntries == 0) in radeon_atombios_parse_power_table_6()
2693 rdev->pm.power_state = kcalloc(state_array->ucNumEntries, in radeon_atombios_parse_power_table_6()
2696 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_6()
2698 power_state_offset = (u8 *)state_array->states; in radeon_atombios_parse_power_table_6()
2699 for (i = 0; i < state_array->ucNumEntries; i++) { in radeon_atombios_parse_power_table_6()
2702 non_clock_array_index = power_state->v2.nonClockInfoIndex; in radeon_atombios_parse_power_table_6()
2704 &non_clock_info_array->nonClockInfo[non_clock_array_index]; in radeon_atombios_parse_power_table_6()
2705 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_6()
2706 kcalloc(power_state->v2.ucNumDPMLevels ? in radeon_atombios_parse_power_table_6()
2707 power_state->v2.ucNumDPMLevels : 1, in radeon_atombios_parse_power_table_6()
2710 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_6()
2712 if (power_state->v2.ucNumDPMLevels) { in radeon_atombios_parse_power_table_6()
2713 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { in radeon_atombios_parse_power_table_6()
2714 clock_array_index = power_state->v2.clockInfoIndex[j]; in radeon_atombios_parse_power_table_6()
2716 &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; in radeon_atombios_parse_power_table_6()
2724 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_6()
2725 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_6()
2726 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_6()
2727 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_6()
2730 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_6()
2736 power_state_offset += 2 + power_state->v2.ucNumDPMLevels; in radeon_atombios_parse_power_table_6()
2740 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_6()
2741 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_6()
2745 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_6()
2746 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_6()
2748 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_6()
2749 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_6()
2750 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_6()
2757 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_power_modes()
2763 rdev->pm.default_power_state_index = -1; in radeon_atombios_get_power_modes()
2765 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_power_modes()
2786 rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL); in radeon_atombios_get_power_modes()
2787 if (rdev->pm.power_state) { in radeon_atombios_get_power_modes()
2788 rdev->pm.power_state[0].clock_info = in radeon_atombios_get_power_modes()
2792 if (rdev->pm.power_state[0].clock_info) { in radeon_atombios_get_power_modes()
2794 rdev->pm.power_state[state_index].type = in radeon_atombios_get_power_modes()
2796 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_get_power_modes()
2797 rdev->pm.power_state[state_index].clock_info[0].mclk = rdev->clock.default_mclk; in radeon_atombios_get_power_modes()
2798 rdev->pm.power_state[state_index].clock_info[0].sclk = rdev->clock.default_sclk; in radeon_atombios_get_power_modes()
2799 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_get_power_modes()
2800 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_get_power_modes()
2801 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_get_power_modes()
2802 rdev->pm.power_state[state_index].pcie_lanes = 16; in radeon_atombios_get_power_modes()
2803 rdev->pm.default_power_state_index = state_index; in radeon_atombios_get_power_modes()
2804 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_get_power_modes()
2810 rdev->pm.num_power_states = state_index; in radeon_atombios_get_power_modes()
2812 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; in radeon_atombios_get_power_modes()
2813 rdev->pm.current_clock_mode_index = 0; in radeon_atombios_get_power_modes()
2814 if (rdev->pm.default_power_state_index >= 0) in radeon_atombios_get_power_modes()
2815 rdev->pm.current_vddc = in radeon_atombios_get_power_modes()
2816 rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage; in radeon_atombios_get_power_modes()
2818 rdev->pm.current_vddc = 0; in radeon_atombios_get_power_modes()
2844 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_clock_dividers()
2845 return -EINVAL; in radeon_atom_get_clock_dividers()
2853 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2855 dividers->post_div = args.v1.ucPostDiv; in radeon_atom_get_clock_dividers()
2856 dividers->fb_div = args.v1.ucFbDiv; in radeon_atom_get_clock_dividers()
2857 dividers->enable_post_div = true; in radeon_atom_get_clock_dividers()
2863 if (rdev->family <= CHIP_RV770) { in radeon_atom_get_clock_dividers()
2867 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2869 dividers->post_div = args.v2.ucPostDiv; in radeon_atom_get_clock_dividers()
2870 dividers->fb_div = le16_to_cpu(args.v2.usFbDiv); in radeon_atom_get_clock_dividers()
2871 dividers->ref_div = args.v2.ucAction; in radeon_atom_get_clock_dividers()
2872 if (rdev->family == CHIP_RV770) { in radeon_atom_get_clock_dividers()
2873 dividers->enable_post_div = (le32_to_cpu(args.v2.ulClock) & (1 << 24)) ? in radeon_atom_get_clock_dividers()
2875 dividers->vco_mode = (le32_to_cpu(args.v2.ulClock) & (1 << 25)) ? 1 : 0; in radeon_atom_get_clock_dividers()
2877 dividers->enable_post_div = (dividers->fb_div & 1) ? true : false; in radeon_atom_get_clock_dividers()
2882 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2884 dividers->post_div = args.v3.ucPostDiv; in radeon_atom_get_clock_dividers()
2885 dividers->enable_post_div = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2887 dividers->enable_dithen = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2889 dividers->whole_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2890 dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2891 dividers->ref_div = args.v3.ucRefDiv; in radeon_atom_get_clock_dividers()
2892 dividers->vco_mode = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2896 if (rdev->family >= CHIP_TAHITI) in radeon_atom_get_clock_dividers()
2897 return -EINVAL; in radeon_atom_get_clock_dividers()
2902 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2904 dividers->post_div = args.v5.ucPostDiv; in radeon_atom_get_clock_dividers()
2905 dividers->enable_post_div = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2907 dividers->enable_dithen = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2909 dividers->whole_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2910 dividers->frac_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2911 dividers->ref_div = args.v5.ucRefDiv; in radeon_atom_get_clock_dividers()
2912 dividers->vco_mode = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2921 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2923 dividers->post_divider = dividers->post_div = args.v4.ucPostDiv; in radeon_atom_get_clock_dividers()
2924 dividers->real_clock = le32_to_cpu(args.v4.ulClock); in radeon_atom_get_clock_dividers()
2932 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2934 dividers->whole_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2935 dividers->frac_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2936 dividers->ref_div = args.v6_out.ucPllRefDiv; in radeon_atom_get_clock_dividers()
2937 dividers->post_div = args.v6_out.ucPllPostDiv; in radeon_atom_get_clock_dividers()
2938 dividers->flags = args.v6_out.ucPllCntlFlag; in radeon_atom_get_clock_dividers()
2939 dividers->real_clock = le32_to_cpu(args.v6_out.ulClock.ulClock); in radeon_atom_get_clock_dividers()
2940 dividers->post_divider = args.v6_out.ulClock.ucPostDiv; in radeon_atom_get_clock_dividers()
2943 return -EINVAL; in radeon_atom_get_clock_dividers()
2960 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_memory_pll_dividers()
2961 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2973 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_pll_dividers()
2975 mpll_param->clkfrac = le16_to_cpu(args.ulFbDiv.usFbDivFrac); in radeon_atom_get_memory_pll_dividers()
2976 mpll_param->clkf = le16_to_cpu(args.ulFbDiv.usFbDiv); in radeon_atom_get_memory_pll_dividers()
2977 mpll_param->post_div = args.ucPostDiv; in radeon_atom_get_memory_pll_dividers()
2978 mpll_param->dll_speed = args.ucDllSpeed; in radeon_atom_get_memory_pll_dividers()
2979 mpll_param->bwcntl = args.ucBWCntl; in radeon_atom_get_memory_pll_dividers()
2980 mpll_param->vco_mode = in radeon_atom_get_memory_pll_dividers()
2982 mpll_param->yclk_sel = in radeon_atom_get_memory_pll_dividers()
2984 mpll_param->qdr = in radeon_atom_get_memory_pll_dividers()
2986 mpll_param->half_rate = in radeon_atom_get_memory_pll_dividers()
2990 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2994 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
3006 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_clock_gating()
3014 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_engine_clock()
3023 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_clock()
3035 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_clock()
3044 if (rdev->flags & RADEON_IS_IGP) in radeon_atom_set_memory_clock()
3049 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_memory_clock()
3068 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_dram_timings()
3079 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_update_memory_dll()
3091 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_ac_timing()
3107 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_set_voltage()
3131 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_set_voltage()
3135 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_voltage()
3145 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_max_vddc()
3146 return -EINVAL; in radeon_atom_get_max_vddc()
3150 return -EINVAL; in radeon_atom_get_max_vddc()
3156 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3165 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3170 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_max_vddc()
3171 return -EINVAL; in radeon_atom_get_max_vddc()
3191 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_leakage_id_from_vbios()
3192 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3201 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_leakage_id_from_vbios()
3206 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_id_from_vbios()
3207 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3228 if (!atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3230 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3233 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3237 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3242 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3244 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3245 le16_to_cpu(profile->usLeakageBinArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3247 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3248 le16_to_cpu(profile->usElbVDDC_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3250 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3251 le16_to_cpu(profile->usElbVDDC_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3253 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3254 le16_to_cpu(profile->usElbVDDCI_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3256 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3257 le16_to_cpu(profile->usElbVDDCI_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3259 if (profile->ucElbVDDC_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3260 for (i = 0; i < profile->ucElbVDDC_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3262 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3264 *vddc = vddc_buf[j * profile->ucElbVDDC_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3272 if (profile->ucElbVDDCI_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3273 for (i = 0; i < profile->ucElbVDDCI_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3275 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3277 *vddci = vddci_buf[j * profile->ucElbVDDCI_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3287 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3288 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3292 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3293 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3310 u32 count = rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count; in radeon_atom_get_voltage_evv()
3314 if (rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v == in radeon_atom_get_voltage_evv()
3320 return -EINVAL; in radeon_atom_get_voltage_evv()
3326 cpu_to_le32(rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk); in radeon_atom_get_voltage_evv()
3328 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_evv()
3343 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_voltage_gpio_settings()
3344 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3348 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3354 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3362 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3367 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_gpio_settings()
3368 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3389 u32 size = le16_to_cpu(v1->sHeader.usStructureSize); in atom_lookup_voltage_object_v1()
3395 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v1()
3398 vo->asFormula.ucNumOfVoltageEntries; in atom_lookup_voltage_object_v1()
3406 u32 size = le16_to_cpu(v2->sHeader.usStructureSize); in atom_lookup_voltage_object_v2()
3412 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v2()
3415 (vo->asFormula.ucNumOfVoltageEntries * sizeof(VOLTAGE_LUT_ENTRY)); in atom_lookup_voltage_object_v2()
3423 u32 size = le16_to_cpu(v3->sHeader.usStructureSize); in atom_lookup_voltage_object_v3()
3429 if ((vo->asGpioVoltageObj.sHeader.ucVoltageType == voltage_type) && in atom_lookup_voltage_object_v3()
3430 (vo->asGpioVoltageObj.sHeader.ucVoltageMode == voltage_mode)) in atom_lookup_voltage_object_v3()
3432 offset += le16_to_cpu(vo->asGpioVoltageObj.sHeader.usSize); in atom_lookup_voltage_object_v3()
3447 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_is_voltage_gpio()
3450 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_is_voltage_gpio()
3458 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_is_voltage_gpio()
3460 (voltage_object->v1.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3465 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_is_voltage_gpio()
3467 (voltage_object->v2.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3478 if (atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_is_voltage_gpio()
3506 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_svi2_info()
3509 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_svi2_info()
3516 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_svi2_info()
3520 *svd_gpio_id = voltage_object->v3.asSVID2Obj.ucSVDGpioId; in radeon_atom_get_svi2_info()
3521 *svc_gpio_id = voltage_object->v3.asSVID2Obj.ucSVCGpioId; in radeon_atom_get_svi2_info()
3523 return -EINVAL; in radeon_atom_get_svi2_info()
3528 return -EINVAL; in radeon_atom_get_svi2_info()
3533 return -EINVAL; in radeon_atom_get_svi2_info()
3549 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_max_voltage()
3552 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_max_voltage()
3557 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_max_voltage()
3560 &voltage_object->v1.asFormula; in radeon_atom_get_max_voltage()
3561 if (formula->ucFlag & 1) in radeon_atom_get_max_voltage()
3563 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3564 formula->ucNumOfVoltageEntries / 2 * in radeon_atom_get_max_voltage()
3565 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3568 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3569 (formula->ucNumOfVoltageEntries - 1) * in radeon_atom_get_max_voltage()
3570 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3576 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_max_voltage()
3579 &voltage_object->v2.asFormula; in radeon_atom_get_max_voltage()
3580 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_max_voltage()
3582 ((u8 *)&formula->asVIDAdjustEntries[0] + in radeon_atom_get_max_voltage()
3583 (sizeof(VOLTAGE_LUT_ENTRY) * (formula->ucNumOfVoltageEntries - 1))); in radeon_atom_get_max_voltage()
3585 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_max_voltage()
3592 return -EINVAL; in radeon_atom_get_max_voltage()
3596 return -EINVAL; in radeon_atom_get_max_voltage()
3608 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_min_voltage()
3611 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_min_voltage()
3616 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_min_voltage()
3619 &voltage_object->v1.asFormula; in radeon_atom_get_min_voltage()
3621 le16_to_cpu(formula->usVoltageBaseLevel); in radeon_atom_get_min_voltage()
3627 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_min_voltage()
3630 &voltage_object->v2.asFormula; in radeon_atom_get_min_voltage()
3631 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_min_voltage()
3633 le16_to_cpu(formula->asVIDAdjustEntries[ in radeon_atom_get_min_voltage()
3642 return -EINVAL; in radeon_atom_get_min_voltage()
3646 return -EINVAL; in radeon_atom_get_min_voltage()
3658 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_step()
3661 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_step()
3666 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_voltage_step()
3669 &voltage_object->v1.asFormula; in radeon_atom_get_voltage_step()
3670 if (formula->ucFlag & 1) in radeon_atom_get_voltage_step()
3672 (le16_to_cpu(formula->usVoltageStep) + 1) / 2; in radeon_atom_get_voltage_step()
3675 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_voltage_step()
3680 return -EINVAL; in radeon_atom_get_voltage_step()
3683 return -EINVAL; in radeon_atom_get_voltage_step()
3687 return -EINVAL; in radeon_atom_get_voltage_step()
3698 return -EINVAL; in radeon_atom_round_to_true_voltage()
3700 return -EINVAL; in radeon_atom_round_to_true_voltage()
3702 return -EINVAL; in radeon_atom_round_to_true_voltage()
3710 ((nominal_voltage - min_voltage) / voltage_step) * in radeon_atom_round_to_true_voltage()
3727 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_table()
3730 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_table()
3737 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_table()
3738 return -EINVAL; in radeon_atom_get_voltage_table()
3741 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_voltage_table()
3744 &voltage_object->v2.asFormula; in radeon_atom_get_voltage_table()
3746 if (formula->ucNumOfVoltageEntries > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3747 return -EINVAL; in radeon_atom_get_voltage_table()
3748 lut = &formula->asVIDAdjustEntries[0]; in radeon_atom_get_voltage_table()
3749 for (i = 0; i < formula->ucNumOfVoltageEntries; i++) { in radeon_atom_get_voltage_table()
3750 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3751 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3753 voltage_table->entries[i].value, in radeon_atom_get_voltage_table()
3755 &voltage_table->entries[i].smio_low, in radeon_atom_get_voltage_table()
3756 &voltage_table->mask_low); in radeon_atom_get_voltage_table()
3762 voltage_table->count = formula->ucNumOfVoltageEntries; in radeon_atom_get_voltage_table()
3768 return -EINVAL; in radeon_atom_get_voltage_table()
3775 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_voltage_table()
3779 &voltage_object->v3.asGpioVoltageObj; in radeon_atom_get_voltage_table()
3781 if (gpio->ucGpioEntryNum > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3782 return -EINVAL; in radeon_atom_get_voltage_table()
3783 lut = &gpio->asVolGpioLut[0]; in radeon_atom_get_voltage_table()
3784 for (i = 0; i < gpio->ucGpioEntryNum; i++) { in radeon_atom_get_voltage_table()
3785 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3786 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3787 voltage_table->entries[i].smio_low = in radeon_atom_get_voltage_table()
3788 le32_to_cpu(lut->ulVoltageId); in radeon_atom_get_voltage_table()
3792 voltage_table->mask_low = le32_to_cpu(gpio->ulGpioMaskVal); in radeon_atom_get_voltage_table()
3793 voltage_table->count = gpio->ucGpioEntryNum; in radeon_atom_get_voltage_table()
3794 voltage_table->phase_delay = gpio->ucPhaseDelay; in radeon_atom_get_voltage_table()
3800 return -EINVAL; in radeon_atom_get_voltage_table()
3805 return -EINVAL; in radeon_atom_get_voltage_table()
3808 return -EINVAL; in radeon_atom_get_voltage_table()
3827 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_memory_info()
3830 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_memory_info()
3836 if (module_index < vram_info->v1_3.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3838 (ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo; in radeon_atom_get_memory_info()
3841 if (le16_to_cpu(vram_module->usSize) == 0) in radeon_atom_get_memory_info()
3842 return -EINVAL; in radeon_atom_get_memory_info()
3844 ((u8 *)vram_module + le16_to_cpu(vram_module->usSize)); in radeon_atom_get_memory_info()
3846 mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3847 mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3849 return -EINVAL; in radeon_atom_get_memory_info()
3853 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3855 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_memory_info()
3858 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3859 return -EINVAL; in radeon_atom_get_memory_info()
3861 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3863 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3864 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3866 return -EINVAL; in radeon_atom_get_memory_info()
3869 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3870 return -EINVAL; in radeon_atom_get_memory_info()
3877 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3879 (ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo; in radeon_atom_get_memory_info()
3882 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3883 return -EINVAL; in radeon_atom_get_memory_info()
3885 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3887 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3888 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3890 return -EINVAL; in radeon_atom_get_memory_info()
3893 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3894 return -EINVAL; in radeon_atom_get_memory_info()
3898 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3899 return -EINVAL; in radeon_atom_get_memory_info()
3903 return -EINVAL; in radeon_atom_get_memory_info()
3919 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_mclk_range_table()
3922 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_mclk_range_table()
3927 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3928 return -EINVAL; in radeon_atom_get_mclk_range_table()
3931 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_mclk_range_table()
3933 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_mclk_range_table()
3937 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_mclk_range_table()
3938 return -EINVAL; in radeon_atom_get_mclk_range_table()
3940 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_mclk_range_table()
3942 mclk_range_table->num_entries = (u8) in radeon_atom_get_mclk_range_table()
3943 ((le16_to_cpu(vram_module->usModuleSize) - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) / in radeon_atom_get_mclk_range_table()
3945 format = &vram_module->asMemTiming[0]; in radeon_atom_get_mclk_range_table()
3946 for (i = 0; i < mclk_range_table->num_entries; i++) { in radeon_atom_get_mclk_range_table()
3947 mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange); in radeon_atom_get_mclk_range_table()
3952 return -EINVAL; in radeon_atom_get_mclk_range_table()
3955 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3956 return -EINVAL; in radeon_atom_get_mclk_range_table()
3960 DRM_ERROR("new table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3961 return -EINVAL; in radeon_atom_get_mclk_range_table()
3963 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3964 return -EINVAL; in radeon_atom_get_mclk_range_table()
3968 return -EINVAL; in radeon_atom_get_mclk_range_table()
3991 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_init_mc_reg_table()
3994 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_init_mc_reg_table()
3997 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
3998 return -EINVAL; in radeon_atom_init_mc_reg_table()
4002 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_init_mc_reg_table()
4005 ((u8 *)vram_info + le16_to_cpu(vram_info->v2_1.usMemClkPatchTblOffset)); in radeon_atom_init_mc_reg_table()
4009 le16_to_cpu(reg_block->usRegIndexTblSize)); in radeon_atom_init_mc_reg_table()
4010 ATOM_INIT_REG_INDEX_FORMAT *format = &reg_block->asRegIndexBuf[0]; in radeon_atom_init_mc_reg_table()
4011 num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / in radeon_atom_init_mc_reg_table()
4012 sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; in radeon_atom_init_mc_reg_table()
4014 return -EINVAL; in radeon_atom_init_mc_reg_table()
4016 if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER) in radeon_atom_init_mc_reg_table()
4018 reg_table->mc_reg_address[i].s1 = in radeon_atom_init_mc_reg_table()
4019 (u16)(le16_to_cpu(format->usRegIndex)); in radeon_atom_init_mc_reg_table()
4020 reg_table->mc_reg_address[i].pre_reg_data = in radeon_atom_init_mc_reg_table()
4021 (u8)(format->ucPreRegDataLength); in radeon_atom_init_mc_reg_table()
4026 reg_table->last = i; in radeon_atom_init_mc_reg_table()
4032 reg_table->mc_reg_table_entry[num_ranges].mclk_max = in radeon_atom_init_mc_reg_table()
4035 for (i = 0, j = 1; i < reg_table->last; i++) { in radeon_atom_init_mc_reg_table()
4036 if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { in radeon_atom_init_mc_reg_table()
4037 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4040 } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { in radeon_atom_init_mc_reg_table()
4041 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4042 reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1]; in radeon_atom_init_mc_reg_table()
4048 ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); in radeon_atom_init_mc_reg_table()
4051 return -EINVAL; in radeon_atom_init_mc_reg_table()
4052 reg_table->num_entries = num_ranges; in radeon_atom_init_mc_reg_table()
4054 return -EINVAL; in radeon_atom_init_mc_reg_table()
4057 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4058 return -EINVAL; in radeon_atom_init_mc_reg_table()
4062 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4063 return -EINVAL; in radeon_atom_init_mc_reg_table()
4067 return -EINVAL; in radeon_atom_init_mc_reg_table()
4072 struct radeon_device *rdev = dev->dev_private; in radeon_atom_initialize_bios_scratch_regs()
4075 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4093 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4108 if (rdev->family >= CHIP_R600) in radeon_save_bios_scratch_regs()
4114 rdev->bios_scratch[i] = RREG32(scratch_reg + (i * 4)); in radeon_save_bios_scratch_regs()
4122 if (rdev->family >= CHIP_R600) in radeon_restore_bios_scratch_regs()
4128 WREG32(scratch_reg + (i * 4), rdev->bios_scratch[i]); in radeon_restore_bios_scratch_regs()
4133 struct drm_device *dev = encoder->dev; in radeon_atom_output_lock()
4134 struct radeon_device *rdev = dev->dev_private; in radeon_atom_output_lock()
4137 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4150 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4162 struct drm_device *dev = connector->dev; in radeon_atombios_connected_scratch_regs()
4163 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_connected_scratch_regs()
4169 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4179 if ((radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4180 (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4192 if ((radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4193 (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4205 if ((radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4206 (radeon_connector->devices & ATOM_DEVICE_LCD1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4219 if ((radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4220 (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4233 if ((radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4234 (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4247 if ((radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4248 (radeon_connector->devices & ATOM_DEVICE_DFP1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4261 if ((radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4262 (radeon_connector->devices & ATOM_DEVICE_DFP2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4275 if ((radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4276 (radeon_connector->devices & ATOM_DEVICE_DFP3_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4289 if ((radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4290 (radeon_connector->devices & ATOM_DEVICE_DFP4_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4303 if ((radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4304 (radeon_connector->devices & ATOM_DEVICE_DFP5_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4317 if ((radeon_encoder->devices & ATOM_DEVICE_DFP6_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4318 (radeon_connector->devices & ATOM_DEVICE_DFP6_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4332 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4346 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_crtc_scratch_regs()
4347 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_crtc_scratch_regs()
4354 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4359 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4363 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4367 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4371 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4375 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4379 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4383 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4387 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4392 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4401 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_dpms_scratch_regs()
4402 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_dpms_scratch_regs()
4409 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()
4414 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4420 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4426 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4432 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4438 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4444 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4450 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4456 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4462 if (radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4468 if (radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4475 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()