Subversion Repositories Kolibri OS

Rev

Rev 6938 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright 2013 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.  */
  23.  
  24. #include "drmP.h"
  25. #include "radeon.h"
  26. #include "radeon_asic.h"
  27. #include "sid.h"
  28. #include "r600_dpm.h"
  29. #include "si_dpm.h"
  30. #include "atom.h"
  31. #include <linux/math64.h>
  32. #include <linux/seq_file.h>
  33.  
  34. #define MC_CG_ARB_FREQ_F0           0x0a
  35. #define MC_CG_ARB_FREQ_F1           0x0b
  36. #define MC_CG_ARB_FREQ_F2           0x0c
  37. #define MC_CG_ARB_FREQ_F3           0x0d
  38.  
  39. #define SMC_RAM_END                 0x20000
  40.  
  41. #define SCLK_MIN_DEEPSLEEP_FREQ     1350
  42.  
  43. static const struct si_cac_config_reg cac_weights_tahiti[] =
  44. {
  45.         { 0x0, 0x0000ffff, 0, 0xc, SISLANDS_CACCONFIG_CGIND },
  46.         { 0x0, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  47.         { 0x1, 0x0000ffff, 0, 0x101, SISLANDS_CACCONFIG_CGIND },
  48.         { 0x1, 0xffff0000, 16, 0xc, SISLANDS_CACCONFIG_CGIND },
  49.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  50.         { 0x3, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  51.         { 0x3, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  52.         { 0x4, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  53.         { 0x4, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  54.         { 0x5, 0x0000ffff, 0, 0x8fc, SISLANDS_CACCONFIG_CGIND },
  55.         { 0x5, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  56.         { 0x6, 0x0000ffff, 0, 0x95, SISLANDS_CACCONFIG_CGIND },
  57.         { 0x6, 0xffff0000, 16, 0x34e, SISLANDS_CACCONFIG_CGIND },
  58.         { 0x18f, 0x0000ffff, 0, 0x1a1, SISLANDS_CACCONFIG_CGIND },
  59.         { 0x7, 0x0000ffff, 0, 0xda, SISLANDS_CACCONFIG_CGIND },
  60.         { 0x7, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  61.         { 0x8, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  62.         { 0x8, 0xffff0000, 16, 0x46, SISLANDS_CACCONFIG_CGIND },
  63.         { 0x9, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  64.         { 0xa, 0x0000ffff, 0, 0x208, SISLANDS_CACCONFIG_CGIND },
  65.         { 0xb, 0x0000ffff, 0, 0xe7, SISLANDS_CACCONFIG_CGIND },
  66.         { 0xb, 0xffff0000, 16, 0x948, SISLANDS_CACCONFIG_CGIND },
  67.         { 0xc, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  68.         { 0xd, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  69.         { 0xd, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  70.         { 0xe, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  71.         { 0xf, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  72.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  73.         { 0x10, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  74.         { 0x10, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  75.         { 0x11, 0x0000ffff, 0, 0x167, SISLANDS_CACCONFIG_CGIND },
  76.         { 0x11, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  77.         { 0x12, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  78.         { 0x13, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  79.         { 0x13, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  80.         { 0x14, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  81.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  82.         { 0x15, 0xffff0000, 16, 0x2, SISLANDS_CACCONFIG_CGIND },
  83.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  84.         { 0x16, 0x0000ffff, 0, 0x31, SISLANDS_CACCONFIG_CGIND },
  85.         { 0x16, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  86.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  87.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  88.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  89.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  90.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  91.         { 0x1a, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  92.         { 0x1a, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  93.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  94.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  95.         { 0x1c, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  96.         { 0x1c, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  97.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  98.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  99.         { 0x1e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  100.         { 0x1e, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  101.         { 0x1f, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  102.         { 0x1f, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  103.         { 0x20, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  104.         { 0x6d, 0x0000ffff, 0, 0x18e, SISLANDS_CACCONFIG_CGIND },
  105.         { 0xFFFFFFFF }
  106. };
  107.  
  108. static const struct si_cac_config_reg lcac_tahiti[] =
  109. {
  110.         { 0x143, 0x0001fffe, 1, 0x3, SISLANDS_CACCONFIG_CGIND },
  111.         { 0x143, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  112.         { 0x146, 0x0001fffe, 1, 0x3, SISLANDS_CACCONFIG_CGIND },
  113.         { 0x146, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  114.         { 0x149, 0x0001fffe, 1, 0x3, SISLANDS_CACCONFIG_CGIND },
  115.         { 0x149, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  116.         { 0x14c, 0x0001fffe, 1, 0x3, SISLANDS_CACCONFIG_CGIND },
  117.         { 0x14c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  118.         { 0x98, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  119.         { 0x98, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  120.         { 0x9b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  121.         { 0x9b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  122.         { 0x9e, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  123.         { 0x9e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  124.         { 0x101, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  125.         { 0x101, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  126.         { 0x104, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  127.         { 0x104, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  128.         { 0x107, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  129.         { 0x107, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  130.         { 0x10a, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  131.         { 0x10a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  132.         { 0x10d, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  133.         { 0x10d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  134.         { 0x8c, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  135.         { 0x8c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  136.         { 0x8f, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  137.         { 0x8f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  138.         { 0x92, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  139.         { 0x92, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  140.         { 0x95, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  141.         { 0x95, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  142.         { 0x14f, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  143.         { 0x14f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  144.         { 0x152, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  145.         { 0x152, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  146.         { 0x155, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  147.         { 0x155, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  148.         { 0x158, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  149.         { 0x158, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  150.         { 0x110, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  151.         { 0x110, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  152.         { 0x113, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  153.         { 0x113, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  154.         { 0x116, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  155.         { 0x116, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  156.         { 0x119, 0x0001fffe, 1, 0x8, SISLANDS_CACCONFIG_CGIND },
  157.         { 0x119, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  158.         { 0x11c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  159.         { 0x11c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  160.         { 0x11f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  161.         { 0x11f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  162.         { 0x122, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  163.         { 0x122, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  164.         { 0x125, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  165.         { 0x125, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  166.         { 0x128, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  167.         { 0x128, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  168.         { 0x12b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  169.         { 0x12b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  170.         { 0x15b, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  171.         { 0x15b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  172.         { 0x15e, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  173.         { 0x15e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  174.         { 0x161, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  175.         { 0x161, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  176.         { 0x164, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  177.         { 0x164, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  178.         { 0x167, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  179.         { 0x167, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  180.         { 0x16a, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  181.         { 0x16a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  182.         { 0x16d, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  183.         { 0x16d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  184.         { 0x170, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  185.         { 0x170, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  186.         { 0x173, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  187.         { 0x173, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  188.         { 0x176, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  189.         { 0x176, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  190.         { 0x179, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  191.         { 0x179, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  192.         { 0x17c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  193.         { 0x17c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  194.         { 0x17f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  195.         { 0x17f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  196.         { 0xFFFFFFFF }
  197.  
  198. };
  199.  
  200. static const struct si_cac_config_reg cac_override_tahiti[] =
  201. {
  202.         { 0xFFFFFFFF }
  203. };
  204.  
  205. static const struct si_powertune_data powertune_data_tahiti =
  206. {
  207.         ((1 << 16) | 27027),
  208.         6,
  209.         0,
  210.         4,
  211.         95,
  212.         {
  213.                 0UL,
  214.                 0UL,
  215.                 4521550UL,
  216.                 309631529UL,
  217.                 -1270850L,
  218.                 4513710L,
  219.                 40
  220.         },
  221.         595000000UL,
  222.         12,
  223.         {
  224.                 0,
  225.                 0,
  226.                 0,
  227.                 0,
  228.                 0,
  229.                 0,
  230.                 0,
  231.                 0
  232.         },
  233.         true
  234. };
  235.  
  236. static const struct si_dte_data dte_data_tahiti =
  237. {
  238.         { 1159409, 0, 0, 0, 0 },
  239.         { 777, 0, 0, 0, 0 },
  240.         2,
  241.         54000,
  242.         127000,
  243.         25,
  244.         2,
  245.         10,
  246.         13,
  247.         { 27, 31, 35, 39, 43, 47, 54, 61, 67, 74, 81, 88, 95, 0, 0, 0 },
  248.         { 240888759, 221057860, 235370597, 162287531, 158510299, 131423027, 116673180, 103067515, 87941937, 76209048, 68209175, 64090048, 58301890, 0, 0, 0 },
  249.         { 12024, 11189, 11451, 8411, 7939, 6666, 5681, 4905, 4241, 3720, 3354, 3122, 2890, 0, 0, 0 },
  250.         85,
  251.         false
  252. };
  253.  
  254. static const struct si_dte_data dte_data_tahiti_le =
  255. {
  256.         { 0x1E8480, 0x7A1200, 0x2160EC0, 0x3938700, 0 },
  257.         { 0x7D, 0x7D, 0x4E4, 0xB00, 0 },
  258.         0x5,
  259.         0xAFC8,
  260.         0x64,
  261.         0x32,
  262.         1,
  263.         0,
  264.         0x10,
  265.         { 0x78, 0x7C, 0x82, 0x88, 0x8E, 0x94, 0x9A, 0xA0, 0xA6, 0xAC, 0xB0, 0xB4, 0xB8, 0xBC, 0xC0, 0xC4 },
  266.         { 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700, 0x3938700 },
  267.         { 0x2AF8, 0x2AF8, 0x29BB, 0x27F9, 0x2637, 0x2475, 0x22B3, 0x20F1, 0x1F2F, 0x1D6D, 0x1734, 0x1414, 0x10F4, 0xDD4, 0xAB4, 0x794 },
  268.         85,
  269.         true
  270. };
  271.  
  272. static const struct si_dte_data dte_data_tahiti_pro =
  273. {
  274.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  275.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  276.         5,
  277.         45000,
  278.         100,
  279.         0xA,
  280.         1,
  281.         0,
  282.         0x10,
  283.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  284.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  285.         { 0x7D0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  286.         90,
  287.         true
  288. };
  289.  
  290. static const struct si_dte_data dte_data_new_zealand =
  291. {
  292.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0 },
  293.         { 0x29B, 0x3E9, 0x537, 0x7D2, 0 },
  294.         0x5,
  295.         0xAFC8,
  296.         0x69,
  297.         0x32,
  298.         1,
  299.         0,
  300.         0x10,
  301.         { 0x82, 0xA0, 0xB4, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
  302.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  303.         { 0xDAC, 0x1388, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685, 0x685 },
  304.         85,
  305.         true
  306. };
  307.  
  308. static const struct si_dte_data dte_data_aruba_pro =
  309. {
  310.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  311.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  312.         5,
  313.         45000,
  314.         100,
  315.         0xA,
  316.         1,
  317.         0,
  318.         0x10,
  319.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  320.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  321.         { 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  322.         90,
  323.         true
  324. };
  325.  
  326. static const struct si_dte_data dte_data_malta =
  327. {
  328.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  329.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  330.         5,
  331.         45000,
  332.         100,
  333.         0xA,
  334.         1,
  335.         0,
  336.         0x10,
  337.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  338.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  339.         { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  340.         90,
  341.         true
  342. };
  343.  
  344. struct si_cac_config_reg cac_weights_pitcairn[] =
  345. {
  346.         { 0x0, 0x0000ffff, 0, 0x8a, SISLANDS_CACCONFIG_CGIND },
  347.         { 0x0, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  348.         { 0x1, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  349.         { 0x1, 0xffff0000, 16, 0x24d, SISLANDS_CACCONFIG_CGIND },
  350.         { 0x2, 0x0000ffff, 0, 0x19, SISLANDS_CACCONFIG_CGIND },
  351.         { 0x3, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  352.         { 0x3, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  353.         { 0x4, 0x0000ffff, 0, 0x76, SISLANDS_CACCONFIG_CGIND },
  354.         { 0x4, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  355.         { 0x5, 0x0000ffff, 0, 0xc11, SISLANDS_CACCONFIG_CGIND },
  356.         { 0x5, 0xffff0000, 16, 0x7f3, SISLANDS_CACCONFIG_CGIND },
  357.         { 0x6, 0x0000ffff, 0, 0x403, SISLANDS_CACCONFIG_CGIND },
  358.         { 0x6, 0xffff0000, 16, 0x367, SISLANDS_CACCONFIG_CGIND },
  359.         { 0x18f, 0x0000ffff, 0, 0x4c9, SISLANDS_CACCONFIG_CGIND },
  360.         { 0x7, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  361.         { 0x7, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  362.         { 0x8, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  363.         { 0x8, 0xffff0000, 16, 0x45d, SISLANDS_CACCONFIG_CGIND },
  364.         { 0x9, 0x0000ffff, 0, 0x36d, SISLANDS_CACCONFIG_CGIND },
  365.         { 0xa, 0x0000ffff, 0, 0x534, SISLANDS_CACCONFIG_CGIND },
  366.         { 0xb, 0x0000ffff, 0, 0x5da, SISLANDS_CACCONFIG_CGIND },
  367.         { 0xb, 0xffff0000, 16, 0x880, SISLANDS_CACCONFIG_CGIND },
  368.         { 0xc, 0x0000ffff, 0, 0x201, SISLANDS_CACCONFIG_CGIND },
  369.         { 0xd, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  370.         { 0xd, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  371.         { 0xe, 0x0000ffff, 0, 0x9f, SISLANDS_CACCONFIG_CGIND },
  372.         { 0xf, 0x0000ffff, 0, 0x1f, SISLANDS_CACCONFIG_CGIND },
  373.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  374.         { 0x10, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  375.         { 0x10, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  376.         { 0x11, 0x0000ffff, 0, 0x5de, SISLANDS_CACCONFIG_CGIND },
  377.         { 0x11, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  378.         { 0x12, 0x0000ffff, 0, 0x7b, SISLANDS_CACCONFIG_CGIND },
  379.         { 0x13, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  380.         { 0x13, 0xffff0000, 16, 0x13, SISLANDS_CACCONFIG_CGIND },
  381.         { 0x14, 0x0000ffff, 0, 0xf9, SISLANDS_CACCONFIG_CGIND },
  382.         { 0x15, 0x0000ffff, 0, 0x66, SISLANDS_CACCONFIG_CGIND },
  383.         { 0x15, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  384.         { 0x4e, 0x0000ffff, 0, 0x13, SISLANDS_CACCONFIG_CGIND },
  385.         { 0x16, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  386.         { 0x16, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  387.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  388.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  389.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  390.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  391.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  392.         { 0x1a, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  393.         { 0x1a, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  394.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  395.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  396.         { 0x1c, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  397.         { 0x1c, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  398.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  399.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  400.         { 0x1e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  401.         { 0x1e, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  402.         { 0x1f, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  403.         { 0x1f, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  404.         { 0x20, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  405.         { 0x6d, 0x0000ffff, 0, 0x186, SISLANDS_CACCONFIG_CGIND },
  406.         { 0xFFFFFFFF }
  407. };
  408.  
  409. static const struct si_cac_config_reg lcac_pitcairn[] =
  410. {
  411.         { 0x98, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  412.         { 0x98, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  413.         { 0x104, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  414.         { 0x104, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  415.         { 0x110, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  416.         { 0x110, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  417.         { 0x14f, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  418.         { 0x14f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  419.         { 0x8c, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  420.         { 0x8c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  421.         { 0x143, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  422.         { 0x143, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  423.         { 0x9b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  424.         { 0x9b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  425.         { 0x107, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  426.         { 0x107, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  427.         { 0x113, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  428.         { 0x113, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  429.         { 0x152, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  430.         { 0x152, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  431.         { 0x8f, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  432.         { 0x8f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  433.         { 0x146, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  434.         { 0x146, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  435.         { 0x9e, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  436.         { 0x9e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  437.         { 0x10a, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  438.         { 0x10a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  439.         { 0x116, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  440.         { 0x116, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  441.         { 0x155, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  442.         { 0x155, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  443.         { 0x92, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  444.         { 0x92, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  445.         { 0x149, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  446.         { 0x149, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  447.         { 0x101, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  448.         { 0x101, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  449.         { 0x10d, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  450.         { 0x10d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  451.         { 0x119, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  452.         { 0x119, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  453.         { 0x158, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  454.         { 0x158, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  455.         { 0x95, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  456.         { 0x95, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  457.         { 0x14c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  458.         { 0x14c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  459.         { 0x11c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  460.         { 0x11c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  461.         { 0x11f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  462.         { 0x11f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  463.         { 0x122, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  464.         { 0x122, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  465.         { 0x125, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  466.         { 0x125, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  467.         { 0x128, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  468.         { 0x128, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  469.         { 0x12b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  470.         { 0x12b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  471.         { 0x164, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  472.         { 0x164, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  473.         { 0x167, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  474.         { 0x167, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  475.         { 0x16a, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  476.         { 0x16a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  477.         { 0x15e, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  478.         { 0x15e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  479.         { 0x161, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  480.         { 0x161, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  481.         { 0x15b, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  482.         { 0x15b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  483.         { 0x16d, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  484.         { 0x16d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  485.         { 0x170, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  486.         { 0x170, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  487.         { 0x173, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  488.         { 0x173, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  489.         { 0x176, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  490.         { 0x176, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  491.         { 0x179, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  492.         { 0x179, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  493.         { 0x17c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  494.         { 0x17c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  495.         { 0x17f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  496.         { 0x17f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  497.         { 0xFFFFFFFF }
  498. };
  499.  
  500. static const struct si_cac_config_reg cac_override_pitcairn[] =
  501. {
  502.         { 0xFFFFFFFF }
  503. };
  504.  
  505. static const struct si_powertune_data powertune_data_pitcairn =
  506. {
  507.         ((1 << 16) | 27027),
  508.         5,
  509.         0,
  510.         6,
  511.         100,
  512.         {
  513.                 51600000UL,
  514.                 1800000UL,
  515.                 7194395UL,
  516.                 309631529UL,
  517.                 -1270850L,
  518.                 4513710L,
  519.                 100
  520.         },
  521.         117830498UL,
  522.         12,
  523.         {
  524.                 0,
  525.                 0,
  526.                 0,
  527.                 0,
  528.                 0,
  529.                 0,
  530.                 0,
  531.                 0
  532.         },
  533.         true
  534. };
  535.  
  536. static const struct si_dte_data dte_data_pitcairn =
  537. {
  538.         { 0, 0, 0, 0, 0 },
  539.         { 0, 0, 0, 0, 0 },
  540.         0,
  541.         0,
  542.         0,
  543.         0,
  544.         0,
  545.         0,
  546.         0,
  547.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  548.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  549.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  550.         0,
  551.         false
  552. };
  553.  
  554. static const struct si_dte_data dte_data_curacao_xt =
  555. {
  556.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  557.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  558.         5,
  559.         45000,
  560.         100,
  561.         0xA,
  562.         1,
  563.         0,
  564.         0x10,
  565.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  566.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  567.         { 0x1D17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  568.         90,
  569.         true
  570. };
  571.  
  572. static const struct si_dte_data dte_data_curacao_pro =
  573. {
  574.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  575.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  576.         5,
  577.         45000,
  578.         100,
  579.         0xA,
  580.         1,
  581.         0,
  582.         0x10,
  583.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  584.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  585.         { 0x1D17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  586.         90,
  587.         true
  588. };
  589.  
  590. static const struct si_dte_data dte_data_neptune_xt =
  591. {
  592.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  593.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  594.         5,
  595.         45000,
  596.         100,
  597.         0xA,
  598.         1,
  599.         0,
  600.         0x10,
  601.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  602.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  603.         { 0x3A2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  604.         90,
  605.         true
  606. };
  607.  
  608. static const struct si_cac_config_reg cac_weights_chelsea_pro[] =
  609. {
  610.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  611.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  612.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  613.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  614.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  615.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  616.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  617.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  618.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  619.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  620.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  621.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  622.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  623.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  624.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  625.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  626.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  627.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  628.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  629.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  630.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  631.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  632.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  633.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  634.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  635.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  636.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  637.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  638.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  639.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  640.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  641.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  642.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  643.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  644.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  645.         { 0x14, 0x0000ffff, 0, 0x2BD, SISLANDS_CACCONFIG_CGIND },
  646.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  647.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  648.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  649.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  650.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  651.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  652.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  653.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  654.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  655.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  656.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  657.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  658.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  659.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  660.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  661.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  662.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  663.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  664.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  665.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  666.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  667.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  668.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  669.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  670.         { 0xFFFFFFFF }
  671. };
  672.  
  673. static const struct si_cac_config_reg cac_weights_chelsea_xt[] =
  674. {
  675.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  676.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  677.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  678.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  679.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  680.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  681.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  682.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  683.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  684.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  685.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  686.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  687.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  688.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  689.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  690.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  691.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  692.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  693.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  694.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  695.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  696.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  697.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  698.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  699.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  700.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  701.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  702.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  703.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  704.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  705.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  706.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  707.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  708.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  709.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  710.         { 0x14, 0x0000ffff, 0, 0x30A, SISLANDS_CACCONFIG_CGIND },
  711.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  712.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  713.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  714.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  715.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  716.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  717.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  718.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  719.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  720.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  721.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  722.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  723.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  724.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  725.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  726.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  727.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  728.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  729.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  730.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  731.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  732.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  733.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  734.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  735.         { 0xFFFFFFFF }
  736. };
  737.  
  738. static const struct si_cac_config_reg cac_weights_heathrow[] =
  739. {
  740.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  741.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  742.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  743.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  744.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  745.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  746.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  747.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  748.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  749.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  750.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  751.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  752.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  753.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  754.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  755.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  756.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  757.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  758.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  759.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  760.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  761.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  762.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  763.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  764.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  765.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  766.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  767.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  768.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  769.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  770.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  771.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  772.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  773.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  774.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  775.         { 0x14, 0x0000ffff, 0, 0x362, SISLANDS_CACCONFIG_CGIND },
  776.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  777.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  778.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  779.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  780.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  781.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  782.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  783.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  784.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  785.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  786.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  787.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  788.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  789.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  790.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  791.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  792.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  793.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  794.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  795.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  796.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  797.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  798.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  799.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  800.         { 0xFFFFFFFF }
  801. };
  802.  
  803. static const struct si_cac_config_reg cac_weights_cape_verde_pro[] =
  804. {
  805.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  806.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  807.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  808.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  809.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  810.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  811.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  812.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  813.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  814.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  815.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  816.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  817.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  818.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  819.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  820.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  821.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  822.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  823.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  824.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  825.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  826.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  827.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  828.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  829.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  830.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  831.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  832.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  833.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  834.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  835.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  836.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  837.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  838.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  839.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  840.         { 0x14, 0x0000ffff, 0, 0x315, SISLANDS_CACCONFIG_CGIND },
  841.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  842.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  843.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  844.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  845.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  846.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  847.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  848.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  849.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  850.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  851.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  852.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  853.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  854.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  855.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  856.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  857.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  858.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  859.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  860.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  861.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  862.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  863.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  864.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  865.         { 0xFFFFFFFF }
  866. };
  867.  
  868. static const struct si_cac_config_reg cac_weights_cape_verde[] =
  869. {
  870.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  871.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  872.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  873.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  874.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  875.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  876.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  877.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  878.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  879.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  880.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  881.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  882.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  883.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  884.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  885.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  886.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  887.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  888.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  889.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  890.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  891.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  892.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  893.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  894.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  895.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  896.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  897.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  898.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  899.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  900.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  901.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  902.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  903.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  904.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  905.         { 0x14, 0x0000ffff, 0, 0x3BA, SISLANDS_CACCONFIG_CGIND },
  906.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  907.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  908.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  909.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  910.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  911.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  912.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  913.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  914.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  915.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  916.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  917.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  918.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  919.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  920.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  921.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  922.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  923.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  924.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  925.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  926.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  927.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  928.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  929.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  930.         { 0xFFFFFFFF }
  931. };
  932.  
  933. static const struct si_cac_config_reg lcac_cape_verde[] =
  934. {
  935.         { 0x98, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  936.         { 0x98, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  937.         { 0x104, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  938.         { 0x104, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  939.         { 0x110, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  940.         { 0x110, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  941.         { 0x14f, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  942.         { 0x14f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  943.         { 0x8c, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  944.         { 0x8c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  945.         { 0x143, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  946.         { 0x143, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  947.         { 0x9b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  948.         { 0x9b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  949.         { 0x107, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  950.         { 0x107, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  951.         { 0x113, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  952.         { 0x113, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  953.         { 0x152, 0x0001fffe, 1, 0x5, SISLANDS_CACCONFIG_CGIND },
  954.         { 0x152, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  955.         { 0x8f, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  956.         { 0x8f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  957.         { 0x146, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  958.         { 0x146, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  959.         { 0x11c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  960.         { 0x11c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  961.         { 0x11f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  962.         { 0x11f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  963.         { 0x164, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  964.         { 0x164, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  965.         { 0x167, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  966.         { 0x167, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  967.         { 0x16a, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  968.         { 0x16a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  969.         { 0x15e, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  970.         { 0x15e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  971.         { 0x161, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  972.         { 0x161, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  973.         { 0x15b, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  974.         { 0x15b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  975.         { 0x16d, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  976.         { 0x16d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  977.         { 0x170, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  978.         { 0x170, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  979.         { 0x173, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  980.         { 0x173, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  981.         { 0x176, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  982.         { 0x176, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  983.         { 0x179, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  984.         { 0x179, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  985.         { 0x17c, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  986.         { 0x17c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  987.         { 0x17f, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  988.         { 0x17f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  989.         { 0xFFFFFFFF }
  990. };
  991.  
  992. static const struct si_cac_config_reg cac_override_cape_verde[] =
  993. {
  994.         { 0xFFFFFFFF }
  995. };
  996.  
  997. static const struct si_powertune_data powertune_data_cape_verde =
  998. {
  999.         ((1 << 16) | 0x6993),
  1000.         5,
  1001.         0,
  1002.         7,
  1003.         105,
  1004.         {
  1005.                 0UL,
  1006.                 0UL,
  1007.                 7194395UL,
  1008.                 309631529UL,
  1009.                 -1270850L,
  1010.                 4513710L,
  1011.                 100
  1012.         },
  1013.         117830498UL,
  1014.         12,
  1015.         {
  1016.                 0,
  1017.                 0,
  1018.                 0,
  1019.                 0,
  1020.                 0,
  1021.                 0,
  1022.                 0,
  1023.                 0
  1024.         },
  1025.         true
  1026. };
  1027.  
  1028. static const struct si_dte_data dte_data_cape_verde =
  1029. {
  1030.         { 0, 0, 0, 0, 0 },
  1031.         { 0, 0, 0, 0, 0 },
  1032.         0,
  1033.         0,
  1034.         0,
  1035.         0,
  1036.         0,
  1037.         0,
  1038.         0,
  1039.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1040.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1041.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1042.         0,
  1043.         false
  1044. };
  1045.  
  1046. static const struct si_dte_data dte_data_venus_xtx =
  1047. {
  1048.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  1049.         { 0x71C, 0xAAB, 0xE39, 0x11C7, 0x0 },
  1050.         5,
  1051.         55000,
  1052.         0x69,
  1053.         0xA,
  1054.         1,
  1055.         0,
  1056.         0x3,
  1057.         { 0x96, 0xB4, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1058.         { 0x895440, 0x3D0900, 0x989680, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1059.         { 0xD6D8, 0x88B8, 0x1555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1060.         90,
  1061.         true
  1062. };
  1063.  
  1064. static const struct si_dte_data dte_data_venus_xt =
  1065. {
  1066.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  1067.         { 0xBDA, 0x11C7, 0x17B4, 0x1DA1, 0x0 },
  1068.         5,
  1069.         55000,
  1070.         0x69,
  1071.         0xA,
  1072.         1,
  1073.         0,
  1074.         0x3,
  1075.         { 0x96, 0xB4, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1076.         { 0x895440, 0x3D0900, 0x989680, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1077.         { 0xAFC8, 0x88B8, 0x238E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1078.         90,
  1079.         true
  1080. };
  1081.  
  1082. static const struct si_dte_data dte_data_venus_pro =
  1083. {
  1084.         {  0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  1085.         { 0x11C7, 0x1AAB, 0x238E, 0x2C72, 0x0 },
  1086.         5,
  1087.         55000,
  1088.         0x69,
  1089.         0xA,
  1090.         1,
  1091.         0,
  1092.         0x3,
  1093.         { 0x96, 0xB4, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1094.         { 0x895440, 0x3D0900, 0x989680, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1095.         { 0x88B8, 0x88B8, 0x3555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1096.         90,
  1097.         true
  1098. };
  1099.  
  1100. struct si_cac_config_reg cac_weights_oland[] =
  1101. {
  1102.         { 0x0, 0x0000ffff, 0, 0x82, SISLANDS_CACCONFIG_CGIND },
  1103.         { 0x0, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  1104.         { 0x1, 0x0000ffff, 0, 0x153, SISLANDS_CACCONFIG_CGIND },
  1105.         { 0x1, 0xffff0000, 16, 0x52, SISLANDS_CACCONFIG_CGIND },
  1106.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1107.         { 0x3, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  1108.         { 0x3, 0xffff0000, 16, 0x4F, SISLANDS_CACCONFIG_CGIND },
  1109.         { 0x4, 0x0000ffff, 0, 0x135, SISLANDS_CACCONFIG_CGIND },
  1110.         { 0x4, 0xffff0000, 16, 0xAC, SISLANDS_CACCONFIG_CGIND },
  1111.         { 0x5, 0x0000ffff, 0, 0x118, SISLANDS_CACCONFIG_CGIND },
  1112.         { 0x5, 0xffff0000, 16, 0xBE, SISLANDS_CACCONFIG_CGIND },
  1113.         { 0x6, 0x0000ffff, 0, 0x110, SISLANDS_CACCONFIG_CGIND },
  1114.         { 0x6, 0xffff0000, 16, 0x4CD, SISLANDS_CACCONFIG_CGIND },
  1115.         { 0x18f, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  1116.         { 0x7, 0x0000ffff, 0, 0x37, SISLANDS_CACCONFIG_CGIND },
  1117.         { 0x7, 0xffff0000, 16, 0x27, SISLANDS_CACCONFIG_CGIND },
  1118.         { 0x8, 0x0000ffff, 0, 0xC3, SISLANDS_CACCONFIG_CGIND },
  1119.         { 0x8, 0xffff0000, 16, 0x35, SISLANDS_CACCONFIG_CGIND },
  1120.         { 0x9, 0x0000ffff, 0, 0x28, SISLANDS_CACCONFIG_CGIND },
  1121.         { 0xa, 0x0000ffff, 0, 0x26C, SISLANDS_CACCONFIG_CGIND },
  1122.         { 0xb, 0x0000ffff, 0, 0x3B2, SISLANDS_CACCONFIG_CGIND },
  1123.         { 0xb, 0xffff0000, 16, 0x99D, SISLANDS_CACCONFIG_CGIND },
  1124.         { 0xc, 0x0000ffff, 0, 0xA3F, SISLANDS_CACCONFIG_CGIND },
  1125.         { 0xd, 0x0000ffff, 0, 0xA, SISLANDS_CACCONFIG_CGIND },
  1126.         { 0xd, 0xffff0000, 16, 0xA, SISLANDS_CACCONFIG_CGIND },
  1127.         { 0xe, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1128.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  1129.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1130.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1131.         { 0x10, 0xffff0000, 16, 0x1, SISLANDS_CACCONFIG_CGIND },
  1132.         { 0x11, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1133.         { 0x11, 0xffff0000, 16, 0x15, SISLANDS_CACCONFIG_CGIND },
  1134.         { 0x12, 0x0000ffff, 0, 0x34, SISLANDS_CACCONFIG_CGIND },
  1135.         { 0x13, 0x0000ffff, 0, 0x4, SISLANDS_CACCONFIG_CGIND },
  1136.         { 0x13, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  1137.         { 0x14, 0x0000ffff, 0, 0x3BA, SISLANDS_CACCONFIG_CGIND },
  1138.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1139.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  1140.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1141.         { 0x16, 0x0000ffff, 0, 0x30, SISLANDS_CACCONFIG_CGIND },
  1142.         { 0x16, 0xffff0000, 16, 0x7A, SISLANDS_CACCONFIG_CGIND },
  1143.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1144.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1145.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1146.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1147.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1148.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1149.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1150.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1151.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1152.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1153.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1154.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1155.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1156.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1157.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1158.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1159.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1160.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1161.         { 0x6d, 0x0000ffff, 0, 0x100, SISLANDS_CACCONFIG_CGIND },
  1162.         { 0xFFFFFFFF }
  1163. };
  1164.  
  1165. static const struct si_cac_config_reg cac_weights_mars_pro[] =
  1166. {
  1167.         { 0x0, 0x0000ffff, 0, 0x43, SISLANDS_CACCONFIG_CGIND },
  1168.         { 0x0, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1169.         { 0x1, 0x0000ffff, 0, 0xAF, SISLANDS_CACCONFIG_CGIND },
  1170.         { 0x1, 0xffff0000, 16, 0x2A, SISLANDS_CACCONFIG_CGIND },
  1171.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1172.         { 0x3, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1173.         { 0x3, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1174.         { 0x4, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1175.         { 0x4, 0xffff0000, 16, 0x59, SISLANDS_CACCONFIG_CGIND },
  1176.         { 0x5, 0x0000ffff, 0, 0x1A5, SISLANDS_CACCONFIG_CGIND },
  1177.         { 0x5, 0xffff0000, 16, 0x1D6, SISLANDS_CACCONFIG_CGIND },
  1178.         { 0x6, 0x0000ffff, 0, 0x2A3, SISLANDS_CACCONFIG_CGIND },
  1179.         { 0x6, 0xffff0000, 16, 0x8FD, SISLANDS_CACCONFIG_CGIND },
  1180.         { 0x18f, 0x0000ffff, 0, 0x76, SISLANDS_CACCONFIG_CGIND },
  1181.         { 0x7, 0x0000ffff, 0, 0x8A, SISLANDS_CACCONFIG_CGIND },
  1182.         { 0x7, 0xffff0000, 16, 0xA3, SISLANDS_CACCONFIG_CGIND },
  1183.         { 0x8, 0x0000ffff, 0, 0x71, SISLANDS_CACCONFIG_CGIND },
  1184.         { 0x8, 0xffff0000, 16, 0x36, SISLANDS_CACCONFIG_CGIND },
  1185.         { 0x9, 0x0000ffff, 0, 0xA6, SISLANDS_CACCONFIG_CGIND },
  1186.         { 0xa, 0x0000ffff, 0, 0x81, SISLANDS_CACCONFIG_CGIND },
  1187.         { 0xb, 0x0000ffff, 0, 0x3D2, SISLANDS_CACCONFIG_CGIND },
  1188.         { 0xb, 0xffff0000, 16, 0x27C, SISLANDS_CACCONFIG_CGIND },
  1189.         { 0xc, 0x0000ffff, 0, 0xA96, SISLANDS_CACCONFIG_CGIND },
  1190.         { 0xd, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1191.         { 0xd, 0xffff0000, 16, 0x5, SISLANDS_CACCONFIG_CGIND },
  1192.         { 0xe, 0x0000ffff, 0, 0xB, SISLANDS_CACCONFIG_CGIND },
  1193.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  1194.         { 0xf, 0xffff0000, 16, 0x2, SISLANDS_CACCONFIG_CGIND },
  1195.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1196.         { 0x10, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  1197.         { 0x11, 0x0000ffff, 0, 0x15, SISLANDS_CACCONFIG_CGIND },
  1198.         { 0x11, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1199.         { 0x12, 0x0000ffff, 0, 0x36, SISLANDS_CACCONFIG_CGIND },
  1200.         { 0x13, 0x0000ffff, 0, 0x10, SISLANDS_CACCONFIG_CGIND },
  1201.         { 0x13, 0xffff0000, 16, 0x10, SISLANDS_CACCONFIG_CGIND },
  1202.         { 0x14, 0x0000ffff, 0, 0x2, SISLANDS_CACCONFIG_CGIND },
  1203.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1204.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  1205.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1206.         { 0x16, 0x0000ffff, 0, 0x32, SISLANDS_CACCONFIG_CGIND },
  1207.         { 0x16, 0xffff0000, 16, 0x7E, SISLANDS_CACCONFIG_CGIND },
  1208.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1209.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1210.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1211.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1212.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1213.         { 0x1a, 0x0000ffff, 0, 0x280, SISLANDS_CACCONFIG_CGIND },
  1214.         { 0x1a, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1215.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1216.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1217.         { 0x1c, 0x0000ffff, 0, 0x3C, SISLANDS_CACCONFIG_CGIND },
  1218.         { 0x1c, 0xffff0000, 16, 0x203, SISLANDS_CACCONFIG_CGIND },
  1219.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1220.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1221.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1222.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1223.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1224.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1225.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1226.         { 0x6d, 0x0000ffff, 0, 0xB4, SISLANDS_CACCONFIG_CGIND },
  1227.         { 0xFFFFFFFF }
  1228. };
  1229.  
  1230. static const struct si_cac_config_reg cac_weights_mars_xt[] =
  1231. {
  1232.         { 0x0, 0x0000ffff, 0, 0x43, SISLANDS_CACCONFIG_CGIND },
  1233.         { 0x0, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1234.         { 0x1, 0x0000ffff, 0, 0xAF, SISLANDS_CACCONFIG_CGIND },
  1235.         { 0x1, 0xffff0000, 16, 0x2A, SISLANDS_CACCONFIG_CGIND },
  1236.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1237.         { 0x3, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1238.         { 0x3, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1239.         { 0x4, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1240.         { 0x4, 0xffff0000, 16, 0x59, SISLANDS_CACCONFIG_CGIND },
  1241.         { 0x5, 0x0000ffff, 0, 0x1A5, SISLANDS_CACCONFIG_CGIND },
  1242.         { 0x5, 0xffff0000, 16, 0x1D6, SISLANDS_CACCONFIG_CGIND },
  1243.         { 0x6, 0x0000ffff, 0, 0x2A3, SISLANDS_CACCONFIG_CGIND },
  1244.         { 0x6, 0xffff0000, 16, 0x8FD, SISLANDS_CACCONFIG_CGIND },
  1245.         { 0x18f, 0x0000ffff, 0, 0x76, SISLANDS_CACCONFIG_CGIND },
  1246.         { 0x7, 0x0000ffff, 0, 0x8A, SISLANDS_CACCONFIG_CGIND },
  1247.         { 0x7, 0xffff0000, 16, 0xA3, SISLANDS_CACCONFIG_CGIND },
  1248.         { 0x8, 0x0000ffff, 0, 0x71, SISLANDS_CACCONFIG_CGIND },
  1249.         { 0x8, 0xffff0000, 16, 0x36, SISLANDS_CACCONFIG_CGIND },
  1250.         { 0x9, 0x0000ffff, 0, 0xA6, SISLANDS_CACCONFIG_CGIND },
  1251.         { 0xa, 0x0000ffff, 0, 0x81, SISLANDS_CACCONFIG_CGIND },
  1252.         { 0xb, 0x0000ffff, 0, 0x3D2, SISLANDS_CACCONFIG_CGIND },
  1253.         { 0xb, 0xffff0000, 16, 0x27C, SISLANDS_CACCONFIG_CGIND },
  1254.         { 0xc, 0x0000ffff, 0, 0xA96, SISLANDS_CACCONFIG_CGIND },
  1255.         { 0xd, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1256.         { 0xd, 0xffff0000, 16, 0x5, SISLANDS_CACCONFIG_CGIND },
  1257.         { 0xe, 0x0000ffff, 0, 0xB, SISLANDS_CACCONFIG_CGIND },
  1258.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  1259.         { 0xf, 0xffff0000, 16, 0x2, SISLANDS_CACCONFIG_CGIND },
  1260.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1261.         { 0x10, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  1262.         { 0x11, 0x0000ffff, 0, 0x15, SISLANDS_CACCONFIG_CGIND },
  1263.         { 0x11, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1264.         { 0x12, 0x0000ffff, 0, 0x36, SISLANDS_CACCONFIG_CGIND },
  1265.         { 0x13, 0x0000ffff, 0, 0x10, SISLANDS_CACCONFIG_CGIND },
  1266.         { 0x13, 0xffff0000, 16, 0x10, SISLANDS_CACCONFIG_CGIND },
  1267.         { 0x14, 0x0000ffff, 0, 0x60, SISLANDS_CACCONFIG_CGIND },
  1268.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1269.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  1270.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1271.         { 0x16, 0x0000ffff, 0, 0x32, SISLANDS_CACCONFIG_CGIND },
  1272.         { 0x16, 0xffff0000, 16, 0x7E, SISLANDS_CACCONFIG_CGIND },
  1273.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1274.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1275.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1276.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1277.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1278.         { 0x1a, 0x0000ffff, 0, 0x280, SISLANDS_CACCONFIG_CGIND },
  1279.         { 0x1a, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1280.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1281.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1282.         { 0x1c, 0x0000ffff, 0, 0x3C, SISLANDS_CACCONFIG_CGIND },
  1283.         { 0x1c, 0xffff0000, 16, 0x203, SISLANDS_CACCONFIG_CGIND },
  1284.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1285.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1286.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1287.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1288.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1289.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1290.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1291.         { 0x6d, 0x0000ffff, 0, 0xB4, SISLANDS_CACCONFIG_CGIND },
  1292.         { 0xFFFFFFFF }
  1293. };
  1294.  
  1295. static const struct si_cac_config_reg cac_weights_oland_pro[] =
  1296. {
  1297.         { 0x0, 0x0000ffff, 0, 0x43, SISLANDS_CACCONFIG_CGIND },
  1298.         { 0x0, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1299.         { 0x1, 0x0000ffff, 0, 0xAF, SISLANDS_CACCONFIG_CGIND },
  1300.         { 0x1, 0xffff0000, 16, 0x2A, SISLANDS_CACCONFIG_CGIND },
  1301.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1302.         { 0x3, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1303.         { 0x3, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1304.         { 0x4, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1305.         { 0x4, 0xffff0000, 16, 0x59, SISLANDS_CACCONFIG_CGIND },
  1306.         { 0x5, 0x0000ffff, 0, 0x1A5, SISLANDS_CACCONFIG_CGIND },
  1307.         { 0x5, 0xffff0000, 16, 0x1D6, SISLANDS_CACCONFIG_CGIND },
  1308.         { 0x6, 0x0000ffff, 0, 0x2A3, SISLANDS_CACCONFIG_CGIND },
  1309.         { 0x6, 0xffff0000, 16, 0x8FD, SISLANDS_CACCONFIG_CGIND },
  1310.         { 0x18f, 0x0000ffff, 0, 0x76, SISLANDS_CACCONFIG_CGIND },
  1311.         { 0x7, 0x0000ffff, 0, 0x8A, SISLANDS_CACCONFIG_CGIND },
  1312.         { 0x7, 0xffff0000, 16, 0xA3, SISLANDS_CACCONFIG_CGIND },
  1313.         { 0x8, 0x0000ffff, 0, 0x71, SISLANDS_CACCONFIG_CGIND },
  1314.         { 0x8, 0xffff0000, 16, 0x36, SISLANDS_CACCONFIG_CGIND },
  1315.         { 0x9, 0x0000ffff, 0, 0xA6, SISLANDS_CACCONFIG_CGIND },
  1316.         { 0xa, 0x0000ffff, 0, 0x81, SISLANDS_CACCONFIG_CGIND },
  1317.         { 0xb, 0x0000ffff, 0, 0x3D2, SISLANDS_CACCONFIG_CGIND },
  1318.         { 0xb, 0xffff0000, 16, 0x27C, SISLANDS_CACCONFIG_CGIND },
  1319.         { 0xc, 0x0000ffff, 0, 0xA96, SISLANDS_CACCONFIG_CGIND },
  1320.         { 0xd, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1321.         { 0xd, 0xffff0000, 16, 0x5, SISLANDS_CACCONFIG_CGIND },
  1322.         { 0xe, 0x0000ffff, 0, 0xB, SISLANDS_CACCONFIG_CGIND },
  1323.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  1324.         { 0xf, 0xffff0000, 16, 0x2, SISLANDS_CACCONFIG_CGIND },
  1325.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1326.         { 0x10, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  1327.         { 0x11, 0x0000ffff, 0, 0x15, SISLANDS_CACCONFIG_CGIND },
  1328.         { 0x11, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1329.         { 0x12, 0x0000ffff, 0, 0x36, SISLANDS_CACCONFIG_CGIND },
  1330.         { 0x13, 0x0000ffff, 0, 0x10, SISLANDS_CACCONFIG_CGIND },
  1331.         { 0x13, 0xffff0000, 16, 0x10, SISLANDS_CACCONFIG_CGIND },
  1332.         { 0x14, 0x0000ffff, 0, 0x90, SISLANDS_CACCONFIG_CGIND },
  1333.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1334.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  1335.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1336.         { 0x16, 0x0000ffff, 0, 0x32, SISLANDS_CACCONFIG_CGIND },
  1337.         { 0x16, 0xffff0000, 16, 0x7E, SISLANDS_CACCONFIG_CGIND },
  1338.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1339.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1340.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1341.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1342.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1343.         { 0x1a, 0x0000ffff, 0, 0x280, SISLANDS_CACCONFIG_CGIND },
  1344.         { 0x1a, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1345.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1346.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1347.         { 0x1c, 0x0000ffff, 0, 0x3C, SISLANDS_CACCONFIG_CGIND },
  1348.         { 0x1c, 0xffff0000, 16, 0x203, SISLANDS_CACCONFIG_CGIND },
  1349.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1350.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1351.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1352.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1353.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1354.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1355.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1356.         { 0x6d, 0x0000ffff, 0, 0xB4, SISLANDS_CACCONFIG_CGIND },
  1357.         { 0xFFFFFFFF }
  1358. };
  1359.  
  1360. static const struct si_cac_config_reg cac_weights_oland_xt[] =
  1361. {
  1362.         { 0x0, 0x0000ffff, 0, 0x43, SISLANDS_CACCONFIG_CGIND },
  1363.         { 0x0, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1364.         { 0x1, 0x0000ffff, 0, 0xAF, SISLANDS_CACCONFIG_CGIND },
  1365.         { 0x1, 0xffff0000, 16, 0x2A, SISLANDS_CACCONFIG_CGIND },
  1366.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1367.         { 0x3, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1368.         { 0x3, 0xffff0000, 16, 0x29, SISLANDS_CACCONFIG_CGIND },
  1369.         { 0x4, 0x0000ffff, 0, 0xA0, SISLANDS_CACCONFIG_CGIND },
  1370.         { 0x4, 0xffff0000, 16, 0x59, SISLANDS_CACCONFIG_CGIND },
  1371.         { 0x5, 0x0000ffff, 0, 0x1A5, SISLANDS_CACCONFIG_CGIND },
  1372.         { 0x5, 0xffff0000, 16, 0x1D6, SISLANDS_CACCONFIG_CGIND },
  1373.         { 0x6, 0x0000ffff, 0, 0x2A3, SISLANDS_CACCONFIG_CGIND },
  1374.         { 0x6, 0xffff0000, 16, 0x8FD, SISLANDS_CACCONFIG_CGIND },
  1375.         { 0x18f, 0x0000ffff, 0, 0x76, SISLANDS_CACCONFIG_CGIND },
  1376.         { 0x7, 0x0000ffff, 0, 0x8A, SISLANDS_CACCONFIG_CGIND },
  1377.         { 0x7, 0xffff0000, 16, 0xA3, SISLANDS_CACCONFIG_CGIND },
  1378.         { 0x8, 0x0000ffff, 0, 0x71, SISLANDS_CACCONFIG_CGIND },
  1379.         { 0x8, 0xffff0000, 16, 0x36, SISLANDS_CACCONFIG_CGIND },
  1380.         { 0x9, 0x0000ffff, 0, 0xA6, SISLANDS_CACCONFIG_CGIND },
  1381.         { 0xa, 0x0000ffff, 0, 0x81, SISLANDS_CACCONFIG_CGIND },
  1382.         { 0xb, 0x0000ffff, 0, 0x3D2, SISLANDS_CACCONFIG_CGIND },
  1383.         { 0xb, 0xffff0000, 16, 0x27C, SISLANDS_CACCONFIG_CGIND },
  1384.         { 0xc, 0x0000ffff, 0, 0xA96, SISLANDS_CACCONFIG_CGIND },
  1385.         { 0xd, 0x0000ffff, 0, 0x5, SISLANDS_CACCONFIG_CGIND },
  1386.         { 0xd, 0xffff0000, 16, 0x5, SISLANDS_CACCONFIG_CGIND },
  1387.         { 0xe, 0x0000ffff, 0, 0xB, SISLANDS_CACCONFIG_CGIND },
  1388.         { 0xf, 0x0000ffff, 0, 0x3, SISLANDS_CACCONFIG_CGIND },
  1389.         { 0xf, 0xffff0000, 16, 0x2, SISLANDS_CACCONFIG_CGIND },
  1390.         { 0x10, 0x0000ffff, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1391.         { 0x10, 0xffff0000, 16, 0x4, SISLANDS_CACCONFIG_CGIND },
  1392.         { 0x11, 0x0000ffff, 0, 0x15, SISLANDS_CACCONFIG_CGIND },
  1393.         { 0x11, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1394.         { 0x12, 0x0000ffff, 0, 0x36, SISLANDS_CACCONFIG_CGIND },
  1395.         { 0x13, 0x0000ffff, 0, 0x10, SISLANDS_CACCONFIG_CGIND },
  1396.         { 0x13, 0xffff0000, 16, 0x10, SISLANDS_CACCONFIG_CGIND },
  1397.         { 0x14, 0x0000ffff, 0, 0x120, SISLANDS_CACCONFIG_CGIND },
  1398.         { 0x15, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1399.         { 0x15, 0xffff0000, 16, 0x6, SISLANDS_CACCONFIG_CGIND },
  1400.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1401.         { 0x16, 0x0000ffff, 0, 0x32, SISLANDS_CACCONFIG_CGIND },
  1402.         { 0x16, 0xffff0000, 16, 0x7E, SISLANDS_CACCONFIG_CGIND },
  1403.         { 0x17, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1404.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1405.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1406.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1407.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1408.         { 0x1a, 0x0000ffff, 0, 0x280, SISLANDS_CACCONFIG_CGIND },
  1409.         { 0x1a, 0xffff0000, 16, 0x7, SISLANDS_CACCONFIG_CGIND },
  1410.         { 0x1b, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1411.         { 0x1b, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1412.         { 0x1c, 0x0000ffff, 0, 0x3C, SISLANDS_CACCONFIG_CGIND },
  1413.         { 0x1c, 0xffff0000, 16, 0x203, SISLANDS_CACCONFIG_CGIND },
  1414.         { 0x1d, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1415.         { 0x1d, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1416.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1417.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1418.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1419.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1420.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1421.         { 0x6d, 0x0000ffff, 0, 0xB4, SISLANDS_CACCONFIG_CGIND },
  1422.         { 0xFFFFFFFF }
  1423. };
  1424.  
  1425. static const struct si_cac_config_reg lcac_oland[] =
  1426. {
  1427.         { 0x98, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1428.         { 0x98, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1429.         { 0x104, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1430.         { 0x104, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1431.         { 0x110, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1432.         { 0x110, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1433.         { 0x14f, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1434.         { 0x14f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1435.         { 0x8c, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1436.         { 0x8c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1437.         { 0x143, 0x0001fffe, 1, 0x4, SISLANDS_CACCONFIG_CGIND },
  1438.         { 0x143, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1439.         { 0x11c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1440.         { 0x11c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1441.         { 0x11f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1442.         { 0x11f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1443.         { 0x164, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1444.         { 0x164, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1445.         { 0x167, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1446.         { 0x167, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1447.         { 0x16a, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1448.         { 0x16a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1449.         { 0x15e, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1450.         { 0x15e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1451.         { 0x161, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1452.         { 0x161, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1453.         { 0x15b, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1454.         { 0x15b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1455.         { 0x16d, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1456.         { 0x16d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1457.         { 0x170, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1458.         { 0x170, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1459.         { 0x173, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1460.         { 0x173, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1461.         { 0x176, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1462.         { 0x176, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1463.         { 0x179, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1464.         { 0x179, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1465.         { 0x17c, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1466.         { 0x17c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1467.         { 0x17f, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1468.         { 0x17f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1469.         { 0xFFFFFFFF }
  1470. };
  1471.  
  1472. static const struct si_cac_config_reg lcac_mars_pro[] =
  1473. {
  1474.         { 0x98, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1475.         { 0x98, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1476.         { 0x104, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1477.         { 0x104, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1478.         { 0x110, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1479.         { 0x110, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1480.         { 0x14f, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1481.         { 0x14f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1482.         { 0x8c, 0x0001fffe, 1, 0x6, SISLANDS_CACCONFIG_CGIND },
  1483.         { 0x8c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1484.         { 0x143, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1485.         { 0x143, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1486.         { 0x11c, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1487.         { 0x11c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1488.         { 0x11f, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1489.         { 0x11f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1490.         { 0x164, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1491.         { 0x164, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1492.         { 0x167, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1493.         { 0x167, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1494.         { 0x16a, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1495.         { 0x16a, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1496.         { 0x15e, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1497.         { 0x15e, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1498.         { 0x161, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1499.         { 0x161, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1500.         { 0x15b, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1501.         { 0x15b, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1502.         { 0x16d, 0x0001fffe, 1, 0x2, SISLANDS_CACCONFIG_CGIND },
  1503.         { 0x16d, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1504.         { 0x170, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1505.         { 0x170, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1506.         { 0x173, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1507.         { 0x173, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1508.         { 0x176, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1509.         { 0x176, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1510.         { 0x179, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1511.         { 0x179, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1512.         { 0x17c, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1513.         { 0x17c, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1514.         { 0x17f, 0x0001fffe, 1, 0x1, SISLANDS_CACCONFIG_CGIND },
  1515.         { 0x17f, 0x00000001, 0, 0x1, SISLANDS_CACCONFIG_CGIND },
  1516.         { 0xFFFFFFFF }
  1517. };
  1518.  
  1519. static const struct si_cac_config_reg cac_override_oland[] =
  1520. {
  1521.         { 0xFFFFFFFF }
  1522. };
  1523.  
  1524. static const struct si_powertune_data powertune_data_oland =
  1525. {
  1526.         ((1 << 16) | 0x6993),
  1527.         5,
  1528.         0,
  1529.         7,
  1530.         105,
  1531.         {
  1532.                 0UL,
  1533.                 0UL,
  1534.                 7194395UL,
  1535.                 309631529UL,
  1536.                 -1270850L,
  1537.                 4513710L,
  1538.                 100
  1539.         },
  1540.         117830498UL,
  1541.         12,
  1542.         {
  1543.                 0,
  1544.                 0,
  1545.                 0,
  1546.                 0,
  1547.                 0,
  1548.                 0,
  1549.                 0,
  1550.                 0
  1551.         },
  1552.         true
  1553. };
  1554.  
  1555. static const struct si_powertune_data powertune_data_mars_pro =
  1556. {
  1557.         ((1 << 16) | 0x6993),
  1558.         5,
  1559.         0,
  1560.         7,
  1561.         105,
  1562.         {
  1563.                 0UL,
  1564.                 0UL,
  1565.                 7194395UL,
  1566.                 309631529UL,
  1567.                 -1270850L,
  1568.                 4513710L,
  1569.                 100
  1570.         },
  1571.         117830498UL,
  1572.         12,
  1573.         {
  1574.                 0,
  1575.                 0,
  1576.                 0,
  1577.                 0,
  1578.                 0,
  1579.                 0,
  1580.                 0,
  1581.                 0
  1582.         },
  1583.         true
  1584. };
  1585.  
  1586. static const struct si_dte_data dte_data_oland =
  1587. {
  1588.         { 0, 0, 0, 0, 0 },
  1589.         { 0, 0, 0, 0, 0 },
  1590.         0,
  1591.         0,
  1592.         0,
  1593.         0,
  1594.         0,
  1595.         0,
  1596.         0,
  1597.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1598.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1599.         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  1600.         0,
  1601.         false
  1602. };
  1603.  
  1604. static const struct si_dte_data dte_data_mars_pro =
  1605. {
  1606.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  1607.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  1608.         5,
  1609.         55000,
  1610.         105,
  1611.         0xA,
  1612.         1,
  1613.         0,
  1614.         0x10,
  1615.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  1616.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  1617.         { 0xF627, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1618.         90,
  1619.         true
  1620. };
  1621.  
  1622. static const struct si_dte_data dte_data_sun_xt =
  1623. {
  1624.         { 0x1E8480, 0x3D0900, 0x989680, 0x2625A00, 0x0 },
  1625.         { 0x0, 0x0, 0x0, 0x0, 0x0 },
  1626.         5,
  1627.         55000,
  1628.         105,
  1629.         0xA,
  1630.         1,
  1631.         0,
  1632.         0x10,
  1633.         { 0x96, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
  1634.         { 0x895440, 0x3D0900, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680, 0x989680 },
  1635.         { 0xD555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
  1636.         90,
  1637.         true
  1638. };
  1639.  
  1640.  
  1641. static const struct si_cac_config_reg cac_weights_hainan[] =
  1642. {
  1643.         { 0x0, 0x0000ffff, 0, 0x2d9, SISLANDS_CACCONFIG_CGIND },
  1644.         { 0x0, 0xffff0000, 16, 0x22b, SISLANDS_CACCONFIG_CGIND },
  1645.         { 0x1, 0x0000ffff, 0, 0x21c, SISLANDS_CACCONFIG_CGIND },
  1646.         { 0x1, 0xffff0000, 16, 0x1dc, SISLANDS_CACCONFIG_CGIND },
  1647.         { 0x2, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1648.         { 0x3, 0x0000ffff, 0, 0x24e, SISLANDS_CACCONFIG_CGIND },
  1649.         { 0x3, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1650.         { 0x4, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1651.         { 0x4, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1652.         { 0x5, 0x0000ffff, 0, 0x35e, SISLANDS_CACCONFIG_CGIND },
  1653.         { 0x5, 0xffff0000, 16, 0x1143, SISLANDS_CACCONFIG_CGIND },
  1654.         { 0x6, 0x0000ffff, 0, 0xe17, SISLANDS_CACCONFIG_CGIND },
  1655.         { 0x6, 0xffff0000, 16, 0x441, SISLANDS_CACCONFIG_CGIND },
  1656.         { 0x18f, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1657.         { 0x7, 0x0000ffff, 0, 0x28b, SISLANDS_CACCONFIG_CGIND },
  1658.         { 0x7, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1659.         { 0x8, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1660.         { 0x8, 0xffff0000, 16, 0xabe, SISLANDS_CACCONFIG_CGIND },
  1661.         { 0x9, 0x0000ffff, 0, 0xf11, SISLANDS_CACCONFIG_CGIND },
  1662.         { 0xa, 0x0000ffff, 0, 0x907, SISLANDS_CACCONFIG_CGIND },
  1663.         { 0xb, 0x0000ffff, 0, 0xb45, SISLANDS_CACCONFIG_CGIND },
  1664.         { 0xb, 0xffff0000, 16, 0xd1e, SISLANDS_CACCONFIG_CGIND },
  1665.         { 0xc, 0x0000ffff, 0, 0xa2c, SISLANDS_CACCONFIG_CGIND },
  1666.         { 0xd, 0x0000ffff, 0, 0x62, SISLANDS_CACCONFIG_CGIND },
  1667.         { 0xd, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1668.         { 0xe, 0x0000ffff, 0, 0x1f3, SISLANDS_CACCONFIG_CGIND },
  1669.         { 0xf, 0x0000ffff, 0, 0x42, SISLANDS_CACCONFIG_CGIND },
  1670.         { 0xf, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1671.         { 0x10, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1672.         { 0x10, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1673.         { 0x11, 0x0000ffff, 0, 0x709, SISLANDS_CACCONFIG_CGIND },
  1674.         { 0x11, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1675.         { 0x12, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1676.         { 0x13, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1677.         { 0x13, 0xffff0000, 16, 0x3a, SISLANDS_CACCONFIG_CGIND },
  1678.         { 0x14, 0x0000ffff, 0, 0x357, SISLANDS_CACCONFIG_CGIND },
  1679.         { 0x15, 0x0000ffff, 0, 0x9f, SISLANDS_CACCONFIG_CGIND },
  1680.         { 0x15, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1681.         { 0x4e, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1682.         { 0x16, 0x0000ffff, 0, 0x314, SISLANDS_CACCONFIG_CGIND },
  1683.         { 0x16, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1684.         { 0x17, 0x0000ffff, 0, 0x6d, SISLANDS_CACCONFIG_CGIND },
  1685.         { 0x18, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1686.         { 0x18, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1687.         { 0x19, 0x0000ffff, 0, 0x0, SISLANDS_CACCONFIG_CGIND },
  1688.         { 0x19, 0xffff0000, 16, 0x0, SISLANDS_CACCONFIG_CGIND },
  1689.         { 0x1a, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1690.         { 0x1a, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1691.         { 0x1b, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1692.         { 0x1b, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1693.         { 0x1c, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1694.         { 0x1c, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1695.         { 0x1d, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1696.         { 0x1d, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1697.         { 0x1e, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1698.         { 0x1e, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1699.         { 0x1f, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1700.         { 0x1f, 0xffff0000, 16, 0, SISLANDS_CACCONFIG_CGIND },
  1701.         { 0x20, 0x0000ffff, 0, 0, SISLANDS_CACCONFIG_CGIND },
  1702.         { 0x6d, 0x0000ffff, 0, 0x1b9, SISLANDS_CACCONFIG_CGIND },
  1703.         { 0xFFFFFFFF }
  1704. };
  1705.  
  1706. static const struct si_powertune_data powertune_data_hainan =
  1707. {
  1708.         ((1 << 16) | 0x6993),
  1709.         5,
  1710.         0,
  1711.         9,
  1712.         105,
  1713.         {
  1714.                 0UL,
  1715.                 0UL,
  1716.                 7194395UL,
  1717.                 309631529UL,
  1718.                 -1270850L,
  1719.                 4513710L,
  1720.                 100
  1721.         },
  1722.         117830498UL,
  1723.         12,
  1724.         {
  1725.                 0,
  1726.                 0,
  1727.                 0,
  1728.                 0,
  1729.                 0,
  1730.                 0,
  1731.                 0,
  1732.                 0
  1733.         },
  1734.         true
  1735. };
  1736.  
  1737. struct rv7xx_power_info *rv770_get_pi(struct radeon_device *rdev);
  1738. struct evergreen_power_info *evergreen_get_pi(struct radeon_device *rdev);
  1739. struct ni_power_info *ni_get_pi(struct radeon_device *rdev);
  1740. struct ni_ps *ni_get_ps(struct radeon_ps *rps);
  1741.  
  1742. extern int si_mc_load_microcode(struct radeon_device *rdev);
  1743. extern void vce_v1_0_enable_mgcg(struct radeon_device *rdev, bool enable);
  1744.  
  1745. static int si_populate_voltage_value(struct radeon_device *rdev,
  1746.                                      const struct atom_voltage_table *table,
  1747.                                      u16 value, SISLANDS_SMC_VOLTAGE_VALUE *voltage);
  1748. static int si_get_std_voltage_value(struct radeon_device *rdev,
  1749.                                     SISLANDS_SMC_VOLTAGE_VALUE *voltage,
  1750.                                     u16 *std_voltage);
  1751. static int si_write_smc_soft_register(struct radeon_device *rdev,
  1752.                                       u16 reg_offset, u32 value);
  1753. static int si_convert_power_level_to_smc(struct radeon_device *rdev,
  1754.                                          struct rv7xx_pl *pl,
  1755.                                          SISLANDS_SMC_HW_PERFORMANCE_LEVEL *level);
  1756. static int si_calculate_sclk_params(struct radeon_device *rdev,
  1757.                                     u32 engine_clock,
  1758.                                     SISLANDS_SMC_SCLK_VALUE *sclk);
  1759.  
  1760. static void si_thermal_start_smc_fan_control(struct radeon_device *rdev);
  1761. static void si_fan_ctrl_set_default_mode(struct radeon_device *rdev);
  1762.  
  1763. static struct si_power_info *si_get_pi(struct radeon_device *rdev)
  1764. {
  1765.         struct si_power_info *pi = rdev->pm.dpm.priv;
  1766.  
  1767.         return pi;
  1768. }
  1769.  
  1770. static void si_calculate_leakage_for_v_and_t_formula(const struct ni_leakage_coeffients *coeff,
  1771.                                                      u16 v, s32 t, u32 ileakage, u32 *leakage)
  1772. {
  1773.         s64 kt, kv, leaka