* reorganize register definitions

There were a large number if incorrect, duplicated, misplaced
  registers that were leading to bugs in the code.  This is my first
  shot at cleaning them up.  Luckly as we are using AtomBIOS the number
  of registers we need to know about is shrinking.
* remove registers left over from register banging days
* r770 is less then r710, r720 in the drm sources. Fix in code.
* enable newer radeons for testing


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42930 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexander von Gluck IV 2011-10-28 04:30:54 +00:00
parent 139848f37a
commit 025d4eed52
13 changed files with 699 additions and 1380 deletions

View File

@ -0,0 +1,65 @@
/*
* Copyright 2009 Advanced Micro Devices, Inc.
* Copyright 2009 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Dave Airlie
* Alex Deucher
* Jerome Glisse
*/
#ifndef AVIVO_H
#define AVIVO_H
#define D1CRTC_CONTROL 0x6080
#define CRTC_EN (1 << 0)
#define D1CRTC_STATUS 0x609c
#define D1CRTC_UPDATE_LOCK 0x60E8
#define D1GRPH_SWAP_CNTL 0x610C
#define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
#define D1GRPH_SECONDARY_SURFACE_ADDRESS 0x6118
#define D2CRTC_CONTROL 0x6880
#define D2CRTC_STATUS 0x689c
#define D2CRTC_UPDATE_LOCK 0x68E8
#define D2GRPH_SWAP_CNTL 0x690C
#define D2GRPH_PRIMARY_SURFACE_ADDRESS 0x6910
#define D2GRPH_SECONDARY_SURFACE_ADDRESS 0x6918
#define D1VGA_CONTROL 0x0330
#define DVGA_CONTROL_MODE_ENABLE (1 << 0)
#define DVGA_CONTROL_TIMING_SELECT (1 << 8)
#define DVGA_CONTROL_SYNC_POLARITY_SELECT (1 << 9)
#define DVGA_CONTROL_OVERSCAN_TIMING_SELECT (1 << 10)
#define DVGA_CONTROL_OVERSCAN_COLOR_EN (1 << 16)
#define DVGA_CONTROL_ROTATE (1 << 24)
#define D2VGA_CONTROL 0x0338
#define VGA_HDP_CONTROL 0x328
#define VGA_MEM_PAGE_SELECT_EN (1 << 0)
#define VGA_MEMORY_DISABLE (1 << 4)
#define VGA_RBBM_LOCK_DISABLE (1 << 8)
#define VGA_SOFT_RESET (1 << 16)
#define VGA_MEMORY_BASE_ADDRESS 0x0310
#define VGA_RENDER_CONTROL 0x0300
#define VGA_VSTATUS_CNTL_MASK 0x00030000
#endif

View File

@ -398,11 +398,7 @@
*/
#define AVIVO_D1GRPH_LUT_SEL 0x6108
#define AVIVO_D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
#define R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914
#define R700_D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114
#define AVIVO_D1GRPH_SECONDARY_SURFACE_ADDRESS 0x6118
#define R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x691c
#define R700_D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x611c
#define AVIVO_D1GRPH_PITCH 0x6120
#define AVIVO_D1GRPH_SURFACE_OFFSET_X 0x6124
#define AVIVO_D1GRPH_SURFACE_OFFSET_Y 0x6128

View File

@ -29,6 +29,10 @@
#define __R600_REG_H__
#define R600_CRTC0_REGISTER_OFFSET 0x0
#define R600_CRTC1_REGISTER_OFFSET 0x800
#define R600_PCIE_PORT_INDEX 0x0038
#define R600_PCIE_PORT_DATA 0x003c
@ -50,29 +54,10 @@
#define R600_MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2194
#define R600_MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x2198
#define R700_MC_VM_FB_LOCATION 0x2024
#define R700_MC_FB_BASE_MASK 0x0000FFFF
#define R700_MC_FB_BASE_SHIFT 0
#define R700_MC_FB_TOP_MASK 0xFFFF0000
#define R700_MC_FB_TOP_SHIFT 16
#define R700_MC_VM_AGP_TOP 0x2028
#define R700_MC_AGP_TOP_MASK 0x0003FFFF
#define R700_MC_AGP_TOP_SHIFT 0
#define R700_MC_VM_AGP_BOT 0x202c
#define R700_MC_AGP_BOT_MASK 0x0003FFFF
#define R700_MC_AGP_BOT_SHIFT 0
#define R700_MC_VM_AGP_BASE 0x2030
#define R700_MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
#define R700_LOGICAL_PAGE_NUMBER_MASK 0x000FFFFF
#define R700_LOGICAL_PAGE_NUMBER_SHIFT 0
#define R700_MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038
#define R700_MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203c
#define R600_RAMCFG 0x2408
# define R600_CHANSIZE (1 << 7)
# define R600_CHANSIZE_OVERRIDE (1 << 10)
#define R600_GENERAL_PWRMGT 0x618
# define R600_OPEN_DRAIN_PADS (1 << 11)

View File

@ -0,0 +1,404 @@
/*
* Copyright 2009 Advanced Micro Devices, Inc.
* Copyright 2009 Red Hat Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Authors: Dave Airlie
* Alex Deucher
* Jerome Glisse
*/
#ifndef RV770_H
#define RV770_H
#define R7XX_MAX_SH_GPRS 256
#define R7XX_MAX_TEMP_GPRS 16
#define R7XX_MAX_SH_THREADS 256
#define R7XX_MAX_SH_STACK_ENTRIES 4096
#define R7XX_MAX_BACKENDS 8
#define R7XX_MAX_BACKENDS_MASK 0xff
#define R7XX_MAX_SIMDS 16
#define R7XX_MAX_SIMDS_MASK 0xffff
#define R7XX_MAX_PIPES 8
#define R7XX_MAX_PIPES_MASK 0xff
#if 0
/* Registers */
#define CB_COLOR0_BASE 0x28040
#define CB_COLOR1_BASE 0x28044
#define CB_COLOR2_BASE 0x28048
#define CB_COLOR3_BASE 0x2804C
#define CB_COLOR4_BASE 0x28050
#define CB_COLOR5_BASE 0x28054
#define CB_COLOR6_BASE 0x28058
#define CB_COLOR7_BASE 0x2805C
#define CB_COLOR7_FRAG 0x280FC
#define CC_GC_SHADER_PIPE_CONFIG 0x8950
#define CC_RB_BACKEND_DISABLE 0x98F4
#define BACKEND_DISABLE(x) ((x) << 16)
#define CC_SYS_RB_BACKEND_DISABLE 0x3F88
#define CGTS_SYS_TCC_DISABLE 0x3F90
#define CGTS_TCC_DISABLE 0x9148
#define CGTS_USER_SYS_TCC_DISABLE 0x3F94
#define CGTS_USER_TCC_DISABLE 0x914C
#define CP_ME_CNTL 0x86D8
#define CP_ME_HALT (1<<28)
#define CP_PFP_HALT (1<<26)
#define CP_ME_RAM_DATA 0xC160
#define CP_ME_RAM_RADDR 0xC158
#define CP_ME_RAM_WADDR 0xC15C
#define CP_MEQ_THRESHOLDS 0x8764
#define STQ_SPLIT(x) ((x) << 0)
#define CP_PERFMON_CNTL 0x87FC
#define CP_PFP_UCODE_ADDR 0xC150
#define CP_PFP_UCODE_DATA 0xC154
#define CP_QUEUE_THRESHOLDS 0x8760
#define ROQ_IB1_START(x) ((x) << 0)
#define ROQ_IB2_START(x) ((x) << 8)
#define CP_RB_CNTL 0xC104
#define RB_BUFSZ(x) ((x) << 0)
#define RB_BLKSZ(x) ((x) << 8)
#define RB_NO_UPDATE (1 << 27)
#define RB_RPTR_WR_ENA (1 << 31)
#define BUF_SWAP_32BIT (2 << 16)
#define CP_RB_RPTR 0x8700
#define CP_RB_RPTR_ADDR 0xC10C
#define CP_RB_RPTR_ADDR_HI 0xC110
#define CP_RB_RPTR_WR 0xC108
#define CP_RB_WPTR 0xC114
#define CP_RB_WPTR_ADDR 0xC118
#define CP_RB_WPTR_ADDR_HI 0xC11C
#define CP_RB_WPTR_DELAY 0x8704
#define CP_SEM_WAIT_TIMER 0x85BC
#define DB_DEBUG3 0x98B0
#define DB_CLK_OFF_DELAY(x) ((x) << 11)
#define DB_DEBUG4 0x9B8C
#define DISABLE_TILE_COVERED_FOR_PS_ITER (1 << 6)
#define DCP_TILING_CONFIG 0x6CA0
#define PIPE_TILING(x) ((x) << 1)
#define BANK_TILING(x) ((x) << 4)
#define GROUP_SIZE(x) ((x) << 6)
#define ROW_TILING(x) ((x) << 8)
#define BANK_SWAPS(x) ((x) << 11)
#define SAMPLE_SPLIT(x) ((x) << 14)
#define BACKEND_MAP(x) ((x) << 16)
#define GB_TILING_CONFIG 0x98F0
#define GC_USER_SHADER_PIPE_CONFIG 0x8954
#define INACTIVE_QD_PIPES(x) ((x) << 8)
#define INACTIVE_QD_PIPES_MASK 0x0000FF00
#define INACTIVE_SIMDS(x) ((x) << 16)
#define INACTIVE_SIMDS_MASK 0x00FF0000
#define GRBM_CNTL 0x8000
#define GRBM_READ_TIMEOUT(x) ((x) << 0)
#define GRBM_SOFT_RESET 0x8020
#define SOFT_RESET_CP (1<<0)
#define GRBM_STATUS 0x8010
#define CMDFIFO_AVAIL_MASK 0x0000000F
#define GUI_ACTIVE (1<<31)
#define GRBM_STATUS2 0x8014
#define CG_MULT_THERMAL_STATUS 0x740
#define ASIC_T(x) ((x) << 16)
#define ASIC_T_MASK 0x3FF0000
#define ASIC_T_SHIFT 16
#endif
#define HDP_HOST_PATH_CNTL 0x2C00
#define HDP_NONSURFACE_BASE 0x2C04
#define HDP_NONSURFACE_INFO 0x2C08
#define HDP_NONSURFACE_SIZE 0x2C0C
#define HDP_REG_COHERENCY_FLUSH_CNTL 0x54A0
#define HDP_TILING_CONFIG 0x2F3C
#define HDP_DEBUG1 0x2F34
#define R700_MC_SHARED_CHMAP 0x2004
#define NOOFCHAN_SHIFT 12
#define NOOFCHAN_MASK 0x00003000
#define R700_MC_SHARED_CHREMAP 0x2008
#define R700_MC_ARB_RAMCFG 0x2760
#define NOOFBANK_SHIFT 0
#define NOOFBANK_MASK 0x00000003
#define NOOFRANK_SHIFT 2
#define NOOFRANK_MASK 0x00000004
#define NOOFROWS_SHIFT 3
#define NOOFROWS_MASK 0x00000038
#define NOOFCOLS_SHIFT 6
#define NOOFCOLS_MASK 0x000000C0
#define CHANSIZE_SHIFT 8
#define CHANSIZE_MASK 0x00000100
#define BURSTLENGTH_SHIFT 9
#define BURSTLENGTH_MASK 0x00000200
#define CHANSIZE_OVERRIDE (1 << 11)
#define R700_MC_VM_AGP_TOP 0x2028
#define R700_MC_VM_AGP_BOT 0x202C
#define R700_MC_VM_AGP_BASE 0x2030
#define R700_MC_VM_FB_LOCATION 0x2024
#define R700_MC_VM_MB_L1_TLB0_CNTL 0x2234
#define R700_MC_VM_MB_L1_TLB1_CNTL 0x2238
#define R700_MC_VM_MB_L1_TLB2_CNTL 0x223C
#define R700_MC_VM_MB_L1_TLB3_CNTL 0x2240
#define ENABLE_L1_TLB (1 << 0)
#define ENABLE_L1_FRAGMENT_PROCESSING (1 << 1)
#define SYSTEM_ACCESS_MODE_PA_ONLY (0 << 3)
#define SYSTEM_ACCESS_MODE_USE_SYS_MAP (1 << 3)
#define SYSTEM_ACCESS_MODE_IN_SYS (2 << 3)
#define SYSTEM_ACCESS_MODE_NOT_IN_SYS (3 << 3)
#define SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU (0 << 5)
#define EFFECTIVE_L1_TLB_SIZE(x) ((x)<<15)
#define EFFECTIVE_L1_QUEUE_SIZE(x) ((x)<<18)
#define R700_MC_VM_MD_L1_TLB0_CNTL 0x2654
#define R700_MC_VM_MD_L1_TLB1_CNTL 0x2658
#define R700_MC_VM_MD_L1_TLB2_CNTL 0x265C
#define R700_MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203C
#define R700_MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038
#define R700_MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
#define PA_CL_ENHANCE 0x8A14
#define CLIP_VTX_REORDER_ENA (1 << 0)
#define NUM_CLIP_SEQ(x) ((x) << 1)
#define PA_SC_AA_CONFIG 0x28C04
#define PA_SC_CLIPRECT_RULE 0x2820C
#define PA_SC_EDGERULE 0x28230
#define PA_SC_FIFO_SIZE 0x8BCC
#define SC_PRIM_FIFO_SIZE(x) ((x) << 0)
#define SC_HIZ_TILE_FIFO_SIZE(x) ((x) << 12)
#define PA_SC_FORCE_EOV_MAX_CNTS 0x8B24
#define FORCE_EOV_MAX_CLK_CNT(x) ((x)<<0)
#define FORCE_EOV_MAX_REZ_CNT(x) ((x)<<16)
#define PA_SC_LINE_STIPPLE 0x28A0C
#define PA_SC_LINE_STIPPLE_STATE 0x8B10
#define PA_SC_MODE_CNTL 0x28A4C
#define PA_SC_MULTI_CHIP_CNTL 0x8B20
#define SC_EARLYZ_TILE_FIFO_SIZE(x) ((x) << 20)
#define R700_SCRATCH_REG0 0x8500
#define R700_SCRATCH_REG1 0x8504
#define R700_SCRATCH_REG2 0x8508
#define R700_SCRATCH_REG3 0x850C
#define R700_SCRATCH_REG4 0x8510
#define R700_SCRATCH_REG5 0x8514
#define R700_SCRATCH_REG6 0x8518
#define R700_SCRATCH_REG7 0x851C
#define R700_SCRATCH_UMSK 0x8540
#define R700_SCRATCH_ADDR 0x8544
#if 0
#define SMX_DC_CTL0 0xA020
#define USE_HASH_FUNCTION (1 << 0)
#define CACHE_DEPTH(x) ((x) << 1)
#define FLUSH_ALL_ON_EVENT (1 << 10)
#define STALL_ON_EVENT (1 << 11)
#define SMX_EVENT_CTL 0xA02C
#define ES_FLUSH_CTL(x) ((x) << 0)
#define GS_FLUSH_CTL(x) ((x) << 3)
#define ACK_FLUSH_CTL(x) ((x) << 6)
#define SYNC_FLUSH_CTL (1 << 8)
#define SPI_CONFIG_CNTL 0x9100
#define GPR_WRITE_PRIORITY(x) ((x) << 0)
#define DISABLE_INTERP_1 (1 << 5)
#define SPI_CONFIG_CNTL_1 0x913C
#define VTX_DONE_DELAY(x) ((x) << 0)
#define INTERP_ONE_PRIM_PER_ROW (1 << 4)
#define SPI_INPUT_Z 0x286D8
#define SPI_PS_IN_CONTROL_0 0x286CC
#define NUM_INTERP(x) ((x)<<0)
#define POSITION_ENA (1<<8)
#define POSITION_CENTROID (1<<9)
#define POSITION_ADDR(x) ((x)<<10)
#define PARAM_GEN(x) ((x)<<15)
#define PARAM_GEN_ADDR(x) ((x)<<19)
#define BARYC_SAMPLE_CNTL(x) ((x)<<26)
#define PERSP_GRADIENT_ENA (1<<28)
#define LINEAR_GRADIENT_ENA (1<<29)
#define POSITION_SAMPLE (1<<30)
#define BARYC_AT_SAMPLE_ENA (1<<31)
#define SQ_CONFIG 0x8C00
#define VC_ENABLE (1 << 0)
#define EXPORT_SRC_C (1 << 1)
#define DX9_CONSTS (1 << 2)
#define ALU_INST_PREFER_VECTOR (1 << 3)
#define DX10_CLAMP (1 << 4)
#define CLAUSE_SEQ_PRIO(x) ((x) << 8)
#define PS_PRIO(x) ((x) << 24)
#define VS_PRIO(x) ((x) << 26)
#define GS_PRIO(x) ((x) << 28)
#define SQ_DYN_GPR_SIZE_SIMD_AB_0 0x8DB0
#define SIMDA_RING0(x) ((x)<<0)
#define SIMDA_RING1(x) ((x)<<8)
#define SIMDB_RING0(x) ((x)<<16)
#define SIMDB_RING1(x) ((x)<<24)
#define SQ_DYN_GPR_SIZE_SIMD_AB_1 0x8DB4
#define SQ_DYN_GPR_SIZE_SIMD_AB_2 0x8DB8
#define SQ_DYN_GPR_SIZE_SIMD_AB_3 0x8DBC
#define SQ_DYN_GPR_SIZE_SIMD_AB_4 0x8DC0
#define SQ_DYN_GPR_SIZE_SIMD_AB_5 0x8DC4
#define SQ_DYN_GPR_SIZE_SIMD_AB_6 0x8DC8
#define SQ_DYN_GPR_SIZE_SIMD_AB_7 0x8DCC
#define ES_PRIO(x) ((x) << 30)
#define SQ_GPR_RESOURCE_MGMT_1 0x8C04
#define NUM_PS_GPRS(x) ((x) << 0)
#define NUM_VS_GPRS(x) ((x) << 16)
#define DYN_GPR_ENABLE (1 << 27)
#define NUM_CLAUSE_TEMP_GPRS(x) ((x) << 28)
#define SQ_GPR_RESOURCE_MGMT_2 0x8C08
#define NUM_GS_GPRS(x) ((x) << 0)
#define NUM_ES_GPRS(x) ((x) << 16)
#define SQ_MS_FIFO_SIZES 0x8CF0
#define CACHE_FIFO_SIZE(x) ((x) << 0)
#define FETCH_FIFO_HIWATER(x) ((x) << 8)
#define DONE_FIFO_HIWATER(x) ((x) << 16)
#define ALU_UPDATE_FIFO_HIWATER(x) ((x) << 24)
#define SQ_STACK_RESOURCE_MGMT_1 0x8C10
#define NUM_PS_STACK_ENTRIES(x) ((x) << 0)
#define NUM_VS_STACK_ENTRIES(x) ((x) << 16)
#define SQ_STACK_RESOURCE_MGMT_2 0x8C14
#define NUM_GS_STACK_ENTRIES(x) ((x) << 0)
#define NUM_ES_STACK_ENTRIES(x) ((x) << 16)
#define SQ_THREAD_RESOURCE_MGMT 0x8C0C
#define NUM_PS_THREADS(x) ((x) << 0)
#define NUM_VS_THREADS(x) ((x) << 8)
#define NUM_GS_THREADS(x) ((x) << 16)
#define NUM_ES_THREADS(x) ((x) << 24)
#define SX_DEBUG_1 0x9058
#define ENABLE_NEW_SMX_ADDRESS (1 << 16)
#define SX_EXPORT_BUFFER_SIZES 0x900C
#define COLOR_BUFFER_SIZE(x) ((x) << 0)
#define POSITION_BUFFER_SIZE(x) ((x) << 8)
#define SMX_BUFFER_SIZE(x) ((x) << 16)
#define SX_MISC 0x28350
#define TA_CNTL_AUX 0x9508
#define DISABLE_CUBE_WRAP (1 << 0)
#define DISABLE_CUBE_ANISO (1 << 1)
#define SYNC_GRADIENT (1 << 24)
#define SYNC_WALKER (1 << 25)
#define SYNC_ALIGNER (1 << 26)
#define BILINEAR_PRECISION_6_BIT (0 << 31)
#define BILINEAR_PRECISION_8_BIT (1 << 31)
#define TCP_CNTL 0x9610
#define TCP_CHAN_STEER 0x9614
#define VGT_CACHE_INVALIDATION 0x88C4
#define CACHE_INVALIDATION(x) ((x)<<0)
#define VC_ONLY 0
#define TC_ONLY 1
#define VC_AND_TC 2
#define AUTO_INVLD_EN(x) ((x) << 6)
#define NO_AUTO 0
#define ES_AUTO 1
#define GS_AUTO 2
#define ES_AND_GS_AUTO 3
#define VGT_ES_PER_GS 0x88CC
#define VGT_GS_PER_ES 0x88C8
#define VGT_GS_PER_VS 0x88E8
#define VGT_GS_VERTEX_REUSE 0x88D4
#define VGT_NUM_INSTANCES 0x8974
#define VGT_OUT_DEALLOC_CNTL 0x28C5C
#define DEALLOC_DIST_MASK 0x0000007F
#define VGT_STRMOUT_EN 0x28AB0
#define VGT_VERTEX_REUSE_BLOCK_CNTL 0x28C58
#define VTX_REUSE_DEPTH_MASK 0x000000FF
#define VM_CONTEXT0_CNTL 0x1410
#define ENABLE_CONTEXT (1 << 0)
#define PAGE_TABLE_DEPTH(x) (((x) & 3) << 1)
#define RANGE_PROTECTION_FAULT_ENABLE_DEFAULT (1 << 4)
#define VM_CONTEXT0_PAGE_TABLE_BASE_ADDR 0x153C
#define VM_CONTEXT0_PAGE_TABLE_END_ADDR 0x157C
#define VM_CONTEXT0_PAGE_TABLE_START_ADDR 0x155C
#define VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR 0x1518
#define VM_L2_CNTL 0x1400
#define ENABLE_L2_CACHE (1 << 0)
#define ENABLE_L2_FRAGMENT_PROCESSING (1 << 1)
#define ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE (1 << 9)
#define EFFECTIVE_L2_QUEUE_SIZE(x) (((x) & 7) << 14)
#define VM_L2_CNTL2 0x1404
#define INVALIDATE_ALL_L1_TLBS (1 << 0)
#define INVALIDATE_L2_CACHE (1 << 1)
#define VM_L2_CNTL3 0x1408
#define BANK_SELECT(x) ((x) << 0)
#define CACHE_UPDATE_MODE(x) ((x) << 6)
#define VM_L2_STATUS 0x140C
#define L2_BUSY (1 << 0)
#define WAIT_UNTIL 0x8040
#define SRBM_STATUS 0x0E50
#endif
#define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
#define D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914
#define D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114
#define D1GRPH_SECONDARY_SURFACE_ADDRESS 0x6118
#define D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x691c
#define D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x611c
/* PCIE link stuff */
#define PCIE_LC_TRAINING_CNTL 0xa1 /* PCIE_P */
#define PCIE_LC_LINK_WIDTH_CNTL 0xa2 /* PCIE_P */
# define LC_LINK_WIDTH_SHIFT 0
# define LC_LINK_WIDTH_MASK 0x7
# define LC_LINK_WIDTH_X0 0
# define LC_LINK_WIDTH_X1 1
# define LC_LINK_WIDTH_X2 2
# define LC_LINK_WIDTH_X4 3
# define LC_LINK_WIDTH_X8 4
# define LC_LINK_WIDTH_X16 6
# define LC_LINK_WIDTH_RD_SHIFT 4
# define LC_LINK_WIDTH_RD_MASK 0x70
# define LC_RECONFIG_ARC_MISSING_ESCAPE (1 << 7)
# define LC_RECONFIG_NOW (1 << 8)
# define LC_RENEGOTIATION_SUPPORT (1 << 9)
# define LC_RENEGOTIATE_EN (1 << 10)
# define LC_SHORT_RECONFIG_EN (1 << 11)
# define LC_UPCONFIGURE_SUPPORT (1 << 12)
# define LC_UPCONFIGURE_DIS (1 << 13)
#define PCIE_LC_SPEED_CNTL 0xa4 /* PCIE_P */
# define LC_GEN2_EN_STRAP (1 << 0)
# define LC_TARGET_LINK_SPEED_OVERRIDE_EN (1 << 1)
# define LC_FORCE_EN_HW_SPEED_CHANGE (1 << 5)
# define LC_FORCE_DIS_HW_SPEED_CHANGE (1 << 6)
# define LC_SPEED_CHANGE_ATTEMPTS_ALLOWED_MASK (0x3 << 8)
# define LC_SPEED_CHANGE_ATTEMPTS_ALLOWED_SHIFT 3
# define LC_CURRENT_DATA_RATE (1 << 11)
# define LC_VOLTAGE_TIMER_SEL_MASK (0xf << 14)
# define LC_CLR_FAILED_SPD_CHANGE_CNT (1 << 21)
# define LC_OTHER_SIDE_EVER_SENT_GEN2 (1 << 23)
# define LC_OTHER_SIDE_SUPPORTS_GEN2 (1 << 24)
#define MM_CFGREGS_CNTL 0x544c
# define MM_WR_TO_CFG_EN (1 << 3)
#define LINK_CNTL2 0x88 /* F0 */
# define TARGET_LINK_SPEED_MASK (0xf << 0)
# define SELECTABLE_DEEMPHASIS (1 << 6)
#endif

View File

@ -14,9 +14,10 @@
#include "radeon_reg.h"
#include "rhd_regs.h" // to phase out
#include "avivo.h"
#include "r500_reg.h"
#include "r600_reg.h"
#include "r700_reg.h"
#include "r800_reg.h"
#include <Accelerant.h>
@ -168,41 +169,7 @@ struct radeon_free_graphics_memory {
// registers
#define R6XX_CONFIG_APER_SIZE 0x5430 // r600>
#define OLD_CONFIG_APER_SIZE 0x0108 // <r600
#define D1CRTC_CONTROL 0x6080
#define CRTC_EN (1 << 0)
#define D1CRTC_STATUS 0x609c
#define D1CRTC_UPDATE_LOCK 0x60E8
#define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
#define D1GRPH_SECONDARY_SURFACE_ADDRESS 0x6118
#define D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914 // r700>
#define D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x691c // r700>
#define D2CRTC_CONTROL 0x6880
#define D2CRTC_STATUS 0x689c
#define D2CRTC_UPDATE_LOCK 0x68E8
#define D2GRPH_PRIMARY_SURFACE_ADDRESS 0x6910
#define D2GRPH_SECONDARY_SURFACE_ADDRESS 0x6918
#define D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114 // r700>
#define D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH 0x611c // r700>
#define D1VGA_CONTROL 0x0330
#define DVGA_CONTROL_MODE_ENABLE (1 << 0)
#define DVGA_CONTROL_TIMING_SELECT (1 << 8)
#define DVGA_CONTROL_SYNC_POLARITY_SELECT (1 << 9)
#define DVGA_CONTROL_OVERSCAN_TIMING_SELECT (1 << 10)
#define DVGA_CONTROL_OVERSCAN_COLOR_EN (1 << 16)
#define DVGA_CONTROL_ROTATE (1 << 24)
#define D2VGA_CONTROL 0x0338
#define VGA_HDP_CONTROL 0x328
#define VGA_MEM_PAGE_SELECT_EN (1 << 0)
#define VGA_MEMORY_DISABLE (1 << 4)
#define VGA_RBBM_LOCK_DISABLE (1 << 8)
#define VGA_SOFT_RESET (1 << 16)
#define VGA_MEMORY_BASE_ADDRESS 0x0310
#define VGA_RENDER_CONTROL 0x0300
#define VGA_VSTATUS_CNTL_MASK 0x00030000
#define CONFIG_MEMSIZE 0x5428 // r600>
// PCI bridge memory management

File diff suppressed because it is too large Load Diff

View File

@ -73,9 +73,9 @@ struct accelerant_info {
struct register_info {
uint16 crtcOffset;
uint16 vgaControl;
uint16 grphEnable;
uint16 grphUpdate;
uint16 grphControl;
uint16 grphSwapControl;
uint16 grphPrimarySurfaceAddr;
@ -89,26 +89,10 @@ struct register_info {
uint16 grphYStart;
uint16 grphXEnd;
uint16 grphYEnd;
uint16 crtControl;
uint16 crtCountControl;
uint16 crtInterlace;
uint16 crtHPolarity;
uint16 crtVPolarity;
uint16 crtHSync;
uint16 crtVSync;
uint16 crtHBlank;
uint16 crtVBlank;
uint16 crtHTotal;
uint16 crtVTotal;
uint16 crtcOffset;
uint16 modeDesktopHeight;
uint16 modeDataFormat;
uint16 modeCenter;
uint16 viewportStart;
uint16 viewportSize;
uint16 sclUpdate;
uint16 sclEnable;
uint16 sclTapControl;
};

View File

@ -34,7 +34,7 @@ extern "C" void _sPrintf(const char *format, ...);
/*! Populate regs with device dependant register locations */
status_t
init_registers(register_info* regs, uint8 crtid)
init_registers(register_info* regs, uint8 crtcID)
{
memset(regs, 0, sizeof(register_info));
@ -43,112 +43,157 @@ init_registers(register_info* regs, uint8 crtid)
if (info.device_chipset >= RADEON_R1000) {
uint32 offset = 0;
// AMD Eyefinity on Evergreen GPUs
if (crtid == 1) {
offset = EVERGREEN_CRTC1_REGISTER_OFFSET;
regs->vgaControl = D2VGA_CONTROL;
} else if (crtid == 2) {
offset = EVERGREEN_CRTC2_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D3VGA_CONTROL;
} else if (crtid == 3) {
offset = EVERGREEN_CRTC3_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D4VGA_CONTROL;
} else if (crtid == 4) {
offset = EVERGREEN_CRTC4_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D5VGA_CONTROL;
} else if (crtid == 5) {
offset = EVERGREEN_CRTC5_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D6VGA_CONTROL;
} else {
offset = EVERGREEN_CRTC0_REGISTER_OFFSET;
regs->vgaControl = D1VGA_CONTROL;
switch(crtcID) {
case 0:
offset = EVERGREEN_CRTC0_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D1VGA_CONTROL;
break;
case 1:
offset = EVERGREEN_CRTC1_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D2VGA_CONTROL;
break;
case 2:
offset = EVERGREEN_CRTC2_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D3VGA_CONTROL;
break;
case 3:
offset = EVERGREEN_CRTC3_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D4VGA_CONTROL;
break;
case 4:
offset = EVERGREEN_CRTC4_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D5VGA_CONTROL;
break;
case 5:
offset = EVERGREEN_CRTC5_REGISTER_OFFSET;
regs->vgaControl = EVERGREEN_D6VGA_CONTROL;
break;
default:
ERROR("%s: Unknown CRTC %" B_PRIu32 "\n",
__func__, crtcID);
return B_ERROR;
}
regs->crtcOffset = offset;
// Evergreen+ is crtoffset + register
regs->grphEnable = offset + EVERGREEN_GRPH_ENABLE;
regs->grphControl = offset + EVERGREEN_GRPH_CONTROL;
regs->grphSwapControl = offset + EVERGREEN_GRPH_SWAP_CONTROL;
regs->grphEnable = EVERGREEN_GRPH_ENABLE + offset;
regs->grphControl = EVERGREEN_GRPH_CONTROL + offset;
regs->grphSwapControl = EVERGREEN_GRPH_SWAP_CONTROL + offset;
regs->grphPrimarySurfaceAddr
= offset + EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS;
= EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + offset;
regs->grphSecondarySurfaceAddr
= offset + EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS;
= EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + offset;
regs->grphPrimarySurfaceAddrHigh
= offset + EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
= EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + offset;
regs->grphSecondarySurfaceAddrHigh
= offset + EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
= EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + offset;
regs->grphPitch = offset + EVERGREEN_GRPH_PITCH;
regs->grphPitch = EVERGREEN_GRPH_PITCH + offset;
regs->grphSurfaceOffsetX
= offset + EVERGREEN_GRPH_SURFACE_OFFSET_X;
= EVERGREEN_GRPH_SURFACE_OFFSET_X + offset;
regs->grphSurfaceOffsetY
= offset + EVERGREEN_GRPH_SURFACE_OFFSET_Y;
regs->grphXStart = offset + EVERGREEN_GRPH_X_START;
regs->grphYStart = offset + EVERGREEN_GRPH_Y_START;
regs->grphXEnd = offset + EVERGREEN_GRPH_X_END;
regs->grphYEnd = offset + EVERGREEN_GRPH_Y_END;
regs->crtControl = offset + EVERGREEN_CRTC_CONTROL;
regs->modeDesktopHeight = offset + EVERGREEN_DESKTOP_HEIGHT;
regs->modeDataFormat = offset + EVERGREEN_DATA_FORMAT;
regs->viewportStart = offset + EVERGREEN_VIEWPORT_START;
regs->viewportSize = offset + EVERGREEN_VIEWPORT_SIZE;
= EVERGREEN_GRPH_SURFACE_OFFSET_Y + offset;
regs->grphXStart = EVERGREEN_GRPH_X_START + offset;
regs->grphYStart = EVERGREEN_GRPH_Y_START + offset;
regs->grphXEnd = EVERGREEN_GRPH_X_END + offset;
regs->grphYEnd = EVERGREEN_GRPH_Y_END + offset;
regs->modeDesktopHeight = EVERGREEN_DESKTOP_HEIGHT + offset;
regs->modeDataFormat = EVERGREEN_DATA_FORMAT + offset;
regs->viewportStart = EVERGREEN_VIEWPORT_START + offset;
regs->viewportSize = EVERGREEN_VIEWPORT_SIZE + offset;
} else if (info.device_chipset >= RADEON_R600
&& info.device_chipset < RADEON_R1000) {
} else if (info.device_chipset >= RADEON_R700) {
uint32 offset = 0;
switch(crtcID) {
case 0:
offset = R600_CRTC0_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D1VGA_CONTROL;
regs->grphPrimarySurfaceAddrHigh
= D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
break;
case 1:
offset = R600_CRTC1_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D2VGA_CONTROL;
regs->grphPrimarySurfaceAddrHigh
= D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
break;
default:
ERROR("%s: Unknown CRTC %" B_PRIu32 "\n",
__func__, crtcID);
return B_ERROR;
}
regs->crtcOffset = offset;
regs->grphEnable = AVIVO_D1GRPH_ENABLE + offset;
regs->grphControl = AVIVO_D1GRPH_CONTROL + offset;
regs->grphSwapControl = D1GRPH_SWAP_CNTL + offset;
// r600 - r700 are D1 or D2 based on primary / secondary crt
regs->vgaControl
= crtid == 1 ? D2VGA_CONTROL : D1VGA_CONTROL;
regs->grphEnable
= crtid == 1 ? D2GRPH_ENABLE : D1GRPH_ENABLE;
regs->grphControl
= crtid == 1 ? D2GRPH_CONTROL : D1GRPH_CONTROL;
regs->grphSwapControl
= crtid == 1 ? D2GRPH_SWAP_CNTL : D1GRPH_SWAP_CNTL;
regs->grphPrimarySurfaceAddr
= crtid == 1 ? D2GRPH_PRIMARY_SURFACE_ADDRESS
: D1GRPH_PRIMARY_SURFACE_ADDRESS;
= D1GRPH_PRIMARY_SURFACE_ADDRESS + offset;
regs->grphSecondarySurfaceAddr
= crtid == 1 ? D2GRPH_SECONDARY_SURFACE_ADDRESS
: D1GRPH_SECONDARY_SURFACE_ADDRESS;
= D1GRPH_SECONDARY_SURFACE_ADDRESS + offset;
regs->crtcOffset
= crtid == 1 ? (D2GRPH_X_END - D1GRPH_X_END) : 0;
regs->grphPitch = AVIVO_D1GRPH_PITCH + offset;
regs->grphSurfaceOffsetX = AVIVO_D1GRPH_SURFACE_OFFSET_X + offset;
regs->grphSurfaceOffsetY = AVIVO_D1GRPH_SURFACE_OFFSET_Y + offset;
regs->grphXStart = AVIVO_D1GRPH_X_START + offset;
regs->grphYStart = AVIVO_D1GRPH_Y_START + offset;
regs->grphXEnd = AVIVO_D1GRPH_X_END + offset;
regs->grphYEnd = AVIVO_D1GRPH_Y_END + offset;
// Surface Address high only used on r770+
regs->grphPrimarySurfaceAddrHigh
= crtid == 1 ? D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH
: D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
regs->grphSecondarySurfaceAddrHigh
= crtid == 1 ? D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH
: D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
regs->modeDesktopHeight = AVIVO_D1MODE_DESKTOP_HEIGHT + offset;
regs->modeDataFormat = AVIVO_D1MODE_DATA_FORMAT + offset;
regs->viewportStart = AVIVO_D1MODE_VIEWPORT_START + offset;
regs->viewportSize = AVIVO_D1MODE_VIEWPORT_SIZE + offset;
regs->grphPitch
= crtid == 1 ? D2GRPH_PITCH : D1GRPH_PITCH;
regs->grphSurfaceOffsetX
= crtid == 1 ? D2GRPH_SURFACE_OFFSET_X : D1GRPH_SURFACE_OFFSET_X;
regs->grphSurfaceOffsetY
= crtid == 1 ? D2GRPH_SURFACE_OFFSET_Y : D1GRPH_SURFACE_OFFSET_Y;
regs->grphXStart
= crtid == 1 ? D2GRPH_X_START : D1GRPH_X_START;
regs->grphYStart
= crtid == 1 ? D2GRPH_Y_START : D1GRPH_Y_START;
regs->grphXEnd
= crtid == 1 ? D2GRPH_X_END : D1GRPH_X_END;
regs->grphYEnd
= crtid == 1 ? D2GRPH_Y_END : D1GRPH_Y_END;
regs->crtControl
= crtid == 1 ? D2CRTC_CONTROL : D1CRTC_CONTROL;
regs->modeDesktopHeight
= crtid == 1 ? D2MODE_DESKTOP_HEIGHT : D1MODE_DESKTOP_HEIGHT;
regs->modeDataFormat
= crtid == 1 ? D2MODE_DATA_FORMAT : D1MODE_DATA_FORMAT;
regs->viewportStart
= crtid == 1 ? D2MODE_VIEWPORT_START : D1MODE_VIEWPORT_START;
regs->viewportSize
= crtid == 1 ? D2MODE_VIEWPORT_SIZE : D1MODE_VIEWPORT_SIZE;
} else if (info.device_chipset >= RADEON_R600) {
uint32 offset = 0;
switch(crtcID) {
case 0:
offset = R600_CRTC0_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D1VGA_CONTROL;
break;
case 1:
offset = R600_CRTC1_REGISTER_OFFSET;
regs->vgaControl = AVIVO_D2VGA_CONTROL;
break;
default:
ERROR("%s: Unknown CRTC %" B_PRIu32 "\n",
__func__, crtcID);
return B_ERROR;
}
regs->crtcOffset = offset;
regs->grphEnable = AVIVO_D1GRPH_ENABLE + offset;
regs->grphControl = AVIVO_D1GRPH_CONTROL + offset;
regs->grphSwapControl = D1GRPH_SWAP_CNTL + offset;
regs->grphPrimarySurfaceAddr
= D1GRPH_PRIMARY_SURFACE_ADDRESS + offset;
regs->grphSecondarySurfaceAddr
= D1GRPH_SECONDARY_SURFACE_ADDRESS + offset;
// Surface Address high only used on r700 and higher
regs->grphPrimarySurfaceAddrHigh = 0xDEAD;
regs->grphSecondarySurfaceAddrHigh = 0xDEAD;
regs->grphPitch = AVIVO_D1GRPH_PITCH + offset;
regs->grphSurfaceOffsetX = AVIVO_D1GRPH_SURFACE_OFFSET_X + offset;
regs->grphSurfaceOffsetY = AVIVO_D1GRPH_SURFACE_OFFSET_Y + offset;
regs->grphXStart = AVIVO_D1GRPH_X_START + offset;
regs->grphYStart = AVIVO_D1GRPH_Y_START + offset;
regs->grphXEnd = AVIVO_D1GRPH_X_END + offset;
regs->grphYEnd = AVIVO_D1GRPH_Y_END + offset;
regs->modeDesktopHeight = AVIVO_D1MODE_DESKTOP_HEIGHT + offset;
regs->modeDataFormat = AVIVO_D1MODE_DATA_FORMAT + offset;
regs->viewportStart = AVIVO_D1MODE_VIEWPORT_START + offset;
regs->viewportSize = AVIVO_D1MODE_VIEWPORT_SIZE + offset;
} else {
// this really shouldn't happen unless a driver PCIID chipset is wrong
TRACE("%s, unknown Radeon chipset: r%X\n", __func__,
@ -156,42 +201,8 @@ init_registers(register_info* regs, uint8 crtid)
return B_ERROR;
}
// Populate common registers
// TODO: Wait.. this doesn't work with Eyefinity > crt 1.
regs->modeCenter
= crtid == 1 ? D2MODE_CENTER : D1MODE_CENTER;
regs->grphUpdate
= crtid == 1 ? D2GRPH_UPDATE : D1GRPH_UPDATE;
regs->crtHPolarity
= crtid == 1 ? D2CRTC_H_SYNC_A_CNTL : D1CRTC_H_SYNC_A_CNTL;
regs->crtVPolarity
= crtid == 1 ? D2CRTC_V_SYNC_A_CNTL : D1CRTC_V_SYNC_A_CNTL;
regs->crtHTotal
= crtid == 1 ? D2CRTC_H_TOTAL : D1CRTC_H_TOTAL;
regs->crtVTotal
= crtid == 1 ? D2CRTC_V_TOTAL : D1CRTC_V_TOTAL;
regs->crtHSync
= crtid == 1 ? D2CRTC_H_SYNC_A : D1CRTC_H_SYNC_A;
regs->crtVSync
= crtid == 1 ? D2CRTC_V_SYNC_A : D1CRTC_V_SYNC_A;
regs->crtHBlank
= crtid == 1 ? D2CRTC_H_BLANK_START_END : D1CRTC_H_BLANK_START_END;
regs->crtVBlank
= crtid == 1 ? D2CRTC_V_BLANK_START_END : D1CRTC_V_BLANK_START_END;
regs->crtInterlace
= crtid == 1 ? D2CRTC_INTERLACE_CONTROL : D1CRTC_INTERLACE_CONTROL;
regs->crtCountControl
= crtid == 1 ? D2CRTC_COUNT_CONTROL : D1CRTC_COUNT_CONTROL;
regs->sclUpdate
= crtid == 1 ? D2SCL_UPDATE : D1SCL_UPDATE;
regs->sclEnable
= crtid == 1 ? D2SCL_ENABLE : D1SCL_ENABLE;
regs->sclTapControl
= crtid == 1 ? D2SCL_TAP_CONTROL : D1SCL_TAP_CONTROL;
TRACE("%s, registers for ATI chipset r%X crt #%d loaded\n", __func__,
info.device_chipset, crtid);
info.device_chipset, crtcID);
return B_OK;
}
@ -943,11 +954,10 @@ display_crtc_fb_set(uint8 crtcID, display_mode *mode)
Write32(OUT, regs->vgaControl, 0);
uint64 fbAddress = gInfo->mc.vramStart;
//uint64 fbAddress = gInfo->shared_info->frame_buffer_phys;
TRACE("%s: Framebuffer at: 0x%" B_PRIX64 "\n", __func__, fbAddress);
if (info.device_chipset >= (RADEON_R700 | 0x70)) {
if (info.device_chipset >= RADEON_R700) {
TRACE("%s: Set SurfaceAddress High: 0x%" B_PRIX32 "\n",
__func__, (fbAddress >> 32) & 0xf);

View File

@ -242,7 +242,7 @@ radeon_gpu_mc_setup_r600()
// idle the memory controller
radeon_gpu_mc_halt();
uint32 idleState = radeon_gpu_mc_idlecheck();
if (idleState > 0) {
ERROR("%s: Cannot modify non-idle MC! idleState: 0x%" B_PRIX32 "\n",
@ -260,7 +260,74 @@ radeon_gpu_mc_setup_r600()
uint32 tmp = ((gInfo->mc.vramEnd >> 24) & 0xFFFF) << 16;
tmp |= ((gInfo->mc.vramStart >> 24) & 0xFFFF);
Write32(OUT, R6XX_MC_VM_FB_LOCATION, tmp);
Write32(OUT, R600_MC_VM_FB_LOCATION, tmp);
Write32(OUT, HDP_NONSURFACE_BASE, (gInfo->mc.vramStart >> 8));
Write32(OUT, HDP_NONSURFACE_INFO, (2 << 7));
Write32(OUT, HDP_NONSURFACE_SIZE, 0x3FFFFFFF);
// TODO: AGP gtt start / end / agp base
// is AGP?
// WREG32(MC_VM_AGP_TOP, rdev->mc.gtt_end >> 22);
// WREG32(MC_VM_AGP_BOT, rdev->mc.gtt_start >> 22);
// WREG32(MC_VM_AGP_BASE, rdev->mc.agp_base >> 22);
// else?
Write32(OUT, R600_MC_VM_AGP_BASE, 0);
Write32(OUT, R600_MC_VM_AGP_TOP, 0x0FFFFFFF);
Write32(OUT, R600_MC_VM_AGP_BOT, 0x0FFFFFFF);
idleState = radeon_gpu_mc_idlecheck();
if (idleState > 0) {
ERROR("%s: Cannot modify non-idle MC! idleState: 0x%" B_PRIX32 "\n",
__func__, idleState);
//return B_ERROR;
}
radeon_gpu_mc_resume();
// disable render control
Write32(OUT, 0x000300, Read32(OUT, 0x000300) & 0xFFFCFFFF);
return B_OK;
}
static status_t
radeon_gpu_mc_setup_r700()
{
// HDP initialization
uint32 i;
uint32 j;
for (i = 0, j = 0; i < 32; i++, j += 0x18) {
Write32(OUT, (0x2c14 + j), 0x00000000);
Write32(OUT, (0x2c18 + j), 0x00000000);
Write32(OUT, (0x2c1c + j), 0x00000000);
Write32(OUT, (0x2c20 + j), 0x00000000);
Write32(OUT, (0x2c24 + j), 0x00000000);
}
// On r7xx read from HDP_DEBUG1 vs write HDP_REG_COHERENCY_FLUSH_CNTL
Read32(OUT, HDP_DEBUG1);
// idle the memory controller
radeon_gpu_mc_halt();
uint32 idleState = radeon_gpu_mc_idlecheck();
if (idleState > 0) {
ERROR("%s: Cannot modify non-idle MC! idleState: 0x%" B_PRIX32 "\n",
__func__, idleState);
//return B_ERROR;
}
// TODO: Memory Controller AGP
Write32(OUT, R600_MC_VM_SYSTEM_APERTURE_LOW_ADDR,
gInfo->mc.vramStart >> 12);
Write32(OUT, R600_MC_VM_SYSTEM_APERTURE_HIGH_ADDR,
gInfo->mc.vramEnd >> 12);
Write32(OUT, R600_MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0);
uint32 tmp = ((gInfo->mc.vramEnd >> 24) & 0xFFFF) << 16;
tmp |= ((gInfo->mc.vramStart >> 24) & 0xFFFF);
Write32(OUT, R600_MC_VM_FB_LOCATION, tmp);
Write32(OUT, HDP_NONSURFACE_BASE, (gInfo->mc.vramStart >> 8));
Write32(OUT, HDP_NONSURFACE_INFO, (2 << 7));
Write32(OUT, HDP_NONSURFACE_SIZE, 0x3FFFFFFF);
@ -303,7 +370,7 @@ radeon_gpu_mc_init()
uint64 vramBase = gInfo->shared_info->frame_buffer_phys;
if ((info.chipsetFlags & CHIP_IGP) != 0) {
vramBase = Read32(OUT, R6XX_MC_VM_FB_LOCATION) & 0xFFFF;
vramBase = Read32(OUT, R600_MC_VM_FB_LOCATION) & 0xFFFF;
vramBase <<= 24;
}
@ -329,7 +396,9 @@ radeon_gpu_mc_setup()
TRACE("%s: vramStart: 0x%" B_PRIX64 ", vramEnd: 0x%" B_PRIX64 "\n",
__func__, gInfo->mc.vramStart, gInfo->mc.vramEnd);
if (info.device_chipset >= RADEON_R600)
if (info.device_chipset >= RADEON_R700)
return radeon_gpu_mc_setup_r700();
else if (info.device_chipset >= RADEON_R600)
return radeon_gpu_mc_setup_r600();
return B_ERROR;

View File

@ -213,16 +213,18 @@ radeon_set_display_mode(display_mode *mode)
TRACE("D2CRTC_STATUS Value: 0x%X\n", Read32(CRT, D2CRTC_STATUS));
TRACE("D1CRTC_CONTROL Value: 0x%X\n", Read32(CRT, D1CRTC_CONTROL));
TRACE("D2CRTC_CONTROL Value: 0x%X\n", Read32(CRT, D2CRTC_CONTROL));
TRACE("D1GRPH_ENABLE Value: 0x%X\n", Read32(CRT, D1GRPH_ENABLE));
TRACE("D2GRPH_ENABLE Value: 0x%X\n", Read32(CRT, D2GRPH_ENABLE));
TRACE("D1SCL_ENABLE Value: 0x%X\n", Read32(CRT, D1SCL_ENABLE));
TRACE("D2SCL_ENABLE Value: 0x%X\n", Read32(CRT, D2SCL_ENABLE));
TRACE("RV620_DACA_ENABLE Value: 0x%X\n", Read32(CRT, RV620_DACA_ENABLE));
TRACE("RV620_DACB_ENABLE Value: 0x%X\n", Read32(CRT, RV620_DACB_ENABLE));
TRACE("D1GRPH_ENABLE Value: 0x%X\n",
Read32(CRT, AVIVO_D1GRPH_ENABLE));
TRACE("D2GRPH_ENABLE Value: 0x%X\n",
Read32(CRT, AVIVO_D2GRPH_ENABLE));
TRACE("D1SCL_ENABLE Value: 0x%X\n",
Read32(CRT, AVIVO_D1SCL_SCALER_ENABLE));
TRACE("D2SCL_ENABLE Value: 0x%X\n",
Read32(CRT, AVIVO_D2SCL_SCALER_ENABLE));
TRACE("D1CRTC_BLANK_CONTROL Value: 0x%X\n",
Read32(CRT, D1CRTC_BLANK_CONTROL));
Read32(CRT, AVIVO_D1CRTC_BLANK_CONTROL));
TRACE("D2CRTC_BLANK_CONTROL Value: 0x%X\n",
Read32(CRT, D2CRTC_BLANK_CONTROL));
Read32(CRT, AVIVO_D1CRTC_BLANK_CONTROL));
return B_OK;
}

View File

@ -303,7 +303,7 @@ pll_setup_flags(pll_info *pll, uint8 crtcID)
pll->flags |= PLL_PREFER_LOW_REF_DIV;
if (info.device_chipset < (RADEON_R700 | 0x70))
if (info.device_chipset < RADEON_R700)
pll->flags |= PLL_PREFER_MINM_OVER_MAXP;

View File

@ -122,8 +122,6 @@ const struct supported_device {
// From here on AMD no longer used numeric identifiers
// TODO: These don't work yet, no video. (maybe FB issue?)
# if 0
// R1000 series (HD54xx - HD63xx)
// Codename: Evergreen
// Cedar
@ -199,7 +197,6 @@ const struct supported_device {
{0x671F, 5, 0, RADEON_R2000 | 0x30, CHIP_STD, "Radeon HD 6900"},
// Antilles
{0x671d, 5, 0, RADEON_R2000 | 0x40, CHIP_STD, "Radeon HD 6990"}
#endif
// R3000 series (HD74xx - HD79xx)
// Codename: Southern Islands

View File

@ -485,13 +485,13 @@ radeon_hd_init(radeon_info &info)
// *** Populate frame buffer information
if (info.shared_info->device_chipset >= RADEON_R1000) {
// R800+ has memory stored in MB
// Evergreen+ has memory stored in MB
info.shared_info->graphics_memory_size
= read32(info.registers + R6XX_CONFIG_MEMSIZE) * 1024;
= read32(info.registers + CONFIG_MEMSIZE) * 1024;
} else {
// R600-R700 has memory stored in bytes
info.shared_info->graphics_memory_size
= read32(info.registers + R6XX_CONFIG_MEMSIZE) / 1024;
= read32(info.registers + CONFIG_MEMSIZE) / 1024;
}
uint32 barSize = info.pci->u.h0.base_register_sizes[RHD_FB_BAR] / 1024;