Subversion Repositories Kolibri OS

Rev

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