Lines Matching +full:needs +full:- +full:hpd

2  * Copyright 2007-8 Advanced Micro Devices, Inc.
35 #include "atom-bits.h"
45 i2c.mask_clk_reg = le16_to_cpu(gpio->usClkMaskRegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
46 i2c.mask_data_reg = le16_to_cpu(gpio->usDataMaskRegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
47 i2c.en_clk_reg = le16_to_cpu(gpio->usClkEnRegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
48 i2c.en_data_reg = le16_to_cpu(gpio->usDataEnRegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
49 i2c.y_clk_reg = le16_to_cpu(gpio->usClkY_RegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
50 i2c.y_data_reg = le16_to_cpu(gpio->usDataY_RegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
51 i2c.a_clk_reg = le16_to_cpu(gpio->usClkA_RegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
52 i2c.a_data_reg = le16_to_cpu(gpio->usDataA_RegisterIndex); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
53 i2c.mask_clk_mask = (1 << gpio->ucClkMaskShift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
54 i2c.mask_data_mask = (1 << gpio->ucDataMaskShift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
55 i2c.en_clk_mask = (1 << gpio->ucClkEnShift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
56 i2c.en_data_mask = (1 << gpio->ucDataEnShift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
57 i2c.y_clk_mask = (1 << gpio->ucClkY_Shift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
58 i2c.y_data_mask = (1 << gpio->ucDataY_Shift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
59 i2c.a_clk_mask = (1 << gpio->ucClkA_Shift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
60 i2c.a_data_mask = (1 << gpio->ucDataA_Shift); in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
62 if (gpio->sucI2cId.sbfAccess.bfHW_Capable) in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
67 if (gpio->sucI2cId.ucAccess == 0xa0) in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
72 i2c.i2c_id = gpio->sucI2cId.ucAccess; in amdgpu_atombios_get_bus_rec_for_i2c_gpio()
85 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_lookup_i2c_gpio()
97 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in amdgpu_atombios_lookup_i2c_gpio()
99 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_lookup_i2c_gpio()
102 gpio = &i2c_info->asGPIO_Info[0]; in amdgpu_atombios_lookup_i2c_gpio()
104 if (gpio->sucI2cId.ucAccess == id) { in amdgpu_atombios_lookup_i2c_gpio()
118 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_i2c_init()
128 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in amdgpu_atombios_i2c_init()
130 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_i2c_init()
133 gpio = &i2c_info->asGPIO_Info[0]; in amdgpu_atombios_i2c_init()
139 adev->i2c_bus[i] = amdgpu_i2c_create(adev_to_drm(adev), &i2c, stmp); in amdgpu_atombios_i2c_init()
149 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_oem_i2c_init()
159 i2c_info = (struct _ATOM_GPIO_I2C_INFO *)(ctx->bios + data_offset); in amdgpu_atombios_oem_i2c_init()
161 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_oem_i2c_init()
164 gpio = &i2c_info->asGPIO_Info[0]; in amdgpu_atombios_oem_i2c_init()
170 adev->i2c_bus[i] = amdgpu_i2c_create(adev_to_drm(adev), &i2c, stmp); in amdgpu_atombios_oem_i2c_init()
183 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_lookup_gpio()
195 gpio_info = (struct _ATOM_GPIO_PIN_LUT *)(ctx->bios + data_offset); in amdgpu_atombios_lookup_gpio()
197 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_lookup_gpio()
200 pin = gpio_info->asGPIO_Pin; in amdgpu_atombios_lookup_gpio()
202 if (id == pin->ucGPIO_ID) { in amdgpu_atombios_lookup_gpio()
203 gpio.id = pin->ucGPIO_ID; in amdgpu_atombios_lookup_gpio()
204 gpio.reg = le16_to_cpu(pin->usGpioPin_AIndex); in amdgpu_atombios_lookup_gpio()
205 gpio.shift = pin->ucGpioPinBitShift; in amdgpu_atombios_lookup_gpio()
206 gpio.mask = (1 << pin->ucGpioPinBitShift); in amdgpu_atombios_lookup_gpio()
222 struct amdgpu_hpd hpd; in amdgpu_atombios_get_hpd_info_from_gpio() local
225 memset(&hpd, 0, sizeof(struct amdgpu_hpd)); in amdgpu_atombios_get_hpd_info_from_gpio()
229 hpd.gpio = *gpio; in amdgpu_atombios_get_hpd_info_from_gpio()
230 if (gpio->reg == reg) { in amdgpu_atombios_get_hpd_info_from_gpio()
231 switch(gpio->mask) { in amdgpu_atombios_get_hpd_info_from_gpio()
233 hpd.hpd = AMDGPU_HPD_1; in amdgpu_atombios_get_hpd_info_from_gpio()
236 hpd.hpd = AMDGPU_HPD_2; in amdgpu_atombios_get_hpd_info_from_gpio()
239 hpd.hpd = AMDGPU_HPD_3; in amdgpu_atombios_get_hpd_info_from_gpio()
242 hpd.hpd = AMDGPU_HPD_4; in amdgpu_atombios_get_hpd_info_from_gpio()
245 hpd.hpd = AMDGPU_HPD_5; in amdgpu_atombios_get_hpd_info_from_gpio()
248 hpd.hpd = AMDGPU_HPD_6; in amdgpu_atombios_get_hpd_info_from_gpio()
251 hpd.hpd = AMDGPU_HPD_NONE; in amdgpu_atombios_get_hpd_info_from_gpio()
255 hpd.hpd = AMDGPU_HPD_NONE; in amdgpu_atombios_get_hpd_info_from_gpio()
256 return hpd; in amdgpu_atombios_get_hpd_info_from_gpio()
286 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_has_dce_engine_info()
287 struct atom_context *ctx = mode_info->atom_context; in amdgpu_atombios_has_dce_engine_info()
300 obj_header = (ATOM_OBJECT_HEADER *) (ctx->bios + data_offset); in amdgpu_atombios_has_dce_engine_info()
302 (ctx->bios + data_offset + in amdgpu_atombios_has_dce_engine_info()
303 le16_to_cpu(obj_header->usDisplayPathTableOffset)); in amdgpu_atombios_has_dce_engine_info()
305 if (path_obj->ucNumOfDispPath) in amdgpu_atombios_has_dce_engine_info()
313 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_connector_info_from_object_table()
314 struct atom_context *ctx = mode_info->atom_context; in amdgpu_atombios_get_connector_info_from_object_table()
329 struct amdgpu_hpd hpd; in amdgpu_atombios_get_connector_info_from_object_table() local
337 obj_header = (ATOM_OBJECT_HEADER *) (ctx->bios + data_offset); in amdgpu_atombios_get_connector_info_from_object_table()
339 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
340 le16_to_cpu(obj_header->usDisplayPathTableOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
342 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
343 le16_to_cpu(obj_header->usConnectorObjectTableOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
345 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
346 le16_to_cpu(obj_header->usEncoderObjectTableOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
348 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
349 le16_to_cpu(obj_header->usRouterObjectTableOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
350 device_support = le16_to_cpu(obj_header->usDeviceSupport); in amdgpu_atombios_get_connector_info_from_object_table()
353 for (i = 0; i < path_obj->ucNumOfDispPath; i++) { in amdgpu_atombios_get_connector_info_from_object_table()
354 uint8_t *addr = (uint8_t *) path_obj->asDispPath; in amdgpu_atombios_get_connector_info_from_object_table()
358 path_size += le16_to_cpu(path->usSize); in amdgpu_atombios_get_connector_info_from_object_table()
360 if (device_support & le16_to_cpu(path->usDeviceTag)) { in amdgpu_atombios_get_connector_info_from_object_table()
362 (le16_to_cpu(path->usConnObjectId) & OBJECT_ID_MASK) in amdgpu_atombios_get_connector_info_from_object_table()
366 if ((le16_to_cpu(path->usDeviceTag) == in amdgpu_atombios_get_connector_info_from_object_table()
368 (le16_to_cpu(path->usDeviceTag) == in amdgpu_atombios_get_connector_info_from_object_table()
374 con_obj_id, le16_to_cpu(path->usDeviceTag)); in amdgpu_atombios_get_connector_info_from_object_table()
387 for (j = 0; j < ((le16_to_cpu(path->usSize) - 8) / 2); j++) { in amdgpu_atombios_get_connector_info_from_object_table()
389 (le16_to_cpu(path->usGraphicObjIds[j]) & in amdgpu_atombios_get_connector_info_from_object_table()
393 for (k = 0; k < enc_obj->ucNumberOfObjects; k++) { in amdgpu_atombios_get_connector_info_from_object_table()
394 u16 encoder_obj = le16_to_cpu(enc_obj->asObjects[k].usObjectID); in amdgpu_atombios_get_connector_info_from_object_table()
395 if (le16_to_cpu(path->usGraphicObjIds[j]) == encoder_obj) { in amdgpu_atombios_get_connector_info_from_object_table()
397 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
398 le16_to_cpu(enc_obj->asObjects[k].usRecordOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
402 while (record->ucRecordSize > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
403 record->ucRecordType > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
404 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in amdgpu_atombios_get_connector_info_from_object_table()
405 switch (record->ucRecordType) { in amdgpu_atombios_get_connector_info_from_object_table()
409 caps = le16_to_cpu(cap_record->usEncoderCap); in amdgpu_atombios_get_connector_info_from_object_table()
413 ((char *)record + record->ucRecordSize); in amdgpu_atombios_get_connector_info_from_object_table()
416 le16_to_cpu(path->usDeviceTag), in amdgpu_atombios_get_connector_info_from_object_table()
421 for (k = 0; k < router_obj->ucNumberOfObjects; k++) { in amdgpu_atombios_get_connector_info_from_object_table()
422 u16 router_obj_id = le16_to_cpu(router_obj->asObjects[k].usObjectID); in amdgpu_atombios_get_connector_info_from_object_table()
423 if (le16_to_cpu(path->usGraphicObjIds[j]) == router_obj_id) { in amdgpu_atombios_get_connector_info_from_object_table()
425 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
426 le16_to_cpu(router_obj->asObjects[k].usRecordOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
433 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
434 le16_to_cpu(router_obj->asObjects[k].usSrcDstTableOffset)); in amdgpu_atombios_get_connector_info_from_object_table()
437 (router_src_dst_table->ucNumberOfSrc * 2)); in amdgpu_atombios_get_connector_info_from_object_table()
443 if (le16_to_cpu(path->usConnObjectId) == in amdgpu_atombios_get_connector_info_from_object_table()
448 while (record->ucRecordSize > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
449 record->ucRecordType > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
450 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in amdgpu_atombios_get_connector_info_from_object_table()
451 switch (record->ucRecordType) { in amdgpu_atombios_get_connector_info_from_object_table()
458 &i2c_record->sucI2cId; in amdgpu_atombios_get_connector_info_from_object_table()
461 i2c_config-> in amdgpu_atombios_get_connector_info_from_object_table()
463 router.i2c_addr = i2c_record->ucI2CAddr >> 1; in amdgpu_atombios_get_connector_info_from_object_table()
469 router.ddc_mux_type = ddc_path->ucMuxType; in amdgpu_atombios_get_connector_info_from_object_table()
470 router.ddc_mux_control_pin = ddc_path->ucMuxControlPin; in amdgpu_atombios_get_connector_info_from_object_table()
471 router.ddc_mux_state = ddc_path->ucMuxState[enum_id]; in amdgpu_atombios_get_connector_info_from_object_table()
477 router.cd_mux_type = cd_path->ucMuxType; in amdgpu_atombios_get_connector_info_from_object_table()
478 router.cd_mux_control_pin = cd_path->ucMuxControlPin; in amdgpu_atombios_get_connector_info_from_object_table()
479 router.cd_mux_state = cd_path->ucMuxState[enum_id]; in amdgpu_atombios_get_connector_info_from_object_table()
483 ((char *)record + record->ucRecordSize); in amdgpu_atombios_get_connector_info_from_object_table()
490 /* look up gpio for ddc, hpd */ in amdgpu_atombios_get_connector_info_from_object_table()
492 hpd.hpd = AMDGPU_HPD_NONE; in amdgpu_atombios_get_connector_info_from_object_table()
493 if ((le16_to_cpu(path->usDeviceTag) & in amdgpu_atombios_get_connector_info_from_object_table()
495 for (j = 0; j < con_obj->ucNumberOfObjects; j++) { in amdgpu_atombios_get_connector_info_from_object_table()
496 if (le16_to_cpu(path->usConnObjectId) == in amdgpu_atombios_get_connector_info_from_object_table()
497 le16_to_cpu(con_obj->asObjects[j]. in amdgpu_atombios_get_connector_info_from_object_table()
503 (ctx->bios + data_offset + in amdgpu_atombios_get_connector_info_from_object_table()
504 le16_to_cpu(con_obj-> in amdgpu_atombios_get_connector_info_from_object_table()
511 while (record->ucRecordSize > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
512 record->ucRecordType > 0 && in amdgpu_atombios_get_connector_info_from_object_table()
513 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { in amdgpu_atombios_get_connector_info_from_object_table()
514 switch (record->ucRecordType) { in amdgpu_atombios_get_connector_info_from_object_table()
521 &i2c_record->sucI2cId; in amdgpu_atombios_get_connector_info_from_object_table()
523 i2c_config-> in amdgpu_atombios_get_connector_info_from_object_table()
531 hpd_record->ucHPDIntGPIOID); in amdgpu_atombios_get_connector_info_from_object_table()
532 hpd = amdgpu_atombios_get_hpd_info_from_gpio(adev, &gpio); in amdgpu_atombios_get_connector_info_from_object_table()
533 hpd.plugged_state = hpd_record->ucPlugged_PinState; in amdgpu_atombios_get_connector_info_from_object_table()
540 record-> in amdgpu_atombios_get_connector_info_from_object_table()
549 ddc_bus.hpd = hpd.hpd; in amdgpu_atombios_get_connector_info_from_object_table()
551 conn_id = le16_to_cpu(path->usConnObjectId); in amdgpu_atombios_get_connector_info_from_object_table()
555 le16_to_cpu(path->usDeviceTag), in amdgpu_atombios_get_connector_info_from_object_table()
558 &hpd, in amdgpu_atombios_get_connector_info_from_object_table()
580 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_clock_info()
584 int ret = -EINVAL; in amdgpu_atombios_get_clock_info()
586 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, NULL, in amdgpu_atombios_get_clock_info()
589 struct amdgpu_pll *ppll = &adev->clock.ppll[0]; in amdgpu_atombios_get_clock_info()
590 struct amdgpu_pll *spll = &adev->clock.spll; in amdgpu_atombios_get_clock_info()
591 struct amdgpu_pll *mpll = &adev->clock.mpll; in amdgpu_atombios_get_clock_info()
593 (union firmware_info *)(mode_info->atom_context->bios + in amdgpu_atombios_get_clock_info()
596 ppll->reference_freq = in amdgpu_atombios_get_clock_info()
597 le16_to_cpu(firmware_info->info.usReferenceClock); in amdgpu_atombios_get_clock_info()
598 ppll->reference_div = 0; in amdgpu_atombios_get_clock_info()
600 ppll->pll_out_min = in amdgpu_atombios_get_clock_info()
601 le32_to_cpu(firmware_info->info_12.ulMinPixelClockPLL_Output); in amdgpu_atombios_get_clock_info()
602 ppll->pll_out_max = in amdgpu_atombios_get_clock_info()
603 le32_to_cpu(firmware_info->info.ulMaxPixelClockPLL_Output); in amdgpu_atombios_get_clock_info()
605 ppll->lcd_pll_out_min = in amdgpu_atombios_get_clock_info()
606 le16_to_cpu(firmware_info->info_14.usLcdMinPixelClockPLL_Output) * 100; in amdgpu_atombios_get_clock_info()
607 if (ppll->lcd_pll_out_min == 0) in amdgpu_atombios_get_clock_info()
608 ppll->lcd_pll_out_min = ppll->pll_out_min; in amdgpu_atombios_get_clock_info()
609 ppll->lcd_pll_out_max = in amdgpu_atombios_get_clock_info()
610 le16_to_cpu(firmware_info->info_14.usLcdMaxPixelClockPLL_Output) * 100; in amdgpu_atombios_get_clock_info()
611 if (ppll->lcd_pll_out_max == 0) in amdgpu_atombios_get_clock_info()
612 ppll->lcd_pll_out_max = ppll->pll_out_max; in amdgpu_atombios_get_clock_info()
614 if (ppll->pll_out_min == 0) in amdgpu_atombios_get_clock_info()
615 ppll->pll_out_min = 64800; in amdgpu_atombios_get_clock_info()
617 ppll->pll_in_min = in amdgpu_atombios_get_clock_info()
618 le16_to_cpu(firmware_info->info.usMinPixelClockPLL_Input); in amdgpu_atombios_get_clock_info()
619 ppll->pll_in_max = in amdgpu_atombios_get_clock_info()
620 le16_to_cpu(firmware_info->info.usMaxPixelClockPLL_Input); in amdgpu_atombios_get_clock_info()
622 ppll->min_post_div = 2; in amdgpu_atombios_get_clock_info()
623 ppll->max_post_div = 0x7f; in amdgpu_atombios_get_clock_info()
624 ppll->min_frac_feedback_div = 0; in amdgpu_atombios_get_clock_info()
625 ppll->max_frac_feedback_div = 9; in amdgpu_atombios_get_clock_info()
626 ppll->min_ref_div = 2; in amdgpu_atombios_get_clock_info()
627 ppll->max_ref_div = 0x3ff; in amdgpu_atombios_get_clock_info()
628 ppll->min_feedback_div = 4; in amdgpu_atombios_get_clock_info()
629 ppll->max_feedback_div = 0xfff; in amdgpu_atombios_get_clock_info()
630 ppll->best_vco = 0; in amdgpu_atombios_get_clock_info()
633 adev->clock.ppll[i] = *ppll; in amdgpu_atombios_get_clock_info()
636 spll->reference_freq = in amdgpu_atombios_get_clock_info()
637 le16_to_cpu(firmware_info->info_21.usCoreReferenceClock); in amdgpu_atombios_get_clock_info()
638 spll->reference_div = 0; in amdgpu_atombios_get_clock_info()
640 spll->pll_out_min = in amdgpu_atombios_get_clock_info()
641 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Output); in amdgpu_atombios_get_clock_info()
642 spll->pll_out_max = in amdgpu_atombios_get_clock_info()
643 le32_to_cpu(firmware_info->info.ulMaxEngineClockPLL_Output); in amdgpu_atombios_get_clock_info()
646 if (spll->pll_out_min == 0) in amdgpu_atombios_get_clock_info()
647 spll->pll_out_min = 64800; in amdgpu_atombios_get_clock_info()
649 spll->pll_in_min = in amdgpu_atombios_get_clock_info()
650 le16_to_cpu(firmware_info->info.usMinEngineClockPLL_Input); in amdgpu_atombios_get_clock_info()
651 spll->pll_in_max = in amdgpu_atombios_get_clock_info()
652 le16_to_cpu(firmware_info->info.usMaxEngineClockPLL_Input); in amdgpu_atombios_get_clock_info()
654 spll->min_post_div = 1; in amdgpu_atombios_get_clock_info()
655 spll->max_post_div = 1; in amdgpu_atombios_get_clock_info()
656 spll->min_ref_div = 2; in amdgpu_atombios_get_clock_info()
657 spll->max_ref_div = 0xff; in amdgpu_atombios_get_clock_info()
658 spll->min_feedback_div = 4; in amdgpu_atombios_get_clock_info()
659 spll->max_feedback_div = 0xff; in amdgpu_atombios_get_clock_info()
660 spll->best_vco = 0; in amdgpu_atombios_get_clock_info()
663 mpll->reference_freq = in amdgpu_atombios_get_clock_info()
664 le16_to_cpu(firmware_info->info_21.usMemoryReferenceClock); in amdgpu_atombios_get_clock_info()
665 mpll->reference_div = 0; in amdgpu_atombios_get_clock_info()
667 mpll->pll_out_min = in amdgpu_atombios_get_clock_info()
668 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Output); in amdgpu_atombios_get_clock_info()
669 mpll->pll_out_max = in amdgpu_atombios_get_clock_info()
670 le32_to_cpu(firmware_info->info.ulMaxMemoryClockPLL_Output); in amdgpu_atombios_get_clock_info()
673 if (mpll->pll_out_min == 0) in amdgpu_atombios_get_clock_info()
674 mpll->pll_out_min = 64800; in amdgpu_atombios_get_clock_info()
676 mpll->pll_in_min = in amdgpu_atombios_get_clock_info()
677 le16_to_cpu(firmware_info->info.usMinMemoryClockPLL_Input); in amdgpu_atombios_get_clock_info()
678 mpll->pll_in_max = in amdgpu_atombios_get_clock_info()
679 le16_to_cpu(firmware_info->info.usMaxMemoryClockPLL_Input); in amdgpu_atombios_get_clock_info()
681 adev->clock.default_sclk = in amdgpu_atombios_get_clock_info()
682 le32_to_cpu(firmware_info->info.ulDefaultEngineClock); in amdgpu_atombios_get_clock_info()
683 adev->clock.default_mclk = in amdgpu_atombios_get_clock_info()
684 le32_to_cpu(firmware_info->info.ulDefaultMemoryClock); in amdgpu_atombios_get_clock_info()
686 mpll->min_post_div = 1; in amdgpu_atombios_get_clock_info()
687 mpll->max_post_div = 1; in amdgpu_atombios_get_clock_info()
688 mpll->min_ref_div = 2; in amdgpu_atombios_get_clock_info()
689 mpll->max_ref_div = 0xff; in amdgpu_atombios_get_clock_info()
690 mpll->min_feedback_div = 4; in amdgpu_atombios_get_clock_info()
691 mpll->max_feedback_div = 0xff; in amdgpu_atombios_get_clock_info()
692 mpll->best_vco = 0; in amdgpu_atombios_get_clock_info()
695 adev->clock.default_dispclk = in amdgpu_atombios_get_clock_info()
696 le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq); in amdgpu_atombios_get_clock_info()
698 if (adev->clock.default_dispclk < 53900) { in amdgpu_atombios_get_clock_info()
700 adev->clock.default_dispclk / 100); in amdgpu_atombios_get_clock_info()
701 adev->clock.default_dispclk = 60000; in amdgpu_atombios_get_clock_info()
702 } else if (adev->clock.default_dispclk <= 60000) { in amdgpu_atombios_get_clock_info()
704 adev->clock.default_dispclk / 100); in amdgpu_atombios_get_clock_info()
705 adev->clock.default_dispclk = 62500; in amdgpu_atombios_get_clock_info()
707 adev->clock.dp_extclk = in amdgpu_atombios_get_clock_info()
708 le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq); in amdgpu_atombios_get_clock_info()
709 adev->clock.current_dispclk = adev->clock.default_dispclk; in amdgpu_atombios_get_clock_info()
711 adev->clock.max_pixel_clock = le16_to_cpu(firmware_info->info.usMaxPixelClock); in amdgpu_atombios_get_clock_info()
712 if (adev->clock.max_pixel_clock == 0) in amdgpu_atombios_get_clock_info()
713 adev->clock.max_pixel_clock = 40000; in amdgpu_atombios_get_clock_info()
716 adev->mode_info.firmware_flags = in amdgpu_atombios_get_clock_info()
717 le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); in amdgpu_atombios_get_clock_info()
722 adev->pm.current_sclk = adev->clock.default_sclk; in amdgpu_atombios_get_clock_info()
723 adev->pm.current_mclk = adev->clock.default_mclk; in amdgpu_atombios_get_clock_info()
734 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_gfx_info()
738 int ret = -EINVAL; in amdgpu_atombios_get_gfx_info()
740 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, NULL, in amdgpu_atombios_get_gfx_info()
743 (mode_info->atom_context->bios + data_offset); in amdgpu_atombios_get_gfx_info()
745 adev->gfx.config.max_shader_engines = gfx_info->info.max_shader_engines; in amdgpu_atombios_get_gfx_info()
746 adev->gfx.config.max_tile_pipes = gfx_info->info.max_tile_pipes; in amdgpu_atombios_get_gfx_info()
747 adev->gfx.config.max_cu_per_sh = gfx_info->info.max_cu_per_sh; in amdgpu_atombios_get_gfx_info()
748 adev->gfx.config.max_sh_per_se = gfx_info->info.max_sh_per_se; in amdgpu_atombios_get_gfx_info()
749 adev->gfx.config.max_backends_per_se = gfx_info->info.max_backends_per_se; in amdgpu_atombios_get_gfx_info()
750 adev->gfx.config.max_texture_channel_caches = in amdgpu_atombios_get_gfx_info()
751 gfx_info->info.max_texture_channel_caches; in amdgpu_atombios_get_gfx_info()
773 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_vram_width()
780 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, &size, in amdgpu_atombios_get_vram_width()
783 (mode_info->atom_context->bios + data_offset); in amdgpu_atombios_get_vram_width()
787 return igp_info->info_8.ucUMAChannelNumber * 64; in amdgpu_atombios_get_vram_width()
800 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_igp_ss_overrides()
808 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, &size, in amdgpu_atombios_get_igp_ss_overrides()
811 (mode_info->atom_context->bios + data_offset); in amdgpu_atombios_get_igp_ss_overrides()
816 percentage = le16_to_cpu(igp_info->info_6.usDVISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
817 rate = le16_to_cpu(igp_info->info_6.usDVISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
820 percentage = le16_to_cpu(igp_info->info_6.usHDMISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
821 rate = le16_to_cpu(igp_info->info_6.usHDMISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
824 percentage = le16_to_cpu(igp_info->info_6.usLvdsSSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
825 rate = le16_to_cpu(igp_info->info_6.usLvdsSSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
832 percentage = le16_to_cpu(igp_info->info_7.usDVISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
833 rate = le16_to_cpu(igp_info->info_7.usDVISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
836 percentage = le16_to_cpu(igp_info->info_7.usHDMISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
837 rate = le16_to_cpu(igp_info->info_7.usHDMISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
840 percentage = le16_to_cpu(igp_info->info_7.usLvdsSSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
841 rate = le16_to_cpu(igp_info->info_7.usLvdsSSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
848 percentage = le16_to_cpu(igp_info->info_8.usDVISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
849 rate = le16_to_cpu(igp_info->info_8.usDVISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
852 percentage = le16_to_cpu(igp_info->info_8.usHDMISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
853 rate = le16_to_cpu(igp_info->info_8.usHDMISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
856 percentage = le16_to_cpu(igp_info->info_8.usLvdsSSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
857 rate = le16_to_cpu(igp_info->info_8.usLvdsSSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
864 percentage = le16_to_cpu(igp_info->info_9.usDVISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
865 rate = le16_to_cpu(igp_info->info_9.usDVISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
868 percentage = le16_to_cpu(igp_info->info_9.usHDMISSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
869 rate = le16_to_cpu(igp_info->info_9.usHDMISSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
872 percentage = le16_to_cpu(igp_info->info_9.usLvdsSSPercentage); in amdgpu_atombios_get_igp_ss_overrides()
873 rate = le16_to_cpu(igp_info->info_9.usLvdsSSpreadRateIn10Hz); in amdgpu_atombios_get_igp_ss_overrides()
882 ss->percentage = percentage; in amdgpu_atombios_get_igp_ss_overrides()
884 ss->rate = rate; in amdgpu_atombios_get_igp_ss_overrides()
904 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_asic_ss_info()
913 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT)) in amdgpu_atombios_get_asic_ss_info()
917 if (!(adev->mode_info.firmware_flags & ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT)) in amdgpu_atombios_get_asic_ss_info()
922 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, &size, in amdgpu_atombios_get_asic_ss_info()
926 (union asic_ss_info *)(mode_info->atom_context->bios + data_offset); in amdgpu_atombios_get_asic_ss_info()
930 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_get_asic_ss_info()
933 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info.asSpreadSpectrum[0]); in amdgpu_atombios_get_asic_ss_info()
935 if ((ss_assign->v1.ucClockIndication == id) && in amdgpu_atombios_get_asic_ss_info()
936 (clock <= le32_to_cpu(ss_assign->v1.ulTargetClockRange))) { in amdgpu_atombios_get_asic_ss_info()
937 ss->percentage = in amdgpu_atombios_get_asic_ss_info()
938 le16_to_cpu(ss_assign->v1.usSpreadSpectrumPercentage); in amdgpu_atombios_get_asic_ss_info()
939 ss->type = ss_assign->v1.ucSpreadSpectrumMode; in amdgpu_atombios_get_asic_ss_info()
940 ss->rate = le16_to_cpu(ss_assign->v1.usSpreadRateInKhz); in amdgpu_atombios_get_asic_ss_info()
941 ss->percentage_divider = 100; in amdgpu_atombios_get_asic_ss_info()
949 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_get_asic_ss_info()
951 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_2.asSpreadSpectrum[0]); in amdgpu_atombios_get_asic_ss_info()
953 if ((ss_assign->v2.ucClockIndication == id) && in amdgpu_atombios_get_asic_ss_info()
954 (clock <= le32_to_cpu(ss_assign->v2.ulTargetClockRange))) { in amdgpu_atombios_get_asic_ss_info()
955 ss->percentage = in amdgpu_atombios_get_asic_ss_info()
956 le16_to_cpu(ss_assign->v2.usSpreadSpectrumPercentage); in amdgpu_atombios_get_asic_ss_info()
957 ss->type = ss_assign->v2.ucSpreadSpectrumMode; in amdgpu_atombios_get_asic_ss_info()
958 ss->rate = le16_to_cpu(ss_assign->v2.usSpreadRateIn10Hz); in amdgpu_atombios_get_asic_ss_info()
959 ss->percentage_divider = 100; in amdgpu_atombios_get_asic_ss_info()
963 ss->rate /= 100; in amdgpu_atombios_get_asic_ss_info()
971 num_indices = (size - sizeof(ATOM_COMMON_TABLE_HEADER)) / in amdgpu_atombios_get_asic_ss_info()
973 ss_assign = (union asic_ss_assignment *)((u8 *)&ss_info->info_3.asSpreadSpectrum[0]); in amdgpu_atombios_get_asic_ss_info()
975 if ((ss_assign->v3.ucClockIndication == id) && in amdgpu_atombios_get_asic_ss_info()
976 (clock <= le32_to_cpu(ss_assign->v3.ulTargetClockRange))) { in amdgpu_atombios_get_asic_ss_info()
977 ss->percentage = in amdgpu_atombios_get_asic_ss_info()
978 le16_to_cpu(ss_assign->v3.usSpreadSpectrumPercentage); in amdgpu_atombios_get_asic_ss_info()
979 ss->type = ss_assign->v3.ucSpreadSpectrumMode; in amdgpu_atombios_get_asic_ss_info()
980 ss->rate = le16_to_cpu(ss_assign->v3.usSpreadRateIn10Hz); in amdgpu_atombios_get_asic_ss_info()
981 if (ss_assign->v3.ucSpreadSpectrumMode & in amdgpu_atombios_get_asic_ss_info()
983 ss->percentage_divider = 1000; in amdgpu_atombios_get_asic_ss_info()
985 ss->percentage_divider = 100; in amdgpu_atombios_get_asic_ss_info()
988 ss->rate /= 100; in amdgpu_atombios_get_asic_ss_info()
989 if (adev->flags & AMD_IS_APU) in amdgpu_atombios_get_asic_ss_info()
1029 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_get_clock_dividers()
1030 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1041 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_clock_dividers()
1043 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1045 dividers->post_div = args.v3.ucPostDiv; in amdgpu_atombios_get_clock_dividers()
1046 dividers->enable_post_div = (args.v3.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1048 dividers->enable_dithen = (args.v3.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1050 dividers->whole_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDiv); in amdgpu_atombios_get_clock_dividers()
1051 dividers->frac_fb_div = le16_to_cpu(args.v3.ulFbDiv.usFbDivFrac); in amdgpu_atombios_get_clock_dividers()
1052 dividers->ref_div = args.v3.ucRefDiv; in amdgpu_atombios_get_clock_dividers()
1053 dividers->vco_mode = (args.v3.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1057 if (adev->asic_type >= CHIP_TAHITI) in amdgpu_atombios_get_clock_dividers()
1058 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1063 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_clock_dividers()
1065 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1067 dividers->post_div = args.v5.ucPostDiv; in amdgpu_atombios_get_clock_dividers()
1068 dividers->enable_post_div = (args.v5.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1070 dividers->enable_dithen = (args.v5.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1072 dividers->whole_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDiv); in amdgpu_atombios_get_clock_dividers()
1073 dividers->frac_fb_div = le16_to_cpu(args.v5.ulFbDiv.usFbDivFrac); in amdgpu_atombios_get_clock_dividers()
1074 dividers->ref_div = args.v5.ucRefDiv; in amdgpu_atombios_get_clock_dividers()
1075 dividers->vco_mode = (args.v5.ucCntlFlag & in amdgpu_atombios_get_clock_dividers()
1083 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_clock_dividers()
1085 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1087 dividers->post_divider = dividers->post_div = args.v4.ucPostDiv; in amdgpu_atombios_get_clock_dividers()
1088 dividers->real_clock = le32_to_cpu(args.v4.ulClock); in amdgpu_atombios_get_clock_dividers()
1096 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_clock_dividers()
1098 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1100 dividers->whole_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDiv); in amdgpu_atombios_get_clock_dividers()
1101 dividers->frac_fb_div = le16_to_cpu(args.v6_out.ulFbDiv.usFbDivFrac); in amdgpu_atombios_get_clock_dividers()
1102 dividers->ref_div = args.v6_out.ucPllRefDiv; in amdgpu_atombios_get_clock_dividers()
1103 dividers->post_div = args.v6_out.ucPllPostDiv; in amdgpu_atombios_get_clock_dividers()
1104 dividers->flags = args.v6_out.ucPllCntlFlag; in amdgpu_atombios_get_clock_dividers()
1105 dividers->real_clock = le32_to_cpu(args.v6_out.ulClock.ulClock); in amdgpu_atombios_get_clock_dividers()
1106 dividers->post_divider = args.v6_out.ulClock.ucPostDiv; in amdgpu_atombios_get_clock_dividers()
1109 return -EINVAL; in amdgpu_atombios_get_clock_dividers()
1127 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_get_memory_pll_dividers()
1128 return -EINVAL; in amdgpu_atombios_get_memory_pll_dividers()
1140 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_memory_pll_dividers()
1142 return -EINVAL; in amdgpu_atombios_get_memory_pll_dividers()
1144 mpll_param->clkfrac = le16_to_cpu(args.ulFbDiv.usFbDivFrac); in amdgpu_atombios_get_memory_pll_dividers()
1145 mpll_param->clkf = le16_to_cpu(args.ulFbDiv.usFbDiv); in amdgpu_atombios_get_memory_pll_dividers()
1146 mpll_param->post_div = args.ucPostDiv; in amdgpu_atombios_get_memory_pll_dividers()
1147 mpll_param->dll_speed = args.ucDllSpeed; in amdgpu_atombios_get_memory_pll_dividers()
1148 mpll_param->bwcntl = args.ucBWCntl; in amdgpu_atombios_get_memory_pll_dividers()
1149 mpll_param->vco_mode = in amdgpu_atombios_get_memory_pll_dividers()
1151 mpll_param->yclk_sel = in amdgpu_atombios_get_memory_pll_dividers()
1153 mpll_param->qdr = in amdgpu_atombios_get_memory_pll_dividers()
1155 mpll_param->half_rate = in amdgpu_atombios_get_memory_pll_dividers()
1159 return -EINVAL; in amdgpu_atombios_get_memory_pll_dividers()
1163 return -EINVAL; in amdgpu_atombios_get_memory_pll_dividers()
1184 return amdgpu_atom_execute_table(adev->mode_info.atom_context, index, in amdgpu_atombios_set_engine_dram_timings()
1191 struct amdgpu_mode_info *mode_info = &adev->mode_info; in amdgpu_atombios_get_default_voltages()
1201 if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, NULL, in amdgpu_atombios_get_default_voltages()
1204 (union firmware_info *)(mode_info->atom_context->bios + in amdgpu_atombios_get_default_voltages()
1206 *vddc = le16_to_cpu(firmware_info->info_14.usBootUpVDDCVoltage); in amdgpu_atombios_get_default_voltages()
1208 *vddci = le16_to_cpu(firmware_info->info_22.usBootUpVDDCIVoltage); in amdgpu_atombios_get_default_voltages()
1209 *mvdd = le16_to_cpu(firmware_info->info_22.usBootUpMVDDCVoltage); in amdgpu_atombios_get_default_voltages()
1228 if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) in amdgpu_atombios_get_max_vddc()
1229 return -EINVAL; in amdgpu_atombios_get_max_vddc()
1233 return -EINVAL; in amdgpu_atombios_get_max_vddc()
1239 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_max_vddc()
1241 return -EINVAL; in amdgpu_atombios_get_max_vddc()
1250 if (amdgpu_atom_execute_table(adev->mode_info.atom_context, in amdgpu_atombios_get_max_vddc()
1252 return -EINVAL; in amdgpu_atombios_get_max_vddc()
1258 return -EINVAL; in amdgpu_atombios_get_max_vddc()
1287 u32 size = le16_to_cpu(v3->sHeader.usStructureSize); in amdgpu_atombios_lookup_voltage_object_v3()
1293 if ((vo->asGpioVoltageObj.sHeader.ucVoltageType == voltage_type) && in amdgpu_atombios_lookup_voltage_object_v3()
1294 (vo->asGpioVoltageObj.sHeader.ucVoltageMode == voltage_mode)) in amdgpu_atombios_lookup_voltage_object_v3()
1296 offset += le16_to_cpu(vo->asGpioVoltageObj.sHeader.usSize); in amdgpu_atombios_lookup_voltage_object_v3()
1311 if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, in amdgpu_atombios_get_svi2_info()
1314 (adev->mode_info.atom_context->bios + data_offset); in amdgpu_atombios_get_svi2_info()
1321 amdgpu_atombios_lookup_voltage_object_v3(&voltage_info->v3, in amdgpu_atombios_get_svi2_info()
1325 *svd_gpio_id = voltage_object->v3.asSVID2Obj.ucSVDGpioId; in amdgpu_atombios_get_svi2_info()
1326 *svc_gpio_id = voltage_object->v3.asSVID2Obj.ucSVCGpioId; in amdgpu_atombios_get_svi2_info()
1328 return -EINVAL; in amdgpu_atombios_get_svi2_info()
1333 return -EINVAL; in amdgpu_atombios_get_svi2_info()
1338 return -EINVAL; in amdgpu_atombios_get_svi2_info()
1354 if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, in amdgpu_atombios_is_voltage_gpio()
1357 (adev->mode_info.atom_context->bios + data_offset); in amdgpu_atombios_is_voltage_gpio()
1363 if (amdgpu_atombios_lookup_voltage_object_v3(&voltage_info->v3, in amdgpu_atombios_is_voltage_gpio()
1392 if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, in amdgpu_atombios_get_voltage_table()
1395 (adev->mode_info.atom_context->bios + data_offset); in amdgpu_atombios_get_voltage_table()
1402 amdgpu_atombios_lookup_voltage_object_v3(&voltage_info->v3, in amdgpu_atombios_get_voltage_table()
1406 &voltage_object->v3.asGpioVoltageObj; in amdgpu_atombios_get_voltage_table()
1408 if (gpio->ucGpioEntryNum > MAX_VOLTAGE_ENTRIES) in amdgpu_atombios_get_voltage_table()
1409 return -EINVAL; in amdgpu_atombios_get_voltage_table()
1410 lut = &gpio->asVolGpioLut[0]; in amdgpu_atombios_get_voltage_table()
1411 for (i = 0; i < gpio->ucGpioEntryNum; i++) { in amdgpu_atombios_get_voltage_table()
1412 voltage_table->entries[i].value = in amdgpu_atombios_get_voltage_table()
1413 le16_to_cpu(lut->usVoltageValue); in amdgpu_atombios_get_voltage_table()
1414 voltage_table->entries[i].smio_low = in amdgpu_atombios_get_voltage_table()
1415 le32_to_cpu(lut->ulVoltageId); in amdgpu_atombios_get_voltage_table()
1419 voltage_table->mask_low = le32_to_cpu(gpio->ulGpioMaskVal); in amdgpu_atombios_get_voltage_table()
1420 voltage_table->count = gpio->ucGpioEntryNum; in amdgpu_atombios_get_voltage_table()
1421 voltage_table->phase_delay = gpio->ucPhaseDelay; in amdgpu_atombios_get_voltage_table()
1427 return -EINVAL; in amdgpu_atombios_get_voltage_table()
1432 return -EINVAL; in amdgpu_atombios_get_voltage_table()
1435 return -EINVAL; in amdgpu_atombios_get_voltage_table()
1464 if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, in amdgpu_atombios_init_mc_reg_table()
1467 (adev->mode_info.atom_context->bios + data_offset); in amdgpu_atombios_init_mc_reg_table()
1471 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1475 if (module_index < vram_info->v2_1.ucNumOfVRAMModule) { in amdgpu_atombios_init_mc_reg_table()
1478 ((u8 *)vram_info + le16_to_cpu(vram_info->v2_1.usMemClkPatchTblOffset)); in amdgpu_atombios_init_mc_reg_table()
1482 le16_to_cpu(reg_block->usRegIndexTblSize)); in amdgpu_atombios_init_mc_reg_table()
1483 ATOM_INIT_REG_INDEX_FORMAT *format = &reg_block->asRegIndexBuf[0]; in amdgpu_atombios_init_mc_reg_table()
1484 num_entries = (u8)((le16_to_cpu(reg_block->usRegIndexTblSize)) / in amdgpu_atombios_init_mc_reg_table()
1485 sizeof(ATOM_INIT_REG_INDEX_FORMAT)) - 1; in amdgpu_atombios_init_mc_reg_table()
1487 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1489 if (format->ucPreRegDataLength & ACCESS_PLACEHOLDER) in amdgpu_atombios_init_mc_reg_table()
1491 reg_table->mc_reg_address[i].s1 = in amdgpu_atombios_init_mc_reg_table()
1492 (u16)(le16_to_cpu(format->usRegIndex)); in amdgpu_atombios_init_mc_reg_table()
1493 reg_table->mc_reg_address[i].pre_reg_data = in amdgpu_atombios_init_mc_reg_table()
1494 (u8)(format->ucPreRegDataLength); in amdgpu_atombios_init_mc_reg_table()
1499 reg_table->last = i; in amdgpu_atombios_init_mc_reg_table()
1505 reg_table->mc_reg_table_entry[num_ranges].mclk_max = in amdgpu_atombios_init_mc_reg_table()
1508 for (i = 0, j = 1; i < reg_table->last; i++) { in amdgpu_atombios_init_mc_reg_table()
1509 if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_FROM_TABLE) { in amdgpu_atombios_init_mc_reg_table()
1510 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in amdgpu_atombios_init_mc_reg_table()
1513 } else if ((reg_table->mc_reg_address[i].pre_reg_data & LOW_NIBBLE_MASK) == DATA_EQU_PREV) { in amdgpu_atombios_init_mc_reg_table()
1516 reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = in amdgpu_atombios_init_mc_reg_table()
1517 reg_table->mc_reg_table_entry[num_ranges].mc_data[i - 1]; in amdgpu_atombios_init_mc_reg_table()
1523 ((u8 *)reg_data + le16_to_cpu(reg_block->usRegDataBlkSize)); in amdgpu_atombios_init_mc_reg_table()
1526 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1527 reg_table->num_entries = num_ranges; in amdgpu_atombios_init_mc_reg_table()
1529 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1533 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1538 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1542 return -EINVAL; in amdgpu_atombios_init_mc_reg_table()
1552 if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, in amdgpu_atombios_has_gpu_virtualization_table()
1563 bios_6_scratch = RREG32(adev->bios_scratch_reg_offset + 6); in amdgpu_atombios_scratch_regs_lock()
1573 WREG32(adev->bios_scratch_reg_offset + 6, bios_6_scratch); in amdgpu_atombios_scratch_regs_lock()
1580 adev->bios_scratch_reg_offset = mmBIOS_SCRATCH_0; in amdgpu_atombios_scratch_regs_init()
1582 bios_2_scratch = RREG32(adev->bios_scratch_reg_offset + 2); in amdgpu_atombios_scratch_regs_init()
1583 bios_6_scratch = RREG32(adev->bios_scratch_reg_offset + 6); in amdgpu_atombios_scratch_regs_init()
1594 WREG32(adev->bios_scratch_reg_offset + 2, bios_2_scratch); in amdgpu_atombios_scratch_regs_init()
1595 WREG32(adev->bios_scratch_reg_offset + 6, bios_6_scratch); in amdgpu_atombios_scratch_regs_init()
1601 u32 tmp = RREG32(adev->bios_scratch_reg_offset + 3); in amdgpu_atombios_scratch_regs_engine_hung()
1608 WREG32(adev->bios_scratch_reg_offset + 3, tmp); in amdgpu_atombios_scratch_regs_engine_hung()
1614 u32 tmp = RREG32(adev->bios_scratch_reg_offset + 2); in amdgpu_atombios_scratch_regs_set_backlight_level()
1620 WREG32(adev->bios_scratch_reg_offset + 2, tmp); in amdgpu_atombios_scratch_regs_set_backlight_level()
1625 u32 tmp = RREG32(adev->bios_scratch_reg_offset + 7); in amdgpu_atombios_scratch_need_asic_init()
1633 /* Atom needs data in little endian format so swap as appropriate when copying
1667 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_allocate_fb_scratch()
1676 firmware_usage = (struct _ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset); in amdgpu_atombios_allocate_fb_scratch()
1679 le32_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware), in amdgpu_atombios_allocate_fb_scratch()
1680 le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb)); in amdgpu_atombios_allocate_fb_scratch()
1682 start_addr = firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware; in amdgpu_atombios_allocate_fb_scratch()
1683 size = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb; in amdgpu_atombios_allocate_fb_scratch()
1688 /* Firmware request VRAM reservation for SR-IOV */ in amdgpu_atombios_allocate_fb_scratch()
1689 adev->mman.fw_vram_usage_start_offset = (start_addr & in amdgpu_atombios_allocate_fb_scratch()
1691 adev->mman.fw_vram_usage_size = size << 10; in amdgpu_atombios_allocate_fb_scratch()
1695 usage_bytes = le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb) * 1024; in amdgpu_atombios_allocate_fb_scratch()
1698 ctx->scratch_size_bytes = 0; in amdgpu_atombios_allocate_fb_scratch()
1702 ctx->scratch = kzalloc(usage_bytes, GFP_KERNEL); in amdgpu_atombios_allocate_fb_scratch()
1703 if (!ctx->scratch) in amdgpu_atombios_allocate_fb_scratch()
1704 return -ENOMEM; in amdgpu_atombios_allocate_fb_scratch()
1705 ctx->scratch_size_bytes = usage_bytes; in amdgpu_atombios_allocate_fb_scratch()
1719 * cail_pll_read - read PLL register
1733 * cail_pll_write - write PLL register
1747 * cail_mc_read - read MC (Memory Controller) register
1761 * cail_mc_write - write MC (Memory Controller) register
1775 * cail_reg_write - write MMIO register
1785 struct amdgpu_device *adev = drm_to_adev(info->dev); in cail_reg_write()
1791 * cail_reg_read - read MMIO register
1801 struct amdgpu_device *adev = drm_to_adev(info->dev); in cail_reg_read()
1814 struct atom_context *ctx = adev->mode_info.atom_context; in amdgpu_atombios_get_vbios_version()
1816 return sysfs_emit(buf, "%s\n", ctx->vbios_pn); in amdgpu_atombios_get_vbios_version()
1833 if (adev->mode_info.atom_context) in amdgpu_atombios_sysfs_init()
1834 return devm_device_add_group(adev->dev, in amdgpu_atombios_sysfs_init()
1841 * amdgpu_atombios_fini - free the driver info and callbacks for atombios
1851 if (adev->mode_info.atom_context) { in amdgpu_atombios_fini()
1852 kfree(adev->mode_info.atom_context->scratch); in amdgpu_atombios_fini()
1853 kfree(adev->mode_info.atom_context->iio); in amdgpu_atombios_fini()
1855 kfree(adev->mode_info.atom_context); in amdgpu_atombios_fini()
1856 adev->mode_info.atom_context = NULL; in amdgpu_atombios_fini()
1857 kfree(adev->mode_info.atom_card_info); in amdgpu_atombios_fini()
1858 adev->mode_info.atom_card_info = NULL; in amdgpu_atombios_fini()
1862 * amdgpu_atombios_init - init the driver info and callbacks for atombios
1868 * Returns 0 on sucess, -ENOMEM on failure.
1877 return -ENOMEM; in amdgpu_atombios_init()
1879 adev->mode_info.atom_card_info = atom_card_info; in amdgpu_atombios_init()
1880 atom_card_info->dev = adev_to_drm(adev); in amdgpu_atombios_init()
1881 atom_card_info->reg_read = cail_reg_read; in amdgpu_atombios_init()
1882 atom_card_info->reg_write = cail_reg_write; in amdgpu_atombios_init()
1883 atom_card_info->mc_read = cail_mc_read; in amdgpu_atombios_init()
1884 atom_card_info->mc_write = cail_mc_write; in amdgpu_atombios_init()
1885 atom_card_info->pll_read = cail_pll_read; in amdgpu_atombios_init()
1886 atom_card_info->pll_write = cail_pll_write; in amdgpu_atombios_init()
1888 adev->mode_info.atom_context = amdgpu_atom_parse(atom_card_info, adev->bios); in amdgpu_atombios_init()
1889 if (!adev->mode_info.atom_context) { in amdgpu_atombios_init()
1891 return -ENOMEM; in amdgpu_atombios_init()
1894 mutex_init(&adev->mode_info.atom_context->mutex); in amdgpu_atombios_init()
1895 if (adev->is_atom_fw) { in amdgpu_atombios_init()
1899 adev->mode_info.firmware_flags = in amdgpu_atombios_init()
1918 if (!amdgpu_atom_parse_data_header(adev->mode_info.atom_context, table, in amdgpu_atombios_get_data_table()
1920 return -EINVAL; in amdgpu_atombios_get_data_table()
1922 *addr = (uint8_t *)adev->mode_info.atom_context->bios + data_start; in amdgpu_atombios_get_data_table()