/****************************************************************************\ * * File Name atomfirmware.h * Project This is an interface header file between atombios and OS GPU drivers for SoC15 products * * Description header file of general definitions for OS and pre-OS video drivers * * Copyright 2014 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. *
\****************************************************************************/
/*IMPORTANT NOTES * If a change in VBIOS/Driver/Tool's interface is only needed for SoC15 and forward products, then the change is only needed in this atomfirmware.h header file. * If a change in VBIOS/Driver/Tool's interface is only needed for pre-SoC15 products, then the change is only needed in atombios.h header file. * If a change is needed for both pre and post SoC15 products, then the change has to be made separately and might be differently in both atomfirmware.h and atombios.h.
*/
/**************************************************************************** * Common header for all tables (Data table, Command function). * Every table pointed in _ATOM_MASTER_DATA_TABLE has this common header. * And the pointer actually points to this header.
****************************************************************************/
struct atom_common_table_header
{
uint16_t structuresize;
uint8_t format_revision; //mainly used for a hw function, when the parser is not backward compatible
uint8_t content_revision; //change it when a data table has a structure change, or a hw function has a input/output parameter change
};
/**************************************************************************** * Structure stores the ROM header.
****************************************************************************/ struct atom_rom_header_v2_2
{ struct atom_common_table_header table_header;
uint8_t atom_bios_string[4]; //enum atom_string_def atom_bios_string; //Signature to distinguish between Atombios and non-atombios,
uint16_t bios_segment_address;
uint16_t protectedmodeoffset;
uint16_t configfilenameoffset;
uint16_t crc_block_offset;
uint16_t vbios_bootupmessageoffset;
uint16_t int10_offset;
uint16_t pcibusdevinitcode;
uint16_t iobaseaddress;
uint16_t subsystem_vendor_id;
uint16_t subsystem_id;
uint16_t pci_info_offset;
uint16_t masterhwfunction_offset; //Offest for SW to get all command function offsets, Don't change the position
uint16_t masterdatatable_offset; //Offest for SW to get all data table offsets, Don't change the position
uint16_t reserved;
uint32_t pspdirtableoffset;
};
/*==============================hw function portion======================================================================*/
/**************************************************************************** * Structures used in Command.mtb, each function name is not given here since those function could change from time to time * The real functionality of each function is associated with the parameter structure version when defined * For all internal cmd function definitions, please reference to atomstruct.h
****************************************************************************/ struct atom_master_list_of_command_functions_v2_1{
uint16_t asic_init; //Function
uint16_t cmd_function1; //used as an internal one
uint16_t cmd_function2; //used as an internal one
uint16_t cmd_function3; //used as an internal one
uint16_t digxencodercontrol; //Function
uint16_t cmd_function5; //used as an internal one
uint16_t cmd_function6; //used as an internal one
uint16_t cmd_function7; //used as an internal one
uint16_t cmd_function8; //used as an internal one
uint16_t cmd_function9; //used as an internal one
uint16_t setengineclock; //Function
uint16_t setmemoryclock; //Function
uint16_t setpixelclock; //Function
uint16_t enabledisppowergating; //Function
uint16_t cmd_function14; //used as an internal one
uint16_t cmd_function15; //used as an internal one
uint16_t cmd_function16; //used as an internal one
uint16_t cmd_function17; //used as an internal one
uint16_t cmd_function18; //used as an internal one
uint16_t cmd_function19; //used as an internal one
uint16_t cmd_function20; //used as an internal one
uint16_t cmd_function21; //used as an internal one
uint16_t cmd_function22; //used as an internal one
uint16_t cmd_function23; //used as an internal one
uint16_t cmd_function24; //used as an internal one
uint16_t cmd_function25; //used as an internal one
uint16_t cmd_function26; //used as an internal one
uint16_t cmd_function27; //used as an internal one
uint16_t cmd_function28; //used as an internal one
uint16_t cmd_function29; //used as an internal one
uint16_t cmd_function30; //used as an internal one
uint16_t cmd_function31; //used as an internal one
uint16_t cmd_function32; //used as an internal one
uint16_t cmd_function33; //used as an internal one
uint16_t blankcrtc; //Function
uint16_t enablecrtc; //Function
uint16_t cmd_function36; //used as an internal one
uint16_t cmd_function37; //used as an internal one
uint16_t cmd_function38; //used as an internal one
uint16_t cmd_function39; //used as an internal one
uint16_t cmd_function40; //used as an internal one
uint16_t getsmuclockinfo; //Function
uint16_t selectcrtc_source; //Function
uint16_t cmd_function43; //used as an internal one
uint16_t cmd_function44; //used as an internal one
uint16_t cmd_function45; //used as an internal one
uint16_t setdceclock; //Function
uint16_t getmemoryclock; //Function
uint16_t getengineclock; //Function
uint16_t setcrtc_usingdtdtiming; //Function
uint16_t externalencodercontrol; //Function
uint16_t cmd_function51; //used as an internal one
uint16_t cmd_function52; //used as an internal one
uint16_t cmd_function53; //used as an internal one
uint16_t processi2cchanneltransaction;//Function
uint16_t cmd_function55; //used as an internal one
uint16_t cmd_function56; //used as an internal one
uint16_t cmd_function57; //used as an internal one
uint16_t cmd_function58; //used as an internal one
uint16_t cmd_function59; //used as an internal one
uint16_t computegpuclockparam; //Function
uint16_t cmd_function61; //used as an internal one
uint16_t cmd_function62; //used as an internal one
uint16_t dynamicmemorysettings; //Function function
uint16_t memorytraining; //Function function
uint16_t cmd_function65; //used as an internal one
uint16_t cmd_function66; //used as an internal one
uint16_t setvoltage; //Function
uint16_t cmd_function68; //used as an internal one
uint16_t readefusevalue; //Function
uint16_t cmd_function70; //used as an internal one
uint16_t cmd_function71; //used as an internal one
uint16_t cmd_function72; //used as an internal one
uint16_t cmd_function73; //used as an internal one
uint16_t cmd_function74; //used as an internal one
uint16_t cmd_function75; //used as an internal one
uint16_t dig1transmittercontrol; //Function
uint16_t cmd_function77; //used as an internal one
uint16_t processauxchanneltransaction;//Function
uint16_t cmd_function79; //used as an internal one
uint16_t getvoltageinfo; //Function
};
/**************************************************************************** * Structures used in every command function
****************************************************************************/ struct atom_function_attribute
{
uint16_t ws_in_bytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword),
uint16_t ps_in_bytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword),
uint16_t updated_by_util:1; //[15]=flag to indicate the function is updated by util
};
/**************************************************************************** * Common header for all hw functions. * Every function pointed by _master_list_of_hw_function has this common header. * And the pointer actually points to this header.
****************************************************************************/ struct atom_rom_hw_function_header
{ struct atom_common_table_header func_header; struct atom_function_attribute func_attrib;
};
/*==============================sw data table portion======================================================================*/ /**************************************************************************** * Structures used in data.mtb, each data table name is not given here since those data table could change from time to time * The real name of each table is given when its data structure version is defined
****************************************************************************/ struct atom_master_list_of_data_tables_v2_1{
uint16_t utilitypipeline; /* Offest for the utility to get parser info,Don't change this position!*/
uint16_t multimedia_info;
uint16_t smc_dpm_info;
uint16_t sw_datatable3;
uint16_t firmwareinfo; /* Shared by various SW components */
uint16_t sw_datatable5;
uint16_t lcd_info; /* Shared by various SW components */
uint16_t sw_datatable7;
uint16_t smu_info;
uint16_t sw_datatable9;
uint16_t sw_datatable10;
uint16_t vram_usagebyfirmware; /* Shared by various SW components */
uint16_t gpio_pin_lut; /* Shared by various SW components */
uint16_t sw_datatable13;
uint16_t gfx_info;
uint16_t powerplayinfo; /* Shared by various SW components */
uint16_t sw_datatable16;
uint16_t sw_datatable17;
uint16_t sw_datatable18;
uint16_t sw_datatable19;
uint16_t sw_datatable20;
uint16_t sw_datatable21;
uint16_t displayobjectinfo; /* Shared by various SW components */
uint16_t indirectioaccess; /* used as an internal one */
uint16_t umc_info; /* Shared by various SW components */
uint16_t sw_datatable25;
uint16_t sw_datatable26;
uint16_t dce_info; /* Shared by various SW components */
uint16_t vram_info; /* Shared by various SW components */
uint16_t sw_datatable29;
uint16_t integratedsysteminfo; /* Shared by various SW components */
uint16_t asic_profiling_info; /* Shared by various SW components */
uint16_t voltageobject_info; /* shared by various SW components */
uint16_t sw_datatable33;
uint16_t sw_datatable34;
};
/* utilitypipeline * when format_revision==1 && content_revision==1, then this an info table for atomworks to use during debug session, no structure is associated with it. * the location of it can't change
*/
/* *************************************************************************** Data Table firmwareinfo structure ***************************************************************************
*/
struct atom_firmware_info_v3_3
{ struct atom_common_table_header table_header;
uint32_t firmware_revision;
uint32_t bootup_sclk_in10khz;
uint32_t bootup_mclk_in10khz;
uint32_t firmware_capability; // enum atombios_firmware_capability
uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */
uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address
uint16_t bootup_vddc_mv;
uint16_t bootup_vddci_mv;
uint16_t bootup_mvddc_mv;
uint16_t bootup_vddgfx_mv;
uint8_t mem_module_id;
uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */
uint8_t reserved1[2];
uint32_t mc_baseaddr_high;
uint32_t mc_baseaddr_low;
uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def
uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id
uint8_t board_i2c_feature_slave_addr;
uint8_t reserved3;
uint16_t bootup_mvddq_mv;
uint16_t bootup_mvpp_mv;
uint32_t zfbstartaddrin16mb;
uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS
uint32_t reserved2[2];
};
struct atom_firmware_info_v3_4 { struct atom_common_table_header table_header;
uint32_t firmware_revision;
uint32_t bootup_sclk_in10khz;
uint32_t bootup_mclk_in10khz;
uint32_t firmware_capability; // enum atombios_firmware_capability
uint32_t main_call_parser_entry; /* direct address of main parser call in VBIOS binary. */
uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address
uint16_t bootup_vddc_mv;
uint16_t bootup_vddci_mv;
uint16_t bootup_mvddc_mv;
uint16_t bootup_vddgfx_mv;
uint8_t mem_module_id;
uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */
uint8_t reserved1[2];
uint32_t mc_baseaddr_high;
uint32_t mc_baseaddr_low;
uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def
uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id
uint8_t board_i2c_feature_slave_addr;
uint8_t ras_rom_i2c_slave_addr;
uint16_t bootup_mvddq_mv;
uint16_t bootup_mvpp_mv;
uint32_t zfbstartaddrin16mb;
uint32_t pplib_pptable_id; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS
uint32_t mvdd_ratio; // mvdd_raio = (real mvdd in power rail)*1000/(mvdd_output_from_svi2)
uint16_t hw_bootup_vddgfx_mv; // hw default vddgfx voltage level decide by board strap
uint16_t hw_bootup_vddc_mv; // hw default vddc voltage level decide by board strap
uint16_t hw_bootup_mvddc_mv; // hw default mvddc voltage level decide by board strap
uint16_t hw_bootup_vddci_mv; // hw default vddci voltage level decide by board strap
uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt
uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt
uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb.
uint32_t pspbl_init_done_reg_addr;
uint32_t pspbl_init_done_value;
uint32_t pspbl_init_done_check_timeout; // time out in unit of us when polling pspbl init done
uint32_t reserved[2];
};
struct atom_firmware_info_v3_5 { struct atom_common_table_header table_header;
uint32_t firmware_revision;
uint32_t bootup_clk_reserved[2];
uint32_t firmware_capability; // enum atombios_firmware_capability
uint32_t fw_protect_region_size_in_kb; /* FW allocate a write protect region at top of FB. */
uint32_t bios_scratch_reg_startaddr; // 1st bios scratch register dword address
uint32_t bootup_voltage_reserved[2];
uint8_t mem_module_id;
uint8_t coolingsolution_id; /*0: Air cooling; 1: Liquid cooling ... */
uint8_t hw_blt_mode; //0:HW_BLT_DMA_PIO_MODE; 1:HW_BLT_LITE_SDMA_MODE; 2:HW_BLT_PCI_IO_MODE
uint8_t reserved1;
uint32_t mc_baseaddr_high;
uint32_t mc_baseaddr_low;
uint8_t board_i2c_feature_id; // enum of atom_board_i2c_feature_id_def
uint8_t board_i2c_feature_gpio_id; // i2c id find in gpio_lut data table gpio_id
uint8_t board_i2c_feature_slave_addr;
uint8_t ras_rom_i2c_slave_addr;
uint32_t bootup_voltage_reserved1;
uint32_t zfb_reserved; // if pplib_pptable_id!=0, pplib get powerplay table inside driver instead of from VBIOS
uint32_t pplib_pptable_id;
uint32_t hw_voltage_reserved[3];
uint32_t maco_pwrlimit_mw; // bomaco mode power limit in unit of m-watt
uint32_t usb_pwrlimit_mw; // power limit when USB is enable in unit of m-watt
uint32_t fw_reserved_size_in_kb; // VBIOS reserved extra fw size in unit of kb.
uint32_t pspbl_init_reserved[3];
uint32_t spi_rom_size; // GPU spi rom size
uint16_t support_dev_in_objinfo;
uint16_t disp_phy_tunning_size;
uint32_t reserved[16];
}; /* *************************************************************************** Data Table lcd_info structure ***************************************************************************
*/
/* atom_gpio_pin_assignment.gpio_id definition */ enum atom_gpio_pin_assignment_gpio_id {
I2C_HW_LANE_MUX =0x0f, /* only valid when bit7=1 */
I2C_HW_ENGINE_ID_MASK =0x70, /* only valid when bit7=1 */
I2C_HW_CAP =0x80, /*only when the I2C_HW_CAP is set, the pin ID is assigned to an I2C pin pair, otherwise, it's an generic GPIO pin */
/* gpio_id pre-define id for multiple usage */ /* GPIO use to control PCIE_VDDC in certain SLT board */
PCIE_VDDC_CONTROL_GPIO_PINID = 56, /* if PP_AC_DC_SWITCH_GPIO_PINID in Gpio_Pin_LutTable, AC/DC swithing feature is enable */
PP_AC_DC_SWITCH_GPIO_PINID = 60, /* VDDC_REGULATOR_VRHOT_GPIO_PINID in Gpio_Pin_LutTable, VRHot feature is enable */
VDDC_VRHOT_GPIO_PINID = 61, /*if VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled */
VDDC_PCC_GPIO_PINID = 62, /* Only used on certain SLT/PA board to allow utility to cut Efuse. */
EFUSE_CUT_ENABLE_GPIO_PINID = 63, /* ucGPIO=DRAM_SELF_REFRESH_GPIO_PIND uses for memory self refresh (ucGPIO=0, DRAM self-refresh; ucGPIO= */
DRAM_SELF_REFRESH_GPIO_PINID = 64, /* Thermal interrupt output->system thermal chip GPIO pin */
THERMAL_INT_OUTPUT_GPIO_PINID =65,
};
struct atom_gpio_pin_lut_v2_1
{ struct atom_common_table_header table_header; /*the real number of this included in the structure is calcualted by using the (whole structure size - the header size)/size of atom_gpio_pin_lut */ struct atom_gpio_pin_assignment gpio_pin[];
};
/* * VBIOS/PRE-OS always reserve a FB region at the top of frame buffer. driver should not write * access that region. driver can allocate their own reservation region as long as it does not * overlap firwmare's reservation region. * if (pre-NV1X) atom data table firmwareInfoTable version < 3.3: * in this case, atom data table vram_usagebyfirmwareTable version always <= 2.1 * if VBIOS/UEFI GOP is posted: * VBIOS/UEFIGOP update used_by_firmware_in_kb = total reserved size by VBIOS * update start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb; * ( total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10) * driver can allocate driver reservation region under firmware reservation, * used_by_driver_in_kb = driver reservation size * driver reservation start address = (start_address_in_kb - used_by_driver_in_kb) * Comment1[hchan]: There is only one reservation at the beginning of the FB reserved by * host driver. Host driver would overwrite the table with the following * used_by_firmware_in_kb = total reserved size for pf-vf info exchange and * set SRIOV_MSG_SHARE_RESERVATION mask start_address_in_kb = 0 * else there is no VBIOS reservation region: * driver must allocate driver reservation region at top of FB. * driver set used_by_driver_in_kb = driver reservation size * driver reservation start address = (total_mem_size_in_kb - used_by_driver_in_kb) * same as Comment1 * else (NV1X and after): * if VBIOS/UEFI GOP is posted: * VBIOS/UEFIGOP update: * used_by_firmware_in_kb = atom_firmware_Info_v3_3.fw_reserved_size_in_kb; * start_address_in_kb = total_mem_size_in_kb - used_by_firmware_in_kb; * (total_mem_size_in_kb = reg(CONFIG_MEMSIZE)<<10) * if vram_usagebyfirmwareTable version <= 2.1: * driver can allocate driver reservation region under firmware reservation, * driver set used_by_driver_in_kb = driver reservation size * driver reservation start address = start_address_in_kb - used_by_driver_in_kb * same as Comment1 * else driver can: * allocate it reservation any place as long as it does overlap pre-OS FW reservation area * set used_by_driver_region0_in_kb = driver reservation size * set driver_region0_start_address_in_kb = driver reservation region start address * Comment2[hchan]: Host driver can set used_by_firmware_in_kb and start_address_in_kb to * zero as the reservation for VF as it doesn’t exist. And Host driver should also * update atom_firmware_Info table to remove the same VBIOS reservation as well.
*/
struct atom_common_record_header
{
uint8_t record_type; //An emun to indicate the record type
uint8_t record_size; //The size of the whole record in byte
};
struct atom_i2c_record
{ struct atom_common_record_header record_header; //record_type = ATOM_I2C_RECORD_TYPE
uint8_t i2c_id;
uint8_t i2c_slave_addr; //The slave address, it's 0 when the record is attached to connector for DDC
};
struct atom_hpd_int_record
{ struct atom_common_record_header record_header; //record_type = ATOM_HPD_INT_RECORD_TYPE
uint8_t pin_id; //Corresponding block in GPIO_PIN_INFO table gives the pin info
uint8_t plugin_pin_state;
};
struct atom_connector_caps_record { struct atom_common_record_header
record_header; //record_type = ATOM_CONN_CAP_RECORD_TYPE
uint16_t connector_caps; //01b if internal display is checked; 10b if internal BL is checked; 0 of Not
};
struct atom_connector_speed_record { struct atom_common_record_header
record_header; //record_type = ATOM_CONN_SPEED_UPTO
uint32_t connector_max_speed; // connector Max speed attribute, it sets 8100 in Mhz when DP connector @8.1Ghz.
uint16_t reserved;
};
// Bit maps for ATOM_ENCODER_CAP_RECORD.usEncoderCap enum atom_encoder_caps_def
{
ATOM_ENCODER_CAP_RECORD_HBR2 =0x01, // DP1.2 HBR2 is supported by HW encoder, it is retired in NI. the real meaning from SI is MST_EN
ATOM_ENCODER_CAP_RECORD_MST_EN =0x01, // from SI, this bit means DP MST is enable or not.
ATOM_ENCODER_CAP_RECORD_HBR2_EN =0x02, // DP1.2 HBR2 setting is qualified and HBR2 can be enabled
ATOM_ENCODER_CAP_RECORD_HDMI6Gbps_EN =0x04, // HDMI2.0 6Gbps enable or not.
ATOM_ENCODER_CAP_RECORD_HBR3_EN =0x08, // DP1.3 HBR3 is supported by board.
ATOM_ENCODER_CAP_RECORD_DP2 =0x10, // DP2 is supported by ASIC/board.
ATOM_ENCODER_CAP_RECORD_UHBR10_EN =0x20, // DP2.0 UHBR10 settings is supported by board
ATOM_ENCODER_CAP_RECORD_UHBR13_5_EN =0x40, // DP2.0 UHBR13.5 settings is supported by board
ATOM_ENCODER_CAP_RECORD_UHBR20_EN =0x80, // DP2.0 UHBR20 settings is supported by board
ATOM_ENCODER_CAP_RECORD_USB_C_TYPE =0x100, // the DP connector is a USB-C type.
};
enum atom_connector_caps_def
{
ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY = 0x01, //a cap bit to indicate that this non-embedded display connector is an internal display
ATOM_CONNECTOR_CAP_INTERNAL_DISPLAY_BL = 0x02, //a cap bit to indicate that this internal display requires BL control from GPU, refers to lcd_info for BL PWM freq
};
//The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually struct atom_gpio_pin_control_pair
{
uint8_t gpio_id; // GPIO_ID, find the corresponding ID in GPIO_LUT table
uint8_t gpio_pinstate; // Pin state showing how to set-up the pin
};
struct atom_object_gpio_cntl_record
{ struct atom_common_record_header record_header;
uint8_t flag; // Future expnadibility
uint8_t number_of_pins; // Number of GPIO pins used to control the object struct atom_gpio_pin_control_pair gpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins
};
//Definitions for GPIO pin state enum atom_gpio_pin_control_pinstate_def
{
GPIO_PIN_TYPE_INPUT = 0x00,
GPIO_PIN_TYPE_OUTPUT = 0x10,
GPIO_PIN_TYPE_HW_CONTROL = 0x20,
//For GPIO_PIN_TYPE_OUTPUT the following is defined
GPIO_PIN_OUTPUT_STATE_MASK = 0x01,
GPIO_PIN_OUTPUT_STATE_SHIFT = 0,
GPIO_PIN_STATE_ACTIVE_LOW = 0x0,
GPIO_PIN_STATE_ACTIVE_HIGH = 0x1,
};
// Indexes to GPIO array in GLSync record // GLSync record is for Frame Lock/Gen Lock feature. enum atom_glsync_record_gpio_index_def
{
ATOM_GPIO_INDEX_GLSYNC_REFCLK = 0,
ATOM_GPIO_INDEX_GLSYNC_HSYNC = 1,
ATOM_GPIO_INDEX_GLSYNC_VSYNC = 2,
ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ = 3,
ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT = 4,
ATOM_GPIO_INDEX_GLSYNC_INTERRUPT = 5,
ATOM_GPIO_INDEX_GLSYNC_V_RESET = 6,
ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL = 7,
ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL = 8,
ATOM_GPIO_INDEX_GLSYNC_MAX = 9,
};
struct atom_connector_forced_tmds_cap_record
{ struct atom_common_record_header record_header; // override TMDS capability on this connector when it operate in TMDS mode. usMaxTmdsClkRate = max TMDS Clock in Mhz/2.5
uint8_t maxtmdsclkrate_in2_5mhz;
uint8_t reserved;
};
enum atom_display_device_tag_def{
ATOM_DISPLAY_LCD1_SUPPORT = 0x0002, //an embedded display is either an LVDS or eDP signal type of display
ATOM_DISPLAY_LCD2_SUPPORT = 0x0020, //second edp device tag 0x0020 for backward compability
ATOM_DISPLAY_DFP1_SUPPORT = 0x0008,
ATOM_DISPLAY_DFP2_SUPPORT = 0x0080,
ATOM_DISPLAY_DFP3_SUPPORT = 0x0200,
ATOM_DISPLAY_DFP4_SUPPORT = 0x0400,
ATOM_DISPLAY_DFP5_SUPPORT = 0x0800,
ATOM_DISPLAY_DFP6_SUPPORT = 0x0040,
ATOM_DISPLAY_DFPx_SUPPORT = 0x0ec8,
};
struct atom_display_object_path_v2
{
uint16_t display_objid; //Connector Object ID or Misc Object ID
uint16_t disp_recordoffset;
uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder
uint16_t extencoderobjid; //2nd encoder after the first encoder, from the connector point of view;
uint16_t encoder_recordoffset;
uint16_t extencoder_recordoffset;
uint16_t device_tag; //a supported device vector, each display path starts with this.the paths are enumerated in the way of priority, a path appears first
uint8_t priority_id;
uint8_t reserved;
};
struct atom_display_object_path_v3 {
uint16_t display_objid; //Connector Object ID or Misc Object ID
uint16_t disp_recordoffset;
uint16_t encoderobjid; //first encoder closer to the connector, could be either an external or intenal encoder
uint16_t reserved1; //only on USBC case, otherwise always = 0
uint16_t reserved2; //reserved and always = 0
uint16_t reserved3; //reserved and always = 0 //a supported device vector, each display path starts with this.the paths are enumerated in the way of priority, //a path appears first
uint16_t device_tag;
uint16_t reserved4; //reserved and always = 0
};
struct display_object_info_table_v1_4
{ struct atom_common_table_header table_header;
uint16_t supporteddevices;
uint8_t number_of_path;
uint8_t reserved; struct atom_display_object_path_v2 display_path[]; //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path
};
struct display_object_info_table_v1_5 { struct atom_common_table_header table_header;
uint16_t supporteddevices;
uint8_t number_of_path;
uint8_t reserved; // the real number of this included in the structure is calculated by using the // (whole structure size - the header size- number_of_path)/size of atom_display_object_path struct atom_display_object_path_v3 display_path[];
};
/* *************************************************************************** Data Table dce_info structure ***************************************************************************
*/ struct atom_display_controller_info_v4_1
{ struct atom_common_table_header table_header;
uint32_t display_caps;
uint32_t bootup_dispclk_10khz;
uint16_t dce_refclk_10khz;
uint16_t i2c_engine_refclk_10khz;
uint16_t dvi_ss_percentage; // in unit of 0.001%
uint16_t dvi_ss_rate_10hz;
uint16_t hdmi_ss_percentage; // in unit of 0.001%
uint16_t hdmi_ss_rate_10hz;
uint16_t dp_ss_percentage; // in unit of 0.001%
uint16_t dp_ss_rate_10hz;
uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t ss_reserved;
uint8_t hardcode_mode_num; // a hardcode mode number defined in StandardVESA_TimingTable when a CRT or DFP EDID is not available
uint8_t reserved1[3];
uint16_t dpphy_refclk_10khz;
uint16_t reserved2;
uint8_t dceip_min_ver;
uint8_t dceip_max_ver;
uint8_t max_disp_pipe_num;
uint8_t max_vbios_active_disp_pipe_num;
uint8_t max_ppll_num;
uint8_t max_disp_phy_num;
uint8_t max_aux_pairs;
uint8_t remotedisplayconfig;
uint8_t reserved3[8];
};
struct atom_display_controller_info_v4_2
{ struct atom_common_table_header table_header;
uint32_t display_caps;
uint32_t bootup_dispclk_10khz;
uint16_t dce_refclk_10khz;
uint16_t i2c_engine_refclk_10khz;
uint16_t dvi_ss_percentage; // in unit of 0.001%
uint16_t dvi_ss_rate_10hz;
uint16_t hdmi_ss_percentage; // in unit of 0.001%
uint16_t hdmi_ss_rate_10hz;
uint16_t dp_ss_percentage; // in unit of 0.001%
uint16_t dp_ss_rate_10hz;
uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t ss_reserved;
uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint16_t dpphy_refclk_10khz;
uint16_t reserved2;
uint8_t dcnip_min_ver;
uint8_t dcnip_max_ver;
uint8_t max_disp_pipe_num;
uint8_t max_vbios_active_disp_pipe_num;
uint8_t max_ppll_num;
uint8_t max_disp_phy_num;
uint8_t max_aux_pairs;
uint8_t remotedisplayconfig;
uint8_t reserved3[8];
};
struct atom_display_controller_info_v4_3
{ struct atom_common_table_header table_header;
uint32_t display_caps;
uint32_t bootup_dispclk_10khz;
uint16_t dce_refclk_10khz;
uint16_t i2c_engine_refclk_10khz;
uint16_t dvi_ss_percentage; // in unit of 0.001%
uint16_t dvi_ss_rate_10hz;
uint16_t hdmi_ss_percentage; // in unit of 0.001%
uint16_t hdmi_ss_rate_10hz;
uint16_t dp_ss_percentage; // in unit of 0.001%
uint16_t dp_ss_rate_10hz;
uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t ss_reserved;
uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint16_t dpphy_refclk_10khz;
uint16_t reserved2;
uint8_t dcnip_min_ver;
uint8_t dcnip_max_ver;
uint8_t max_disp_pipe_num;
uint8_t max_vbios_active_disp_pipe_num;
uint8_t max_ppll_num;
uint8_t max_disp_phy_num;
uint8_t max_aux_pairs;
uint8_t remotedisplayconfig;
uint8_t reserved3[8];
};
struct atom_display_controller_info_v4_4 { struct atom_common_table_header table_header;
uint32_t display_caps;
uint32_t bootup_dispclk_10khz;
uint16_t dce_refclk_10khz;
uint16_t i2c_engine_refclk_10khz;
uint16_t dvi_ss_percentage; // in unit of 0.001%
uint16_t dvi_ss_rate_10hz;
uint16_t hdmi_ss_percentage; // in unit of 0.001%
uint16_t hdmi_ss_rate_10hz;
uint16_t dp_ss_percentage; // in unit of 0.001%
uint16_t dp_ss_rate_10hz;
uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t ss_reserved;
uint8_t dfp_hardcode_mode_num; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
uint8_t dfp_hardcode_refreshrate;// DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint8_t vga_hardcode_refreshrate;// VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint16_t dpphy_refclk_10khz;
uint16_t hw_chip_id;
uint8_t dcnip_min_ver;
uint8_t dcnip_max_ver;
uint8_t max_disp_pipe_num;
uint8_t max_vbios_active_disp_pipum;
uint8_t max_ppll_num;
uint8_t max_disp_phy_num;
uint8_t max_aux_pairs;
uint8_t remotedisplayconfig;
uint32_t dispclk_pll_vco_freq;
uint32_t dp_ref_clk_freq;
uint32_t max_mclk_chg_lat; // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us)
uint32_t max_sr_exit_lat; // Worst case memory self refresh exit time, units of 100ns of ns (0.1us)
uint32_t max_sr_enter_exit_lat; // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)
uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx
uint16_t dc_golden_table_ver;
uint32_t reserved3[3];
};
enum dce_info_caps_def { // only for VBIOS
DCE_INFO_CAPS_FORCE_DISPDEV_CONNECTED = 0x02, // only for VBIOS
DCE_INFO_CAPS_DISABLE_DFP_DP_HBR2 = 0x04, // only for VBIOS
DCE_INFO_CAPS_ENABLE_INTERLAC_TIMING = 0x08, // only for VBIOS
DCE_INFO_CAPS_LTTPR_SUPPORT_ENABLE = 0x20,
DCE_INFO_CAPS_VBIOS_LTTPR_TRANSPARENT_ENABLE = 0x40,
};
struct atom_display_controller_info_v4_5
{ struct atom_common_table_header table_header;
uint32_t display_caps;
uint32_t bootup_dispclk_10khz;
uint16_t dce_refclk_10khz;
uint16_t i2c_engine_refclk_10khz;
uint16_t dvi_ss_percentage; // in unit of 0.001%
uint16_t dvi_ss_rate_10hz;
uint16_t hdmi_ss_percentage; // in unit of 0.001%
uint16_t hdmi_ss_rate_10hz;
uint16_t dp_ss_percentage; // in unit of 0.001%
uint16_t dp_ss_rate_10hz;
uint8_t dvi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t hdmi_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t dp_ss_mode; // enum of atom_spread_spectrum_mode
uint8_t ss_reserved; // DFP hardcode mode number defined in StandardVESA_TimingTable when EDID is not available
uint8_t dfp_hardcode_mode_num; // DFP hardcode mode refreshrate defined in StandardVESA_TimingTable when EDID is not available
uint8_t dfp_hardcode_refreshrate; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint8_t vga_hardcode_mode_num; // VGA hardcode mode number defined in StandardVESA_TimingTable when EDID is not avablable
uint8_t vga_hardcode_refreshrate;
uint16_t dpphy_refclk_10khz;
uint16_t hw_chip_id;
uint8_t dcnip_min_ver;
uint8_t dcnip_max_ver;
uint8_t max_disp_pipe_num;
uint8_t max_vbios_active_disp_pipe_num;
uint8_t max_ppll_num;
uint8_t max_disp_phy_num;
uint8_t max_aux_pairs;
uint8_t remotedisplayconfig;
uint32_t dispclk_pll_vco_freq;
uint32_t dp_ref_clk_freq; // Worst case blackout duration for a memory clock frequency (p-state) change, units of 100s of ns (0.1 us)
uint32_t max_mclk_chg_lat; // Worst case memory self refresh exit time, units of 100ns of ns (0.1us)
uint32_t max_sr_exit_lat; // Worst case memory self refresh entry followed by immediate exit time, units of 100ns of ns (0.1us)
uint32_t max_sr_enter_exit_lat;
uint16_t dc_golden_table_offset; // point of struct of atom_dc_golden_table_vxx
uint16_t dc_golden_table_ver;
uint32_t aux_dphy_rx_control0_val;
uint32_t aux_dphy_tx_control_val;
uint32_t aux_dphy_rx_control1_val;
uint32_t dc_gpio_aux_ctrl_0_val;
uint32_t dc_gpio_aux_ctrl_1_val;
uint32_t dc_gpio_aux_ctrl_2_val;
uint32_t dc_gpio_aux_ctrl_3_val;
uint32_t dc_gpio_aux_ctrl_4_val;
uint32_t dc_gpio_aux_ctrl_5_val;
uint32_t reserved[26];
};
/* *************************************************************************** Data Table ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO structure ***************************************************************************
*/ struct atom_ext_display_path
{
uint16_t device_tag; //A bit vector to show what devices are supported
uint16_t device_acpi_enum; //16bit device ACPI id.
uint16_t connectorobjid; //A physical connector for displays to plug in, using object connector definitions
uint8_t auxddclut_index; //An index into external AUX/DDC channel LUT
uint8_t hpdlut_index; //An index into external HPD pin LUT
uint16_t ext_encoder_objid; //external encoder object id
uint8_t channelmapping; // if ucChannelMapping=0, using default one to one mapping
uint8_t chpninvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted
uint16_t caps;
uint16_t reserved;
};
struct atom_external_display_connection_info
{ struct atom_common_table_header table_header;
uint8_t guid[16]; // a GUID is a 16 byte long string struct atom_ext_display_path path[7]; // total of fixed 7 entries.
uint8_t checksum; // a simple Checksum of the sum of whole structure equal to 0x0.
uint8_t stereopinid; // use for eDP panel
uint8_t remotedisplayconfig;
uint8_t edptolvdsrxid;
uint8_t fixdpvoltageswing; // usCaps[1]=1, this indicate DP_LANE_SET value
uint8_t reserved[3]; // for potential expansion
};
/* *************************************************************************** Data Table integratedsysteminfo structure ***************************************************************************
*/
struct atom_camera_module_info
{
uint8_t module_id; // 0: Rear, 1: Front right of user, 2: Front left of user
uint8_t module_name[8]; struct atom_camera_dphy_timing_param timingparam[6]; // Exact number is under estimation and confirmation from sensor vendor
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.