Path: blob/master/drivers/gpu/drm/amd/include/amd_acpi.h
26517 views
/*1* Copyright 2012 Advanced Micro Devices, Inc.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR17* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,18* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR19* OTHER DEALINGS IN THE SOFTWARE.20*21*/2223#ifndef AMD_ACPI_H24#define AMD_ACPI_H2526#define ACPI_AC_CLASS "ac_adapter"2728struct atif_verify_interface {29u16 size; /* structure size in bytes (includes size field) */30u16 version; /* version */31u32 notification_mask; /* supported notifications mask */32u32 function_bits; /* supported functions bit vector */33} __packed;3435struct atif_system_params {36u16 size; /* structure size in bytes (includes size field) */37u32 valid_mask; /* valid flags mask */38u32 flags; /* flags */39u8 command_code; /* notify command code */40} __packed;4142struct atif_sbios_requests {43u16 size; /* structure size in bytes (includes size field) */44u32 pending; /* pending sbios requests */45u8 panel_exp_mode; /* panel expansion mode */46u8 thermal_gfx; /* thermal state: target gfx controller */47u8 thermal_state; /* thermal state: state id (0: exit state, non-0: state) */48u8 forced_power_gfx; /* forced power state: target gfx controller */49u8 forced_power_state; /* forced power state: state id */50u8 system_power_src; /* system power source */51u8 backlight_level; /* panel backlight level (0-255) */52} __packed;5354struct atif_qbtc_arguments {55u16 size; /* structure size in bytes (includes size field) */56u8 requested_display; /* which display is requested */57} __packed;5859#define ATIF_QBTC_MAX_DATA_POINTS 996061struct atif_qbtc_data_point {62u8 luminance; /* luminance in percent */63u8 input_signal; /* input signal in range 0-255 */64} __packed;6566struct atif_qbtc_output {67u16 size; /* structure size in bytes (includes size field) */68u16 flags; /* all zeroes */69u8 error_code; /* error code */70u8 ac_level; /* default brightness on AC power */71u8 dc_level; /* default brightness on DC power */72u8 min_input_signal; /* max input signal in range 0-255 */73u8 max_input_signal; /* min input signal in range 0-255 */74u8 number_of_points; /* number of data points */75struct atif_qbtc_data_point data_points[ATIF_QBTC_MAX_DATA_POINTS];76} __packed;77static_assert(ATIF_QBTC_MAX_DATA_POINTS == MAX_LUMINANCE_DATA_POINTS);78static_assert(sizeof(struct atif_qbtc_data_point) == sizeof(struct amdgpu_dm_luminance_data));7980#define ATIF_NOTIFY_MASK 0x381#define ATIF_NOTIFY_NONE 082#define ATIF_NOTIFY_81 183#define ATIF_NOTIFY_N 28485struct atcs_verify_interface {86u16 size; /* structure size in bytes (includes size field) */87u16 version; /* version */88u32 function_bits; /* supported functions bit vector */89} __packed;9091#define ATCS_VALID_FLAGS_MASK 0x39293struct atcs_pref_req_input {94u16 size; /* structure size in bytes (includes size field) */95u16 client_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */96u16 valid_flags_mask; /* valid flags mask */97u16 flags; /* flags */98u8 req_type; /* request type */99u8 perf_req; /* performance request */100} __packed;101102struct atcs_pref_req_output {103u16 size; /* structure size in bytes (includes size field) */104u8 ret_val; /* return value */105} __packed;106107struct atcs_pwr_shift_input {108u16 size; /* structure size in bytes (includes size field) */109u16 dgpu_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */110u8 dev_acpi_state; /* D0 = 0, D3 hot = 3 */111u8 drv_state; /* 0 = operational, 1 = not operational */112} __packed;113114/* AMD hw uses four ACPI control methods:115* 1. ATIF116* ARG0: (ACPI_INTEGER) function code117* ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes118* OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes119* ATIF provides an entry point for the gfx driver to interact with the sbios.120* The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom121* notification. Which notification is used as indicated by the ATIF Control122* Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or123* a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS124* to identify pending System BIOS requests and associated parameters. For125* example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver126* will perform display device detection and invoke ATIF Control Method127* SELECT_ACTIVE_DISPLAYS.128*129* 2. ATPX130* ARG0: (ACPI_INTEGER) function code131* ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes132* OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes133* ATPX methods are used on PowerXpress systems to handle mux switching and134* discrete GPU power control.135*136* 3. ATRM137* ARG0: (ACPI_INTEGER) offset of vbios rom data138* ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K).139* OUTPUT: (ACPI_BUFFER) output buffer140* ATRM provides an interfacess to access the discrete GPU vbios image on141* PowerXpress systems with multiple GPUs.142*143* 4. ATCS144* ARG0: (ACPI_INTEGER) function code145* ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes146* OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes147* ATCS provides an interface to AMD chipset specific functionality.148*149*/150/* ATIF */151#define ATIF_FUNCTION_VERIFY_INTERFACE 0x0152/* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE153* ARG1: none154* OUTPUT:155* WORD - structure size in bytes (includes size field)156* WORD - version157* DWORD - supported notifications mask158* DWORD - supported functions bit vector159*/160/* Notifications mask */161# define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2)162# define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3)163# define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4)164# define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7)165# define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8)166# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED (1 << 12)167/* supported functions vector */168# define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0)169# define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1)170# define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12)171# define ATIF_QUERY_BACKLIGHT_TRANSFER_CHARACTERISTICS_SUPPORTED (1 << 15)172# define ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED (1 << 16)173# define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20)174#define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1175/* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS176* ARG1: none177* OUTPUT:178* WORD - structure size in bytes (includes size field)179* DWORD - valid flags mask180* DWORD - flags181*182* OR183*184* WORD - structure size in bytes (includes size field)185* DWORD - valid flags mask186* DWORD - flags187* BYTE - notify command code188*189* flags190* bits 1:0:191* 0 - Notify(VGA, 0x81) is not used for notification192* 1 - Notify(VGA, 0x81) is used for notification193* 2 - Notify(VGA, n) is used for notification where194* n (0xd0-0xd9) is specified in notify command code.195* bit 2:196* 1 - lid changes not reported though int10197* bit 3:198* 1 - system bios controls overclocking199* bit 4:200* 1 - enable overclocking201*/202#define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2203/* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS204* ARG1: none205* OUTPUT:206* WORD - structure size in bytes (includes size field)207* DWORD - pending sbios requests208* BYTE - reserved (all zeroes)209* BYTE - thermal state: target gfx controller210* BYTE - thermal state: state id (0: exit state, non-0: state)211* BYTE - forced power state: target gfx controller212* BYTE - forced power state: state id (0: forced state, non-0: state)213* BYTE - system power source214* BYTE - panel backlight level (0-255)215* BYTE - GPU package power limit: target gfx controller216* DWORD - GPU package power limit: value (24:8 fractional format, Watts)217*/218/* pending sbios requests */219# define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2)220# define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3)221# define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4)222# define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7)223# define ATIF_DGPU_DISPLAY_EVENT (1 << 8)224# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST (1 << 12)225/* target gfx controller */226# define ATIF_TARGET_GFX_SINGLE 0227# define ATIF_TARGET_GFX_PX_IGPU 1228# define ATIF_TARGET_GFX_PX_DGPU 2229/* system power source */230# define ATIF_POWER_SOURCE_AC 1231# define ATIF_POWER_SOURCE_DC 2232# define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3233# define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4234#define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD235/* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION236* ARG1:237* WORD - structure size in bytes (includes size field)238* WORD - gfx controller id239* BYTE - current temperature (degress Celsius)240* OUTPUT: none241*/242#define ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS 0x10243/* ARG0: ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS244* ARG1:245* WORD - structure size in bytes (includes size field)246* BYTE - requested display247* OUTPUT:248* WORD - structure size in bytes (includes size field)249* WORD - flags (currently all 16 bits are reserved)250* BYTE - error code (on failure, disregard all below fields)251* BYTE - AC level (default brightness in percent when machine has full power)252* BYTE - DC level (default brightness in percent when machine is on battery)253* BYTE - min input signal, in range 0-255, corresponding to 0% backlight254* BYTE - max input signal, in range 0-255, corresponding to 100% backlight255* BYTE - number of reported data points256* BYTE - luminance level in percent \ repeated structure257* BYTE - input signal in range 0-255 / does not have entries for 0% and 100%258*/259/* requested display */260# define ATIF_QBTC_REQUEST_LCD1 0261# define ATIF_QBTC_REQUEST_CRT1 1262# define ATIF_QBTC_REQUEST_DFP1 3263# define ATIF_QBTC_REQUEST_CRT2 4264# define ATIF_QBTC_REQUEST_LCD2 5265# define ATIF_QBTC_REQUEST_DFP2 7266# define ATIF_QBTC_REQUEST_DFP3 9267# define ATIF_QBTC_REQUEST_DFP4 10268# define ATIF_QBTC_REQUEST_DFP5 11269# define ATIF_QBTC_REQUEST_DFP6 12270/* error code */271# define ATIF_QBTC_ERROR_CODE_SUCCESS 0272# define ATIF_QBTC_ERROR_CODE_FAILURE 1273# define ATIF_QBTC_ERROR_CODE_DEVICE_NOT_SUPPORTED 2274#define ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION 0x11275/* ARG0: ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION276* ARG1: none277* OUTPUT: none278*/279#define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15280/* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION281* ARG1: none282* OUTPUT:283* WORD - number of reported external gfx devices284* WORD - device structure size in bytes (excludes device size field)285* WORD - flags \286* WORD - bus number / repeated structure287*/288/* flags */289# define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0)290291/* ATPX */292#define ATPX_FUNCTION_VERIFY_INTERFACE 0x0293/* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE294* ARG1: none295* OUTPUT:296* WORD - structure size in bytes (includes size field)297* WORD - version298* DWORD - supported functions bit vector299*/300/* supported functions vector */301# define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0)302# define ATPX_POWER_CONTROL_SUPPORTED (1 << 1)303# define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2)304# define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3)305# define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4)306# define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5)307# define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7)308# define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8)309#define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1310/* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS311* ARG1: none312* OUTPUT:313* WORD - structure size in bytes (includes size field)314* DWORD - valid flags mask315* DWORD - flags316*/317/* flags */318# define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0)319# define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1)320# define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2)321# define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3)322# define ATPX_TV_SIGNAL_MUXED (1 << 4)323# define ATPX_DFP_SIGNAL_MUXED (1 << 5)324# define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6)325# define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7)326# define ATPX_ACF_NOT_SUPPORTED (1 << 8)327# define ATPX_FIXED_NOT_SUPPORTED (1 << 9)328# define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10)329# define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11)330# define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12)331# define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14)332#define ATPX_FUNCTION_POWER_CONTROL 0x2333/* ARG0: ATPX_FUNCTION_POWER_CONTROL334* ARG1:335* WORD - structure size in bytes (includes size field)336* BYTE - dGPU power state (0: power off, 1: power on)337* OUTPUT: none338*/339#define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3340/* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL341* ARG1:342* WORD - structure size in bytes (includes size field)343* WORD - display mux control (0: iGPU, 1: dGPU)344* OUTPUT: none345*/346# define ATPX_INTEGRATED_GPU 0347# define ATPX_DISCRETE_GPU 1348#define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4349/* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL350* ARG1:351* WORD - structure size in bytes (includes size field)352* WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU)353* OUTPUT: none354*/355#define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5356/* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION357* ARG1:358* WORD - structure size in bytes (includes size field)359* WORD - target gpu (0: iGPU, 1: dGPU)360* OUTPUT: none361*/362#define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6363/* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION364* ARG1:365* WORD - structure size in bytes (includes size field)366* WORD - target gpu (0: iGPU, 1: dGPU)367* OUTPUT: none368*/369#define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8370/* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING371* ARG1: none372* OUTPUT:373* WORD - number of display connectors374* WORD - connector structure size in bytes (excludes connector size field)375* BYTE - flags \376* BYTE - ATIF display vector bit position } repeated377* BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure378* WORD - connector ACPI id /379*/380/* flags */381# define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0)382# define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1)383# define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2)384#define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9385/* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS386* ARG1: none387* OUTPUT:388* WORD - number of HPD/DDC ports389* WORD - port structure size in bytes (excludes port size field)390* BYTE - ATIF display vector bit position \391* BYTE - hpd id } reapeated structure392* BYTE - ddc id /393*394* available on A+A systems only395*/396/* hpd id */397# define ATPX_HPD_NONE 0398# define ATPX_HPD1 1399# define ATPX_HPD2 2400# define ATPX_HPD3 3401# define ATPX_HPD4 4402# define ATPX_HPD5 5403# define ATPX_HPD6 6404/* ddc id */405# define ATPX_DDC_NONE 0406# define ATPX_DDC1 1407# define ATPX_DDC2 2408# define ATPX_DDC3 3409# define ATPX_DDC4 4410# define ATPX_DDC5 5411# define ATPX_DDC6 6412# define ATPX_DDC7 7413# define ATPX_DDC8 8414415/* ATCS */416#define ATCS_FUNCTION_VERIFY_INTERFACE 0x0417/* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE418* ARG1: none419* OUTPUT:420* WORD - structure size in bytes (includes size field)421* WORD - version422* DWORD - supported functions bit vector423*/424/* supported functions vector */425# define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0)426# define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1)427# define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2)428# define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3)429# define ATCS_SET_POWER_SHIFT_CONTROL_SUPPORTED (1 << 7)430#define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1431/* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE432* ARG1: none433* OUTPUT:434* WORD - structure size in bytes (includes size field)435* DWORD - valid flags mask436* DWORD - flags (0: undocked, 1: docked)437*/438/* flags */439# define ATCS_DOCKED (1 << 0)440#define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2441/* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST442* ARG1:443* WORD - structure size in bytes (includes size field)444* WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)445* WORD - valid flags mask446* WORD - flags447* BYTE - request type448* BYTE - performance request449* OUTPUT:450* WORD - structure size in bytes (includes size field)451* BYTE - return value452*/453/* flags */454# define ATCS_ADVERTISE_CAPS (1 << 0)455# define ATCS_WAIT_FOR_COMPLETION (1 << 1)456/* request type */457# define ATCS_PCIE_LINK_SPEED 1458/* performance request */459# define ATCS_REMOVE 0460# define ATCS_FORCE_LOW_POWER 1461# define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */462# define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */463# define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */464/* return value */465# define ATCS_REQUEST_REFUSED 1466# define ATCS_REQUEST_COMPLETE 2467# define ATCS_REQUEST_IN_PROGRESS 3468#define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3469/* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION470* ARG1: none471* OUTPUT: none472*/473#define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4474/* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH475* ARG1:476* WORD - structure size in bytes (includes size field)477* WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)478* BYTE - number of active lanes479* OUTPUT:480* WORD - structure size in bytes (includes size field)481* BYTE - number of active lanes482*/483484#define ATCS_FUNCTION_POWER_SHIFT_CONTROL 0x8485/* ARG0: ATCS_FUNCTION_POWER_SHIFT_CONTROL486* ARG1:487* WORD - structure size in bytes (includes size field)488* WORD - dGPU id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)489* BYTE - Device ACPI state490* BYTE - Driver state491* OUTPUT: none492*/493494#endif495496497