rv515.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. /*
  2. * Copyright 2008 Advanced Micro Devices, Inc.
  3. * Copyright 2008 Red Hat Inc.
  4. * Copyright 2009 Jerome Glisse.
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a
  7. * copy of this software and associated documentation files (the "Software"),
  8. * to deal in the Software without restriction, including without limitation
  9. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10. * and/or sell copies of the Software, and to permit persons to whom the
  11. * Software is furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22. * OTHER DEALINGS IN THE SOFTWARE.
  23. *
  24. * Authors: Dave Airlie
  25. * Alex Deucher
  26. * Jerome Glisse
  27. */
  28. #include <linux/seq_file.h>
  29. #include "drmP.h"
  30. #include "radeon_reg.h"
  31. #include "radeon.h"
  32. /* rv515 depends on : */
  33. void r100_hdp_reset(struct radeon_device *rdev);
  34. int r100_cp_reset(struct radeon_device *rdev);
  35. int r100_rb2d_reset(struct radeon_device *rdev);
  36. int r100_gui_wait_for_idle(struct radeon_device *rdev);
  37. int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
  38. int rv370_pcie_gart_enable(struct radeon_device *rdev);
  39. void rv370_pcie_gart_disable(struct radeon_device *rdev);
  40. void r420_pipes_init(struct radeon_device *rdev);
  41. void rs600_mc_disable_clients(struct radeon_device *rdev);
  42. void rs600_disable_vga(struct radeon_device *rdev);
  43. /* This files gather functions specifics to:
  44. * rv515
  45. *
  46. * Some of these functions might be used by newer ASICs.
  47. */
  48. int rv515_debugfs_pipes_info_init(struct radeon_device *rdev);
  49. int rv515_debugfs_ga_info_init(struct radeon_device *rdev);
  50. void rv515_gpu_init(struct radeon_device *rdev);
  51. int rv515_mc_wait_for_idle(struct radeon_device *rdev);
  52. /*
  53. * MC
  54. */
  55. int rv515_mc_init(struct radeon_device *rdev)
  56. {
  57. uint32_t tmp;
  58. int r;
  59. if (r100_debugfs_rbbm_init(rdev)) {
  60. DRM_ERROR("Failed to register debugfs file for RBBM !\n");
  61. }
  62. if (rv515_debugfs_pipes_info_init(rdev)) {
  63. DRM_ERROR("Failed to register debugfs file for pipes !\n");
  64. }
  65. if (rv515_debugfs_ga_info_init(rdev)) {
  66. DRM_ERROR("Failed to register debugfs file for pipes !\n");
  67. }
  68. rv515_gpu_init(rdev);
  69. rv370_pcie_gart_disable(rdev);
  70. /* Setup GPU memory space */
  71. rdev->mc.vram_location = 0xFFFFFFFFUL;
  72. rdev->mc.gtt_location = 0xFFFFFFFFUL;
  73. if (rdev->flags & RADEON_IS_AGP) {
  74. r = radeon_agp_init(rdev);
  75. if (r) {
  76. printk(KERN_WARNING "[drm] Disabling AGP\n");
  77. rdev->flags &= ~RADEON_IS_AGP;
  78. rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
  79. } else {
  80. rdev->mc.gtt_location = rdev->mc.agp_base;
  81. }
  82. }
  83. r = radeon_mc_setup(rdev);
  84. if (r) {
  85. return r;
  86. }
  87. /* Program GPU memory space */
  88. rs600_mc_disable_clients(rdev);
  89. if (rv515_mc_wait_for_idle(rdev)) {
  90. printk(KERN_WARNING "Failed to wait MC idle while "
  91. "programming pipes. Bad things might happen.\n");
  92. }
  93. /* Write VRAM size in case we are limiting it */
  94. WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.vram_size);
  95. tmp = REG_SET(RV515_MC_FB_START, rdev->mc.vram_location >> 16);
  96. WREG32(0x134, tmp);
  97. tmp = rdev->mc.vram_location + rdev->mc.vram_size - 1;
  98. tmp = REG_SET(RV515_MC_FB_TOP, tmp >> 16);
  99. tmp |= REG_SET(RV515_MC_FB_START, rdev->mc.vram_location >> 16);
  100. WREG32_MC(RV515_MC_FB_LOCATION, tmp);
  101. WREG32(RS690_HDP_FB_LOCATION, rdev->mc.vram_location >> 16);
  102. WREG32(0x310, rdev->mc.vram_location);
  103. if (rdev->flags & RADEON_IS_AGP) {
  104. tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
  105. tmp = REG_SET(RV515_MC_AGP_TOP, tmp >> 16);
  106. tmp |= REG_SET(RV515_MC_AGP_START, rdev->mc.gtt_location >> 16);
  107. WREG32_MC(RV515_MC_AGP_LOCATION, tmp);
  108. WREG32_MC(RV515_MC_AGP_BASE, rdev->mc.agp_base);
  109. WREG32_MC(RV515_MC_AGP_BASE_2, 0);
  110. } else {
  111. WREG32_MC(RV515_MC_AGP_LOCATION, 0x0FFFFFFF);
  112. WREG32_MC(RV515_MC_AGP_BASE, 0);
  113. WREG32_MC(RV515_MC_AGP_BASE_2, 0);
  114. }
  115. return 0;
  116. }
  117. void rv515_mc_fini(struct radeon_device *rdev)
  118. {
  119. rv370_pcie_gart_disable(rdev);
  120. radeon_gart_table_vram_free(rdev);
  121. radeon_gart_fini(rdev);
  122. }
  123. /*
  124. * Global GPU functions
  125. */
  126. void rv515_ring_start(struct radeon_device *rdev)
  127. {
  128. unsigned gb_tile_config;
  129. int r;
  130. /* Sub pixel 1/12 so we can have 4K rendering according to doc */
  131. gb_tile_config = R300_ENABLE_TILING | R300_TILE_SIZE_16;
  132. switch (rdev->num_gb_pipes) {
  133. case 2:
  134. gb_tile_config |= R300_PIPE_COUNT_R300;
  135. break;
  136. case 3:
  137. gb_tile_config |= R300_PIPE_COUNT_R420_3P;
  138. break;
  139. case 4:
  140. gb_tile_config |= R300_PIPE_COUNT_R420;
  141. break;
  142. case 1:
  143. default:
  144. gb_tile_config |= R300_PIPE_COUNT_RV350;
  145. break;
  146. }
  147. r = radeon_ring_lock(rdev, 64);
  148. if (r) {
  149. return;
  150. }
  151. radeon_ring_write(rdev, PACKET0(RADEON_ISYNC_CNTL, 0));
  152. radeon_ring_write(rdev,
  153. RADEON_ISYNC_ANY2D_IDLE3D |
  154. RADEON_ISYNC_ANY3D_IDLE2D |
  155. RADEON_ISYNC_WAIT_IDLEGUI |
  156. RADEON_ISYNC_CPSCRATCH_IDLEGUI);
  157. radeon_ring_write(rdev, PACKET0(R300_GB_TILE_CONFIG, 0));
  158. radeon_ring_write(rdev, gb_tile_config);
  159. radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0));
  160. radeon_ring_write(rdev,
  161. RADEON_WAIT_2D_IDLECLEAN |
  162. RADEON_WAIT_3D_IDLECLEAN);
  163. radeon_ring_write(rdev, PACKET0(0x170C, 0));
  164. radeon_ring_write(rdev, 1 << 31);
  165. radeon_ring_write(rdev, PACKET0(R300_GB_SELECT, 0));
  166. radeon_ring_write(rdev, 0);
  167. radeon_ring_write(rdev, PACKET0(R300_GB_ENABLE, 0));
  168. radeon_ring_write(rdev, 0);
  169. radeon_ring_write(rdev, PACKET0(0x42C8, 0));
  170. radeon_ring_write(rdev, (1 << rdev->num_gb_pipes) - 1);
  171. radeon_ring_write(rdev, PACKET0(R500_VAP_INDEX_OFFSET, 0));
  172. radeon_ring_write(rdev, 0);
  173. radeon_ring_write(rdev, PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0));
  174. radeon_ring_write(rdev, R300_RB3D_DC_FLUSH | R300_RB3D_DC_FREE);
  175. radeon_ring_write(rdev, PACKET0(R300_RB3D_ZCACHE_CTLSTAT, 0));
  176. radeon_ring_write(rdev, R300_ZC_FLUSH | R300_ZC_FREE);
  177. radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0));
  178. radeon_ring_write(rdev,
  179. RADEON_WAIT_2D_IDLECLEAN |
  180. RADEON_WAIT_3D_IDLECLEAN);
  181. radeon_ring_write(rdev, PACKET0(R300_GB_AA_CONFIG, 0));
  182. radeon_ring_write(rdev, 0);
  183. radeon_ring_write(rdev, PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0));
  184. radeon_ring_write(rdev, R300_RB3D_DC_FLUSH | R300_RB3D_DC_FREE);
  185. radeon_ring_write(rdev, PACKET0(R300_RB3D_ZCACHE_CTLSTAT, 0));
  186. radeon_ring_write(rdev, R300_ZC_FLUSH | R300_ZC_FREE);
  187. radeon_ring_write(rdev, PACKET0(R300_GB_MSPOS0, 0));
  188. radeon_ring_write(rdev,
  189. ((6 << R300_MS_X0_SHIFT) |
  190. (6 << R300_MS_Y0_SHIFT) |
  191. (6 << R300_MS_X1_SHIFT) |
  192. (6 << R300_MS_Y1_SHIFT) |
  193. (6 << R300_MS_X2_SHIFT) |
  194. (6 << R300_MS_Y2_SHIFT) |
  195. (6 << R300_MSBD0_Y_SHIFT) |
  196. (6 << R300_MSBD0_X_SHIFT)));
  197. radeon_ring_write(rdev, PACKET0(R300_GB_MSPOS1, 0));
  198. radeon_ring_write(rdev,
  199. ((6 << R300_MS_X3_SHIFT) |
  200. (6 << R300_MS_Y3_SHIFT) |
  201. (6 << R300_MS_X4_SHIFT) |
  202. (6 << R300_MS_Y4_SHIFT) |
  203. (6 << R300_MS_X5_SHIFT) |
  204. (6 << R300_MS_Y5_SHIFT) |
  205. (6 << R300_MSBD1_SHIFT)));
  206. radeon_ring_write(rdev, PACKET0(R300_GA_ENHANCE, 0));
  207. radeon_ring_write(rdev, R300_GA_DEADLOCK_CNTL | R300_GA_FASTSYNC_CNTL);
  208. radeon_ring_write(rdev, PACKET0(R300_GA_POLY_MODE, 0));
  209. radeon_ring_write(rdev,
  210. R300_FRONT_PTYPE_TRIANGE | R300_BACK_PTYPE_TRIANGE);
  211. radeon_ring_write(rdev, PACKET0(R300_GA_ROUND_MODE, 0));
  212. radeon_ring_write(rdev,
  213. R300_GEOMETRY_ROUND_NEAREST |
  214. R300_COLOR_ROUND_NEAREST);
  215. radeon_ring_write(rdev, PACKET0(0x20C8, 0));
  216. radeon_ring_write(rdev, 0);
  217. radeon_ring_unlock_commit(rdev);
  218. }
  219. void rv515_errata(struct radeon_device *rdev)
  220. {
  221. rdev->pll_errata = 0;
  222. }
  223. int rv515_mc_wait_for_idle(struct radeon_device *rdev)
  224. {
  225. unsigned i;
  226. uint32_t tmp;
  227. for (i = 0; i < rdev->usec_timeout; i++) {
  228. /* read MC_STATUS */
  229. tmp = RREG32_MC(RV515_MC_STATUS);
  230. if (tmp & RV515_MC_STATUS_IDLE) {
  231. return 0;
  232. }
  233. DRM_UDELAY(1);
  234. }
  235. return -1;
  236. }
  237. void rv515_gpu_init(struct radeon_device *rdev)
  238. {
  239. unsigned pipe_select_current, gb_pipe_select, tmp;
  240. r100_hdp_reset(rdev);
  241. r100_rb2d_reset(rdev);
  242. if (r100_gui_wait_for_idle(rdev)) {
  243. printk(KERN_WARNING "Failed to wait GUI idle while "
  244. "reseting GPU. Bad things might happen.\n");
  245. }
  246. rs600_disable_vga(rdev);
  247. r420_pipes_init(rdev);
  248. gb_pipe_select = RREG32(0x402C);
  249. tmp = RREG32(0x170C);
  250. pipe_select_current = (tmp >> 2) & 3;
  251. tmp = (1 << pipe_select_current) |
  252. (((gb_pipe_select >> 8) & 0xF) << 4);
  253. WREG32_PLL(0x000D, tmp);
  254. if (r100_gui_wait_for_idle(rdev)) {
  255. printk(KERN_WARNING "Failed to wait GUI idle while "
  256. "reseting GPU. Bad things might happen.\n");
  257. }
  258. if (rv515_mc_wait_for_idle(rdev)) {
  259. printk(KERN_WARNING "Failed to wait MC idle while "
  260. "programming pipes. Bad things might happen.\n");
  261. }
  262. }
  263. int rv515_ga_reset(struct radeon_device *rdev)
  264. {
  265. uint32_t tmp;
  266. bool reinit_cp;
  267. int i;
  268. reinit_cp = rdev->cp.ready;
  269. rdev->cp.ready = false;
  270. for (i = 0; i < rdev->usec_timeout; i++) {
  271. WREG32(RADEON_CP_CSQ_MODE, 0);
  272. WREG32(RADEON_CP_CSQ_CNTL, 0);
  273. WREG32(RADEON_RBBM_SOFT_RESET, 0x32005);
  274. (void)RREG32(RADEON_RBBM_SOFT_RESET);
  275. udelay(200);
  276. WREG32(RADEON_RBBM_SOFT_RESET, 0);
  277. /* Wait to prevent race in RBBM_STATUS */
  278. mdelay(1);
  279. tmp = RREG32(RADEON_RBBM_STATUS);
  280. if (tmp & ((1 << 20) | (1 << 26))) {
  281. DRM_ERROR("VAP & CP still busy (RBBM_STATUS=0x%08X)\n", tmp);
  282. /* GA still busy soft reset it */
  283. WREG32(0x429C, 0x200);
  284. WREG32(R300_VAP_PVS_STATE_FLUSH_REG, 0);
  285. WREG32(0x43E0, 0);
  286. WREG32(0x43E4, 0);
  287. WREG32(0x24AC, 0);
  288. }
  289. /* Wait to prevent race in RBBM_STATUS */
  290. mdelay(1);
  291. tmp = RREG32(RADEON_RBBM_STATUS);
  292. if (!(tmp & ((1 << 20) | (1 << 26)))) {
  293. break;
  294. }
  295. }
  296. for (i = 0; i < rdev->usec_timeout; i++) {
  297. tmp = RREG32(RADEON_RBBM_STATUS);
  298. if (!(tmp & ((1 << 20) | (1 << 26)))) {
  299. DRM_INFO("GA reset succeed (RBBM_STATUS=0x%08X)\n",
  300. tmp);
  301. DRM_INFO("GA_IDLE=0x%08X\n", RREG32(0x425C));
  302. DRM_INFO("RB3D_RESET_STATUS=0x%08X\n", RREG32(0x46f0));
  303. DRM_INFO("ISYNC_CNTL=0x%08X\n", RREG32(0x1724));
  304. if (reinit_cp) {
  305. return r100_cp_init(rdev, rdev->cp.ring_size);
  306. }
  307. return 0;
  308. }
  309. DRM_UDELAY(1);
  310. }
  311. tmp = RREG32(RADEON_RBBM_STATUS);
  312. DRM_ERROR("Failed to reset GA ! (RBBM_STATUS=0x%08X)\n", tmp);
  313. return -1;
  314. }
  315. int rv515_gpu_reset(struct radeon_device *rdev)
  316. {
  317. uint32_t status;
  318. /* reset order likely matter */
  319. status = RREG32(RADEON_RBBM_STATUS);
  320. /* reset HDP */
  321. r100_hdp_reset(rdev);
  322. /* reset rb2d */
  323. if (status & ((1 << 17) | (1 << 18) | (1 << 27))) {
  324. r100_rb2d_reset(rdev);
  325. }
  326. /* reset GA */
  327. if (status & ((1 << 20) | (1 << 26))) {
  328. rv515_ga_reset(rdev);
  329. }
  330. /* reset CP */
  331. status = RREG32(RADEON_RBBM_STATUS);
  332. if (status & (1 << 16)) {
  333. r100_cp_reset(rdev);
  334. }
  335. /* Check if GPU is idle */
  336. status = RREG32(RADEON_RBBM_STATUS);
  337. if (status & (1 << 31)) {
  338. DRM_ERROR("Failed to reset GPU (RBBM_STATUS=0x%08X)\n", status);
  339. return -1;
  340. }
  341. DRM_INFO("GPU reset succeed (RBBM_STATUS=0x%08X)\n", status);
  342. return 0;
  343. }
  344. /*
  345. * VRAM info
  346. */
  347. static void rv515_vram_get_type(struct radeon_device *rdev)
  348. {
  349. uint32_t tmp;
  350. rdev->mc.vram_width = 128;
  351. rdev->mc.vram_is_ddr = true;
  352. tmp = RREG32_MC(RV515_MC_CNTL);
  353. tmp &= RV515_MEM_NUM_CHANNELS_MASK;
  354. switch (tmp) {
  355. case 0:
  356. rdev->mc.vram_width = 64;
  357. break;
  358. case 1:
  359. rdev->mc.vram_width = 128;
  360. break;
  361. default:
  362. rdev->mc.vram_width = 128;
  363. break;
  364. }
  365. }
  366. void rv515_vram_info(struct radeon_device *rdev)
  367. {
  368. rv515_vram_get_type(rdev);
  369. rdev->mc.vram_size = RREG32(RADEON_CONFIG_MEMSIZE);
  370. rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
  371. rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
  372. }
  373. /*
  374. * Indirect registers accessor
  375. */
  376. uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg)
  377. {
  378. uint32_t r;
  379. WREG32(R520_MC_IND_INDEX, 0x7f0000 | (reg & 0xffff));
  380. r = RREG32(R520_MC_IND_DATA);
  381. WREG32(R520_MC_IND_INDEX, 0);
  382. return r;
  383. }
  384. void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
  385. {
  386. WREG32(R520_MC_IND_INDEX, 0xff0000 | ((reg) & 0xffff));
  387. WREG32(R520_MC_IND_DATA, (v));
  388. WREG32(R520_MC_IND_INDEX, 0);
  389. }
  390. uint32_t rv515_pcie_rreg(struct radeon_device *rdev, uint32_t reg)
  391. {
  392. uint32_t r;
  393. WREG32(RADEON_PCIE_INDEX, ((reg) & 0x7ff));
  394. (void)RREG32(RADEON_PCIE_INDEX);
  395. r = RREG32(RADEON_PCIE_DATA);
  396. return r;
  397. }
  398. void rv515_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
  399. {
  400. WREG32(RADEON_PCIE_INDEX, ((reg) & 0x7ff));
  401. (void)RREG32(RADEON_PCIE_INDEX);
  402. WREG32(RADEON_PCIE_DATA, (v));
  403. (void)RREG32(RADEON_PCIE_DATA);
  404. }
  405. /*
  406. * Debugfs info
  407. */
  408. #if defined(CONFIG_DEBUG_FS)
  409. static int rv515_debugfs_pipes_info(struct seq_file *m, void *data)
  410. {
  411. struct drm_info_node *node = (struct drm_info_node *) m->private;
  412. struct drm_device *dev = node->minor->dev;
  413. struct radeon_device *rdev = dev->dev_private;
  414. uint32_t tmp;
  415. tmp = RREG32(R400_GB_PIPE_SELECT);
  416. seq_printf(m, "GB_PIPE_SELECT 0x%08x\n", tmp);
  417. tmp = RREG32(R500_SU_REG_DEST);
  418. seq_printf(m, "SU_REG_DEST 0x%08x\n", tmp);
  419. tmp = RREG32(R300_GB_TILE_CONFIG);
  420. seq_printf(m, "GB_TILE_CONFIG 0x%08x\n", tmp);
  421. tmp = RREG32(R300_DST_PIPE_CONFIG);
  422. seq_printf(m, "DST_PIPE_CONFIG 0x%08x\n", tmp);
  423. return 0;
  424. }
  425. static int rv515_debugfs_ga_info(struct seq_file *m, void *data)
  426. {
  427. struct drm_info_node *node = (struct drm_info_node *) m->private;
  428. struct drm_device *dev = node->minor->dev;
  429. struct radeon_device *rdev = dev->dev_private;
  430. uint32_t tmp;
  431. tmp = RREG32(0x2140);
  432. seq_printf(m, "VAP_CNTL_STATUS 0x%08x\n", tmp);
  433. radeon_gpu_reset(rdev);
  434. tmp = RREG32(0x425C);
  435. seq_printf(m, "GA_IDLE 0x%08x\n", tmp);
  436. return 0;
  437. }
  438. static struct drm_info_list rv515_pipes_info_list[] = {
  439. {"rv515_pipes_info", rv515_debugfs_pipes_info, 0, NULL},
  440. };
  441. static struct drm_info_list rv515_ga_info_list[] = {
  442. {"rv515_ga_info", rv515_debugfs_ga_info, 0, NULL},
  443. };
  444. #endif
  445. int rv515_debugfs_pipes_info_init(struct radeon_device *rdev)
  446. {
  447. #if defined(CONFIG_DEBUG_FS)
  448. return radeon_debugfs_add_files(rdev, rv515_pipes_info_list, 1);
  449. #else
  450. return 0;
  451. #endif
  452. }
  453. int rv515_debugfs_ga_info_init(struct radeon_device *rdev)
  454. {
  455. #if defined(CONFIG_DEBUG_FS)
  456. return radeon_debugfs_add_files(rdev, rv515_ga_info_list, 1);
  457. #else
  458. return 0;
  459. #endif
  460. }
  461. /*
  462. * Asic initialization
  463. */
  464. static const unsigned r500_reg_safe_bm[159] = {
  465. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  466. 0xFFFFFFBF, 0xFFFFFFFF, 0xFFFFFFBF, 0xFFFFFFFF,
  467. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  468. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  469. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  470. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  471. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  472. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  473. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  474. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  475. 0x17FF1FFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFF30FFBF,
  476. 0xFFFFFFF8, 0xC3E6FFFF, 0xFFFFF6DF, 0xFFFFFFFF,
  477. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  478. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  479. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF03F,
  480. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  481. 0xFFFFFFFF, 0xFFFFEFCE, 0xF00EBFFF, 0x007C0000,
  482. 0xF0000038, 0xFF000009, 0xFFFFFFFF, 0xFFFFFFFF,
  483. 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF,
  484. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  485. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  486. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  487. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  488. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  489. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  490. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  491. 0xFFFFF7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  492. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  493. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  494. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  495. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  496. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  497. 0x1FFFFC78, 0xFFFFE000, 0xFFFFFFFE, 0xFFFFFFFF,
  498. 0x38CF8F50, 0xFFF88082, 0xFF0000FC, 0xFAE009FF,
  499. 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000,
  500. 0xFFFF8CFC, 0xFFFFC1FF, 0xFFFFFFFF, 0xFFFFFFFF,
  501. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
  502. 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF80FFFF,
  503. 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  504. 0x0003FC01, 0x3FFFFCF8, 0xFE800B19,
  505. };
  506. int rv515_init(struct radeon_device *rdev)
  507. {
  508. rdev->config.r300.reg_safe_bm = r500_reg_safe_bm;
  509. rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(r500_reg_safe_bm);
  510. return 0;
  511. }