Lines Matching +full:adt7473 +full:- +full:d
2 * Copyright 2007-8 Advanced Micro Devices, Inc.
35 #include "atom-bits.h"
58 if ((rdev->family == CHIP_R420) || in radeon_lookup_i2c_gpio_quirks()
59 (rdev->family == CHIP_R423) || in radeon_lookup_i2c_gpio_quirks()
60 (rdev->family == CHIP_RV410)) { in radeon_lookup_i2c_gpio_quirks()
61 if ((le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0018) || in radeon_lookup_i2c_gpio_quirks()
62 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x0019) || in radeon_lookup_i2c_gpio_quirks()
63 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x001a)) { in radeon_lookup_i2c_gpio_quirks()
64 gpio->ucClkMaskShift = 0x19; in radeon_lookup_i2c_gpio_quirks()
65 gpio->ucDataMaskShift = 0x18; in radeon_lookup_i2c_gpio_quirks()
72 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x1936) && in radeon_lookup_i2c_gpio_quirks()
73 (gpio->sucI2cId.ucAccess == 0)) { in radeon_lookup_i2c_gpio_quirks()
74 gpio->sucI2cId.ucAccess = 0x97; in radeon_lookup_i2c_gpio_quirks()
75 gpio->ucDataMaskShift = 8; in radeon_lookup_i2c_gpio_quirks()
76 gpio->ucDataEnShift = 8; in radeon_lookup_i2c_gpio_quirks()
77 gpio->ucDataY_Shift = 8; in radeon_lookup_i2c_gpio_quirks()
78 gpio->ucDataA_Shift = 8; in radeon_lookup_i2c_gpio_quirks()
85 (le16_to_cpu(gpio->usClkMaskRegisterIndex) == 0x1fda) && in radeon_lookup_i2c_gpio_quirks()
86 (gpio->sucI2cId.ucAccess == 0x94)) in radeon_lookup_i2c_gpio_quirks()
87 gpio->sucI2cId.ucAccess = 0x14; in radeon_lookup_i2c_gpio_quirks()
97 i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
98 i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
99 i2c.en_clk_reg = le16_to_cpu(gpio->usClkEnRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
100 i2c.en_data_reg = le16_to_cpu(gpio->usDataEnRegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
101 i2c.y_clk_reg = le16_to_cpu(gpio->usClkY_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
102 i2c.y_data_reg = le16_to_cpu(gpio->usDataY_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
103 i2c.a_clk_reg = le16_to_cpu(gpio->usClkA_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
104 i2c.a_data_reg = le16_to_cpu(gpio->usDataA_RegisterIndex) * 4; in radeon_get_bus_rec_for_i2c_gpio()
105 i2c.mask_clk_mask = (1 << gpio->ucClkMaskShift); in radeon_get_bus_rec_for_i2c_gpio()
106 i2c.mask_data_mask = (1 << gpio->ucDataMaskShift); in radeon_get_bus_rec_for_i2c_gpio()
107 i2c.en_clk_mask = (1 << gpio->ucClkEnShift); in radeon_get_bus_rec_for_i2c_gpio()
108 i2c.en_data_mask = (1 << gpio->ucDataEnShift); in radeon_get_bus_rec_for_i2c_gpio()
109 i2c.y_clk_mask = (1 << gpio->ucClkY_Shift); in radeon_get_bus_rec_for_i2c_gpio()
110 i2c.y_data_mask = (1 << gpio->ucDataY_Shift); in radeon_get_bus_rec_for_i2c_gpio()
111 i2c.a_clk_mask = (1 << gpio->ucClkA_Shift); in radeon_get_bus_rec_for_i2c_gpio()
112 i2c.a_data_mask = (1 << gpio->ucDataA_Shift); in radeon_get_bus_rec_for_i2c_gpio()
114 if (gpio->sucI2cId.sbfAccess.bfHW_Capable) in radeon_get_bus_rec_for_i2c_gpio()
119 if (gpio->sucI2cId.ucAccess == 0xa0) in radeon_get_bus_rec_for_i2c_gpio()
124 i2c.i2c_id = gpio->sucI2cId.ucAccess; in radeon_get_bus_rec_for_i2c_gpio()
137 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_lookup_i2c_gpio()
149 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in radeon_lookup_i2c_gpio()
151 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_lookup_i2c_gpio()
154 gpio = &i2c_info->asGPIO_Info[0]; in radeon_lookup_i2c_gpio()
159 if (gpio->sucI2cId.ucAccess == id) { in radeon_lookup_i2c_gpio()
173 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_atombios_i2c_init()
183 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in radeon_atombios_i2c_init()
185 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_i2c_init()
188 gpio = &i2c_info->asGPIO_Info[0]; in radeon_atombios_i2c_init()
196 rdev->i2c_bus[i] = radeon_i2c_create(rdev->ddev, &i2c, stmp); in radeon_atombios_i2c_init()
207 struct atom_context *ctx = rdev->mode_info.atom_context; in radeon_atombios_lookup_gpio()
219 gpio_info = (struct _ATOM_GPIO_PIN_LUT *)(ctx->bios + data_offset); in radeon_atombios_lookup_gpio()
221 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_lookup_gpio()
224 pin = gpio_info->asGPIO_Pin; in radeon_atombios_lookup_gpio()
226 if (id == pin->ucGPIO_ID) { in radeon_atombios_lookup_gpio()
227 gpio.id = pin->ucGPIO_ID; in radeon_atombios_lookup_gpio()
228 gpio.reg = le16_to_cpu(pin->usGpioPin_AIndex) * 4; in radeon_atombios_lookup_gpio()
229 gpio.shift = pin->ucGpioPinBitShift; in radeon_atombios_lookup_gpio()
230 gpio.mask = (1 << pin->ucGpioPinBitShift); in radeon_atombios_lookup_gpio()
258 if (gpio->reg == reg) { in radeon_atom_get_hpd_info_from_gpio()
259 switch(gpio->mask) { in radeon_atom_get_hpd_info_from_gpio()
295 /* Asus M2A-VM HDMI board lists the DVI port as HDMI */ in radeon_atom_apply_quirks()
296 if ((dev->pdev->device == 0x791e) && in radeon_atom_apply_quirks()
297 (dev->pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
298 (dev->pdev->subsystem_device == 0x826d)) { in radeon_atom_apply_quirks()
305 if ((dev->pdev->device == 0x7941) && in radeon_atom_apply_quirks()
306 (dev->pdev->subsystem_vendor == 0x1849) && in radeon_atom_apply_quirks()
307 (dev->pdev->subsystem_device == 0x7941)) { in radeon_atom_apply_quirks()
314 if ((dev->pdev->device == 0x796e) && in radeon_atom_apply_quirks()
315 (dev->pdev->subsystem_vendor == 0x1462) && in radeon_atom_apply_quirks()
316 (dev->pdev->subsystem_device == 0x7302)) { in radeon_atom_apply_quirks()
322 /* a-bit f-i90hd - ciaranm on #radeonhd - this board has no DVI */ in radeon_atom_apply_quirks()
323 if ((dev->pdev->device == 0x7941) && in radeon_atom_apply_quirks()
324 (dev->pdev->subsystem_vendor == 0x147b) && in radeon_atom_apply_quirks()
325 (dev->pdev->subsystem_device == 0x2412)) { in radeon_atom_apply_quirks()
331 if ((dev->pdev->device == 0x5653) && in radeon_atom_apply_quirks()
332 (dev->pdev->subsystem_vendor == 0x1462) && in radeon_atom_apply_quirks()
333 (dev->pdev->subsystem_device == 0x0291)) { in radeon_atom_apply_quirks()
335 i2c_bus->valid = false; in radeon_atom_apply_quirks()
341 if ((dev->pdev->device == 0x7146) && in radeon_atom_apply_quirks()
342 (dev->pdev->subsystem_vendor == 0x17af) && in radeon_atom_apply_quirks()
343 (dev->pdev->subsystem_device == 0x2058)) { in radeon_atom_apply_quirks()
349 if ((dev->pdev->device == 0x7142) && in radeon_atom_apply_quirks()
350 (dev->pdev->subsystem_vendor == 0x1458) && in radeon_atom_apply_quirks()
351 (dev->pdev->subsystem_device == 0x2134)) { in radeon_atom_apply_quirks()
358 if ((dev->pdev->device == 0x71C5) && in radeon_atom_apply_quirks()
359 (dev->pdev->subsystem_vendor == 0x106b) && in radeon_atom_apply_quirks()
360 (dev->pdev->subsystem_device == 0x0080)) { in radeon_atom_apply_quirks()
376 if ((dev->pdev->device == 0x9598) && in radeon_atom_apply_quirks()
377 (dev->pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
378 (dev->pdev->subsystem_device == 0x01da)) { in radeon_atom_apply_quirks()
385 if ((dev->pdev->device == 0x9598) && in radeon_atom_apply_quirks()
386 (dev->pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
387 (dev->pdev->subsystem_device == 0x01e4)) { in radeon_atom_apply_quirks()
394 if ((dev->pdev->device == 0x95C5) && in radeon_atom_apply_quirks()
395 (dev->pdev->subsystem_vendor == 0x1043) && in radeon_atom_apply_quirks()
396 (dev->pdev->subsystem_device == 0x01e2)) { in radeon_atom_apply_quirks()
402 /* some BIOSes seem to report DAC on HDMI - usually this is a board with in radeon_atom_apply_quirks()
421 if (((dev->pdev->device == 0x95c4) || (dev->pdev->device == 0x9591)) && in radeon_atom_apply_quirks()
422 (dev->pdev->subsystem_vendor == 0x1025) && in radeon_atom_apply_quirks()
423 (dev->pdev->subsystem_device == 0x013c)) { in radeon_atom_apply_quirks()
426 /* actually it's a DVI-D port not DVI-I */ in radeon_atom_apply_quirks()
435 if ((dev->pdev->device == 0x9498) && in radeon_atom_apply_quirks()
436 (dev->pdev->subsystem_vendor == 0x1682) && in radeon_atom_apply_quirks()
437 (dev->pdev->subsystem_device == 0x2452) && in radeon_atom_apply_quirks()
438 (i2c_bus->valid == false) && in radeon_atom_apply_quirks()
440 struct radeon_device *rdev = dev->dev_private; in radeon_atom_apply_quirks()
444 /* Fujitsu D3003-S2 board lists DVI-I as DVI-D and VGA */ in radeon_atom_apply_quirks()
445 if (((dev->pdev->device == 0x9802) || in radeon_atom_apply_quirks()
446 (dev->pdev->device == 0x9805) || in radeon_atom_apply_quirks()
447 (dev->pdev->device == 0x9806)) && in radeon_atom_apply_quirks()
448 (dev->pdev->subsystem_vendor == 0x1734) && in radeon_atom_apply_quirks()
449 (dev->pdev->subsystem_device == 0x11bd)) { in radeon_atom_apply_quirks()
485 CONNECTOR_OBJECT_ID_VGA, /* technically DVI-A */
524 struct radeon_device *rdev = dev->dev_private; in radeon_get_atom_connector_info_from_object_table()
525 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_get_atom_connector_info_from_object_table()
526 struct atom_context *ctx = mode_info->atom_context; in radeon_get_atom_connector_info_from_object_table()
549 obj_header = (ATOM_OBJECT_HEADER *) (ctx->bios + data_offset); 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->usDisplayPathTableOffset)); 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->usConnectorObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
557 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
558 le16_to_cpu(obj_header->usEncoderObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
560 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
561 le16_to_cpu(obj_header->usRouterObjectTableOffset)); in radeon_get_atom_connector_info_from_object_table()
562 device_support = le16_to_cpu(obj_header->usDeviceSupport); in radeon_get_atom_connector_info_from_object_table()
565 for (i = 0; i < path_obj->ucNumOfDispPath; i++) { in radeon_get_atom_connector_info_from_object_table()
566 uint8_t *addr = (uint8_t *) path_obj->asDispPath; in radeon_get_atom_connector_info_from_object_table()
570 path_size += le16_to_cpu(path->usSize); in radeon_get_atom_connector_info_from_object_table()
572 if (device_support & le16_to_cpu(path->usDeviceTag)) { in radeon_get_atom_connector_info_from_object_table()
576 (le16_to_cpu(path->usConnObjectId) & OBJECT_ID_MASK) in radeon_get_atom_connector_info_from_object_table()
579 (le16_to_cpu(path->usConnObjectId) & ENUM_ID_MASK) in radeon_get_atom_connector_info_from_object_table()
583 if (le16_to_cpu(path->usDeviceTag) == in radeon_get_atom_connector_info_from_object_table()
588 if ((rdev->flags & RADEON_IS_IGP) && in radeon_get_atom_connector_info_from_object_table()
604 *) (ctx->bios + igp_offset); in radeon_get_atom_connector_info_from_object_table()
611 igp_obj-> in radeon_get_atom_connector_info_from_object_table()
615 igp_obj-> in radeon_get_atom_connector_info_from_object_table()
647 for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) { in radeon_get_atom_connector_info_from_object_table()
649 (le16_to_cpu(path->usGraphicObjIds[j]) & in radeon_get_atom_connector_info_from_object_table()
653 for (k = 0; k < enc_obj->ucNumberOfObjects; k++) { in radeon_get_atom_connector_info_from_object_table()
654 u16 encoder_obj = le16_to_cpu(enc_obj->asObjects[k].usObjectID); in radeon_get_atom_connector_info_from_object_table()
655 if (le16_to_cpu(path->usGraphicObjIds[j]) == encoder_obj) { in radeon_get_atom_connector_info_from_object_table()
657 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
658 le16_to_cpu(enc_obj->asObjects[k].usRecordOffset)); in radeon_get_atom_connector_info_from_object_table()
662 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
663 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
664 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
665 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
669 caps = le16_to_cpu(cap_record->usEncoderCap); in radeon_get_atom_connector_info_from_object_table()
673 ((char *)record + record->ucRecordSize); in radeon_get_atom_connector_info_from_object_table()
678 (path-> in radeon_get_atom_connector_info_from_object_table()
684 for (k = 0; k < router_obj->ucNumberOfObjects; k++) { in radeon_get_atom_connector_info_from_object_table()
685 u16 router_obj_id = le16_to_cpu(router_obj->asObjects[k].usObjectID); in radeon_get_atom_connector_info_from_object_table()
686 if (le16_to_cpu(path->usGraphicObjIds[j]) == router_obj_id) { in radeon_get_atom_connector_info_from_object_table()
688 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
689 le16_to_cpu(router_obj->asObjects[k].usRecordOffset)); in radeon_get_atom_connector_info_from_object_table()
696 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
697 le16_to_cpu(router_obj->asObjects[k].usSrcDstTableOffset)); in radeon_get_atom_connector_info_from_object_table()
700 (router_src_dst_table->ucNumberOfSrc * 2)); in radeon_get_atom_connector_info_from_object_table()
706 if (le16_to_cpu(path->usConnObjectId) == in radeon_get_atom_connector_info_from_object_table()
711 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
712 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
713 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
714 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
721 &i2c_record->sucI2cId; in radeon_get_atom_connector_info_from_object_table()
724 i2c_config-> in radeon_get_atom_connector_info_from_object_table()
726 router.i2c_addr = i2c_record->ucI2CAddr >> 1; in radeon_get_atom_connector_info_from_object_table()
732 router.ddc_mux_type = ddc_path->ucMuxType; in radeon_get_atom_connector_info_from_object_table()
733 router.ddc_mux_control_pin = ddc_path->ucMuxControlPin; in radeon_get_atom_connector_info_from_object_table()
734 router.ddc_mux_state = ddc_path->ucMuxState[enum_id]; in radeon_get_atom_connector_info_from_object_table()
740 router.cd_mux_type = cd_path->ucMuxType; in radeon_get_atom_connector_info_from_object_table()
741 router.cd_mux_control_pin = cd_path->ucMuxControlPin; in radeon_get_atom_connector_info_from_object_table()
742 router.cd_mux_state = cd_path->ucMuxState[enum_id]; in radeon_get_atom_connector_info_from_object_table()
746 ((char *)record + record->ucRecordSize); in radeon_get_atom_connector_info_from_object_table()
756 if ((le16_to_cpu(path->usDeviceTag) & in radeon_get_atom_connector_info_from_object_table()
758 for (j = 0; j < con_obj->ucNumberOfObjects; j++) { in radeon_get_atom_connector_info_from_object_table()
759 if (le16_to_cpu(path->usConnObjectId) == in radeon_get_atom_connector_info_from_object_table()
760 le16_to_cpu(con_obj->asObjects[j]. in radeon_get_atom_connector_info_from_object_table()
766 (ctx->bios + data_offset + in radeon_get_atom_connector_info_from_object_table()
767 le16_to_cpu(con_obj-> in radeon_get_atom_connector_info_from_object_table()
774 while (record->ucRecordSize > 0 && in radeon_get_atom_connector_info_from_object_table()
775 record->ucRecordType > 0 && in radeon_get_atom_connector_info_from_object_table()
776 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in radeon_get_atom_connector_info_from_object_table()
777 switch (record->ucRecordType) { in radeon_get_atom_connector_info_from_object_table()
784 &i2c_record->sucI2cId; in radeon_get_atom_connector_info_from_object_table()
786 i2c_config-> in radeon_get_atom_connector_info_from_object_table()
794 hpd_record->ucHPDIntGPIOID); in radeon_get_atom_connector_info_from_object_table()
796 hpd.plugged_state = hpd_record->ucPlugged_PinState; in radeon_get_atom_connector_info_from_object_table()
803 record-> in radeon_get_atom_connector_info_from_object_table()
814 conn_id = le16_to_cpu(path->usConnObjectId); in radeon_get_atom_connector_info_from_object_table()
817 (dev, le16_to_cpu(path->usDeviceTag), &connector_type, in radeon_get_atom_connector_info_from_object_table()
823 le16_to_cpu(path-> in radeon_get_atom_connector_info_from_object_table()
844 struct radeon_device *rdev = dev->dev_private; in atombios_get_connector_object_id()
846 if (rdev->flags & RADEON_IS_IGP) { in atombios_get_connector_object_id()
852 struct radeon_mode_info *mode_info = &rdev->mode_info; in atombios_get_connector_object_id()
853 struct atom_context *ctx = mode_info->atom_context; in atombios_get_connector_object_id()
860 xtmds = (ATOM_XTMDS_INFO *)(ctx->bios + data_offset); in atombios_get_connector_object_id()
862 if (xtmds->ucSupportedLink & ATOM_XTMDS_SUPPORTED_DUALLINK) { in atombios_get_connector_object_id()
895 struct radeon_device *rdev = dev->dev_private; in radeon_get_atom_connector_info_from_supported_devices_table()
896 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_get_atom_connector_info_from_supported_devices_table()
897 struct atom_context *ctx = mode_info->atom_context; in radeon_get_atom_connector_info_from_supported_devices_table()
923 (union atom_supported_devices *)(ctx->bios + data_offset); in radeon_get_atom_connector_info_from_supported_devices_table()
925 device_support = le16_to_cpu(supported_devices->info.usDeviceSupport); in radeon_get_atom_connector_info_from_supported_devices_table()
934 supported_devices->info.asConnInfo[i]; in radeon_get_atom_connector_info_from_supported_devices_table()
977 u8 isb = supported_devices->info_2d1.asIntSrcInfo[i].ucIntSrcBitmap; in radeon_get_atom_connector_info_from_supported_devices_table()
1048 /* combine analog and digital for DVI-I */ in radeon_get_atom_connector_info_from_supported_devices_table()
1113 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_dentist_vco_freq()
1119 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_dentist_vco_freq()
1121 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_get_dentist_vco_freq()
1123 rdev->clock.vco_freq = in radeon_atombios_get_dentist_vco_freq()
1124 le32_to_cpu(igp_info->info_6.ulDentistVCOFreq); in radeon_atombios_get_dentist_vco_freq()
1130 struct radeon_device *rdev = dev->dev_private; in radeon_atom_get_clock_info()
1131 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_clock_info()
1135 struct radeon_pll *p1pll = &rdev->clock.p1pll; in radeon_atom_get_clock_info()
1136 struct radeon_pll *p2pll = &rdev->clock.p2pll; in radeon_atom_get_clock_info()
1137 struct radeon_pll *dcpll = &rdev->clock.dcpll; in radeon_atom_get_clock_info()
1138 struct radeon_pll *spll = &rdev->clock.spll; in radeon_atom_get_clock_info()
1139 struct radeon_pll *mpll = &rdev->clock.mpll; in radeon_atom_get_clock_info()
1142 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atom_get_clock_info()
1145 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atom_get_clock_info()
1148 p1pll->reference_freq = in radeon_atom_get_clock_info()
1149 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1150 p1pll->reference_div = 0; in radeon_atom_get_clock_info()
1153 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1154 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1156 p1pll->pll_out_min = in radeon_atom_get_clock_info()
1157 le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output); in radeon_atom_get_clock_info()
1158 p1pll->pll_out_max = in radeon_atom_get_clock_info()
1159 le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output); in radeon_atom_get_clock_info()
1162 p1pll->lcd_pll_out_min = in radeon_atom_get_clock_info()
1163 le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1164 if (p1pll->lcd_pll_out_min == 0) in radeon_atom_get_clock_info()
1165 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1166 p1pll->lcd_pll_out_max = in radeon_atom_get_clock_info()
1167 le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100; in radeon_atom_get_clock_info()
1168 if (p1pll->lcd_pll_out_max == 0) in radeon_atom_get_clock_info()
1169 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1171 p1pll->lcd_pll_out_min = p1pll->pll_out_min; in radeon_atom_get_clock_info()
1172 p1pll->lcd_pll_out_max = p1pll->pll_out_max; in radeon_atom_get_clock_info()
1175 if (p1pll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1177 p1pll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1179 p1pll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1182 p1pll->pll_in_min = in radeon_atom_get_clock_info()
1183 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Input); in radeon_atom_get_clock_info()
1184 p1pll->pll_in_max = in radeon_atom_get_clock_info()
1185 le16_to_cpu(firmware_info->info.usMaxPixelClockPLL_Input); in radeon_atom_get_clock_info()
1191 spll->reference_freq = in radeon_atom_get_clock_info()
1192 le16_to_cpu(firmware_info->info_21.usCoreReferenceClock); in radeon_atom_get_clock_info()
1194 spll->reference_freq = in radeon_atom_get_clock_info()
1195 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1196 spll->reference_div = 0; in radeon_atom_get_clock_info()
1198 spll->pll_out_min = in radeon_atom_get_clock_info()
1199 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Output); in radeon_atom_get_clock_info()
1200 spll->pll_out_max = in radeon_atom_get_clock_info()
1201 le32_to_cpu(firmware_info->info.ulMaxEngineClockPLL_Output); in radeon_atom_get_clock_info()
1204 if (spll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1206 spll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1208 spll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1211 spll->pll_in_min = in radeon_atom_get_clock_info()
1212 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Input); in radeon_atom_get_clock_info()
1213 spll->pll_in_max = in radeon_atom_get_clock_info()
1214 le16_to_cpu(firmware_info->info.usMaxEngineClockPLL_Input); in radeon_atom_get_clock_info()
1218 mpll->reference_freq = in radeon_atom_get_clock_info()
1219 le16_to_cpu(firmware_info->info_21.usMemoryReferenceClock); in radeon_atom_get_clock_info()
1221 mpll->reference_freq = in radeon_atom_get_clock_info()
1222 le16_to_cpu(firmware_info->info.usReferenceClock); in radeon_atom_get_clock_info()
1223 mpll->reference_div = 0; in radeon_atom_get_clock_info()
1225 mpll->pll_out_min = in radeon_atom_get_clock_info()
1226 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1227 mpll->pll_out_max = in radeon_atom_get_clock_info()
1228 le32_to_cpu(firmware_info->info.ulMaxMemoryClockPLL_Output); in radeon_atom_get_clock_info()
1231 if (mpll->pll_out_min == 0) { in radeon_atom_get_clock_info()
1233 mpll->pll_out_min = 64800; in radeon_atom_get_clock_info()
1235 mpll->pll_out_min = 20000; in radeon_atom_get_clock_info()
1238 mpll->pll_in_min = in radeon_atom_get_clock_info()
1239 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1240 mpll->pll_in_max = in radeon_atom_get_clock_info()
1241 le16_to_cpu(firmware_info->info.usMaxMemoryClockPLL_Input); in radeon_atom_get_clock_info()
1243 rdev->clock.default_sclk = in radeon_atom_get_clock_info()
1244 le32_to_cpu(firmware_info->info.ulDefaultEngineClock); in radeon_atom_get_clock_info()
1245 rdev->clock.default_mclk = in radeon_atom_get_clock_info()
1246 le32_to_cpu(firmware_info->info.ulDefaultMemoryClock); in radeon_atom_get_clock_info()
1249 rdev->clock.default_dispclk = in radeon_atom_get_clock_info()
1250 le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq); in radeon_atom_get_clock_info()
1251 if (rdev->clock.default_dispclk == 0) { in radeon_atom_get_clock_info()
1253 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1255 rdev->clock.default_dispclk = 54000; /* 540 Mhz */ in radeon_atom_get_clock_info()
1257 rdev->clock.default_dispclk = 60000; /* 600 Mhz */ in radeon_atom_get_clock_info()
1260 if (ASIC_IS_DCE6(rdev) && (rdev->clock.default_dispclk < 53900)) { in radeon_atom_get_clock_info()
1262 rdev->clock.default_dispclk / 100); in radeon_atom_get_clock_info()
1263 rdev->clock.default_dispclk = 60000; in radeon_atom_get_clock_info()
1265 rdev->clock.dp_extclk = in radeon_atom_get_clock_info()
1266 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); in radeon_atom_get_clock_info()
1267 rdev->clock.current_dispclk = rdev->clock.default_dispclk; in radeon_atom_get_clock_info()
1271 rdev->clock.max_pixel_clock = le16_to_cpu(firmware_info->info.usMaxPixelClock); in radeon_atom_get_clock_info()
1272 if (rdev->clock.max_pixel_clock == 0) in radeon_atom_get_clock_info()
1273 rdev->clock.max_pixel_clock = 40000; in radeon_atom_get_clock_info()
1276 rdev->mode_info.firmware_flags = in radeon_atom_get_clock_info()
1277 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); in radeon_atom_get_clock_info()
1280 rdev->clock.vco_freq = in radeon_atom_get_clock_info()
1281 le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq); in radeon_atom_get_clock_info()
1283 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1287 rdev->clock.vco_freq = rdev->clock.current_dispclk; in radeon_atom_get_clock_info()
1289 if (rdev->clock.vco_freq == 0) in radeon_atom_get_clock_info()
1290 rdev->clock.vco_freq = 360000; /* 3.6 GHz */ in radeon_atom_get_clock_info()
1300 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_sideport_present()
1307 if (rdev->family == CHIP_RS600) in radeon_atombios_sideport_present()
1310 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_sideport_present()
1312 igp_info = (union igp_info *)(mode_info->atom_context->bios + in radeon_atombios_sideport_present()
1316 if (le32_to_cpu(igp_info->info.ulBootUpMemoryClock)) in radeon_atombios_sideport_present()
1320 if (le32_to_cpu(igp_info->info_2.ulBootUpSidePortClock)) in radeon_atombios_sideport_present()
1324 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_sideport_present()
1334 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tmds_info()
1335 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tmds_info()
1336 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tmds_info()
1344 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tmds_info()
1347 (struct _ATOM_TMDS_INFO *)(mode_info->atom_context->bios + in radeon_atombios_get_tmds_info()
1350 maxfreq = le16_to_cpu(tmds_info->usMaxFrequency); in radeon_atombios_get_tmds_info()
1352 tmds->tmds_pll[i].freq = in radeon_atombios_get_tmds_info()
1353 le16_to_cpu(tmds_info->asMiscInfo[i].usFrequency); in radeon_atombios_get_tmds_info()
1354 tmds->tmds_pll[i].value = in radeon_atombios_get_tmds_info()
1355 tmds_info->asMiscInfo[i].ucPLL_ChargePump & 0x3f; in radeon_atombios_get_tmds_info()
1356 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1357 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1359 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1360 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1362 tmds->tmds_pll[i].value |= in radeon_atombios_get_tmds_info()
1363 (tmds_info->asMiscInfo[i]. in radeon_atombios_get_tmds_info()
1367 tmds->tmds_pll[i].freq, in radeon_atombios_get_tmds_info()
1368 tmds->tmds_pll[i].value); in radeon_atombios_get_tmds_info()
1370 if (maxfreq == tmds->tmds_pll[i].freq) { in radeon_atombios_get_tmds_info()
1371 tmds->tmds_pll[i].freq = 0xffffffff; in radeon_atombios_get_tmds_info()
1384 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_ppll_ss_info()
1393 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_ppll_ss_info()
1396 (struct _ATOM_SPREAD_SPECTRUM_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_ppll_ss_info()
1398 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_ppll_ss_info()
1401 ((u8 *)&ss_info->asSS_Info[0]); in radeon_atombios_get_ppll_ss_info()
1403 if (ss_assign->ucSS_Id == id) { in radeon_atombios_get_ppll_ss_info()
1404 ss->percentage = in radeon_atombios_get_ppll_ss_info()
1405 le16_to_cpu(ss_assign->usSpreadSpectrumPercentage); in radeon_atombios_get_ppll_ss_info()
1406 ss->type = ss_assign->ucSpreadSpectrumType; in radeon_atombios_get_ppll_ss_info()
1407 ss->step = ss_assign->ucSS_Step; in radeon_atombios_get_ppll_ss_info()
1408 ss->delay = ss_assign->ucSS_Delay; in radeon_atombios_get_ppll_ss_info()
1409 ss->range = ss_assign->ucSS_Range; in radeon_atombios_get_ppll_ss_info()
1410 ss->refdiv = ss_assign->ucRecommendedRef_Div; in radeon_atombios_get_ppll_ss_info()
1424 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_igp_ss_overrides()
1432 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_igp_ss_overrides()
1435 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_igp_ss_overrides()
1440 percentage = le16_to_cpu(igp_info->info_6.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1441 rate = le16_to_cpu(igp_info->info_6.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1444 percentage = le16_to_cpu(igp_info->info_6.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1445 rate = le16_to_cpu(igp_info->info_6.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1448 percentage = le16_to_cpu(igp_info->info_6.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1449 rate = le16_to_cpu(igp_info->info_6.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1456 percentage = le16_to_cpu(igp_info->info_7.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1457 rate = le16_to_cpu(igp_info->info_7.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1460 percentage = le16_to_cpu(igp_info->info_7.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1461 rate = le16_to_cpu(igp_info->info_7.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1464 percentage = le16_to_cpu(igp_info->info_7.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1465 rate = le16_to_cpu(igp_info->info_7.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1472 percentage = le16_to_cpu(igp_info->info_8.usDVISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1473 rate = le16_to_cpu(igp_info->info_8.usDVISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1476 percentage = le16_to_cpu(igp_info->info_8.usHDMISSPercentage); in radeon_atombios_get_igp_ss_overrides()
1477 rate = le16_to_cpu(igp_info->info_8.usHDMISSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1480 percentage = le16_to_cpu(igp_info->info_8.usLvdsSSPercentage); in radeon_atombios_get_igp_ss_overrides()
1481 rate = le16_to_cpu(igp_info->info_8.usLvdsSSpreadRateIn10Hz); in radeon_atombios_get_igp_ss_overrides()
1486 DRM_ERROR("Unsupported IGP table: %d %d\n", frev, crev); in radeon_atombios_get_igp_ss_overrides()
1490 ss->percentage = percentage; in radeon_atombios_get_igp_ss_overrides()
1492 ss->rate = rate; in radeon_atombios_get_igp_ss_overrides()
1512 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_asic_ss_info()
1521 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1525 if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT)) in radeon_atombios_get_asic_ss_info()
1530 if (atom_parse_data_header(mode_info->atom_context, index, &size, in radeon_atombios_get_asic_ss_info()
1534 (union asic_ss_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_asic_ss_info()
1538 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1541 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1543 if ((ss_assign->v1.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1544 (clock <= le32_to_cpu(ss_assign->v1.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1545 ss->percentage = in radeon_atombios_get_asic_ss_info()
1546 le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1547 ss->type = ss_assign->v1.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1548 ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); in radeon_atombios_get_asic_ss_info()
1549 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1557 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1559 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_2.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1561 if ((ss_assign->v2.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1562 (clock <= le32_to_cpu(ss_assign->v2.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1563 ss->percentage = in radeon_atombios_get_asic_ss_info()
1564 le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1565 ss->type = ss_assign->v2.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1566 ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1567 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1571 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1579 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in radeon_atombios_get_asic_ss_info()
1581 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_3.asSpreadSpectrum[0]); in radeon_atombios_get_asic_ss_info()
1583 if ((ss_assign->v3.ucClockIndication == id) && in radeon_atombios_get_asic_ss_info()
1584 (clock <= le32_to_cpu(ss_assign->v3.ulTargetClockRange))) { in radeon_atombios_get_asic_ss_info()
1585 ss->percentage = in radeon_atombios_get_asic_ss_info()
1586 le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); in radeon_atombios_get_asic_ss_info()
1587 ss->type = ss_assign->v3.ucSpreadSpectrumMode; in radeon_atombios_get_asic_ss_info()
1588 ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); in radeon_atombios_get_asic_ss_info()
1589 if (ss_assign->v3.ucSpreadSpectrumMode & in radeon_atombios_get_asic_ss_info()
1591 ss->percentage_divider = 1000; in radeon_atombios_get_asic_ss_info()
1593 ss->percentage_divider = 100; in radeon_atombios_get_asic_ss_info()
1596 ss->rate /= 100; in radeon_atombios_get_asic_ss_info()
1597 if (rdev->flags & RADEON_IS_IGP) in radeon_atombios_get_asic_ss_info()
1606 DRM_ERROR("Unsupported ASIC_InternalSS_Info table: %d %d\n", frev, crev); in radeon_atombios_get_asic_ss_info()
1623 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_lvds_info()
1624 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_lvds_info()
1625 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_lvds_info()
1631 int encoder_enum = (encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT; in radeon_atombios_get_lvds_info()
1633 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_lvds_info()
1636 (union lvds_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_get_lvds_info()
1643 lvds->native_mode.clock = in radeon_atombios_get_lvds_info()
1644 le16_to_cpu(lvds_info->info.sLCDTiming.usPixClk) * 10; in radeon_atombios_get_lvds_info()
1645 lvds->native_mode.hdisplay = in radeon_atombios_get_lvds_info()
1646 le16_to_cpu(lvds_info->info.sLCDTiming.usHActive); in radeon_atombios_get_lvds_info()
1647 lvds->native_mode.vdisplay = in radeon_atombios_get_lvds_info()
1648 le16_to_cpu(lvds_info->info.sLCDTiming.usVActive); in radeon_atombios_get_lvds_info()
1649 lvds->native_mode.htotal = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1650 le16_to_cpu(lvds_info->info.sLCDTiming.usHBlanking_Time); in radeon_atombios_get_lvds_info()
1651 lvds->native_mode.hsync_start = lvds->native_mode.hdisplay + in radeon_atombios_get_lvds_info()
1652 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncOffset); in radeon_atombios_get_lvds_info()
1653 lvds->native_mode.hsync_end = lvds->native_mode.hsync_start + in radeon_atombios_get_lvds_info()
1654 le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncWidth); in radeon_atombios_get_lvds_info()
1655 lvds->native_mode.vtotal = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1656 le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time); in radeon_atombios_get_lvds_info()
1657 lvds->native_mode.vsync_start = lvds->native_mode.vdisplay + in radeon_atombios_get_lvds_info()
1658 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset); in radeon_atombios_get_lvds_info()
1659 lvds->native_mode.vsync_end = lvds->native_mode.vsync_start + in radeon_atombios_get_lvds_info()
1660 le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); in radeon_atombios_get_lvds_info()
1661 lvds->panel_pwr_delay = in radeon_atombios_get_lvds_info()
1662 le16_to_cpu(lvds_info->info.usOffDelayInMs); in radeon_atombios_get_lvds_info()
1663 lvds->lcd_misc = lvds_info->info.ucLVDS_Misc; in radeon_atombios_get_lvds_info()
1665 misc = le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess); in radeon_atombios_get_lvds_info()
1667 lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atombios_get_lvds_info()
1669 lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atombios_get_lvds_info()
1671 lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC; in radeon_atombios_get_lvds_info()
1673 lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atombios_get_lvds_info()
1675 lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atombios_get_lvds_info()
1677 lvds->native_mode.width_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageHSize); in radeon_atombios_get_lvds_info()
1678 lvds->native_mode.height_mm = le16_to_cpu(lvds_info->info.sLCDTiming.usImageVSize); in radeon_atombios_get_lvds_info()
1681 drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V); in radeon_atombios_get_lvds_info()
1683 lvds->lcd_ss_id = lvds_info->info.ucSS_Id; in radeon_atombios_get_lvds_info()
1685 encoder->native_mode = lvds->native_mode; in radeon_atombios_get_lvds_info()
1688 lvds->linkb = true; in radeon_atombios_get_lvds_info()
1690 lvds->linkb = false; in radeon_atombios_get_lvds_info()
1693 if (le16_to_cpu(lvds_info->info.usModePatchTableOffset)) { in radeon_atombios_get_lvds_info()
1701 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1702 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1705 record = (u8 *)(mode_info->atom_context->bios + in radeon_atombios_get_lvds_info()
1707 le16_to_cpu(lvds_info->info.usModePatchTableOffset)); in radeon_atombios_get_lvds_info()
1721 if (fake_edid_record->ucFakeEDIDLength) { in radeon_atombios_get_lvds_info()
1724 max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1727 memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], in radeon_atombios_get_lvds_info()
1728 fake_edid_record->ucFakeEDIDLength); in radeon_atombios_get_lvds_info()
1731 rdev->mode_info.bios_hardcoded_edid = edid; in radeon_atombios_get_lvds_info()
1732 rdev->mode_info.bios_hardcoded_edid_size = edid_size; in radeon_atombios_get_lvds_info()
1737 record += fake_edid_record->ucFakeEDIDLength ? in radeon_atombios_get_lvds_info()
1738 fake_edid_record->ucFakeEDIDLength + 2 : in radeon_atombios_get_lvds_info()
1743 lvds->native_mode.width_mm = panel_res_record->usHSize; in radeon_atombios_get_lvds_info()
1744 lvds->native_mode.height_mm = panel_res_record->usVSize; in radeon_atombios_get_lvds_info()
1748 DRM_ERROR("Bad LCD record %d\n", *record); in radeon_atombios_get_lvds_info()
1763 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_primary_dac_info()
1764 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_primary_dac_info()
1765 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_primary_dac_info()
1773 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_primary_dac_info()
1776 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_primary_dac_info()
1783 bg = dac_info->ucDAC1_BG_Adjustment; in radeon_atombios_get_primary_dac_info()
1784 dac = dac_info->ucDAC1_DAC_Adjustment; in radeon_atombios_get_primary_dac_info()
1785 p_dac->ps2_pdac_adj = (bg << 8) | (dac); in radeon_atombios_get_primary_dac_info()
1794 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atom_get_tv_timings()
1802 if (!atom_parse_data_header(mode_info->atom_context, data_index, NULL, in radeon_atom_get_tv_timings()
1808 tv_info = (ATOM_ANALOG_TV_INFO *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1812 mode->crtc_htotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total); in radeon_atom_get_tv_timings()
1813 mode->crtc_hdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp); in radeon_atom_get_tv_timings()
1814 mode->crtc_hsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart); in radeon_atom_get_tv_timings()
1815 mode->crtc_hsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart) + in radeon_atom_get_tv_timings()
1816 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth); in radeon_atom_get_tv_timings()
1818 mode->crtc_vtotal = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total); in radeon_atom_get_tv_timings()
1819 mode->crtc_vdisplay = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp); in radeon_atom_get_tv_timings()
1820 mode->crtc_vsync_start = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart); in radeon_atom_get_tv_timings()
1821 mode->crtc_vsync_end = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart) + in radeon_atom_get_tv_timings()
1822 le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth); in radeon_atom_get_tv_timings()
1824 mode->flags = 0; in radeon_atom_get_tv_timings()
1825 misc = le16_to_cpu(tv_info->aModeTimings[index].susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1827 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1829 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1831 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1833 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1835 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1837 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1838 le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10; in radeon_atom_get_tv_timings()
1842 mode->crtc_htotal -= 1; in radeon_atom_get_tv_timings()
1843 mode->crtc_vtotal -= 1; in radeon_atom_get_tv_timings()
1847 tv_info_v1_2 = (ATOM_ANALOG_TV_INFO_V1_2 *)(mode_info->atom_context->bios + data_offset); in radeon_atom_get_tv_timings()
1851 dtd_timings = &tv_info_v1_2->aModeTimings[index]; in radeon_atom_get_tv_timings()
1852 mode->crtc_htotal = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1853 le16_to_cpu(dtd_timings->usHBlanking_Time); in radeon_atom_get_tv_timings()
1854 mode->crtc_hdisplay = le16_to_cpu(dtd_timings->usHActive); in radeon_atom_get_tv_timings()
1855 mode->crtc_hsync_start = le16_to_cpu(dtd_timings->usHActive) + in radeon_atom_get_tv_timings()
1856 le16_to_cpu(dtd_timings->usHSyncOffset); in radeon_atom_get_tv_timings()
1857 mode->crtc_hsync_end = mode->crtc_hsync_start + in radeon_atom_get_tv_timings()
1858 le16_to_cpu(dtd_timings->usHSyncWidth); in radeon_atom_get_tv_timings()
1860 mode->crtc_vtotal = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1861 le16_to_cpu(dtd_timings->usVBlanking_Time); in radeon_atom_get_tv_timings()
1862 mode->crtc_vdisplay = le16_to_cpu(dtd_timings->usVActive); in radeon_atom_get_tv_timings()
1863 mode->crtc_vsync_start = le16_to_cpu(dtd_timings->usVActive) + in radeon_atom_get_tv_timings()
1864 le16_to_cpu(dtd_timings->usVSyncOffset); in radeon_atom_get_tv_timings()
1865 mode->crtc_vsync_end = mode->crtc_vsync_start + in radeon_atom_get_tv_timings()
1866 le16_to_cpu(dtd_timings->usVSyncWidth); in radeon_atom_get_tv_timings()
1868 mode->flags = 0; in radeon_atom_get_tv_timings()
1869 misc = le16_to_cpu(dtd_timings->susModeMiscInfo.usAccess); in radeon_atom_get_tv_timings()
1871 mode->flags |= DRM_MODE_FLAG_NVSYNC; in radeon_atom_get_tv_timings()
1873 mode->flags |= DRM_MODE_FLAG_NHSYNC; in radeon_atom_get_tv_timings()
1875 mode->flags |= DRM_MODE_FLAG_CSYNC; in radeon_atom_get_tv_timings()
1877 mode->flags |= DRM_MODE_FLAG_INTERLACE; in radeon_atom_get_tv_timings()
1879 mode->flags |= DRM_MODE_FLAG_DBLSCAN; in radeon_atom_get_tv_timings()
1881 mode->crtc_clock = mode->clock = in radeon_atom_get_tv_timings()
1882 le16_to_cpu(dtd_timings->usPixClk) * 10; in radeon_atom_get_tv_timings()
1891 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_info()
1898 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_info()
1902 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_info()
1904 switch (tv_info->ucTV_BootUpDefaultStandard) { in radeon_atombios_get_tv_info()
1911 DRM_DEBUG_KMS("Default TV standard: NTSC-J\n"); in radeon_atombios_get_tv_info()
1919 DRM_DEBUG_KMS("Default TV standard: PAL-M\n"); in radeon_atombios_get_tv_info()
1923 DRM_DEBUG_KMS("Default TV standard: PAL-N\n"); in radeon_atombios_get_tv_info()
1927 DRM_DEBUG_KMS("Default TV standard: PAL-CN\n"); in radeon_atombios_get_tv_info()
1931 DRM_DEBUG_KMS("Default TV standard: PAL-60\n"); in radeon_atombios_get_tv_info()
1949 struct drm_device *dev = encoder->base.dev; in radeon_atombios_get_tv_dac_info()
1950 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_get_tv_dac_info()
1951 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_tv_dac_info()
1959 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_tv_dac_info()
1963 (mode_info->atom_context->bios + data_offset); in radeon_atombios_get_tv_dac_info()
1970 bg = dac_info->ucDAC2_CRT2_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1971 dac = dac_info->ucDAC2_CRT2_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1972 tv_dac->ps2_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1974 bg = dac_info->ucDAC2_PAL_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1975 dac = dac_info->ucDAC2_PAL_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1976 tv_dac->pal_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1978 bg = dac_info->ucDAC2_NTSC_BG_Adjustment; in radeon_atombios_get_tv_dac_info()
1979 dac = dac_info->ucDAC2_NTSC_DAC_Adjustment; in radeon_atombios_get_tv_dac_info()
1980 tv_dac->ntsc_tvdac_adj = (bg << 16) | (dac << 20); in radeon_atombios_get_tv_dac_info()
1982 tv_dac->tv_std = radeon_atombios_get_tv_info(rdev); in radeon_atombios_get_tv_dac_info()
2008 "adt7473",
2047 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_misc_flags_1_3()
2048 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_misc_flags_1_3()
2051 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2054 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2057 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2060 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2063 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2065 rdev->pm.power_state[state_index].flags &= in radeon_atombios_parse_misc_flags_1_3()
2069 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2072 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_misc_flags_1_3()
2074 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_misc_flags_1_3()
2075 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_misc_flags_1_3()
2076 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_parse_misc_flags_1_3()
2078 rdev->pm.power_state[state_index].clock_info[0].flags |= in radeon_atombios_parse_misc_flags_1_3()
2085 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_1_3()
2095 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_1_3()
2098 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_1_3()
2101 if ((power_info->info.ucOverdriveThermalController > 0) && in radeon_atombios_parse_power_table_1_3()
2102 (power_info->info.ucOverdriveThermalController < ARRAY_SIZE(thermal_controller_names))) { in radeon_atombios_parse_power_table_1_3()
2104 thermal_controller_names[power_info->info.ucOverdriveThermalController], in radeon_atombios_parse_power_table_1_3()
2105 power_info->info.ucOverdriveControllerAddress >> 1); in radeon_atombios_parse_power_table_1_3()
2106 i2c_bus = radeon_lookup_i2c_gpio(rdev, power_info->info.ucOverdriveI2cLine); in radeon_atombios_parse_power_table_1_3()
2107 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_parse_power_table_1_3()
2108 if (rdev->pm.i2c_bus) { in radeon_atombios_parse_power_table_1_3()
2110 const char *name = thermal_controller_names[power_info->info. in radeon_atombios_parse_power_table_1_3()
2112 info.addr = power_info->info.ucOverdriveControllerAddress >> 1; in radeon_atombios_parse_power_table_1_3()
2114 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_parse_power_table_1_3()
2117 num_modes = power_info->info.ucNumOfPowerModeEntries; in radeon_atombios_parse_power_table_1_3()
2122 rdev->pm.power_state = kcalloc(num_modes, in radeon_atombios_parse_power_table_1_3()
2125 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_1_3()
2129 rdev->pm.power_state[state_index].clock_info = in radeon_atombios_parse_power_table_1_3()
2132 if (!rdev->pm.power_state[state_index].clock_info) in radeon_atombios_parse_power_table_1_3()
2134 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_parse_power_table_1_3()
2135 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_parse_power_table_1_3()
2138 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2139 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usMemoryClock); in radeon_atombios_parse_power_table_1_3()
2140 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2141 le16_to_cpu(power_info->info.asPowerPlayInfo[i].usEngineClock); in radeon_atombios_parse_power_table_1_3()
2143 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2144 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2146 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2147 power_info->info.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2148 misc = le32_to_cpu(power_info->info.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2151 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2153 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2155 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2157 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2160 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2163 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2165 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2166 power_info->info.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2168 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2173 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2174 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2175 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2176 le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2178 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2179 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2181 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2182 power_info->info_2.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2183 misc = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2184 misc2 = le32_to_cpu(power_info->info_2.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2187 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2189 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2191 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2193 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2196 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2199 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2201 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2202 power_info->info_2.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2204 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2209 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_1_3()
2210 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMemoryClock); in radeon_atombios_parse_power_table_1_3()
2211 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_1_3()
2212 le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulEngineClock); in radeon_atombios_parse_power_table_1_3()
2214 if ((rdev->pm.power_state[state_index].clock_info[0].mclk == 0) || in radeon_atombios_parse_power_table_1_3()
2215 (rdev->pm.power_state[state_index].clock_info[0].sclk == 0)) in radeon_atombios_parse_power_table_1_3()
2217 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_power_table_1_3()
2218 power_info->info_3.asPowerPlayInfo[i].ucNumPciELanes; in radeon_atombios_parse_power_table_1_3()
2219 misc = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo); in radeon_atombios_parse_power_table_1_3()
2220 misc2 = le32_to_cpu(power_info->info_3.asPowerPlayInfo[i].ulMiscInfo2); in radeon_atombios_parse_power_table_1_3()
2223 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2225 rdev->pm.power_state[state_index].clock_info[0].voltage.gpio = in radeon_atombios_parse_power_table_1_3()
2227 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex); in radeon_atombios_parse_power_table_1_3()
2229 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2232 rdev->pm.power_state[state_index].clock_info[0].voltage.active_high = in radeon_atombios_parse_power_table_1_3()
2235 rdev->pm.power_state[state_index].clock_info[0].voltage.type = in radeon_atombios_parse_power_table_1_3()
2237 rdev->pm.power_state[state_index].clock_info[0].voltage.vddc_id = in radeon_atombios_parse_power_table_1_3()
2238 power_info->info_3.asPowerPlayInfo[i].ucVoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2240 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_enabled = in radeon_atombios_parse_power_table_1_3()
2242 rdev->pm.power_state[state_index].clock_info[0].voltage.vddci_id = in radeon_atombios_parse_power_table_1_3()
2243 power_info->info_3.asPowerPlayInfo[i].ucVDDCI_VoltageDropIndex; in radeon_atombios_parse_power_table_1_3()
2246 rdev->pm.power_state[state_index].flags = RADEON_PM_STATE_SINGLE_DISPLAY_ONLY; in radeon_atombios_parse_power_table_1_3()
2253 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_1_3()
2254 rdev->pm.power_state[state_index - 1].type = in radeon_atombios_parse_power_table_1_3()
2256 rdev->pm.default_power_state_index = state_index - 1; in radeon_atombios_parse_power_table_1_3()
2257 rdev->pm.power_state[state_index - 1].default_clock_mode = in radeon_atombios_parse_power_table_1_3()
2258 &rdev->pm.power_state[state_index - 1].clock_info[0]; in radeon_atombios_parse_power_table_1_3()
2259 rdev->pm.power_state[state_index].flags &= in radeon_atombios_parse_power_table_1_3()
2261 rdev->pm.power_state[state_index].misc = 0; in radeon_atombios_parse_power_table_1_3()
2262 rdev->pm.power_state[state_index].misc2 = 0; in radeon_atombios_parse_power_table_1_3()
2273 if (controller->ucType > 0) { in radeon_atombios_add_pplib_thermal_controller()
2274 if (controller->ucFanParameters & ATOM_PP_FANPARAMETERS_NOFAN) in radeon_atombios_add_pplib_thermal_controller()
2275 rdev->pm.no_fan = true; in radeon_atombios_add_pplib_thermal_controller()
2276 rdev->pm.fan_pulses_per_revolution = in radeon_atombios_add_pplib_thermal_controller()
2277 controller->ucFanParameters & ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK; in radeon_atombios_add_pplib_thermal_controller()
2278 if (rdev->pm.fan_pulses_per_revolution) { in radeon_atombios_add_pplib_thermal_controller()
2279 rdev->pm.fan_min_rpm = controller->ucFanMinRPM; in radeon_atombios_add_pplib_thermal_controller()
2280 rdev->pm.fan_max_rpm = controller->ucFanMaxRPM; in radeon_atombios_add_pplib_thermal_controller()
2282 if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV6xx) { in radeon_atombios_add_pplib_thermal_controller()
2284 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2286 rdev->pm.int_thermal_type = THERMAL_TYPE_RV6XX; in radeon_atombios_add_pplib_thermal_controller()
2287 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_RV770) { in radeon_atombios_add_pplib_thermal_controller()
2289 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2291 rdev->pm.int_thermal_type = THERMAL_TYPE_RV770; in radeon_atombios_add_pplib_thermal_controller()
2292 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_EVERGREEN) { in radeon_atombios_add_pplib_thermal_controller()
2294 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2296 rdev->pm.int_thermal_type = THERMAL_TYPE_EVERGREEN; in radeon_atombios_add_pplib_thermal_controller()
2297 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SUMO) { in radeon_atombios_add_pplib_thermal_controller()
2299 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2301 rdev->pm.int_thermal_type = THERMAL_TYPE_SUMO; in radeon_atombios_add_pplib_thermal_controller()
2302 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_NISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2304 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2306 rdev->pm.int_thermal_type = THERMAL_TYPE_NI; in radeon_atombios_add_pplib_thermal_controller()
2307 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_SISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2309 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2311 rdev->pm.int_thermal_type = THERMAL_TYPE_SI; in radeon_atombios_add_pplib_thermal_controller()
2312 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_CISLANDS) { in radeon_atombios_add_pplib_thermal_controller()
2314 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2316 rdev->pm.int_thermal_type = THERMAL_TYPE_CI; in radeon_atombios_add_pplib_thermal_controller()
2317 } else if (controller->ucType == ATOM_PP_THERMALCONTROLLER_KAVERI) { in radeon_atombios_add_pplib_thermal_controller()
2319 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2321 rdev->pm.int_thermal_type = THERMAL_TYPE_KV; in radeon_atombios_add_pplib_thermal_controller()
2322 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2325 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2327 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL_GPIO; in radeon_atombios_add_pplib_thermal_controller()
2328 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2330 DRM_INFO("ADT7473 with internal thermal controller %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2331 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2333 rdev->pm.int_thermal_type = THERMAL_TYPE_ADT7473_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2334 } else if (controller->ucType == in radeon_atombios_add_pplib_thermal_controller()
2337 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2339 rdev->pm.int_thermal_type = THERMAL_TYPE_EMC2103_WITH_INTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2340 } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { in radeon_atombios_add_pplib_thermal_controller()
2342 pp_lib_thermal_controller_names[controller->ucType], in radeon_atombios_add_pplib_thermal_controller()
2343 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2344 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2346 rdev->pm.int_thermal_type = THERMAL_TYPE_EXTERNAL; in radeon_atombios_add_pplib_thermal_controller()
2347 i2c_bus = radeon_lookup_i2c_gpio(rdev, controller->ucI2cLine); in radeon_atombios_add_pplib_thermal_controller()
2348 rdev->pm.i2c_bus = radeon_i2c_lookup(rdev, &i2c_bus); in radeon_atombios_add_pplib_thermal_controller()
2349 if (rdev->pm.i2c_bus) { in radeon_atombios_add_pplib_thermal_controller()
2351 const char *name = pp_lib_thermal_controller_names[controller->ucType]; in radeon_atombios_add_pplib_thermal_controller()
2352 info.addr = controller->ucI2cAddress >> 1; in radeon_atombios_add_pplib_thermal_controller()
2354 i2c_new_client_device(&rdev->pm.i2c_bus->adapter, &info); in radeon_atombios_add_pplib_thermal_controller()
2357 DRM_INFO("Unknown thermal controller type %d at 0x%02x %s fan control\n", in radeon_atombios_add_pplib_thermal_controller()
2358 controller->ucType, in radeon_atombios_add_pplib_thermal_controller()
2359 controller->ucI2cAddress >> 1, in radeon_atombios_add_pplib_thermal_controller()
2360 (controller->ucFanParameters & in radeon_atombios_add_pplib_thermal_controller()
2369 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_default_voltages()
2379 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_default_voltages()
2382 (union firmware_info *)(mode_info->atom_context->bios + in radeon_atombios_get_default_voltages()
2384 *vddc = le16_to_cpu(firmware_info->info_14.usBootUpVDDCVoltage); in radeon_atombios_get_default_voltages()
2386 *vddci = le16_to_cpu(firmware_info->info_22.usBootUpVDDCIVoltage); in radeon_atombios_get_default_voltages()
2387 *mvdd = le16_to_cpu(firmware_info->info_22.usBootUpMVDDCVoltage); in radeon_atombios_get_default_voltages()
2397 u32 misc = le32_to_cpu(non_clock_info->ulCapsAndSettings); in radeon_atombios_parse_pplib_non_clock_info()
2398 u32 misc2 = le16_to_cpu(non_clock_info->usClassification); in radeon_atombios_parse_pplib_non_clock_info()
2403 rdev->pm.power_state[state_index].misc = misc; in radeon_atombios_parse_pplib_non_clock_info()
2404 rdev->pm.power_state[state_index].misc2 = misc2; in radeon_atombios_parse_pplib_non_clock_info()
2405 rdev->pm.power_state[state_index].pcie_lanes = in radeon_atombios_parse_pplib_non_clock_info()
2410 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2414 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2418 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2423 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2427 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_parse_pplib_non_clock_info()
2429 rdev->pm.power_state[state_index].flags |= in radeon_atombios_parse_pplib_non_clock_info()
2432 rdev->pm.power_state[state_index].type = in radeon_atombios_parse_pplib_non_clock_info()
2434 rdev->pm.default_power_state_index = state_index; in radeon_atombios_parse_pplib_non_clock_info()
2435 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_parse_pplib_non_clock_info()
2436 &rdev->pm.power_state[state_index].clock_info[mode_index - 1]; in radeon_atombios_parse_pplib_non_clock_info()
2437 if ((rdev->family >= CHIP_BARTS) && !(rdev->flags & RADEON_IS_IGP)) { in radeon_atombios_parse_pplib_non_clock_info()
2439 rdev->pm.default_sclk = rdev->pm.power_state[state_index].clock_info[0].sclk; in radeon_atombios_parse_pplib_non_clock_info()
2440 rdev->pm.default_mclk = rdev->pm.power_state[state_index].clock_info[0].mclk; in radeon_atombios_parse_pplib_non_clock_info()
2441 rdev->pm.default_vddc = rdev->pm.power_state[state_index].clock_info[0].voltage.voltage; in radeon_atombios_parse_pplib_non_clock_info()
2442 rdev->pm.default_vddci = rdev->pm.power_state[state_index].clock_info[0].voltage.vddci; in radeon_atombios_parse_pplib_non_clock_info()
2452 rdev->pm.power_state[state_index].clock_info[j].mclk = in radeon_atombios_parse_pplib_non_clock_info()
2453 rdev->clock.default_mclk; in radeon_atombios_parse_pplib_non_clock_info()
2454 rdev->pm.power_state[state_index].clock_info[j].sclk = in radeon_atombios_parse_pplib_non_clock_info()
2455 rdev->clock.default_sclk; in radeon_atombios_parse_pplib_non_clock_info()
2457 rdev->pm.power_state[state_index].clock_info[j].voltage.voltage = in radeon_atombios_parse_pplib_non_clock_info()
2460 rdev->pm.power_state[state_index].clock_info[j].voltage.vddci = in radeon_atombios_parse_pplib_non_clock_info()
2474 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2475 if (rdev->family >= CHIP_PALM) { in radeon_atombios_parse_pplib_clock_info()
2476 sclk = le16_to_cpu(clock_info->sumo.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2477 sclk |= clock_info->sumo.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2478 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2480 sclk = le16_to_cpu(clock_info->rs780.usLowEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2481 sclk |= clock_info->rs780.ucLowEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2482 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2484 } else if (rdev->family >= CHIP_BONAIRE) { in radeon_atombios_parse_pplib_clock_info()
2485 sclk = le16_to_cpu(clock_info->ci.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2486 sclk |= clock_info->ci.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2487 mclk = le16_to_cpu(clock_info->ci.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2488 mclk |= clock_info->ci.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2489 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2490 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2491 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2493 } else if (rdev->family >= CHIP_TAHITI) { in radeon_atombios_parse_pplib_clock_info()
2494 sclk = le16_to_cpu(clock_info->si.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2495 sclk |= clock_info->si.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2496 mclk = le16_to_cpu(clock_info->si.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2497 mclk |= clock_info->si.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2498 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2499 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2500 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2502 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2503 le16_to_cpu(clock_info->si.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2504 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2505 le16_to_cpu(clock_info->si.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2506 } else if (rdev->family >= CHIP_CEDAR) { in radeon_atombios_parse_pplib_clock_info()
2507 sclk = le16_to_cpu(clock_info->evergreen.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2508 sclk |= clock_info->evergreen.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2509 mclk = le16_to_cpu(clock_info->evergreen.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2510 mclk |= clock_info->evergreen.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2511 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2512 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2513 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2515 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2516 le16_to_cpu(clock_info->evergreen.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2517 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.vddci = in radeon_atombios_parse_pplib_clock_info()
2518 le16_to_cpu(clock_info->evergreen.usVDDCI); in radeon_atombios_parse_pplib_clock_info()
2520 sclk = le16_to_cpu(clock_info->r600.usEngineClockLow); in radeon_atombios_parse_pplib_clock_info()
2521 sclk |= clock_info->r600.ucEngineClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2522 mclk = le16_to_cpu(clock_info->r600.usMemoryClockLow); in radeon_atombios_parse_pplib_clock_info()
2523 mclk |= clock_info->r600.ucMemoryClockHigh << 16; in radeon_atombios_parse_pplib_clock_info()
2524 rdev->pm.power_state[state_index].clock_info[mode_index].mclk = mclk; in radeon_atombios_parse_pplib_clock_info()
2525 rdev->pm.power_state[state_index].clock_info[mode_index].sclk = sclk; in radeon_atombios_parse_pplib_clock_info()
2526 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.type = in radeon_atombios_parse_pplib_clock_info()
2528 rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = in radeon_atombios_parse_pplib_clock_info()
2529 le16_to_cpu(clock_info->r600.usVDDC); in radeon_atombios_parse_pplib_clock_info()
2533 switch (rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage) { in radeon_atombios_parse_pplib_clock_info()
2543 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 = vddc; in radeon_atombios_parse_pplib_clock_info()
2551 if (rdev->flags & RADEON_IS_IGP) { in radeon_atombios_parse_pplib_clock_info()
2553 if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0) in radeon_atombios_parse_pplib_clock_info()
2557 if ((rdev->pm.power_state[state_index].clock_info[mode_index].mclk == 0) || in radeon_atombios_parse_pplib_clock_info()
2558 (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0)) in radeon_atombios_parse_pplib_clock_info()
2566 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_4_5()
2578 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_4_5()
2581 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_4_5()
2583 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_4_5()
2584 if (power_info->pplib.ucNumStates == 0) in radeon_atombios_parse_power_table_4_5()
2586 rdev->pm.power_state = kcalloc(power_info->pplib.ucNumStates, in radeon_atombios_parse_power_table_4_5()
2589 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_4_5()
2592 for (i = 0; i < power_info->pplib.ucNumStates; i++) { in radeon_atombios_parse_power_table_4_5()
2595 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2596 le16_to_cpu(power_info->pplib.usStateArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2597 i * power_info->pplib.ucStateEntrySize); in radeon_atombios_parse_power_table_4_5()
2599 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2600 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2601 (power_state->v1.ucNonClockStateIndex * in radeon_atombios_parse_power_table_4_5()
2602 power_info->pplib.ucNonClockSize)); in radeon_atombios_parse_power_table_4_5()
2603 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_4_5()
2604 kcalloc((power_info->pplib.ucStateEntrySize - 1) ? in radeon_atombios_parse_power_table_4_5()
2605 (power_info->pplib.ucStateEntrySize - 1) : 1, in radeon_atombios_parse_power_table_4_5()
2608 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_4_5()
2610 if (power_info->pplib.ucStateEntrySize - 1) { in radeon_atombios_parse_power_table_4_5()
2611 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) { in radeon_atombios_parse_power_table_4_5()
2613 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_4_5()
2614 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) + in radeon_atombios_parse_power_table_4_5()
2615 (power_state->v1.ucClockStateIndices[j] * in radeon_atombios_parse_power_table_4_5()
2616 power_info->pplib.ucClockInfoSize)); in radeon_atombios_parse_power_table_4_5()
2624 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_4_5()
2625 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_4_5()
2626 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_4_5()
2627 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_4_5()
2630 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_4_5()
2639 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_4_5()
2640 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_4_5()
2644 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_4_5()
2645 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_4_5()
2647 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_4_5()
2648 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_4_5()
2649 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_4_5()
2656 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_parse_power_table_6()
2672 if (!atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_parse_power_table_6()
2675 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); in radeon_atombios_parse_power_table_6()
2677 radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); in radeon_atombios_parse_power_table_6()
2679 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2680 le16_to_cpu(power_info->pplib.usStateArrayOffset)); in radeon_atombios_parse_power_table_6()
2682 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2683 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2685 (mode_info->atom_context->bios + data_offset + in radeon_atombios_parse_power_table_6()
2686 le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); in radeon_atombios_parse_power_table_6()
2687 if (state_array->ucNumEntries == 0) in radeon_atombios_parse_power_table_6()
2689 rdev->pm.power_state = kcalloc(state_array->ucNumEntries, in radeon_atombios_parse_power_table_6()
2692 if (!rdev->pm.power_state) in radeon_atombios_parse_power_table_6()
2694 power_state_offset = (u8 *)state_array->states; in radeon_atombios_parse_power_table_6()
2695 for (i = 0; i < state_array->ucNumEntries; i++) { in radeon_atombios_parse_power_table_6()
2698 non_clock_array_index = power_state->v2.nonClockInfoIndex; in radeon_atombios_parse_power_table_6()
2700 &non_clock_info_array->nonClockInfo[non_clock_array_index]; in radeon_atombios_parse_power_table_6()
2701 rdev->pm.power_state[i].clock_info = in radeon_atombios_parse_power_table_6()
2702 kcalloc(power_state->v2.ucNumDPMLevels ? in radeon_atombios_parse_power_table_6()
2703 power_state->v2.ucNumDPMLevels : 1, in radeon_atombios_parse_power_table_6()
2706 if (!rdev->pm.power_state[i].clock_info) in radeon_atombios_parse_power_table_6()
2708 if (power_state->v2.ucNumDPMLevels) { in radeon_atombios_parse_power_table_6()
2709 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { in radeon_atombios_parse_power_table_6()
2710 clock_array_index = power_state->v2.clockInfoIndex[j]; in radeon_atombios_parse_power_table_6()
2712 &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; in radeon_atombios_parse_power_table_6()
2720 rdev->pm.power_state[state_index].clock_info[0].mclk = in radeon_atombios_parse_power_table_6()
2721 rdev->clock.default_mclk; in radeon_atombios_parse_power_table_6()
2722 rdev->pm.power_state[state_index].clock_info[0].sclk = in radeon_atombios_parse_power_table_6()
2723 rdev->clock.default_sclk; in radeon_atombios_parse_power_table_6()
2726 rdev->pm.power_state[state_index].num_clock_modes = mode_index; in radeon_atombios_parse_power_table_6()
2732 power_state_offset += 2 + power_state->v2.ucNumDPMLevels; in radeon_atombios_parse_power_table_6()
2736 if (rdev->pm.power_state[i].num_clock_modes > 1) in radeon_atombios_parse_power_table_6()
2737 rdev->pm.power_state[i].clock_info[0].flags |= in radeon_atombios_parse_power_table_6()
2741 if (rdev->pm.default_power_state_index == -1) { in radeon_atombios_parse_power_table_6()
2742 rdev->pm.power_state[0].type = in radeon_atombios_parse_power_table_6()
2744 rdev->pm.default_power_state_index = 0; in radeon_atombios_parse_power_table_6()
2745 rdev->pm.power_state[0].default_clock_mode = in radeon_atombios_parse_power_table_6()
2746 &rdev->pm.power_state[0].clock_info[0]; in radeon_atombios_parse_power_table_6()
2753 struct radeon_mode_info *mode_info = &rdev->mode_info; in radeon_atombios_get_power_modes()
2759 rdev->pm.default_power_state_index = -1; in radeon_atombios_get_power_modes()
2761 if (atom_parse_data_header(mode_info->atom_context, index, NULL, in radeon_atombios_get_power_modes()
2782 rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL); in radeon_atombios_get_power_modes()
2783 if (rdev->pm.power_state) { in radeon_atombios_get_power_modes()
2784 rdev->pm.power_state[0].clock_info = in radeon_atombios_get_power_modes()
2788 if (rdev->pm.power_state[0].clock_info) { in radeon_atombios_get_power_modes()
2790 rdev->pm.power_state[state_index].type = in radeon_atombios_get_power_modes()
2792 rdev->pm.power_state[state_index].num_clock_modes = 1; in radeon_atombios_get_power_modes()
2793 rdev->pm.power_state[state_index].clock_info[0].mclk = rdev->clock.default_mclk; in radeon_atombios_get_power_modes()
2794 rdev->pm.power_state[state_index].clock_info[0].sclk = rdev->clock.default_sclk; in radeon_atombios_get_power_modes()
2795 rdev->pm.power_state[state_index].default_clock_mode = in radeon_atombios_get_power_modes()
2796 &rdev->pm.power_state[state_index].clock_info[0]; in radeon_atombios_get_power_modes()
2797 rdev->pm.power_state[state_index].clock_info[0].voltage.type = VOLTAGE_NONE; in radeon_atombios_get_power_modes()
2798 rdev->pm.power_state[state_index].pcie_lanes = 16; in radeon_atombios_get_power_modes()
2799 rdev->pm.default_power_state_index = state_index; in radeon_atombios_get_power_modes()
2800 rdev->pm.power_state[state_index].flags = 0; in radeon_atombios_get_power_modes()
2806 rdev->pm.num_power_states = state_index; in radeon_atombios_get_power_modes()
2808 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; in radeon_atombios_get_power_modes()
2809 rdev->pm.current_clock_mode_index = 0; in radeon_atombios_get_power_modes()
2810 if (rdev->pm.default_power_state_index >= 0) in radeon_atombios_get_power_modes()
2811 rdev->pm.current_vddc = in radeon_atombios_get_power_modes()
2812 rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage; in radeon_atombios_get_power_modes()
2814 rdev->pm.current_vddc = 0; in radeon_atombios_get_power_modes()
2840 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_clock_dividers()
2841 return -EINVAL; in radeon_atom_get_clock_dividers()
2849 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2851 dividers->post_div = args.v1.ucPostDiv; in radeon_atom_get_clock_dividers()
2852 dividers->fb_div = args.v1.ucFbDiv; in radeon_atom_get_clock_dividers()
2853 dividers->enable_post_div = true; in radeon_atom_get_clock_dividers()
2859 if (rdev->family <= CHIP_RV770) { in radeon_atom_get_clock_dividers()
2863 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2865 dividers->post_div = args.v2.ucPostDiv; in radeon_atom_get_clock_dividers()
2866 dividers->fb_div = le16_to_cpu(args.v2.usFbDiv); in radeon_atom_get_clock_dividers()
2867 dividers->ref_div = args.v2.ucAction; in radeon_atom_get_clock_dividers()
2868 if (rdev->family == CHIP_RV770) { in radeon_atom_get_clock_dividers()
2869 dividers->enable_post_div = (le32_to_cpu(args.v2.ulClock) & (1 << 24)) ? in radeon_atom_get_clock_dividers()
2871 dividers->vco_mode = (le32_to_cpu(args.v2.ulClock) & (1 << 25)) ? 1 : 0; in radeon_atom_get_clock_dividers()
2873 dividers->enable_post_div = (dividers->fb_div & 1) ? true : false; in radeon_atom_get_clock_dividers()
2878 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2880 dividers->post_div = args.v3.ucPostDiv; in radeon_atom_get_clock_dividers()
2881 dividers->enable_post_div = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2883 dividers->enable_dithen = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2885 dividers->whole_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2886 dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2887 dividers->ref_div = args.v3.ucRefDiv; in radeon_atom_get_clock_dividers()
2888 dividers->vco_mode = (args.v3.ucCntlFlag & in radeon_atom_get_clock_dividers()
2892 if (rdev->family >= CHIP_TAHITI) in radeon_atom_get_clock_dividers()
2893 return -EINVAL; in radeon_atom_get_clock_dividers()
2898 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2900 dividers->post_div = args.v5.ucPostDiv; in radeon_atom_get_clock_dividers()
2901 dividers->enable_post_div = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2903 dividers->enable_dithen = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2905 dividers->whole_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2906 dividers->frac_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2907 dividers->ref_div = args.v5.ucRefDiv; in radeon_atom_get_clock_dividers()
2908 dividers->vco_mode = (args.v5.ucCntlFlag & in radeon_atom_get_clock_dividers()
2917 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2919 dividers->post_divider = dividers->post_div = args.v4.ucPostDiv; in radeon_atom_get_clock_dividers()
2920 dividers->real_clock = le32_to_cpu(args.v4.ulClock); in radeon_atom_get_clock_dividers()
2928 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_clock_dividers()
2930 dividers->whole_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDiv); in radeon_atom_get_clock_dividers()
2931 dividers->frac_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDivFrac); in radeon_atom_get_clock_dividers()
2932 dividers->ref_div = args.v6_out.ucPllRefDiv; in radeon_atom_get_clock_dividers()
2933 dividers->post_div = args.v6_out.ucPllPostDiv; in radeon_atom_get_clock_dividers()
2934 dividers->flags = args.v6_out.ucPllCntlFlag; in radeon_atom_get_clock_dividers()
2935 dividers->real_clock = le32_to_cpu(args.v6_out.ulClock.ulClock); in radeon_atom_get_clock_dividers()
2936 dividers->post_divider = args.v6_out.ulClock.ucPostDiv; in radeon_atom_get_clock_dividers()
2939 return -EINVAL; in radeon_atom_get_clock_dividers()
2956 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_memory_pll_dividers()
2957 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2969 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_pll_dividers()
2971 mpll_param->clkfrac = le16_to_cpu(args.ulFbDiv.usFbDivFrac); in radeon_atom_get_memory_pll_dividers()
2972 mpll_param->clkf = le16_to_cpu(args.ulFbDiv.usFbDiv); in radeon_atom_get_memory_pll_dividers()
2973 mpll_param->post_div = args.ucPostDiv; in radeon_atom_get_memory_pll_dividers()
2974 mpll_param->dll_speed = args.ucDllSpeed; in radeon_atom_get_memory_pll_dividers()
2975 mpll_param->bwcntl = args.ucBWCntl; in radeon_atom_get_memory_pll_dividers()
2976 mpll_param->vco_mode = in radeon_atom_get_memory_pll_dividers()
2978 mpll_param->yclk_sel = in radeon_atom_get_memory_pll_dividers()
2980 mpll_param->qdr = in radeon_atom_get_memory_pll_dividers()
2982 mpll_param->half_rate = in radeon_atom_get_memory_pll_dividers()
2986 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
2990 return -EINVAL; in radeon_atom_get_memory_pll_dividers()
3002 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_clock_gating()
3010 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_engine_clock()
3019 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_memory_clock()
3031 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_clock()
3040 if (rdev->flags & RADEON_IS_IGP) in radeon_atom_set_memory_clock()
3045 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_memory_clock()
3064 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_engine_dram_timings()
3075 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_update_memory_dll()
3087 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_ac_timing()
3103 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_set_voltage()
3127 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_set_voltage()
3131 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_set_voltage()
3141 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_max_vddc()
3142 return -EINVAL; in radeon_atom_get_max_vddc()
3146 return -EINVAL; in radeon_atom_get_max_vddc()
3152 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3161 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_max_vddc()
3166 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_max_vddc()
3167 return -EINVAL; in radeon_atom_get_max_vddc()
3187 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_leakage_id_from_vbios()
3188 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3197 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_leakage_id_from_vbios()
3202 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_id_from_vbios()
3203 return -EINVAL; in radeon_atom_get_leakage_id_from_vbios()
3224 if (!atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3226 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3229 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3233 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3238 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3240 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3241 le16_to_cpu(profile->usLeakageBinArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3243 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3244 le16_to_cpu(profile->usElbVDDC_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3246 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3247 le16_to_cpu(profile->usElbVDDC_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3249 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3250 le16_to_cpu(profile->usElbVDDCI_IdArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3252 (rdev->mode_info.atom_context->bios + data_offset + in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3253 le16_to_cpu(profile->usElbVDDCI_LevelArrayOffset)); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3255 if (profile->ucElbVDDC_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3256 for (i = 0; i < profile->ucElbVDDC_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3258 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3260 *vddc = vddc_buf[j * profile->ucElbVDDC_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3268 if (profile->ucElbVDDCI_Num > 0) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3269 for (i = 0; i < profile->ucElbVDDCI_Num; i++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3271 for (j = 0; j < profile->ucLeakageBinNum; j++) { in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3273 *vddci = vddci_buf[j * profile->ucElbVDDCI_Num + i]; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3283 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3284 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3288 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3289 return -EINVAL; in radeon_atom_get_leakage_vddc_based_on_leakage_params()
3306 u32 count = rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count; in radeon_atom_get_voltage_evv()
3310 if (rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v == in radeon_atom_get_voltage_evv()
3316 return -EINVAL; in radeon_atom_get_voltage_evv()
3322 cpu_to_le32(rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk); in radeon_atom_get_voltage_evv()
3324 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_evv()
3339 if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) in radeon_atom_get_voltage_gpio_settings()
3340 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3344 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3350 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3358 atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); in radeon_atom_get_voltage_gpio_settings()
3363 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_gpio_settings()
3364 return -EINVAL; in radeon_atom_get_voltage_gpio_settings()
3385 u32 size = le16_to_cpu(v1->sHeader.usStructureSize); in atom_lookup_voltage_object_v1()
3391 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v1()
3394 vo->asFormula.ucNumOfVoltageEntries; in atom_lookup_voltage_object_v1()
3402 u32 size = le16_to_cpu(v2->sHeader.usStructureSize); in atom_lookup_voltage_object_v2()
3408 if (vo->ucVoltageType == voltage_type) in atom_lookup_voltage_object_v2()
3411 (vo->asFormula.ucNumOfVoltageEntries * sizeof(VOLTAGE_LUT_ENTRY)); in atom_lookup_voltage_object_v2()
3419 u32 size = le16_to_cpu(v3->sHeader.usStructureSize); in atom_lookup_voltage_object_v3()
3425 if ((vo->asGpioVoltageObj.sHeader.ucVoltageType == voltage_type) && in atom_lookup_voltage_object_v3()
3426 (vo->asGpioVoltageObj.sHeader.ucVoltageMode == voltage_mode)) in atom_lookup_voltage_object_v3()
3428 offset += le16_to_cpu(vo->asGpioVoltageObj.sHeader.usSize); in atom_lookup_voltage_object_v3()
3443 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_is_voltage_gpio()
3446 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_is_voltage_gpio()
3454 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_is_voltage_gpio()
3456 (voltage_object->v1.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3461 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_is_voltage_gpio()
3463 (voltage_object->v2.asControl.ucVoltageControlId == VOLTAGE_CONTROLLED_BY_GPIO)) in radeon_atom_is_voltage_gpio()
3474 if (atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_is_voltage_gpio()
3502 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_svi2_info()
3505 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_svi2_info()
3512 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_svi2_info()
3516 *svd_gpio_id = voltage_object->v3.asSVID2Obj.ucSVDGpioId; in radeon_atom_get_svi2_info()
3517 *svc_gpio_id = voltage_object->v3.asSVID2Obj.ucSVCGpioId; in radeon_atom_get_svi2_info()
3519 return -EINVAL; in radeon_atom_get_svi2_info()
3524 return -EINVAL; in radeon_atom_get_svi2_info()
3529 return -EINVAL; in radeon_atom_get_svi2_info()
3545 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_max_voltage()
3548 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_max_voltage()
3553 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_max_voltage()
3556 &voltage_object->v1.asFormula; in radeon_atom_get_max_voltage()
3557 if (formula->ucFlag & 1) in radeon_atom_get_max_voltage()
3559 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3560 formula->ucNumOfVoltageEntries / 2 * in radeon_atom_get_max_voltage()
3561 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3564 le16_to_cpu(formula->usVoltageBaseLevel) + in radeon_atom_get_max_voltage()
3565 (formula->ucNumOfVoltageEntries - 1) * in radeon_atom_get_max_voltage()
3566 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_max_voltage()
3572 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_max_voltage()
3575 &voltage_object->v2.asFormula; in radeon_atom_get_max_voltage()
3576 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_max_voltage()
3578 ((u8 *)&formula->asVIDAdjustEntries[0] + in radeon_atom_get_max_voltage()
3579 (sizeof(VOLTAGE_LUT_ENTRY) * (formula->ucNumOfVoltageEntries - 1))); in radeon_atom_get_max_voltage()
3581 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_max_voltage()
3588 return -EINVAL; in radeon_atom_get_max_voltage()
3592 return -EINVAL; in radeon_atom_get_max_voltage()
3604 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_min_voltage()
3607 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_min_voltage()
3612 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_min_voltage()
3615 &voltage_object->v1.asFormula; in radeon_atom_get_min_voltage()
3617 le16_to_cpu(formula->usVoltageBaseLevel); in radeon_atom_get_min_voltage()
3623 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_min_voltage()
3626 &voltage_object->v2.asFormula; in radeon_atom_get_min_voltage()
3627 if (formula->ucNumOfVoltageEntries) { in radeon_atom_get_min_voltage()
3629 le16_to_cpu(formula->asVIDAdjustEntries[ in radeon_atom_get_min_voltage()
3638 return -EINVAL; in radeon_atom_get_min_voltage()
3642 return -EINVAL; in radeon_atom_get_min_voltage()
3654 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_step()
3657 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_step()
3662 atom_lookup_voltage_object_v1(&voltage_info->v1, voltage_type); in radeon_atom_get_voltage_step()
3665 &voltage_object->v1.asFormula; in radeon_atom_get_voltage_step()
3666 if (formula->ucFlag & 1) in radeon_atom_get_voltage_step()
3668 (le16_to_cpu(formula->usVoltageStep) + 1) / 2; in radeon_atom_get_voltage_step()
3671 le16_to_cpu(formula->usVoltageStep); in radeon_atom_get_voltage_step()
3676 return -EINVAL; in radeon_atom_get_voltage_step()
3679 return -EINVAL; in radeon_atom_get_voltage_step()
3683 return -EINVAL; in radeon_atom_get_voltage_step()
3694 return -EINVAL; in radeon_atom_round_to_true_voltage()
3696 return -EINVAL; in radeon_atom_round_to_true_voltage()
3698 return -EINVAL; in radeon_atom_round_to_true_voltage()
3706 ((nominal_voltage - min_voltage) / voltage_step) * in radeon_atom_round_to_true_voltage()
3723 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_voltage_table()
3726 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_voltage_table()
3733 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_voltage_table()
3734 return -EINVAL; in radeon_atom_get_voltage_table()
3737 atom_lookup_voltage_object_v2(&voltage_info->v2, voltage_type); in radeon_atom_get_voltage_table()
3740 &voltage_object->v2.asFormula; in radeon_atom_get_voltage_table()
3742 if (formula->ucNumOfVoltageEntries > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3743 return -EINVAL; in radeon_atom_get_voltage_table()
3744 lut = &formula->asVIDAdjustEntries[0]; in radeon_atom_get_voltage_table()
3745 for (i = 0; i < formula->ucNumOfVoltageEntries; i++) { in radeon_atom_get_voltage_table()
3746 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3747 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3749 voltage_table->entries[i].value, in radeon_atom_get_voltage_table()
3751 &voltage_table->entries[i].smio_low, in radeon_atom_get_voltage_table()
3752 &voltage_table->mask_low); in radeon_atom_get_voltage_table()
3758 voltage_table->count = formula->ucNumOfVoltageEntries; in radeon_atom_get_voltage_table()
3764 return -EINVAL; in radeon_atom_get_voltage_table()
3771 atom_lookup_voltage_object_v3(&voltage_info->v3, in radeon_atom_get_voltage_table()
3775 &voltage_object->v3.asGpioVoltageObj; in radeon_atom_get_voltage_table()
3777 if (gpio->ucGpioEntryNum > MAX_VOLTAGE_ENTRIES) in radeon_atom_get_voltage_table()
3778 return -EINVAL; in radeon_atom_get_voltage_table()
3779 lut = &gpio->asVolGpioLut[0]; in radeon_atom_get_voltage_table()
3780 for (i = 0; i < gpio->ucGpioEntryNum; i++) { in radeon_atom_get_voltage_table()
3781 voltage_table->entries[i].value = in radeon_atom_get_voltage_table()
3782 le16_to_cpu(lut->usVoltageValue); in radeon_atom_get_voltage_table()
3783 voltage_table->entries[i].smio_low = in radeon_atom_get_voltage_table()
3784 le32_to_cpu(lut->ulVoltageId); in radeon_atom_get_voltage_table()
3788 voltage_table->mask_low = le32_to_cpu(gpio->ulGpioMaskVal); in radeon_atom_get_voltage_table()
3789 voltage_table->count = gpio->ucGpioEntryNum; in radeon_atom_get_voltage_table()
3790 voltage_table->phase_delay = gpio->ucPhaseDelay; in radeon_atom_get_voltage_table()
3796 return -EINVAL; in radeon_atom_get_voltage_table()
3801 return -EINVAL; in radeon_atom_get_voltage_table()
3804 return -EINVAL; in radeon_atom_get_voltage_table()
3823 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_memory_info()
3826 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_memory_info()
3832 if (module_index < vram_info->v1_3.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3834 (ATOM_VRAM_MODULE_V3 *)vram_info->v1_3.aVramInfo; in radeon_atom_get_memory_info()
3837 if (le16_to_cpu(vram_module->usSize) == 0) in radeon_atom_get_memory_info()
3838 return -EINVAL; in radeon_atom_get_memory_info()
3840 ((u8 *)vram_module + le16_to_cpu(vram_module->usSize)); in radeon_atom_get_memory_info()
3842 mem_info->mem_vendor = vram_module->asMemory.ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3843 mem_info->mem_type = vram_module->asMemory.ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3845 return -EINVAL; in radeon_atom_get_memory_info()
3849 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3851 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_memory_info()
3854 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3855 return -EINVAL; in radeon_atom_get_memory_info()
3857 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3859 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3860 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3862 return -EINVAL; in radeon_atom_get_memory_info()
3865 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3866 return -EINVAL; in radeon_atom_get_memory_info()
3873 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_get_memory_info()
3875 (ATOM_VRAM_MODULE_V7 *)vram_info->v2_1.aVramInfo; in radeon_atom_get_memory_info()
3878 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_memory_info()
3879 return -EINVAL; in radeon_atom_get_memory_info()
3881 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_memory_info()
3883 mem_info->mem_vendor = vram_module->ucMemoryVenderID & 0xf; in radeon_atom_get_memory_info()
3884 mem_info->mem_type = vram_module->ucMemoryType & 0xf0; in radeon_atom_get_memory_info()
3886 return -EINVAL; in radeon_atom_get_memory_info()
3889 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3890 return -EINVAL; in radeon_atom_get_memory_info()
3894 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_memory_info()
3895 return -EINVAL; in radeon_atom_get_memory_info()
3899 return -EINVAL; in radeon_atom_get_memory_info()
3915 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_get_mclk_range_table()
3918 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_get_mclk_range_table()
3923 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3924 return -EINVAL; in radeon_atom_get_mclk_range_table()
3927 if (module_index < vram_info->v1_4.ucNumOfVRAMModule) { in radeon_atom_get_mclk_range_table()
3929 (ATOM_VRAM_MODULE_V4 *)vram_info->v1_4.aVramInfo; in radeon_atom_get_mclk_range_table()
3933 if (le16_to_cpu(vram_module->usModuleSize) == 0) in radeon_atom_get_mclk_range_table()
3934 return -EINVAL; in radeon_atom_get_mclk_range_table()
3936 ((u8 *)vram_module + le16_to_cpu(vram_module->usModuleSize)); in radeon_atom_get_mclk_range_table()
3938 mclk_range_table->num_entries = (u8) in radeon_atom_get_mclk_range_table()
3939 ((le16_to_cpu(vram_module->usModuleSize) - offsetof(ATOM_VRAM_MODULE_V4, asMemTiming)) / in radeon_atom_get_mclk_range_table()
3941 format = &vram_module->asMemTiming[0]; in radeon_atom_get_mclk_range_table()
3942 for (i = 0; i < mclk_range_table->num_entries; i++) { in radeon_atom_get_mclk_range_table()
3943 mclk_range_table->mclk[i] = le32_to_cpu(format->ulClkRange); in radeon_atom_get_mclk_range_table()
3948 return -EINVAL; in radeon_atom_get_mclk_range_table()
3951 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3952 return -EINVAL; in radeon_atom_get_mclk_range_table()
3956 DRM_ERROR("new table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3957 return -EINVAL; in radeon_atom_get_mclk_range_table()
3959 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_get_mclk_range_table()
3960 return -EINVAL; in radeon_atom_get_mclk_range_table()
3964 return -EINVAL; in radeon_atom_get_mclk_range_table()
3987 if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, in radeon_atom_init_mc_reg_table()
3990 (rdev->mode_info.atom_context->bios + data_offset); in radeon_atom_init_mc_reg_table()
3993 DRM_ERROR("old table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
3994 return -EINVAL; in radeon_atom_init_mc_reg_table()
3998 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in radeon_atom_init_mc_reg_table()
4001 ((u8 *)vram_info + le16_to_cpu(vram_info->v2_1.usMemClkPatchTblOffset)); in radeon_atom_init_mc_reg_table()
4005 le16_to_cpu(reg_block->usRegIndexTblSize)); in radeon_atom_init_mc_reg_table()
4006 ATOM_INIT_REG_INDEX_FORMAT *format = ®_block->asRegIndexBuf[0]; in radeon_atom_init_mc_reg_table()
4007 num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / in radeon_atom_init_mc_reg_table()
4008 sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; in radeon_atom_init_mc_reg_table()
4010 return -EINVAL; in radeon_atom_init_mc_reg_table()
4012 if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER) in radeon_atom_init_mc_reg_table()
4014 reg_table->mc_reg_address[i].s1 = in radeon_atom_init_mc_reg_table()
4015 (u16)(le16_to_cpu(format->usRegIndex)); in radeon_atom_init_mc_reg_table()
4016 reg_table->mc_reg_address[i].pre_reg_data = in radeon_atom_init_mc_reg_table()
4017 (u8)(format->ucPreRegDataLength); in radeon_atom_init_mc_reg_table()
4022 reg_table->last = i; in radeon_atom_init_mc_reg_table()
4028 reg_table->mc_reg_table_entry[num_ranges].mclk_max = in radeon_atom_init_mc_reg_table()
4031 for (i = 0, j = 1; i < reg_table->last; i++) { in radeon_atom_init_mc_reg_table()
4032 if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { in radeon_atom_init_mc_reg_table()
4033 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4036 } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { in radeon_atom_init_mc_reg_table()
4037 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in radeon_atom_init_mc_reg_table()
4038 reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1]; in radeon_atom_init_mc_reg_table()
4044 ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); in radeon_atom_init_mc_reg_table()
4047 return -EINVAL; in radeon_atom_init_mc_reg_table()
4048 reg_table->num_entries = num_ranges; in radeon_atom_init_mc_reg_table()
4050 return -EINVAL; in radeon_atom_init_mc_reg_table()
4053 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4054 return -EINVAL; in radeon_atom_init_mc_reg_table()
4058 DRM_ERROR("Unknown table version %d, %d\n", frev, crev); in radeon_atom_init_mc_reg_table()
4059 return -EINVAL; in radeon_atom_init_mc_reg_table()
4063 return -EINVAL; in radeon_atom_init_mc_reg_table()
4068 struct radeon_device *rdev = dev->dev_private; in radeon_atom_initialize_bios_scratch_regs()
4071 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4089 if (rdev->family >= CHIP_R600) { in radeon_atom_initialize_bios_scratch_regs()
4104 if (rdev->family >= CHIP_R600) in radeon_save_bios_scratch_regs()
4110 rdev->bios_scratch[i] = RREG32(scratch_reg + (i * 4)); in radeon_save_bios_scratch_regs()
4118 if (rdev->family >= CHIP_R600) in radeon_restore_bios_scratch_regs()
4124 WREG32(scratch_reg + (i * 4), rdev->bios_scratch[i]); in radeon_restore_bios_scratch_regs()
4129 struct drm_device *dev = encoder->dev; in radeon_atom_output_lock()
4130 struct radeon_device *rdev = dev->dev_private; in radeon_atom_output_lock()
4133 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4146 if (rdev->family >= CHIP_R600) in radeon_atom_output_lock()
4158 struct drm_device *dev = connector->dev; in radeon_atombios_connected_scratch_regs()
4159 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_connected_scratch_regs()
4165 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4175 if ((radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4176 (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4188 if ((radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4189 (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4201 if ((radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4202 (radeon_connector->devices & ATOM_DEVICE_LCD1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4215 if ((radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4216 (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4229 if ((radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4230 (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4243 if ((radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4244 (radeon_connector->devices & ATOM_DEVICE_DFP1_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4257 if ((radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4258 (radeon_connector->devices & ATOM_DEVICE_DFP2_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4271 if ((radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4272 (radeon_connector->devices & ATOM_DEVICE_DFP3_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4285 if ((radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4286 (radeon_connector->devices & ATOM_DEVICE_DFP4_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4299 if ((radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4300 (radeon_connector->devices & ATOM_DEVICE_DFP5_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4313 if ((radeon_encoder->devices & ATOM_DEVICE_DFP6_SUPPORT) && in radeon_atombios_connected_scratch_regs()
4314 (radeon_connector->devices & ATOM_DEVICE_DFP6_SUPPORT)) { in radeon_atombios_connected_scratch_regs()
4328 if (rdev->family >= CHIP_R600) { in radeon_atombios_connected_scratch_regs()
4342 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_crtc_scratch_regs()
4343 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_crtc_scratch_regs()
4350 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4355 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4359 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4363 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4367 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4371 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4375 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4379 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4383 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_crtc_scratch_regs()
4388 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_crtc_scratch_regs()
4397 struct drm_device *dev = encoder->dev; in radeon_atombios_encoder_dpms_scratch_regs()
4398 struct radeon_device *rdev = dev->dev_private; in radeon_atombios_encoder_dpms_scratch_regs()
4405 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()
4410 if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4416 if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4422 if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4428 if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4434 if (radeon_encoder->devices & ATOM_DEVICE_LCD1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4440 if (radeon_encoder->devices & ATOM_DEVICE_DFP1_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4446 if (radeon_encoder->devices & ATOM_DEVICE_DFP2_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4452 if (radeon_encoder->devices & ATOM_DEVICE_DFP3_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4458 if (radeon_encoder->devices & ATOM_DEVICE_DFP4_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4464 if (radeon_encoder->devices & ATOM_DEVICE_DFP5_SUPPORT) { in radeon_atombios_encoder_dpms_scratch_regs()
4471 if (rdev->family >= CHIP_R600) in radeon_atombios_encoder_dpms_scratch_regs()