Subversion Repositories Kolibri OS

Rev

Rev 5078 | Rev 5271 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright 2012 Advanced Micro Devices, Inc.
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice shall be included in
  12.  * all copies or substantial portions of the Software.
  13.  *
  14.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17.  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20.  * OTHER DEALINGS IN THE SOFTWARE.
  21.  *
  22.  * Authors: Alex Deucher
  23.  */
  24. #include <linux/firmware.h>
  25. #include <linux/slab.h>
  26. #include <linux/module.h>
  27. #include "drmP.h"
  28. #include "radeon.h"
  29. #include "radeon_asic.h"
  30. #include "cikd.h"
  31. #include "atom.h"
  32. #include "cik_blit_shaders.h"
  33. #include "radeon_ucode.h"
  34. #include "clearstate_ci.h"
  35.  
  36. MODULE_FIRMWARE("radeon/BONAIRE_pfp.bin");
  37. MODULE_FIRMWARE("radeon/BONAIRE_me.bin");
  38. MODULE_FIRMWARE("radeon/BONAIRE_ce.bin");
  39. MODULE_FIRMWARE("radeon/BONAIRE_mec.bin");
  40. MODULE_FIRMWARE("radeon/BONAIRE_mc.bin");
  41. MODULE_FIRMWARE("radeon/BONAIRE_mc2.bin");
  42. MODULE_FIRMWARE("radeon/BONAIRE_rlc.bin");
  43. MODULE_FIRMWARE("radeon/BONAIRE_sdma.bin");
  44. MODULE_FIRMWARE("radeon/BONAIRE_smc.bin");
  45.  
  46. MODULE_FIRMWARE("radeon/bonaire_pfp.bin");
  47. MODULE_FIRMWARE("radeon/bonaire_me.bin");
  48. MODULE_FIRMWARE("radeon/bonaire_ce.bin");
  49. MODULE_FIRMWARE("radeon/bonaire_mec.bin");
  50. MODULE_FIRMWARE("radeon/bonaire_mc.bin");
  51. MODULE_FIRMWARE("radeon/bonaire_rlc.bin");
  52. MODULE_FIRMWARE("radeon/bonaire_sdma.bin");
  53. MODULE_FIRMWARE("radeon/bonaire_smc.bin");
  54.  
  55. MODULE_FIRMWARE("radeon/HAWAII_pfp.bin");
  56. MODULE_FIRMWARE("radeon/HAWAII_me.bin");
  57. MODULE_FIRMWARE("radeon/HAWAII_ce.bin");
  58. MODULE_FIRMWARE("radeon/HAWAII_mec.bin");
  59. MODULE_FIRMWARE("radeon/HAWAII_mc.bin");
  60. MODULE_FIRMWARE("radeon/HAWAII_mc2.bin");
  61. MODULE_FIRMWARE("radeon/HAWAII_rlc.bin");
  62. MODULE_FIRMWARE("radeon/HAWAII_sdma.bin");
  63. MODULE_FIRMWARE("radeon/HAWAII_smc.bin");
  64.  
  65. MODULE_FIRMWARE("radeon/hawaii_pfp.bin");
  66. MODULE_FIRMWARE("radeon/hawaii_me.bin");
  67. MODULE_FIRMWARE("radeon/hawaii_ce.bin");
  68. MODULE_FIRMWARE("radeon/hawaii_mec.bin");
  69. MODULE_FIRMWARE("radeon/hawaii_mc.bin");
  70. MODULE_FIRMWARE("radeon/hawaii_rlc.bin");
  71. MODULE_FIRMWARE("radeon/hawaii_sdma.bin");
  72. MODULE_FIRMWARE("radeon/hawaii_smc.bin");
  73.  
  74. MODULE_FIRMWARE("radeon/KAVERI_pfp.bin");
  75. MODULE_FIRMWARE("radeon/KAVERI_me.bin");
  76. MODULE_FIRMWARE("radeon/KAVERI_ce.bin");
  77. MODULE_FIRMWARE("radeon/KAVERI_mec.bin");
  78. MODULE_FIRMWARE("radeon/KAVERI_rlc.bin");
  79. MODULE_FIRMWARE("radeon/KAVERI_sdma.bin");
  80.  
  81. MODULE_FIRMWARE("radeon/kaveri_pfp.bin");
  82. MODULE_FIRMWARE("radeon/kaveri_me.bin");
  83. MODULE_FIRMWARE("radeon/kaveri_ce.bin");
  84. MODULE_FIRMWARE("radeon/kaveri_mec.bin");
  85. MODULE_FIRMWARE("radeon/kaveri_mec2.bin");
  86. MODULE_FIRMWARE("radeon/kaveri_rlc.bin");
  87. MODULE_FIRMWARE("radeon/kaveri_sdma.bin");
  88.  
  89. MODULE_FIRMWARE("radeon/KABINI_pfp.bin");
  90. MODULE_FIRMWARE("radeon/KABINI_me.bin");
  91. MODULE_FIRMWARE("radeon/KABINI_ce.bin");
  92. MODULE_FIRMWARE("radeon/KABINI_mec.bin");
  93. MODULE_FIRMWARE("radeon/KABINI_rlc.bin");
  94. MODULE_FIRMWARE("radeon/KABINI_sdma.bin");
  95.  
  96. MODULE_FIRMWARE("radeon/kabini_pfp.bin");
  97. MODULE_FIRMWARE("radeon/kabini_me.bin");
  98. MODULE_FIRMWARE("radeon/kabini_ce.bin");
  99. MODULE_FIRMWARE("radeon/kabini_mec.bin");
  100. MODULE_FIRMWARE("radeon/kabini_rlc.bin");
  101. MODULE_FIRMWARE("radeon/kabini_sdma.bin");
  102.  
  103. MODULE_FIRMWARE("radeon/MULLINS_pfp.bin");
  104. MODULE_FIRMWARE("radeon/MULLINS_me.bin");
  105. MODULE_FIRMWARE("radeon/MULLINS_ce.bin");
  106. MODULE_FIRMWARE("radeon/MULLINS_mec.bin");
  107. MODULE_FIRMWARE("radeon/MULLINS_rlc.bin");
  108. MODULE_FIRMWARE("radeon/MULLINS_sdma.bin");
  109.  
  110. MODULE_FIRMWARE("radeon/mullins_pfp.bin");
  111. MODULE_FIRMWARE("radeon/mullins_me.bin");
  112. MODULE_FIRMWARE("radeon/mullins_ce.bin");
  113. MODULE_FIRMWARE("radeon/mullins_mec.bin");
  114. MODULE_FIRMWARE("radeon/mullins_rlc.bin");
  115. MODULE_FIRMWARE("radeon/mullins_sdma.bin");
  116.  
  117. extern int r600_ih_ring_alloc(struct radeon_device *rdev);
  118. extern void r600_ih_ring_fini(struct radeon_device *rdev);
  119. extern void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
  120. extern void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
  121. extern bool evergreen_is_display_hung(struct radeon_device *rdev);
  122. extern void sumo_rlc_fini(struct radeon_device *rdev);
  123. extern int sumo_rlc_init(struct radeon_device *rdev);
  124. extern void si_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
  125. extern void si_rlc_reset(struct radeon_device *rdev);
  126. extern void si_init_uvd_internal_cg(struct radeon_device *rdev);
  127. static u32 cik_get_cu_active_bitmap(struct radeon_device *rdev, u32 se, u32 sh);
  128. extern int cik_sdma_resume(struct radeon_device *rdev);
  129. extern void cik_sdma_enable(struct radeon_device *rdev, bool enable);
  130. extern void cik_sdma_fini(struct radeon_device *rdev);
  131. extern void vce_v2_0_enable_mgcg(struct radeon_device *rdev, bool enable);
  132. static void cik_rlc_stop(struct radeon_device *rdev);
  133. static void cik_pcie_gen3_enable(struct radeon_device *rdev);
  134. static void cik_program_aspm(struct radeon_device *rdev);
  135. static void cik_init_pg(struct radeon_device *rdev);
  136. static void cik_init_cg(struct radeon_device *rdev);
  137. static void cik_fini_pg(struct radeon_device *rdev);
  138. static void cik_fini_cg(struct radeon_device *rdev);
  139. static void cik_enable_gui_idle_interrupt(struct radeon_device *rdev,
  140.                                           bool enable);
  141.  
  142. /* get temperature in millidegrees */
  143. int ci_get_temp(struct radeon_device *rdev)
  144. {
  145.         u32 temp;
  146.         int actual_temp = 0;
  147.  
  148.         temp = (RREG32_SMC(CG_MULT_THERMAL_STATUS) & CTF_TEMP_MASK) >>
  149.                 CTF_TEMP_SHIFT;
  150.  
  151.         if (temp & 0x200)
  152.                 actual_temp = 255;
  153.         else
  154.                 actual_temp = temp & 0x1ff;
  155.  
  156.         actual_temp = actual_temp * 1000;
  157.  
  158.         return actual_temp;
  159. }
  160.  
  161. /* get temperature in millidegrees */
  162. int kv_get_temp(struct radeon_device *rdev)
  163. {
  164.         u32 temp;
  165.         int actual_temp = 0;
  166.  
  167.         temp = RREG32_SMC(0xC0300E0C);
  168.  
  169.         if (temp)
  170.                 actual_temp = (temp / 8) - 49;
  171.         else
  172.                 actual_temp = 0;
  173.  
  174.         actual_temp = actual_temp * 1000;
  175.  
  176.         return actual_temp;
  177. }
  178.  
  179. /*
  180.  * Indirect registers accessor
  181.  */
  182. u32 cik_pciep_rreg(struct radeon_device *rdev, u32 reg)
  183. {
  184.         unsigned long flags;
  185.         u32 r;
  186.  
  187.         spin_lock_irqsave(&rdev->pciep_idx_lock, flags);
  188.         WREG32(PCIE_INDEX, reg);
  189.         (void)RREG32(PCIE_INDEX);
  190.         r = RREG32(PCIE_DATA);
  191.         spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags);
  192.         return r;
  193. }
  194.  
  195. void cik_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
  196. {
  197.         unsigned long flags;
  198.  
  199.         spin_lock_irqsave(&rdev->pciep_idx_lock, flags);
  200.         WREG32(PCIE_INDEX, reg);
  201.         (void)RREG32(PCIE_INDEX);
  202.         WREG32(PCIE_DATA, v);
  203.         (void)RREG32(PCIE_DATA);
  204.         spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags);
  205. }
  206.  
  207. static const u32 spectre_rlc_save_restore_register_list[] =
  208. {
  209.         (0x0e00 << 16) | (0xc12c >> 2),
  210.         0x00000000,
  211.         (0x0e00 << 16) | (0xc140 >> 2),
  212.         0x00000000,
  213.         (0x0e00 << 16) | (0xc150 >> 2),
  214.         0x00000000,
  215.         (0x0e00 << 16) | (0xc15c >> 2),
  216.         0x00000000,
  217.         (0x0e00 << 16) | (0xc168 >> 2),
  218.         0x00000000,
  219.         (0x0e00 << 16) | (0xc170 >> 2),
  220.         0x00000000,
  221.         (0x0e00 << 16) | (0xc178 >> 2),
  222.         0x00000000,
  223.         (0x0e00 << 16) | (0xc204 >> 2),
  224.         0x00000000,
  225.         (0x0e00 << 16) | (0xc2b4 >> 2),
  226.         0x00000000,
  227.         (0x0e00 << 16) | (0xc2b8 >> 2),
  228.         0x00000000,
  229.         (0x0e00 << 16) | (0xc2bc >> 2),
  230.         0x00000000,
  231.         (0x0e00 << 16) | (0xc2c0 >> 2),
  232.         0x00000000,
  233.         (0x0e00 << 16) | (0x8228 >> 2),
  234.         0x00000000,
  235.         (0x0e00 << 16) | (0x829c >> 2),
  236.         0x00000000,
  237.         (0x0e00 << 16) | (0x869c >> 2),
  238.         0x00000000,
  239.         (0x0600 << 16) | (0x98f4 >> 2),
  240.         0x00000000,
  241.         (0x0e00 << 16) | (0x98f8 >> 2),
  242.         0x00000000,
  243.         (0x0e00 << 16) | (0x9900 >> 2),
  244.         0x00000000,
  245.         (0x0e00 << 16) | (0xc260 >> 2),
  246.         0x00000000,
  247.         (0x0e00 << 16) | (0x90e8 >> 2),
  248.         0x00000000,
  249.         (0x0e00 << 16) | (0x3c000 >> 2),
  250.         0x00000000,
  251.         (0x0e00 << 16) | (0x3c00c >> 2),
  252.         0x00000000,
  253.         (0x0e00 << 16) | (0x8c1c >> 2),
  254.         0x00000000,
  255.         (0x0e00 << 16) | (0x9700 >> 2),
  256.         0x00000000,
  257.         (0x0e00 << 16) | (0xcd20 >> 2),
  258.         0x00000000,
  259.         (0x4e00 << 16) | (0xcd20 >> 2),
  260.         0x00000000,
  261.         (0x5e00 << 16) | (0xcd20 >> 2),
  262.         0x00000000,
  263.         (0x6e00 << 16) | (0xcd20 >> 2),
  264.         0x00000000,
  265.         (0x7e00 << 16) | (0xcd20 >> 2),
  266.         0x00000000,
  267.         (0x8e00 << 16) | (0xcd20 >> 2),
  268.         0x00000000,
  269.         (0x9e00 << 16) | (0xcd20 >> 2),
  270.         0x00000000,
  271.         (0xae00 << 16) | (0xcd20 >> 2),
  272.         0x00000000,
  273.         (0xbe00 << 16) | (0xcd20 >> 2),
  274.         0x00000000,
  275.         (0x0e00 << 16) | (0x89bc >> 2),
  276.         0x00000000,
  277.         (0x0e00 << 16) | (0x8900 >> 2),
  278.         0x00000000,
  279.         0x3,
  280.         (0x0e00 << 16) | (0xc130 >> 2),
  281.         0x00000000,
  282.         (0x0e00 << 16) | (0xc134 >> 2),
  283.         0x00000000,
  284.         (0x0e00 << 16) | (0xc1fc >> 2),
  285.         0x00000000,
  286.         (0x0e00 << 16) | (0xc208 >> 2),
  287.         0x00000000,
  288.         (0x0e00 << 16) | (0xc264 >> 2),
  289.         0x00000000,
  290.         (0x0e00 << 16) | (0xc268 >> 2),
  291.         0x00000000,
  292.         (0x0e00 << 16) | (0xc26c >> 2),
  293.         0x00000000,
  294.         (0x0e00 << 16) | (0xc270 >> 2),
  295.         0x00000000,
  296.         (0x0e00 << 16) | (0xc274 >> 2),
  297.         0x00000000,
  298.         (0x0e00 << 16) | (0xc278 >> 2),
  299.         0x00000000,
  300.         (0x0e00 << 16) | (0xc27c >> 2),
  301.         0x00000000,
  302.         (0x0e00 << 16) | (0xc280 >> 2),
  303.         0x00000000,
  304.         (0x0e00 << 16) | (0xc284 >> 2),
  305.         0x00000000,
  306.         (0x0e00 << 16) | (0xc288 >> 2),
  307.         0x00000000,
  308.         (0x0e00 << 16) | (0xc28c >> 2),
  309.         0x00000000,
  310.         (0x0e00 << 16) | (0xc290 >> 2),
  311.         0x00000000,
  312.         (0x0e00 << 16) | (0xc294 >> 2),
  313.         0x00000000,
  314.         (0x0e00 << 16) | (0xc298 >> 2),
  315.         0x00000000,
  316.         (0x0e00 << 16) | (0xc29c >> 2),
  317.         0x00000000,
  318.         (0x0e00 << 16) | (0xc2a0 >> 2),
  319.         0x00000000,
  320.         (0x0e00 << 16) | (0xc2a4 >> 2),
  321.         0x00000000,
  322.         (0x0e00 << 16) | (0xc2a8 >> 2),
  323.         0x00000000,
  324.         (0x0e00 << 16) | (0xc2ac  >> 2),
  325.         0x00000000,
  326.         (0x0e00 << 16) | (0xc2b0 >> 2),
  327.         0x00000000,
  328.         (0x0e00 << 16) | (0x301d0 >> 2),
  329.         0x00000000,
  330.         (0x0e00 << 16) | (0x30238 >> 2),
  331.         0x00000000,
  332.         (0x0e00 << 16) | (0x30250 >> 2),
  333.         0x00000000,
  334.         (0x0e00 << 16) | (0x30254 >> 2),
  335.         0x00000000,
  336.         (0x0e00 << 16) | (0x30258 >> 2),
  337.         0x00000000,
  338.         (0x0e00 << 16) | (0x3025c >> 2),
  339.         0x00000000,
  340.         (0x4e00 << 16) | (0xc900 >> 2),
  341.         0x00000000,
  342.         (0x5e00 << 16) | (0xc900 >> 2),
  343.         0x00000000,
  344.         (0x6e00 << 16) | (0xc900 >> 2),
  345.         0x00000000,
  346.         (0x7e00 << 16) | (0xc900 >> 2),
  347.         0x00000000,
  348.         (0x8e00 << 16) | (0xc900 >> 2),
  349.         0x00000000,
  350.         (0x9e00 << 16) | (0xc900 >> 2),
  351.         0x00000000,
  352.         (0xae00 << 16) | (0xc900 >> 2),
  353.         0x00000000,
  354.         (0xbe00 << 16) | (0xc900 >> 2),
  355.         0x00000000,
  356.         (0x4e00 << 16) | (0xc904 >> 2),
  357.         0x00000000,
  358.         (0x5e00 << 16) | (0xc904 >> 2),
  359.         0x00000000,
  360.         (0x6e00 << 16) | (0xc904 >> 2),
  361.         0x00000000,
  362.         (0x7e00 << 16) | (0xc904 >> 2),
  363.         0x00000000,
  364.         (0x8e00 << 16) | (0xc904 >> 2),
  365.         0x00000000,
  366.         (0x9e00 << 16) | (0xc904 >> 2),
  367.         0x00000000,
  368.         (0xae00 << 16) | (0xc904 >> 2),
  369.         0x00000000,
  370.         (0xbe00 << 16) | (0xc904 >> 2),
  371.         0x00000000,
  372.         (0x4e00 << 16) | (0xc908 >> 2),
  373.         0x00000000,
  374.         (0x5e00 << 16) | (0xc908 >> 2),
  375.         0x00000000,
  376.         (0x6e00 << 16) | (0xc908 >> 2),
  377.         0x00000000,
  378.         (0x7e00 << 16) | (0xc908 >> 2),
  379.         0x00000000,
  380.         (0x8e00 << 16) | (0xc908 >> 2),
  381.         0x00000000,
  382.         (0x9e00 << 16) | (0xc908 >> 2),
  383.         0x00000000,
  384.         (0xae00 << 16) | (0xc908 >> 2),
  385.         0x00000000,
  386.         (0xbe00 << 16) | (0xc908 >> 2),
  387.         0x00000000,
  388.         (0x4e00 << 16) | (0xc90c >> 2),
  389.         0x00000000,
  390.         (0x5e00 << 16) | (0xc90c >> 2),
  391.         0x00000000,
  392.         (0x6e00 << 16) | (0xc90c >> 2),
  393.         0x00000000,
  394.         (0x7e00 << 16) | (0xc90c >> 2),
  395.         0x00000000,
  396.         (0x8e00 << 16) | (0xc90c >> 2),
  397.         0x00000000,
  398.         (0x9e00 << 16) | (0xc90c >> 2),
  399.         0x00000000,
  400.         (0xae00 << 16) | (0xc90c >> 2),
  401.         0x00000000,
  402.         (0xbe00 << 16) | (0xc90c >> 2),
  403.         0x00000000,
  404.         (0x4e00 << 16) | (0xc910 >> 2),
  405.         0x00000000,
  406.         (0x5e00 << 16) | (0xc910 >> 2),
  407.         0x00000000,
  408.         (0x6e00 << 16) | (0xc910 >> 2),
  409.         0x00000000,
  410.         (0x7e00 << 16) | (0xc910 >> 2),
  411.         0x00000000,
  412.         (0x8e00 << 16) | (0xc910 >> 2),
  413.         0x00000000,
  414.         (0x9e00 << 16) | (0xc910 >> 2),
  415.         0x00000000,
  416.         (0xae00 << 16) | (0xc910 >> 2),
  417.         0x00000000,
  418.         (0xbe00 << 16) | (0xc910 >> 2),
  419.         0x00000000,
  420.         (0x0e00 << 16) | (0xc99c >> 2),
  421.         0x00000000,
  422.         (0x0e00 << 16) | (0x9834 >> 2),
  423.         0x00000000,
  424.         (0x0000 << 16) | (0x30f00 >> 2),
  425.         0x00000000,
  426.         (0x0001 << 16) | (0x30f00 >> 2),
  427.         0x00000000,
  428.         (0x0000 << 16) | (0x30f04 >> 2),
  429.         0x00000000,
  430.         (0x0001 << 16) | (0x30f04 >> 2),
  431.         0x00000000,
  432.         (0x0000 << 16) | (0x30f08 >> 2),
  433.         0x00000000,
  434.         (0x0001 << 16) | (0x30f08 >> 2),
  435.         0x00000000,
  436.         (0x0000 << 16) | (0x30f0c >> 2),
  437.         0x00000000,
  438.         (0x0001 << 16) | (0x30f0c >> 2),
  439.         0x00000000,
  440.         (0x0600 << 16) | (0x9b7c >> 2),
  441.         0x00000000,
  442.         (0x0e00 << 16) | (0x8a14 >> 2),
  443.         0x00000000,
  444.         (0x0e00 << 16) | (0x8a18 >> 2),
  445.         0x00000000,
  446.         (0x0600 << 16) | (0x30a00 >> 2),
  447.         0x00000000,
  448.         (0x0e00 << 16) | (0x8bf0 >> 2),
  449.         0x00000000,
  450.         (0x0e00 << 16) | (0x8bcc >> 2),
  451.         0x00000000,
  452.         (0x0e00 << 16) | (0x8b24 >> 2),
  453.         0x00000000,
  454.         (0x0e00 << 16) | (0x30a04 >> 2),
  455.         0x00000000,
  456.         (0x0600 << 16) | (0x30a10 >> 2),
  457.         0x00000000,
  458.         (0x0600 << 16) | (0x30a14 >> 2),
  459.         0x00000000,
  460.         (0x0600 << 16) | (0x30a18 >> 2),
  461.         0x00000000,
  462.         (0x0600 << 16) | (0x30a2c >> 2),
  463.         0x00000000,
  464.         (0x0e00 << 16) | (0xc700 >> 2),
  465.         0x00000000,
  466.         (0x0e00 << 16) | (0xc704 >> 2),
  467.         0x00000000,
  468.         (0x0e00 << 16) | (0xc708 >> 2),
  469.         0x00000000,
  470.         (0x0e00 << 16) | (0xc768 >> 2),
  471.         0x00000000,
  472.         (0x0400 << 16) | (0xc770 >> 2),
  473.         0x00000000,
  474.         (0x0400 << 16) | (0xc774 >> 2),
  475.         0x00000000,
  476.         (0x0400 << 16) | (0xc778 >> 2),
  477.         0x00000000,
  478.         (0x0400 << 16) | (0xc77c >> 2),
  479.         0x00000000,
  480.         (0x0400 << 16) | (0xc780 >> 2),
  481.         0x00000000,
  482.         (0x0400 << 16) | (0xc784 >> 2),
  483.         0x00000000,
  484.         (0x0400 << 16) | (0xc788 >> 2),
  485.         0x00000000,
  486.         (0x0400 << 16) | (0xc78c >> 2),
  487.         0x00000000,
  488.         (0x0400 << 16) | (0xc798 >> 2),
  489.         0x00000000,
  490.         (0x0400 << 16) | (0xc79c >> 2),
  491.         0x00000000,
  492.         (0x0400 << 16) | (0xc7a0 >> 2),
  493.         0x00000000,
  494.         (0x0400 << 16) | (0xc7a4 >> 2),
  495.         0x00000000,
  496.         (0x0400 << 16) | (0xc7a8 >> 2),
  497.         0x00000000,
  498.         (0x0400 << 16) | (0xc7ac >> 2),
  499.         0x00000000,
  500.         (0x0400 << 16) | (0xc7b0 >> 2),
  501.         0x00000000,
  502.         (0x0400 << 16) | (0xc7b4 >> 2),
  503.         0x00000000,
  504.         (0x0e00 << 16) | (0x9100 >> 2),
  505.         0x00000000,
  506.         (0x0e00 << 16) | (0x3c010 >> 2),
  507.         0x00000000,
  508.         (0x0e00 << 16) | (0x92a8 >> 2),
  509.         0x00000000,
  510.         (0x0e00 << 16) | (0x92ac >> 2),
  511.         0x00000000,
  512.         (0x0e00 << 16) | (0x92b4 >> 2),
  513.         0x00000000,
  514.         (0x0e00 << 16) | (0x92b8 >> 2),
  515.         0x00000000,
  516.         (0x0e00 << 16) | (0x92bc >> 2),
  517.         0x00000000,
  518.         (0x0e00 << 16) | (0x92c0 >> 2),
  519.         0x00000000,
  520.         (0x0e00 << 16) | (0x92c4 >> 2),
  521.         0x00000000,
  522.         (0x0e00 << 16) | (0x92c8 >> 2),
  523.         0x00000000,
  524.         (0x0e00 << 16) | (0x92cc >> 2),
  525.         0x00000000,
  526.         (0x0e00 << 16) | (0x92d0 >> 2),
  527.         0x00000000,
  528.         (0x0e00 << 16) | (0x8c00 >> 2),
  529.         0x00000000,
  530.         (0x0e00 << 16) | (0x8c04 >> 2),
  531.         0x00000000,
  532.         (0x0e00 << 16) | (0x8c20 >> 2),
  533.         0x00000000,
  534.         (0x0e00 << 16) | (0x8c38 >> 2),
  535.         0x00000000,
  536.         (0x0e00 << 16) | (0x8c3c >> 2),
  537.         0x00000000,
  538.         (0x0e00 << 16) | (0xae00 >> 2),
  539.         0x00000000,
  540.         (0x0e00 << 16) | (0x9604 >> 2),
  541.         0x00000000,
  542.         (0x0e00 << 16) | (0xac08 >> 2),
  543.         0x00000000,
  544.         (0x0e00 << 16) | (0xac0c >> 2),
  545.         0x00000000,
  546.         (0x0e00 << 16) | (0xac10 >> 2),
  547.         0x00000000,
  548.         (0x0e00 << 16) | (0xac14 >> 2),
  549.         0x00000000,
  550.         (0x0e00 << 16) | (0xac58 >> 2),
  551.         0x00000000,
  552.         (0x0e00 << 16) | (0xac68 >> 2),
  553.         0x00000000,
  554.         (0x0e00 << 16) | (0xac6c >> 2),
  555.         0x00000000,
  556.         (0x0e00 << 16) | (0xac70 >> 2),
  557.         0x00000000,
  558.         (0x0e00 << 16) | (0xac74 >> 2),
  559.         0x00000000,
  560.         (0x0e00 << 16) | (0xac78 >> 2),
  561.         0x00000000,
  562.         (0x0e00 << 16) | (0xac7c >> 2),
  563.         0x00000000,
  564.         (0x0e00 << 16) | (0xac80 >> 2),
  565.         0x00000000,
  566.         (0x0e00 << 16) | (0xac84 >> 2),
  567.         0x00000000,
  568.         (0x0e00 << 16) | (0xac88 >> 2),
  569.         0x00000000,
  570.         (0x0e00 << 16) | (0xac8c >> 2),
  571.         0x00000000,
  572.         (0x0e00 << 16) | (0x970c >> 2),
  573.         0x00000000,
  574.         (0x0e00 << 16) | (0x9714 >> 2),
  575.         0x00000000,
  576.         (0x0e00 << 16) | (0x9718 >> 2),
  577.         0x00000000,
  578.         (0x0e00 << 16) | (0x971c >> 2),
  579.         0x00000000,
  580.         (0x0e00 << 16) | (0x31068 >> 2),
  581.         0x00000000,
  582.         (0x4e00 << 16) | (0x31068 >> 2),
  583.         0x00000000,
  584.         (0x5e00 << 16) | (0x31068 >> 2),
  585.         0x00000000,
  586.         (0x6e00 << 16) | (0x31068 >> 2),
  587.         0x00000000,
  588.         (0x7e00 << 16) | (0x31068 >> 2),
  589.         0x00000000,
  590.         (0x8e00 << 16) | (0x31068 >> 2),
  591.         0x00000000,
  592.         (0x9e00 << 16) | (0x31068 >> 2),
  593.         0x00000000,
  594.         (0xae00 << 16) | (0x31068 >> 2),
  595.         0x00000000,
  596.         (0xbe00 << 16) | (0x31068 >> 2),
  597.         0x00000000,
  598.         (0x0e00 << 16) | (0xcd10 >> 2),
  599.         0x00000000,
  600.         (0x0e00 << 16) | (0xcd14 >> 2),
  601.         0x00000000,
  602.         (0x0e00 << 16) | (0x88b0 >> 2),
  603.         0x00000000,
  604.         (0x0e00 << 16) | (0x88b4 >> 2),
  605.         0x00000000,
  606.         (0x0e00 << 16) | (0x88b8 >> 2),
  607.         0x00000000,
  608.         (0x0e00 << 16) | (0x88bc >> 2),
  609.         0x00000000,
  610.         (0x0400 << 16) | (0x89c0 >> 2),
  611.         0x00000000,
  612.         (0x0e00 << 16) | (0x88c4 >> 2),
  613.         0x00000000,
  614.         (0x0e00 << 16) | (0x88c8 >> 2),
  615.         0x00000000,
  616.         (0x0e00 << 16) | (0x88d0 >> 2),
  617.         0x00000000,
  618.         (0x0e00 << 16) | (0x88d4 >> 2),
  619.         0x00000000,
  620.         (0x0e00 << 16) | (0x88d8 >> 2),
  621.         0x00000000,
  622.         (0x0e00 << 16) | (0x8980 >> 2),
  623.         0x00000000,
  624.         (0x0e00 << 16) | (0x30938 >> 2),
  625.         0x00000000,
  626.         (0x0e00 << 16) | (0x3093c >> 2),
  627.         0x00000000,
  628.         (0x0e00 << 16) | (0x30940 >> 2),
  629.         0x00000000,
  630.         (0x0e00 << 16) | (0x89a0 >> 2),
  631.         0x00000000,
  632.         (0x0e00 << 16) | (0x30900 >> 2),
  633.         0x00000000,
  634.         (0x0e00 << 16) | (0x30904 >> 2),
  635.         0x00000000,
  636.         (0x0e00 << 16) | (0x89b4 >> 2),
  637.         0x00000000,
  638.         (0x0e00 << 16) | (0x3c210 >> 2),
  639.         0x00000000,
  640.         (0x0e00 << 16) | (0x3c214 >> 2),
  641.         0x00000000,
  642.         (0x0e00 << 16) | (0x3c218 >> 2),
  643.         0x00000000,
  644.         (0x0e00 << 16) | (0x8904 >> 2),
  645.         0x00000000,
  646.         0x5,
  647.         (0x0e00 << 16) | (0x8c28 >> 2),
  648.         (0x0e00 << 16) | (0x8c2c >> 2),
  649.         (0x0e00 << 16) | (0x8c30 >> 2),
  650.         (0x0e00 << 16) | (0x8c34 >> 2),
  651.         (0x0e00 << 16) | (0x9600 >> 2),
  652. };
  653.  
  654. static const u32 kalindi_rlc_save_restore_register_list[] =
  655. {
  656.         (0x0e00 << 16) | (0xc12c >> 2),
  657.         0x00000000,
  658.         (0x0e00 << 16) | (0xc140 >> 2),
  659.         0x00000000,
  660.         (0x0e00 << 16) | (0xc150 >> 2),
  661.         0x00000000,
  662.         (0x0e00 << 16) | (0xc15c >> 2),
  663.         0x00000000,
  664.         (0x0e00 << 16) | (0xc168 >> 2),
  665.         0x00000000,
  666.         (0x0e00 << 16) | (0xc170 >> 2),
  667.         0x00000000,
  668.         (0x0e00 << 16) | (0xc204 >> 2),
  669.         0x00000000,
  670.         (0x0e00 << 16) | (0xc2b4 >> 2),
  671.         0x00000000,
  672.         (0x0e00 << 16) | (0xc2b8 >> 2),
  673.         0x00000000,
  674.         (0x0e00 << 16) | (0xc2bc >> 2),
  675.         0x00000000,
  676.         (0x0e00 << 16) | (0xc2c0 >> 2),
  677.         0x00000000,
  678.         (0x0e00 << 16) | (0x8228 >> 2),
  679.         0x00000000,
  680.         (0x0e00 << 16) | (0x829c >> 2),
  681.         0x00000000,
  682.         (0x0e00 << 16) | (0x869c >> 2),
  683.         0x00000000,
  684.         (0x0600 << 16) | (0x98f4 >> 2),
  685.         0x00000000,
  686.         (0x0e00 << 16) | (0x98f8 >> 2),
  687.         0x00000000,
  688.         (0x0e00 << 16) | (0x9900 >> 2),
  689.         0x00000000,
  690.         (0x0e00 << 16) | (0xc260 >> 2),
  691.         0x00000000,
  692.         (0x0e00 << 16) | (0x90e8 >> 2),
  693.         0x00000000,
  694.         (0x0e00 << 16) | (0x3c000 >> 2),
  695.         0x00000000,
  696.         (0x0e00 << 16) | (0x3c00c >> 2),
  697.         0x00000000,
  698.         (0x0e00 << 16) | (0x8c1c >> 2),
  699.         0x00000000,
  700.         (0x0e00 << 16) | (0x9700 >> 2),
  701.         0x00000000,
  702.         (0x0e00 << 16) | (0xcd20 >> 2),
  703.         0x00000000,
  704.         (0x4e00 << 16) | (0xcd20 >> 2),
  705.         0x00000000,
  706.         (0x5e00 << 16) | (0xcd20 >> 2),
  707.         0x00000000,
  708.         (0x6e00 << 16) | (0xcd20 >> 2),
  709.         0x00000000,
  710.         (0x7e00 << 16) | (0xcd20 >> 2),
  711.         0x00000000,
  712.         (0x0e00 << 16) | (0x89bc >> 2),
  713.         0x00000000,
  714.         (0x0e00 << 16) | (0x8900 >> 2),
  715.         0x00000000,
  716.         0x3,
  717.         (0x0e00 << 16) | (0xc130 >> 2),
  718.         0x00000000,
  719.         (0x0e00 << 16) | (0xc134 >> 2),
  720.         0x00000000,
  721.         (0x0e00 << 16) | (0xc1fc >> 2),
  722.         0x00000000,
  723.         (0x0e00 << 16) | (0xc208 >> 2),
  724.         0x00000000,
  725.         (0x0e00 << 16) | (0xc264 >> 2),
  726.         0x00000000,
  727.         (0x0e00 << 16) | (0xc268 >> 2),
  728.         0x00000000,
  729.         (0x0e00 << 16) | (0xc26c >> 2),
  730.         0x00000000,
  731.         (0x0e00 << 16) | (0xc270 >> 2),
  732.         0x00000000,
  733.         (0x0e00 << 16) | (0xc274 >> 2),
  734.         0x00000000,
  735.         (0x0e00 << 16) | (0xc28c >> 2),
  736.         0x00000000,
  737.         (0x0e00 << 16) | (0xc290 >> 2),
  738.         0x00000000,
  739.         (0x0e00 << 16) | (0xc294 >> 2),
  740.         0x00000000,
  741.         (0x0e00 << 16) | (0xc298 >> 2),
  742.         0x00000000,
  743.         (0x0e00 << 16) | (0xc2a0 >> 2),
  744.         0x00000000,
  745.         (0x0e00 << 16) | (0xc2a4 >> 2),
  746.         0x00000000,
  747.         (0x0e00 << 16) | (0xc2a8 >> 2),
  748.         0x00000000,
  749.         (0x0e00 << 16) | (0xc2ac >> 2),
  750.         0x00000000,
  751.         (0x0e00 << 16) | (0x301d0 >> 2),
  752.         0x00000000,
  753.         (0x0e00 << 16) | (0x30238 >> 2),
  754.         0x00000000,
  755.         (0x0e00 << 16) | (0x30250 >> 2),
  756.         0x00000000,
  757.         (0x0e00 << 16) | (0x30254 >> 2),
  758.         0x00000000,
  759.         (0x0e00 << 16) | (0x30258 >> 2),
  760.         0x00000000,
  761.         (0x0e00 << 16) | (0x3025c >> 2),
  762.         0x00000000,
  763.         (0x4e00 << 16) | (0xc900 >> 2),
  764.         0x00000000,
  765.         (0x5e00 << 16) | (0xc900 >> 2),
  766.         0x00000000,
  767.         (0x6e00 << 16) | (0xc900 >> 2),
  768.         0x00000000,
  769.         (0x7e00 << 16) | (0xc900 >> 2),
  770.         0x00000000,
  771.         (0x4e00 << 16) | (0xc904 >> 2),
  772.         0x00000000,
  773.         (0x5e00 << 16) | (0xc904 >> 2),
  774.         0x00000000,
  775.         (0x6e00 << 16) | (0xc904 >> 2),
  776.         0x00000000,
  777.         (0x7e00 << 16) | (0xc904 >> 2),
  778.         0x00000000,
  779.         (0x4e00 << 16) | (0xc908 >> 2),
  780.         0x00000000,
  781.         (0x5e00 << 16) | (0xc908 >> 2),
  782.         0x00000000,
  783.         (0x6e00 << 16) | (0xc908 >> 2),
  784.         0x00000000,
  785.         (0x7e00 << 16) | (0xc908 >> 2),
  786.         0x00000000,
  787.         (0x4e00 << 16) | (0xc90c >> 2),
  788.         0x00000000,
  789.         (0x5e00 << 16) | (0xc90c >> 2),
  790.         0x00000000,
  791.         (0x6e00 << 16) | (0xc90c >> 2),
  792.         0x00000000,
  793.         (0x7e00 << 16) | (0xc90c >> 2),
  794.         0x00000000,
  795.         (0x4e00 << 16) | (0xc910 >> 2),
  796.         0x00000000,
  797.         (0x5e00 << 16) | (0xc910 >> 2),
  798.         0x00000000,
  799.         (0x6e00 << 16) | (0xc910 >> 2),
  800.         0x00000000,
  801.         (0x7e00 << 16) | (0xc910 >> 2),
  802.         0x00000000,
  803.         (0x0e00 << 16) | (0xc99c >> 2),
  804.         0x00000000,
  805.         (0x0e00 << 16) | (0x9834 >> 2),
  806.         0x00000000,
  807.         (0x0000 << 16) | (0x30f00 >> 2),
  808.         0x00000000,
  809.         (0x0000 << 16) | (0x30f04 >> 2),
  810.         0x00000000,
  811.         (0x0000 << 16) | (0x30f08 >> 2),
  812.         0x00000000,
  813.         (0x0000 << 16) | (0x30f0c >> 2),
  814.         0x00000000,
  815.         (0x0600 << 16) | (0x9b7c >> 2),
  816.         0x00000000,
  817.         (0x0e00 << 16) | (0x8a14 >> 2),
  818.         0x00000000,
  819.         (0x0e00 << 16) | (0x8a18 >> 2),
  820.         0x00000000,
  821.         (0x0600 << 16) | (0x30a00 >> 2),
  822.         0x00000000,
  823.         (0x0e00 << 16) | (0x8bf0 >> 2),
  824.         0x00000000,
  825.         (0x0e00 << 16) | (0x8bcc >> 2),
  826.         0x00000000,
  827.         (0x0e00 << 16) | (0x8b24 >> 2),
  828.         0x00000000,
  829.         (0x0e00 << 16) | (0x30a04 >> 2),
  830.         0x00000000,
  831.         (0x0600 << 16) | (0x30a10 >> 2),
  832.         0x00000000,
  833.         (0x0600 << 16) | (0x30a14 >> 2),
  834.         0x00000000,
  835.         (0x0600 << 16) | (0x30a18 >> 2),
  836.         0x00000000,
  837.         (0x0600 << 16) | (0x30a2c >> 2),
  838.         0x00000000,
  839.         (0x0e00 << 16) | (0xc700 >> 2),
  840.         0x00000000,
  841.         (0x0e00 << 16) | (0xc704 >> 2),
  842.         0x00000000,
  843.         (0x0e00 << 16) | (0xc708 >> 2),
  844.         0x00000000,
  845.         (0x0e00 << 16) | (0xc768 >> 2),
  846.         0x00000000,
  847.         (0x0400 << 16) | (0xc770 >> 2),
  848.         0x00000000,
  849.         (0x0400 << 16) | (0xc774 >> 2),
  850.         0x00000000,
  851.         (0x0400 << 16) | (0xc798 >> 2),
  852.         0x00000000,
  853.         (0x0400 << 16) | (0xc79c >> 2),
  854.         0x00000000,
  855.         (0x0e00 << 16) | (0x9100 >> 2),
  856.         0x00000000,
  857.         (0x0e00 << 16) | (0x3c010 >> 2),
  858.         0x00000000,
  859.         (0x0e00 << 16) | (0x8c00 >> 2),
  860.         0x00000000,
  861.         (0x0e00 << 16) | (0x8c04 >> 2),
  862.         0x00000000,
  863.         (0x0e00 << 16) | (0x8c20 >> 2),
  864.         0x00000000,
  865.         (0x0e00 << 16) | (0x8c38 >> 2),
  866.         0x00000000,
  867.         (0x0e00 << 16) | (0x8c3c >> 2),
  868.         0x00000000,
  869.         (0x0e00 << 16) | (0xae00 >> 2),
  870.         0x00000000,
  871.         (0x0e00 << 16) | (0x9604 >> 2),
  872.         0x00000000,
  873.         (0x0e00 << 16) | (0xac08 >> 2),
  874.         0x00000000,
  875.         (0x0e00 << 16) | (0xac0c >> 2),
  876.         0x00000000,
  877.         (0x0e00 << 16) | (0xac10 >> 2),
  878.         0x00000000,
  879.         (0x0e00 << 16) | (0xac14 >> 2),
  880.         0x00000000,
  881.         (0x0e00 << 16) | (0xac58 >> 2),
  882.         0x00000000,
  883.         (0x0e00 << 16) | (0xac68 >> 2),
  884.         0x00000000,
  885.         (0x0e00 << 16) | (0xac6c >> 2),
  886.         0x00000000,
  887.         (0x0e00 << 16) | (0xac70 >> 2),
  888.         0x00000000,
  889.         (0x0e00 << 16) | (0xac74 >> 2),
  890.         0x00000000,
  891.         (0x0e00 << 16) | (0xac78 >> 2),
  892.         0x00000000,
  893.         (0x0e00 << 16) | (0xac7c >> 2),
  894.         0x00000000,
  895.         (0x0e00 << 16) | (0xac80 >> 2),
  896.         0x00000000,
  897.         (0x0e00 << 16) | (0xac84 >> 2),
  898.         0x00000000,
  899.         (0x0e00 << 16) | (0xac88 >> 2),
  900.         0x00000000,
  901.         (0x0e00 << 16) | (0xac8c >> 2),
  902.         0x00000000,
  903.         (0x0e00 << 16) | (0x970c >> 2),
  904.         0x00000000,
  905.         (0x0e00 << 16) | (0x9714 >> 2),
  906.         0x00000000,
  907.         (0x0e00 << 16) | (0x9718 >> 2),
  908.         0x00000000,
  909.         (0x0e00 << 16) | (0x971c >> 2),
  910.         0x00000000,
  911.         (0x0e00 << 16) | (0x31068 >> 2),
  912.         0x00000000,
  913.         (0x4e00 << 16) | (0x31068 >> 2),
  914.         0x00000000,
  915.         (0x5e00 << 16) | (0x31068 >> 2),
  916.         0x00000000,
  917.         (0x6e00 << 16) | (0x31068 >> 2),
  918.         0x00000000,
  919.         (0x7e00 << 16) | (0x31068 >> 2),
  920.         0x00000000,
  921.         (0x0e00 << 16) | (0xcd10 >> 2),
  922.         0x00000000,
  923.         (0x0e00 << 16) | (0xcd14 >> 2),
  924.         0x00000000,
  925.         (0x0e00 << 16) | (0x88b0 >> 2),
  926.         0x00000000,
  927.         (0x0e00 << 16) | (0x88b4 >> 2),
  928.         0x00000000,
  929.         (0x0e00 << 16) | (0x88b8 >> 2),
  930.         0x00000000,
  931.         (0x0e00 << 16) | (0x88bc >> 2),
  932.         0x00000000,
  933.         (0x0400 << 16) | (0x89c0 >> 2),
  934.         0x00000000,
  935.         (0x0e00 << 16) | (0x88c4 >> 2),
  936.         0x00000000,
  937.         (0x0e00 << 16) | (0x88c8 >> 2),
  938.         0x00000000,
  939.         (0x0e00 << 16) | (0x88d0 >> 2),
  940.         0x00000000,
  941.         (0x0e00 << 16) | (0x88d4 >> 2),
  942.         0x00000000,
  943.         (0x0e00 << 16) | (0x88d8 >> 2),
  944.         0x00000000,
  945.         (0x0e00 << 16) | (0x8980 >> 2),
  946.         0x00000000,
  947.         (0x0e00 << 16) | (0x30938 >> 2),
  948.         0x00000000,
  949.         (0x0e00 << 16) | (0x3093c >> 2),
  950.         0x00000000,
  951.         (0x0e00 << 16) | (0x30940 >> 2),
  952.         0x00000000,
  953.         (0x0e00 << 16) | (0x89a0 >> 2),
  954.         0x00000000,
  955.         (0x0e00 << 16) | (0x30900 >> 2),
  956.         0x00000000,
  957.         (0x0e00 << 16) | (0x30904 >> 2),
  958.         0x00000000,
  959.         (0x0e00 << 16) | (0x89b4 >> 2),
  960.         0x00000000,
  961.         (0x0e00 << 16) | (0x3e1fc >> 2),
  962.         0x00000000,
  963.         (0x0e00 << 16) | (0x3c210 >> 2),
  964.         0x00000000,
  965.         (0x0e00 << 16) | (0x3c214 >> 2),
  966.         0x00000000,
  967.         (0x0e00 << 16) | (0x3c218 >> 2),
  968.         0x00000000,
  969.         (0x0e00 << 16) | (0x8904 >> 2),
  970.         0x00000000,
  971.         0x5,
  972.         (0x0e00 << 16) | (0x8c28 >> 2),
  973.         (0x0e00 << 16) | (0x8c2c >> 2),
  974.         (0x0e00 << 16) | (0x8c30 >> 2),
  975.         (0x0e00 << 16) | (0x8c34 >> 2),
  976.         (0x0e00 << 16) | (0x9600 >> 2),
  977. };
  978.  
  979. static const u32 bonaire_golden_spm_registers[] =
  980. {
  981.         0x30800, 0xe0ffffff, 0xe0000000
  982. };
  983.  
  984. static const u32 bonaire_golden_common_registers[] =
  985. {
  986.         0xc770, 0xffffffff, 0x00000800,
  987.         0xc774, 0xffffffff, 0x00000800,
  988.         0xc798, 0xffffffff, 0x00007fbf,
  989.         0xc79c, 0xffffffff, 0x00007faf
  990. };
  991.  
  992. static const u32 bonaire_golden_registers[] =
  993. {
  994.         0x3354, 0x00000333, 0x00000333,
  995.         0x3350, 0x000c0fc0, 0x00040200,
  996.         0x9a10, 0x00010000, 0x00058208,
  997.         0x3c000, 0xffff1fff, 0x00140000,
  998.         0x3c200, 0xfdfc0fff, 0x00000100,
  999.         0x3c234, 0x40000000, 0x40000200,
  1000.         0x9830, 0xffffffff, 0x00000000,
  1001.         0x9834, 0xf00fffff, 0x00000400,
  1002.         0x9838, 0x0002021c, 0x00020200,
  1003.         0xc78, 0x00000080, 0x00000000,
  1004.         0x5bb0, 0x000000f0, 0x00000070,
  1005.         0x5bc0, 0xf0311fff, 0x80300000,
  1006.         0x98f8, 0x73773777, 0x12010001,
  1007.         0x350c, 0x00810000, 0x408af000,
  1008.         0x7030, 0x31000111, 0x00000011,
  1009.         0x2f48, 0x73773777, 0x12010001,
  1010.         0x220c, 0x00007fb6, 0x0021a1b1,
  1011.         0x2210, 0x00007fb6, 0x002021b1,
  1012.         0x2180, 0x00007fb6, 0x00002191,
  1013.         0x2218, 0x00007fb6, 0x002121b1,
  1014.         0x221c, 0x00007fb6, 0x002021b1,
  1015.         0x21dc, 0x00007fb6, 0x00002191,
  1016.         0x21e0, 0x00007fb6, 0x00002191,
  1017.         0x3628, 0x0000003f, 0x0000000a,
  1018.         0x362c, 0x0000003f, 0x0000000a,
  1019.         0x2ae4, 0x00073ffe, 0x000022a2,
  1020.         0x240c, 0x000007ff, 0x00000000,
  1021.         0x8a14, 0xf000003f, 0x00000007,
  1022.         0x8bf0, 0x00002001, 0x00000001,
  1023.         0x8b24, 0xffffffff, 0x00ffffff,
  1024.         0x30a04, 0x0000ff0f, 0x00000000,
  1025.         0x28a4c, 0x07ffffff, 0x06000000,
  1026.         0x4d8, 0x00000fff, 0x00000100,
  1027.         0x3e78, 0x00000001, 0x00000002,
  1028.         0x9100, 0x03000000, 0x0362c688,
  1029.         0x8c00, 0x000000ff, 0x00000001,
  1030.         0xe40, 0x00001fff, 0x00001fff,
  1031.         0x9060, 0x0000007f, 0x00000020,
  1032.         0x9508, 0x00010000, 0x00010000,
  1033.         0xac14, 0x000003ff, 0x000000f3,
  1034.         0xac0c, 0xffffffff, 0x00001032
  1035. };
  1036.  
  1037. static const u32 bonaire_mgcg_cgcg_init[] =
  1038. {
  1039.         0xc420, 0xffffffff, 0xfffffffc,
  1040.         0x30800, 0xffffffff, 0xe0000000,
  1041.         0x3c2a0, 0xffffffff, 0x00000100,
  1042.         0x3c208, 0xffffffff, 0x00000100,
  1043.         0x3c2c0, 0xffffffff, 0xc0000100,
  1044.         0x3c2c8, 0xffffffff, 0xc0000100,
  1045.         0x3c2c4, 0xffffffff, 0xc0000100,
  1046.         0x55e4, 0xffffffff, 0x00600100,
  1047.         0x3c280, 0xffffffff, 0x00000100,
  1048.         0x3c214, 0xffffffff, 0x06000100,
  1049.         0x3c220, 0xffffffff, 0x00000100,
  1050.         0x3c218, 0xffffffff, 0x06000100,
  1051.         0x3c204, 0xffffffff, 0x00000100,
  1052.         0x3c2e0, 0xffffffff, 0x00000100,
  1053.         0x3c224, 0xffffffff, 0x00000100,
  1054.         0x3c200, 0xffffffff, 0x00000100,
  1055.         0x3c230, 0xffffffff, 0x00000100,
  1056.         0x3c234, 0xffffffff, 0x00000100,
  1057.         0x3c250, 0xffffffff, 0x00000100,
  1058.         0x3c254, 0xffffffff, 0x00000100,
  1059.         0x3c258, 0xffffffff, 0x00000100,
  1060.         0x3c25c, 0xffffffff, 0x00000100,
  1061.         0x3c260, 0xffffffff, 0x00000100,
  1062.         0x3c27c, 0xffffffff, 0x00000100,
  1063.         0x3c278, 0xffffffff, 0x00000100,
  1064.         0x3c210, 0xffffffff, 0x06000100,
  1065.         0x3c290, 0xffffffff, 0x00000100,
  1066.         0x3c274, 0xffffffff, 0x00000100,
  1067.         0x3c2b4, 0xffffffff, 0x00000100,
  1068.         0x3c2b0, 0xffffffff, 0x00000100,
  1069.         0x3c270, 0xffffffff, 0x00000100,
  1070.         0x30800, 0xffffffff, 0xe0000000,
  1071.         0x3c020, 0xffffffff, 0x00010000,
  1072.         0x3c024, 0xffffffff, 0x00030002,
  1073.         0x3c028, 0xffffffff, 0x00040007,
  1074.         0x3c02c, 0xffffffff, 0x00060005,
  1075.         0x3c030, 0xffffffff, 0x00090008,
  1076.         0x3c034, 0xffffffff, 0x00010000,
  1077.         0x3c038, 0xffffffff, 0x00030002,
  1078.         0x3c03c, 0xffffffff, 0x00040007,
  1079.         0x3c040, 0xffffffff, 0x00060005,
  1080.         0x3c044, 0xffffffff, 0x00090008,
  1081.         0x3c048, 0xffffffff, 0x00010000,
  1082.         0x3c04c, 0xffffffff, 0x00030002,
  1083.         0x3c050, 0xffffffff, 0x00040007,
  1084.         0x3c054, 0xffffffff, 0x00060005,
  1085.         0x3c058, 0xffffffff, 0x00090008,
  1086.         0x3c05c, 0xffffffff, 0x00010000,
  1087.         0x3c060, 0xffffffff, 0x00030002,
  1088.         0x3c064, 0xffffffff, 0x00040007,
  1089.         0x3c068, 0xffffffff, 0x00060005,
  1090.         0x3c06c, 0xffffffff, 0x00090008,
  1091.         0x3c070, 0xffffffff, 0x00010000,
  1092.         0x3c074, 0xffffffff, 0x00030002,
  1093.         0x3c078, 0xffffffff, 0x00040007,
  1094.         0x3c07c, 0xffffffff, 0x00060005,
  1095.         0x3c080, 0xffffffff, 0x00090008,
  1096.         0x3c084, 0xffffffff, 0x00010000,
  1097.         0x3c088, 0xffffffff, 0x00030002,
  1098.         0x3c08c, 0xffffffff, 0x00040007,
  1099.         0x3c090, 0xffffffff, 0x00060005,
  1100.         0x3c094, 0xffffffff, 0x00090008,
  1101.         0x3c098, 0xffffffff, 0x00010000,
  1102.         0x3c09c, 0xffffffff, 0x00030002,
  1103.         0x3c0a0, 0xffffffff, 0x00040007,
  1104.         0x3c0a4, 0xffffffff, 0x00060005,
  1105.         0x3c0a8, 0xffffffff, 0x00090008,
  1106.         0x3c000, 0xffffffff, 0x96e00200,
  1107.         0x8708, 0xffffffff, 0x00900100,
  1108.         0xc424, 0xffffffff, 0x0020003f,
  1109.         0x38, 0xffffffff, 0x0140001c,
  1110.         0x3c, 0x000f0000, 0x000f0000,
  1111.         0x220, 0xffffffff, 0xC060000C,
  1112.         0x224, 0xc0000fff, 0x00000100,
  1113.         0xf90, 0xffffffff, 0x00000100,
  1114.         0xf98, 0x00000101, 0x00000000,
  1115.         0x20a8, 0xffffffff, 0x00000104,
  1116.         0x55e4, 0xff000fff, 0x00000100,
  1117.         0x30cc, 0xc0000fff, 0x00000104,
  1118.         0xc1e4, 0x00000001, 0x00000001,
  1119.         0xd00c, 0xff000ff0, 0x00000100,
  1120.         0xd80c, 0xff000ff0, 0x00000100
  1121. };
  1122.  
  1123. static const u32 spectre_golden_spm_registers[] =
  1124. {
  1125.         0x30800, 0xe0ffffff, 0xe0000000
  1126. };
  1127.  
  1128. static const u32 spectre_golden_common_registers[] =
  1129. {
  1130.         0xc770, 0xffffffff, 0x00000800,
  1131.         0xc774, 0xffffffff, 0x00000800,
  1132.         0xc798, 0xffffffff, 0x00007fbf,
  1133.         0xc79c, 0xffffffff, 0x00007faf
  1134. };
  1135.  
  1136. static const u32 spectre_golden_registers[] =
  1137. {
  1138.         0x3c000, 0xffff1fff, 0x96940200,
  1139.         0x3c00c, 0xffff0001, 0xff000000,
  1140.         0x3c200, 0xfffc0fff, 0x00000100,
  1141.         0x6ed8, 0x00010101, 0x00010000,
  1142.         0x9834, 0xf00fffff, 0x00000400,
  1143.         0x9838, 0xfffffffc, 0x00020200,
  1144.         0x5bb0, 0x000000f0, 0x00000070,
  1145.         0x5bc0, 0xf0311fff, 0x80300000,
  1146.         0x98f8, 0x73773777, 0x12010001,
  1147.         0x9b7c, 0x00ff0000, 0x00fc0000,
  1148.         0x2f48, 0x73773777, 0x12010001,
  1149.         0x8a14, 0xf000003f, 0x00000007,
  1150.         0x8b24, 0xffffffff, 0x00ffffff,
  1151.         0x28350, 0x3f3f3fff, 0x00000082,
  1152.         0x28354, 0x0000003f, 0x00000000,
  1153.         0x3e78, 0x00000001, 0x00000002,
  1154.         0x913c, 0xffff03df, 0x00000004,
  1155.         0xc768, 0x00000008, 0x00000008,
  1156.         0x8c00, 0x000008ff, 0x00000800,
  1157.         0x9508, 0x00010000, 0x00010000,
  1158.         0xac0c, 0xffffffff, 0x54763210,
  1159.         0x214f8, 0x01ff01ff, 0x00000002,
  1160.         0x21498, 0x007ff800, 0x00200000,
  1161.         0x2015c, 0xffffffff, 0x00000f40,
  1162.         0x30934, 0xffffffff, 0x00000001
  1163. };
  1164.  
  1165. static const u32 spectre_mgcg_cgcg_init[] =
  1166. {
  1167.         0xc420, 0xffffffff, 0xfffffffc,
  1168.         0x30800, 0xffffffff, 0xe0000000,
  1169.         0x3c2a0, 0xffffffff, 0x00000100,
  1170.         0x3c208, 0xffffffff, 0x00000100,
  1171.         0x3c2c0, 0xffffffff, 0x00000100,
  1172.         0x3c2c8, 0xffffffff, 0x00000100,
  1173.         0x3c2c4, 0xffffffff, 0x00000100,
  1174.         0x55e4, 0xffffffff, 0x00600100,
  1175.         0x3c280, 0xffffffff, 0x00000100,
  1176.         0x3c214, 0xffffffff, 0x06000100,
  1177.         0x3c220, 0xffffffff, 0x00000100,
  1178.         0x3c218, 0xffffffff, 0x06000100,
  1179.         0x3c204, 0xffffffff, 0x00000100,
  1180.         0x3c2e0, 0xffffffff, 0x00000100,
  1181.         0x3c224, 0xffffffff, 0x00000100,
  1182.         0x3c200, 0xffffffff, 0x00000100,
  1183.         0x3c230, 0xffffffff, 0x00000100,
  1184.         0x3c234, 0xffffffff, 0x00000100,
  1185.         0x3c250, 0xffffffff, 0x00000100,
  1186.         0x3c254, 0xffffffff, 0x00000100,
  1187.         0x3c258, 0xffffffff, 0x00000100,
  1188.         0x3c25c, 0xffffffff, 0x00000100,
  1189.         0x3c260, 0xffffffff, 0x00000100,
  1190.         0x3c27c, 0xffffffff, 0x00000100,
  1191.         0x3c278, 0xffffffff, 0x00000100,
  1192.         0x3c210, 0xffffffff, 0x06000100,
  1193.         0x3c290, 0xffffffff, 0x00000100,
  1194.         0x3c274, 0xffffffff, 0x00000100,
  1195.         0x3c2b4, 0xffffffff, 0x00000100,
  1196.         0x3c2b0, 0xffffffff, 0x00000100,
  1197.         0x3c270, 0xffffffff, 0x00000100,
  1198.         0x30800, 0xffffffff, 0xe0000000,
  1199.         0x3c020, 0xffffffff, 0x00010000,
  1200.         0x3c024, 0xffffffff, 0x00030002,
  1201.         0x3c028, 0xffffffff, 0x00040007,
  1202.         0x3c02c, 0xffffffff, 0x00060005,
  1203.         0x3c030, 0xffffffff, 0x00090008,
  1204.         0x3c034, 0xffffffff, 0x00010000,
  1205.         0x3c038, 0xffffffff, 0x00030002,
  1206.         0x3c03c, 0xffffffff, 0x00040007,
  1207.         0x3c040, 0xffffffff, 0x00060005,
  1208.         0x3c044, 0xffffffff, 0x00090008,
  1209.         0x3c048, 0xffffffff, 0x00010000,
  1210.         0x3c04c, 0xffffffff, 0x00030002,
  1211.         0x3c050, 0xffffffff, 0x00040007,
  1212.         0x3c054, 0xffffffff, 0x00060005,
  1213.         0x3c058, 0xffffffff, 0x00090008,
  1214.         0x3c05c, 0xffffffff, 0x00010000,
  1215.         0x3c060, 0xffffffff, 0x00030002,
  1216.         0x3c064, 0xffffffff, 0x00040007,
  1217.         0x3c068, 0xffffffff, 0x00060005,
  1218.         0x3c06c, 0xffffffff, 0x00090008,
  1219.         0x3c070, 0xffffffff, 0x00010000,
  1220.         0x3c074, 0xffffffff, 0x00030002,
  1221.         0x3c078, 0xffffffff, 0x00040007,
  1222.         0x3c07c, 0xffffffff, 0x00060005,
  1223.         0x3c080, 0xffffffff, 0x00090008,
  1224.         0x3c084, 0xffffffff, 0x00010000,
  1225.         0x3c088, 0xffffffff, 0x00030002,
  1226.         0x3c08c, 0xffffffff, 0x00040007,
  1227.         0x3c090, 0xffffffff, 0x00060005,
  1228.         0x3c094, 0xffffffff, 0x00090008,
  1229.         0x3c098, 0xffffffff, 0x00010000,
  1230.         0x3c09c, 0xffffffff, 0x00030002,
  1231.         0x3c0a0, 0xffffffff, 0x00040007,
  1232.         0x3c0a4, 0xffffffff, 0x00060005,
  1233.         0x3c0a8, 0xffffffff, 0x00090008,
  1234.         0x3c0ac, 0xffffffff, 0x00010000,
  1235.         0x3c0b0, 0xffffffff, 0x00030002,
  1236.         0x3c0b4, 0xffffffff, 0x00040007,
  1237.         0x3c0b8, 0xffffffff, 0x00060005,
  1238.         0x3c0bc, 0xffffffff, 0x00090008,
  1239.         0x3c000, 0xffffffff, 0x96e00200,
  1240.         0x8708, 0xffffffff, 0x00900100,
  1241.         0xc424, 0xffffffff, 0x0020003f,
  1242.         0x38, 0xffffffff, 0x0140001c,
  1243.         0x3c, 0x000f0000, 0x000f0000,
  1244.         0x220, 0xffffffff, 0xC060000C,
  1245.         0x224, 0xc0000fff, 0x00000100,
  1246.         0xf90, 0xffffffff, 0x00000100,
  1247.         0xf98, 0x00000101, 0x00000000,
  1248.         0x20a8, 0xffffffff, 0x00000104,
  1249.         0x55e4, 0xff000fff, 0x00000100,
  1250.         0x30cc, 0xc0000fff, 0x00000104,
  1251.         0xc1e4, 0x00000001, 0x00000001,
  1252.         0xd00c, 0xff000ff0, 0x00000100,
  1253.         0xd80c, 0xff000ff0, 0x00000100
  1254. };
  1255.  
  1256. static const u32 kalindi_golden_spm_registers[] =
  1257. {
  1258.         0x30800, 0xe0ffffff, 0xe0000000
  1259. };
  1260.  
  1261. static const u32 kalindi_golden_common_registers[] =
  1262. {
  1263.         0xc770, 0xffffffff, 0x00000800,
  1264.         0xc774, 0xffffffff, 0x00000800,
  1265.         0xc798, 0xffffffff, 0x00007fbf,
  1266.         0xc79c, 0xffffffff, 0x00007faf
  1267. };
  1268.  
  1269. static const u32 kalindi_golden_registers[] =
  1270. {
  1271.         0x3c000, 0xffffdfff, 0x6e944040,
  1272.         0x55e4, 0xff607fff, 0xfc000100,
  1273.         0x3c220, 0xff000fff, 0x00000100,
  1274.         0x3c224, 0xff000fff, 0x00000100,
  1275.         0x3c200, 0xfffc0fff, 0x00000100,
  1276.         0x6ed8, 0x00010101, 0x00010000,
  1277.         0x9830, 0xffffffff, 0x00000000,
  1278.         0x9834, 0xf00fffff, 0x00000400,
  1279.         0x5bb0, 0x000000f0, 0x00000070,
  1280.         0x5bc0, 0xf0311fff, 0x80300000,
  1281.         0x98f8, 0x73773777, 0x12010001,
  1282.         0x98fc, 0xffffffff, 0x00000010,
  1283.         0x9b7c, 0x00ff0000, 0x00fc0000,
  1284.         0x8030, 0x00001f0f, 0x0000100a,
  1285.         0x2f48, 0x73773777, 0x12010001,
  1286.         0x2408, 0x000fffff, 0x000c007f,
  1287.         0x8a14, 0xf000003f, 0x00000007,
  1288.         0x8b24, 0x3fff3fff, 0x00ffcfff,
  1289.         0x30a04, 0x0000ff0f, 0x00000000,
  1290.         0x28a4c, 0x07ffffff, 0x06000000,
  1291.         0x4d8, 0x00000fff, 0x00000100,
  1292.         0x3e78, 0x00000001, 0x00000002,
  1293.         0xc768, 0x00000008, 0x00000008,
  1294.         0x8c00, 0x000000ff, 0x00000003,
  1295.         0x214f8, 0x01ff01ff, 0x00000002,
  1296.         0x21498, 0x007ff800, 0x00200000,
  1297.         0x2015c, 0xffffffff, 0x00000f40,
  1298.         0x88c4, 0x001f3ae3, 0x00000082,
  1299.         0x88d4, 0x0000001f, 0x00000010,
  1300.         0x30934, 0xffffffff, 0x00000000
  1301. };
  1302.  
  1303. static const u32 kalindi_mgcg_cgcg_init[] =
  1304. {
  1305.         0xc420, 0xffffffff, 0xfffffffc,
  1306.         0x30800, 0xffffffff, 0xe0000000,
  1307.         0x3c2a0, 0xffffffff, 0x00000100,
  1308.         0x3c208, 0xffffffff, 0x00000100,
  1309.         0x3c2c0, 0xffffffff, 0x00000100,
  1310.         0x3c2c8, 0xffffffff, 0x00000100,
  1311.         0x3c2c4, 0xffffffff, 0x00000100,
  1312.         0x55e4, 0xffffffff, 0x00600100,
  1313.         0x3c280, 0xffffffff, 0x00000100,
  1314.         0x3c214, 0xffffffff, 0x06000100,
  1315.         0x3c220, 0xffffffff, 0x00000100,
  1316.         0x3c218, 0xffffffff, 0x06000100,
  1317.         0x3c204, 0xffffffff, 0x00000100,
  1318.         0x3c2e0, 0xffffffff, 0x00000100,
  1319.         0x3c224, 0xffffffff, 0x00000100,
  1320.         0x3c200, 0xffffffff, 0x00000100,
  1321.         0x3c230, 0xffffffff, 0x00000100,
  1322.         0x3c234, 0xffffffff, 0x00000100,
  1323.         0x3c250, 0xffffffff, 0x00000100,
  1324.         0x3c254, 0xffffffff, 0x00000100,
  1325.         0x3c258, 0xffffffff, 0x00000100,
  1326.         0x3c25c, 0xffffffff, 0x00000100,
  1327.         0x3c260, 0xffffffff, 0x00000100,
  1328.         0x3c27c, 0xffffffff, 0x00000100,
  1329.         0x3c278, 0xffffffff, 0x00000100,
  1330.         0x3c210, 0xffffffff, 0x06000100,
  1331.         0x3c290, 0xffffffff, 0x00000100,
  1332.         0x3c274, 0xffffffff, 0x00000100,
  1333.         0x3c2b4, 0xffffffff, 0x00000100,
  1334.         0x3c2b0, 0xffffffff, 0x00000100,
  1335.         0x3c270, 0xffffffff, 0x00000100,
  1336.         0x30800, 0xffffffff, 0xe0000000,
  1337.         0x3c020, 0xffffffff, 0x00010000,
  1338.         0x3c024, 0xffffffff, 0x00030002,
  1339.         0x3c028, 0xffffffff, 0x00040007,
  1340.         0x3c02c, 0xffffffff, 0x00060005,
  1341.         0x3c030, 0xffffffff, 0x00090008,
  1342.         0x3c034, 0xffffffff, 0x00010000,
  1343.         0x3c038, 0xffffffff, 0x00030002,
  1344.         0x3c03c, 0xffffffff, 0x00040007,
  1345.         0x3c040, 0xffffffff, 0x00060005,
  1346.         0x3c044, 0xffffffff, 0x00090008,
  1347.         0x3c000, 0xffffffff, 0x96e00200,
  1348.         0x8708, 0xffffffff, 0x00900100,
  1349.         0xc424, 0xffffffff, 0x0020003f,
  1350.         0x38, 0xffffffff, 0x0140001c,
  1351.         0x3c, 0x000f0000, 0x000f0000,
  1352.         0x220, 0xffffffff, 0xC060000C,
  1353.         0x224, 0xc0000fff, 0x00000100,
  1354.         0x20a8, 0xffffffff, 0x00000104,
  1355.         0x55e4, 0xff000fff, 0x00000100,
  1356.         0x30cc, 0xc0000fff, 0x00000104,
  1357.         0xc1e4, 0x00000001, 0x00000001,
  1358.         0xd00c, 0xff000ff0, 0x00000100,
  1359.         0xd80c, 0xff000ff0, 0x00000100
  1360. };
  1361.  
  1362. static const u32 hawaii_golden_spm_registers[] =
  1363. {
  1364.         0x30800, 0xe0ffffff, 0xe0000000
  1365. };
  1366.  
  1367. static const u32 hawaii_golden_common_registers[] =
  1368. {
  1369.         0x30800, 0xffffffff, 0xe0000000,
  1370.         0x28350, 0xffffffff, 0x3a00161a,
  1371.         0x28354, 0xffffffff, 0x0000002e,
  1372.         0x9a10, 0xffffffff, 0x00018208,
  1373.         0x98f8, 0xffffffff, 0x12011003
  1374. };
  1375.  
  1376. static const u32 hawaii_golden_registers[] =
  1377. {
  1378.         0x3354, 0x00000333, 0x00000333,
  1379.         0x9a10, 0x00010000, 0x00058208,
  1380.         0x9830, 0xffffffff, 0x00000000,
  1381.         0x9834, 0xf00fffff, 0x00000400,
  1382.         0x9838, 0x0002021c, 0x00020200,
  1383.         0xc78, 0x00000080, 0x00000000,
  1384.         0x5bb0, 0x000000f0, 0x00000070,
  1385.         0x5bc0, 0xf0311fff, 0x80300000,
  1386.         0x350c, 0x00810000, 0x408af000,
  1387.         0x7030, 0x31000111, 0x00000011,
  1388.         0x2f48, 0x73773777, 0x12010001,
  1389.         0x2120, 0x0000007f, 0x0000001b,
  1390.         0x21dc, 0x00007fb6, 0x00002191,
  1391.         0x3628, 0x0000003f, 0x0000000a,
  1392.         0x362c, 0x0000003f, 0x0000000a,
  1393.         0x2ae4, 0x00073ffe, 0x000022a2,
  1394.         0x240c, 0x000007ff, 0x00000000,
  1395.         0x8bf0, 0x00002001, 0x00000001,
  1396.         0x8b24, 0xffffffff, 0x00ffffff,
  1397.         0x30a04, 0x0000ff0f, 0x00000000,
  1398.         0x28a4c, 0x07ffffff, 0x06000000,
  1399.         0x3e78, 0x00000001, 0x00000002,
  1400.         0xc768, 0x00000008, 0x00000008,
  1401.         0xc770, 0x00000f00, 0x00000800,
  1402.         0xc774, 0x00000f00, 0x00000800,
  1403.         0xc798, 0x00ffffff, 0x00ff7fbf,
  1404.         0xc79c, 0x00ffffff, 0x00ff7faf,
  1405.         0x8c00, 0x000000ff, 0x00000800,
  1406.         0xe40, 0x00001fff, 0x00001fff,
  1407.         0x9060, 0x0000007f, 0x00000020,
  1408.         0x9508, 0x00010000, 0x00010000,
  1409.         0xae00, 0x00100000, 0x000ff07c,
  1410.         0xac14, 0x000003ff, 0x0000000f,
  1411.         0xac10, 0xffffffff, 0x7564fdec,
  1412.         0xac0c, 0xffffffff, 0x3120b9a8,
  1413.         0xac08, 0x20000000, 0x0f9c0000
  1414. };
  1415.  
  1416. static const u32 hawaii_mgcg_cgcg_init[] =
  1417. {
  1418.         0xc420, 0xffffffff, 0xfffffffd,
  1419.         0x30800, 0xffffffff, 0xe0000000,
  1420.         0x3c2a0, 0xffffffff, 0x00000100,
  1421.         0x3c208, 0xffffffff, 0x00000100,
  1422.         0x3c2c0, 0xffffffff, 0x00000100,
  1423.         0x3c2c8, 0xffffffff, 0x00000100,
  1424.         0x3c2c4, 0xffffffff, 0x00000100,
  1425.         0x55e4, 0xffffffff, 0x00200100,
  1426.         0x3c280, 0xffffffff, 0x00000100,
  1427.         0x3c214, 0xffffffff, 0x06000100,
  1428.         0x3c220, 0xffffffff, 0x00000100,
  1429.         0x3c218, 0xffffffff, 0x06000100,
  1430.         0x3c204, 0xffffffff, 0x00000100,
  1431.         0x3c2e0, 0xffffffff, 0x00000100,
  1432.         0x3c224, 0xffffffff, 0x00000100,
  1433.         0x3c200, 0xffffffff, 0x00000100,
  1434.         0x3c230, 0xffffffff, 0x00000100,
  1435.         0x3c234, 0xffffffff, 0x00000100,
  1436.         0x3c250, 0xffffffff, 0x00000100,
  1437.         0x3c254, 0xffffffff, 0x00000100,
  1438.         0x3c258, 0xffffffff, 0x00000100,
  1439.         0x3c25c, 0xffffffff, 0x00000100,
  1440.         0x3c260, 0xffffffff, 0x00000100,
  1441.         0x3c27c, 0xffffffff, 0x00000100,
  1442.         0x3c278, 0xffffffff, 0x00000100,
  1443.         0x3c210, 0xffffffff, 0x06000100,
  1444.         0x3c290, 0xffffffff, 0x00000100,
  1445.         0x3c274, 0xffffffff, 0x00000100,
  1446.         0x3c2b4, 0xffffffff, 0x00000100,
  1447.         0x3c2b0, 0xffffffff, 0x00000100,
  1448.         0x3c270, 0xffffffff, 0x00000100,
  1449.         0x30800, 0xffffffff, 0xe0000000,
  1450.         0x3c020, 0xffffffff, 0x00010000,
  1451.         0x3c024, 0xffffffff, 0x00030002,
  1452.         0x3c028, 0xffffffff, 0x00040007,
  1453.         0x3c02c, 0xffffffff, 0x00060005,
  1454.         0x3c030, 0xffffffff, 0x00090008,
  1455.         0x3c034, 0xffffffff, 0x00010000,
  1456.         0x3c038, 0xffffffff, 0x00030002,
  1457.         0x3c03c, 0xffffffff, 0x00040007,
  1458.         0x3c040, 0xffffffff, 0x00060005,
  1459.         0x3c044, 0xffffffff, 0x00090008,
  1460.         0x3c048, 0xffffffff, 0x00010000,
  1461.         0x3c04c, 0xffffffff, 0x00030002,
  1462.         0x3c050, 0xffffffff, 0x00040007,
  1463.         0x3c054, 0xffffffff, 0x00060005,
  1464.         0x3c058, 0xffffffff, 0x00090008,
  1465.         0x3c05c, 0xffffffff, 0x00010000,
  1466.         0x3c060, 0xffffffff, 0x00030002,
  1467.         0x3c064, 0xffffffff, 0x00040007,
  1468.         0x3c068, 0xffffffff, 0x00060005,
  1469.         0x3c06c, 0xffffffff, 0x00090008,
  1470.         0x3c070, 0xffffffff, 0x00010000,
  1471.         0x3c074, 0xffffffff, 0x00030002,
  1472.         0x3c078, 0xffffffff, 0x00040007,
  1473.         0x3c07c, 0xffffffff, 0x00060005,
  1474.         0x3c080, 0xffffffff, 0x00090008,
  1475.         0x3c084, 0xffffffff, 0x00010000,
  1476.         0x3c088, 0xffffffff, 0x00030002,
  1477.         0x3c08c, 0xffffffff, 0x00040007,
  1478.         0x3c090, 0xffffffff, 0x00060005,
  1479.         0x3c094, 0xffffffff, 0x00090008,
  1480.         0x3c098, 0xffffffff, 0x00010000,
  1481.         0x3c09c, 0xffffffff, 0x00030002,
  1482.         0x3c0a0, 0xffffffff, 0x00040007,
  1483.         0x3c0a4, 0xffffffff, 0x00060005,
  1484.         0x3c0a8, 0xffffffff, 0x00090008,
  1485.         0x3c0ac, 0xffffffff, 0x00010000,
  1486.         0x3c0b0, 0xffffffff, 0x00030002,
  1487.         0x3c0b4, 0xffffffff, 0x00040007,
  1488.         0x3c0b8, 0xffffffff, 0x00060005,
  1489.         0x3c0bc, 0xffffffff, 0x00090008,
  1490.         0x3c0c0, 0xffffffff, 0x00010000,
  1491.         0x3c0c4, 0xffffffff, 0x00030002,
  1492.         0x3c0c8, 0xffffffff, 0x00040007,
  1493.         0x3c0cc, 0xffffffff, 0x00060005,
  1494.         0x3c0d0, 0xffffffff, 0x00090008,
  1495.         0x3c0d4, 0xffffffff, 0x00010000,
  1496.         0x3c0d8, 0xffffffff, 0x00030002,
  1497.         0x3c0dc, 0xffffffff, 0x00040007,
  1498.         0x3c0e0, 0xffffffff, 0x00060005,
  1499.         0x3c0e4, 0xffffffff, 0x00090008,
  1500.         0x3c0e8, 0xffffffff, 0x00010000,
  1501.         0x3c0ec, 0xffffffff, 0x00030002,
  1502.         0x3c0f0, 0xffffffff, 0x00040007,
  1503.         0x3c0f4, 0xffffffff, 0x00060005,
  1504.         0x3c0f8, 0xffffffff, 0x00090008,
  1505.         0xc318, 0xffffffff, 0x00020200,
  1506.         0x3350, 0xffffffff, 0x00000200,
  1507.         0x15c0, 0xffffffff, 0x00000400,
  1508.         0x55e8, 0xffffffff, 0x00000000,
  1509.         0x2f50, 0xffffffff, 0x00000902,
  1510.         0x3c000, 0xffffffff, 0x96940200,
  1511.         0x8708, 0xffffffff, 0x00900100,
  1512.         0xc424, 0xffffffff, 0x0020003f,
  1513.         0x38, 0xffffffff, 0x0140001c,
  1514.         0x3c, 0x000f0000, 0x000f0000,
  1515.         0x220, 0xffffffff, 0xc060000c,
  1516.         0x224, 0xc0000fff, 0x00000100,
  1517.         0xf90, 0xffffffff, 0x00000100,
  1518.         0xf98, 0x00000101, 0x00000000,
  1519.         0x20a8, 0xffffffff, 0x00000104,
  1520.         0x55e4, 0xff000fff, 0x00000100,
  1521.         0x30cc, 0xc0000fff, 0x00000104,
  1522.         0xc1e4, 0x00000001, 0x00000001,
  1523.         0xd00c, 0xff000ff0, 0x00000100,
  1524.         0xd80c, 0xff000ff0, 0x00000100
  1525. };
  1526.  
  1527. static const u32 godavari_golden_registers[] =
  1528. {
  1529.         0x55e4, 0xff607fff, 0xfc000100,
  1530.         0x6ed8, 0x00010101, 0x00010000,
  1531.         0x9830, 0xffffffff, 0x00000000,
  1532.         0x98302, 0xf00fffff, 0x00000400,
  1533.         0x6130, 0xffffffff, 0x00010000,
  1534.         0x5bb0, 0x000000f0, 0x00000070,
  1535.         0x5bc0, 0xf0311fff, 0x80300000,
  1536.         0x98f8, 0x73773777, 0x12010001,
  1537.         0x98fc, 0xffffffff, 0x00000010,
  1538.         0x8030, 0x00001f0f, 0x0000100a,
  1539.         0x2f48, 0x73773777, 0x12010001,
  1540.         0x2408, 0x000fffff, 0x000c007f,
  1541.         0x8a14, 0xf000003f, 0x00000007,
  1542.         0x8b24, 0xffffffff, 0x00ff0fff,
  1543.         0x30a04, 0x0000ff0f, 0x00000000,
  1544.         0x28a4c, 0x07ffffff, 0x06000000,
  1545.         0x4d8, 0x00000fff, 0x00000100,
  1546.         0xd014, 0x00010000, 0x00810001,
  1547.         0xd814, 0x00010000, 0x00810001,
  1548.         0x3e78, 0x00000001, 0x00000002,
  1549.         0xc768, 0x00000008, 0x00000008,
  1550.         0xc770, 0x00000f00, 0x00000800,
  1551.         0xc774, 0x00000f00, 0x00000800,
  1552.         0xc798, 0x00ffffff, 0x00ff7fbf,
  1553.         0xc79c, 0x00ffffff, 0x00ff7faf,
  1554.         0x8c00, 0x000000ff, 0x00000001,
  1555.         0x214f8, 0x01ff01ff, 0x00000002,
  1556.         0x21498, 0x007ff800, 0x00200000,
  1557.         0x2015c, 0xffffffff, 0x00000f40,
  1558.         0x88c4, 0x001f3ae3, 0x00000082,
  1559.         0x88d4, 0x0000001f, 0x00000010,
  1560.         0x30934, 0xffffffff, 0x00000000
  1561. };
  1562.  
  1563.  
  1564. static void cik_init_golden_registers(struct radeon_device *rdev)
  1565. {
  1566.         switch (rdev->family) {
  1567.         case CHIP_BONAIRE:
  1568.                 radeon_program_register_sequence(rdev,
  1569.                                                  bonaire_mgcg_cgcg_init,
  1570.                                                  (const u32)ARRAY_SIZE(bonaire_mgcg_cgcg_init));
  1571.                 radeon_program_register_sequence(rdev,
  1572.                                                  bonaire_golden_registers,
  1573.                                                  (const u32)ARRAY_SIZE(bonaire_golden_registers));
  1574.                 radeon_program_register_sequence(rdev,
  1575.                                                  bonaire_golden_common_registers,
  1576.                                                  (const u32)ARRAY_SIZE(bonaire_golden_common_registers));
  1577.                 radeon_program_register_sequence(rdev,
  1578.                                                  bonaire_golden_spm_registers,
  1579.                                                  (const u32)ARRAY_SIZE(bonaire_golden_spm_registers));
  1580.                 break;
  1581.         case CHIP_KABINI:
  1582.                 radeon_program_register_sequence(rdev,
  1583.                                                  kalindi_mgcg_cgcg_init,
  1584.                                                  (const u32)ARRAY_SIZE(kalindi_mgcg_cgcg_init));
  1585.                 radeon_program_register_sequence(rdev,
  1586.                                                  kalindi_golden_registers,
  1587.                                                  (const u32)ARRAY_SIZE(kalindi_golden_registers));
  1588.                 radeon_program_register_sequence(rdev,
  1589.                                                  kalindi_golden_common_registers,
  1590.                                                  (const u32)ARRAY_SIZE(kalindi_golden_common_registers));
  1591.                 radeon_program_register_sequence(rdev,
  1592.                                                  kalindi_golden_spm_registers,
  1593.                                                  (const u32)ARRAY_SIZE(kalindi_golden_spm_registers));
  1594.                 break;
  1595.         case CHIP_MULLINS:
  1596.                 radeon_program_register_sequence(rdev,
  1597.                                                  kalindi_mgcg_cgcg_init,
  1598.                                                  (const u32)ARRAY_SIZE(kalindi_mgcg_cgcg_init));
  1599.                 radeon_program_register_sequence(rdev,
  1600.                                                  godavari_golden_registers,
  1601.                                                  (const u32)ARRAY_SIZE(godavari_golden_registers));
  1602.                 radeon_program_register_sequence(rdev,
  1603.                                                  kalindi_golden_common_registers,
  1604.                                                  (const u32)ARRAY_SIZE(kalindi_golden_common_registers));
  1605.                 radeon_program_register_sequence(rdev,
  1606.                                                  kalindi_golden_spm_registers,
  1607.                                                  (const u32)ARRAY_SIZE(kalindi_golden_spm_registers));
  1608.                 break;
  1609.         case CHIP_KAVERI:
  1610.                 radeon_program_register_sequence(rdev,
  1611.                                                  spectre_mgcg_cgcg_init,
  1612.                                                  (const u32)ARRAY_SIZE(spectre_mgcg_cgcg_init));
  1613.                 radeon_program_register_sequence(rdev,
  1614.                                                  spectre_golden_registers,
  1615.                                                  (const u32)ARRAY_SIZE(spectre_golden_registers));
  1616.                 radeon_program_register_sequence(rdev,
  1617.                                                  spectre_golden_common_registers,
  1618.                                                  (const u32)ARRAY_SIZE(spectre_golden_common_registers));
  1619.                 radeon_program_register_sequence(rdev,
  1620.                                                  spectre_golden_spm_registers,
  1621.                                                  (const u32)ARRAY_SIZE(spectre_golden_spm_registers));
  1622.                 break;
  1623.         case CHIP_HAWAII:
  1624.                 radeon_program_register_sequence(rdev,
  1625.                                                  hawaii_mgcg_cgcg_init,
  1626.                                                  (const u32)ARRAY_SIZE(hawaii_mgcg_cgcg_init));
  1627.                 radeon_program_register_sequence(rdev,
  1628.                                                  hawaii_golden_registers,
  1629.                                                  (const u32)ARRAY_SIZE(hawaii_golden_registers));
  1630.                 radeon_program_register_sequence(rdev,
  1631.                                                  hawaii_golden_common_registers,
  1632.                                                  (const u32)ARRAY_SIZE(hawaii_golden_common_registers));
  1633.                 radeon_program_register_sequence(rdev,
  1634.                                                  hawaii_golden_spm_registers,
  1635.                                                  (const u32)ARRAY_SIZE(hawaii_golden_spm_registers));
  1636.                 break;
  1637.         default:
  1638.                 break;
  1639.         }
  1640. }
  1641.  
  1642. /**
  1643.  * cik_get_xclk - get the xclk
  1644.  *
  1645.  * @rdev: radeon_device pointer
  1646.  *
  1647.  * Returns the reference clock used by the gfx engine
  1648.  * (CIK).
  1649.  */
  1650. u32 cik_get_xclk(struct radeon_device *rdev)
  1651. {
  1652.         u32 reference_clock = rdev->clock.spll.reference_freq;
  1653.  
  1654.         if (rdev->flags & RADEON_IS_IGP) {
  1655.                 if (RREG32_SMC(GENERAL_PWRMGT) & GPU_COUNTER_CLK)
  1656.                         return reference_clock / 2;
  1657.         } else {
  1658.                 if (RREG32_SMC(CG_CLKPIN_CNTL) & XTALIN_DIVIDE)
  1659.                         return reference_clock / 4;
  1660.         }
  1661.         return reference_clock;
  1662. }
  1663.  
  1664. /**
  1665.  * cik_mm_rdoorbell - read a doorbell dword
  1666.  *
  1667.  * @rdev: radeon_device pointer
  1668.  * @index: doorbell index
  1669.  *
  1670.  * Returns the value in the doorbell aperture at the
  1671.  * requested doorbell index (CIK).
  1672.  */
  1673. u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index)
  1674. {
  1675.         if (index < rdev->doorbell.num_doorbells) {
  1676.                 return readl(rdev->doorbell.ptr + index);
  1677.         } else {
  1678.                 DRM_ERROR("reading beyond doorbell aperture: 0x%08x!\n", index);
  1679.                 return 0;
  1680.         }
  1681. }
  1682.  
  1683. /**
  1684.  * cik_mm_wdoorbell - write a doorbell dword
  1685.  *
  1686.  * @rdev: radeon_device pointer
  1687.  * @index: doorbell index
  1688.  * @v: value to write
  1689.  *
  1690.  * Writes @v to the doorbell aperture at the
  1691.  * requested doorbell index (CIK).
  1692.  */
  1693. void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v)
  1694. {
  1695.         if (index < rdev->doorbell.num_doorbells) {
  1696.                 writel(v, rdev->doorbell.ptr + index);
  1697.         } else {
  1698.                 DRM_ERROR("writing beyond doorbell aperture: 0x%08x!\n", index);
  1699.         }
  1700. }
  1701.  
  1702. #define BONAIRE_IO_MC_REGS_SIZE 36
  1703.  
  1704. static const u32 bonaire_io_mc_regs[BONAIRE_IO_MC_REGS_SIZE][2] =
  1705. {
  1706.         {0x00000070, 0x04400000},
  1707.         {0x00000071, 0x80c01803},
  1708.         {0x00000072, 0x00004004},
  1709.         {0x00000073, 0x00000100},
  1710.         {0x00000074, 0x00ff0000},
  1711.         {0x00000075, 0x34000000},
  1712.         {0x00000076, 0x08000014},
  1713.         {0x00000077, 0x00cc08ec},
  1714.         {0x00000078, 0x00000400},
  1715.         {0x00000079, 0x00000000},
  1716.         {0x0000007a, 0x04090000},
  1717.         {0x0000007c, 0x00000000},
  1718.         {0x0000007e, 0x4408a8e8},
  1719.         {0x0000007f, 0x00000304},
  1720.         {0x00000080, 0x00000000},
  1721.         {0x00000082, 0x00000001},
  1722.         {0x00000083, 0x00000002},
  1723.         {0x00000084, 0xf3e4f400},
  1724.         {0x00000085, 0x052024e3},
  1725.         {0x00000087, 0x00000000},
  1726.         {0x00000088, 0x01000000},
  1727.         {0x0000008a, 0x1c0a0000},
  1728.         {0x0000008b, 0xff010000},
  1729.         {0x0000008d, 0xffffefff},
  1730.         {0x0000008e, 0xfff3efff},
  1731.         {0x0000008f, 0xfff3efbf},
  1732.         {0x00000092, 0xf7ffffff},
  1733.         {0x00000093, 0xffffff7f},
  1734.         {0x00000095, 0x00101101},
  1735.         {0x00000096, 0x00000fff},
  1736.         {0x00000097, 0x00116fff},
  1737.         {0x00000098, 0x60010000},
  1738.         {0x00000099, 0x10010000},
  1739.         {0x0000009a, 0x00006000},
  1740.         {0x0000009b, 0x00001000},
  1741.         {0x0000009f, 0x00b48000}
  1742. };
  1743.  
  1744. #define HAWAII_IO_MC_REGS_SIZE 22
  1745.  
  1746. static const u32 hawaii_io_mc_regs[HAWAII_IO_MC_REGS_SIZE][2] =
  1747. {
  1748.         {0x0000007d, 0x40000000},
  1749.         {0x0000007e, 0x40180304},
  1750.         {0x0000007f, 0x0000ff00},
  1751.         {0x00000081, 0x00000000},
  1752.         {0x00000083, 0x00000800},
  1753.         {0x00000086, 0x00000000},
  1754.         {0x00000087, 0x00000100},
  1755.         {0x00000088, 0x00020100},
  1756.         {0x00000089, 0x00000000},
  1757.         {0x0000008b, 0x00040000},
  1758.         {0x0000008c, 0x00000100},
  1759.         {0x0000008e, 0xff010000},
  1760.         {0x00000090, 0xffffefff},
  1761.         {0x00000091, 0xfff3efff},
  1762.         {0x00000092, 0xfff3efbf},
  1763.         {0x00000093, 0xf7ffffff},
  1764.         {0x00000094, 0xffffff7f},
  1765.         {0x00000095, 0x00000fff},
  1766.         {0x00000096, 0x00116fff},
  1767.         {0x00000097, 0x60010000},
  1768.         {0x00000098, 0x10010000},
  1769.         {0x0000009f, 0x00c79000}
  1770. };
  1771.  
  1772.  
  1773. /**
  1774.  * cik_srbm_select - select specific register instances
  1775.  *
  1776.  * @rdev: radeon_device pointer
  1777.  * @me: selected ME (micro engine)
  1778.  * @pipe: pipe
  1779.  * @queue: queue
  1780.  * @vmid: VMID
  1781.  *
  1782.  * Switches the currently active registers instances.  Some
  1783.  * registers are instanced per VMID, others are instanced per
  1784.  * me/pipe/queue combination.
  1785.  */
  1786. static void cik_srbm_select(struct radeon_device *rdev,
  1787.                             u32 me, u32 pipe, u32 queue, u32 vmid)
  1788. {
  1789.         u32 srbm_gfx_cntl = (PIPEID(pipe & 0x3) |
  1790.                              MEID(me & 0x3) |
  1791.                              VMID(vmid & 0xf) |
  1792.                              QUEUEID(queue & 0x7));
  1793.         WREG32(SRBM_GFX_CNTL, srbm_gfx_cntl);
  1794. }
  1795.  
  1796. /* ucode loading */
  1797. /**
  1798.  * ci_mc_load_microcode - load MC ucode into the hw
  1799.  *
  1800.  * @rdev: radeon_device pointer
  1801.  *
  1802.  * Load the GDDR MC ucode into the hw (CIK).
  1803.  * Returns 0 on success, error on failure.
  1804.  */
  1805. int ci_mc_load_microcode(struct radeon_device *rdev)
  1806. {
  1807.         const __be32 *fw_data = NULL;
  1808.         const __le32 *new_fw_data = NULL;
  1809.         u32 running, blackout = 0;
  1810.         u32 *io_mc_regs = NULL;
  1811.         const __le32 *new_io_mc_regs = NULL;
  1812.         int i, regs_size, ucode_size;
  1813.  
  1814.         if (!rdev->mc_fw)
  1815.                 return -EINVAL;
  1816.  
  1817.         if (rdev->new_fw) {
  1818.                 const struct mc_firmware_header_v1_0 *hdr =
  1819.                         (const struct mc_firmware_header_v1_0 *)rdev->mc_fw->data;
  1820.  
  1821.                 radeon_ucode_print_mc_hdr(&hdr->header);
  1822.  
  1823.                 regs_size = le32_to_cpu(hdr->io_debug_size_bytes) / (4 * 2);
  1824.                 new_io_mc_regs = (const __le32 *)
  1825.                         (rdev->mc_fw->data + le32_to_cpu(hdr->io_debug_array_offset_bytes));
  1826.                 ucode_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
  1827.                 new_fw_data = (const __le32 *)
  1828.                         (rdev->mc_fw->data + le32_to_cpu(hdr->header.ucode_array_offset_bytes));
  1829.         } else {
  1830.         ucode_size = rdev->mc_fw->size / 4;
  1831.  
  1832.         switch (rdev->family) {
  1833.         case CHIP_BONAIRE:
  1834.                 io_mc_regs = (u32 *)&bonaire_io_mc_regs;
  1835.                 regs_size = BONAIRE_IO_MC_REGS_SIZE;
  1836.                 break;
  1837.         case CHIP_HAWAII:
  1838.                 io_mc_regs = (u32 *)&hawaii_io_mc_regs;
  1839.                 regs_size = HAWAII_IO_MC_REGS_SIZE;
  1840.                 break;
  1841.         default:
  1842.                 return -EINVAL;
  1843.         }
  1844.                 fw_data = (const __be32 *)rdev->mc_fw->data;
  1845.         }
  1846.  
  1847.         running = RREG32(MC_SEQ_SUP_CNTL) & RUN_MASK;
  1848.  
  1849.         if (running == 0) {
  1850.                 if (running) {
  1851.                         blackout = RREG32(MC_SHARED_BLACKOUT_CNTL);
  1852.                         WREG32(MC_SHARED_BLACKOUT_CNTL, blackout | 1);
  1853.                 }
  1854.  
  1855.                 /* reset the engine and set to writable */
  1856.                 WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
  1857.                 WREG32(MC_SEQ_SUP_CNTL, 0x00000010);
  1858.  
  1859.                 /* load mc io regs */
  1860.                 for (i = 0; i < regs_size; i++) {
  1861.                         if (rdev->new_fw) {
  1862.                                 WREG32(MC_SEQ_IO_DEBUG_INDEX, le32_to_cpup(new_io_mc_regs++));
  1863.                                 WREG32(MC_SEQ_IO_DEBUG_DATA, le32_to_cpup(new_io_mc_regs++));
  1864.                         } else {
  1865.                         WREG32(MC_SEQ_IO_DEBUG_INDEX, io_mc_regs[(i << 1)]);
  1866.                         WREG32(MC_SEQ_IO_DEBUG_DATA, io_mc_regs[(i << 1) + 1]);
  1867.                 }
  1868.                 }
  1869.                 /* load the MC ucode */
  1870.                 for (i = 0; i < ucode_size; i++) {
  1871.                         if (rdev->new_fw)
  1872.                                 WREG32(MC_SEQ_SUP_PGM, le32_to_cpup(new_fw_data++));
  1873.                         else
  1874.                         WREG32(MC_SEQ_SUP_PGM, be32_to_cpup(fw_data++));
  1875.                 }
  1876.  
  1877.                 /* put the engine back into the active state */
  1878.                 WREG32(MC_SEQ_SUP_CNTL, 0x00000008);
  1879.                 WREG32(MC_SEQ_SUP_CNTL, 0x00000004);
  1880.                 WREG32(MC_SEQ_SUP_CNTL, 0x00000001);
  1881.  
  1882.                 /* wait for training to complete */
  1883.                 for (i = 0; i < rdev->usec_timeout; i++) {
  1884.                         if (RREG32(MC_SEQ_TRAIN_WAKEUP_CNTL) & TRAIN_DONE_D0)
  1885.                                 break;
  1886.                         udelay(1);
  1887.                 }
  1888.                 for (i = 0; i < rdev->usec_timeout; i++) {
  1889.                         if (RREG32(MC_SEQ_TRAIN_WAKEUP_CNTL) & TRAIN_DONE_D1)
  1890.                                 break;
  1891.                         udelay(1);
  1892.                 }
  1893.  
  1894.                 if (running)
  1895.                         WREG32(MC_SHARED_BLACKOUT_CNTL, blackout);
  1896.         }
  1897.  
  1898.         return 0;
  1899. }
  1900.  
  1901. /**
  1902.  * cik_init_microcode - load ucode images from disk
  1903.  *
  1904.  * @rdev: radeon_device pointer
  1905.  *
  1906.  * Use the firmware interface to load the ucode images into
  1907.  * the driver (not loaded into hw).
  1908.  * Returns 0 on success, error on failure.
  1909.  */
  1910. static int cik_init_microcode(struct radeon_device *rdev)
  1911. {
  1912.         const char *chip_name;
  1913.         const char *new_chip_name;
  1914.         size_t pfp_req_size, me_req_size, ce_req_size,
  1915.                 mec_req_size, rlc_req_size, mc_req_size = 0,
  1916.                 sdma_req_size, smc_req_size = 0, mc2_req_size = 0;
  1917.         char fw_name[30];
  1918.         int new_fw = 0;
  1919.         int err;
  1920.         int num_fw;
  1921.  
  1922.         DRM_DEBUG("\n");
  1923.  
  1924.         switch (rdev->family) {
  1925.         case CHIP_BONAIRE:
  1926.                 chip_name = "BONAIRE";
  1927.                 new_chip_name = "bonaire";
  1928.                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
  1929.                 me_req_size = CIK_ME_UCODE_SIZE * 4;
  1930.                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
  1931.                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
  1932.                 rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
  1933.                 mc_req_size = BONAIRE_MC_UCODE_SIZE * 4;
  1934.                 mc2_req_size = BONAIRE_MC2_UCODE_SIZE * 4;
  1935.                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
  1936.                 smc_req_size = ALIGN(BONAIRE_SMC_UCODE_SIZE, 4);
  1937.                 num_fw = 8;
  1938.                 break;
  1939.         case CHIP_HAWAII:
  1940.                 chip_name = "HAWAII";
  1941.                 new_chip_name = "hawaii";
  1942.                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
  1943.                 me_req_size = CIK_ME_UCODE_SIZE * 4;
  1944.                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
  1945.                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
  1946.                 rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
  1947.                 mc_req_size = HAWAII_MC_UCODE_SIZE * 4;
  1948.                 mc2_req_size = HAWAII_MC2_UCODE_SIZE * 4;
  1949.                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
  1950.                 smc_req_size = ALIGN(HAWAII_SMC_UCODE_SIZE, 4);
  1951.                 num_fw = 8;
  1952.                 break;
  1953.         case CHIP_KAVERI:
  1954.                 chip_name = "KAVERI";
  1955.                 new_chip_name = "kaveri";
  1956.                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
  1957.                 me_req_size = CIK_ME_UCODE_SIZE * 4;
  1958.                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
  1959.                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
  1960.                 rlc_req_size = KV_RLC_UCODE_SIZE * 4;
  1961.                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
  1962.                 num_fw = 7;
  1963.                 break;
  1964.         case CHIP_KABINI:
  1965.                 chip_name = "KABINI";
  1966.                 new_chip_name = "kabini";
  1967.                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
  1968.                 me_req_size = CIK_ME_UCODE_SIZE * 4;
  1969.                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
  1970.                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
  1971.                 rlc_req_size = KB_RLC_UCODE_SIZE * 4;
  1972.                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
  1973.                 num_fw = 6;
  1974.                 break;
  1975.         case CHIP_MULLINS:
  1976.                 chip_name = "MULLINS";
  1977.                 new_chip_name = "mullins";
  1978.                 pfp_req_size = CIK_PFP_UCODE_SIZE * 4;
  1979.                 me_req_size = CIK_ME_UCODE_SIZE * 4;
  1980.                 ce_req_size = CIK_CE_UCODE_SIZE * 4;
  1981.                 mec_req_size = CIK_MEC_UCODE_SIZE * 4;
  1982.                 rlc_req_size = ML_RLC_UCODE_SIZE * 4;
  1983.                 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
  1984.                 num_fw = 6;
  1985.                 break;
  1986.         default: BUG();
  1987.         }
  1988.  
  1989.         DRM_INFO("Loading %s Microcode\n", new_chip_name);
  1990.  
  1991.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", new_chip_name);
  1992.         err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
  1993.         if (err) {
  1994.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
  1995.         err = request_firmware(&rdev->pfp_fw, fw_name, rdev->dev);
  1996.         if (err)
  1997.                 goto out;
  1998.         if (rdev->pfp_fw->size != pfp_req_size) {
  1999.                 printk(KERN_ERR
  2000.                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
  2001.                        rdev->pfp_fw->size, fw_name);
  2002.                 err = -EINVAL;
  2003.                 goto out;
  2004.         }
  2005.         } else {
  2006.                 err = radeon_ucode_validate(rdev->pfp_fw);
  2007.                 if (err) {
  2008.                         printk(KERN_ERR
  2009.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2010.                                fw_name);
  2011.                         goto out;
  2012.                 } else {
  2013.                         new_fw++;
  2014.                 }
  2015.         }
  2016.  
  2017.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", new_chip_name);
  2018.         err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
  2019.         if (err) {
  2020.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
  2021.         err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
  2022.         if (err)
  2023.                 goto out;
  2024.         if (rdev->me_fw->size != me_req_size) {
  2025.                 printk(KERN_ERR
  2026.                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
  2027.                        rdev->me_fw->size, fw_name);
  2028.                 err = -EINVAL;
  2029.         }
  2030.         } else {
  2031.                 err = radeon_ucode_validate(rdev->me_fw);
  2032.                 if (err) {
  2033.                         printk(KERN_ERR
  2034.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2035.                                fw_name);
  2036.                         goto out;
  2037.                 } else {
  2038.                         new_fw++;
  2039.                 }
  2040.         }
  2041.  
  2042.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", new_chip_name);
  2043.         err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
  2044.         if (err) {
  2045.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name);
  2046.         err = request_firmware(&rdev->ce_fw, fw_name, rdev->dev);
  2047.         if (err)
  2048.                 goto out;
  2049.         if (rdev->ce_fw->size != ce_req_size) {
  2050.                 printk(KERN_ERR
  2051.                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
  2052.                        rdev->ce_fw->size, fw_name);
  2053.                 err = -EINVAL;
  2054.         }
  2055.         } else {
  2056.                 err = radeon_ucode_validate(rdev->ce_fw);
  2057.                 if (err) {
  2058.                         printk(KERN_ERR
  2059.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2060.                                fw_name);
  2061.                         goto out;
  2062.                 } else {
  2063.                         new_fw++;
  2064.                 }
  2065.         }
  2066.  
  2067.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", new_chip_name);
  2068.         err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
  2069.         if (err) {
  2070.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name);
  2071.         err = request_firmware(&rdev->mec_fw, fw_name, rdev->dev);
  2072.         if (err)
  2073.                 goto out;
  2074.         if (rdev->mec_fw->size != mec_req_size) {
  2075.                 printk(KERN_ERR
  2076.                        "cik_cp: Bogus length %zu in firmware \"%s\"\n",
  2077.                        rdev->mec_fw->size, fw_name);
  2078.                 err = -EINVAL;
  2079.         }
  2080.         } else {
  2081.                 err = radeon_ucode_validate(rdev->mec_fw);
  2082.                 if (err) {
  2083.                         printk(KERN_ERR
  2084.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2085.                                fw_name);
  2086.                         goto out;
  2087.                 } else {
  2088.                         new_fw++;
  2089.                 }
  2090.         }
  2091.  
  2092.         if (rdev->family == CHIP_KAVERI) {
  2093.                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", new_chip_name);
  2094.                 err = request_firmware(&rdev->mec2_fw, fw_name, rdev->dev);
  2095.                 if (err) {
  2096.                         goto out;
  2097.                 } else {
  2098.                         err = radeon_ucode_validate(rdev->mec2_fw);
  2099.                         if (err) {
  2100.                                 goto out;
  2101.                         } else {
  2102.                                 new_fw++;
  2103.                         }
  2104.                 }
  2105.         }
  2106.  
  2107.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", new_chip_name);
  2108.         err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
  2109.         if (err) {
  2110.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name);
  2111.         err = request_firmware(&rdev->rlc_fw, fw_name, rdev->dev);
  2112.         if (err)
  2113.                 goto out;
  2114.         if (rdev->rlc_fw->size != rlc_req_size) {
  2115.                 printk(KERN_ERR
  2116.                        "cik_rlc: Bogus length %zu in firmware \"%s\"\n",
  2117.                        rdev->rlc_fw->size, fw_name);
  2118.                 err = -EINVAL;
  2119.         }
  2120.         } else {
  2121.                 err = radeon_ucode_validate(rdev->rlc_fw);
  2122.                 if (err) {
  2123.                         printk(KERN_ERR
  2124.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2125.                                fw_name);
  2126.                         goto out;
  2127.                 } else {
  2128.                         new_fw++;
  2129.                 }
  2130.         }
  2131.  
  2132.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", new_chip_name);
  2133.         err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
  2134.         if (err) {
  2135.         snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name);
  2136.         err = request_firmware(&rdev->sdma_fw, fw_name, rdev->dev);
  2137.         if (err)
  2138.                 goto out;
  2139.         if (rdev->sdma_fw->size != sdma_req_size) {
  2140.                 printk(KERN_ERR
  2141.                        "cik_sdma: Bogus length %zu in firmware \"%s\"\n",
  2142.                        rdev->sdma_fw->size, fw_name);
  2143.                 err = -EINVAL;
  2144.         }
  2145.         } else {
  2146.                 err = radeon_ucode_validate(rdev->sdma_fw);
  2147.                 if (err) {
  2148.                         printk(KERN_ERR
  2149.                                "cik_fw: validation failed for firmware \"%s\"\n",
  2150.                                fw_name);
  2151.                         goto out;
  2152.                 } else {
  2153.                         new_fw++;
  2154.                 }
  2155.         }
  2156.  
  2157.         /* No SMC, MC ucode on APUs */
  2158.         if (!(rdev->flags & RADEON_IS_IGP)) {
  2159.                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", new_chip_name);
  2160.                 err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
  2161.                 if (err) {
  2162.                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc2.bin", chip_name);
  2163.                 err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
  2164.                 if (err) {
  2165.                         snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
  2166.                         err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
  2167.                         if (err)
  2168.                                 goto out;
  2169.                 }
  2170.                 if ((rdev->mc_fw->size != mc_req_size) &&
  2171.                     (rdev->mc_fw->size != mc2_req_size)){
  2172.                         printk(KERN_ERR
  2173.                                "cik_mc: Bogus length %zu in firmware \"%s\"\n",
  2174.                                rdev->mc_fw->size, fw_name);
  2175.                         err = -EINVAL;
  2176.                 }
  2177.                 DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->size);
  2178.                 } else {
  2179.                         err = radeon_ucode_validate(rdev->mc_fw);
  2180.                         if (err) {
  2181.                                 printk(KERN_ERR
  2182.                                        "cik_fw: validation failed for firmware \"%s\"\n",
  2183.                                        fw_name);
  2184.                                 goto out;
  2185.                         } else {
  2186.                                 new_fw++;
  2187.                         }
  2188.                 }
  2189.  
  2190.                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", new_chip_name);
  2191.                 err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
  2192.                 if (err) {
  2193.                 snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
  2194.                 err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
  2195.                 if (err) {
  2196.                         printk(KERN_ERR
  2197.                                "smc: error loading firmware \"%s\"\n",
  2198.                                fw_name);
  2199.                         release_firmware(rdev->smc_fw);
  2200.                         rdev->smc_fw = NULL;
  2201.                         err = 0;
  2202.                 } else if (rdev->smc_fw->size != smc_req_size) {
  2203.                         printk(KERN_ERR
  2204.                                "cik_smc: Bogus length %zu in firmware \"%s\"\n",
  2205.                                rdev->smc_fw->size, fw_name);
  2206.                         err = -EINVAL;
  2207.                 }
  2208.                 } else {
  2209.                         err = radeon_ucode_validate(rdev->smc_fw);
  2210.                         if (err) {
  2211.                                 printk(KERN_ERR
  2212.                                        "cik_fw: validation failed for firmware \"%s\"\n",
  2213.                                        fw_name);
  2214.                                 goto out;
  2215.                         } else {
  2216.                                 new_fw++;
  2217.                         }
  2218.                 }
  2219.         }
  2220.  
  2221.         if (new_fw == 0) {
  2222.                 rdev->new_fw = false;
  2223.         } else if (new_fw < num_fw) {
  2224.                 printk(KERN_ERR "ci_fw: mixing new and old firmware!\n");
  2225.                 err = -EINVAL;
  2226.         } else {
  2227.                 rdev->new_fw = true;
  2228.         }
  2229.  
  2230. out:
  2231.         if (err) {
  2232.                 if (err != -EINVAL)
  2233.                         printk(KERN_ERR
  2234.                                "cik_cp: Failed to load firmware \"%s\"\n",
  2235.                                fw_name);
  2236.                 release_firmware(rdev->pfp_fw);
  2237.                 rdev->pfp_fw = NULL;
  2238.                 release_firmware(rdev->me_fw);
  2239.                 rdev->me_fw = NULL;
  2240.                 release_firmware(rdev->ce_fw);
  2241.                 rdev->ce_fw = NULL;
  2242.                 release_firmware(rdev->mec_fw);
  2243.                 rdev->mec_fw = NULL;
  2244.                 release_firmware(rdev->mec2_fw);
  2245.                 rdev->mec2_fw = NULL;
  2246.                 release_firmware(rdev->rlc_fw);
  2247.                 rdev->rlc_fw = NULL;
  2248.                 release_firmware(rdev->sdma_fw);
  2249.                 rdev->sdma_fw = NULL;
  2250.                 release_firmware(rdev->mc_fw);
  2251.                 rdev->mc_fw = NULL;
  2252.                 release_firmware(rdev->smc_fw);
  2253.                 rdev->smc_fw = NULL;
  2254.         }
  2255.         return err;
  2256. }
  2257.  
  2258. /*
  2259.  * Core functions
  2260.  */
  2261. /**
  2262.  * cik_tiling_mode_table_init - init the hw tiling table
  2263.  *
  2264.  * @rdev: radeon_device pointer
  2265.  *
  2266.  * Starting with SI, the tiling setup is done globally in a
  2267.  * set of 32 tiling modes.  Rather than selecting each set of
  2268.  * parameters per surface as on older asics, we just select
  2269.  * which index in the tiling table we want to use, and the
  2270.  * surface uses those parameters (CIK).
  2271.  */
  2272. static void cik_tiling_mode_table_init(struct radeon_device *rdev)
  2273. {
  2274.         const u32 num_tile_mode_states = 32;
  2275.         const u32 num_secondary_tile_mode_states = 16;
  2276.         u32 reg_offset, gb_tile_moden, split_equal_to_row_size;
  2277.         u32 num_pipe_configs;
  2278.         u32 num_rbs = rdev->config.cik.max_backends_per_se *
  2279.                 rdev->config.cik.max_shader_engines;
  2280.  
  2281.         switch (rdev->config.cik.mem_row_size_in_kb) {
  2282.         case 1:
  2283.                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_1KB;
  2284.                 break;
  2285.         case 2:
  2286.         default:
  2287.                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_2KB;
  2288.                 break;
  2289.         case 4:
  2290.                 split_equal_to_row_size = ADDR_SURF_TILE_SPLIT_4KB;
  2291.                 break;
  2292.         }
  2293.  
  2294.         num_pipe_configs = rdev->config.cik.max_tile_pipes;
  2295.         if (num_pipe_configs > 8)
  2296.                 num_pipe_configs = 16;
  2297.  
  2298.         if (num_pipe_configs == 16) {
  2299.                 for (reg_offset = 0; reg_offset < num_tile_mode_states; reg_offset++) {
  2300.                         switch (reg_offset) {
  2301.                         case 0:
  2302.                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
  2303.                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
  2304.                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
  2305.                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_64B));
  2306.                                 break;
  2307.                         case 1:
  2308.                                 gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) |
  2309.                                                  MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING) |
  2310.                                                  PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) |
  2311.                                                  TILE_SPLIT(ADDR_SURF_TILE_SPLIT_128B))