16596afd4SAlex Deucher /* 26596afd4SAlex Deucher * Copyright 2011 Advanced Micro Devices, Inc. 36596afd4SAlex Deucher * 46596afd4SAlex Deucher * Permission is hereby granted, free of charge, to any person obtaining a 56596afd4SAlex Deucher * copy of this software and associated documentation files (the "Software"), 66596afd4SAlex Deucher * to deal in the Software without restriction, including without limitation 76596afd4SAlex Deucher * the rights to use, copy, modify, merge, publish, distribute, sublicense, 86596afd4SAlex Deucher * and/or sell copies of the Software, and to permit persons to whom the 96596afd4SAlex Deucher * Software is furnished to do so, subject to the following conditions: 106596afd4SAlex Deucher * 116596afd4SAlex Deucher * The above copyright notice and this permission notice shall be included in 126596afd4SAlex Deucher * all copies or substantial portions of the Software. 136596afd4SAlex Deucher * 146596afd4SAlex Deucher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 156596afd4SAlex Deucher * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 166596afd4SAlex Deucher * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 176596afd4SAlex Deucher * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 186596afd4SAlex Deucher * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 196596afd4SAlex Deucher * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 206596afd4SAlex Deucher * OTHER DEALINGS IN THE SOFTWARE. 216596afd4SAlex Deucher * 226596afd4SAlex Deucher * Authors: Alex Deucher 236596afd4SAlex Deucher */ 246596afd4SAlex Deucher 256596afd4SAlex Deucher #include "drmP.h" 266596afd4SAlex Deucher #include "radeon.h" 276596afd4SAlex Deucher #include "btcd.h" 286596afd4SAlex Deucher #include "r600_dpm.h" 296596afd4SAlex Deucher #include "cypress_dpm.h" 306596afd4SAlex Deucher #include "btc_dpm.h" 316596afd4SAlex Deucher #include "atom.h" 326596afd4SAlex Deucher 336596afd4SAlex Deucher #define MC_CG_ARB_FREQ_F0 0x0a 346596afd4SAlex Deucher #define MC_CG_ARB_FREQ_F1 0x0b 356596afd4SAlex Deucher #define MC_CG_ARB_FREQ_F2 0x0c 366596afd4SAlex Deucher #define MC_CG_ARB_FREQ_F3 0x0d 376596afd4SAlex Deucher 386596afd4SAlex Deucher #define MC_CG_SEQ_DRAMCONF_S0 0x05 396596afd4SAlex Deucher #define MC_CG_SEQ_DRAMCONF_S1 0x06 406596afd4SAlex Deucher #define MC_CG_SEQ_YCLK_SUSPEND 0x04 416596afd4SAlex Deucher #define MC_CG_SEQ_YCLK_RESUME 0x0a 426596afd4SAlex Deucher 436596afd4SAlex Deucher #define SMC_RAM_END 0x8000 446596afd4SAlex Deucher 456596afd4SAlex Deucher #ifndef BTC_MGCG_SEQUENCE 466596afd4SAlex Deucher #define BTC_MGCG_SEQUENCE 300 476596afd4SAlex Deucher 486596afd4SAlex Deucher struct rv7xx_ps *rv770_get_ps(struct radeon_ps *rps); 496596afd4SAlex Deucher struct rv7xx_power_info *rv770_get_pi(struct radeon_device *rdev); 506596afd4SAlex Deucher struct evergreen_power_info *evergreen_get_pi(struct radeon_device *rdev); 516596afd4SAlex Deucher 526596afd4SAlex Deucher 536596afd4SAlex Deucher //********* BARTS **************// 546596afd4SAlex Deucher static const u32 barts_cgcg_cgls_default[] = 556596afd4SAlex Deucher { 566596afd4SAlex Deucher /* Register, Value, Mask bits */ 576596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 586596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 596596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 606596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 616596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 626596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 636596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 646596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 656596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 666596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 676596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 686596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 696596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 706596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 716596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 726596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 736596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 746596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 756596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 766596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 776596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 786596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 796596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 806596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 816596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 826596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 836596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 846596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 856596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 866596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 876596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 886596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 896596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 906596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 916596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 926596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 936596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 946596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 956596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 966596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 976596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 986596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 996596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 1006596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1016596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 1026596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1036596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 1046596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 1056596afd4SAlex Deucher }; 1066596afd4SAlex Deucher #define BARTS_CGCG_CGLS_DEFAULT_LENGTH sizeof(barts_cgcg_cgls_default) / (3 * sizeof(u32)) 1076596afd4SAlex Deucher 1086596afd4SAlex Deucher static const u32 barts_cgcg_cgls_disable[] = 1096596afd4SAlex Deucher { 1106596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 1116596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1126596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 1136596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1146596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 1156596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1166596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 1176596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1186596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 1196596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1206596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 1216596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1226596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 1236596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1246596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 1256596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1266596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 1276596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1286596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 1296596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1306596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 1316596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1326596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 1336596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1346596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 1356596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1366596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 1376596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1386596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 1396596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1406596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 1416596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1426596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 1436596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1446596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 1456596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1466596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 1476596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1486596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 1496596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1506596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 1516596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1526596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 1536596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1546596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 1556596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1566596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 1576596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1586596afd4SAlex Deucher 0x00000644, 0x000f7912, 0x001f4180, 1596596afd4SAlex Deucher 0x00000644, 0x000f3812, 0x001f4180 1606596afd4SAlex Deucher }; 1616596afd4SAlex Deucher #define BARTS_CGCG_CGLS_DISABLE_LENGTH sizeof(barts_cgcg_cgls_disable) / (3 * sizeof(u32)) 1626596afd4SAlex Deucher 1636596afd4SAlex Deucher static const u32 barts_cgcg_cgls_enable[] = 1646596afd4SAlex Deucher { 1656596afd4SAlex Deucher /* 0x0000c124, 0x84180000, 0x00180000, */ 1666596afd4SAlex Deucher 0x00000644, 0x000f7892, 0x001f4080, 1676596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 1686596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1696596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 1706596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1716596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 1726596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1736596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 1746596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1756596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 1766596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1776596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 1786596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1796596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 1806596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1816596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 1826596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1836596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 1846596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1856596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 1866596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1876596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 1886596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1896596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 1906596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 1916596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 1926596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1936596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 1946596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1956596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 1966596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1976596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 1986596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 1996596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 2006596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2016596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 2026596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2036596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 2046596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2056596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 2066596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2076596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 2086596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2096596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 2106596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2116596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 2126596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 2136596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 2146596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff 2156596afd4SAlex Deucher }; 2166596afd4SAlex Deucher #define BARTS_CGCG_CGLS_ENABLE_LENGTH sizeof(barts_cgcg_cgls_enable) / (3 * sizeof(u32)) 2176596afd4SAlex Deucher 2186596afd4SAlex Deucher static const u32 barts_mgcg_default[] = 2196596afd4SAlex Deucher { 2206596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 2216596afd4SAlex Deucher 0x00005448, 0x00000100, 0xffffffff, 2226596afd4SAlex Deucher 0x000055e4, 0x00600100, 0xffffffff, 2236596afd4SAlex Deucher 0x0000160c, 0x00000100, 0xffffffff, 2246596afd4SAlex Deucher 0x0000c164, 0x00000100, 0xffffffff, 2256596afd4SAlex Deucher 0x00008a18, 0x00000100, 0xffffffff, 2266596afd4SAlex Deucher 0x0000897c, 0x06000100, 0xffffffff, 2276596afd4SAlex Deucher 0x00008b28, 0x00000100, 0xffffffff, 2286596afd4SAlex Deucher 0x00009144, 0x00000100, 0xffffffff, 2296596afd4SAlex Deucher 0x00009a60, 0x00000100, 0xffffffff, 2306596afd4SAlex Deucher 0x00009868, 0x00000100, 0xffffffff, 2316596afd4SAlex Deucher 0x00008d58, 0x00000100, 0xffffffff, 2326596afd4SAlex Deucher 0x00009510, 0x00000100, 0xffffffff, 2336596afd4SAlex Deucher 0x0000949c, 0x00000100, 0xffffffff, 2346596afd4SAlex Deucher 0x00009654, 0x00000100, 0xffffffff, 2356596afd4SAlex Deucher 0x00009030, 0x00000100, 0xffffffff, 2366596afd4SAlex Deucher 0x00009034, 0x00000100, 0xffffffff, 2376596afd4SAlex Deucher 0x00009038, 0x00000100, 0xffffffff, 2386596afd4SAlex Deucher 0x0000903c, 0x00000100, 0xffffffff, 2396596afd4SAlex Deucher 0x00009040, 0x00000100, 0xffffffff, 2406596afd4SAlex Deucher 0x0000a200, 0x00000100, 0xffffffff, 2416596afd4SAlex Deucher 0x0000a204, 0x00000100, 0xffffffff, 2426596afd4SAlex Deucher 0x0000a208, 0x00000100, 0xffffffff, 2436596afd4SAlex Deucher 0x0000a20c, 0x00000100, 0xffffffff, 2446596afd4SAlex Deucher 0x0000977c, 0x00000100, 0xffffffff, 2456596afd4SAlex Deucher 0x00003f80, 0x00000100, 0xffffffff, 2466596afd4SAlex Deucher 0x0000a210, 0x00000100, 0xffffffff, 2476596afd4SAlex Deucher 0x0000a214, 0x00000100, 0xffffffff, 2486596afd4SAlex Deucher 0x000004d8, 0x00000100, 0xffffffff, 2496596afd4SAlex Deucher 0x00009784, 0x00000100, 0xffffffff, 2506596afd4SAlex Deucher 0x00009698, 0x00000100, 0xffffffff, 2516596afd4SAlex Deucher 0x000004d4, 0x00000200, 0xffffffff, 2526596afd4SAlex Deucher 0x000004d0, 0x00000000, 0xffffffff, 2536596afd4SAlex Deucher 0x000030cc, 0x00000100, 0xffffffff, 2546596afd4SAlex Deucher 0x0000d0c0, 0xff000100, 0xffffffff, 2556596afd4SAlex Deucher 0x0000802c, 0x40000000, 0xffffffff, 2566596afd4SAlex Deucher 0x0000915c, 0x00010000, 0xffffffff, 2576596afd4SAlex Deucher 0x00009160, 0x00030002, 0xffffffff, 2586596afd4SAlex Deucher 0x00009164, 0x00050004, 0xffffffff, 2596596afd4SAlex Deucher 0x00009168, 0x00070006, 0xffffffff, 2606596afd4SAlex Deucher 0x00009178, 0x00070000, 0xffffffff, 2616596afd4SAlex Deucher 0x0000917c, 0x00030002, 0xffffffff, 2626596afd4SAlex Deucher 0x00009180, 0x00050004, 0xffffffff, 2636596afd4SAlex Deucher 0x0000918c, 0x00010006, 0xffffffff, 2646596afd4SAlex Deucher 0x00009190, 0x00090008, 0xffffffff, 2656596afd4SAlex Deucher 0x00009194, 0x00070000, 0xffffffff, 2666596afd4SAlex Deucher 0x00009198, 0x00030002, 0xffffffff, 2676596afd4SAlex Deucher 0x0000919c, 0x00050004, 0xffffffff, 2686596afd4SAlex Deucher 0x000091a8, 0x00010006, 0xffffffff, 2696596afd4SAlex Deucher 0x000091ac, 0x00090008, 0xffffffff, 2706596afd4SAlex Deucher 0x000091b0, 0x00070000, 0xffffffff, 2716596afd4SAlex Deucher 0x000091b4, 0x00030002, 0xffffffff, 2726596afd4SAlex Deucher 0x000091b8, 0x00050004, 0xffffffff, 2736596afd4SAlex Deucher 0x000091c4, 0x00010006, 0xffffffff, 2746596afd4SAlex Deucher 0x000091c8, 0x00090008, 0xffffffff, 2756596afd4SAlex Deucher 0x000091cc, 0x00070000, 0xffffffff, 2766596afd4SAlex Deucher 0x000091d0, 0x00030002, 0xffffffff, 2776596afd4SAlex Deucher 0x000091d4, 0x00050004, 0xffffffff, 2786596afd4SAlex Deucher 0x000091e0, 0x00010006, 0xffffffff, 2796596afd4SAlex Deucher 0x000091e4, 0x00090008, 0xffffffff, 2806596afd4SAlex Deucher 0x000091e8, 0x00000000, 0xffffffff, 2816596afd4SAlex Deucher 0x000091ec, 0x00070000, 0xffffffff, 2826596afd4SAlex Deucher 0x000091f0, 0x00030002, 0xffffffff, 2836596afd4SAlex Deucher 0x000091f4, 0x00050004, 0xffffffff, 2846596afd4SAlex Deucher 0x00009200, 0x00010006, 0xffffffff, 2856596afd4SAlex Deucher 0x00009204, 0x00090008, 0xffffffff, 2866596afd4SAlex Deucher 0x00009208, 0x00070000, 0xffffffff, 2876596afd4SAlex Deucher 0x0000920c, 0x00030002, 0xffffffff, 2886596afd4SAlex Deucher 0x00009210, 0x00050004, 0xffffffff, 2896596afd4SAlex Deucher 0x0000921c, 0x00010006, 0xffffffff, 2906596afd4SAlex Deucher 0x00009220, 0x00090008, 0xffffffff, 2916596afd4SAlex Deucher 0x00009224, 0x00070000, 0xffffffff, 2926596afd4SAlex Deucher 0x00009228, 0x00030002, 0xffffffff, 2936596afd4SAlex Deucher 0x0000922c, 0x00050004, 0xffffffff, 2946596afd4SAlex Deucher 0x00009238, 0x00010006, 0xffffffff, 2956596afd4SAlex Deucher 0x0000923c, 0x00090008, 0xffffffff, 2966596afd4SAlex Deucher 0x00009294, 0x00000000, 0xffffffff, 2976596afd4SAlex Deucher 0x0000802c, 0x40010000, 0xffffffff, 2986596afd4SAlex Deucher 0x0000915c, 0x00010000, 0xffffffff, 2996596afd4SAlex Deucher 0x00009160, 0x00030002, 0xffffffff, 3006596afd4SAlex Deucher 0x00009164, 0x00050004, 0xffffffff, 3016596afd4SAlex Deucher 0x00009168, 0x00070006, 0xffffffff, 3026596afd4SAlex Deucher 0x00009178, 0x00070000, 0xffffffff, 3036596afd4SAlex Deucher 0x0000917c, 0x00030002, 0xffffffff, 3046596afd4SAlex Deucher 0x00009180, 0x00050004, 0xffffffff, 3056596afd4SAlex Deucher 0x0000918c, 0x00010006, 0xffffffff, 3066596afd4SAlex Deucher 0x00009190, 0x00090008, 0xffffffff, 3076596afd4SAlex Deucher 0x00009194, 0x00070000, 0xffffffff, 3086596afd4SAlex Deucher 0x00009198, 0x00030002, 0xffffffff, 3096596afd4SAlex Deucher 0x0000919c, 0x00050004, 0xffffffff, 3106596afd4SAlex Deucher 0x000091a8, 0x00010006, 0xffffffff, 3116596afd4SAlex Deucher 0x000091ac, 0x00090008, 0xffffffff, 3126596afd4SAlex Deucher 0x000091b0, 0x00070000, 0xffffffff, 3136596afd4SAlex Deucher 0x000091b4, 0x00030002, 0xffffffff, 3146596afd4SAlex Deucher 0x000091b8, 0x00050004, 0xffffffff, 3156596afd4SAlex Deucher 0x000091c4, 0x00010006, 0xffffffff, 3166596afd4SAlex Deucher 0x000091c8, 0x00090008, 0xffffffff, 3176596afd4SAlex Deucher 0x000091cc, 0x00070000, 0xffffffff, 3186596afd4SAlex Deucher 0x000091d0, 0x00030002, 0xffffffff, 3196596afd4SAlex Deucher 0x000091d4, 0x00050004, 0xffffffff, 3206596afd4SAlex Deucher 0x000091e0, 0x00010006, 0xffffffff, 3216596afd4SAlex Deucher 0x000091e4, 0x00090008, 0xffffffff, 3226596afd4SAlex Deucher 0x000091e8, 0x00000000, 0xffffffff, 3236596afd4SAlex Deucher 0x000091ec, 0x00070000, 0xffffffff, 3246596afd4SAlex Deucher 0x000091f0, 0x00030002, 0xffffffff, 3256596afd4SAlex Deucher 0x000091f4, 0x00050004, 0xffffffff, 3266596afd4SAlex Deucher 0x00009200, 0x00010006, 0xffffffff, 3276596afd4SAlex Deucher 0x00009204, 0x00090008, 0xffffffff, 3286596afd4SAlex Deucher 0x00009208, 0x00070000, 0xffffffff, 3296596afd4SAlex Deucher 0x0000920c, 0x00030002, 0xffffffff, 3306596afd4SAlex Deucher 0x00009210, 0x00050004, 0xffffffff, 3316596afd4SAlex Deucher 0x0000921c, 0x00010006, 0xffffffff, 3326596afd4SAlex Deucher 0x00009220, 0x00090008, 0xffffffff, 3336596afd4SAlex Deucher 0x00009224, 0x00070000, 0xffffffff, 3346596afd4SAlex Deucher 0x00009228, 0x00030002, 0xffffffff, 3356596afd4SAlex Deucher 0x0000922c, 0x00050004, 0xffffffff, 3366596afd4SAlex Deucher 0x00009238, 0x00010006, 0xffffffff, 3376596afd4SAlex Deucher 0x0000923c, 0x00090008, 0xffffffff, 3386596afd4SAlex Deucher 0x00009294, 0x00000000, 0xffffffff, 3396596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 3406596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 3416596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3426596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 3436596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3446596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 3456596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3466596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 3476596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3486596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 3496596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3506596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 3516596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3526596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 3536596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3546596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 3556596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3566596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 3576596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3586596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 3596596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3606596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 3616596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3626596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 3636596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 3646596afd4SAlex Deucher }; 3656596afd4SAlex Deucher #define BARTS_MGCG_DEFAULT_LENGTH sizeof(barts_mgcg_default) / (3 * sizeof(u32)) 3666596afd4SAlex Deucher 3676596afd4SAlex Deucher static const u32 barts_mgcg_disable[] = 3686596afd4SAlex Deucher { 3696596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 3706596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 3716596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 3726596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 3736596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 3746596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 3756596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 3766596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 3776596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 3786596afd4SAlex Deucher 0x00009150, 0x00600000, 0xffffffff 3796596afd4SAlex Deucher }; 3806596afd4SAlex Deucher #define BARTS_MGCG_DISABLE_LENGTH sizeof(barts_mgcg_disable) / (3 * sizeof(u32)) 3816596afd4SAlex Deucher 3826596afd4SAlex Deucher static const u32 barts_mgcg_enable[] = 3836596afd4SAlex Deucher { 3846596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 3856596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 3866596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3876596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 3886596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3896596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 3906596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3916596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 3926596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 3936596afd4SAlex Deucher 0x00009150, 0x81944000, 0xffffffff 3946596afd4SAlex Deucher }; 3956596afd4SAlex Deucher #define BARTS_MGCG_ENABLE_LENGTH sizeof(barts_mgcg_enable) / (3 * sizeof(u32)) 3966596afd4SAlex Deucher 3976596afd4SAlex Deucher //********* CAICOS **************// 3986596afd4SAlex Deucher static const u32 caicos_cgcg_cgls_default[] = 3996596afd4SAlex Deucher { 4006596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 4016596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4026596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 4036596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4046596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 4056596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4066596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 4076596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4086596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 4096596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4106596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 4116596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4126596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 4136596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4146596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 4156596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4166596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 4176596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4186596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 4196596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4206596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 4216596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4226596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 4236596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4246596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 4256596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4266596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 4276596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4286596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 4296596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4306596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 4316596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4326596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 4336596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4346596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 4356596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4366596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 4376596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4386596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 4396596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4406596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 4416596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4426596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 4436596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4446596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 4456596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4466596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 4476596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 4486596afd4SAlex Deucher }; 4496596afd4SAlex Deucher #define CAICOS_CGCG_CGLS_DEFAULT_LENGTH sizeof(caicos_cgcg_cgls_default) / (3 * sizeof(u32)) 4506596afd4SAlex Deucher 4516596afd4SAlex Deucher static const u32 caicos_cgcg_cgls_disable[] = 4526596afd4SAlex Deucher { 4536596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 4546596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4556596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 4566596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4576596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 4586596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4596596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 4606596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4616596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 4626596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4636596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 4646596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4656596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 4666596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4676596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 4686596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4696596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 4706596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4716596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 4726596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4736596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 4746596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4756596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 4766596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 4776596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 4786596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4796596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 4806596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4816596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 4826596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4836596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 4846596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4856596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 4866596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4876596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 4886596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4896596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 4906596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4916596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 4926596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4936596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 4946596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4956596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 4966596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4976596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 4986596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 4996596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 5006596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5016596afd4SAlex Deucher 0x00000644, 0x000f7912, 0x001f4180, 5026596afd4SAlex Deucher 0x00000644, 0x000f3812, 0x001f4180 5036596afd4SAlex Deucher }; 5046596afd4SAlex Deucher #define CAICOS_CGCG_CGLS_DISABLE_LENGTH sizeof(caicos_cgcg_cgls_disable) / (3 * sizeof(u32)) 5056596afd4SAlex Deucher 5066596afd4SAlex Deucher static const u32 caicos_cgcg_cgls_enable[] = 5076596afd4SAlex Deucher { 5086596afd4SAlex Deucher /* 0x0000c124, 0x84180000, 0x00180000, */ 5096596afd4SAlex Deucher 0x00000644, 0x000f7892, 0x001f4080, 5106596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 5116596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5126596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 5136596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5146596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 5156596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5166596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 5176596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5186596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 5196596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5206596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 5216596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5226596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 5236596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5246596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 5256596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5266596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 5276596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5286596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 5296596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5306596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 5316596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5326596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 5336596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 5346596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 5356596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5366596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 5376596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5386596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 5396596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5406596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 5416596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5426596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 5436596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5446596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 5456596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5466596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 5476596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5486596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 5496596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5506596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 5516596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5526596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 5536596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5546596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 5556596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 5566596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 5576596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff 5586596afd4SAlex Deucher }; 5596596afd4SAlex Deucher #define CAICOS_CGCG_CGLS_ENABLE_LENGTH sizeof(caicos_cgcg_cgls_enable) / (3 * sizeof(u32)) 5606596afd4SAlex Deucher 5616596afd4SAlex Deucher static const u32 caicos_mgcg_default[] = 5626596afd4SAlex Deucher { 5636596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 5646596afd4SAlex Deucher 0x00005448, 0x00000100, 0xffffffff, 5656596afd4SAlex Deucher 0x000055e4, 0x00600100, 0xffffffff, 5666596afd4SAlex Deucher 0x0000160c, 0x00000100, 0xffffffff, 5676596afd4SAlex Deucher 0x0000c164, 0x00000100, 0xffffffff, 5686596afd4SAlex Deucher 0x00008a18, 0x00000100, 0xffffffff, 5696596afd4SAlex Deucher 0x0000897c, 0x06000100, 0xffffffff, 5706596afd4SAlex Deucher 0x00008b28, 0x00000100, 0xffffffff, 5716596afd4SAlex Deucher 0x00009144, 0x00000100, 0xffffffff, 5726596afd4SAlex Deucher 0x00009a60, 0x00000100, 0xffffffff, 5736596afd4SAlex Deucher 0x00009868, 0x00000100, 0xffffffff, 5746596afd4SAlex Deucher 0x00008d58, 0x00000100, 0xffffffff, 5756596afd4SAlex Deucher 0x00009510, 0x00000100, 0xffffffff, 5766596afd4SAlex Deucher 0x0000949c, 0x00000100, 0xffffffff, 5776596afd4SAlex Deucher 0x00009654, 0x00000100, 0xffffffff, 5786596afd4SAlex Deucher 0x00009030, 0x00000100, 0xffffffff, 5796596afd4SAlex Deucher 0x00009034, 0x00000100, 0xffffffff, 5806596afd4SAlex Deucher 0x00009038, 0x00000100, 0xffffffff, 5816596afd4SAlex Deucher 0x0000903c, 0x00000100, 0xffffffff, 5826596afd4SAlex Deucher 0x00009040, 0x00000100, 0xffffffff, 5836596afd4SAlex Deucher 0x0000a200, 0x00000100, 0xffffffff, 5846596afd4SAlex Deucher 0x0000a204, 0x00000100, 0xffffffff, 5856596afd4SAlex Deucher 0x0000a208, 0x00000100, 0xffffffff, 5866596afd4SAlex Deucher 0x0000a20c, 0x00000100, 0xffffffff, 5876596afd4SAlex Deucher 0x0000977c, 0x00000100, 0xffffffff, 5886596afd4SAlex Deucher 0x00003f80, 0x00000100, 0xffffffff, 5896596afd4SAlex Deucher 0x0000a210, 0x00000100, 0xffffffff, 5906596afd4SAlex Deucher 0x0000a214, 0x00000100, 0xffffffff, 5916596afd4SAlex Deucher 0x000004d8, 0x00000100, 0xffffffff, 5926596afd4SAlex Deucher 0x00009784, 0x00000100, 0xffffffff, 5936596afd4SAlex Deucher 0x00009698, 0x00000100, 0xffffffff, 5946596afd4SAlex Deucher 0x000004d4, 0x00000200, 0xffffffff, 5956596afd4SAlex Deucher 0x000004d0, 0x00000000, 0xffffffff, 5966596afd4SAlex Deucher 0x000030cc, 0x00000100, 0xffffffff, 5976596afd4SAlex Deucher 0x0000d0c0, 0xff000100, 0xffffffff, 5986596afd4SAlex Deucher 0x0000915c, 0x00010000, 0xffffffff, 5996596afd4SAlex Deucher 0x00009160, 0x00030002, 0xffffffff, 6006596afd4SAlex Deucher 0x00009164, 0x00050004, 0xffffffff, 6016596afd4SAlex Deucher 0x00009168, 0x00070006, 0xffffffff, 6026596afd4SAlex Deucher 0x00009178, 0x00070000, 0xffffffff, 6036596afd4SAlex Deucher 0x0000917c, 0x00030002, 0xffffffff, 6046596afd4SAlex Deucher 0x00009180, 0x00050004, 0xffffffff, 6056596afd4SAlex Deucher 0x0000918c, 0x00010006, 0xffffffff, 6066596afd4SAlex Deucher 0x00009190, 0x00090008, 0xffffffff, 6076596afd4SAlex Deucher 0x00009194, 0x00070000, 0xffffffff, 6086596afd4SAlex Deucher 0x00009198, 0x00030002, 0xffffffff, 6096596afd4SAlex Deucher 0x0000919c, 0x00050004, 0xffffffff, 6106596afd4SAlex Deucher 0x000091a8, 0x00010006, 0xffffffff, 6116596afd4SAlex Deucher 0x000091ac, 0x00090008, 0xffffffff, 6126596afd4SAlex Deucher 0x000091e8, 0x00000000, 0xffffffff, 6136596afd4SAlex Deucher 0x00009294, 0x00000000, 0xffffffff, 6146596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 6156596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6166596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 6176596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6186596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 6196596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6206596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 6216596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6226596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 6236596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6246596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 6256596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6266596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 6276596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6286596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 6296596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6306596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 6316596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6326596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 6336596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6346596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 6356596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6366596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 6376596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 6386596afd4SAlex Deucher }; 6396596afd4SAlex Deucher #define CAICOS_MGCG_DEFAULT_LENGTH sizeof(caicos_mgcg_default) / (3 * sizeof(u32)) 6406596afd4SAlex Deucher 6416596afd4SAlex Deucher static const u32 caicos_mgcg_disable[] = 6426596afd4SAlex Deucher { 6436596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 6446596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 6456596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 6466596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 6476596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 6486596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 6496596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 6506596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 6516596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 6526596afd4SAlex Deucher 0x00009150, 0x00600000, 0xffffffff 6536596afd4SAlex Deucher }; 6546596afd4SAlex Deucher #define CAICOS_MGCG_DISABLE_LENGTH sizeof(caicos_mgcg_disable) / (3 * sizeof(u32)) 6556596afd4SAlex Deucher 6566596afd4SAlex Deucher static const u32 caicos_mgcg_enable[] = 6576596afd4SAlex Deucher { 6586596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 6596596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 6606596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6616596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 6626596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6636596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 6646596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6656596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 6666596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6676596afd4SAlex Deucher 0x00009150, 0x46944040, 0xffffffff 6686596afd4SAlex Deucher }; 6696596afd4SAlex Deucher #define CAICOS_MGCG_ENABLE_LENGTH sizeof(caicos_mgcg_enable) / (3 * sizeof(u32)) 6706596afd4SAlex Deucher 6716596afd4SAlex Deucher //********* TURKS **************// 6726596afd4SAlex Deucher static const u32 turks_cgcg_cgls_default[] = 6736596afd4SAlex Deucher { 6746596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 6756596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6766596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 6776596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6786596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 6796596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6806596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 6816596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6826596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 6836596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6846596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 6856596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6866596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 6876596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6886596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 6896596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6906596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 6916596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6926596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 6936596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6946596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 6956596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6966596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 6976596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 6986596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 6996596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7006596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 7016596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7026596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 7036596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7046596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 7056596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7066596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 7076596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7086596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 7096596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7106596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 7116596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7126596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 7136596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7146596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 7156596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7166596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 7176596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7186596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 7196596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7206596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 7216596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 7226596afd4SAlex Deucher }; 7236596afd4SAlex Deucher #define TURKS_CGCG_CGLS_DEFAULT_LENGTH sizeof(turks_cgcg_cgls_default) / (3 * sizeof(u32)) 7246596afd4SAlex Deucher 7256596afd4SAlex Deucher static const u32 turks_cgcg_cgls_disable[] = 7266596afd4SAlex Deucher { 7276596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 7286596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7296596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 7306596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7316596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 7326596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7336596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 7346596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7356596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 7366596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7376596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 7386596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7396596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 7406596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7416596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 7426596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7436596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 7446596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7456596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 7466596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7476596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 7486596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7496596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 7506596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 7516596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 7526596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7536596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 7546596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7556596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 7566596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7576596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 7586596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7596596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 7606596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7616596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 7626596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7636596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 7646596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7656596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 7666596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7676596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 7686596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7696596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 7706596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7716596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 7726596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7736596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 7746596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7756596afd4SAlex Deucher 0x00000644, 0x000f7912, 0x001f4180, 7766596afd4SAlex Deucher 0x00000644, 0x000f3812, 0x001f4180 7776596afd4SAlex Deucher }; 7786596afd4SAlex Deucher #define TURKS_CGCG_CGLS_DISABLE_LENGTH sizeof(turks_cgcg_cgls_disable) / (3 * sizeof(u32)) 7796596afd4SAlex Deucher 7806596afd4SAlex Deucher static const u32 turks_cgcg_cgls_enable[] = 7816596afd4SAlex Deucher { 7826596afd4SAlex Deucher /* 0x0000c124, 0x84180000, 0x00180000, */ 7836596afd4SAlex Deucher 0x00000644, 0x000f7892, 0x001f4080, 7846596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 7856596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7866596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 7876596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7886596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 7896596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7906596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 7916596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7926596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 7936596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7946596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 7956596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7966596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 7976596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 7986596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 7996596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 8006596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 8016596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 8026596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 8036596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 8046596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 8056596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 8066596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 8076596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 8086596afd4SAlex Deucher 0x000008f8, 0x00000020, 0xffffffff, 8096596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8106596afd4SAlex Deucher 0x000008f8, 0x00000021, 0xffffffff, 8116596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8126596afd4SAlex Deucher 0x000008f8, 0x00000022, 0xffffffff, 8136596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8146596afd4SAlex Deucher 0x000008f8, 0x00000023, 0xffffffff, 8156596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8166596afd4SAlex Deucher 0x000008f8, 0x00000024, 0xffffffff, 8176596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8186596afd4SAlex Deucher 0x000008f8, 0x00000025, 0xffffffff, 8196596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8206596afd4SAlex Deucher 0x000008f8, 0x00000026, 0xffffffff, 8216596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8226596afd4SAlex Deucher 0x000008f8, 0x00000027, 0xffffffff, 8236596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8246596afd4SAlex Deucher 0x000008f8, 0x00000028, 0xffffffff, 8256596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8266596afd4SAlex Deucher 0x000008f8, 0x00000029, 0xffffffff, 8276596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8286596afd4SAlex Deucher 0x000008f8, 0x0000002a, 0xffffffff, 8296596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 8306596afd4SAlex Deucher 0x000008f8, 0x0000002b, 0xffffffff, 8316596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff 8326596afd4SAlex Deucher }; 8336596afd4SAlex Deucher #define TURKS_CGCG_CGLS_ENABLE_LENGTH sizeof(turks_cgcg_cgls_enable) / (3 * sizeof(u32)) 8346596afd4SAlex Deucher 8356596afd4SAlex Deucher // These are the sequences for turks_mgcg_shls 8366596afd4SAlex Deucher static const u32 turks_mgcg_default[] = 8376596afd4SAlex Deucher { 8386596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 8396596afd4SAlex Deucher 0x00005448, 0x00000100, 0xffffffff, 8406596afd4SAlex Deucher 0x000055e4, 0x00600100, 0xffffffff, 8416596afd4SAlex Deucher 0x0000160c, 0x00000100, 0xffffffff, 8426596afd4SAlex Deucher 0x0000c164, 0x00000100, 0xffffffff, 8436596afd4SAlex Deucher 0x00008a18, 0x00000100, 0xffffffff, 8446596afd4SAlex Deucher 0x0000897c, 0x06000100, 0xffffffff, 8456596afd4SAlex Deucher 0x00008b28, 0x00000100, 0xffffffff, 8466596afd4SAlex Deucher 0x00009144, 0x00000100, 0xffffffff, 8476596afd4SAlex Deucher 0x00009a60, 0x00000100, 0xffffffff, 8486596afd4SAlex Deucher 0x00009868, 0x00000100, 0xffffffff, 8496596afd4SAlex Deucher 0x00008d58, 0x00000100, 0xffffffff, 8506596afd4SAlex Deucher 0x00009510, 0x00000100, 0xffffffff, 8516596afd4SAlex Deucher 0x0000949c, 0x00000100, 0xffffffff, 8526596afd4SAlex Deucher 0x00009654, 0x00000100, 0xffffffff, 8536596afd4SAlex Deucher 0x00009030, 0x00000100, 0xffffffff, 8546596afd4SAlex Deucher 0x00009034, 0x00000100, 0xffffffff, 8556596afd4SAlex Deucher 0x00009038, 0x00000100, 0xffffffff, 8566596afd4SAlex Deucher 0x0000903c, 0x00000100, 0xffffffff, 8576596afd4SAlex Deucher 0x00009040, 0x00000100, 0xffffffff, 8586596afd4SAlex Deucher 0x0000a200, 0x00000100, 0xffffffff, 8596596afd4SAlex Deucher 0x0000a204, 0x00000100, 0xffffffff, 8606596afd4SAlex Deucher 0x0000a208, 0x00000100, 0xffffffff, 8616596afd4SAlex Deucher 0x0000a20c, 0x00000100, 0xffffffff, 8626596afd4SAlex Deucher 0x0000977c, 0x00000100, 0xffffffff, 8636596afd4SAlex Deucher 0x00003f80, 0x00000100, 0xffffffff, 8646596afd4SAlex Deucher 0x0000a210, 0x00000100, 0xffffffff, 8656596afd4SAlex Deucher 0x0000a214, 0x00000100, 0xffffffff, 8666596afd4SAlex Deucher 0x000004d8, 0x00000100, 0xffffffff, 8676596afd4SAlex Deucher 0x00009784, 0x00000100, 0xffffffff, 8686596afd4SAlex Deucher 0x00009698, 0x00000100, 0xffffffff, 8696596afd4SAlex Deucher 0x000004d4, 0x00000200, 0xffffffff, 8706596afd4SAlex Deucher 0x000004d0, 0x00000000, 0xffffffff, 8716596afd4SAlex Deucher 0x000030cc, 0x00000100, 0xffffffff, 8726596afd4SAlex Deucher 0x0000d0c0, 0x00000100, 0xffffffff, 8736596afd4SAlex Deucher 0x0000915c, 0x00010000, 0xffffffff, 8746596afd4SAlex Deucher 0x00009160, 0x00030002, 0xffffffff, 8756596afd4SAlex Deucher 0x00009164, 0x00050004, 0xffffffff, 8766596afd4SAlex Deucher 0x00009168, 0x00070006, 0xffffffff, 8776596afd4SAlex Deucher 0x00009178, 0x00070000, 0xffffffff, 8786596afd4SAlex Deucher 0x0000917c, 0x00030002, 0xffffffff, 8796596afd4SAlex Deucher 0x00009180, 0x00050004, 0xffffffff, 8806596afd4SAlex Deucher 0x0000918c, 0x00010006, 0xffffffff, 8816596afd4SAlex Deucher 0x00009190, 0x00090008, 0xffffffff, 8826596afd4SAlex Deucher 0x00009194, 0x00070000, 0xffffffff, 8836596afd4SAlex Deucher 0x00009198, 0x00030002, 0xffffffff, 8846596afd4SAlex Deucher 0x0000919c, 0x00050004, 0xffffffff, 8856596afd4SAlex Deucher 0x000091a8, 0x00010006, 0xffffffff, 8866596afd4SAlex Deucher 0x000091ac, 0x00090008, 0xffffffff, 8876596afd4SAlex Deucher 0x000091b0, 0x00070000, 0xffffffff, 8886596afd4SAlex Deucher 0x000091b4, 0x00030002, 0xffffffff, 8896596afd4SAlex Deucher 0x000091b8, 0x00050004, 0xffffffff, 8906596afd4SAlex Deucher 0x000091c4, 0x00010006, 0xffffffff, 8916596afd4SAlex Deucher 0x000091c8, 0x00090008, 0xffffffff, 8926596afd4SAlex Deucher 0x000091cc, 0x00070000, 0xffffffff, 8936596afd4SAlex Deucher 0x000091d0, 0x00030002, 0xffffffff, 8946596afd4SAlex Deucher 0x000091d4, 0x00050004, 0xffffffff, 8956596afd4SAlex Deucher 0x000091e0, 0x00010006, 0xffffffff, 8966596afd4SAlex Deucher 0x000091e4, 0x00090008, 0xffffffff, 8976596afd4SAlex Deucher 0x000091e8, 0x00000000, 0xffffffff, 8986596afd4SAlex Deucher 0x000091ec, 0x00070000, 0xffffffff, 8996596afd4SAlex Deucher 0x000091f0, 0x00030002, 0xffffffff, 9006596afd4SAlex Deucher 0x000091f4, 0x00050004, 0xffffffff, 9016596afd4SAlex Deucher 0x00009200, 0x00010006, 0xffffffff, 9026596afd4SAlex Deucher 0x00009204, 0x00090008, 0xffffffff, 9036596afd4SAlex Deucher 0x00009208, 0x00070000, 0xffffffff, 9046596afd4SAlex Deucher 0x0000920c, 0x00030002, 0xffffffff, 9056596afd4SAlex Deucher 0x00009210, 0x00050004, 0xffffffff, 9066596afd4SAlex Deucher 0x0000921c, 0x00010006, 0xffffffff, 9076596afd4SAlex Deucher 0x00009220, 0x00090008, 0xffffffff, 9086596afd4SAlex Deucher 0x00009294, 0x00000000, 0xffffffff, 9096596afd4SAlex Deucher 0x000008f8, 0x00000010, 0xffffffff, 9106596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9116596afd4SAlex Deucher 0x000008f8, 0x00000011, 0xffffffff, 9126596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9136596afd4SAlex Deucher 0x000008f8, 0x00000012, 0xffffffff, 9146596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9156596afd4SAlex Deucher 0x000008f8, 0x00000013, 0xffffffff, 9166596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9176596afd4SAlex Deucher 0x000008f8, 0x00000014, 0xffffffff, 9186596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9196596afd4SAlex Deucher 0x000008f8, 0x00000015, 0xffffffff, 9206596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9216596afd4SAlex Deucher 0x000008f8, 0x00000016, 0xffffffff, 9226596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9236596afd4SAlex Deucher 0x000008f8, 0x00000017, 0xffffffff, 9246596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9256596afd4SAlex Deucher 0x000008f8, 0x00000018, 0xffffffff, 9266596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9276596afd4SAlex Deucher 0x000008f8, 0x00000019, 0xffffffff, 9286596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9296596afd4SAlex Deucher 0x000008f8, 0x0000001a, 0xffffffff, 9306596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9316596afd4SAlex Deucher 0x000008f8, 0x0000001b, 0xffffffff, 9326596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff 9336596afd4SAlex Deucher }; 9346596afd4SAlex Deucher #define TURKS_MGCG_DEFAULT_LENGTH sizeof(turks_mgcg_default) / (3 * sizeof(u32)) 9356596afd4SAlex Deucher 9366596afd4SAlex Deucher static const u32 turks_mgcg_disable[] = 9376596afd4SAlex Deucher { 9386596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 9396596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 9406596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 9416596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 9426596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 9436596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 9446596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 9456596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 9466596afd4SAlex Deucher 0x000008fc, 0xffffffff, 0xffffffff, 9476596afd4SAlex Deucher 0x00009150, 0x00600000, 0xffffffff 9486596afd4SAlex Deucher }; 9496596afd4SAlex Deucher #define TURKS_MGCG_DISABLE_LENGTH sizeof(turks_mgcg_disable) / (3 * sizeof(u32)) 9506596afd4SAlex Deucher 9516596afd4SAlex Deucher static const u32 turks_mgcg_enable[] = 9526596afd4SAlex Deucher { 9536596afd4SAlex Deucher 0x0000802c, 0xc0000000, 0xffffffff, 9546596afd4SAlex Deucher 0x000008f8, 0x00000000, 0xffffffff, 9556596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9566596afd4SAlex Deucher 0x000008f8, 0x00000001, 0xffffffff, 9576596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9586596afd4SAlex Deucher 0x000008f8, 0x00000002, 0xffffffff, 9596596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9606596afd4SAlex Deucher 0x000008f8, 0x00000003, 0xffffffff, 9616596afd4SAlex Deucher 0x000008fc, 0x00000000, 0xffffffff, 9626596afd4SAlex Deucher 0x00009150, 0x6e944000, 0xffffffff 9636596afd4SAlex Deucher }; 9646596afd4SAlex Deucher #define TURKS_MGCG_ENABLE_LENGTH sizeof(turks_mgcg_enable) / (3 * sizeof(u32)) 9656596afd4SAlex Deucher 9666596afd4SAlex Deucher #endif 9676596afd4SAlex Deucher 9686596afd4SAlex Deucher #ifndef BTC_SYSLS_SEQUENCE 9696596afd4SAlex Deucher #define BTC_SYSLS_SEQUENCE 100 9706596afd4SAlex Deucher 9716596afd4SAlex Deucher 9726596afd4SAlex Deucher //********* BARTS **************// 9736596afd4SAlex Deucher static const u32 barts_sysls_default[] = 9746596afd4SAlex Deucher { 9756596afd4SAlex Deucher /* Register, Value, Mask bits */ 9766596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 9776596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 9786596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 9796596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 9806596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 9816596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 9826596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 9836596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 9846596afd4SAlex Deucher 0x000020c0, 0x000c0c80, 0xffffffff, 9856596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 9866596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 9876596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 9886596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 9896596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 9906596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff 9916596afd4SAlex Deucher }; 9926596afd4SAlex Deucher #define BARTS_SYSLS_DEFAULT_LENGTH sizeof(barts_sysls_default) / (3 * sizeof(u32)) 9936596afd4SAlex Deucher 9946596afd4SAlex Deucher static const u32 barts_sysls_disable[] = 9956596afd4SAlex Deucher { 9966596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 9976596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 9986596afd4SAlex Deucher 0x000015c0, 0x00041401, 0xffffffff, 9996596afd4SAlex Deucher 0x0000264c, 0x00040400, 0xffffffff, 10006596afd4SAlex Deucher 0x00002648, 0x00040400, 0xffffffff, 10016596afd4SAlex Deucher 0x00002650, 0x00040400, 0xffffffff, 10026596afd4SAlex Deucher 0x000020b8, 0x00040400, 0xffffffff, 10036596afd4SAlex Deucher 0x000020bc, 0x00040400, 0xffffffff, 10046596afd4SAlex Deucher 0x000020c0, 0x00040c80, 0xffffffff, 10056596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 10066596afd4SAlex Deucher 0x0000f4a4, 0x00680000, 0xffffffff, 10076596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 10086596afd4SAlex Deucher 0x000064ec, 0x00007ffd, 0xffffffff, 10096596afd4SAlex Deucher 0x00000c7c, 0x0000ff00, 0xffffffff, 10106596afd4SAlex Deucher 0x00006dfc, 0x0000007f, 0xffffffff 10116596afd4SAlex Deucher }; 10126596afd4SAlex Deucher #define BARTS_SYSLS_DISABLE_LENGTH sizeof(barts_sysls_disable) / (3 * sizeof(u32)) 10136596afd4SAlex Deucher 10146596afd4SAlex Deucher static const u32 barts_sysls_enable[] = 10156596afd4SAlex Deucher { 10166596afd4SAlex Deucher 0x000055e8, 0x00000001, 0xffffffff, 10176596afd4SAlex Deucher 0x0000d0bc, 0x00000100, 0xffffffff, 10186596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 10196596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 10206596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 10216596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 10226596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 10236596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 10246596afd4SAlex Deucher 0x000020c0, 0x000c0c80, 0xffffffff, 10256596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 10266596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 10276596afd4SAlex Deucher 0x000004c8, 0x00000000, 0xffffffff, 10286596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 10296596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 10306596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff 10316596afd4SAlex Deucher }; 10326596afd4SAlex Deucher #define BARTS_SYSLS_ENABLE_LENGTH sizeof(barts_sysls_enable) / (3 * sizeof(u32)) 10336596afd4SAlex Deucher 10346596afd4SAlex Deucher //********* CAICOS **************// 10356596afd4SAlex Deucher static const u32 caicos_sysls_default[] = 10366596afd4SAlex Deucher { 10376596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 10386596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 10396596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 10406596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 10416596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 10426596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 10436596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 10446596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 10456596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 10466596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 10476596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 10486596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 10496596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 10506596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff 10516596afd4SAlex Deucher }; 10526596afd4SAlex Deucher #define CAICOS_SYSLS_DEFAULT_LENGTH sizeof(caicos_sysls_default) / (3 * sizeof(u32)) 10536596afd4SAlex Deucher 10546596afd4SAlex Deucher static const u32 caicos_sysls_disable[] = 10556596afd4SAlex Deucher { 10566596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 10576596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 10586596afd4SAlex Deucher 0x000015c0, 0x00041401, 0xffffffff, 10596596afd4SAlex Deucher 0x0000264c, 0x00040400, 0xffffffff, 10606596afd4SAlex Deucher 0x00002648, 0x00040400, 0xffffffff, 10616596afd4SAlex Deucher 0x00002650, 0x00040400, 0xffffffff, 10626596afd4SAlex Deucher 0x000020b8, 0x00040400, 0xffffffff, 10636596afd4SAlex Deucher 0x000020bc, 0x00040400, 0xffffffff, 10646596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 10656596afd4SAlex Deucher 0x0000f4a4, 0x00680000, 0xffffffff, 10666596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 10676596afd4SAlex Deucher 0x000064ec, 0x00007ffd, 0xffffffff, 10686596afd4SAlex Deucher 0x00000c7c, 0x0000ff00, 0xffffffff, 10696596afd4SAlex Deucher 0x00006dfc, 0x0000007f, 0xffffffff 10706596afd4SAlex Deucher }; 10716596afd4SAlex Deucher #define CAICOS_SYSLS_DISABLE_LENGTH sizeof(caicos_sysls_disable) / (3 * sizeof(u32)) 10726596afd4SAlex Deucher 10736596afd4SAlex Deucher static const u32 caicos_sysls_enable[] = 10746596afd4SAlex Deucher { 10756596afd4SAlex Deucher 0x000055e8, 0x00000001, 0xffffffff, 10766596afd4SAlex Deucher 0x0000d0bc, 0x00000100, 0xffffffff, 10776596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 10786596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 10796596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 10806596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 10816596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 10826596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 10836596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 10846596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 10856596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 10866596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 10876596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff, 10886596afd4SAlex Deucher 0x000004c8, 0x00000000, 0xffffffff 10896596afd4SAlex Deucher }; 10906596afd4SAlex Deucher #define CAICOS_SYSLS_ENABLE_LENGTH sizeof(caicos_sysls_enable) / (3 * sizeof(u32)) 10916596afd4SAlex Deucher 10926596afd4SAlex Deucher //********* TURKS **************// 10936596afd4SAlex Deucher static const u32 turks_sysls_default[] = 10946596afd4SAlex Deucher { 10956596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 10966596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 10976596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 10986596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 10996596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 11006596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 11016596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 11026596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 11036596afd4SAlex Deucher 0x000020c0, 0x000c0c80, 0xffffffff, 11046596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 11056596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 11066596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 11076596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 11086596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 11096596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff 11106596afd4SAlex Deucher }; 11116596afd4SAlex Deucher #define TURKS_SYSLS_DEFAULT_LENGTH sizeof(turks_sysls_default) / (3 * sizeof(u32)) 11126596afd4SAlex Deucher 11136596afd4SAlex Deucher static const u32 turks_sysls_disable[] = 11146596afd4SAlex Deucher { 11156596afd4SAlex Deucher 0x000055e8, 0x00000000, 0xffffffff, 11166596afd4SAlex Deucher 0x0000d0bc, 0x00000000, 0xffffffff, 11176596afd4SAlex Deucher 0x000015c0, 0x00041401, 0xffffffff, 11186596afd4SAlex Deucher 0x0000264c, 0x00040400, 0xffffffff, 11196596afd4SAlex Deucher 0x00002648, 0x00040400, 0xffffffff, 11206596afd4SAlex Deucher 0x00002650, 0x00040400, 0xffffffff, 11216596afd4SAlex Deucher 0x000020b8, 0x00040400, 0xffffffff, 11226596afd4SAlex Deucher 0x000020bc, 0x00040400, 0xffffffff, 11236596afd4SAlex Deucher 0x000020c0, 0x00040c80, 0xffffffff, 11246596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 11256596afd4SAlex Deucher 0x0000f4a4, 0x00680000, 0xffffffff, 11266596afd4SAlex Deucher 0x000004c8, 0x00000001, 0xffffffff, 11276596afd4SAlex Deucher 0x000064ec, 0x00007ffd, 0xffffffff, 11286596afd4SAlex Deucher 0x00000c7c, 0x0000ff00, 0xffffffff, 11296596afd4SAlex Deucher 0x00006dfc, 0x0000007f, 0xffffffff 11306596afd4SAlex Deucher }; 11316596afd4SAlex Deucher #define TURKS_SYSLS_DISABLE_LENGTH sizeof(turks_sysls_disable) / (3 * sizeof(u32)) 11326596afd4SAlex Deucher 11336596afd4SAlex Deucher static const u32 turks_sysls_enable[] = 11346596afd4SAlex Deucher { 11356596afd4SAlex Deucher 0x000055e8, 0x00000001, 0xffffffff, 11366596afd4SAlex Deucher 0x0000d0bc, 0x00000100, 0xffffffff, 11376596afd4SAlex Deucher 0x000015c0, 0x000c1401, 0xffffffff, 11386596afd4SAlex Deucher 0x0000264c, 0x000c0400, 0xffffffff, 11396596afd4SAlex Deucher 0x00002648, 0x000c0400, 0xffffffff, 11406596afd4SAlex Deucher 0x00002650, 0x000c0400, 0xffffffff, 11416596afd4SAlex Deucher 0x000020b8, 0x000c0400, 0xffffffff, 11426596afd4SAlex Deucher 0x000020bc, 0x000c0400, 0xffffffff, 11436596afd4SAlex Deucher 0x000020c0, 0x000c0c80, 0xffffffff, 11446596afd4SAlex Deucher 0x0000f4a0, 0x000000c0, 0xffffffff, 11456596afd4SAlex Deucher 0x0000f4a4, 0x00680fff, 0xffffffff, 11466596afd4SAlex Deucher 0x000004c8, 0x00000000, 0xffffffff, 11476596afd4SAlex Deucher 0x000064ec, 0x00000000, 0xffffffff, 11486596afd4SAlex Deucher 0x00000c7c, 0x00000000, 0xffffffff, 11496596afd4SAlex Deucher 0x00006dfc, 0x00000000, 0xffffffff 11506596afd4SAlex Deucher }; 11516596afd4SAlex Deucher #define TURKS_SYSLS_ENABLE_LENGTH sizeof(turks_sysls_enable) / (3 * sizeof(u32)) 11526596afd4SAlex Deucher 11536596afd4SAlex Deucher #endif 11546596afd4SAlex Deucher 11556596afd4SAlex Deucher static void btc_enable_bif_dynamic_pcie_gen2(struct radeon_device *rdev, 11566596afd4SAlex Deucher bool enable) 11576596afd4SAlex Deucher { 11586596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 11596596afd4SAlex Deucher u32 tmp, bif; 11606596afd4SAlex Deucher 11616596afd4SAlex Deucher tmp = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 11626596afd4SAlex Deucher if (enable) { 11636596afd4SAlex Deucher if ((tmp & LC_OTHER_SIDE_EVER_SENT_GEN2) && 11646596afd4SAlex Deucher (tmp & LC_OTHER_SIDE_SUPPORTS_GEN2)) { 11656596afd4SAlex Deucher if (!pi->boot_in_gen2) { 11666596afd4SAlex Deucher bif = RREG32(CG_BIF_REQ_AND_RSP) & ~CG_CLIENT_REQ_MASK; 11676596afd4SAlex Deucher bif |= CG_CLIENT_REQ(0xd); 11686596afd4SAlex Deucher WREG32(CG_BIF_REQ_AND_RSP, bif); 11696596afd4SAlex Deucher 11706596afd4SAlex Deucher tmp &= ~LC_HW_VOLTAGE_IF_CONTROL_MASK; 11716596afd4SAlex Deucher tmp |= LC_HW_VOLTAGE_IF_CONTROL(1); 11726596afd4SAlex Deucher tmp |= LC_GEN2_EN_STRAP; 11736596afd4SAlex Deucher 11746596afd4SAlex Deucher tmp |= LC_CLR_FAILED_SPD_CHANGE_CNT; 11756596afd4SAlex Deucher WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, tmp); 11766596afd4SAlex Deucher udelay(10); 11776596afd4SAlex Deucher tmp &= ~LC_CLR_FAILED_SPD_CHANGE_CNT; 11786596afd4SAlex Deucher WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, tmp); 11796596afd4SAlex Deucher } 11806596afd4SAlex Deucher } 11816596afd4SAlex Deucher } else { 11826596afd4SAlex Deucher if ((tmp & LC_OTHER_SIDE_EVER_SENT_GEN2) || 11836596afd4SAlex Deucher (tmp & LC_OTHER_SIDE_SUPPORTS_GEN2)) { 11846596afd4SAlex Deucher if (!pi->boot_in_gen2) { 11856596afd4SAlex Deucher bif = RREG32(CG_BIF_REQ_AND_RSP) & ~CG_CLIENT_REQ_MASK; 11866596afd4SAlex Deucher bif |= CG_CLIENT_REQ(0xd); 11876596afd4SAlex Deucher WREG32(CG_BIF_REQ_AND_RSP, bif); 11886596afd4SAlex Deucher 11896596afd4SAlex Deucher tmp &= ~LC_HW_VOLTAGE_IF_CONTROL_MASK; 11906596afd4SAlex Deucher tmp &= ~LC_GEN2_EN_STRAP; 11916596afd4SAlex Deucher } 11926596afd4SAlex Deucher WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, tmp); 11936596afd4SAlex Deucher } 11946596afd4SAlex Deucher } 11956596afd4SAlex Deucher } 11966596afd4SAlex Deucher 11976596afd4SAlex Deucher static void btc_enable_dynamic_pcie_gen2(struct radeon_device *rdev, 11986596afd4SAlex Deucher bool enable) 11996596afd4SAlex Deucher { 12006596afd4SAlex Deucher btc_enable_bif_dynamic_pcie_gen2(rdev, enable); 12016596afd4SAlex Deucher 12026596afd4SAlex Deucher if (enable) 12036596afd4SAlex Deucher WREG32_P(GENERAL_PWRMGT, ENABLE_GEN2PCIE, ~ENABLE_GEN2PCIE); 12046596afd4SAlex Deucher else 12056596afd4SAlex Deucher WREG32_P(GENERAL_PWRMGT, 0, ~ENABLE_GEN2PCIE); 12066596afd4SAlex Deucher } 12076596afd4SAlex Deucher 12086596afd4SAlex Deucher static int btc_disable_ulv(struct radeon_device *rdev) 12096596afd4SAlex Deucher { 12106596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 12116596afd4SAlex Deucher 12126596afd4SAlex Deucher if (eg_pi->ulv.supported) { 12136596afd4SAlex Deucher if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_DisableULV) != PPSMC_Result_OK) 12146596afd4SAlex Deucher return -EINVAL; 12156596afd4SAlex Deucher } 12166596afd4SAlex Deucher return 0; 12176596afd4SAlex Deucher } 12186596afd4SAlex Deucher 12196596afd4SAlex Deucher static int btc_populate_ulv_state(struct radeon_device *rdev, 12206596afd4SAlex Deucher RV770_SMC_STATETABLE *table) 12216596afd4SAlex Deucher { 12226596afd4SAlex Deucher int ret = -EINVAL; 12236596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 12246596afd4SAlex Deucher struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; 12256596afd4SAlex Deucher 12266596afd4SAlex Deucher if (ulv_pl->vddc) { 12276596afd4SAlex Deucher ret = cypress_convert_power_level_to_smc(rdev, 12286596afd4SAlex Deucher ulv_pl, 12296596afd4SAlex Deucher &table->ULVState.levels[0], 12306596afd4SAlex Deucher PPSMC_DISPLAY_WATERMARK_LOW); 12316596afd4SAlex Deucher if (ret == 0) { 12326596afd4SAlex Deucher table->ULVState.levels[0].arbValue = MC_CG_ARB_FREQ_F0; 12336596afd4SAlex Deucher table->ULVState.levels[0].ACIndex = 1; 12346596afd4SAlex Deucher 12356596afd4SAlex Deucher table->ULVState.levels[1] = table->ULVState.levels[0]; 12366596afd4SAlex Deucher table->ULVState.levels[2] = table->ULVState.levels[0]; 12376596afd4SAlex Deucher 12386596afd4SAlex Deucher table->ULVState.flags |= PPSMC_SWSTATE_FLAG_DC; 12396596afd4SAlex Deucher 12406596afd4SAlex Deucher WREG32(CG_ULV_CONTROL, BTC_CGULVCONTROL_DFLT); 12416596afd4SAlex Deucher WREG32(CG_ULV_PARAMETER, BTC_CGULVPARAMETER_DFLT); 12426596afd4SAlex Deucher } 12436596afd4SAlex Deucher } 12446596afd4SAlex Deucher 12456596afd4SAlex Deucher return ret; 12466596afd4SAlex Deucher } 12476596afd4SAlex Deucher 12486596afd4SAlex Deucher static int btc_populate_smc_acpi_state(struct radeon_device *rdev, 12496596afd4SAlex Deucher RV770_SMC_STATETABLE *table) 12506596afd4SAlex Deucher { 12516596afd4SAlex Deucher int ret = cypress_populate_smc_acpi_state(rdev, table); 12526596afd4SAlex Deucher 12536596afd4SAlex Deucher if (ret == 0) { 12546596afd4SAlex Deucher table->ACPIState.levels[0].ACIndex = 0; 12556596afd4SAlex Deucher table->ACPIState.levels[1].ACIndex = 0; 12566596afd4SAlex Deucher table->ACPIState.levels[2].ACIndex = 0; 12576596afd4SAlex Deucher } 12586596afd4SAlex Deucher 12596596afd4SAlex Deucher return ret; 12606596afd4SAlex Deucher } 12616596afd4SAlex Deucher 12626596afd4SAlex Deucher static void btc_program_mgcg_hw_sequence(struct radeon_device *rdev, 12636596afd4SAlex Deucher const u32 *sequence, u32 count) 12646596afd4SAlex Deucher { 12656596afd4SAlex Deucher u32 i, length = count * 3; 12666596afd4SAlex Deucher u32 tmp; 12676596afd4SAlex Deucher 12686596afd4SAlex Deucher for (i = 0; i < length; i+=3) { 12696596afd4SAlex Deucher tmp = RREG32(sequence[i]); 12706596afd4SAlex Deucher tmp &= ~sequence[i+2]; 12716596afd4SAlex Deucher tmp |= sequence[i+1] & sequence[i+2]; 12726596afd4SAlex Deucher WREG32(sequence[i], tmp); 12736596afd4SAlex Deucher } 12746596afd4SAlex Deucher } 12756596afd4SAlex Deucher 12766596afd4SAlex Deucher static void btc_cg_clock_gating_default(struct radeon_device *rdev) 12776596afd4SAlex Deucher { 12786596afd4SAlex Deucher u32 count; 12796596afd4SAlex Deucher const u32 *p = NULL; 12806596afd4SAlex Deucher 12816596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 12826596afd4SAlex Deucher p = (const u32 *)&barts_cgcg_cgls_default; 12836596afd4SAlex Deucher count = BARTS_CGCG_CGLS_DEFAULT_LENGTH; 12846596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 12856596afd4SAlex Deucher p = (const u32 *)&turks_cgcg_cgls_default; 12866596afd4SAlex Deucher count = TURKS_CGCG_CGLS_DEFAULT_LENGTH; 12876596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 12886596afd4SAlex Deucher p = (const u32 *)&caicos_cgcg_cgls_default; 12896596afd4SAlex Deucher count = CAICOS_CGCG_CGLS_DEFAULT_LENGTH; 12906596afd4SAlex Deucher } else 12916596afd4SAlex Deucher return; 12926596afd4SAlex Deucher 12936596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 12946596afd4SAlex Deucher } 12956596afd4SAlex Deucher 12966596afd4SAlex Deucher static void btc_cg_clock_gating_enable(struct radeon_device *rdev, 12976596afd4SAlex Deucher bool enable) 12986596afd4SAlex Deucher { 12996596afd4SAlex Deucher u32 count; 13006596afd4SAlex Deucher const u32 *p = NULL; 13016596afd4SAlex Deucher 13026596afd4SAlex Deucher if (enable) { 13036596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13046596afd4SAlex Deucher p = (const u32 *)&barts_cgcg_cgls_enable; 13056596afd4SAlex Deucher count = BARTS_CGCG_CGLS_ENABLE_LENGTH; 13066596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13076596afd4SAlex Deucher p = (const u32 *)&turks_cgcg_cgls_enable; 13086596afd4SAlex Deucher count = TURKS_CGCG_CGLS_ENABLE_LENGTH; 13096596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13106596afd4SAlex Deucher p = (const u32 *)&caicos_cgcg_cgls_enable; 13116596afd4SAlex Deucher count = CAICOS_CGCG_CGLS_ENABLE_LENGTH; 13126596afd4SAlex Deucher } else 13136596afd4SAlex Deucher return; 13146596afd4SAlex Deucher } else { 13156596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13166596afd4SAlex Deucher p = (const u32 *)&barts_cgcg_cgls_disable; 13176596afd4SAlex Deucher count = BARTS_CGCG_CGLS_DISABLE_LENGTH; 13186596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13196596afd4SAlex Deucher p = (const u32 *)&turks_cgcg_cgls_disable; 13206596afd4SAlex Deucher count = TURKS_CGCG_CGLS_DISABLE_LENGTH; 13216596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13226596afd4SAlex Deucher p = (const u32 *)&caicos_cgcg_cgls_disable; 13236596afd4SAlex Deucher count = CAICOS_CGCG_CGLS_DISABLE_LENGTH; 13246596afd4SAlex Deucher } else 13256596afd4SAlex Deucher return; 13266596afd4SAlex Deucher } 13276596afd4SAlex Deucher 13286596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 13296596afd4SAlex Deucher } 13306596afd4SAlex Deucher 13316596afd4SAlex Deucher static void btc_mg_clock_gating_default(struct radeon_device *rdev) 13326596afd4SAlex Deucher { 13336596afd4SAlex Deucher u32 count; 13346596afd4SAlex Deucher const u32 *p = NULL; 13356596afd4SAlex Deucher 13366596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13376596afd4SAlex Deucher p = (const u32 *)&barts_mgcg_default; 13386596afd4SAlex Deucher count = BARTS_MGCG_DEFAULT_LENGTH; 13396596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13406596afd4SAlex Deucher p = (const u32 *)&turks_mgcg_default; 13416596afd4SAlex Deucher count = TURKS_MGCG_DEFAULT_LENGTH; 13426596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13436596afd4SAlex Deucher p = (const u32 *)&caicos_mgcg_default; 13446596afd4SAlex Deucher count = CAICOS_MGCG_DEFAULT_LENGTH; 13456596afd4SAlex Deucher } else 13466596afd4SAlex Deucher return; 13476596afd4SAlex Deucher 13486596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 13496596afd4SAlex Deucher } 13506596afd4SAlex Deucher 13516596afd4SAlex Deucher static void btc_mg_clock_gating_enable(struct radeon_device *rdev, 13526596afd4SAlex Deucher bool enable) 13536596afd4SAlex Deucher { 13546596afd4SAlex Deucher u32 count; 13556596afd4SAlex Deucher const u32 *p = NULL; 13566596afd4SAlex Deucher 13576596afd4SAlex Deucher if (enable) { 13586596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13596596afd4SAlex Deucher p = (const u32 *)&barts_mgcg_enable; 13606596afd4SAlex Deucher count = BARTS_MGCG_ENABLE_LENGTH; 13616596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13626596afd4SAlex Deucher p = (const u32 *)&turks_mgcg_enable; 13636596afd4SAlex Deucher count = TURKS_MGCG_ENABLE_LENGTH; 13646596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13656596afd4SAlex Deucher p = (const u32 *)&caicos_mgcg_enable; 13666596afd4SAlex Deucher count = CAICOS_MGCG_ENABLE_LENGTH; 13676596afd4SAlex Deucher } else 13686596afd4SAlex Deucher return; 13696596afd4SAlex Deucher } else { 13706596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13716596afd4SAlex Deucher p = (const u32 *)&barts_mgcg_disable[0]; 13726596afd4SAlex Deucher count = BARTS_MGCG_DISABLE_LENGTH; 13736596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13746596afd4SAlex Deucher p = (const u32 *)&turks_mgcg_disable[0]; 13756596afd4SAlex Deucher count = TURKS_MGCG_DISABLE_LENGTH; 13766596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13776596afd4SAlex Deucher p = (const u32 *)&caicos_mgcg_disable[0]; 13786596afd4SAlex Deucher count = CAICOS_MGCG_DISABLE_LENGTH; 13796596afd4SAlex Deucher } else 13806596afd4SAlex Deucher return; 13816596afd4SAlex Deucher } 13826596afd4SAlex Deucher 13836596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 13846596afd4SAlex Deucher } 13856596afd4SAlex Deucher 13866596afd4SAlex Deucher static void btc_ls_clock_gating_default(struct radeon_device *rdev) 13876596afd4SAlex Deucher { 13886596afd4SAlex Deucher u32 count; 13896596afd4SAlex Deucher const u32 *p = NULL; 13906596afd4SAlex Deucher 13916596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 13926596afd4SAlex Deucher p = (const u32 *)&barts_sysls_default; 13936596afd4SAlex Deucher count = BARTS_SYSLS_DEFAULT_LENGTH; 13946596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 13956596afd4SAlex Deucher p = (const u32 *)&turks_sysls_default; 13966596afd4SAlex Deucher count = TURKS_SYSLS_DEFAULT_LENGTH; 13976596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 13986596afd4SAlex Deucher p = (const u32 *)&caicos_sysls_default; 13996596afd4SAlex Deucher count = CAICOS_SYSLS_DEFAULT_LENGTH; 14006596afd4SAlex Deucher } else 14016596afd4SAlex Deucher return; 14026596afd4SAlex Deucher 14036596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 14046596afd4SAlex Deucher } 14056596afd4SAlex Deucher 14066596afd4SAlex Deucher static void btc_ls_clock_gating_enable(struct radeon_device *rdev, 14076596afd4SAlex Deucher bool enable) 14086596afd4SAlex Deucher { 14096596afd4SAlex Deucher u32 count; 14106596afd4SAlex Deucher const u32 *p = NULL; 14116596afd4SAlex Deucher 14126596afd4SAlex Deucher if (enable) { 14136596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 14146596afd4SAlex Deucher p = (const u32 *)&barts_sysls_enable; 14156596afd4SAlex Deucher count = BARTS_SYSLS_ENABLE_LENGTH; 14166596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 14176596afd4SAlex Deucher p = (const u32 *)&turks_sysls_enable; 14186596afd4SAlex Deucher count = TURKS_SYSLS_ENABLE_LENGTH; 14196596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 14206596afd4SAlex Deucher p = (const u32 *)&caicos_sysls_enable; 14216596afd4SAlex Deucher count = CAICOS_SYSLS_ENABLE_LENGTH; 14226596afd4SAlex Deucher } else 14236596afd4SAlex Deucher return; 14246596afd4SAlex Deucher } else { 14256596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) { 14266596afd4SAlex Deucher p = (const u32 *)&barts_sysls_disable; 14276596afd4SAlex Deucher count = BARTS_SYSLS_DISABLE_LENGTH; 14286596afd4SAlex Deucher } else if (rdev->family == CHIP_TURKS) { 14296596afd4SAlex Deucher p = (const u32 *)&turks_sysls_disable; 14306596afd4SAlex Deucher count = TURKS_SYSLS_DISABLE_LENGTH; 14316596afd4SAlex Deucher } else if (rdev->family == CHIP_CAICOS) { 14326596afd4SAlex Deucher p = (const u32 *)&caicos_sysls_disable; 14336596afd4SAlex Deucher count = CAICOS_SYSLS_DISABLE_LENGTH; 14346596afd4SAlex Deucher } else 14356596afd4SAlex Deucher return; 14366596afd4SAlex Deucher } 14376596afd4SAlex Deucher 14386596afd4SAlex Deucher btc_program_mgcg_hw_sequence(rdev, p, count); 14396596afd4SAlex Deucher } 14406596afd4SAlex Deucher 14416596afd4SAlex Deucher static bool btc_dpm_enabled(struct radeon_device *rdev) 14426596afd4SAlex Deucher { 14436596afd4SAlex Deucher if (rv770_is_smc_running(rdev)) 14446596afd4SAlex Deucher return true; 14456596afd4SAlex Deucher else 14466596afd4SAlex Deucher return false; 14476596afd4SAlex Deucher } 14486596afd4SAlex Deucher 14496596afd4SAlex Deucher static int btc_init_smc_table(struct radeon_device *rdev) 14506596afd4SAlex Deucher { 14516596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 14526596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 14536596afd4SAlex Deucher struct radeon_ps *radeon_boot_state = rdev->pm.dpm.boot_ps; 14546596afd4SAlex Deucher RV770_SMC_STATETABLE *table = &pi->smc_statetable; 14556596afd4SAlex Deucher int ret; 14566596afd4SAlex Deucher 14576596afd4SAlex Deucher memset(table, 0, sizeof(RV770_SMC_STATETABLE)); 14586596afd4SAlex Deucher 14596596afd4SAlex Deucher cypress_populate_smc_voltage_tables(rdev, table); 14606596afd4SAlex Deucher 14616596afd4SAlex Deucher switch (rdev->pm.int_thermal_type) { 14626596afd4SAlex Deucher case THERMAL_TYPE_EVERGREEN: 14636596afd4SAlex Deucher case THERMAL_TYPE_EMC2103_WITH_INTERNAL: 14646596afd4SAlex Deucher table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_INTERNAL; 14656596afd4SAlex Deucher break; 14666596afd4SAlex Deucher case THERMAL_TYPE_NONE: 14676596afd4SAlex Deucher table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_NONE; 14686596afd4SAlex Deucher break; 14696596afd4SAlex Deucher default: 14706596afd4SAlex Deucher table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_EXTERNAL; 14716596afd4SAlex Deucher break; 14726596afd4SAlex Deucher } 14736596afd4SAlex Deucher 14746596afd4SAlex Deucher if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_HARDWAREDC) 14756596afd4SAlex Deucher table->systemFlags |= PPSMC_SYSTEMFLAG_GPIO_DC; 14766596afd4SAlex Deucher 14776596afd4SAlex Deucher if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_REGULATOR_HOT) 14786596afd4SAlex Deucher table->systemFlags |= PPSMC_SYSTEMFLAG_REGULATOR_HOT; 14796596afd4SAlex Deucher 14806596afd4SAlex Deucher if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_STEPVDDC) 14816596afd4SAlex Deucher table->systemFlags |= PPSMC_SYSTEMFLAG_STEPVDDC; 14826596afd4SAlex Deucher 14836596afd4SAlex Deucher if (pi->mem_gddr5) 14846596afd4SAlex Deucher table->systemFlags |= PPSMC_SYSTEMFLAG_GDDR5; 14856596afd4SAlex Deucher 14866596afd4SAlex Deucher ret = cypress_populate_smc_initial_state(rdev, radeon_boot_state, table); 14876596afd4SAlex Deucher if (ret) 14886596afd4SAlex Deucher return ret; 14896596afd4SAlex Deucher 14906596afd4SAlex Deucher if (eg_pi->sclk_deep_sleep) 14916596afd4SAlex Deucher WREG32_P(SCLK_PSKIP_CNTL, PSKIP_ON_ALLOW_STOP_HI(32), 14926596afd4SAlex Deucher ~PSKIP_ON_ALLOW_STOP_HI_MASK); 14936596afd4SAlex Deucher 14946596afd4SAlex Deucher ret = btc_populate_smc_acpi_state(rdev, table); 14956596afd4SAlex Deucher if (ret) 14966596afd4SAlex Deucher return ret; 14976596afd4SAlex Deucher 14986596afd4SAlex Deucher if (eg_pi->ulv.supported) { 14996596afd4SAlex Deucher ret = btc_populate_ulv_state(rdev, table); 15006596afd4SAlex Deucher if (ret) 15016596afd4SAlex Deucher eg_pi->ulv.supported = false; 15026596afd4SAlex Deucher } 15036596afd4SAlex Deucher 15046596afd4SAlex Deucher table->driverState = table->initialState; 15056596afd4SAlex Deucher 15066596afd4SAlex Deucher return rv770_copy_bytes_to_smc(rdev, 15076596afd4SAlex Deucher pi->state_table_start, 15086596afd4SAlex Deucher (u8 *)table, 15096596afd4SAlex Deucher sizeof(RV770_SMC_STATETABLE), 15106596afd4SAlex Deucher pi->sram_end); 15116596afd4SAlex Deucher } 15126596afd4SAlex Deucher 1513*f85392bcSAlex Deucher static void btc_set_at_for_uvd(struct radeon_device *rdev) 1514*f85392bcSAlex Deucher { 1515*f85392bcSAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 1516*f85392bcSAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 1517*f85392bcSAlex Deucher struct radeon_ps *radeon_new_state = rdev->pm.dpm.requested_ps; 1518*f85392bcSAlex Deucher int idx = 0; 1519*f85392bcSAlex Deucher 1520*f85392bcSAlex Deucher if (r600_is_uvd_state(radeon_new_state->class, radeon_new_state->class2)) 1521*f85392bcSAlex Deucher idx = 1; 1522*f85392bcSAlex Deucher 1523*f85392bcSAlex Deucher if ((idx == 1) && !eg_pi->smu_uvd_hs) { 1524*f85392bcSAlex Deucher pi->rlp = 10; 1525*f85392bcSAlex Deucher pi->rmp = 100; 1526*f85392bcSAlex Deucher pi->lhp = 100; 1527*f85392bcSAlex Deucher pi->lmp = 10; 1528*f85392bcSAlex Deucher } else { 1529*f85392bcSAlex Deucher pi->rlp = eg_pi->ats[idx].rlp; 1530*f85392bcSAlex Deucher pi->rmp = eg_pi->ats[idx].rmp; 1531*f85392bcSAlex Deucher pi->lhp = eg_pi->ats[idx].lhp; 1532*f85392bcSAlex Deucher pi->lmp = eg_pi->ats[idx].lmp; 1533*f85392bcSAlex Deucher } 1534*f85392bcSAlex Deucher 1535*f85392bcSAlex Deucher } 1536*f85392bcSAlex Deucher 1537*f85392bcSAlex Deucher static void btc_notify_uvd_to_smc(struct radeon_device *rdev) 1538*f85392bcSAlex Deucher { 1539*f85392bcSAlex Deucher struct radeon_ps *radeon_new_state = rdev->pm.dpm.requested_ps; 1540*f85392bcSAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 1541*f85392bcSAlex Deucher 1542*f85392bcSAlex Deucher if (r600_is_uvd_state(radeon_new_state->class, radeon_new_state->class2)) { 1543*f85392bcSAlex Deucher rv770_write_smc_soft_register(rdev, 1544*f85392bcSAlex Deucher RV770_SMC_SOFT_REGISTER_uvd_enabled, 1); 1545*f85392bcSAlex Deucher eg_pi->uvd_enabled = true; 1546*f85392bcSAlex Deucher } else { 1547*f85392bcSAlex Deucher rv770_write_smc_soft_register(rdev, 1548*f85392bcSAlex Deucher RV770_SMC_SOFT_REGISTER_uvd_enabled, 0); 1549*f85392bcSAlex Deucher eg_pi->uvd_enabled = false; 1550*f85392bcSAlex Deucher } 1551*f85392bcSAlex Deucher } 1552*f85392bcSAlex Deucher 15536596afd4SAlex Deucher static int btc_reset_to_default(struct radeon_device *rdev) 15546596afd4SAlex Deucher { 15556596afd4SAlex Deucher if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_ResetToDefaults) != PPSMC_Result_OK) 15566596afd4SAlex Deucher return -EINVAL; 15576596afd4SAlex Deucher 15586596afd4SAlex Deucher return 0; 15596596afd4SAlex Deucher } 15606596afd4SAlex Deucher 15616596afd4SAlex Deucher static void btc_stop_smc(struct radeon_device *rdev) 15626596afd4SAlex Deucher { 15636596afd4SAlex Deucher int i; 15646596afd4SAlex Deucher 15656596afd4SAlex Deucher for (i = 0; i < rdev->usec_timeout; i++) { 15666596afd4SAlex Deucher if (((RREG32(LB_SYNC_RESET_SEL) & LB_SYNC_RESET_SEL_MASK) >> LB_SYNC_RESET_SEL_SHIFT) != 1) 15676596afd4SAlex Deucher break; 15686596afd4SAlex Deucher udelay(1); 15696596afd4SAlex Deucher } 15706596afd4SAlex Deucher udelay(100); 15716596afd4SAlex Deucher 15726596afd4SAlex Deucher r7xx_stop_smc(rdev); 15736596afd4SAlex Deucher } 15746596afd4SAlex Deucher 15756596afd4SAlex Deucher static void btc_read_arb_registers(struct radeon_device *rdev) 15766596afd4SAlex Deucher { 15776596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 15786596afd4SAlex Deucher struct evergreen_arb_registers *arb_registers = 15796596afd4SAlex Deucher &eg_pi->bootup_arb_registers; 15806596afd4SAlex Deucher 15816596afd4SAlex Deucher arb_registers->mc_arb_dram_timing = RREG32(MC_ARB_DRAM_TIMING); 15826596afd4SAlex Deucher arb_registers->mc_arb_dram_timing2 = RREG32(MC_ARB_DRAM_TIMING2); 15836596afd4SAlex Deucher arb_registers->mc_arb_rfsh_rate = RREG32(MC_ARB_RFSH_RATE); 15846596afd4SAlex Deucher arb_registers->mc_arb_burst_time = RREG32(MC_ARB_BURST_TIME); 15856596afd4SAlex Deucher } 15866596afd4SAlex Deucher 15876596afd4SAlex Deucher 15886596afd4SAlex Deucher static void btc_set_arb0_registers(struct radeon_device *rdev, 15896596afd4SAlex Deucher struct evergreen_arb_registers *arb_registers) 15906596afd4SAlex Deucher { 15916596afd4SAlex Deucher u32 val; 15926596afd4SAlex Deucher 15936596afd4SAlex Deucher WREG32(MC_ARB_DRAM_TIMING, arb_registers->mc_arb_dram_timing); 15946596afd4SAlex Deucher WREG32(MC_ARB_DRAM_TIMING2, arb_registers->mc_arb_dram_timing2); 15956596afd4SAlex Deucher 15966596afd4SAlex Deucher val = (arb_registers->mc_arb_rfsh_rate & POWERMODE0_MASK) >> 15976596afd4SAlex Deucher POWERMODE0_SHIFT; 15986596afd4SAlex Deucher WREG32_P(MC_ARB_RFSH_RATE, POWERMODE0(val), ~POWERMODE0_MASK); 15996596afd4SAlex Deucher 16006596afd4SAlex Deucher val = (arb_registers->mc_arb_burst_time & STATE0_MASK) >> 16016596afd4SAlex Deucher STATE0_SHIFT; 16026596afd4SAlex Deucher WREG32_P(MC_ARB_BURST_TIME, STATE0(val), ~STATE0_MASK); 16036596afd4SAlex Deucher } 16046596afd4SAlex Deucher 16056596afd4SAlex Deucher static void btc_set_boot_state_timing(struct radeon_device *rdev) 16066596afd4SAlex Deucher { 16076596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 16086596afd4SAlex Deucher 16096596afd4SAlex Deucher if (eg_pi->ulv.supported) 16106596afd4SAlex Deucher btc_set_arb0_registers(rdev, &eg_pi->bootup_arb_registers); 16116596afd4SAlex Deucher } 16126596afd4SAlex Deucher 16136596afd4SAlex Deucher static bool btc_is_state_ulv_compatible(struct radeon_device *rdev, 16146596afd4SAlex Deucher struct radeon_ps *radeon_state) 16156596afd4SAlex Deucher { 16166596afd4SAlex Deucher struct rv7xx_ps *state = rv770_get_ps(radeon_state); 16176596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 16186596afd4SAlex Deucher struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; 16196596afd4SAlex Deucher 16206596afd4SAlex Deucher if (state->low.mclk != ulv_pl->mclk) 16216596afd4SAlex Deucher return false; 16226596afd4SAlex Deucher 16236596afd4SAlex Deucher if (state->low.vddci != ulv_pl->vddci) 16246596afd4SAlex Deucher return false; 16256596afd4SAlex Deucher 16266596afd4SAlex Deucher /* XXX check minclocks, etc. */ 16276596afd4SAlex Deucher 16286596afd4SAlex Deucher return true; 16296596afd4SAlex Deucher } 16306596afd4SAlex Deucher 16316596afd4SAlex Deucher 16326596afd4SAlex Deucher static int btc_set_ulv_dram_timing(struct radeon_device *rdev) 16336596afd4SAlex Deucher { 16346596afd4SAlex Deucher u32 val; 16356596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 16366596afd4SAlex Deucher struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; 16376596afd4SAlex Deucher 16386596afd4SAlex Deucher radeon_atom_set_engine_dram_timings(rdev, 16396596afd4SAlex Deucher ulv_pl->sclk, 16406596afd4SAlex Deucher ulv_pl->mclk); 16416596afd4SAlex Deucher 16426596afd4SAlex Deucher val = rv770_calculate_memory_refresh_rate(rdev, ulv_pl->sclk); 16436596afd4SAlex Deucher WREG32_P(MC_ARB_RFSH_RATE, POWERMODE0(val), ~POWERMODE0_MASK); 16446596afd4SAlex Deucher 16456596afd4SAlex Deucher val = cypress_calculate_burst_time(rdev, ulv_pl->sclk, ulv_pl->mclk); 16466596afd4SAlex Deucher WREG32_P(MC_ARB_BURST_TIME, STATE0(val), ~STATE0_MASK); 16476596afd4SAlex Deucher 16486596afd4SAlex Deucher return 0; 16496596afd4SAlex Deucher } 16506596afd4SAlex Deucher 16516596afd4SAlex Deucher static int btc_enable_ulv(struct radeon_device *rdev) 16526596afd4SAlex Deucher { 16536596afd4SAlex Deucher if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_EnableULV) != PPSMC_Result_OK) 16546596afd4SAlex Deucher return -EINVAL; 16556596afd4SAlex Deucher 16566596afd4SAlex Deucher return 0; 16576596afd4SAlex Deucher } 16586596afd4SAlex Deucher 16596596afd4SAlex Deucher static int btc_set_power_state_conditionally_enable_ulv(struct radeon_device *rdev) 16606596afd4SAlex Deucher { 16616596afd4SAlex Deucher int ret = 0; 16626596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 16636596afd4SAlex Deucher struct radeon_ps *radeon_new_state = rdev->pm.dpm.requested_ps; 16646596afd4SAlex Deucher 16656596afd4SAlex Deucher if (eg_pi->ulv.supported) { 16666596afd4SAlex Deucher if (btc_is_state_ulv_compatible(rdev, radeon_new_state)) { 16676596afd4SAlex Deucher // Set ARB[0] to reflect the DRAM timing needed for ULV. 16686596afd4SAlex Deucher ret = btc_set_ulv_dram_timing(rdev); 16696596afd4SAlex Deucher if (ret == 0) 16706596afd4SAlex Deucher ret = btc_enable_ulv(rdev); 16716596afd4SAlex Deucher } 16726596afd4SAlex Deucher } 16736596afd4SAlex Deucher 16746596afd4SAlex Deucher return ret; 16756596afd4SAlex Deucher } 16766596afd4SAlex Deucher 16776596afd4SAlex Deucher static bool btc_check_s0_mc_reg_index(u16 in_reg, u16 *out_reg) 16786596afd4SAlex Deucher { 16796596afd4SAlex Deucher bool result = true; 16806596afd4SAlex Deucher 16816596afd4SAlex Deucher switch (in_reg) { 16826596afd4SAlex Deucher case MC_SEQ_RAS_TIMING >> 2: 16836596afd4SAlex Deucher *out_reg = MC_SEQ_RAS_TIMING_LP >> 2; 16846596afd4SAlex Deucher break; 16856596afd4SAlex Deucher case MC_SEQ_CAS_TIMING >> 2: 16866596afd4SAlex Deucher *out_reg = MC_SEQ_CAS_TIMING_LP >> 2; 16876596afd4SAlex Deucher break; 16886596afd4SAlex Deucher case MC_SEQ_MISC_TIMING >> 2: 16896596afd4SAlex Deucher *out_reg = MC_SEQ_MISC_TIMING_LP >> 2; 16906596afd4SAlex Deucher break; 16916596afd4SAlex Deucher case MC_SEQ_MISC_TIMING2 >> 2: 16926596afd4SAlex Deucher *out_reg = MC_SEQ_MISC_TIMING2_LP >> 2; 16936596afd4SAlex Deucher break; 16946596afd4SAlex Deucher case MC_SEQ_RD_CTL_D0 >> 2: 16956596afd4SAlex Deucher *out_reg = MC_SEQ_RD_CTL_D0_LP >> 2; 16966596afd4SAlex Deucher break; 16976596afd4SAlex Deucher case MC_SEQ_RD_CTL_D1 >> 2: 16986596afd4SAlex Deucher *out_reg = MC_SEQ_RD_CTL_D1_LP >> 2; 16996596afd4SAlex Deucher break; 17006596afd4SAlex Deucher case MC_SEQ_WR_CTL_D0 >> 2: 17016596afd4SAlex Deucher *out_reg = MC_SEQ_WR_CTL_D0_LP >> 2; 17026596afd4SAlex Deucher break; 17036596afd4SAlex Deucher case MC_SEQ_WR_CTL_D1 >> 2: 17046596afd4SAlex Deucher *out_reg = MC_SEQ_WR_CTL_D1_LP >> 2; 17056596afd4SAlex Deucher break; 17066596afd4SAlex Deucher case MC_PMG_CMD_EMRS >> 2: 17076596afd4SAlex Deucher *out_reg = MC_SEQ_PMG_CMD_EMRS_LP >> 2; 17086596afd4SAlex Deucher break; 17096596afd4SAlex Deucher case MC_PMG_CMD_MRS >> 2: 17106596afd4SAlex Deucher *out_reg = MC_SEQ_PMG_CMD_MRS_LP >> 2; 17116596afd4SAlex Deucher break; 17126596afd4SAlex Deucher case MC_PMG_CMD_MRS1 >> 2: 17136596afd4SAlex Deucher *out_reg = MC_SEQ_PMG_CMD_MRS1_LP >> 2; 17146596afd4SAlex Deucher break; 17156596afd4SAlex Deucher default: 17166596afd4SAlex Deucher result = false; 17176596afd4SAlex Deucher break; 17186596afd4SAlex Deucher } 17196596afd4SAlex Deucher 17206596afd4SAlex Deucher return result; 17216596afd4SAlex Deucher } 17226596afd4SAlex Deucher 17236596afd4SAlex Deucher static void btc_set_valid_flag(struct evergreen_mc_reg_table *table) 17246596afd4SAlex Deucher { 17256596afd4SAlex Deucher u8 i, j; 17266596afd4SAlex Deucher 17276596afd4SAlex Deucher for (i = 0; i < table->last; i++) { 17286596afd4SAlex Deucher for (j = 1; j < table->num_entries; j++) { 17296596afd4SAlex Deucher if (table->mc_reg_table_entry[j-1].mc_data[i] != 17306596afd4SAlex Deucher table->mc_reg_table_entry[j].mc_data[i]) { 17316596afd4SAlex Deucher table->valid_flag |= (1 << i); 17326596afd4SAlex Deucher break; 17336596afd4SAlex Deucher } 17346596afd4SAlex Deucher } 17356596afd4SAlex Deucher } 17366596afd4SAlex Deucher } 17376596afd4SAlex Deucher 17386596afd4SAlex Deucher static int btc_set_mc_special_registers(struct radeon_device *rdev, 17396596afd4SAlex Deucher struct evergreen_mc_reg_table *table) 17406596afd4SAlex Deucher { 17416596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 17426596afd4SAlex Deucher u8 i, j, k; 17436596afd4SAlex Deucher u32 tmp; 17446596afd4SAlex Deucher 17456596afd4SAlex Deucher for (i = 0, j = table->last; i < table->last; i++) { 17466596afd4SAlex Deucher switch (table->mc_reg_address[i].s1) { 17476596afd4SAlex Deucher case MC_SEQ_MISC1 >> 2: 17486596afd4SAlex Deucher tmp = RREG32(MC_PMG_CMD_EMRS); 17496596afd4SAlex Deucher table->mc_reg_address[j].s1 = MC_PMG_CMD_EMRS >> 2; 17506596afd4SAlex Deucher table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_EMRS_LP >> 2; 17516596afd4SAlex Deucher for (k = 0; k < table->num_entries; k++) { 17526596afd4SAlex Deucher table->mc_reg_table_entry[k].mc_data[j] = 17536596afd4SAlex Deucher ((tmp & 0xffff0000)) | 17546596afd4SAlex Deucher ((table->mc_reg_table_entry[k].mc_data[i] & 0xffff0000) >> 16); 17556596afd4SAlex Deucher } 17566596afd4SAlex Deucher j++; 17576596afd4SAlex Deucher 17586596afd4SAlex Deucher if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE) 17596596afd4SAlex Deucher return -EINVAL; 17606596afd4SAlex Deucher 17616596afd4SAlex Deucher tmp = RREG32(MC_PMG_CMD_MRS); 17626596afd4SAlex Deucher table->mc_reg_address[j].s1 = MC_PMG_CMD_MRS >> 2; 17636596afd4SAlex Deucher table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_MRS_LP >> 2; 17646596afd4SAlex Deucher for (k = 0; k < table->num_entries; k++) { 17656596afd4SAlex Deucher table->mc_reg_table_entry[k].mc_data[j] = 17666596afd4SAlex Deucher (tmp & 0xffff0000) | 17676596afd4SAlex Deucher (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff); 17686596afd4SAlex Deucher if (!pi->mem_gddr5) 17696596afd4SAlex Deucher table->mc_reg_table_entry[k].mc_data[j] |= 0x100; 17706596afd4SAlex Deucher } 17716596afd4SAlex Deucher j++; 17726596afd4SAlex Deucher 17736596afd4SAlex Deucher if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE) 17746596afd4SAlex Deucher return -EINVAL; 17756596afd4SAlex Deucher break; 17766596afd4SAlex Deucher case MC_SEQ_RESERVE_M >> 2: 17776596afd4SAlex Deucher tmp = RREG32(MC_PMG_CMD_MRS1); 17786596afd4SAlex Deucher table->mc_reg_address[j].s1 = MC_PMG_CMD_MRS1 >> 2; 17796596afd4SAlex Deucher table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_MRS1_LP >> 2; 17806596afd4SAlex Deucher for (k = 0; k < table->num_entries; k++) { 17816596afd4SAlex Deucher table->mc_reg_table_entry[k].mc_data[j] = 17826596afd4SAlex Deucher (tmp & 0xffff0000) | 17836596afd4SAlex Deucher (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff); 17846596afd4SAlex Deucher } 17856596afd4SAlex Deucher j++; 17866596afd4SAlex Deucher 17876596afd4SAlex Deucher if (j > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE) 17886596afd4SAlex Deucher return -EINVAL; 17896596afd4SAlex Deucher break; 17906596afd4SAlex Deucher default: 17916596afd4SAlex Deucher break; 17926596afd4SAlex Deucher } 17936596afd4SAlex Deucher } 17946596afd4SAlex Deucher 17956596afd4SAlex Deucher table->last = j; 17966596afd4SAlex Deucher 17976596afd4SAlex Deucher return 0; 17986596afd4SAlex Deucher } 17996596afd4SAlex Deucher 18006596afd4SAlex Deucher static void btc_set_s0_mc_reg_index(struct evergreen_mc_reg_table *table) 18016596afd4SAlex Deucher { 18026596afd4SAlex Deucher u32 i; 18036596afd4SAlex Deucher u16 address; 18046596afd4SAlex Deucher 18056596afd4SAlex Deucher for (i = 0; i < table->last; i++) { 18066596afd4SAlex Deucher table->mc_reg_address[i].s0 = 18076596afd4SAlex Deucher btc_check_s0_mc_reg_index(table->mc_reg_address[i].s1, &address) ? 18086596afd4SAlex Deucher address : table->mc_reg_address[i].s1; 18096596afd4SAlex Deucher } 18106596afd4SAlex Deucher } 18116596afd4SAlex Deucher 18126596afd4SAlex Deucher static int btc_copy_vbios_mc_reg_table(struct atom_mc_reg_table *table, 18136596afd4SAlex Deucher struct evergreen_mc_reg_table *eg_table) 18146596afd4SAlex Deucher { 18156596afd4SAlex Deucher u8 i, j; 18166596afd4SAlex Deucher 18176596afd4SAlex Deucher if (table->last > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE) 18186596afd4SAlex Deucher return -EINVAL; 18196596afd4SAlex Deucher 18206596afd4SAlex Deucher if (table->num_entries > MAX_AC_TIMING_ENTRIES) 18216596afd4SAlex Deucher return -EINVAL; 18226596afd4SAlex Deucher 18236596afd4SAlex Deucher for (i = 0; i < table->last; i++) 18246596afd4SAlex Deucher eg_table->mc_reg_address[i].s1 = table->mc_reg_address[i].s1; 18256596afd4SAlex Deucher eg_table->last = table->last; 18266596afd4SAlex Deucher 18276596afd4SAlex Deucher for (i = 0; i < table->num_entries; i++) { 18286596afd4SAlex Deucher eg_table->mc_reg_table_entry[i].mclk_max = 18296596afd4SAlex Deucher table->mc_reg_table_entry[i].mclk_max; 18306596afd4SAlex Deucher for(j = 0; j < table->last; j++) 18316596afd4SAlex Deucher eg_table->mc_reg_table_entry[i].mc_data[j] = 18326596afd4SAlex Deucher table->mc_reg_table_entry[i].mc_data[j]; 18336596afd4SAlex Deucher } 18346596afd4SAlex Deucher eg_table->num_entries = table->num_entries; 18356596afd4SAlex Deucher 18366596afd4SAlex Deucher return 0; 18376596afd4SAlex Deucher } 18386596afd4SAlex Deucher 18396596afd4SAlex Deucher static int btc_initialize_mc_reg_table(struct radeon_device *rdev) 18406596afd4SAlex Deucher { 18416596afd4SAlex Deucher int ret; 18426596afd4SAlex Deucher struct atom_mc_reg_table *table; 18436596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 18446596afd4SAlex Deucher struct evergreen_mc_reg_table *eg_table = &eg_pi->mc_reg_table; 18456596afd4SAlex Deucher u8 module_index = rv770_get_memory_module_index(rdev); 18466596afd4SAlex Deucher 18476596afd4SAlex Deucher table = kzalloc(sizeof(struct atom_mc_reg_table), GFP_KERNEL); 18486596afd4SAlex Deucher if (!table) 18496596afd4SAlex Deucher return -ENOMEM; 18506596afd4SAlex Deucher 18516596afd4SAlex Deucher /* Program additional LP registers that are no longer programmed by VBIOS */ 18526596afd4SAlex Deucher WREG32(MC_SEQ_RAS_TIMING_LP, RREG32(MC_SEQ_RAS_TIMING)); 18536596afd4SAlex Deucher WREG32(MC_SEQ_CAS_TIMING_LP, RREG32(MC_SEQ_CAS_TIMING)); 18546596afd4SAlex Deucher WREG32(MC_SEQ_MISC_TIMING_LP, RREG32(MC_SEQ_MISC_TIMING)); 18556596afd4SAlex Deucher WREG32(MC_SEQ_MISC_TIMING2_LP, RREG32(MC_SEQ_MISC_TIMING2)); 18566596afd4SAlex Deucher WREG32(MC_SEQ_RD_CTL_D0_LP, RREG32(MC_SEQ_RD_CTL_D0)); 18576596afd4SAlex Deucher WREG32(MC_SEQ_RD_CTL_D1_LP, RREG32(MC_SEQ_RD_CTL_D1)); 18586596afd4SAlex Deucher WREG32(MC_SEQ_WR_CTL_D0_LP, RREG32(MC_SEQ_WR_CTL_D0)); 18596596afd4SAlex Deucher WREG32(MC_SEQ_WR_CTL_D1_LP, RREG32(MC_SEQ_WR_CTL_D1)); 18606596afd4SAlex Deucher WREG32(MC_SEQ_PMG_CMD_EMRS_LP, RREG32(MC_PMG_CMD_EMRS)); 18616596afd4SAlex Deucher WREG32(MC_SEQ_PMG_CMD_MRS_LP, RREG32(MC_PMG_CMD_MRS)); 18626596afd4SAlex Deucher WREG32(MC_SEQ_PMG_CMD_MRS1_LP, RREG32(MC_PMG_CMD_MRS1)); 18636596afd4SAlex Deucher 18646596afd4SAlex Deucher ret = radeon_atom_init_mc_reg_table(rdev, module_index, table); 18656596afd4SAlex Deucher 18666596afd4SAlex Deucher if (ret) 18676596afd4SAlex Deucher goto init_mc_done; 18686596afd4SAlex Deucher 18696596afd4SAlex Deucher ret = btc_copy_vbios_mc_reg_table(table, eg_table); 18706596afd4SAlex Deucher 18716596afd4SAlex Deucher if (ret) 18726596afd4SAlex Deucher goto init_mc_done; 18736596afd4SAlex Deucher 18746596afd4SAlex Deucher btc_set_s0_mc_reg_index(eg_table); 18756596afd4SAlex Deucher ret = btc_set_mc_special_registers(rdev, eg_table); 18766596afd4SAlex Deucher 18776596afd4SAlex Deucher if (ret) 18786596afd4SAlex Deucher goto init_mc_done; 18796596afd4SAlex Deucher 18806596afd4SAlex Deucher btc_set_valid_flag(eg_table); 18816596afd4SAlex Deucher 18826596afd4SAlex Deucher init_mc_done: 18836596afd4SAlex Deucher kfree(table); 18846596afd4SAlex Deucher 18856596afd4SAlex Deucher return ret; 18866596afd4SAlex Deucher } 18876596afd4SAlex Deucher 18886596afd4SAlex Deucher static void btc_init_stutter_mode(struct radeon_device *rdev) 18896596afd4SAlex Deucher { 18906596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 18916596afd4SAlex Deucher u32 tmp; 18926596afd4SAlex Deucher 18936596afd4SAlex Deucher if (pi->mclk_stutter_mode_threshold) { 18946596afd4SAlex Deucher if (pi->mem_gddr5) { 18956596afd4SAlex Deucher tmp = RREG32(MC_PMG_AUTO_CFG); 18966596afd4SAlex Deucher if ((0x200 & tmp) == 0) { 18976596afd4SAlex Deucher tmp = (tmp & 0xfffffc0b) | 0x204; 18986596afd4SAlex Deucher WREG32(MC_PMG_AUTO_CFG, tmp); 18996596afd4SAlex Deucher } 19006596afd4SAlex Deucher } 19016596afd4SAlex Deucher } 19026596afd4SAlex Deucher } 19036596afd4SAlex Deucher 19046596afd4SAlex Deucher void btc_dpm_reset_asic(struct radeon_device *rdev) 19056596afd4SAlex Deucher { 19066596afd4SAlex Deucher rv770_restrict_performance_levels_before_switch(rdev); 19076596afd4SAlex Deucher btc_disable_ulv(rdev); 19086596afd4SAlex Deucher btc_set_boot_state_timing(rdev); 19096596afd4SAlex Deucher rv770_set_boot_state(rdev); 19106596afd4SAlex Deucher } 19116596afd4SAlex Deucher 19126596afd4SAlex Deucher int btc_dpm_set_power_state(struct radeon_device *rdev) 19136596afd4SAlex Deucher { 19146596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 19156596afd4SAlex Deucher 19166596afd4SAlex Deucher btc_disable_ulv(rdev); 19176596afd4SAlex Deucher btc_set_boot_state_timing(rdev); 19186596afd4SAlex Deucher rv770_restrict_performance_levels_before_switch(rdev); 19196596afd4SAlex Deucher 19206596afd4SAlex Deucher if (eg_pi->pcie_performance_request) 19216596afd4SAlex Deucher cypress_notify_link_speed_change_before_state_change(rdev); 19226596afd4SAlex Deucher 1923*f85392bcSAlex Deucher rv770_set_uvd_clock_before_set_eng_clock(rdev); 19246596afd4SAlex Deucher rv770_halt_smc(rdev); 1925*f85392bcSAlex Deucher btc_set_at_for_uvd(rdev); 1926*f85392bcSAlex Deucher if (eg_pi->smu_uvd_hs) 1927*f85392bcSAlex Deucher btc_notify_uvd_to_smc(rdev); 19286596afd4SAlex Deucher cypress_upload_sw_state(rdev); 19296596afd4SAlex Deucher 19306596afd4SAlex Deucher if (eg_pi->dynamic_ac_timing) 19316596afd4SAlex Deucher cypress_upload_mc_reg_table(rdev); 19326596afd4SAlex Deucher 19336596afd4SAlex Deucher cypress_program_memory_timing_parameters(rdev); 19346596afd4SAlex Deucher 19356596afd4SAlex Deucher rv770_resume_smc(rdev); 19366596afd4SAlex Deucher rv770_set_sw_state(rdev); 1937*f85392bcSAlex Deucher rv770_set_uvd_clock_after_set_eng_clock(rdev); 19386596afd4SAlex Deucher 19396596afd4SAlex Deucher if (eg_pi->pcie_performance_request) 19406596afd4SAlex Deucher cypress_notify_link_speed_change_after_state_change(rdev); 19416596afd4SAlex Deucher 19426596afd4SAlex Deucher btc_set_power_state_conditionally_enable_ulv(rdev); 19436596afd4SAlex Deucher 19446596afd4SAlex Deucher #if 0 19456596afd4SAlex Deucher /* XXX */ 19466596afd4SAlex Deucher rv770_unrestrict_performance_levels_after_switch(rdev); 19476596afd4SAlex Deucher #endif 19486596afd4SAlex Deucher 19496596afd4SAlex Deucher return 0; 19506596afd4SAlex Deucher } 19516596afd4SAlex Deucher 19526596afd4SAlex Deucher int btc_dpm_enable(struct radeon_device *rdev) 19536596afd4SAlex Deucher { 19546596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 19556596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 19566596afd4SAlex Deucher 19576596afd4SAlex Deucher if (pi->gfx_clock_gating) 19586596afd4SAlex Deucher btc_cg_clock_gating_default(rdev); 19596596afd4SAlex Deucher 19606596afd4SAlex Deucher if (btc_dpm_enabled(rdev)) 19616596afd4SAlex Deucher return -EINVAL; 19626596afd4SAlex Deucher 19636596afd4SAlex Deucher if (pi->mg_clock_gating) 19646596afd4SAlex Deucher btc_mg_clock_gating_default(rdev); 19656596afd4SAlex Deucher 19666596afd4SAlex Deucher if (eg_pi->ls_clock_gating) 19676596afd4SAlex Deucher btc_ls_clock_gating_default(rdev); 19686596afd4SAlex Deucher 19696596afd4SAlex Deucher if (pi->voltage_control) { 19706596afd4SAlex Deucher rv770_enable_voltage_control(rdev, true); 19716596afd4SAlex Deucher cypress_construct_voltage_tables(rdev); 19726596afd4SAlex Deucher } 19736596afd4SAlex Deucher 19746596afd4SAlex Deucher if (pi->mvdd_control) 19756596afd4SAlex Deucher cypress_get_mvdd_configuration(rdev); 19766596afd4SAlex Deucher 19776596afd4SAlex Deucher if (eg_pi->dynamic_ac_timing) 19786596afd4SAlex Deucher btc_initialize_mc_reg_table(rdev); 19796596afd4SAlex Deucher 19806596afd4SAlex Deucher if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_BACKBIAS) 19816596afd4SAlex Deucher rv770_enable_backbias(rdev, true); 19826596afd4SAlex Deucher 19836596afd4SAlex Deucher if (pi->dynamic_ss) 19846596afd4SAlex Deucher cypress_enable_spread_spectrum(rdev, true); 19856596afd4SAlex Deucher 19866596afd4SAlex Deucher if (pi->thermal_protection) 19876596afd4SAlex Deucher rv770_enable_thermal_protection(rdev, true); 19886596afd4SAlex Deucher 19896596afd4SAlex Deucher rv770_setup_bsp(rdev); 19906596afd4SAlex Deucher rv770_program_git(rdev); 19916596afd4SAlex Deucher rv770_program_tp(rdev); 19926596afd4SAlex Deucher rv770_program_tpp(rdev); 19936596afd4SAlex Deucher rv770_program_sstp(rdev); 19946596afd4SAlex Deucher rv770_program_engine_speed_parameters(rdev); 19956596afd4SAlex Deucher cypress_enable_display_gap(rdev); 19966596afd4SAlex Deucher rv770_program_vc(rdev); 19976596afd4SAlex Deucher 19986596afd4SAlex Deucher if (pi->dynamic_pcie_gen2) 19996596afd4SAlex Deucher btc_enable_dynamic_pcie_gen2(rdev, true); 20006596afd4SAlex Deucher 20016596afd4SAlex Deucher if (rv770_upload_firmware(rdev)) 20026596afd4SAlex Deucher return -EINVAL; 20036596afd4SAlex Deucher 20046596afd4SAlex Deucher cypress_get_table_locations(rdev); 20056596afd4SAlex Deucher btc_init_smc_table(rdev); 20066596afd4SAlex Deucher 20076596afd4SAlex Deucher if (eg_pi->dynamic_ac_timing) 20086596afd4SAlex Deucher cypress_populate_mc_reg_table(rdev); 20096596afd4SAlex Deucher 20106596afd4SAlex Deucher cypress_program_response_times(rdev); 20116596afd4SAlex Deucher r7xx_start_smc(rdev); 20126596afd4SAlex Deucher cypress_notify_smc_display_change(rdev, false); 20136596afd4SAlex Deucher cypress_enable_sclk_control(rdev, true); 20146596afd4SAlex Deucher 20156596afd4SAlex Deucher if (eg_pi->memory_transition) 20166596afd4SAlex Deucher cypress_enable_mclk_control(rdev, true); 20176596afd4SAlex Deucher 20186596afd4SAlex Deucher cypress_start_dpm(rdev); 20196596afd4SAlex Deucher 20206596afd4SAlex Deucher if (pi->gfx_clock_gating) 20216596afd4SAlex Deucher btc_cg_clock_gating_enable(rdev, true); 20226596afd4SAlex Deucher 20236596afd4SAlex Deucher if (pi->mg_clock_gating) 20246596afd4SAlex Deucher btc_mg_clock_gating_enable(rdev, true); 20256596afd4SAlex Deucher 20266596afd4SAlex Deucher if (eg_pi->ls_clock_gating) 20276596afd4SAlex Deucher btc_ls_clock_gating_enable(rdev, true); 20286596afd4SAlex Deucher 20296596afd4SAlex Deucher if (rdev->irq.installed && 20306596afd4SAlex Deucher r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { 20316596afd4SAlex Deucher PPSMC_Result result; 20326596afd4SAlex Deucher 20336596afd4SAlex Deucher rv770_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX); 20346596afd4SAlex Deucher rdev->irq.dpm_thermal = true; 20356596afd4SAlex Deucher radeon_irq_set(rdev); 20366596afd4SAlex Deucher result = rv770_send_msg_to_smc(rdev, PPSMC_MSG_EnableThermalInterrupt); 20376596afd4SAlex Deucher 20386596afd4SAlex Deucher if (result != PPSMC_Result_OK) 20396596afd4SAlex Deucher DRM_DEBUG_KMS("Could not enable thermal interrupts.\n"); 20406596afd4SAlex Deucher } 20416596afd4SAlex Deucher 20426596afd4SAlex Deucher rv770_enable_auto_throttle_source(rdev, RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL, true); 20436596afd4SAlex Deucher 20446596afd4SAlex Deucher btc_init_stutter_mode(rdev); 20456596afd4SAlex Deucher 20466596afd4SAlex Deucher return 0; 20476596afd4SAlex Deucher }; 20486596afd4SAlex Deucher 20496596afd4SAlex Deucher void btc_dpm_disable(struct radeon_device *rdev) 20506596afd4SAlex Deucher { 20516596afd4SAlex Deucher struct rv7xx_power_info *pi = rv770_get_pi(rdev); 20526596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 20536596afd4SAlex Deucher 20546596afd4SAlex Deucher if (!btc_dpm_enabled(rdev)) 20556596afd4SAlex Deucher return; 20566596afd4SAlex Deucher 20576596afd4SAlex Deucher rv770_clear_vc(rdev); 20586596afd4SAlex Deucher 20596596afd4SAlex Deucher if (pi->thermal_protection) 20606596afd4SAlex Deucher rv770_enable_thermal_protection(rdev, false); 20616596afd4SAlex Deucher 20626596afd4SAlex Deucher if (pi->dynamic_pcie_gen2) 20636596afd4SAlex Deucher btc_enable_dynamic_pcie_gen2(rdev, false); 20646596afd4SAlex Deucher 20656596afd4SAlex Deucher if (rdev->irq.installed && 20666596afd4SAlex Deucher r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { 20676596afd4SAlex Deucher rdev->irq.dpm_thermal = false; 20686596afd4SAlex Deucher radeon_irq_set(rdev); 20696596afd4SAlex Deucher } 20706596afd4SAlex Deucher 20716596afd4SAlex Deucher if (pi->gfx_clock_gating) 20726596afd4SAlex Deucher btc_cg_clock_gating_enable(rdev, false); 20736596afd4SAlex Deucher 20746596afd4SAlex Deucher if (pi->mg_clock_gating) 20756596afd4SAlex Deucher btc_mg_clock_gating_enable(rdev, false); 20766596afd4SAlex Deucher 20776596afd4SAlex Deucher if (eg_pi->ls_clock_gating) 20786596afd4SAlex Deucher btc_ls_clock_gating_enable(rdev, false); 20796596afd4SAlex Deucher 20806596afd4SAlex Deucher rv770_stop_dpm(rdev); 20816596afd4SAlex Deucher btc_reset_to_default(rdev); 20826596afd4SAlex Deucher btc_stop_smc(rdev); 20836596afd4SAlex Deucher cypress_enable_spread_spectrum(rdev, false); 20846596afd4SAlex Deucher } 20856596afd4SAlex Deucher 20866596afd4SAlex Deucher void btc_dpm_setup_asic(struct radeon_device *rdev) 20876596afd4SAlex Deucher { 20886596afd4SAlex Deucher struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); 20896596afd4SAlex Deucher 20906596afd4SAlex Deucher rv770_get_memory_type(rdev); 20916596afd4SAlex Deucher rv740_read_clock_registers(rdev); 20926596afd4SAlex Deucher btc_read_arb_registers(rdev); 20936596afd4SAlex Deucher rv770_read_voltage_smio_registers(rdev); 20946596afd4SAlex Deucher 20956596afd4SAlex Deucher if (eg_pi->pcie_performance_request) 20966596afd4SAlex Deucher cypress_advertise_gen2_capability(rdev); 20976596afd4SAlex Deucher 20986596afd4SAlex Deucher rv770_get_pcie_gen2_status(rdev); 20996596afd4SAlex Deucher rv770_enable_acpi_pm(rdev); 21006596afd4SAlex Deucher } 21016596afd4SAlex Deucher 21026596afd4SAlex Deucher int btc_dpm_init(struct radeon_device *rdev) 21036596afd4SAlex Deucher { 21046596afd4SAlex Deucher struct rv7xx_power_info *pi; 21056596afd4SAlex Deucher struct evergreen_power_info *eg_pi; 21066596afd4SAlex Deucher int index = GetIndexIntoMasterTable(DATA, ASIC_InternalSS_Info); 21076596afd4SAlex Deucher u16 data_offset, size; 21086596afd4SAlex Deucher u8 frev, crev; 21096596afd4SAlex Deucher struct atom_clock_dividers dividers; 21106596afd4SAlex Deucher int ret; 21116596afd4SAlex Deucher 21126596afd4SAlex Deucher eg_pi = kzalloc(sizeof(struct evergreen_power_info), GFP_KERNEL); 21136596afd4SAlex Deucher if (eg_pi == NULL) 21146596afd4SAlex Deucher return -ENOMEM; 21156596afd4SAlex Deucher rdev->pm.dpm.priv = eg_pi; 21166596afd4SAlex Deucher pi = &eg_pi->rv7xx; 21176596afd4SAlex Deucher 21186596afd4SAlex Deucher rv770_get_max_vddc(rdev); 21196596afd4SAlex Deucher 21206596afd4SAlex Deucher eg_pi->ulv.supported = false; 21216596afd4SAlex Deucher pi->acpi_vddc = 0; 21226596afd4SAlex Deucher eg_pi->acpi_vddci = 0; 21236596afd4SAlex Deucher pi->min_vddc_in_table = 0; 21246596afd4SAlex Deucher pi->max_vddc_in_table = 0; 21256596afd4SAlex Deucher 21266596afd4SAlex Deucher ret = rv7xx_parse_power_table(rdev); 21276596afd4SAlex Deucher if (ret) 21286596afd4SAlex Deucher return ret; 21296596afd4SAlex Deucher 21306596afd4SAlex Deucher if (rdev->pm.dpm.voltage_response_time == 0) 21316596afd4SAlex Deucher rdev->pm.dpm.voltage_response_time = R600_VOLTAGERESPONSETIME_DFLT; 21326596afd4SAlex Deucher if (rdev->pm.dpm.backbias_response_time == 0) 21336596afd4SAlex Deucher rdev->pm.dpm.backbias_response_time = R600_BACKBIASRESPONSETIME_DFLT; 21346596afd4SAlex Deucher 21356596afd4SAlex Deucher ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, 21366596afd4SAlex Deucher 0, false, ÷rs); 21376596afd4SAlex Deucher if (ret) 21386596afd4SAlex Deucher pi->ref_div = dividers.ref_div + 1; 21396596afd4SAlex Deucher else 21406596afd4SAlex Deucher pi->ref_div = R600_REFERENCEDIVIDER_DFLT; 21416596afd4SAlex Deucher 21426596afd4SAlex Deucher pi->mclk_strobe_mode_threshold = 40000; 21436596afd4SAlex Deucher pi->mclk_edc_enable_threshold = 40000; 21446596afd4SAlex Deucher eg_pi->mclk_edc_wr_enable_threshold = 40000; 21456596afd4SAlex Deucher 2146*f85392bcSAlex Deucher pi->rlp = RV770_RLP_DFLT; 2147*f85392bcSAlex Deucher pi->rmp = RV770_RMP_DFLT; 2148*f85392bcSAlex Deucher pi->lhp = RV770_LHP_DFLT; 2149*f85392bcSAlex Deucher pi->lmp = RV770_LMP_DFLT; 2150*f85392bcSAlex Deucher 2151*f85392bcSAlex Deucher eg_pi->ats[0].rlp = RV770_RLP_DFLT; 2152*f85392bcSAlex Deucher eg_pi->ats[0].rmp = RV770_RMP_DFLT; 2153*f85392bcSAlex Deucher eg_pi->ats[0].lhp = RV770_LHP_DFLT; 2154*f85392bcSAlex Deucher eg_pi->ats[0].lmp = RV770_LMP_DFLT; 2155*f85392bcSAlex Deucher 2156*f85392bcSAlex Deucher eg_pi->ats[1].rlp = BTC_RLP_UVD_DFLT; 2157*f85392bcSAlex Deucher eg_pi->ats[1].rmp = BTC_RMP_UVD_DFLT; 2158*f85392bcSAlex Deucher eg_pi->ats[1].lhp = BTC_LHP_UVD_DFLT; 2159*f85392bcSAlex Deucher eg_pi->ats[1].lmp = BTC_LMP_UVD_DFLT; 2160*f85392bcSAlex Deucher 2161*f85392bcSAlex Deucher eg_pi->smu_uvd_hs = true; 2162*f85392bcSAlex Deucher 21636596afd4SAlex Deucher pi->voltage_control = 21646596afd4SAlex Deucher radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC); 21656596afd4SAlex Deucher 21666596afd4SAlex Deucher pi->mvdd_control = 21676596afd4SAlex Deucher radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_MVDDC); 21686596afd4SAlex Deucher 21696596afd4SAlex Deucher eg_pi->vddci_control = 21706596afd4SAlex Deucher radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_VDDCI); 21716596afd4SAlex Deucher 21726596afd4SAlex Deucher if (atom_parse_data_header(rdev->mode_info.atom_context, index, &size, 21736596afd4SAlex Deucher &frev, &crev, &data_offset)) { 21746596afd4SAlex Deucher pi->sclk_ss = true; 21756596afd4SAlex Deucher pi->mclk_ss = true; 21766596afd4SAlex Deucher pi->dynamic_ss = true; 21776596afd4SAlex Deucher } else { 21786596afd4SAlex Deucher pi->sclk_ss = false; 21796596afd4SAlex Deucher pi->mclk_ss = false; 21806596afd4SAlex Deucher pi->dynamic_ss = true; 21816596afd4SAlex Deucher } 21826596afd4SAlex Deucher 21836596afd4SAlex Deucher pi->asi = RV770_ASI_DFLT; 21846596afd4SAlex Deucher pi->pasi = CYPRESS_HASI_DFLT; 21856596afd4SAlex Deucher pi->vrc = CYPRESS_VRC_DFLT; 21866596afd4SAlex Deucher 21876596afd4SAlex Deucher pi->power_gating = false; 21886596afd4SAlex Deucher 21896596afd4SAlex Deucher pi->gfx_clock_gating = true; 21906596afd4SAlex Deucher 21916596afd4SAlex Deucher pi->mg_clock_gating = true; 21926596afd4SAlex Deucher pi->mgcgtssm = true; 21936596afd4SAlex Deucher eg_pi->ls_clock_gating = false; 21946596afd4SAlex Deucher eg_pi->sclk_deep_sleep = false; 21956596afd4SAlex Deucher 21966596afd4SAlex Deucher pi->dynamic_pcie_gen2 = true; 21976596afd4SAlex Deucher 21986596afd4SAlex Deucher if (pi->gfx_clock_gating && 21996596afd4SAlex Deucher (rdev->pm.int_thermal_type != THERMAL_TYPE_NONE)) 22006596afd4SAlex Deucher pi->thermal_protection = true; 22016596afd4SAlex Deucher else 22026596afd4SAlex Deucher pi->thermal_protection = false; 22036596afd4SAlex Deucher 22046596afd4SAlex Deucher pi->display_gap = true; 22056596afd4SAlex Deucher 22066596afd4SAlex Deucher if (rdev->flags & RADEON_IS_MOBILITY) 22076596afd4SAlex Deucher pi->dcodt = true; 22086596afd4SAlex Deucher else 22096596afd4SAlex Deucher pi->dcodt = false; 22106596afd4SAlex Deucher 22116596afd4SAlex Deucher pi->ulps = true; 22126596afd4SAlex Deucher 22136596afd4SAlex Deucher eg_pi->dynamic_ac_timing = true; 22146596afd4SAlex Deucher eg_pi->abm = true; 22156596afd4SAlex Deucher eg_pi->mcls = true; 22166596afd4SAlex Deucher eg_pi->light_sleep = true; 22176596afd4SAlex Deucher eg_pi->memory_transition = true; 22186596afd4SAlex Deucher #if defined(CONFIG_ACPI) 22196596afd4SAlex Deucher eg_pi->pcie_performance_request = 22206596afd4SAlex Deucher radeon_acpi_is_pcie_performance_request_supported(rdev); 22216596afd4SAlex Deucher #else 22226596afd4SAlex Deucher eg_pi->pcie_performance_request = false; 22236596afd4SAlex Deucher #endif 22246596afd4SAlex Deucher 22256596afd4SAlex Deucher if (rdev->family == CHIP_BARTS) 22266596afd4SAlex Deucher eg_pi->dll_default_on = true; 22276596afd4SAlex Deucher else 22286596afd4SAlex Deucher eg_pi->dll_default_on = false; 22296596afd4SAlex Deucher 22306596afd4SAlex Deucher eg_pi->sclk_deep_sleep = false; 22316596afd4SAlex Deucher if (ASIC_IS_LOMBOK(rdev)) 22326596afd4SAlex Deucher pi->mclk_stutter_mode_threshold = 30000; 22336596afd4SAlex Deucher else 22346596afd4SAlex Deucher pi->mclk_stutter_mode_threshold = 0; 22356596afd4SAlex Deucher 22366596afd4SAlex Deucher pi->sram_end = SMC_RAM_END; 22376596afd4SAlex Deucher 22386596afd4SAlex Deucher return 0; 22396596afd4SAlex Deucher } 22406596afd4SAlex Deucher 22416596afd4SAlex Deucher void btc_dpm_fini(struct radeon_device *rdev) 22426596afd4SAlex Deucher { 22436596afd4SAlex Deucher int i; 22446596afd4SAlex Deucher 22456596afd4SAlex Deucher for (i = 0; i < rdev->pm.dpm.num_ps; i++) { 22466596afd4SAlex Deucher kfree(rdev->pm.dpm.ps[i].ps_priv); 22476596afd4SAlex Deucher } 22486596afd4SAlex Deucher kfree(rdev->pm.dpm.ps); 22496596afd4SAlex Deucher kfree(rdev->pm.dpm.priv); 22506596afd4SAlex Deucher } 2251