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()
836 struct radeon_device *rdev = dev->dev_private; in atombios_get_connector_object_id()
838 if (rdev->flags & RADEON_IS_IGP) { in atombios_get_connector_object_id()
844 struct radeon_mode_info *mode_info = &rdev->mode_info; in atombios_get_connector_object_id()
845 struct atom_context *ctx = mode_info->atom_context; in atombios_get_connector_object_id()
852 xtmds = (ATOM_XTMDS_INFO *)(ctx->bios + data_offset); in atombios_get_connector_object_id()
854 if (xtmds->ucSupportedLink & ATOM_XTMDS_SUPPORTED_DUALLINK) { in atombios_get_connector_object_id()
887 struct radeon_device *rdev = dev->dev_private; in radeon_get_atom_connector_info_from_supported_devices_table()
888 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_get_atom_connector_info_from_supported_devices_table()
889 struct atom_context *ctx = mode_info->atom_context; in radeon_get_atom_connector_info_from_supported_devices_table()
915 (union atom_supported_devices *)(ctx->bios + data_offset); in radeon_get_atom_connector_info_from_supported_devices_table()
917 device_support = le16_to_cpu(supported_devices->info.usDeviceSupport); in radeon_get_atom_connector_info_from_supported_devices_table()
926 supported_devices->info.asConnInfo[i]; in radeon_get_atom_connector_info_from_supported_devices_table()
969 u8 isb = supported_devices->info_2d1.asIntSrcInfo[i].ucIntSrcBitmap; in radeon_get_atom_connector_info_from_supported_devices_table()
1040 /* combine analog and digital for DVI-I */ in radeon_get_atom_connector_info_from_supported_devices_table()
1105 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_dentist_vco_freq()
1111 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_dentist_vco_freq()
1113 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_get_dentist_vco_freq()
1115 rdev->clock.vco_freq = in radeon_atombios_get_dentist_vco_freq()
1116 le32_to_cpu(igp_info->info_6.ulDentistVCOFreq); in radeon_atombios_get_dentist_vco_freq()
1122 struct radeon_device *rdev = dev->dev_private; in radeon_atom_get_clock_info()
1123 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_clock_info()
1127 struct radeon_pll *p1pll = &rdev->clock.p1pll; in radeon_atom_get_clock_info()
1128 struct radeon_pll *p2pll = &rdev->clock.p2pll; in radeon_atom_get_clock_info()
1129 struct radeon_pll *dcpll = &rdev->clock.dcpll; in radeon_atom_get_clock_info()
1130 struct radeon_pll *spll = &rdev->clock.spll; in radeon_atom_get_clock_info()
1131 struct radeon_pll *mpll = &rdev->clock.mpll; in radeon_atom_get_clock_info()
1134 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atom_get_clock_info()
1137 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atom_get_clock_info()
1140 p1pll->reference_freq = in radeon_atom_get_clock_info()
1141 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1142 p1pll->reference_div = 0; in radeon_atom_get_clock_info()
1145 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1146 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1148 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1149 le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1150 p1pll->pll_out_max = in radeon_atom_get_clock_info()
1151 le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output); in radeon_atom_get_clock_info()
1154 p1pll->lcd_pll_out_min = in radeon_atom_get_clock_info()
1155 le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1156 if (p1pll->lcd_pll_out_min == 0) in radeon_atom_get_clock_info()
1157 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1158 p1pll->lcd_pll_out_max = in radeon_atom_get_clock_info()
1159 le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1160 if (p1pll->lcd_pll_out_max == 0) in radeon_atom_get_clock_info()
1161 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1163 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1164 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1167 if (p1pll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1169 p1pll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1171 p1pll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1174 p1pll->pll_in_min = in radeon_atom_get_clock_info()
1175 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Input); in radeon_atom_get_clock_info()
1176 p1pll->pll_in_max = in radeon_atom_get_clock_info()
1177 le16_to_cpu(firmware_info->info.usMaxPixelClockPLL_Input); in radeon_atom_get_clock_info()
1183 spll->reference_freq = in radeon_atom_get_clock_info()
1184 le16_to_cpu(firmware_info->info_21.usCoreReferenceClock); in radeon_atom_get_clock_info()
1186 spll->reference_freq = in radeon_atom_get_clock_info()
1187 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1188 spll->reference_div = 0; in radeon_atom_get_clock_info()
1190 spll->pll_out_min = in radeon_atom_get_clock_info()
1191 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Output); in radeon_atom_get_clock_info()
1192 spll->pll_out_max = in radeon_atom_get_clock_info()
1193 le32_to_cpu(firmware_info->info.ulMaxEngineClockPLL_Output); in radeon_atom_get_clock_info()
1196 if (spll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1198 spll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1200 spll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1203 spll->pll_in_min = in radeon_atom_get_clock_info()
1204 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Input); in radeon_atom_get_clock_info()
1205 spll->pll_in_max = in radeon_atom_get_clock_info()
1206 le16_to_cpu(firmware_info->info.usMaxEngineClockPLL_Input); in radeon_atom_get_clock_info()
1210 mpll->reference_freq = in radeon_atom_get_clock_info()
1211 le16_to_cpu(firmware_info->info_21.usMemoryReferenceClock); in radeon_atom_get_clock_info()
1213 mpll->reference_freq = in radeon_atom_get_clock_info()
1214 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1215 mpll->reference_div = 0; in radeon_atom_get_clock_info()
1217 mpll->pll_out_min = in radeon_atom_get_clock_info()
1218 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1219 mpll->pll_out_max = in radeon_atom_get_clock_info()
1220 le32_to_cpu(firmware_info->info.ulMaxMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1223 if (mpll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1225 mpll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1227 mpll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1230 mpll->pll_in_min = in radeon_atom_get_clock_info()
1231 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1232 mpll->pll_in_max = in radeon_atom_get_clock_info()
1233 le16_to_cpu(firmware_info->info.usMaxMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1235 rdev->clock.default_sclk = in radeon_atom_get_clock_info()
1236 le32_to_cpu(firmware_info->info.ulDefaultEngineClock); in radeon_atom_get_clock_info()
1237 rdev->clock.default_mclk = in radeon_atom_get_clock_info()
1238 le32_to_cpu(firmware_info->info.ulDefaultMemoryClock); in radeon_atom_get_clock_info()
1241 rdev->clock.default_dispclk = in radeon_atom_get_clock_info()
1242 le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq); in radeon_atom_get_clock_info()
1243 if (rdev->clock.default_dispclk == 0) { in radeon_atom_get_clock_info()
1245 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1247 rdev->clock.default_dispclk = 54000; /* 540 Mhz */ in radeon_atom_get_clock_info()
1249 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1252 if (ASIC_IS_DCE6(rdev) && (rdev->clock.default_dispclk < 53900)) { in radeon_atom_get_clock_info()
1254 rdev->clock.default_dispclk / 100); in radeon_atom_get_clock_info()
1255 rdev->clock.default_dispclk = 60000; in radeon_atom_get_clock_info()
1257 rdev->clock.dp_extclk = in radeon_atom_get_clock_info()
1258 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); in radeon_atom_get_clock_info()
1259 rdev->clock.current_dispclk = rdev->clock.default_dispclk; in radeon_atom_get_clock_info()
1263 rdev->clock.max_pixel_clock = le16_to_cpu(firmware_info->info.usMaxPixelClock); in radeon_atom_get_clock_info()
1264 if (rdev->clock.max_pixel_clock == 0) in radeon_atom_get_clock_info()
1265 rdev->clock.max_pixel_clock = 40000; in radeon_atom_get_clock_info()
1268 rdev->mode_info.firmware_flags = in radeon_atom_get_clock_info()
1269 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); in radeon_atom_get_clock_info()
1272 rdev->clock.vco_freq = in radeon_atom_get_clock_info()
1273 le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); in radeon_atom_get_clock_info()
1275 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1279 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1281 if (rdev->clock.vco_freq == 0) in radeon_atom_get_clock_info()
1282 rdev->clock.vco_freq = 360000; /* 3.6 GHz */ in radeon_atom_get_clock_info()
1292 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_sideport_present()
1299 if (rdev->family == CHIP_RS600) in radeon_atombios_sideport_present()
1302 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_sideport_present()
1304 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_sideport_present()
1308 if (le32_to_cpu(igp_info->info.ulBootUpMemoryClock)) in radeon_atombios_sideport_present()
1312 if (le32_to_cpu(igp_info->info_2.ulBootUpSidePortClock)) in radeon_atombios_sideport_present()
1316 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_sideport_present()
1326 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tmds_info()
1327 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tmds_info()
1328 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tmds_info()
1336 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tmds_info()
1339 (struct _ATOM_TMDS_INFO *)(mode_info->atom_context->bios + in radeon_atombios_get_tmds_info()
1342 maxfreq = le16_to_cpu(tmds_info->usMaxFrequency); in radeon_atombios_get_tmds_info()
1344 tmds->tmds_pll[i].freq = in radeon_atombios_get_tmds_info()
1345 le16_to_cpu(tmds_info->asMiscInfo[i].usFrequency); in radeon_atombios_get_tmds_info()
1346 tmds->tmds_pll[i].value = in radeon_atombios_get_tmds_info()
1347 tmds_info->asMiscInfo[i].ucPLL_ChargePump & 0x3f; in radeon_atombios_get_tmds_info()
1348 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1349 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1351 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1352 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1354 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1355 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1359 tmds->tmds_pll[i].freq, in radeon_atombios_get_tmds_info()
1360 tmds->tmds_pll[i].value); in radeon_atombios_get_tmds_info()
1362 if (maxfreq == tmds->tmds_pll[i].freq) { in radeon_atombios_get_tmds_info()
1363 tmds->tmds_pll[i].freq = 0xffffffff; in radeon_atombios_get_tmds_info()
1376 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_ppll_ss_info()
1385 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_ppll_ss_info()
1388 (struct _ATOM_SPREAD_SPECTRUM_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_ppll_ss_info()
1390 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_ppll_ss_info()
1393 ((u8 *)&ss_info->asSS_Info[0]); in radeon_atombios_get_ppll_ss_info()
1395 if (ss_assign->ucSS_Id == id) { in radeon_atombios_get_ppll_ss_info()
1396 ss->percentage = in radeon_atombios_get_ppll_ss_info()
1397 le16_to_cpu(ss_assign->usSpreadSpectrumPercentage); in radeon_atombios_get_ppll_ss_info()
1398 ss->type = ss_assign->ucSpreadSpectrumType; in radeon_atombios_get_ppll_ss_info()
1399 ss->step = ss_assign->ucSS_Step; in radeon_atombios_get_ppll_ss_info()
1400 ss->delay = ss_assign->ucSS_Delay; in radeon_atombios_get_ppll_ss_info()
1401 ss->range = ss_assign->ucSS_Range; in radeon_atombios_get_ppll_ss_info()
1402 ss->refdiv = ss_assign->ucRecommendedRef_Div; in radeon_atombios_get_ppll_ss_info()
1416 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_igp_ss_overrides()
1424 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_igp_ss_overrides()
1427 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_igp_ss_overrides()
1432 percentage = le16_to_cpu(igp_info->info_6.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1433 rate = le16_to_cpu(igp_info->info_6.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1436 percentage = le16_to_cpu(igp_info->info_6.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1437 rate = le16_to_cpu(igp_info->info_6.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1440 percentage = le16_to_cpu(igp_info->info_6.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1441 rate = le16_to_cpu(igp_info->info_6.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1448 percentage = le16_to_cpu(igp_info->info_7.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1449 rate = le16_to_cpu(igp_info->info_7.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1452 percentage = le16_to_cpu(igp_info->info_7.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1453 rate = le16_to_cpu(igp_info->info_7.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1456 percentage = le16_to_cpu(igp_info->info_7.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1457 rate = le16_to_cpu(igp_info->info_7.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1464 percentage = le16_to_cpu(igp_info->info_8.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1465 rate = le16_to_cpu(igp_info->info_8.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1468 percentage = le16_to_cpu(igp_info->info_8.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1469 rate = le16_to_cpu(igp_info->info_8.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1472 percentage = le16_to_cpu(igp_info->info_8.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1473 rate = le16_to_cpu(igp_info->info_8.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1478 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_get_igp_ss_overrides()
1482 ss->percentage = percentage; in radeon_atombios_get_igp_ss_overrides()
1484 ss->rate = rate; in radeon_atombios_get_igp_ss_overrides()
1504 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_asic_ss_info()
1513 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1517 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1522 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_asic_ss_info()
1526 (union asic_ss_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_asic_ss_info()
1530 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1533 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1535 if ((ss_assign->v1.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1536 (clock <= le32_to_cpu(ss_assign->v1.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1537 ss->percentage = in radeon_atombios_get_asic_ss_info()
1538 le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1539 ss->type = ss_assign->v1.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1540 ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); in radeon_atombios_get_asic_ss_info()
1541 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1549 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1551 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_2.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1553 if ((ss_assign->v2.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1554 (clock <= le32_to_cpu(ss_assign->v2.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1555 ss->percentage = in radeon_atombios_get_asic_ss_info()
1556 le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1557 ss->type = ss_assign->v2.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1558 ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1559 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1563 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1571 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1573 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_3.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1575 if ((ss_assign->v3.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1576 (clock <= le32_to_cpu(ss_assign->v3.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1577 ss->percentage = in radeon_atombios_get_asic_ss_info()
1578 le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1579 ss->type = ss_assign->v3.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1580 ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1581 if (ss_assign->v3.ucSpreadSpectrumMode & in radeon_atombios_get_asic_ss_info()
1583 ss->percentage_divider = 1000; in radeon_atombios_get_asic_ss_info()
1585 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1588 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1589 if (rdev->flags & RADEON_IS_IGP) in radeon_atombios_get_asic_ss_info()
1598 DRM_ERROR("Unsupported ASIC_InternalSS_Info table: %d %d\n", frev, crev); in radeon_atombios_get_asic_ss_info()
1615 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_lvds_info()
1616 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_lvds_info()
1617 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_lvds_info()
1623 int encoder_enum = (encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in radeon_atombios_get_lvds_info()
1625 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_lvds_info()
1628 (union lvds_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_lvds_info()
1635 lvds->native_mode.clock = in radeon_atombios_get_lvds_info()
1636 le16_to_cpu(lvds_info->info.sLCDTiming.usPixClk) * 10; in radeon_atombios_get_lvds_info()
1637 lvds->native_mode.hdisplay = in radeon_atombios_get_lvds_info()
1638 le16_to_cpu(lvds_info->info.sLCDTiming.usHActive); in radeon_atombios_get_lvds_info()
1639 lvds->native_mode.vdisplay = in radeon_atombios_get_lvds_info()
1640 le16_to_cpu(lvds_info->info.sLCDTiming.usVActive); in radeon_atombios_get_lvds_info()
1641 lvds->native_mode.htotal = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1642 le16_to_cpu(lvds_info->info.sLCDTiming.usHBlanking_Time); in radeon_atombios_get_lvds_info()
1643 lvds->native_mode.hsync_start = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1644 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncOffset); in radeon_atombios_get_lvds_info()
1645 lvds->native_mode.hsync_end = lvds->native_mode.hsync_start + in radeon_atombios_get_lvds_info()
1646 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncWidth); in radeon_atombios_get_lvds_info()
1647 lvds->native_mode.vtotal = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1648 le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time); in radeon_atombios_get_lvds_info()
1649 lvds->native_mode.vsync_start = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1650 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset); in radeon_atombios_get_lvds_info()
1651 lvds->native_mode.vsync_end = lvds->native_mode.vsync_start + in radeon_atombios_get_lvds_info()
1652 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); in radeon_atombios_get_lvds_info()
1653 lvds->panel_pwr_delay = in radeon_atombios_get_lvds_info()
1654 le16_to_cpu(lvds_info->info.usOffDelayInMs); in radeon_atombios_get_lvds_info()
1655 lvds->lcd_misc = lvds_info->info.ucLVDS_Misc; in radeon_atombios_get_lvds_info()
1657 misc = le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess); in radeon_atombios_get_lvds_info()
1659 lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atombios_get_lvds_info()
1661 lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atombios_get_lvds_info()
1663 lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC; in radeon_atombios_get_lvds_info()
1665 lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atombios_get_lvds_info()
1667 lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atombios_get_lvds_info()
1669 lvds->native_mode.width_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageHSize); in radeon_atombios_get_lvds_info()
1670 lvds->native_mode.height_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageVSize); in radeon_atombios_get_lvds_info()
1673 drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); in radeon_atombios_get_lvds_info()
1675 lvds->lcd_ss_id = lvds_info->info.ucSS_Id; in radeon_atombios_get_lvds_info()
1677 encoder->native_mode = lvds->native_mode; in radeon_atombios_get_lvds_info()
1680 lvds->linkb = true; in radeon_atombios_get_lvds_info()
1682 lvds->linkb = false; in radeon_atombios_get_lvds_info()
1685 if (le16_to_cpu(lvds_info->info.usModePatchTableOffset)) { in radeon_atombios_get_lvds_info()
1693 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1694 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1697 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1699 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1713 if (fake_edid_record->ucFakeEDIDLength) { in radeon_atombios_get_lvds_info()
1716 max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1719 memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], in radeon_atombios_get_lvds_info()
1720 fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1723 rdev->mode_info.bios_hardcoded_edid = edid; in radeon_atombios_get_lvds_info()
1724 rdev->mode_info.bios_hardcoded_edid_size = edid_size; in radeon_atombios_get_lvds_info()
1729 record += fake_edid_record->ucFakeEDIDLength ? in radeon_atombios_get_lvds_info()
1730 fake_edid_record->ucFakeEDIDLength + 2 : in radeon_atombios_get_lvds_info()
1735 lvds->native_mode.width_mm = panel_res_record->usHSize; in radeon_atombios_get_lvds_info()
1736 lvds->native_mode.height_mm = panel_res_record->usVSize; in radeon_atombios_get_lvds_info()
1740 DRM_ERROR("Bad LCD record %d\n", *record); in radeon_atombios_get_lvds_info()
1755 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_primary_dac_info()
1756 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_primary_dac_info()
1757 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_primary_dac_info()
1765 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_primary_dac_info()
1768 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_primary_dac_info()
1775 bg = dac_info->ucDAC1_BG_Adjustment; in radeon_atombios_get_primary_dac_info()
1776 dac = dac_info->ucDAC1_DAC_Adjustment; in radeon_atombios_get_primary_dac_info()
1777 p_dac->ps2_pdac_adj = (bg << 8) | (dac); in radeon_atombios_get_primary_dac_info()
1786 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_tv_timings()
1794 if (!atom_parse_data_header(mode_info->atom_context, data_index, NULL, in radeon_atom_get_tv_timings()
1800 tv_info = (ATOM_ANALOG_TV_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1804 mode->crtc_htotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total); in radeon_atom_get_tv_timings()
1805 mode->crtc_hdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp); in radeon_atom_get_tv_timings()
1806 mode->crtc_hsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart); in radeon_atom_get_tv_timings()
1807 mode->crtc_hsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart) + in radeon_atom_get_tv_timings()
1808 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth); in radeon_atom_get_tv_timings()
1810 mode->crtc_vtotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total); in radeon_atom_get_tv_timings()
1811 mode->crtc_vdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp); in radeon_atom_get_tv_timings()
1812 mode->crtc_vsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart); in radeon_atom_get_tv_timings()
1813 mode->crtc_vsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart) + in radeon_atom_get_tv_timings()
1814 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth); in radeon_atom_get_tv_timings()
1816 mode->flags = 0; in radeon_atom_get_tv_timings()
1817 misc = le16_to_cpu(tv_info->aModeTimings[index].susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1819 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1821 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1823 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1825 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1827 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1829 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1830 le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10; in radeon_atom_get_tv_timings()
1834 mode->crtc_htotal -= 1; in radeon_atom_get_tv_timings()
1835 mode->crtc_vtotal -= 1; in radeon_atom_get_tv_timings()
1839 tv_info_v1_2 = (ATOM_ANALOG_TV_INFO_V1_2 *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1843 dtd_timings = &tv_info_v1_2->aModeTimings[index]; in radeon_atom_get_tv_timings()
1844 mode->crtc_htotal = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1845 le16_to_cpu(dtd_timings->usHBlanking_Time); in radeon_atom_get_tv_timings()
1846 mode->crtc_hdisplay = le16_to_cpu(dtd_timings->usHActive); in radeon_atom_get_tv_timings()
1847 mode->crtc_hsync_start = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1848 le16_to_cpu(dtd_timings->usHSyncOffset); in radeon_atom_get_tv_timings()
1849 mode->crtc_hsync_end = mode->crtc_hsync_start + in radeon_atom_get_tv_timings()
1850 le16_to_cpu(dtd_timings->usHSyncWidth); in radeon_atom_get_tv_timings()
1852 mode->crtc_vtotal = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1853 le16_to_cpu(dtd_timings->usVBlanking_Time); in radeon_atom_get_tv_timings()
1854 mode->crtc_vdisplay = le16_to_cpu(dtd_timings->usVActive); in radeon_atom_get_tv_timings()
1855 mode->crtc_vsync_start = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1856 le16_to_cpu(dtd_timings->usVSyncOffset); in radeon_atom_get_tv_timings()
1857 mode->crtc_vsync_end = mode->crtc_vsync_start + in radeon_atom_get_tv_timings()
1858 le16_to_cpu(dtd_timings->usVSyncWidth); in radeon_atom_get_tv_timings()
1860 mode->flags = 0; in radeon_atom_get_tv_timings()
1861 misc = le16_to_cpu(dtd_timings->susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1863 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1865 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1867 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1869 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1871 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1873 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1874 le16_to_cpu(dtd_timings->usPixClk) * 10; in radeon_atom_get_tv_timings()
1883 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_info()
1890 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_info()
1894 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_info()
1896 switch (tv_info->ucTV_BootUpDefaultStandard) { in radeon_atombios_get_tv_info()
1903 DRM_DEBUG_KMS("Default TV standard: NTSC-J\n"); in radeon_atombios_get_tv_info()
1911 DRM_DEBUG_KMS("Default TV standard: PAL-M\n"); in radeon_atombios_get_tv_info()
1915 DRM_DEBUG_KMS("Default TV standard: PAL-N\n"); in radeon_atombios_get_tv_info()
1919 DRM_DEBUG_KMS("Default TV standard: PAL-CN\n"); in radeon_atombios_get_tv_info()
1923 DRM_DEBUG_KMS("Default TV standard: PAL-60\n"); in radeon_atombios_get_tv_info()
1941 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tv_dac_info()
1942 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tv_dac_info()
1943 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_dac_info()
1951 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_dac_info()
1955 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_dac_info()
1962 bg = dac_info->ucDAC2_CRT2_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1963 dac = dac_info->ucDAC2_CRT2_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1964 tv_dac->ps2_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1966 bg = dac_info->ucDAC2_PAL_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1967 dac = dac_info->ucDAC2_PAL_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1968 tv_dac->pal_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1970 bg = dac_info->ucDAC2_NTSC_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1971 dac = dac_info->ucDAC2_NTSC_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1972 tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1974 tv_dac->tv_std = radeon_atombios_get_tv_info(rdev); in radeon_atombios_get_tv_dac_info()
2000 "adt7473",
2039 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_misc_flags_1_3()
2040 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_misc_flags_1_3()
2043 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2046 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2049 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2052 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2055 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2057 rdev->pm.power_state[state_index].flags &= in radeon_atombios_parse_misc_flags_1_3()
2061 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2064 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2066 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_misc_flags_1_3()
2067 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_misc_flags_1_3()
2068 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_parse_misc_flags_1_3()
2070 rdev->pm.power_state[state_index].clock_info[0].flags |= in radeon_atombios_parse_misc_flags_1_3()
2077 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_1_3()
2087 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_1_3()
2090 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_1_3()
2093 if ((power_info->info.ucOverdriveThermalController > 0) && in radeon_atombios_parse_power_table_1_3()
2094 (power_info->info.ucOverdriveThermalController < ARRAY_SIZE(thermal_controller_names))) { in radeon_atombios_parse_power_table_1_3()
2096 thermal_controller_names[power_info->info.ucOverdriveThermalController], in radeon_atombios_parse_power_table_1_3()
2097 power_info->info.ucOverdriveControllerAddress >> 1); in radeon_atombios_parse_power_table_1_3()
2098 i2c_bus = radeon_lookup_i2c_gpio(rdev, power_info->info.ucOverdriveI2cLine); in radeon_atombios_parse_power_table_1_3()
2099 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_parse_power_table_1_3()
2100 if (rdev->pm.i2c_bus) { in radeon_atombios_parse_power_table_1_3()
2102 const char *name = thermal_controller_names[power_info->info. in radeon_atombios_parse_power_table_1_3()
2104 info.addr = power_info->info.ucOverdriveControllerAddress >> 1; in radeon_atombios_parse_power_table_1_3()
2106 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_parse_power_table_1_3()
2109 num_modes = power_info->info.ucNumOfPowerModeEntries; in radeon_atombios_parse_power_table_1_3()
2114 rdev->pm.power_state = kcalloc(num_modes, in radeon_atombios_parse_power_table_1_3()
2117 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_1_3()
2122 if (!rdev->pm.power_state[state_index].clock_info) { in radeon_atombios_parse_power_table_1_3()
2123 rdev->pm.power_state[state_index].clock_info = in radeon_atombios_parse_power_table_1_3()
2127 if (!rdev->pm.power_state[state_index].clock_info) in radeon_atombios_parse_power_table_1_3()
2129 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_parse_power_table_1_3()
2130 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_parse_power_table_1_3()
2133 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2134 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usMemoryClock); in radeon_atombios_parse_power_table_1_3()
2135 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2136 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usEngineClock); in radeon_atombios_parse_power_table_1_3()
2138 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2139 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2141 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2142 power_info->info.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2143 misc = le32_to_cpu(power_info->info.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2146 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2148 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2150 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2152 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2155 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2158 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2160 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2161 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2163 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2168 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2169 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2170 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2171 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2173 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2174 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2176 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2177 power_info->info_2.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2178 misc = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2179 misc2 = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2182 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2184 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2186 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2188 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2191 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2194 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2196 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2197 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2199 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2204 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2205 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2206 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2207 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2209 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2210 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2212 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2213 power_info->info_3.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2214 misc = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2215 misc2 = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2218 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2220 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2222 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2224 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2227 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2230 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2232 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2233 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2235 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_enabled = in radeon_atombios_parse_power_table_1_3()
2237 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_id = in radeon_atombios_parse_power_table_1_3()
2238 power_info->info_3.asPowerPlayInfo[i].ucVDDCI_VoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2241 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2250 kfree(rdev->pm.power_state[state_index].clock_info); in radeon_atombios_parse_power_table_1_3()
2251 rdev->pm.power_state[state_index].clock_info = NULL; in radeon_atombios_parse_power_table_1_3()
2255 if (state_index && rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_1_3()
2256 rdev->pm.power_state[state_index - 1].type = in radeon_atombios_parse_power_table_1_3()
2258 rdev->pm.default_power_state_index = state_index - 1; in radeon_atombios_parse_power_table_1_3()
2259 rdev->pm.power_state[state_index - 1].default_clock_mode = in radeon_atombios_parse_power_table_1_3()
2260 &rdev->pm.power_state[state_index - 1].clock_info[0]; in radeon_atombios_parse_power_table_1_3()
2261 rdev->pm.power_state[state_index - 1].flags &= in radeon_atombios_parse_power_table_1_3()
2263 rdev->pm.power_state[state_index - 1].misc = 0; in radeon_atombios_parse_power_table_1_3()
2264 rdev->pm.power_state[state_index - 1].misc2 = 0; in radeon_atombios_parse_power_table_1_3()
2275 if (controller->ucType > 0) { in radeon_atombios_add_pplib_thermal_controller()
2276 if (controller->ucFanParameters & ATOM_PP_FANPARAMETERS_NOFAN) in radeon_atombios_add_pplib_thermal_controller()
2277 rdev->pm.no_fan = true; in radeon_atombios_add_pplib_thermal_controller()
2278 rdev->pm.fan_pulses_per_revolution = in radeon_atombios_add_pplib_thermal_controller()
2279 controller->ucFanParameters & ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK; in radeon_atombios_add_pplib_thermal_controller()
2280 if (rdev->pm.fan_pulses_per_revolution) { in radeon_atombios_add_pplib_thermal_controller()
2281 rdev->pm.fan_min_rpm = controller->ucFanMinRPM; in radeon_atombios_add_pplib_thermal_controller()
2282 rdev->pm.fan_max_rpm = controller->ucFanMaxRPM; in radeon_atombios_add_pplib_thermal_controller()
2284 if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV6xx) { in radeon_atombios_add_pplib_thermal_controller()
2286 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2288 rdev->pm.int_thermal_type = THERMAL_TYPE_RV6XX; in radeon_atombios_add_pplib_thermal_controller()
2289 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV770) { in radeon_atombios_add_pplib_thermal_controller()
2291 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2293 rdev->pm.int_thermal_type = THERMAL_TYPE_RV770; in radeon_atombios_add_pplib_thermal_controller()
2294 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_EVERGREEN) { in radeon_atombios_add_pplib_thermal_controller()
2296 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2298 rdev->pm.int_thermal_type = THERMAL_TYPE_EVERGREEN; in radeon_atombios_add_pplib_thermal_controller()
2299 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SUMO) { in radeon_atombios_add_pplib_thermal_controller()
2301 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2303 rdev->pm.int_thermal_type = THERMAL_TYPE_SUMO; in radeon_atombios_add_pplib_thermal_controller()
2304 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_NISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2306 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2308 rdev->pm.int_thermal_type = THERMAL_TYPE_NI; in radeon_atombios_add_pplib_thermal_controller()
2309 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2311 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2313 rdev->pm.int_thermal_type = THERMAL_TYPE_SI; in radeon_atombios_add_pplib_thermal_controller()
2314 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_CISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2316 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2318 rdev->pm.int_thermal_type = THERMAL_TYPE_CI; in radeon_atombios_add_pplib_thermal_controller()
2319 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_KAVERI) { in radeon_atombios_add_pplib_thermal_controller()
2321 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2323 rdev->pm.int_thermal_type = THERMAL_TYPE_KV; in radeon_atombios_add_pplib_thermal_controller()
2324 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2327 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2329 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL_GPIO; in radeon_atombios_add_pplib_thermal_controller()
2330 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2332 DRM_INFO("ADT7473 with internal thermal controller %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2333 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2335 rdev->pm.int_thermal_type = THERMAL_TYPE_ADT7473_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2336 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2339 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2341 rdev->pm.int_thermal_type = THERMAL_TYPE_EMC2103_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2342 } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { in radeon_atombios_add_pplib_thermal_controller()
2344 pp_lib_thermal_controller_names[controller->ucType], in radeon_atombios_add_pplib_thermal_controller()
2345 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2346 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2348 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2349 i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine); in radeon_atombios_add_pplib_thermal_controller()
2350 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_add_pplib_thermal_controller()
2351 if (rdev->pm.i2c_bus) { in radeon_atombios_add_pplib_thermal_controller()
2353 const char *name = pp_lib_thermal_controller_names[controller->ucType]; in radeon_atombios_add_pplib_thermal_controller()
2354 info.addr = controller->ucI2cAddress >> 1; in radeon_atombios_add_pplib_thermal_controller()
2356 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_add_pplib_thermal_controller()
2359 DRM_INFO("Unknown thermal controller type %d at 0x%02x %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2360 controller->ucType, in radeon_atombios_add_pplib_thermal_controller()
2361 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2362 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2371 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_default_voltages()
2381 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_default_voltages()
2384 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atombios_get_default_voltages()
2386 *vddc = le16_to_cpu(firmware_info->info_14.usBootUpVDDCVoltage); in radeon_atombios_get_default_voltages()
2388 *vddci = le16_to_cpu(firmware_info->info_22.usBootUpVDDCIVoltage); in radeon_atombios_get_default_voltages()
2389 *mvdd = le16_to_cpu(firmware_info->info_22.usBootUpMVDDCVoltage); in radeon_atombios_get_default_voltages()
2399 u32 misc = le32_to_cpu(non_clock_info->ulCapsAndSettings); in radeon_atombios_parse_pplib_non_clock_info()
2400 u32 misc2 = le16_to_cpu(non_clock_info->usClassification); in radeon_atombios_parse_pplib_non_clock_info()
2405 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_pplib_non_clock_info()
2406 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_pplib_non_clock_info()
2407 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_pplib_non_clock_info()
2412 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2416 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2420 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2425 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2429 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_parse_pplib_non_clock_info()
2431 rdev->pm.power_state[state_index].flags |= in radeon_atombios_parse_pplib_non_clock_info()
2434 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2436 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_pplib_non_clock_info()
2437 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_pplib_non_clock_info()
2438 &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; in radeon_atombios_parse_pplib_non_clock_info()
2439 if ((rdev->family >= CHIP_BARTS) && !(rdev->flags & RADEON_IS_IGP)) { in radeon_atombios_parse_pplib_non_clock_info()
2441 rdev->pm.default_sclk = rdev->pm.power_state[state_index].clock_info[0].sclk; in radeon_atombios_parse_pplib_non_clock_info()
2442 rdev->pm.default_mclk = rdev->pm.power_state[state_index].clock_info[0].mclk; in radeon_atombios_parse_pplib_non_clock_info()
2443 rdev->pm.default_vddc = rdev->pm.power_state[state_index].clock_info[0].voltage.voltage; in radeon_atombios_parse_pplib_non_clock_info()
2444 rdev->pm.default_vddci = rdev->pm.power_state[state_index].clock_info[0].voltage.vddci; in radeon_atombios_parse_pplib_non_clock_info()
2454 rdev->pm.power_state[state_index].clock_info[j].mclk = in radeon_atombios_parse_pplib_non_clock_info()
2455 rdev->clock.default_mclk; in radeon_atombios_parse_pplib_non_clock_info()
2456 rdev->pm.power_state[state_index].clock_info[j].sclk = in radeon_atombios_parse_pplib_non_clock_info()
2457 rdev->clock.default_sclk; in radeon_atombios_parse_pplib_non_clock_info()
2459 rdev->pm.power_state[state_index].clock_info[j].voltage.voltage = in radeon_atombios_parse_pplib_non_clock_info()
2462 rdev->pm.power_state[state_index].clock_info[j].voltage.vddci = in radeon_atombios_parse_pplib_non_clock_info()
2476 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2477 if (rdev->family >= CHIP_PALM) { in radeon_atombios_parse_pplib_clock_info()
2478 sclk = le16_to_cpu(clock_info->sumo.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2479 sclk |= clock_info->sumo.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2480 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2482 sclk = le16_to_cpu(clock_info->rs780.usLowEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2483 sclk |= clock_info->rs780.ucLowEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2484 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2486 } else if (rdev->family >= CHIP_BONAIRE) { in radeon_atombios_parse_pplib_clock_info()
2487 sclk = le16_to_cpu(clock_info->ci.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2488 sclk |= clock_info->ci.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2489 mclk = le16_to_cpu(clock_info->ci.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2490 mclk |= clock_info->ci.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2491 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2492 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2493 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2495 } else if (rdev->family >= CHIP_TAHITI) { in radeon_atombios_parse_pplib_clock_info()
2496 sclk = le16_to_cpu(clock_info->si.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2497 sclk |= clock_info->si.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2498 mclk = le16_to_cpu(clock_info->si.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2499 mclk |= clock_info->si.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2500 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2501 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2502 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2504 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2505 le16_to_cpu(clock_info->si.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2506 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2507 le16_to_cpu(clock_info->si.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2508 } else if (rdev->family >= CHIP_CEDAR) { in radeon_atombios_parse_pplib_clock_info()
2509 sclk = le16_to_cpu(clock_info->evergreen.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2510 sclk |= clock_info->evergreen.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2511 mclk = le16_to_cpu(clock_info->evergreen.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2512 mclk |= clock_info->evergreen.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2513 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2514 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2515 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2517 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2518 le16_to_cpu(clock_info->evergreen.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2519 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2520 le16_to_cpu(clock_info->evergreen.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2522 sclk = le16_to_cpu(clock_info->r600.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2523 sclk |= clock_info->r600.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2524 mclk = le16_to_cpu(clock_info->r600.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2525 mclk |= clock_info->r600.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2526 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2527 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2528 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2530 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2531 le16_to_cpu(clock_info->r600.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2535 switch (rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage) { in radeon_atombios_parse_pplib_clock_info()
2545 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 = vddc; in radeon_atombios_parse_pplib_clock_info()
2553 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2555 if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0) in radeon_atombios_parse_pplib_clock_info()
2559 if ((rdev->pm.power_state[state_index].clock_info[mode_index].mclk == 0) || in radeon_atombios_parse_pplib_clock_info()
2560 (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0)) in radeon_atombios_parse_pplib_clock_info()
2568 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_4_5()
2580 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_4_5()
2583 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_4_5()
2585 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_4_5()
2586 if (power_info->pplib.ucNumStates == 0) in radeon_atombios_parse_power_table_4_5()
2588 rdev->pm.power_state = kcalloc(power_info->pplib.ucNumStates, in radeon_atombios_parse_power_table_4_5()
2591 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_4_5()
2594 for (i = 0; i < power_info->pplib.ucNumStates; i++) { in radeon_atombios_parse_power_table_4_5()
2597 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2598 le16_to_cpu(power_info->pplib.usStateArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2599 i * power_info->pplib.ucStateEntrySize); in radeon_atombios_parse_power_table_4_5()
2601 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2602 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2603 (power_state->v1.ucNonClockStateIndex * in radeon_atombios_parse_power_table_4_5()
2604 power_info->pplib.ucNonClockSize)); in radeon_atombios_parse_power_table_4_5()
2605 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_4_5()
2606 kcalloc((power_info->pplib.ucStateEntrySize - 1) ? in radeon_atombios_parse_power_table_4_5()
2607 (power_info->pplib.ucStateEntrySize - 1) : 1, in radeon_atombios_parse_power_table_4_5()
2610 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_4_5()
2612 if (power_info->pplib.ucStateEntrySize - 1) { in radeon_atombios_parse_power_table_4_5()
2613 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) { in radeon_atombios_parse_power_table_4_5()
2615 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2616 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2617 (power_state->v1.ucClockStateIndices[j] * in radeon_atombios_parse_power_table_4_5()
2618 power_info->pplib.ucClockInfoSize)); in radeon_atombios_parse_power_table_4_5()
2626 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_4_5()
2627 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_4_5()
2628 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_4_5()
2629 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_4_5()
2632 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_4_5()
2641 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_4_5()
2642 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_4_5()
2646 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_4_5()
2647 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_4_5()
2649 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_4_5()
2650 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_4_5()
2651 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_4_5()
2658 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_6()
2674 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_6()
2677 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_6()
2679 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_6()
2681 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2682 le16_to_cpu(power_info->pplib.usStateArrayOffset)); in radeon_atombios_parse_power_table_6()
2684 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2685 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2687 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2688 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2689 if (state_array->ucNumEntries == 0) in radeon_atombios_parse_power_table_6()
2691 rdev->pm.power_state = kcalloc(state_array->ucNumEntries, in radeon_atombios_parse_power_table_6()
2694 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_6()
2696 power_state_offset = (u8 *)state_array->states; in radeon_atombios_parse_power_table_6()
2697 for (i = 0; i < state_array->ucNumEntries; i++) { in radeon_atombios_parse_power_table_6()
2700 non_clock_array_index = power_state->v2.nonClockInfoIndex; in radeon_atombios_parse_power_table_6()
2702 &non_clock_info_array->nonClockInfo[non_clock_array_index]; in radeon_atombios_parse_power_table_6()
2703 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_6()
2704 kcalloc(power_state->v2.ucNumDPMLevels ? in radeon_atombios_parse_power_table_6()
2705 power_state->v2.ucNumDPMLevels : 1, in radeon_atombios_parse_power_table_6()
2708 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_6()
2710 if (power_state->v2.ucNumDPMLevels) { in radeon_atombios_parse_power_table_6()
2711 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { in radeon_atombios_parse_power_table_6()
2712 clock_array_index = power_state->v2.clockInfoIndex[j]; in radeon_atombios_parse_power_table_6()
2714 &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; in radeon_atombios_parse_power_table_6()
2722 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_6()
2723 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_6()
2724 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_6()
2725 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_6()
2728 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_6()
2734 power_state_offset += 2 + power_state->v2.ucNumDPMLevels; in radeon_atombios_parse_power_table_6()
2738 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_6()
2739 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_6()
2743 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_6()
2744 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_6()
2746 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_6()
2747 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_6()
2748 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_6()
2755 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_power_modes()
2761 rdev->pm.default_power_state_index = -1; in radeon_atombios_get_power_modes()
2763 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_power_modes()
2784 rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL); in radeon_atombios_get_power_modes()
2785 if (rdev->pm.power_state) { in radeon_atombios_get_power_modes()
2786 rdev->pm.power_state[0].clock_info = in radeon_atombios_get_power_modes()
2790 if (rdev->pm.power_state[0].clock_info) { in radeon_atombios_get_power_modes()
2792 rdev->pm.power_state[state_index].type = in radeon_atombios_get_power_modes()
2794 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_get_power_modes()
2795 rdev->pm.power_state[state_index].clock_info[0].mclk = rdev->clock.default_mclk; in radeon_atombios_get_power_modes()
2796 rdev->pm.power_state[state_index].clock_info[0].sclk = rdev->clock.default_sclk; in radeon_atombios_get_power_modes()
2797 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_get_power_modes()
2798 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_get_power_modes()
2799 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_get_power_modes()
2800 rdev->pm.power_state[state_index].pcie_lanes = 16; in radeon_atombios_get_power_modes()
2801 rdev->pm.default_power_state_index = state_index; in radeon_atombios_get_power_modes()
2802 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_get_power_modes()
2808 rdev->pm.num_power_states = state_index; in radeon_atombios_get_power_modes()
2810 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; in radeon_atombios_get_power_modes()
2811 rdev->pm.current_clock_mode_index = 0; in radeon_atombios_get_power_modes()
2812 if (rdev->pm.default_power_state_index >= 0) in radeon_atombios_get_power_modes()
2813 rdev->pm.current_vddc = in radeon_atombios_get_power_modes()
2814 rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage; in radeon_atombios_get_power_modes()
2816 rdev->pm.current_vddc = 0; in radeon_atombios_get_power_modes()
2842 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_clock_dividers()
2843 return -EINVAL; in radeon_atom_get_clock_dividers()
2851 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2853 dividers->post_div = args.v1.ucPostDiv; in radeon_atom_get_clock_dividers()
2854 dividers->fb_div = args.v1.ucFbDiv; in radeon_atom_get_clock_dividers()
2855 dividers->enable_post_div = true; in radeon_atom_get_clock_dividers()
2861 if (rdev->family <= CHIP_RV770) { in radeon_atom_get_clock_dividers()
2865 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2867 dividers->post_div = args.v2.ucPostDiv; in radeon_atom_get_clock_dividers()
2868 dividers->fb_div = le16_to_cpu(args.v2.usFbDiv); in radeon_atom_get_clock_dividers()
2869 dividers->ref_div = args.v2.ucAction; in radeon_atom_get_clock_dividers()
2870 if (rdev->family == CHIP_RV770) { in radeon_atom_get_clock_dividers()
2871 dividers->enable_post_div = (le32_to_cpu(args.v2.ulClock) & (1 << 24)) ? in radeon_atom_get_clock_dividers()
2873 dividers->vco_mode = (le32_to_cpu(args.v2.ulClock) & (1 << 25)) ? 1 : 0; in radeon_atom_get_clock_dividers()
2875 dividers->enable_post_div = (dividers->fb_div & 1) ? true : false; in radeon_atom_get_clock_dividers()
2880 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2882 dividers->post_div = args.v3.ucPostDiv; in radeon_atom_get_clock_dividers()
2883 dividers->enable_post_div = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2885 dividers->enable_dithen = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2887 dividers->whole_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2888 dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2889 dividers->ref_div = args.v3.ucRefDiv; in radeon_atom_get_clock_dividers()
2890 dividers->vco_mode = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2894 if (rdev->family >= CHIP_TAHITI) in radeon_atom_get_clock_dividers()
2895 return -EINVAL; in radeon_atom_get_clock_dividers()
2900 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2902 dividers->post_div = args.v5.ucPostDiv; in radeon_atom_get_clock_dividers()
2903 dividers->enable_post_div = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2905 dividers->enable_dithen = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2907 dividers->whole_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2908 dividers->frac_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2909 dividers->ref_div = args.v5.ucRefDiv; in radeon_atom_get_clock_dividers()
2910 dividers->vco_mode = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2919 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2921 dividers->post_divider = dividers->post_div = args.v4.ucPostDiv; in radeon_atom_get_clock_dividers()
2922 dividers->real_clock = le32_to_cpu(args.v4.ulClock); in radeon_atom_get_clock_dividers()
2930 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2932 dividers->whole_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2933 dividers->frac_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2934 dividers->ref_div = args.v6_out.ucPllRefDiv; in radeon_atom_get_clock_dividers()
2935 dividers->post_div = args.v6_out.ucPllPostDiv; in radeon_atom_get_clock_dividers()
2936 dividers->flags = args.v6_out.ucPllCntlFlag; in radeon_atom_get_clock_dividers()
2937 dividers->real_clock = le32_to_cpu(args.v6_out.ulClock.ulClock); in radeon_atom_get_clock_dividers()
2938 dividers->post_divider = args.v6_out.ulClock.ucPostDiv; in radeon_atom_get_clock_dividers()
2941 return -EINVAL; in radeon_atom_get_clock_dividers()
2958 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_memory_pll_dividers()
2959 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2971 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_pll_dividers()
2973 mpll_param->clkfrac = le16_to_cpu(args.ulFbDiv.usFbDivFrac); in radeon_atom_get_memory_pll_dividers()
2974 mpll_param->clkf = le16_to_cpu(args.ulFbDiv.usFbDiv); in radeon_atom_get_memory_pll_dividers()
2975 mpll_param->post_div = args.ucPostDiv; in radeon_atom_get_memory_pll_dividers()
2976 mpll_param->dll_speed = args.ucDllSpeed; in radeon_atom_get_memory_pll_dividers()
2977 mpll_param->bwcntl = args.ucBWCntl; in radeon_atom_get_memory_pll_dividers()
2978 mpll_param->vco_mode = in radeon_atom_get_memory_pll_dividers()
2980 mpll_param->yclk_sel = in radeon_atom_get_memory_pll_dividers()
2982 mpll_param->qdr = in radeon_atom_get_memory_pll_dividers()
2984 mpll_param->half_rate = in radeon_atom_get_memory_pll_dividers()
2988 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2992 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
3004 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_clock_gating()
3012 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_engine_clock()
3021 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_clock()
3033 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_clock()
3042 if (rdev->flags & RADEON_IS_IGP) in radeon_atom_set_memory_clock()
3047 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_memory_clock()
3066 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_dram_timings()
3077 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_update_memory_dll()
3089 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_ac_timing()
3105 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_set_voltage()
3129 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_set_voltage()
3133 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_voltage()
3143 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_max_vddc()
3144 return -EINVAL; in radeon_atom_get_max_vddc()
3148 return -EINVAL; in radeon_atom_get_max_vddc()
3154 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3163 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3168 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_max_vddc()
3169 return -EINVAL; in radeon_atom_get_max_vddc()
3189 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_leakage_id_from_vbios()
3190 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3199 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_leakage_id_from_vbios()
3204 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_id_from_vbios()
3205 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3226 if (!atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3228 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3231 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3235 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3240 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3242 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3243 le16_to_cpu(profile->usLeakageBinArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3245 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3246 le16_to_cpu(profile->usElbVDDC_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3248 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3249 le16_to_cpu(profile->usElbVDDC_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3251 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3252 le16_to_cpu(profile->usElbVDDCI_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3254 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3255 le16_to_cpu(profile->usElbVDDCI_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3257 if (profile->ucElbVDDC_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3258 for (i = 0; i < profile->ucElbVDDC_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3260 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3262 *vddc = vddc_buf[j * profile->ucElbVDDC_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3270 if (profile->ucElbVDDCI_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3271 for (i = 0; i < profile->ucElbVDDCI_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3273 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3275 *vddci = vddci_buf[j * profile->ucElbVDDCI_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3285 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3286 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3290 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3291 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3308 u32 count = rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count; in radeon_atom_get_voltage_evv()
3312 if (rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v == in radeon_atom_get_voltage_evv()
3318 return -EINVAL; in radeon_atom_get_voltage_evv()
3324 cpu_to_le32(rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk); in radeon_atom_get_voltage_evv()
3326 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_evv()
3341 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_voltage_gpio_settings()
3342 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3346 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3352 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3360 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3365 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_gpio_settings()
3366 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3387 u32 size = le16_to_cpu(v1->sHeader.usStructureSize); in atom_lookup_voltage_object_v1()
3393 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v1()
3396 vo->asFormula.ucNumOfVoltageEntries; in atom_lookup_voltage_object_v1()
3404 u32 size = le16_to_cpu(v2->sHeader.usStructureSize); in atom_lookup_voltage_object_v2()
3410 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v2()
3413 (vo->asFormula.ucNumOfVoltageEntries * sizeof(VOLTAGE_LUT_ENTRY)); in atom_lookup_voltage_object_v2()
3421 u32 size = le16_to_cpu(v3->sHeader.usStructureSize); in atom_lookup_voltage_object_v3()
3427 if ((vo->asGpioVoltageObj.sHeader.ucVoltageType == voltage_type) && in atom_lookup_voltage_object_v3()
3428 (vo->asGpioVoltageObj.sHeader.ucVoltageMode == voltage_mode)) in atom_lookup_voltage_object_v3()
3430 offset += le16_to_cpu(vo->asGpioVoltageObj.sHeader.usSize); in atom_lookup_voltage_object_v3()
3445 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_is_voltage_gpio()
3448 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_is_voltage_gpio()
3456 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_is_voltage_gpio()
3458 (voltage_object->v1.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3463 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_is_voltage_gpio()
3465 (voltage_object->v2.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3476 if (atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_is_voltage_gpio()
3504 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_svi2_info()
3507 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_svi2_info()
3514 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_svi2_info()
3518 *svd_gpio_id = voltage_object->v3.asSVID2Obj.ucSVDGpioId; in radeon_atom_get_svi2_info()
3519 *svc_gpio_id = voltage_object->v3.asSVID2Obj.ucSVCGpioId; in radeon_atom_get_svi2_info()
3521 return -EINVAL; in radeon_atom_get_svi2_info()
3526 return -EINVAL; in radeon_atom_get_svi2_info()
3531 return -EINVAL; in radeon_atom_get_svi2_info()
3547 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_max_voltage()
3550 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_max_voltage()
3555 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_max_voltage()
3558 &voltage_object->v1.asFormula; in radeon_atom_get_max_voltage()
3559 if (formula->ucFlag & 1) in radeon_atom_get_max_voltage()
3561 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3562 formula->ucNumOfVoltageEntries / 2 * in radeon_atom_get_max_voltage()
3563 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3566 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3567 (formula->ucNumOfVoltageEntries - 1) * in radeon_atom_get_max_voltage()
3568 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3574 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_max_voltage()
3577 &voltage_object->v2.asFormula; in radeon_atom_get_max_voltage()
3578 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_max_voltage()
3580 ((u8 *)&formula->asVIDAdjustEntries[0] + in radeon_atom_get_max_voltage()
3581 (sizeof(VOLTAGE_LUT_ENTRY) * (formula->ucNumOfVoltageEntries - 1))); in radeon_atom_get_max_voltage()
3583 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_max_voltage()
3590 return -EINVAL; in radeon_atom_get_max_voltage()
3594 return -EINVAL; in radeon_atom_get_max_voltage()
3606 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_min_voltage()
3609 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_min_voltage()
3614 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_min_voltage()
3617 &voltage_object->v1.asFormula; in radeon_atom_get_min_voltage()
3619 le16_to_cpu(formula->usVoltageBaseLevel); in radeon_atom_get_min_voltage()
3625 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_min_voltage()
3628 &voltage_object->v2.asFormula; in radeon_atom_get_min_voltage()
3629 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_min_voltage()
3631 le16_to_cpu(formula->asVIDAdjustEntries[ in radeon_atom_get_min_voltage()
3640 return -EINVAL; in radeon_atom_get_min_voltage()
3644 return -EINVAL; in radeon_atom_get_min_voltage()
3656 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_step()
3659 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_step()
3664 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_voltage_step()
3667 &voltage_object->v1.asFormula; in radeon_atom_get_voltage_step()
3668 if (formula->ucFlag & 1) in radeon_atom_get_voltage_step()
3670 (le16_to_cpu(formula->usVoltageStep) + 1) / 2; in radeon_atom_get_voltage_step()
3673 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_voltage_step()
3678 return -EINVAL; in radeon_atom_get_voltage_step()
3681 return -EINVAL; in radeon_atom_get_voltage_step()
3685 return -EINVAL; in radeon_atom_get_voltage_step()
3696 return -EINVAL; in radeon_atom_round_to_true_voltage()
3698 return -EINVAL; in radeon_atom_round_to_true_voltage()
3700 return -EINVAL; in radeon_atom_round_to_true_voltage()
3708 ((nominal_voltage - min_voltage) / voltage_step) * in radeon_atom_round_to_true_voltage()
3725 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_table()
3728 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_table()
3735 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_table()
3736 return -EINVAL; in radeon_atom_get_voltage_table()
3739 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_voltage_table()
3742 &voltage_object->v2.asFormula; in radeon_atom_get_voltage_table()
3744 if (formula->ucNumOfVoltageEntries > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3745 return -EINVAL; in radeon_atom_get_voltage_table()
3746 lut = &formula->asVIDAdjustEntries[0]; in radeon_atom_get_voltage_table()
3747 for (i = 0; i < formula->ucNumOfVoltageEntries; i++) { in radeon_atom_get_voltage_table()
3748 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3749 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3751 voltage_table->entries[i].value, in radeon_atom_get_voltage_table()
3753 &voltage_table->entries[i].smio_low, in radeon_atom_get_voltage_table()
3754 &voltage_table->mask_low); in radeon_atom_get_voltage_table()
3760 voltage_table->count = formula->ucNumOfVoltageEntries; in radeon_atom_get_voltage_table()
3766 return -EINVAL; in radeon_atom_get_voltage_table()
3773 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_voltage_table()
3777 &voltage_object->v3.asGpioVoltageObj; in radeon_atom_get_voltage_table()
3779 if (gpio->ucGpioEntryNum > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3780 return -EINVAL; in radeon_atom_get_voltage_table()
3781 lut = &gpio->asVolGpioLut[0]; in radeon_atom_get_voltage_table()
3782 for (i = 0; i < gpio->ucGpioEntryNum; i++) { in radeon_atom_get_voltage_table()
3783 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3784 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3785 voltage_table->entries[i].smio_low = in radeon_atom_get_voltage_table()
3786 le32_to_cpu(lut->ulVoltageId); in radeon_atom_get_voltage_table()
3790 voltage_table->mask_low = le32_to_cpu(gpio->ulGpioMaskVal); in radeon_atom_get_voltage_table()
3791 voltage_table->count = gpio->ucGpioEntryNum; in radeon_atom_get_voltage_table()
3792 voltage_table->phase_delay = gpio->ucPhaseDelay; in radeon_atom_get_voltage_table()
3798 return -EINVAL; in radeon_atom_get_voltage_table()
3803 return -EINVAL; in radeon_atom_get_voltage_table()
3806 return -EINVAL; in radeon_atom_get_voltage_table()
3825 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_memory_info()
3828 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_memory_info()
3834 if (module_index < vram_info->v1_3.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3836 (ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo; in radeon_atom_get_memory_info()
3839 if (le16_to_cpu(vram_module->usSize) == 0) in radeon_atom_get_memory_info()
3840 return -EINVAL; in radeon_atom_get_memory_info()
3842 ((u8 *)vram_module + le16_to_cpu(vram_module->usSize)); in radeon_atom_get_memory_info()
3844 mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3845 mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3847 return -EINVAL; in radeon_atom_get_memory_info()
3851 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3853 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_memory_info()
3856 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3857 return -EINVAL; in radeon_atom_get_memory_info()
3859 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3861 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3862 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3864 return -EINVAL; in radeon_atom_get_memory_info()
3867 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3868 return -EINVAL; in radeon_atom_get_memory_info()
3875 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3877 (ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo; in radeon_atom_get_memory_info()
3880 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3881 return -EINVAL; in radeon_atom_get_memory_info()
3883 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3885 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3886 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3888 return -EINVAL; in radeon_atom_get_memory_info()
3891 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3892 return -EINVAL; in radeon_atom_get_memory_info()
3896 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3897 return -EINVAL; in radeon_atom_get_memory_info()
3901 return -EINVAL; in radeon_atom_get_memory_info()
3917 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_mclk_range_table()
3920 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_mclk_range_table()
3925 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3926 return -EINVAL; in radeon_atom_get_mclk_range_table()
3929 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_mclk_range_table()
3931 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_mclk_range_table()
3935 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_mclk_range_table()
3936 return -EINVAL; in radeon_atom_get_mclk_range_table()
3938 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_mclk_range_table()
3940 mclk_range_table->num_entries = (u8) in radeon_atom_get_mclk_range_table()
3941 ((le16_to_cpu(vram_module->usModuleSize) - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) / in radeon_atom_get_mclk_range_table()
3943 format = &vram_module->asMemTiming[0]; in radeon_atom_get_mclk_range_table()
3944 for (i = 0; i < mclk_range_table->num_entries; i++) { in radeon_atom_get_mclk_range_table()
3945 mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange); in radeon_atom_get_mclk_range_table()
3950 return -EINVAL; in radeon_atom_get_mclk_range_table()
3953 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3954 return -EINVAL; in radeon_atom_get_mclk_range_table()
3958 DRM_ERROR("new table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3959 return -EINVAL; in radeon_atom_get_mclk_range_table()
3961 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3962 return -EINVAL; in radeon_atom_get_mclk_range_table()
3966 return -EINVAL; in radeon_atom_get_mclk_range_table()
3989 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_init_mc_reg_table()
3992 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_init_mc_reg_table()
3995 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
3996 return -EINVAL; in radeon_atom_init_mc_reg_table()
4000 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_init_mc_reg_table()
4003 ((u8 *)vram_info + le16_to_cpu(vram_info->v2_1.usMemClkPatchTblOffset)); in radeon_atom_init_mc_reg_table()
4007 le16_to_cpu(reg_block->usRegIndexTblSize)); in radeon_atom_init_mc_reg_table()
4008 ATOM_INIT_REG_INDEX_FORMAT *format = &reg_block->asRegIndexBuf[0]; in radeon_atom_init_mc_reg_table()
4009 num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / in radeon_atom_init_mc_reg_table()
4010 sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; in radeon_atom_init_mc_reg_table()
4012 return -EINVAL; in radeon_atom_init_mc_reg_table()
4014 if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER) in radeon_atom_init_mc_reg_table()
4016 reg_table->mc_reg_address[i].s1 = in radeon_atom_init_mc_reg_table()
4017 (u16)(le16_to_cpu(format->usRegIndex)); in radeon_atom_init_mc_reg_table()
4018 reg_table->mc_reg_address[i].pre_reg_data = in radeon_atom_init_mc_reg_table()
4019 (u8)(format->ucPreRegDataLength); in radeon_atom_init_mc_reg_table()
4024 reg_table->last = i; in radeon_atom_init_mc_reg_table()
4030 reg_table->mc_reg_table_entry[num_ranges].mclk_max = in radeon_atom_init_mc_reg_table()
4033 for (i = 0, j = 1; i < reg_table->last; i++) { in radeon_atom_init_mc_reg_table()
4034 if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { in radeon_atom_init_mc_reg_table()
4035 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4038 } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { in radeon_atom_init_mc_reg_table()
4039 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4040 reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1]; in radeon_atom_init_mc_reg_table()
4046 ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); in radeon_atom_init_mc_reg_table()
4049 return -EINVAL; in radeon_atom_init_mc_reg_table()
4050 reg_table->num_entries = num_ranges; in radeon_atom_init_mc_reg_table()
4052 return -EINVAL; in radeon_atom_init_mc_reg_table()
4055 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4056 return -EINVAL; in radeon_atom_init_mc_reg_table()
4060 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4061 return -EINVAL; in radeon_atom_init_mc_reg_table()
4065 return -EINVAL; in radeon_atom_init_mc_reg_table()
4070 struct radeon_device *rdev = dev->dev_private; in radeon_atom_initialize_bios_scratch_regs()
4073 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4091 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4106 if (rdev->family >= CHIP_R600) in radeon_save_bios_scratch_regs()
4112 rdev->bios_scratch[i] = RREG32(scratch_reg + (i * 4)); in radeon_save_bios_scratch_regs()
4120 if (rdev->family >= CHIP_R600) in radeon_restore_bios_scratch_regs()
4126 WREG32(scratch_reg + (i * 4), rdev->bios_scratch[i]); in radeon_restore_bios_scratch_regs()
4131 struct drm_device *dev = encoder->dev; in radeon_atom_output_lock()
4132 struct radeon_device *rdev = dev->dev_private; in radeon_atom_output_lock()
4135 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4148 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4160 struct drm_device *dev = connector->dev; in radeon_atombios_connected_scratch_regs()
4161 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_connected_scratch_regs()
4167 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4177 if ((radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4178 (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4190 if ((radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4191 (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4203 if ((radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4204 (radeon_connector->devices & ATOM_DEVICE_LCD1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4217 if ((radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4218 (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4231 if ((radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4232 (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4245 if ((radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4246 (radeon_connector->devices & ATOM_DEVICE_DFP1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4259 if ((radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4260 (radeon_connector->devices & ATOM_DEVICE_DFP2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4273 if ((radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4274 (radeon_connector->devices & ATOM_DEVICE_DFP3_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4287 if ((radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4288 (radeon_connector->devices & ATOM_DEVICE_DFP4_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4301 if ((radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4302 (radeon_connector->devices & ATOM_DEVICE_DFP5_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4315 if ((radeon_encoder->devices & ATOM_DEVICE_DFP6_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4316 (radeon_connector->devices & ATOM_DEVICE_DFP6_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4330 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4344 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_crtc_scratch_regs()
4345 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_crtc_scratch_regs()
4352 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4357 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4361 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4365 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4369 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4373 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4377 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4381 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4385 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4390 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4399 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_dpms_scratch_regs()
4400 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_dpms_scratch_regs()
4407 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()
4412 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4418 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4424 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4430 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4436 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4442 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4448 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4454 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4460 if (radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4466 if (radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4473 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()