/* * Copyright 2006-2007 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. */ /****************************************************************************//*Portion I: Definitions shared between VBIOS and Driver *//****************************************************************************/ #ifndef _ATOMBIOS_H#define _ATOMBIOS_H #define ATOM_VERSION_MAJOR 0x00020000#define ATOM_VERSION_MINOR 0x00000002 #define ATOM_HEADER_VERSION (ATOM_VERSION_MAJOR | ATOM_VERSION_MINOR) /* Endianness should be specified before inclusion, * default to little endian */#ifndef ATOM_BIG_ENDIAN#error Endian not specified#endif #ifdef _H2INC #ifndef ULONG typedef unsigned long ULONG; #endif #ifndef UCHAR typedef unsigned char UCHAR; #endif #ifndef USHORT typedef unsigned short USHORT; #endif#endif #define ATOM_DAC_A 0#define ATOM_DAC_B 1#define ATOM_EXT_DAC 2 #define ATOM_CRTC1 0#define ATOM_CRTC2 1#define ATOM_CRTC3 2#define ATOM_CRTC4 3#define ATOM_CRTC5 4#define ATOM_CRTC6 5 #define ATOM_UNDERLAY_PIPE0 16#define ATOM_UNDERLAY_PIPE1 17 #define ATOM_CRTC_INVALID 0xFF #define ATOM_DIGA 0#define ATOM_DIGB 1 #define ATOM_PPLL1 0#define ATOM_PPLL2 1#define ATOM_DCPLL 2#define ATOM_PPLL0 2#define ATOM_PPLL3 3 #define ATOM_PHY_PLL0 4#define ATOM_PHY_PLL1 5 #define ATOM_EXT_PLL1 8#define ATOM_GCK_DFS 8#define ATOM_EXT_PLL2 9#define ATOM_FCH_CLK 9#define ATOM_EXT_CLOCK 10#define ATOM_DP_DTO 11 #define ATOM_COMBOPHY_PLL0 20#define ATOM_COMBOPHY_PLL1 21#define ATOM_COMBOPHY_PLL2 22#define ATOM_COMBOPHY_PLL3 23#define ATOM_COMBOPHY_PLL4 24#define ATOM_COMBOPHY_PLL5 25 #define ATOM_PPLL_INVALID 0xFF #define ENCODER_REFCLK_SRC_P1PLL 0#define ENCODER_REFCLK_SRC_P2PLL 1#define ENCODER_REFCLK_SRC_DCPLL 2#define ENCODER_REFCLK_SRC_EXTCLK 3#define ENCODER_REFCLK_SRC_INVALID 0xFF #define ATOM_SCALER_DISABLE 0 //For Fudo, it's bypass and auto-cengter & no replication#define ATOM_SCALER_CENTER 1 //For Fudo, it's bypass and auto-center & auto replication#define ATOM_SCALER_EXPANSION 2 //For Fudo, it's 2 Tap alpha blending mode#define ATOM_SCALER_MULTI_EX 3 //For Fudo only, it's multi-tap mode only used to drive TV or CV, only used by Bios #define ATOM_DISABLE 0#define ATOM_ENABLE 1#define ATOM_LCD_BLOFF (ATOM_DISABLE+2)#define ATOM_LCD_BLON (ATOM_ENABLE+2)#define ATOM_LCD_BL_BRIGHTNESS_CONTROL (ATOM_ENABLE+3)#define ATOM_LCD_SELFTEST_START (ATOM_DISABLE+5)#define ATOM_LCD_SELFTEST_STOP (ATOM_ENABLE+5)#define ATOM_ENCODER_INIT (ATOM_DISABLE+7)#define ATOM_INIT (ATOM_DISABLE+7)#define ATOM_GET_STATUS (ATOM_DISABLE+8) #define ATOM_BLANKING 1#define ATOM_BLANKING_OFF 0 #define ATOM_CRT1 0#define ATOM_CRT2 1 #define ATOM_TV_NTSC 1#define ATOM_TV_NTSCJ 2#define ATOM_TV_PAL 3#define ATOM_TV_PALM 4#define ATOM_TV_PALCN 5#define ATOM_TV_PALN 6#define ATOM_TV_PAL60 7#define ATOM_TV_SECAM 8#define ATOM_TV_CV 16 #define ATOM_DAC1_PS2 1#define ATOM_DAC1_CV 2#define ATOM_DAC1_NTSC 3#define ATOM_DAC1_PAL 4 #define ATOM_DAC2_PS2 ATOM_DAC1_PS2#define ATOM_DAC2_CV ATOM_DAC1_CV#define ATOM_DAC2_NTSC ATOM_DAC1_NTSC#define ATOM_DAC2_PAL ATOM_DAC1_PAL #define ATOM_PM_ON 0#define ATOM_PM_STANDBY 1#define ATOM_PM_SUSPEND 2#define ATOM_PM_OFF 3 // For ATOM_LVDS_INFO_V12// Bit0:{=0:single, =1:dual},// Bit1 {=0:666RGB, =1:888RGB},// Bit2:3:{Grey level}// Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}#define ATOM_PANEL_MISC_DUAL 0x00000001#define ATOM_PANEL_MISC_888RGB 0x00000002#define ATOM_PANEL_MISC_GREY_LEVEL 0x0000000C#define ATOM_PANEL_MISC_FPDI 0x00000010#define ATOM_PANEL_MISC_GREY_LEVEL_SHIFT 2#define ATOM_PANEL_MISC_SPATIAL 0x00000020#define ATOM_PANEL_MISC_TEMPORAL 0x00000040#define ATOM_PANEL_MISC_API_ENABLED 0x00000080 #define MEMTYPE_DDR1 "DDR1"#define MEMTYPE_DDR2 "DDR2"#define MEMTYPE_DDR3 "DDR3"#define MEMTYPE_DDR4 "DDR4" #define ASIC_BUS_TYPE_PCI "PCI"#define ASIC_BUS_TYPE_AGP "AGP"#define ASIC_BUS_TYPE_PCIE "PCI_EXPRESS" //Maximum size of that FireGL flag string#define ATOM_FIREGL_FLAG_STRING "FGL" //Flag used to enable FireGL Support#define ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING 3 //sizeof( ATOM_FIREGL_FLAG_STRING ) #define ATOM_FAKE_DESKTOP_STRING "DSK" //Flag used to enable mobile ASIC on Desktop#define ATOM_MAX_SIZE_OF_FAKE_DESKTOP_STRING ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING #define ATOM_M54T_FLAG_STRING "M54T" //Flag used to enable M54T Support#define ATOM_MAX_SIZE_OF_M54T_FLAG_STRING 4 //sizeof( ATOM_M54T_FLAG_STRING ) #define HW_ASSISTED_I2C_STATUS_FAILURE 2#define HW_ASSISTED_I2C_STATUS_SUCCESS 1 #pragma pack(1) // BIOS data must use byte alignment // Define offset to location of ROM header.#define OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER 0x00000048L#define OFFSET_TO_ATOM_ROM_IMAGE_SIZE 0x00000002L #define OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE 0x94#define MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE 20 //including the terminator 0x0!#define OFFSET_TO_GET_ATOMBIOS_STRINGS_NUMBER 0x002f#define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x006e /****************************************************************************/// Common header for all tables (Data table, Command table).// Every table pointed _ATOM_MASTER_DATA_TABLE has this common header.// And the pointer actually points to this header./****************************************************************************/ typedef struct _ATOM_COMMON_TABLE_HEADER{ USHORT usStructureSize; UCHAR ucTableFormatRevision; //Change it when the Parser is not backward compatible UCHAR ucTableContentRevision; //Change it only when the table needs to change but the firmware //Image can't be updated, while Driver needs to carry the new table!}ATOM_COMMON_TABLE_HEADER; /****************************************************************************/// Structure stores the ROM header./****************************************************************************/typedef struct _ATOM_ROM_HEADER{ ATOM_COMMON_TABLE_HEADER sHeader; UCHAR uaFirmWareSignature[4]; //Signature to distinguish between Atombios and non-atombios, //atombios should init it as "ATOM", don't change the position USHORT usBiosRuntimeSegmentAddress; USHORT usProtectedModeInfoOffset; USHORT usConfigFilenameOffset; USHORT usCRC_BlockOffset; USHORT usBIOS_BootupMessageOffset; USHORT usInt10Offset; USHORT usPciBusDevInitCode; USHORT usIoBaseAddress; USHORT usSubsystemVendorID; USHORT usSubsystemID; USHORT usPCI_InfoOffset; USHORT usMasterCommandTableOffset;//Offest for SW to get all command table offsets, Don't change the position USHORT usMasterDataTableOffset; //Offest for SW to get all data table offsets, Don't change the position UCHAR ucExtendedFunctionCode; UCHAR ucReserved;}ATOM_ROM_HEADER; typedef struct _ATOM_ROM_HEADER_V2_1{ ATOM_COMMON_TABLE_HEADER sHeader; UCHAR uaFirmWareSignature[4]; //Signature to distinguish between Atombios and non-atombios, //atombios should init it as "ATOM", don't change the position USHORT usBiosRuntimeSegmentAddress; USHORT usProtectedModeInfoOffset; USHORT usConfigFilenameOffset; USHORT usCRC_BlockOffset; USHORT usBIOS_BootupMessageOffset; USHORT usInt10Offset; USHORT usPciBusDevInitCode; USHORT usIoBaseAddress; USHORT usSubsystemVendorID; USHORT usSubsystemID; USHORT usPCI_InfoOffset; USHORT usMasterCommandTableOffset;//Offest for SW to get all command table offsets, Don't change the position USHORT usMasterDataTableOffset; //Offest for SW to get all data table offsets, Don't change the position UCHAR ucExtendedFunctionCode; UCHAR ucReserved; ULONG ulPSPDirTableOffset;}ATOM_ROM_HEADER_V2_1; //==============================Command Table Portion==================================== /****************************************************************************/// Structures used in Command.mtb/****************************************************************************/typedef struct _ATOM_MASTER_LIST_OF_COMMAND_TABLES{ USHORT ASIC_Init; //Function Table, used by various SW components,latest version 1.1 USHORT GetDisplaySurfaceSize; //Atomic Table, Used by Bios when enabling HW ICON USHORT ASIC_RegistersInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT VRAM_BlockVenderDetection; //Atomic Table, used only by Bios USHORT DIGxEncoderControl; //Only used by Bios USHORT MemoryControllerInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT EnableCRTCMemReq; //Function Table,directly used by various SW components,latest version 2.1 USHORT MemoryParamAdjust; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock if needed USHORT DVOEncoderControl; //Function Table,directly used by various SW components,latest version 1.2 USHORT GPIOPinControl; //Atomic Table, only used by Bios USHORT SetEngineClock; //Function Table,directly used by various SW components,latest version 1.1 USHORT SetMemoryClock; //Function Table,directly used by various SW components,latest version 1.1 USHORT SetPixelClock; //Function Table,directly used by various SW components,latest version 1.2 USHORT EnableDispPowerGating; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT ResetMemoryDLL; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT ResetMemoryDevice; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT MemoryPLLInit; //Atomic Table, used only by Bios USHORT AdjustDisplayPll; //Atomic Table, used by various SW componentes. USHORT AdjustMemoryController; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT EnableASIC_StaticPwrMgt; //Atomic Table, only used by Bios USHORT SetUniphyInstance; //Atomic Table, only used by Bios USHORT DAC_LoadDetection; //Atomic Table, directly used by various SW components,latest version 1.2 USHORT LVTMAEncoderControl; //Atomic Table,directly used by various SW components,latest version 1.3 USHORT HW_Misc_Operation; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DAC1EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DAC2EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DVOOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT CV1OutputControl; //Atomic Table, Atomic Table, Obsolete from Ry6xx, use DAC2 Output instead USHORT GetConditionalGoldenSetting; //Only used by Bios USHORT SMC_Init; //Function Table,directly used by various SW components,latest version 1.1 USHORT PatchMCSetting; //only used by BIOS USHORT MC_SEQ_Control; //only used by BIOS USHORT Gfx_Harvesting; //Atomic Table, Obsolete from Ry6xx, Now only used by BIOS for GFX harvesting USHORT EnableScaler; //Atomic Table, used only by Bios USHORT BlankCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT GetPixelClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableVGA_Render; //Function Table,directly used by various SW components,latest version 1.1 USHORT GetSCLKOverMCLKRatio; //Atomic Table, only used by Bios USHORT SetCRTC_Timing; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetCRTC_OverScan; //Atomic Table, used by various SW components,latest version 1.1 USHORT GetSMUClockInfo; //Atomic Table, used only by Bios USHORT SelectCRTC_Source; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableGraphSurfaces; //Atomic Table, used only by Bios USHORT UpdateCRTC_DoubleBufferRegisters; //Atomic Table, used only by Bios USHORT LUT_AutoFill; //Atomic Table, only used by Bios USHORT SetDCEClock; //Atomic Table, start from DCE11.1, shared by driver and VBIOS, change DISPCLK and DPREFCLK USHORT GetMemoryClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT GetEngineClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetCRTC_UsingDTDTiming; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ExternalEncoderControl; //Atomic Table, directly used by various SW components,latest version 2.1 USHORT LVTMAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT VRAM_BlockDetectionByStrap; //Atomic Table, used only by Bios USHORT MemoryCleanUp; //Atomic Table, only used by Bios USHORT ProcessI2cChannelTransaction; //Function Table,only used by Bios USHORT WriteOneByteToHWAssistedI2C; //Function Table,indirectly used by various SW components USHORT ReadHWAssistedI2CStatus; //Atomic Table, indirectly used by various SW components USHORT SpeedFanControl; //Function Table,indirectly used by various SW components,called from ASIC_Init USHORT PowerConnectorDetection; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT MC_Synchronization; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT ComputeMemoryEnginePLL; //Atomic Table, indirectly used by various SW components,called from SetMemory/EngineClock USHORT Gfx_Init; //Atomic Table, indirectly used by various SW components,called from SetMemory or SetEngineClock USHORT VRAM_GetCurrentInfoBlock; //Atomic Table, used only by Bios USHORT DynamicMemorySettings; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT MemoryTraining; //Atomic Table, used only by Bios USHORT EnableSpreadSpectrumOnPPLL; //Atomic Table, directly used by various SW components,latest version 1.2 USHORT TMDSAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetVoltage; //Function Table,directly and/or indirectly used by various SW components,latest version 1.1 USHORT DAC1OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ReadEfuseValue; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ComputeMemoryClockParam; //Function Table,only used by Bios, obsolete soon.Switch to use "ReadEDIDFromHWAssistedI2C" USHORT ClockSource; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT MemoryDeviceInit; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT GetDispObjectInfo; //Atomic Table, indirectly used by various SW components,called from EnableVGARender USHORT DIG1EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG2EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG1TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG2TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT ProcessAuxChannelTransaction; //Function Table,only used by Bios USHORT DPEncoderService; //Function Table,only used by Bios USHORT GetVoltageInfo; //Function Table,only used by Bios since SI}ATOM_MASTER_LIST_OF_COMMAND_TABLES; // For backward compatible#define ReadEDIDFromHWAssistedI2C ProcessI2cChannelTransaction#define DPTranslatorControl DIG2EncoderControl#define UNIPHYTransmitterControl DIG1TransmitterControl#define LVTMATransmitterControl DIG2TransmitterControl#define SetCRTC_DPM_State GetConditionalGoldenSetting#define ASIC_StaticPwrMgtStatusChange SetUniphyInstance#define HPDInterruptService ReadHWAssistedI2CStatus#define EnableVGA_Access GetSCLKOverMCLKRatio#define EnableYUV GetDispObjectInfo#define DynamicClockGating EnableDispPowerGating#define SetupHWAssistedI2CStatus ComputeMemoryClockParam#define DAC2OutputControl ReadEfuseValue #define TMDSAEncoderControl PatchMCSetting#define LVDSEncoderControl MC_SEQ_Control#define LCD1OutputControl HW_Misc_Operation#define TV1OutputControl Gfx_Harvesting#define TVEncoderControl SMC_Init#define EnableHW_IconCursor SetDCEClock#define SetCRTC_Replication GetSMUClockInfo #define MemoryRefreshConversion Gfx_Init typedef struct _ATOM_MASTER_COMMAND_TABLE{ ATOM_COMMON_TABLE_HEADER sHeader; ATOM_MASTER_LIST_OF_COMMAND_TABLES ListOfCommandTables;}ATOM_MASTER_COMMAND_TABLE; /****************************************************************************/// Structures used in every command table/****************************************************************************/typedef struct _ATOM_TABLE_ATTRIBUTE{#if ATOM_BIG_ENDIAN USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword),#else USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag#endif}ATOM_TABLE_ATTRIBUTE; /****************************************************************************/// Common header for all command tables.// Every table pointed by _ATOM_MASTER_COMMAND_TABLE has this common header.// And the pointer actually points to this header./****************************************************************************/typedef struct _ATOM_COMMON_ROM_COMMAND_TABLE_HEADER{ ATOM_COMMON_TABLE_HEADER CommonHeader; ATOM_TABLE_ATTRIBUTE TableAttribute;}ATOM_COMMON_ROM_COMMAND_TABLE_HEADER; /****************************************************************************/// Structures used by ComputeMemoryEnginePLLTable/****************************************************************************/ #define COMPUTE_MEMORY_PLL_PARAM 1#define COMPUTE_ENGINE_PLL_PARAM 2#define ADJUST_MC_SETTING_PARAM 3 /****************************************************************************/// Structures used by AdjustMemoryControllerTable/****************************************************************************/typedef struct _ATOM_ADJUST_MEMORY_CLOCK_FREQ{#if ATOM_BIG_ENDIAN ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] ULONG ulClockFreq:24;#else ULONG ulClockFreq:24; ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block#endif}ATOM_ADJUST_MEMORY_CLOCK_FREQ;#define POINTER_RETURN_FLAG 0x80 typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS{ ULONG ulClock; //When returen, it's the re-calculated clock based on given Fb_div Post_Div and ref_div UCHAR ucAction; //0:reserved //1:Memory //2:Engine UCHAR ucReserved; //may expand to return larger Fbdiv later UCHAR ucFbDiv; //return value UCHAR ucPostDiv; //return value}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS; typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2{ ULONG ulClock; //When return, [23:0] return real clock UCHAR ucAction; //0:reserved;COMPUTE_MEMORY_PLL_PARAM:Memory;COMPUTE_ENGINE_PLL_PARAM:Engine. it return ref_div to be written to register USHORT usFbDiv; //return Feedback value to be written to register UCHAR ucPostDiv; //return post div to be written to register}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2; #define COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS #define SET_CLOCK_FREQ_MASK 0x00FFFFFF //Clock change tables only take bit [23:0] as the requested clock value#define USE_NON_BUS_CLOCK_MASK 0x01000000 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa)#define USE_MEMORY_SELF_REFRESH_MASK 0x02000000 //Only applicable to memory clock change, when set, using memory self refresh during clock transition#define SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04000000 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change#define FIRST_TIME_CHANGE_CLOCK 0x08000000 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup#define SKIP_SW_PROGRAM_PLL 0x10000000 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL#define USE_SS_ENABLED_PIXEL_CLOCK USE_NON_BUS_CLOCK_MASK #define b3USE_NON_BUS_CLOCK_MASK 0x01 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa)#define b3USE_MEMORY_SELF_REFRESH 0x02 //Only applicable to memory clock change, when set, using memory self refresh during clock transition#define b3SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change#define b3FIRST_TIME_CHANGE_CLOCK 0x08 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup#define b3SKIP_SW_PROGRAM_PLL 0x10 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL#define b3DRAM_SELF_REFRESH_EXIT 0x20 //Applicable to DRAM self refresh exit only. when set, it means it will go to program DRAM self refresh exit path#define b3SRIOV_INIT_BOOT 0x40 //Use by HV GPU driver only, to load uCode. for ASIC_InitTable SCLK parameter only#define b3SRIOV_LOAD_UCODE 0x40 //Use by HV GPU driver only, to load uCode. for ASIC_InitTable SCLK parameter only#define b3SRIOV_SKIP_ASIC_INIT 0x02 //Use by HV GPU driver only, skip ASIC_Init for primary adapter boot. for ASIC_InitTable SCLK parameter only typedef struct _ATOM_COMPUTE_CLOCK_FREQ{#if ATOM_BIG_ENDIAN ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM ULONG ulClockFreq:24; // in unit of 10kHz#else ULONG ulClockFreq:24; // in unit of 10kHz ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM#endif}ATOM_COMPUTE_CLOCK_FREQ; typedef struct _ATOM_S_MPLL_FB_DIVIDER{ USHORT usFbDivFrac; USHORT usFbDiv;}ATOM_S_MPLL_FB_DIVIDER; typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3{ union { ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter ULONG ulClockParams; //ULONG access for BE ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter }; UCHAR ucRefDiv; //Output ParameterLines 1–500 of 9309. Load more
/* * Copyright 2006-2007 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. */ /****************************************************************************/ /*Portion I: Definitions shared between VBIOS and Driver */ /****************************************************************************/ #ifndef _ATOMBIOS_H #define _ATOMBIOS_H #define ATOM_VERSION_MAJOR 0x00020000 #define ATOM_VERSION_MINOR 0x00000002 #define ATOM_HEADER_VERSION (ATOM_VERSION_MAJOR | ATOM_VERSION_MINOR) /* Endianness should be specified before inclusion, * default to little endian */ #ifndef ATOM_BIG_ENDIAN #error Endian not specified #endif #ifdef _H2INC #ifndef ULONG typedef unsigned long ULONG; #endif #ifndef UCHAR typedef unsigned char UCHAR; #endif #ifndef USHORT typedef unsigned short USHORT; #endif #endif #define ATOM_DAC_A 0 #define ATOM_DAC_B 1 #define ATOM_EXT_DAC 2 #define ATOM_CRTC1 0 #define ATOM_CRTC2 1 #define ATOM_CRTC3 2 #define ATOM_CRTC4 3 #define ATOM_CRTC5 4 #define ATOM_CRTC6 5 #define ATOM_UNDERLAY_PIPE0 16 #define ATOM_UNDERLAY_PIPE1 17 #define ATOM_CRTC_INVALID 0xFF #define ATOM_DIGA 0 #define ATOM_DIGB 1 #define ATOM_PPLL1 0 #define ATOM_PPLL2 1 #define ATOM_DCPLL 2 #define ATOM_PPLL0 2 #define ATOM_PPLL3 3 #define ATOM_PHY_PLL0 4 #define ATOM_PHY_PLL1 5 #define ATOM_EXT_PLL1 8 #define ATOM_GCK_DFS 8 #define ATOM_EXT_PLL2 9 #define ATOM_FCH_CLK 9 #define ATOM_EXT_CLOCK 10 #define ATOM_DP_DTO 11 #define ATOM_COMBOPHY_PLL0 20 #define ATOM_COMBOPHY_PLL1 21 #define ATOM_COMBOPHY_PLL2 22 #define ATOM_COMBOPHY_PLL3 23 #define ATOM_COMBOPHY_PLL4 24 #define ATOM_COMBOPHY_PLL5 25 #define ATOM_PPLL_INVALID 0xFF #define ENCODER_REFCLK_SRC_P1PLL 0 #define ENCODER_REFCLK_SRC_P2PLL 1 #define ENCODER_REFCLK_SRC_DCPLL 2 #define ENCODER_REFCLK_SRC_EXTCLK 3 #define ENCODER_REFCLK_SRC_INVALID 0xFF #define ATOM_SCALER_DISABLE 0 //For Fudo, it's bypass and auto-cengter & no replication #define ATOM_SCALER_CENTER 1 //For Fudo, it's bypass and auto-center & auto replication #define ATOM_SCALER_EXPANSION 2 //For Fudo, it's 2 Tap alpha blending mode #define ATOM_SCALER_MULTI_EX 3 //For Fudo only, it's multi-tap mode only used to drive TV or CV, only used by Bios #define ATOM_DISABLE 0 #define ATOM_ENABLE 1 #define ATOM_LCD_BLOFF (ATOM_DISABLE+2) #define ATOM_LCD_BLON (ATOM_ENABLE+2) #define ATOM_LCD_BL_BRIGHTNESS_CONTROL (ATOM_ENABLE+3) #define ATOM_LCD_SELFTEST_START (ATOM_DISABLE+5) #define ATOM_LCD_SELFTEST_STOP (ATOM_ENABLE+5) #define ATOM_ENCODER_INIT (ATOM_DISABLE+7) #define ATOM_INIT (ATOM_DISABLE+7) #define ATOM_GET_STATUS (ATOM_DISABLE+8) #define ATOM_BLANKING 1 #define ATOM_BLANKING_OFF 0 #define ATOM_CRT1 0 #define ATOM_CRT2 1 #define ATOM_TV_NTSC 1 #define ATOM_TV_NTSCJ 2 #define ATOM_TV_PAL 3 #define ATOM_TV_PALM 4 #define ATOM_TV_PALCN 5 #define ATOM_TV_PALN 6 #define ATOM_TV_PAL60 7 #define ATOM_TV_SECAM 8 #define ATOM_TV_CV 16 #define ATOM_DAC1_PS2 1 #define ATOM_DAC1_CV 2 #define ATOM_DAC1_NTSC 3 #define ATOM_DAC1_PAL 4 #define ATOM_DAC2_PS2 ATOM_DAC1_PS2 #define ATOM_DAC2_CV ATOM_DAC1_CV #define ATOM_DAC2_NTSC ATOM_DAC1_NTSC #define ATOM_DAC2_PAL ATOM_DAC1_PAL #define ATOM_PM_ON 0 #define ATOM_PM_STANDBY 1 #define ATOM_PM_SUSPEND 2 #define ATOM_PM_OFF 3 // For ATOM_LVDS_INFO_V12 // Bit0:{=0:single, =1:dual}, // Bit1 {=0:666RGB, =1:888RGB}, // Bit2:3:{Grey level} // Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888} #define ATOM_PANEL_MISC_DUAL 0x00000001 #define ATOM_PANEL_MISC_888RGB 0x00000002 #define ATOM_PANEL_MISC_GREY_LEVEL 0x0000000C #define ATOM_PANEL_MISC_FPDI 0x00000010 #define ATOM_PANEL_MISC_GREY_LEVEL_SHIFT 2 #define ATOM_PANEL_MISC_SPATIAL 0x00000020 #define ATOM_PANEL_MISC_TEMPORAL 0x00000040 #define ATOM_PANEL_MISC_API_ENABLED 0x00000080 #define MEMTYPE_DDR1 "DDR1" #define MEMTYPE_DDR2 "DDR2" #define MEMTYPE_DDR3 "DDR3" #define MEMTYPE_DDR4 "DDR4" #define ASIC_BUS_TYPE_PCI "PCI" #define ASIC_BUS_TYPE_AGP "AGP" #define ASIC_BUS_TYPE_PCIE "PCI_EXPRESS" //Maximum size of that FireGL flag string #define ATOM_FIREGL_FLAG_STRING "FGL" //Flag used to enable FireGL Support #define ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING 3 //sizeof( ATOM_FIREGL_FLAG_STRING ) #define ATOM_FAKE_DESKTOP_STRING "DSK" //Flag used to enable mobile ASIC on Desktop #define ATOM_MAX_SIZE_OF_FAKE_DESKTOP_STRING ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING #define ATOM_M54T_FLAG_STRING "M54T" //Flag used to enable M54T Support #define ATOM_MAX_SIZE_OF_M54T_FLAG_STRING 4 //sizeof( ATOM_M54T_FLAG_STRING ) #define HW_ASSISTED_I2C_STATUS_FAILURE 2 #define HW_ASSISTED_I2C_STATUS_SUCCESS 1 #pragma pack(1) // BIOS data must use byte alignment // Define offset to location of ROM header. #define OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER 0x00000048L #define OFFSET_TO_ATOM_ROM_IMAGE_SIZE 0x00000002L #define OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE 0x94 #define MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE 20 //including the terminator 0x0! #define OFFSET_TO_GET_ATOMBIOS_STRINGS_NUMBER 0x002f #define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x006e /****************************************************************************/ // Common header for all tables (Data table, Command table). // Every table pointed _ATOM_MASTER_DATA_TABLE has this common header. // And the pointer actually points to this header. /****************************************************************************/ typedef struct _ATOM_COMMON_TABLE_HEADER { USHORT usStructureSize; UCHAR ucTableFormatRevision; //Change it when the Parser is not backward compatible UCHAR ucTableContentRevision; //Change it only when the table needs to change but the firmware //Image can't be updated, while Driver needs to carry the new table! }ATOM_COMMON_TABLE_HEADER; /****************************************************************************/ // Structure stores the ROM header. /****************************************************************************/ typedef struct _ATOM_ROM_HEADER { ATOM_COMMON_TABLE_HEADER sHeader; UCHAR uaFirmWareSignature[4]; //Signature to distinguish between Atombios and non-atombios, //atombios should init it as "ATOM", don't change the position USHORT usBiosRuntimeSegmentAddress; USHORT usProtectedModeInfoOffset; USHORT usConfigFilenameOffset; USHORT usCRC_BlockOffset; USHORT usBIOS_BootupMessageOffset; USHORT usInt10Offset; USHORT usPciBusDevInitCode; USHORT usIoBaseAddress; USHORT usSubsystemVendorID; USHORT usSubsystemID; USHORT usPCI_InfoOffset; USHORT usMasterCommandTableOffset;//Offest for SW to get all command table offsets, Don't change the position USHORT usMasterDataTableOffset; //Offest for SW to get all data table offsets, Don't change the position UCHAR ucExtendedFunctionCode; UCHAR ucReserved; }ATOM_ROM_HEADER; typedef struct _ATOM_ROM_HEADER_V2_1 { ATOM_COMMON_TABLE_HEADER sHeader; UCHAR uaFirmWareSignature[4]; //Signature to distinguish between Atombios and non-atombios, //atombios should init it as "ATOM", don't change the position USHORT usBiosRuntimeSegmentAddress; USHORT usProtectedModeInfoOffset; USHORT usConfigFilenameOffset; USHORT usCRC_BlockOffset; USHORT usBIOS_BootupMessageOffset; USHORT usInt10Offset; USHORT usPciBusDevInitCode; USHORT usIoBaseAddress; USHORT usSubsystemVendorID; USHORT usSubsystemID; USHORT usPCI_InfoOffset; USHORT usMasterCommandTableOffset;//Offest for SW to get all command table offsets, Don't change the position USHORT usMasterDataTableOffset; //Offest for SW to get all data table offsets, Don't change the position UCHAR ucExtendedFunctionCode; UCHAR ucReserved; ULONG ulPSPDirTableOffset; }ATOM_ROM_HEADER_V2_1; //==============================Command Table Portion==================================== /****************************************************************************/ // Structures used in Command.mtb /****************************************************************************/ typedef struct _ATOM_MASTER_LIST_OF_COMMAND_TABLES{ USHORT ASIC_Init; //Function Table, used by various SW components,latest version 1.1 USHORT GetDisplaySurfaceSize; //Atomic Table, Used by Bios when enabling HW ICON USHORT ASIC_RegistersInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT VRAM_BlockVenderDetection; //Atomic Table, used only by Bios USHORT DIGxEncoderControl; //Only used by Bios USHORT MemoryControllerInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT EnableCRTCMemReq; //Function Table,directly used by various SW components,latest version 2.1 USHORT MemoryParamAdjust; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock if needed USHORT DVOEncoderControl; //Function Table,directly used by various SW components,latest version 1.2 USHORT GPIOPinControl; //Atomic Table, only used by Bios USHORT SetEngineClock; //Function Table,directly used by various SW components,latest version 1.1 USHORT SetMemoryClock; //Function Table,directly used by various SW components,latest version 1.1 USHORT SetPixelClock; //Function Table,directly used by various SW components,latest version 1.2 USHORT EnableDispPowerGating; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT ResetMemoryDLL; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT ResetMemoryDevice; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT MemoryPLLInit; //Atomic Table, used only by Bios USHORT AdjustDisplayPll; //Atomic Table, used by various SW componentes. USHORT AdjustMemoryController; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT EnableASIC_StaticPwrMgt; //Atomic Table, only used by Bios USHORT SetUniphyInstance; //Atomic Table, only used by Bios USHORT DAC_LoadDetection; //Atomic Table, directly used by various SW components,latest version 1.2 USHORT LVTMAEncoderControl; //Atomic Table,directly used by various SW components,latest version 1.3 USHORT HW_Misc_Operation; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DAC1EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DAC2EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT DVOOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT CV1OutputControl; //Atomic Table, Atomic Table, Obsolete from Ry6xx, use DAC2 Output instead USHORT GetConditionalGoldenSetting; //Only used by Bios USHORT SMC_Init; //Function Table,directly used by various SW components,latest version 1.1 USHORT PatchMCSetting; //only used by BIOS USHORT MC_SEQ_Control; //only used by BIOS USHORT Gfx_Harvesting; //Atomic Table, Obsolete from Ry6xx, Now only used by BIOS for GFX harvesting USHORT EnableScaler; //Atomic Table, used only by Bios USHORT BlankCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT GetPixelClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableVGA_Render; //Function Table,directly used by various SW components,latest version 1.1 USHORT GetSCLKOverMCLKRatio; //Atomic Table, only used by Bios USHORT SetCRTC_Timing; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetCRTC_OverScan; //Atomic Table, used by various SW components,latest version 1.1 USHORT GetSMUClockInfo; //Atomic Table, used only by Bios USHORT SelectCRTC_Source; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT EnableGraphSurfaces; //Atomic Table, used only by Bios USHORT UpdateCRTC_DoubleBufferRegisters; //Atomic Table, used only by Bios USHORT LUT_AutoFill; //Atomic Table, only used by Bios USHORT SetDCEClock; //Atomic Table, start from DCE11.1, shared by driver and VBIOS, change DISPCLK and DPREFCLK USHORT GetMemoryClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT GetEngineClock; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetCRTC_UsingDTDTiming; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ExternalEncoderControl; //Atomic Table, directly used by various SW components,latest version 2.1 USHORT LVTMAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT VRAM_BlockDetectionByStrap; //Atomic Table, used only by Bios USHORT MemoryCleanUp; //Atomic Table, only used by Bios USHORT ProcessI2cChannelTransaction; //Function Table,only used by Bios USHORT WriteOneByteToHWAssistedI2C; //Function Table,indirectly used by various SW components USHORT ReadHWAssistedI2CStatus; //Atomic Table, indirectly used by various SW components USHORT SpeedFanControl; //Function Table,indirectly used by various SW components,called from ASIC_Init USHORT PowerConnectorDetection; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT MC_Synchronization; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT ComputeMemoryEnginePLL; //Atomic Table, indirectly used by various SW components,called from SetMemory/EngineClock USHORT Gfx_Init; //Atomic Table, indirectly used by various SW components,called from SetMemory or SetEngineClock USHORT VRAM_GetCurrentInfoBlock; //Atomic Table, used only by Bios USHORT DynamicMemorySettings; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT MemoryTraining; //Atomic Table, used only by Bios USHORT EnableSpreadSpectrumOnPPLL; //Atomic Table, directly used by various SW components,latest version 1.2 USHORT TMDSAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT SetVoltage; //Function Table,directly and/or indirectly used by various SW components,latest version 1.1 USHORT DAC1OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ReadEfuseValue; //Atomic Table, directly used by various SW components,latest version 1.1 USHORT ComputeMemoryClockParam; //Function Table,only used by Bios, obsolete soon.Switch to use "ReadEDIDFromHWAssistedI2C" USHORT ClockSource; //Atomic Table, indirectly used by various SW components,called from ASIC_Init USHORT MemoryDeviceInit; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock USHORT GetDispObjectInfo; //Atomic Table, indirectly used by various SW components,called from EnableVGARender USHORT DIG1EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG2EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG1TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT DIG2TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 USHORT ProcessAuxChannelTransaction; //Function Table,only used by Bios USHORT DPEncoderService; //Function Table,only used by Bios USHORT GetVoltageInfo; //Function Table,only used by Bios since SI }ATOM_MASTER_LIST_OF_COMMAND_TABLES; // For backward compatible #define ReadEDIDFromHWAssistedI2C ProcessI2cChannelTransaction #define DPTranslatorControl DIG2EncoderControl #define UNIPHYTransmitterControl DIG1TransmitterControl #define LVTMATransmitterControl DIG2TransmitterControl #define SetCRTC_DPM_State GetConditionalGoldenSetting #define ASIC_StaticPwrMgtStatusChange SetUniphyInstance #define HPDInterruptService ReadHWAssistedI2CStatus #define EnableVGA_Access GetSCLKOverMCLKRatio #define EnableYUV GetDispObjectInfo #define DynamicClockGating EnableDispPowerGating #define SetupHWAssistedI2CStatus ComputeMemoryClockParam #define DAC2OutputControl ReadEfuseValue #define TMDSAEncoderControl PatchMCSetting #define LVDSEncoderControl MC_SEQ_Control #define LCD1OutputControl HW_Misc_Operation #define TV1OutputControl Gfx_Harvesting #define TVEncoderControl SMC_Init #define EnableHW_IconCursor SetDCEClock #define SetCRTC_Replication GetSMUClockInfo #define MemoryRefreshConversion Gfx_Init typedef struct _ATOM_MASTER_COMMAND_TABLE { ATOM_COMMON_TABLE_HEADER sHeader; ATOM_MASTER_LIST_OF_COMMAND_TABLES ListOfCommandTables; }ATOM_MASTER_COMMAND_TABLE; /****************************************************************************/ // Structures used in every command table /****************************************************************************/ typedef struct _ATOM_TABLE_ATTRIBUTE { #if ATOM_BIG_ENDIAN USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), #else USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag #endif }ATOM_TABLE_ATTRIBUTE; /****************************************************************************/ // Common header for all command tables. // Every table pointed by _ATOM_MASTER_COMMAND_TABLE has this common header. // And the pointer actually points to this header. /****************************************************************************/ typedef struct _ATOM_COMMON_ROM_COMMAND_TABLE_HEADER { ATOM_COMMON_TABLE_HEADER CommonHeader; ATOM_TABLE_ATTRIBUTE TableAttribute; }ATOM_COMMON_ROM_COMMAND_TABLE_HEADER; /****************************************************************************/ // Structures used by ComputeMemoryEnginePLLTable /****************************************************************************/ #define COMPUTE_MEMORY_PLL_PARAM 1 #define COMPUTE_ENGINE_PLL_PARAM 2 #define ADJUST_MC_SETTING_PARAM 3 /****************************************************************************/ // Structures used by AdjustMemoryControllerTable /****************************************************************************/ typedef struct _ATOM_ADJUST_MEMORY_CLOCK_FREQ { #if ATOM_BIG_ENDIAN ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] ULONG ulClockFreq:24; #else ULONG ulClockFreq:24; ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block #endif }ATOM_ADJUST_MEMORY_CLOCK_FREQ; #define POINTER_RETURN_FLAG 0x80 typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS { ULONG ulClock; //When returen, it's the re-calculated clock based on given Fb_div Post_Div and ref_div UCHAR ucAction; //0:reserved //1:Memory //2:Engine UCHAR ucReserved; //may expand to return larger Fbdiv later UCHAR ucFbDiv; //return value UCHAR ucPostDiv; //return value }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS; typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2 { ULONG ulClock; //When return, [23:0] return real clock UCHAR ucAction; //0:reserved;COMPUTE_MEMORY_PLL_PARAM:Memory;COMPUTE_ENGINE_PLL_PARAM:Engine. it return ref_div to be written to register USHORT usFbDiv; //return Feedback value to be written to register UCHAR ucPostDiv; //return post div to be written to register }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2; #define COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS #define SET_CLOCK_FREQ_MASK 0x00FFFFFF //Clock change tables only take bit [23:0] as the requested clock value #define USE_NON_BUS_CLOCK_MASK 0x01000000 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa) #define USE_MEMORY_SELF_REFRESH_MASK 0x02000000 //Only applicable to memory clock change, when set, using memory self refresh during clock transition #define SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04000000 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change #define FIRST_TIME_CHANGE_CLOCK 0x08000000 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup #define SKIP_SW_PROGRAM_PLL 0x10000000 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL #define USE_SS_ENABLED_PIXEL_CLOCK USE_NON_BUS_CLOCK_MASK #define b3USE_NON_BUS_CLOCK_MASK 0x01 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa) #define b3USE_MEMORY_SELF_REFRESH 0x02 //Only applicable to memory clock change, when set, using memory self refresh during clock transition #define b3SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change #define b3FIRST_TIME_CHANGE_CLOCK 0x08 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup #define b3SKIP_SW_PROGRAM_PLL 0x10 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL #define b3DRAM_SELF_REFRESH_EXIT 0x20 //Applicable to DRAM self refresh exit only. when set, it means it will go to program DRAM self refresh exit path #define b3SRIOV_INIT_BOOT 0x40 //Use by HV GPU driver only, to load uCode. for ASIC_InitTable SCLK parameter only #define b3SRIOV_LOAD_UCODE 0x40 //Use by HV GPU driver only, to load uCode. for ASIC_InitTable SCLK parameter only #define b3SRIOV_SKIP_ASIC_INIT 0x02 //Use by HV GPU driver only, skip ASIC_Init for primary adapter boot. for ASIC_InitTable SCLK parameter only typedef struct _ATOM_COMPUTE_CLOCK_FREQ { #if ATOM_BIG_ENDIAN ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM ULONG ulClockFreq:24; // in unit of 10kHz #else ULONG ulClockFreq:24; // in unit of 10kHz ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM #endif }ATOM_COMPUTE_CLOCK_FREQ; typedef struct _ATOM_S_MPLL_FB_DIVIDER { USHORT usFbDivFrac; USHORT usFbDiv; }ATOM_S_MPLL_FB_DIVIDER; typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3 { union { ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter ULONG ulClockParams; //ULONG access for BE ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter }; UCHAR ucRefDiv; //Output Parameter