xref: /openbmc/linux/drivers/gpu/drm/radeon/radeon_acpi.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
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