19e05b2f4SAlex Deucher /* 29e05b2f4SAlex Deucher * Copyright 2012 Advanced Micro Devices, Inc. 39e05b2f4SAlex Deucher * 49e05b2f4SAlex Deucher * Permission is hereby granted, free of charge, to any person obtaining a 59e05b2f4SAlex Deucher * copy of this software and associated documentation files (the "Software"), 69e05b2f4SAlex Deucher * to deal in the Software without restriction, including without limitation 79e05b2f4SAlex Deucher * the rights to use, copy, modify, merge, publish, distribute, sublicense, 89e05b2f4SAlex Deucher * and/or sell copies of the Software, and to permit persons to whom the 99e05b2f4SAlex Deucher * Software is furnished to do so, subject to the following conditions: 109e05b2f4SAlex Deucher * 119e05b2f4SAlex Deucher * The above copyright notice and this permission notice shall be included in 129e05b2f4SAlex Deucher * all copies or substantial portions of the Software. 139e05b2f4SAlex Deucher * 149e05b2f4SAlex Deucher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 159e05b2f4SAlex Deucher * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 169e05b2f4SAlex Deucher * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 179e05b2f4SAlex Deucher * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 189e05b2f4SAlex Deucher * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 199e05b2f4SAlex Deucher * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 209e05b2f4SAlex Deucher * OTHER DEALINGS IN THE SOFTWARE. 219e05b2f4SAlex Deucher * 229e05b2f4SAlex Deucher */ 239e05b2f4SAlex Deucher 249e05b2f4SAlex Deucher #ifndef RADEON_ACPI_H 259e05b2f4SAlex Deucher #define RADEON_ACPI_H 269e05b2f4SAlex Deucher 27fda4b25cSLuca Tettamanti struct radeon_device; 28fda4b25cSLuca Tettamanti struct acpi_bus_event; 29fda4b25cSLuca Tettamanti 309e05b2f4SAlex Deucher /* AMD hw uses four ACPI control methods: 319e05b2f4SAlex Deucher * 1. ATIF 329e05b2f4SAlex Deucher * ARG0: (ACPI_INTEGER) function code 339e05b2f4SAlex Deucher * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 349e05b2f4SAlex Deucher * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 359e05b2f4SAlex Deucher * ATIF provides an entry point for the gfx driver to interact with the sbios. 369e05b2f4SAlex Deucher * The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom 379e05b2f4SAlex Deucher * notification. Which notification is used as indicated by the ATIF Control 389e05b2f4SAlex Deucher * Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or 399e05b2f4SAlex Deucher * a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS 409e05b2f4SAlex Deucher * to identify pending System BIOS requests and associated parameters. For 419e05b2f4SAlex Deucher * example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver 429e05b2f4SAlex Deucher * will perform display device detection and invoke ATIF Control Method 439e05b2f4SAlex Deucher * SELECT_ACTIVE_DISPLAYS. 449e05b2f4SAlex Deucher * 459e05b2f4SAlex Deucher * 2. ATPX 469e05b2f4SAlex Deucher * ARG0: (ACPI_INTEGER) function code 479e05b2f4SAlex Deucher * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 489e05b2f4SAlex Deucher * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 499e05b2f4SAlex Deucher * ATPX methods are used on PowerXpress systems to handle mux switching and 509e05b2f4SAlex Deucher * discrete GPU power control. 519e05b2f4SAlex Deucher * 529e05b2f4SAlex Deucher * 3. ATRM 539e05b2f4SAlex Deucher * ARG0: (ACPI_INTEGER) offset of vbios rom data 549e05b2f4SAlex Deucher * ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K). 559e05b2f4SAlex Deucher * OUTPUT: (ACPI_BUFFER) output buffer 569e05b2f4SAlex Deucher * ATRM provides an interfacess to access the discrete GPU vbios image on 579e05b2f4SAlex Deucher * PowerXpress systems with multiple GPUs. 589e05b2f4SAlex Deucher * 599e05b2f4SAlex Deucher * 4. ATCS 609e05b2f4SAlex Deucher * ARG0: (ACPI_INTEGER) function code 619e05b2f4SAlex Deucher * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 629e05b2f4SAlex Deucher * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 639e05b2f4SAlex Deucher * ATCS provides an interface to AMD chipset specific functionality. 649e05b2f4SAlex Deucher * 659e05b2f4SAlex Deucher */ 669e05b2f4SAlex Deucher /* ATIF */ 679e05b2f4SAlex Deucher #define ATIF_FUNCTION_VERIFY_INTERFACE 0x0 689e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE 699e05b2f4SAlex Deucher * ARG1: none 709e05b2f4SAlex Deucher * OUTPUT: 719e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 729e05b2f4SAlex Deucher * WORD - version 739e05b2f4SAlex Deucher * DWORD - supported notifications mask 749e05b2f4SAlex Deucher * DWORD - supported functions bit vector 759e05b2f4SAlex Deucher */ 769e05b2f4SAlex Deucher /* Notifications mask */ 779e05b2f4SAlex Deucher # define ATIF_DISPLAY_SWITCH_REQUEST_SUPPORTED (1 << 0) 789e05b2f4SAlex Deucher # define ATIF_EXPANSION_MODE_CHANGE_REQUEST_SUPPORTED (1 << 1) 799e05b2f4SAlex Deucher # define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2) 809e05b2f4SAlex Deucher # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3) 819e05b2f4SAlex Deucher # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4) 829e05b2f4SAlex Deucher # define ATIF_DISPLAY_CONF_CHANGE_REQUEST_SUPPORTED (1 << 5) 839e05b2f4SAlex Deucher # define ATIF_PX_GFX_SWITCH_REQUEST_SUPPORTED (1 << 6) 849e05b2f4SAlex Deucher # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7) 859e05b2f4SAlex Deucher # define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8) 869e05b2f4SAlex Deucher /* supported functions vector */ 879e05b2f4SAlex Deucher # define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0) 889e05b2f4SAlex Deucher # define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1) 899e05b2f4SAlex Deucher # define ATIF_SELECT_ACTIVE_DISPLAYS_SUPPORTED (1 << 2) 909e05b2f4SAlex Deucher # define ATIF_GET_LID_STATE_SUPPORTED (1 << 3) 919e05b2f4SAlex Deucher # define ATIF_GET_TV_STANDARD_FROM_CMOS_SUPPORTED (1 << 4) 929e05b2f4SAlex Deucher # define ATIF_SET_TV_STANDARD_IN_CMOS_SUPPORTED (1 << 5) 939e05b2f4SAlex Deucher # define ATIF_GET_PANEL_EXPANSION_MODE_FROM_CMOS_SUPPORTED (1 << 6) 949e05b2f4SAlex Deucher # define ATIF_SET_PANEL_EXPANSION_MODE_IN_CMOS_SUPPORTED (1 << 7) 959e05b2f4SAlex Deucher # define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12) 969e05b2f4SAlex Deucher # define ATIF_GET_GRAPHICS_DEVICE_TYPES_SUPPORTED (1 << 14) 97c5e38e11SAlex Deucher # define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20) 989e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1 999e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 1009e05b2f4SAlex Deucher * ARG1: none 1019e05b2f4SAlex Deucher * OUTPUT: 1029e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1039e05b2f4SAlex Deucher * DWORD - valid flags mask 1049e05b2f4SAlex Deucher * DWORD - flags 1059e05b2f4SAlex Deucher * 1069e05b2f4SAlex Deucher * OR 1079e05b2f4SAlex Deucher * 1089e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1099e05b2f4SAlex Deucher * DWORD - valid flags mask 1109e05b2f4SAlex Deucher * DWORD - flags 1119e05b2f4SAlex Deucher * BYTE - notify command code 1129e05b2f4SAlex Deucher * 1139e05b2f4SAlex Deucher * flags 1149e05b2f4SAlex Deucher * bits 1:0: 1159e05b2f4SAlex Deucher * 0 - Notify(VGA, 0x81) is not used for notification 1169e05b2f4SAlex Deucher * 1 - Notify(VGA, 0x81) is used for notification 1179e05b2f4SAlex Deucher * 2 - Notify(VGA, n) is used for notification where 1189e05b2f4SAlex Deucher * n (0xd0-0xd9) is specified in notify command code. 1199e05b2f4SAlex Deucher * bit 2: 1209e05b2f4SAlex Deucher * 1 - lid changes not reported though int10 1219e05b2f4SAlex Deucher */ 1229e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2 1239e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 1249e05b2f4SAlex Deucher * ARG1: none 1259e05b2f4SAlex Deucher * OUTPUT: 1269e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1279e05b2f4SAlex Deucher * DWORD - pending sbios requests 1289e05b2f4SAlex Deucher * BYTE - panel expansion mode 1299e05b2f4SAlex Deucher * BYTE - thermal state: target gfx controller 1309e05b2f4SAlex Deucher * BYTE - thermal state: state id (0: exit state, non-0: state) 1319e05b2f4SAlex Deucher * BYTE - forced power state: target gfx controller 1329e05b2f4SAlex Deucher * BYTE - forced power state: state id 1339e05b2f4SAlex Deucher * BYTE - system power source 1349e05b2f4SAlex Deucher * BYTE - panel backlight level (0-255) 1359e05b2f4SAlex Deucher */ 1369e05b2f4SAlex Deucher /* pending sbios requests */ 1379e05b2f4SAlex Deucher # define ATIF_DISPLAY_SWITCH_REQUEST (1 << 0) 1389e05b2f4SAlex Deucher # define ATIF_EXPANSION_MODE_CHANGE_REQUEST (1 << 1) 1399e05b2f4SAlex Deucher # define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2) 1409e05b2f4SAlex Deucher # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3) 1419e05b2f4SAlex Deucher # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4) 1429e05b2f4SAlex Deucher # define ATIF_DISPLAY_CONF_CHANGE_REQUEST (1 << 5) 1439e05b2f4SAlex Deucher # define ATIF_PX_GFX_SWITCH_REQUEST (1 << 6) 1449e05b2f4SAlex Deucher # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7) 1459e05b2f4SAlex Deucher # define ATIF_DGPU_DISPLAY_EVENT (1 << 8) 1469e05b2f4SAlex Deucher /* panel expansion mode */ 1479e05b2f4SAlex Deucher # define ATIF_PANEL_EXPANSION_DISABLE 0 1489e05b2f4SAlex Deucher # define ATIF_PANEL_EXPANSION_FULL 1 1499e05b2f4SAlex Deucher # define ATIF_PANEL_EXPANSION_ASPECT 2 1509e05b2f4SAlex Deucher /* target gfx controller */ 1519e05b2f4SAlex Deucher # define ATIF_TARGET_GFX_SINGLE 0 1529e05b2f4SAlex Deucher # define ATIF_TARGET_GFX_PX_IGPU 1 1539e05b2f4SAlex Deucher # define ATIF_TARGET_GFX_PX_DGPU 2 1549e05b2f4SAlex Deucher /* system power source */ 1559e05b2f4SAlex Deucher # define ATIF_POWER_SOURCE_AC 1 1569e05b2f4SAlex Deucher # define ATIF_POWER_SOURCE_DC 2 1579e05b2f4SAlex Deucher # define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3 1589e05b2f4SAlex Deucher # define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4 1599e05b2f4SAlex Deucher #define ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS 0x3 1609e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS 1619e05b2f4SAlex Deucher * ARG1: 1629e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1639e05b2f4SAlex Deucher * WORD - selected displays 1649e05b2f4SAlex Deucher * WORD - connected displays 1659e05b2f4SAlex Deucher * OUTPUT: 1669e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1679e05b2f4SAlex Deucher * WORD - selected displays 1689e05b2f4SAlex Deucher */ 1699e05b2f4SAlex Deucher # define ATIF_LCD1 (1 << 0) 1709e05b2f4SAlex Deucher # define ATIF_CRT1 (1 << 1) 1719e05b2f4SAlex Deucher # define ATIF_TV (1 << 2) 1729e05b2f4SAlex Deucher # define ATIF_DFP1 (1 << 3) 1739e05b2f4SAlex Deucher # define ATIF_CRT2 (1 << 4) 1749e05b2f4SAlex Deucher # define ATIF_LCD2 (1 << 5) 1759e05b2f4SAlex Deucher # define ATIF_DFP2 (1 << 7) 1769e05b2f4SAlex Deucher # define ATIF_CV (1 << 8) 1779e05b2f4SAlex Deucher # define ATIF_DFP3 (1 << 9) 1789e05b2f4SAlex Deucher # define ATIF_DFP4 (1 << 10) 1799e05b2f4SAlex Deucher # define ATIF_DFP5 (1 << 11) 1809e05b2f4SAlex Deucher # define ATIF_DFP6 (1 << 12) 1819e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_LID_STATE 0x4 1829e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_LID_STATE 1839e05b2f4SAlex Deucher * ARG1: none 1849e05b2f4SAlex Deucher * OUTPUT: 1859e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1869e05b2f4SAlex Deucher * BYTE - lid state (0: open, 1: closed) 1879e05b2f4SAlex Deucher * 1889e05b2f4SAlex Deucher * GET_LID_STATE only works at boot and resume, for general lid 1899e05b2f4SAlex Deucher * status, use the kernel provided status 1909e05b2f4SAlex Deucher */ 1919e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS 0x5 1929e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS 1939e05b2f4SAlex Deucher * ARG1: none 1949e05b2f4SAlex Deucher * OUTPUT: 1959e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 1969e05b2f4SAlex Deucher * BYTE - 0 1979e05b2f4SAlex Deucher * BYTE - TV standard 1989e05b2f4SAlex Deucher */ 1999e05b2f4SAlex Deucher # define ATIF_TV_STD_NTSC 0 2009e05b2f4SAlex Deucher # define ATIF_TV_STD_PAL 1 2019e05b2f4SAlex Deucher # define ATIF_TV_STD_PALM 2 2029e05b2f4SAlex Deucher # define ATIF_TV_STD_PAL60 3 2039e05b2f4SAlex Deucher # define ATIF_TV_STD_NTSCJ 4 2049e05b2f4SAlex Deucher # define ATIF_TV_STD_PALCN 5 2059e05b2f4SAlex Deucher # define ATIF_TV_STD_PALN 6 2069e05b2f4SAlex Deucher # define ATIF_TV_STD_SCART_RGB 9 2079e05b2f4SAlex Deucher #define ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS 0x6 2089e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS 2099e05b2f4SAlex Deucher * ARG1: 2109e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2119e05b2f4SAlex Deucher * BYTE - 0 2129e05b2f4SAlex Deucher * BYTE - TV standard 2139e05b2f4SAlex Deucher * OUTPUT: none 2149e05b2f4SAlex Deucher */ 2159e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS 0x7 2169e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS 2179e05b2f4SAlex Deucher * ARG1: none 2189e05b2f4SAlex Deucher * OUTPUT: 2199e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2209e05b2f4SAlex Deucher * BYTE - panel expansion mode 2219e05b2f4SAlex Deucher */ 2229e05b2f4SAlex Deucher #define ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS 0x8 2239e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS 2249e05b2f4SAlex Deucher * ARG1: 2259e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2269e05b2f4SAlex Deucher * BYTE - panel expansion mode 2279e05b2f4SAlex Deucher * OUTPUT: none 2289e05b2f4SAlex Deucher */ 2299e05b2f4SAlex Deucher #define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD 2309e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 2319e05b2f4SAlex Deucher * ARG1: 2329e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2339e05b2f4SAlex Deucher * WORD - gfx controller id 2349e05b2f4SAlex Deucher * BYTE - current temperature (degress Celsius) 2359e05b2f4SAlex Deucher * OUTPUT: none 2369e05b2f4SAlex Deucher */ 2379e05b2f4SAlex Deucher #define ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES 0xF 2389e05b2f4SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES 2399e05b2f4SAlex Deucher * ARG1: none 2409e05b2f4SAlex Deucher * OUTPUT: 2419e05b2f4SAlex Deucher * WORD - number of gfx devices 2429e05b2f4SAlex Deucher * WORD - device structure size in bytes (excludes device size field) 2439e05b2f4SAlex Deucher * DWORD - flags \ 2449e05b2f4SAlex Deucher * WORD - bus number } repeated structure 2459e05b2f4SAlex Deucher * WORD - device number / 2469e05b2f4SAlex Deucher */ 2479e05b2f4SAlex Deucher /* flags */ 2489e05b2f4SAlex Deucher # define ATIF_PX_REMOVABLE_GRAPHICS_DEVICE (1 << 0) 2499e05b2f4SAlex Deucher # define ATIF_XGP_PORT (1 << 1) 2509e05b2f4SAlex Deucher # define ATIF_VGA_ENABLED_GRAPHICS_DEVICE (1 << 2) 2519e05b2f4SAlex Deucher # define ATIF_XGP_PORT_IN_DOCK (1 << 3) 252c5e38e11SAlex Deucher #define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15 253c5e38e11SAlex Deucher /* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 254c5e38e11SAlex Deucher * ARG1: none 255c5e38e11SAlex Deucher * OUTPUT: 256c5e38e11SAlex Deucher * WORD - number of reported external gfx devices 257c5e38e11SAlex Deucher * WORD - device structure size in bytes (excludes device size field) 258c5e38e11SAlex Deucher * WORD - flags \ 259c5e38e11SAlex Deucher * WORD - bus number / repeated structure 260c5e38e11SAlex Deucher */ 261c5e38e11SAlex Deucher /* flags */ 262c5e38e11SAlex Deucher # define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0) 2639e05b2f4SAlex Deucher 2649e05b2f4SAlex Deucher /* ATPX */ 2659e05b2f4SAlex Deucher #define ATPX_FUNCTION_VERIFY_INTERFACE 0x0 2669e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE 2679e05b2f4SAlex Deucher * ARG1: none 2689e05b2f4SAlex Deucher * OUTPUT: 2699e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2709e05b2f4SAlex Deucher * WORD - version 2719e05b2f4SAlex Deucher * DWORD - supported functions bit vector 2729e05b2f4SAlex Deucher */ 2739e05b2f4SAlex Deucher /* supported functions vector */ 2749e05b2f4SAlex Deucher # define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0) 2759e05b2f4SAlex Deucher # define ATPX_POWER_CONTROL_SUPPORTED (1 << 1) 2769e05b2f4SAlex Deucher # define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2) 2779e05b2f4SAlex Deucher # define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3) 2789e05b2f4SAlex Deucher # define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4) 2799e05b2f4SAlex Deucher # define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5) 2809e05b2f4SAlex Deucher # define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7) 2819e05b2f4SAlex Deucher # define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8) 2829e05b2f4SAlex Deucher #define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1 2839e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS 2849e05b2f4SAlex Deucher * ARG1: none 2859e05b2f4SAlex Deucher * OUTPUT: 2869e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 2879e05b2f4SAlex Deucher * DWORD - valid flags mask 2889e05b2f4SAlex Deucher * DWORD - flags 2899e05b2f4SAlex Deucher */ 2909e05b2f4SAlex Deucher /* flags */ 2919e05b2f4SAlex Deucher # define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0) 2929e05b2f4SAlex Deucher # define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1) 2939e05b2f4SAlex Deucher # define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2) 2949e05b2f4SAlex Deucher # define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3) 2959e05b2f4SAlex Deucher # define ATPX_TV_SIGNAL_MUXED (1 << 4) 2969e05b2f4SAlex Deucher # define ATPX_DFP_SIGNAL_MUXED (1 << 5) 2979e05b2f4SAlex Deucher # define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6) 2989e05b2f4SAlex Deucher # define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7) 2999e05b2f4SAlex Deucher # define ATPX_ACF_NOT_SUPPORTED (1 << 8) 3009e05b2f4SAlex Deucher # define ATPX_FIXED_NOT_SUPPORTED (1 << 9) 3019e05b2f4SAlex Deucher # define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10) 3029e05b2f4SAlex Deucher # define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11) 30318aee16dSAlex Deucher # define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12) 30418aee16dSAlex Deucher # define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14) 3059e05b2f4SAlex Deucher #define ATPX_FUNCTION_POWER_CONTROL 0x2 3069e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_POWER_CONTROL 3079e05b2f4SAlex Deucher * ARG1: 3089e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3099e05b2f4SAlex Deucher * BYTE - dGPU power state (0: power off, 1: power on) 3109e05b2f4SAlex Deucher * OUTPUT: none 3119e05b2f4SAlex Deucher */ 3129e05b2f4SAlex Deucher #define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3 3139e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL 3149e05b2f4SAlex Deucher * ARG1: 3159e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3169e05b2f4SAlex Deucher * WORD - display mux control (0: iGPU, 1: dGPU) 3179e05b2f4SAlex Deucher * OUTPUT: none 3189e05b2f4SAlex Deucher */ 3199e05b2f4SAlex Deucher # define ATPX_INTEGRATED_GPU 0 3209e05b2f4SAlex Deucher # define ATPX_DISCRETE_GPU 1 3219e05b2f4SAlex Deucher #define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4 3229e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL 3239e05b2f4SAlex Deucher * ARG1: 3249e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3259e05b2f4SAlex Deucher * WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU) 3269e05b2f4SAlex Deucher * OUTPUT: none 3279e05b2f4SAlex Deucher */ 3289e05b2f4SAlex Deucher #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5 3299e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 3309e05b2f4SAlex Deucher * ARG1: 3319e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3329e05b2f4SAlex Deucher * WORD - target gpu (0: iGPU, 1: dGPU) 3339e05b2f4SAlex Deucher * OUTPUT: none 3349e05b2f4SAlex Deucher */ 3359e05b2f4SAlex Deucher #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6 3369e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 3379e05b2f4SAlex Deucher * ARG1: 3389e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3399e05b2f4SAlex Deucher * WORD - target gpu (0: iGPU, 1: dGPU) 3409e05b2f4SAlex Deucher * OUTPUT: none 3419e05b2f4SAlex Deucher */ 3429e05b2f4SAlex Deucher #define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8 3439e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 3449e05b2f4SAlex Deucher * ARG1: none 3459e05b2f4SAlex Deucher * OUTPUT: 3469e05b2f4SAlex Deucher * WORD - number of display connectors 3479e05b2f4SAlex Deucher * WORD - connector structure size in bytes (excludes connector size field) 3489e05b2f4SAlex Deucher * BYTE - flags \ 3499e05b2f4SAlex Deucher * BYTE - ATIF display vector bit position } repeated 3509e05b2f4SAlex Deucher * BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure 3519e05b2f4SAlex Deucher * WORD - connector ACPI id / 3529e05b2f4SAlex Deucher */ 3539e05b2f4SAlex Deucher /* flags */ 3549e05b2f4SAlex Deucher # define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0) 3559e05b2f4SAlex Deucher # define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1) 3569e05b2f4SAlex Deucher # define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2) 3579e05b2f4SAlex Deucher #define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9 3589e05b2f4SAlex Deucher /* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 3599e05b2f4SAlex Deucher * ARG1: none 3609e05b2f4SAlex Deucher * OUTPUT: 3619e05b2f4SAlex Deucher * WORD - number of HPD/DDC ports 3629e05b2f4SAlex Deucher * WORD - port structure size in bytes (excludes port size field) 3639e05b2f4SAlex Deucher * BYTE - ATIF display vector bit position \ 3649e05b2f4SAlex Deucher * BYTE - hpd id } reapeated structure 3659e05b2f4SAlex Deucher * BYTE - ddc id / 3669e05b2f4SAlex Deucher * 3679e05b2f4SAlex Deucher * available on A+A systems only 3689e05b2f4SAlex Deucher */ 3699e05b2f4SAlex Deucher /* hpd id */ 3709e05b2f4SAlex Deucher # define ATPX_HPD_NONE 0 3719e05b2f4SAlex Deucher # define ATPX_HPD1 1 3729e05b2f4SAlex Deucher # define ATPX_HPD2 2 3739e05b2f4SAlex Deucher # define ATPX_HPD3 3 3749e05b2f4SAlex Deucher # define ATPX_HPD4 4 3759e05b2f4SAlex Deucher # define ATPX_HPD5 5 3769e05b2f4SAlex Deucher # define ATPX_HPD6 6 3779e05b2f4SAlex Deucher /* ddc id */ 3789e05b2f4SAlex Deucher # define ATPX_DDC_NONE 0 3799e05b2f4SAlex Deucher # define ATPX_DDC1 1 3809e05b2f4SAlex Deucher # define ATPX_DDC2 2 3819e05b2f4SAlex Deucher # define ATPX_DDC3 3 3829e05b2f4SAlex Deucher # define ATPX_DDC4 4 3839e05b2f4SAlex Deucher # define ATPX_DDC5 5 3849e05b2f4SAlex Deucher # define ATPX_DDC6 6 3859e05b2f4SAlex Deucher # define ATPX_DDC7 7 3869e05b2f4SAlex Deucher # define ATPX_DDC8 8 3879e05b2f4SAlex Deucher 3889e05b2f4SAlex Deucher /* ATCS */ 3899e05b2f4SAlex Deucher #define ATCS_FUNCTION_VERIFY_INTERFACE 0x0 3909e05b2f4SAlex Deucher /* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE 3919e05b2f4SAlex Deucher * ARG1: none 3929e05b2f4SAlex Deucher * OUTPUT: 3939e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 3949e05b2f4SAlex Deucher * WORD - version 3959e05b2f4SAlex Deucher * DWORD - supported functions bit vector 3969e05b2f4SAlex Deucher */ 3979e05b2f4SAlex Deucher /* supported functions vector */ 3989e05b2f4SAlex Deucher # define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0) 3999e05b2f4SAlex Deucher # define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1) 4009e05b2f4SAlex Deucher # define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2) 4019e05b2f4SAlex Deucher # define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3) 4029e05b2f4SAlex Deucher #define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1 4039e05b2f4SAlex Deucher /* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE 4049e05b2f4SAlex Deucher * ARG1: none 4059e05b2f4SAlex Deucher * OUTPUT: 4069e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 4079e05b2f4SAlex Deucher * DWORD - valid flags mask 4089e05b2f4SAlex Deucher * DWORD - flags (0: undocked, 1: docked) 4099e05b2f4SAlex Deucher */ 4109e05b2f4SAlex Deucher /* flags */ 4119e05b2f4SAlex Deucher # define ATCS_DOCKED (1 << 0) 4129e05b2f4SAlex Deucher #define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2 4139e05b2f4SAlex Deucher /* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 4149e05b2f4SAlex Deucher * ARG1: 4159e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 4169e05b2f4SAlex Deucher * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) 4179e05b2f4SAlex Deucher * WORD - valid flags mask 4189e05b2f4SAlex Deucher * WORD - flags 4199e05b2f4SAlex Deucher * BYTE - request type 4209e05b2f4SAlex Deucher * BYTE - performance request 4219e05b2f4SAlex Deucher * OUTPUT: 4229e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 4239e05b2f4SAlex Deucher * BYTE - return value 4249e05b2f4SAlex Deucher */ 4259e05b2f4SAlex Deucher /* flags */ 4269e05b2f4SAlex Deucher # define ATCS_ADVERTISE_CAPS (1 << 0) 4279e05b2f4SAlex Deucher # define ATCS_WAIT_FOR_COMPLETION (1 << 1) 4289e05b2f4SAlex Deucher /* request type */ 4299e05b2f4SAlex Deucher # define ATCS_PCIE_LINK_SPEED 1 4309e05b2f4SAlex Deucher /* performance request */ 4319e05b2f4SAlex Deucher # define ATCS_REMOVE 0 4329e05b2f4SAlex Deucher # define ATCS_FORCE_LOW_POWER 1 4339e05b2f4SAlex Deucher # define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */ 4349e05b2f4SAlex Deucher # define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */ 4359e05b2f4SAlex Deucher # define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */ 4369e05b2f4SAlex Deucher /* return value */ 4379e05b2f4SAlex Deucher # define ATCS_REQUEST_REFUSED 1 4389e05b2f4SAlex Deucher # define ATCS_REQUEST_COMPLETE 2 4399e05b2f4SAlex Deucher # define ATCS_REQUEST_IN_PROGRESS 3 4409e05b2f4SAlex Deucher #define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3 4419e05b2f4SAlex Deucher /* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 4429e05b2f4SAlex Deucher * ARG1: none 4439e05b2f4SAlex Deucher * OUTPUT: none 4449e05b2f4SAlex Deucher */ 4459e05b2f4SAlex Deucher #define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4 4469e05b2f4SAlex Deucher /* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 4479e05b2f4SAlex Deucher * ARG1: 4489e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 4499e05b2f4SAlex Deucher * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) 4509e05b2f4SAlex Deucher * BYTE - number of active lanes 4519e05b2f4SAlex Deucher * OUTPUT: 4529e05b2f4SAlex Deucher * WORD - structure size in bytes (includes size field) 4539e05b2f4SAlex Deucher * BYTE - number of active lanes 4549e05b2f4SAlex Deucher */ 4559e05b2f4SAlex Deucher 456*fdc95df9SSrinivasan Shanmugam #if defined(CONFIG_VGA_SWITCHEROO) 457*fdc95df9SSrinivasan Shanmugam void radeon_register_atpx_handler(void); 458*fdc95df9SSrinivasan Shanmugam void radeon_unregister_atpx_handler(void); 459*fdc95df9SSrinivasan Shanmugam bool radeon_has_atpx_dgpu_power_cntl(void); 460*fdc95df9SSrinivasan Shanmugam bool radeon_is_atpx_hybrid(void); 461*fdc95df9SSrinivasan Shanmugam bool radeon_has_atpx(void); 462*fdc95df9SSrinivasan Shanmugam bool radeon_atpx_dgpu_req_power_for_displays(void); 463*fdc95df9SSrinivasan Shanmugam #endif 464*fdc95df9SSrinivasan Shanmugam 4659e05b2f4SAlex Deucher #endif 466