Rev 1246 | Rev 1313 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1246 | Rev 1268 | ||
---|---|---|---|
Line 336... | Line 336... | ||
336 | 336 | ||
337 | int r600_mc_init(struct radeon_device *rdev) |
337 | int r600_mc_init(struct radeon_device *rdev) |
338 | { |
338 | { |
339 | fixed20_12 a; |
339 | fixed20_12 a; |
340 | u32 tmp; |
340 | u32 tmp; |
341 | int chansize; |
341 | int chansize, numchan; |
Line 342... | Line 342... | ||
342 | int r; |
342 | int r; |
343 | - | ||
344 | /* Get VRAM informations */ |
343 | |
345 | rdev->mc.vram_width = 128; |
344 | /* Get VRAM informations */ |
346 | rdev->mc.vram_is_ddr = true; |
345 | rdev->mc.vram_is_ddr = true; |
347 | tmp = RREG32(RAMCFG); |
346 | tmp = RREG32(RAMCFG); |
348 | if (tmp & CHANSIZE_OVERRIDE) { |
347 | if (tmp & CHANSIZE_OVERRIDE) { |
349 | chansize = 16; |
348 | chansize = 16; |
350 | } else if (tmp & CHANSIZE_MASK) { |
349 | } else if (tmp & CHANSIZE_MASK) { |
351 | chansize = 64; |
350 | chansize = 64; |
352 | } else { |
351 | } else { |
353 | chansize = 32; |
352 | chansize = 32; |
354 | } |
353 | } |
- | 354 | tmp = RREG32(CHMAP); |
|
355 | if (rdev->family == CHIP_R600) { |
355 | switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) { |
356 | rdev->mc.vram_width = 8 * chansize; |
356 | case 0: |
- | 357 | default: |
|
357 | } else if (rdev->family == CHIP_RV670) { |
358 | numchan = 1; |
358 | rdev->mc.vram_width = 4 * chansize; |
359 | break; |
- | 360 | case 1: |
|
- | 361 | numchan = 2; |
|
359 | } else if ((rdev->family == CHIP_RV610) || |
362 | break; |
360 | (rdev->family == CHIP_RV620)) { |
363 | case 2: |
361 | rdev->mc.vram_width = chansize; |
364 | numchan = 4; |
362 | } else if ((rdev->family == CHIP_RV630) || |
365 | break; |
- | 366 | case 3: |
|
363 | (rdev->family == CHIP_RV635)) { |
367 | numchan = 8; |
- | 368 | break; |
|
364 | rdev->mc.vram_width = 2 * chansize; |
369 | } |
365 | } |
370 | rdev->mc.vram_width = numchan * chansize; |
366 | /* Could aper size report 0 ? */ |
371 | /* Could aper size report 0 ? */ |
367 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
372 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
368 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
373 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
Line 401... | Line 406... | ||
401 | */ |
406 | */ |
402 | rdev->mc.vram_location = 0x00000000UL; |
407 | rdev->mc.vram_location = 0x00000000UL; |
403 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
408 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
404 | } |
409 | } |
405 | } else { |
410 | } else { |
406 | if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) { |
411 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; |
407 | rdev->mc.vram_location = (RREG32(MC_VM_FB_LOCATION) & |
412 | rdev->mc.vram_location = (RREG32(MC_VM_FB_LOCATION) & |
408 | 0xFFFF) << 24; |
413 | 0xFFFF) << 24; |
409 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; |
- | |
410 | tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size; |
414 | tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size; |
411 | if ((0xFFFFFFFFUL - tmp) >= rdev->mc.gtt_size) { |
415 | if ((0xFFFFFFFFUL - tmp) >= rdev->mc.gtt_size) { |
412 | /* Enough place after vram */ |
416 | /* Enough place after vram */ |
413 | rdev->mc.gtt_location = tmp; |
417 | rdev->mc.gtt_location = tmp; |
414 | } else if (rdev->mc.vram_location >= rdev->mc.gtt_size) { |
418 | } else if (rdev->mc.vram_location >= rdev->mc.gtt_size) { |
Line 425... | Line 429... | ||
425 | rdev->mc.gtt_location = tmp; |
429 | rdev->mc.gtt_location = tmp; |
426 | rdev->mc.gtt_size = 0xFFFFFFFFUL - tmp; |
430 | rdev->mc.gtt_size = 0xFFFFFFFFUL - tmp; |
427 | } |
431 | } |
428 | } |
432 | } |
429 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
433 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
430 | } else { |
- | |
431 | rdev->mc.vram_location = 0x00000000UL; |
- | |
432 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; |
- | |
433 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; |
- | |
434 | } |
- | |
435 | } |
434 | } |
436 | rdev->mc.vram_start = rdev->mc.vram_location; |
435 | rdev->mc.vram_start = rdev->mc.vram_location; |
437 | rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1; |
436 | rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1; |
438 | rdev->mc.gtt_start = rdev->mc.gtt_location; |
437 | rdev->mc.gtt_start = rdev->mc.gtt_location; |
439 | rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size - 1; |
438 | rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size - 1; |
Line 856... | Line 855... | ||
856 | 855 | ||
857 | if (((rdev->family) == CHIP_R600) || |
856 | if (((rdev->family) == CHIP_R600) || |
858 | ((rdev->family) == CHIP_RV630) || |
857 | ((rdev->family) == CHIP_RV630) || |
859 | ((rdev->family) == CHIP_RV610) || |
858 | ((rdev->family) == CHIP_RV610) || |
- | 859 | ((rdev->family) == CHIP_RV620) || |
|
860 | ((rdev->family) == CHIP_RV620) || |
860 | ((rdev->family) == CHIP_RS780) || |
861 | ((rdev->family) == CHIP_RS780)) { |
861 | ((rdev->family) == CHIP_RS880)) { |
862 | WREG32(DB_DEBUG, PREZ_MUST_WAIT_FOR_POSTZ_DONE); |
862 | WREG32(DB_DEBUG, PREZ_MUST_WAIT_FOR_POSTZ_DONE); |
863 | } else { |
863 | } else { |
864 | WREG32(DB_DEBUG, 0); |
864 | WREG32(DB_DEBUG, 0); |
865 | } |
865 | } |
Line 873... | Line 873... | ||
873 | WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(0)); |
873 | WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(0)); |
Line 874... | Line 874... | ||
874 | 874 | ||
875 | tmp = RREG32(SQ_MS_FIFO_SIZES); |
875 | tmp = RREG32(SQ_MS_FIFO_SIZES); |
876 | if (((rdev->family) == CHIP_RV610) || |
876 | if (((rdev->family) == CHIP_RV610) || |
- | 877 | ((rdev->family) == CHIP_RV620) || |
|
877 | ((rdev->family) == CHIP_RV620) || |
878 | ((rdev->family) == CHIP_RS780) || |
878 | ((rdev->family) == CHIP_RS780)) { |
879 | ((rdev->family) == CHIP_RS880)) { |
879 | tmp = (CACHE_FIFO_SIZE(0xa) | |
880 | tmp = (CACHE_FIFO_SIZE(0xa) | |
880 | FETCH_FIFO_HIWATER(0xa) | |
881 | FETCH_FIFO_HIWATER(0xa) | |
881 | DONE_FIFO_HIWATER(0xe0) | |
882 | DONE_FIFO_HIWATER(0xe0) | |
882 | ALU_UPDATE_FIFO_HIWATER(0x8)); |
883 | ALU_UPDATE_FIFO_HIWATER(0x8)); |
Line 916... | Line 917... | ||
916 | NUM_VS_STACK_ENTRIES(128)); |
917 | NUM_VS_STACK_ENTRIES(128)); |
917 | sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(0) | |
918 | sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(0) | |
918 | NUM_ES_STACK_ENTRIES(0)); |
919 | NUM_ES_STACK_ENTRIES(0)); |
919 | } else if (((rdev->family) == CHIP_RV610) || |
920 | } else if (((rdev->family) == CHIP_RV610) || |
920 | ((rdev->family) == CHIP_RV620) || |
921 | ((rdev->family) == CHIP_RV620) || |
- | 922 | ((rdev->family) == CHIP_RS780) || |
|
921 | ((rdev->family) == CHIP_RS780)) { |
923 | ((rdev->family) == CHIP_RS880)) { |
922 | /* no vertex cache */ |
924 | /* no vertex cache */ |
923 | sq_config &= ~VC_ENABLE; |
925 | sq_config &= ~VC_ENABLE; |
Line 924... | Line 926... | ||
924 | 926 | ||
925 | sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) | |
927 | sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) | |
Line 973... | Line 975... | ||
973 | WREG32(SQ_STACK_RESOURCE_MGMT_1, sq_stack_resource_mgmt_1); |
975 | WREG32(SQ_STACK_RESOURCE_MGMT_1, sq_stack_resource_mgmt_1); |
974 | WREG32(SQ_STACK_RESOURCE_MGMT_2, sq_stack_resource_mgmt_2); |
976 | WREG32(SQ_STACK_RESOURCE_MGMT_2, sq_stack_resource_mgmt_2); |
Line 975... | Line 977... | ||
975 | 977 | ||
976 | if (((rdev->family) == CHIP_RV610) || |
978 | if (((rdev->family) == CHIP_RV610) || |
- | 979 | ((rdev->family) == CHIP_RV620) || |
|
977 | ((rdev->family) == CHIP_RV620) || |
980 | ((rdev->family) == CHIP_RS780) || |
978 | ((rdev->family) == CHIP_RS780)) { |
981 | ((rdev->family) == CHIP_RS880)) { |
979 | WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(TC_ONLY)); |
982 | WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(TC_ONLY)); |
980 | } else { |
983 | } else { |
981 | WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC)); |
984 | WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC)); |
Line 999... | Line 1002... | ||
999 | 1002 | ||
1000 | WREG32(VGT_STRMOUT_EN, 0); |
1003 | WREG32(VGT_STRMOUT_EN, 0); |
1001 | tmp = rdev->config.r600.max_pipes * 16; |
1004 | tmp = rdev->config.r600.max_pipes * 16; |
1002 | switch (rdev->family) { |
1005 | switch (rdev->family) { |
1003 | case CHIP_RV610: |
- | |
1004 | case CHIP_RS780: |
1006 | case CHIP_RV610: |
- | 1007 | case CHIP_RV620: |
|
- | 1008 | case CHIP_RS780: |
|
1005 | case CHIP_RV620: |
1009 | case CHIP_RS880: |
1006 | tmp += 32; |
1010 | tmp += 32; |
1007 | break; |
1011 | break; |
1008 | case CHIP_RV670: |
1012 | case CHIP_RV670: |
1009 | tmp += 128; |
1013 | tmp += 128; |
Line 1041... | Line 1045... | ||
1041 | WREG32(CB_COLOR7_BASE, 0); |
1045 | WREG32(CB_COLOR7_BASE, 0); |
1042 | WREG32(CB_COLOR7_FRAG, 0); |
1046 | WREG32(CB_COLOR7_FRAG, 0); |
Line 1043... | Line 1047... | ||
1043 | 1047 | ||
1044 | switch (rdev->family) { |
1048 | switch (rdev->family) { |
1045 | case CHIP_RV610: |
- | |
1046 | case CHIP_RS780: |
1049 | case CHIP_RV610: |
- | 1050 | case CHIP_RV620: |
|
- | 1051 | case CHIP_RS780: |
|
1047 | case CHIP_RV620: |
1052 | case CHIP_RS880: |
1048 | tmp = TC_L2_SIZE(8); |
1053 | tmp = TC_L2_SIZE(8); |
1049 | break; |
1054 | break; |
1050 | case CHIP_RV630: |
1055 | case CHIP_RV630: |
1051 | case CHIP_RV635: |
1056 | case CHIP_RV635: |
Line 1286... | Line 1291... | ||
1286 | } |
1291 | } |
1287 | /* Initialize scratch registers */ |
1292 | /* Initialize scratch registers */ |
1288 | r600_scratch_init(rdev); |
1293 | r600_scratch_init(rdev); |
1289 | /* Initialize surface registers */ |
1294 | /* Initialize surface registers */ |
1290 | radeon_surface_init(rdev); |
1295 | radeon_surface_init(rdev); |
- | 1296 | /* Initialize clocks */ |
|
1291 | radeon_get_clock_info(rdev->ddev); |
1297 | radeon_get_clock_info(rdev->ddev); |
1292 | r = radeon_clocks_init(rdev); |
1298 | r = radeon_clocks_init(rdev); |
1293 | if (r) |
1299 | if (r) |
1294 | return r; |
1300 | return r; |
- | 1301 | /* Initialize power management */ |
|
- | 1302 | radeon_pm_init(rdev); |
|
1295 | /* Fence driver */ |
1303 | /* Fence driver */ |
1296 | // r = radeon_fence_driver_init(rdev); |
1304 | // r = radeon_fence_driver_init(rdev); |
1297 | // if (r) |
1305 | // if (r) |
1298 | // return r; |
1306 | // return r; |
1299 | r = r600_mc_init(rdev); |
1307 | r = r600_mc_init(rdev); |