pci: PIO command processor response

This commit is contained in:
Zack Buhman 2025-10-07 11:02:38 -05:00
parent d026c323e6
commit 8c883d76f9
5 changed files with 668 additions and 6 deletions

234
pci/3d_registers.h Normal file
View File

@ -0,0 +1,234 @@
#define CP_CSQ2_STAT 0x7fc
#define CP_CSQ_ADDR 0x7f0
#define CP_CSQ_APER_INDIRECT 0x1300-0x13fc
#define CP_CSQ_APER_INDIRECT2 0x1200-0x12fc
#define CP_CSQ_APER_PRIMARY 0x1000-0x11fc
#define CP_CSQ_AVAIL 0x7b8
#define CP_CSQ_CNTL 0x740
#define CP_CSQ_DATA 0x7f4
#define CP_CSQ_MODE 0x744
#define CP_CSQ_STAT 0x7f8
#define CP_GUI_COMMAND 0x728
#define CP_GUI_DST_ADDR 0x724
#define CP_GUI_SRC_ADDR 0x720
#define CP_IB2_BASE 0x730
#define CP_IB2_BUFSZ 0x734
#define CP_IB_BASE 0x738
#define CP_IB_BUFSZ 0x73c
#define CP_ME_CNTL 0x7d0
#define CP_ME_RAM_ADDR 0x7d4
#define CP_ME_RAM_DATAH 0x7dc
#define CP_ME_RAM_DATAL 0x7e0
#define CP_ME_RAM_RADDR 0x7d8
#define CP_RB_BASE 0x700
#define CP_RB_CNTL 0x704
#define CP_RB_RPTR 0x710
#define CP_RB_RPTR_ADDR 0x70c
#define CP_RB_RPTR_WR 0x71c
#define CP_RB_WPTR 0x714
#define CP_RB_WPTR_DELAY 0x718
#define CP_RESYNC_ADDR 0x778
#define CP_RESYNC_DATA 0x77c
#define CP_STAT 0x7c0
#define CP_VID_COMMAND 0x7cc
#define CP_VID_DST_ADDR 0x7c8
#define CP_VID_SRC_ADDR 0x7c4
#define CP_VP_ADDR_CNTL 0x7e8
#define RB3D_AARESOLVE_CTL 0x4e88
#define RB3D_AARESOLVE_OFFSET 0x4e80
#define RB3D_AARESOLVE_PITCH 0x4e84
#define RB3D_ABLENDCNTL 0x4e08
#define RB3D_BLENDCNTL 0x4e04
#define RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD 0x4ea4
#define RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD 0x4ea0
#define RB3D_CCTL 0x4e00
#define RB3D_CLRCMP_CLR 0x4e20
#define RB3D_CLRCMP_FLIPE 0x4e1c
#define RB3D_CLRCMP_MSK 0x4e24
#define RB3D_COLOR_CHANNEL_MASK 0x4e0c
#define RB3D_COLOR_CLEAR_VALUE 0x4e14
#define RB3D_COLOR_CLEAR_VALUE_AR 0x46c0
#define RB3D_COLOR_CLEAR_VALUE_GB 0x46c4
#define RB3D_CONSTANT_COLOR 0x4e10
#define RB3D_CONSTANT_COLOR_AR 0x4ef8
#define RB3D_CONSTANT_COLOR_GB 0x4efc
#define RB3D_DITHER_CTL 0x4e50
#define RB3D_DSTCACHE_CTLSTAT 0x4e4c
#define RB3D_FIFO_SIZE 0x4ef4
#define RB3D_ROPCNTL 0x4e18
#define FG_ALPHA_FUNC 0x4bd4
#define FG_ALPHA_VALUE 0x4be0
#define FG_DEPTH_SRC 0x4bd8
#define FG_FOG_BLEND 0x4bc0
#define FG_FOG_COLOR_B 0x4bd0
#define FG_FOG_COLOR_G 0x4bcc
#define FG_FOG_COLOR_R 0x4bc8
#define FG_FOG_FACTOR 0x4bc4
#define GA_COLOR_CONTROL 0x4278
#define GA_COLOR_CONTROL_PS3 0x4258
#define GA_ENHANCE 0x4274
#define GA_FIFO_CNTL 0x4270
#define GA_FILL_A 0x422c
#define GA_FILL_B 0x4228
#define GA_FILL_R 0x4220
#define GA_FOG_OFFSET 0x4298
#define GA_FOG_SCALE 0x4294
#define GA_IDLE 0x425c
#define GA_LINE_CNTL 0x4234
#define GA_LINE_S0 0x4264
#define GA_LINE_S1 0x4268
#define GA_LINE_STIPPLE_CONFIG 0x4238
#define GA_LINE_STIPPLE_VALUE 0x4260
#define GA_OFFSET 0x4290
#define GA_POINT_MINMAX 0x4230
#define GA_POINT_S0 0x4200
#define GA_POINT_S1 0x4208
#define GA_POINT_SIZE 0x421c
#define GA_POINT_T0 0x4204
#define GA_POINT_T1 0x420c
#define GA_POLY_MODE 0x4288
#define GA_ROUND_MODE 0x428c
#define GA_SOLID_BA 0x4280
#define GA_SOLID_RG 0x427c
#define GA_TRIANGLE_STIPPLE 0x4214
#define GA_US_VECTOR_DATA 0x4254
#define GA_US_VECTOR_INDEX 0x4250
#define GB_AA_CONFIG 0x4020
#define GB_ENABLE 0x4008
#define GB_FIFO_SIZE 0x4024
#define GB_FIFO_SIZE1 0x4070
#define GB_MSPOS0 0x4010
#define GB_MSPOS1 0x4014
#define GB_PIPE_SELECT 0x402c
#define GB_SELECT 0x401c
#define GB_TILE_CONFIG 0x4018
#define GB_Z_PEQ_CONFIG 0x4028
#define PS3_ENABLE 0x4118
#define PS3_TEX_SOURCE 0x4120
#define PS3_VTX_FMT 0x411c
#define RS_COUNT 0x4300
#define RS_INST_COUNT 0x4304
#define SC_CLIP_0_A 0x43b0
#define SC_CLIP_0_B 0x43b4
#define SC_CLIP_1_A 0x43b8
#define SC_CLIP_1_B 0x43bc
#define SC_CLIP_2_A 0x43c0
#define SC_CLIP_2_B 0x43c4
#define SC_CLIP_3_A 0x43c8
#define SC_CLIP_3_B 0x43cc
#define SC_CLIP_RULE 0x43d0
#define SC_EDGERULE 0x43a8
#define SC_HYPERZ_EN 0x43a4
#define SC_SCISSOR0 0x43e0
#define SC_SCISSOR1 0x43e4
#define SC_SCREENDOOR 0x43e8
#define SU_CULL_MODE 0x42b8
#define SU_DEPTH_OFFSET 0x42c4
#define SU_DEPTH_SCALE 0x42c0
#define SU_POLY_OFFSET_BACK_OFFSET 0x42b0
#define SU_POLY_OFFSET_BACK_SCALE 0x42ac
#define SU_POLY_OFFSET_ENABLE 0x42b4
#define SU_POLY_OFFSET_FRONT_OFFSET 0x42a8
#define SU_POLY_OFFSET_FRONT_SCALE 0x42a4
#define SU_REG_DEST 0x42c8
#define SU_TEX_WRAP 0x42a0
#define SU_TEX_WRAP_PS3 0x4114
#define TX_ENABLE 0x4104
#define TX_FILTER4 0x4110
#define TX_INVALTAGS 0x4100
#define US_CODE_ADDR 0x4630
#define US_CODE_OFFSET 0x4638
#define US_CODE_RANGE 0x4634
#define US_CONFIG 0x4600
#define US_FC_BOOL_CONST 0x4620
#define US_FC_CTRL 0x4624
#define US_PIXSIZE 0x4604
#define US_W_FMT 0x46b4
#define VAP_ALT_NUM_VERTICES 0x2088
#define VAP_CLIP_CNTL 0x221c
#define VAP_CNTL 0x2080
#define VAP_CNTL_STATUS 0x2140
#define VAP_GB_HORZ_CLIP_ADJ 0x2228
#define VAP_GB_HORZ_DISC_ADJ 0x222c
#define VAP_GB_VERT_CLIP_ADJ 0x2220
#define VAP_GB_VERT_DISC_ADJ 0x2224
#define VAP_INDEX_OFFSET 0x208c
#define VAP_OUT_VTX_FMT_0 0x2090
#define VAP_OUT_VTX_FMT_1 0x2094
#define VAP_PORT_DATA_IDX_128 0x20b8
#define VAP_PSC_SGN_NORM_CNTL 0x21dc
#define VAP_PVS_CODE_CNTL_0 0x22d0
#define VAP_PVS_CODE_CNTL_1 0x22d8
#define VAP_PVS_CONST_CNTL 0x22d4
#define VAP_PVS_FLOW_CNTL_OPC 0x22dc
#define VAP_PVS_STATE_FLUSH_REG 0x2284
#define VAP_PVS_VECTOR_DATA_REG 0x2204
#define VAP_PVS_VECTOR_DATA_REG_128 0x2208
#define VAP_PVS_VECTOR_INDX_REG 0x2200
#define VAP_PVS_VTX_TIMEOUT_REG 0x2288
#define VAP_TEX_TO_COLOR_CNTL 0x2218
#define VAP_VF_CNTL 0x2084
#define VAP_VF_MAX_VTX_INDX 0x2134
#define VAP_VF_MIN_VTX_INDX 0x2138
#define VAP_VPORT_XOFFSET 0x1d9c,
#define VAP_VPORT_XSCALE 0x1d98,
#define VAP_VPORT_YOFFSET 0x1da4,
#define VAP_VPORT_YSCALE 0x1da0,
#define VAP_VPORT_ZOFFSET 0x1dac,
#define VAP_VPORT_ZSCALE 0x1da8,
#define VAP_VTE_CNTL 0x20b0
#define VAP_VTX_NUM_ARRAYS 0x20c0
#define VAP_VTX_SIZE 0x204b
#define VAP_VTX_STATE_CNTL 0x2180
#define VAP_VTX_ST_DISC_FOG 0x2424
#define VAP_VTX_ST_EDGE_FLAGS 0x245c
#define VAP_VTX_ST_END_OF_PKT 0x24ac
#define VAP_VTX_ST_NORM_0_PKD 0x2498
#define VAP_VTX_ST_NORM_0_X 0x2310
#define VAP_VTX_ST_NORM_0_Y 0x2314
#define VAP_VTX_ST_NORM_0_Z 0x2318
#define VAP_VTX_ST_NORM_1_X 0x2450
#define VAP_VTX_ST_NORM_1_Y 0x2454
#define VAP_VTX_ST_NORM_1_Z 0x2458
#define VAP_VTX_ST_PNT_SPRT_SZ 0x2420
#define VAP_VTX_ST_POS_0_W_4 0x230c
#define VAP_VTX_ST_POS_0_X_2 0x2490
#define VAP_VTX_ST_POS_0_X_3 0x24a0
#define VAP_VTX_ST_POS_0_X_4 0x2300
#define VAP_VTX_ST_POS_0_Y_2 0x2494
#define VAP_VTX_ST_POS_0_Y_3 0x24a4
#define VAP_VTX_ST_POS_0_Y_4 0x2304
#define VAP_VTX_ST_POS_0_Z_3 0x24a8
#define VAP_VTX_ST_POS_0_Z_4 0x2308
#define VAP_VTX_ST_POS_1_W 0x244c
#define VAP_VTX_ST_POS_1_X 0x2440
#define VAP_VTX_ST_POS_1_Y 0x2444
#define VAP_VTX_ST_POS_1_Z 0x2448
#define VAP_VTX_ST_PVMS 0x231c
#define VAP_VTX_ST_SHININESS_0 0x2428
#define VAP_VTX_ST_SHININESS_1 0x242c
#define VAP_VTX_ST_USR_CLR_A 0x246c
#define VAP_VTX_ST_USR_CLR_B 0x2468
#define VAP_VTX_ST_USR_CLR_G 0x2464
#define VAP_VTX_ST_USR_CLR_PKD 0x249c
#define VAP_VTX_ST_USR_CLR_R 0x2460
#define ZB_BW_CNTL 0x4f1c
#define ZB_CNTL 0x4f00
#define ZB_DEPTHCLEARVALUE 0x4f28
#define ZB_DEPTHOFFSET 0x4f20
#define ZB_DEPTHPITCH 0x4f24
#define ZB_DEPTHXY_OFFSET 0x4f60
#define ZB_FIFO_SIZE 0x4fd0
#define ZB_FORMAT 0x4f10
#define ZB_HIZ_DWORD 0x4f4c
#define ZB_HIZ_OFFSET 0x4f44
#define ZB_HIZ_PITCH 0x4f54
#define ZB_HIZ_RDINDEX 0x4f50
#define ZB_HIZ_WRINDEX 0x4f48
#define ZB_STENCILREFMASK 0x4f08
#define ZB_STENCILREFMASK_BF 0x4fd4
#define ZB_ZCACHE_CTLSTAT 0x4f18
#define ZB_ZPASS_ADDR 0x4f5c
#define ZB_ZPASS_DATA 0x4f58
#define ZB_ZSTENCILCNTL 0x4f04
#define ZB_ZTOP 0x4f14

BIN
pci/R520_cp.bin Normal file

Binary file not shown.

View File

@ -4,6 +4,9 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/aperture.h> #include <linux/aperture.h>
#include "3d_registers.h"
#include "undocumented_3d_registers.h"
#define R500 "r500" #define R500 "r500"
static struct pci_device_id r500_id_table[] = { static struct pci_device_id r500_id_table[] = {
@ -59,6 +62,139 @@ static inline uint32_t rreg(void __iomem * rmmio, uint32_t reg)
return readl(((void __iomem *)rmmio) + reg); return readl(((void __iomem *)rmmio) + reg);
} }
#define bswap32 __builtin_bswap32
static const uint8_t _cp_data[] __attribute__((aligned (4))) = {
0x00,0x00,0x00,0x00,0x42,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0xe0,0x00,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x9d,
0x00,0x00,0x00,0x00,0x4a,0x55,0x4b,0x4a,0x00,0x00,0x00,0x00,0x4a,0x4a,0x44,0x67,
0x00,0x00,0x00,0x00,0x55,0x52,0x6f,0x75,0x00,0x00,0x00,0x00,0x4a,0x7e,0x7d,0x65,
0x00,0x00,0x00,0x00,0xe0,0xda,0xe6,0xf6,0x00,0x00,0x00,0x00,0x4a,0xc5,0x4a,0x4a,
0x00,0x00,0x00,0x00,0xc8,0x82,0x82,0x82,0x00,0x00,0x00,0x00,0xbf,0x4a,0xcf,0xc1,
0x00,0x00,0x00,0x00,0x87,0xb0,0x4a,0xd5,0x00,0x00,0x00,0x00,0xb5,0x83,0x83,0x83,
0x00,0x00,0x00,0x00,0x4a,0x0f,0x85,0xba,0x00,0x00,0x00,0x04,0x00,0x0c,0xa0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0xb4,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x14,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0xb6,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x16,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x54,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x55,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x1a,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x56,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x1c,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x57,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x24,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x20,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x25,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x22,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x30,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x24,0x00,0x00,0x00,0x04,0x00,0x00,0xf0,0xc0,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x26,0x00,0x00,0x00,0x04,0x00,0x00,0xf0,0xc1,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x28,0x00,0x00,0x00,0x04,0x00,0x00,0xe0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x2a,0x00,0x00,0x00,0x04,0x00,0x00,0xe0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x2c,0x00,0x00,0x00,0x04,0x00,0x00,0xe0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x2e,0x00,0x00,0x00,0x04,0x00,0x00,0xe0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x30,0x00,0x00,0x00,0x04,0x00,0x00,0xe0,0x00,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x32,0x00,0x00,0x00,0x04,0x00,0x00,0xf1,0x80,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x34,0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0x93,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x36,0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0x8a,
0x00,0x00,0x00,0x38,0x00,0x0d,0x00,0x38,0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0x8e,
0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x21,0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,
0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x04,0x00,0xcc,0xe8,0x00,
0x00,0x00,0x00,0x04,0x00,0x1b,0x00,0x01,0x00,0x00,0x00,0x04,0x08,0x00,0x48,0x00,
0x00,0x00,0x00,0x04,0x00,0x1b,0x00,0x01,0x00,0x00,0x00,0x04,0x08,0x00,0x48,0x00,
0x00,0x00,0x00,0x04,0x00,0x1b,0x00,0x01,0x00,0x00,0x00,0x04,0x08,0x00,0x48,0x00,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,
0x00,0x00,0x00,0x04,0x20,0x00,0x45,0x1d,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x80,
0x00,0x00,0x00,0x04,0x00,0x0c,0xe5,0x81,0x00,0x00,0x00,0x04,0x08,0x00,0x45,0x80,
0x00,0x00,0x00,0x04,0x00,0x0c,0xe5,0x81,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,
0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x04,0x00,0x0c,0x20,0x00,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x0e,0x00,0x00,0x00,0x04,0x00,0x03,0x20,0x00,
0x00,0x00,0x00,0x28,0x00,0x02,0x20,0x51,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x51,
0x00,0x00,0x00,0x04,0x08,0x00,0x45,0x0f,0x00,0x00,0x00,0x08,0x00,0x00,0xa0,0x4b,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x65,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x66,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x04,0x03,0xcc,0xa5,0xb4,
0x00,0x00,0x00,0x04,0x05,0x43,0x20,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x20,0x00,
0x00,0x00,0x00,0x30,0x4c,0xcc,0xe0,0x5e,0x00,0x00,0x00,0x04,0x08,0x27,0x45,0x65,
0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x04,0x08,0x00,0x45,0x64,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x66,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x55,
0x00,0x00,0x00,0x10,0x00,0x80,0x20,0x61,0x00,0x00,0x00,0x04,0x00,0x20,0x20,0x00,
0x00,0x00,0x00,0x04,0x00,0x1b,0x00,0xff,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x64,
0x00,0x00,0x00,0x04,0x00,0x1f,0x20,0x00,0x00,0x00,0x00,0x04,0x00,0x1c,0x00,0xff,
0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x72,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x76,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x77,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x0e,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x0f,0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,
0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xc2,0x00,0xc0,0xe5,0xf9,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x04,0x00,0x14,0xe5,0x0e,
0x00,0x00,0x00,0x04,0x00,0x40,0xe5,0x0f,0x00,0x00,0x00,0x08,0x00,0xc0,0x00,0x6c,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x70,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x71,
0x00,0x00,0x00,0x0c,0x00,0x00,0xe5,0x72,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,
0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0x68,
0x00,0x00,0x00,0x04,0x00,0x0c,0x20,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x76,
0x00,0x00,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x00,0x00,0x04,0x18,0xc0,0xe5,0x62,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0xc0,0x00,0x77,
0x00,0x00,0x00,0x04,0x00,0x07,0x00,0xc7,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x04,0x00,0x00,0xe5,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0xe5,0xbc,
0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x21,
0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0x21,
0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0x2e,0x00,0x00,0x00,0x04,0x02,0xcc,0xa0,0x00,
0x00,0x00,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0c,0xe1,0xcc,
0x00,0x00,0x00,0x04,0x05,0x0d,0xe1,0xcd,0x00,0x00,0x00,0x04,0x00,0x40,0x00,0x00,
0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0xc0,0xa0,0x00,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x91,
0x00,0x00,0x00,0x00,0x42,0x00,0xe0,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x98,
0x00,0x00,0x00,0x04,0x00,0x0c,0xa0,0x00,0x00,0x00,0x00,0x04,0x00,0x14,0x00,0x00,
0x00,0x00,0x00,0x04,0x00,0x0c,0x20,0x00,0x00,0x00,0x00,0x04,0x00,0x16,0x00,0x00,
0x00,0x00,0x00,0x04,0x70,0x0c,0xe0,0x00,0x00,0x00,0x00,0x08,0x00,0x14,0x00,0x94,
0x00,0x00,0x00,0x00,0x40,0x00,0xe0,0x00,0x00,0x00,0x00,0x04,0x02,0x40,0x00,0x00,
0x00,0x00,0x00,0x04,0x40,0x0e,0xe0,0x00,0x00,0x00,0x00,0x04,0x02,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x00,0xe0,0x00,0x00,0x00,0x00,0x04,0x00,0x0c,0x20,0x00,
0x00,0x00,0x00,0x04,0x02,0x40,0xe5,0x1b,0x00,0x00,0x00,0x05,0x00,0x80,0xe5,0x0a,
0x00,0x00,0x00,0x05,0x00,0x80,0xe5,0x0b,0x00,0x00,0x00,0x04,0x00,0x22,0x00,0x00,
0x00,0x00,0x00,0x04,0x00,0x07,0x00,0xc7,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xa4,
0x00,0x00,0x00,0x05,0x00,0x80,0xe5,0xbd,0x00,0x00,0x00,0x05,0x00,0x00,0xe5,0xbb,
0x00,0x00,0x00,0x05,0x00,0x80,0xe5,0xbc,0x00,0x00,0x00,0x04,0x00,0x21,0x00,0x00,
0x00,0x00,0x00,0x04,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xc0,0x00,0xab,
0x00,0x00,0x00,0x40,0x41,0x80,0xe0,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0xad,
0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x01,0x00,0xe5,0x1d,
0x00,0x00,0x00,0x04,0x00,0x00,0x45,0xbb,0x00,0x00,0x00,0x08,0x00,0x00,0x80,0xa7,
0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0xce,0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,
0x00,0x00,0x00,0x04,0x00,0xcc,0x20,0x00,0x00,0x00,0x00,0x40,0x08,0xc0,0x53,0xcf,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0xd2,
0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,0x00,0x00,0x00,0x04,0x00,0xcc,0x20,0x00,
0x00,0x00,0x00,0x40,0x08,0xc0,0x53,0xd3,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
0x00,0x00,0x00,0x04,0x00,0x00,0xf3,0x9d,0x00,0x00,0x00,0x04,0x01,0x40,0xa0,0x00,
0x00,0x00,0x00,0x04,0x00,0xcc,0x20,0x00,0x00,0x00,0x00,0x40,0x08,0xc0,0x53,0x9e,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x04,0x03,0xc0,0x08,0x30,
0x00,0x00,0x00,0x00,0x42,0x00,0xe0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,
0x00,0x00,0x00,0x04,0x20,0x00,0x45,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xe5,0xe1,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x07,0x00,0xc4,
0x00,0x00,0x00,0x00,0x08,0x00,0xe3,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0xc5,
0x00,0x00,0x00,0x04,0x00,0x00,0xe8,0xc6,0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x28,
0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x2a,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x28,
0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0xe9,0x2a,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x00,0xde,0xad,0xbe,0xef,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x16,0x00,0x00,0x00,0x04,0x00,0x07,0x00,0xd3,
0x00,0x00,0x00,0x04,0x08,0x00,0x50,0xe7,0x00,0x00,0x00,0x04,0x00,0x07,0x00,0xd4,
0x00,0x00,0x00,0x04,0x08,0x00,0x40,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x1d,
0x00,0x00,0x00,0x04,0x02,0xc0,0x20,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x00,0x00,
0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xdb,
0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0xe0,0x00,
0x00,0x00,0x00,0x04,0x00,0x00,0xe1,0xcc,0x00,0x00,0x00,0x04,0x05,0x00,0xe1,0xcd,
0x00,0x00,0x00,0x04,0x00,0x0c,0xa0,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xe5,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,
0x00,0x00,0x00,0x04,0x00,0x19,0xe1,0xcc,0x00,0x00,0x00,0x04,0x00,0x1b,0x00,0x01,
0x00,0x00,0x00,0x04,0x05,0x00,0xa0,0x00,0x00,0x00,0x00,0x04,0x08,0x00,0x41,0xcd,
0x00,0x00,0x00,0x04,0x00,0x0c,0xa0,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x00,0x0c,0x20,0x00,0x00,0x00,0x00,0x04,0x00,0x1d,0x00,0x18,
0x00,0x00,0x00,0x04,0x00,0x1a,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0xfb,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x08,0x05,0x00,0xa0,0x4a,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/* This function is called by the kernel */ /* This function is called by the kernel */
static int r500_probe(struct pci_dev *pdev, const struct pci_device_id *ent) static int r500_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{ {
@ -67,7 +203,6 @@ static int r500_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_read_config_word(pdev, PCI_DEVICE_ID, &device); pci_read_config_word(pdev, PCI_DEVICE_ID, &device);
printk(KERN_INFO "[r500] VENDOR_ID: %04x DEVICE_ID: %04x\n", vendor, device); printk(KERN_INFO "[r500] VENDOR_ID: %04x DEVICE_ID: %04x\n", vendor, device);
struct resource mem;
int ret; int ret;
ret = aperture_remove_conflicting_pci_devices(pdev, "R500"); ret = aperture_remove_conflicting_pci_devices(pdev, "R500");
@ -76,22 +211,288 @@ static int r500_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
ret = pci_enable_device(pdev); ret = pci_enable_device(pdev);
if (ret) if (ret)
goto err_free; return ret;
if (!request_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0), "R500")) {
printk(KERN_INFO "[r500] !request_mem_region resource 0\n");
return -ENODEV;
}
if (!request_mem_region(pci_resource_start(pdev, 2), pci_resource_len(pdev, 2), "R500")) {
printk(KERN_INFO "[r500] !request_mem_region resource 2\n");
return -ENODEV;
}
resource_size_t rmmio_base = pci_resource_start(pdev, 2); resource_size_t rmmio_base = pci_resource_start(pdev, 2);
resource_size_t rmmio_size = pci_resource_len(pdev, 2); resource_size_t rmmio_size = pci_resource_len(pdev, 2);
printk(KERN_INFO "[r500] rmmio base: %08x ; rmmio size: %08x\n", rmmio_base, rmmio_size);
void __iomem * rmmio = ioremap(rmmio_base, rmmio_size); void __iomem * rmmio = ioremap(rmmio_base, rmmio_size);
printk(KERN_INFO "[r500] rmmio base: %08x ; rmmio size: %08x\n", rmmio_base, rmmio_size);
uint32_t value1 = rreg(rmmio, 0x6080); uint32_t value1 = rreg(rmmio, 0x6080);
printk(KERN_INFO "[r500] D1CRTC_CONTROL %08x\n", value1); printk(KERN_INFO "[r500] D1CRTC_CONTROL %08x\n", value1);
uint32_t value2 = rreg(rmmio, 0x6880); uint32_t value2 = rreg(rmmio, 0x6080 + 0x800);
printk(KERN_INFO "[r500] D2CRTC_CONTROL %08x\n", value2); printk(KERN_INFO "[r500] D2CRTC_CONTROL %08x\n", value2);
wreg(rmmio, 0x6080, 1); {
uint32_t value1 = rreg(rmmio, 0x6110);
printk(KERN_INFO "[r500] D1GRPH_PRIMARY_SURFACE_ADDRESS %08x\n", value1);
uint32_t value2 = rreg(rmmio, 0x6110 + 0x800);
printk(KERN_INFO "[r500] D2GRPH_PRIMARY_SURFACE_ADDRESS %08x\n", value2);
uint32_t value3 = rreg(rmmio, 0x6118);
printk(KERN_INFO "[r500] D1GRPH_SECONDARY_SURFACE_ADDRESS %08x\n", value3);
uint32_t value4 = rreg(rmmio, 0x6118 + 0x800);
printk(KERN_INFO "[r500] D2GRPH_SECONDARY_SURFACE_ADDRESS %08x\n", value4);
//wreg(rmmio, 0x6110, 0xe0100000);
//wreg(rmmio, 0x6110 + 0x800, 0xe0100000);
//wreg(rmmio, 0x6118, 0xe0100000);
//wreg(rmmio, 0x6118 + 0x800, 0xe0100000);
}
uint32_t memsize = rreg(rmmio, 0xf8);
printk(KERN_INFO "[r500] CONFIG_MEMSIZE %08x\n", memsize);
uint32_t config_cntl = rreg(rmmio, 0xe0);
printk(KERN_INFO "[r500] CONFIG_CNTL %08x\n", config_cntl);
config_cntl |= (1 << 9); // VGA DISABLE
wreg(rmmio, 0xe0, config_cntl);
// atombios_crtc.c avivo_crtc_do_set_base
uint32_t d1vga_control = rreg(rmmio, 0x330);
printk(KERN_INFO "[r500] D1VGA_CONTROL %08x\n", d1vga_control);
wreg(rmmio, 0x330, 0);
uint32_t d2vga_control = rreg(rmmio, 0x338);
printk(KERN_INFO "[r500] D2VGA_CONTROL %08x\n", d2vga_control);
wreg(rmmio, 0x338, 0);
uint32_t d1grph_x_start = rreg(rmmio, 0x612c);
printk(KERN_INFO "[r500] D1GRPH_X_START %08x\n", d1grph_x_start);
wreg(rmmio, 0x612c, 0);
uint32_t d1grph_y_start = rreg(rmmio, 0x6130);
printk(KERN_INFO "[r500] D1GRPH_Y_START %08x\n", d1grph_y_start);
wreg(rmmio, 0x6130, 0);
uint32_t d1grph_x_end = rreg(rmmio, 0x6134);
printk(KERN_INFO "[r500] D1GRPH_X_END %08x\n", d1grph_x_end);
wreg(rmmio, 0x6134, 1600);
uint32_t d1grph_y_end = rreg(rmmio, 0x6138);
printk(KERN_INFO "[r500] D1GRPH_Y_END %08x\n", d1grph_y_end);
wreg(rmmio, 0x6138, 1200);
uint32_t d1grph_pitch = rreg(rmmio, 0x6120);
printk(KERN_INFO "[r500] D1GRPH_PITCH %08x\n", d1grph_pitch);
wreg(rmmio, 0x6120, 1600);
uint32_t d1grph_enable = rreg(rmmio, 0x6100);
printk(KERN_INFO "[r500] D1GRPH_ENABLE %08x\n", d1grph_enable);
wreg(rmmio, 0x6100, 1);
void __iomem * fb;
{
resource_size_t fb_base = pci_resource_start(pdev, 0);
uint32_t fb_size = 64 * 1024 * 1024;
fb = ioremap(fb_base, fb_size);
if (!fb_base) {
printk(KERN_INFO "[r500] could not map fb\n");
return 0;
}
for (int y = 0; y < 1200; y++) {
for (int x = 0; x < 1600; x++) {
int red = x % 256;
int green = y % 256;
//wreg(fb, 0x00100000 + y * 1600 + x, red << 16 | green << 8);
wreg(fb, 0x00100000 + (y * 1600 + x) * 4, red << 16 | green << 8);
}
}
}
// r100.c r100_cp_init
wreg(rmmio, CP_ME_RAM_ADDR, 0);
const uint32_t * cp_data = (const uint32_t *)_cp_data;
for (int i = 0; i < (sizeof (_cp_data)) / (4 * 2); i++) {
wreg(rmmio, CP_ME_RAM_DATAH, bswap32(cp_data[i * 2 + 0]));
wreg(rmmio, CP_ME_RAM_DATAL, bswap32(cp_data[i * 2 + 1]));
}
mb();
mdelay(500);
// cp
// 1) Write CP_CSQ_CNTL and CP_CSQ_MODE to zero, effectively disabling the CP.
wreg(rmmio, CP_CSQ_CNTL, 0);
wreg(rmmio, CP_CSQ_MODE, 0);
// 2) Write to the proper RBBM register to assert and then de-assert the Soft Reset signal to the CP.
wreg(rmmio, RBBM_SOFT_RESET, RBBM_SOFT_RESET_CP);
rreg(rmmio, RBBM_SOFT_RESET);
mdelay(500);
wreg(rmmio, RBBM_SOFT_RESET, 0);
mdelay(1);
// 3) Set the RB_RPTR_WR_ENA bit to enable writing of the RPTR if desired not to start from the
// beginning of the buffer.
uint32_t tmp = rreg(rmmio, CP_RB_CNTL);
wreg(rmmio, CP_RB_CNTL, tmp | (1 << 31)); // RB_RPTR_WR_ENA
// 4) Write the CP_RB_RPTR_WR register if it is desired not to start at the beginning of the buffer.
wreg(rmmio, CP_RB_RPTR_WR, 0);
// 5) Write CP_RB_WPTR, to make it match the RPTR, causing the ring buffer to appear to be empty.
wreg(rmmio, CP_RB_WPTR, 0);
// 6) Clear the RB_RPTR_WR_ENA bit if no further writes of the RPTR are desired.
wreg(rmmio, CP_RB_CNTL, tmp);
// 7) Write CP_CSQ_CNTL or CP_CSQ_MODE to set the mode back to whatever you want.
wreg(rmmio, CP_CSQ_CNTL, 1 << 28); // Primary PIO, Indirect Disabled
wreg(rmmio, CP_CSQ_MODE, 0); // Primary PIO, Indirect Disabled
//pci_set_master(pdev);
uint32_t scratch;
scratch = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 0 %08x\n", scratch);
wreg(rmmio, SCRATCH_REG0, 0xEEAABBCC);
scratch = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 1 %08x\n", scratch);
#define PACKET_TYPE_0(base, count) \
(((base) >> 2) | ((count) << 16))
wreg(rmmio, 0x1000, PACKET_TYPE_0(SCRATCH_REG0, 0));
mb();
wreg(rmmio, 0x1000, 0xdeadbeef);
mb();
mdelay(1);
scratch = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 2 %08x\n", scratch);
if (0) {
wreg(rmmio, CP_CSQ_CNTL, 1); // Primary PIO, Indirect Disabled
wreg(rmmio, CP_CSQ_MODE, (1 << 30) | (1 << 31)); // Primary PIO, Indirect Disabled
///
wreg(rmmio, CP_RB_BASE, 0); // start of framebuffer memory
uint32_t cp_rb_cntl = ( (1 << 27) // RB_NO_UPDATE
);
wreg(rmmio, CP_RB_CNTL, cp_rb_cntl); // start of framebuffer memory
wreg(rmmio, CP_RB_RPTR_ADDR, 0);
udelay(10);
wreg(rmmio, CP_RB_WPTR_DELAY, 0);
wreg(rmmio, CP_CSQ_CNTL, 2 << 28);
volatile uint32_t * ring = (volatile uint32_t *)fb;
ring[0] = PACKET_TYPE_0(0x1724, 0); // ISYNC_CNTL
ring[1] = (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5);
mb();
wreg(rmmio, CP_RB_WPTR, 2);
(void)rreg(rmmio, CP_RB_WPTR);
ring[2] = PACKET_TYPE_0(SCRATCH_REG0, 0);
ring[3] = 0xdeadbeef;
mb();
wreg(rmmio, CP_RB_WPTR, 4);
(void)rreg(rmmio, CP_RB_WPTR);
udelay(500);
}
uint32_t scratch_reg0_2 = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 2 %08x\n", scratch_reg0_2);
if (1) {
// GB_PIPE_SELECT
// GB_TILE_CONFIG
// GA_SOFT_RESET
uint32_t gb_pipe_select = rreg(rmmio, GB_PIPE_SELECT);
printk(KERN_INFO "[r500] GB_PIPE_SELECT %08x\n", gb_pipe_select);
uint32_t gb_tile_config = rreg(rmmio, GB_TILE_CONFIG);
printk(KERN_INFO "[r500] GB_TILE_CONFIG %08x\n", gb_tile_config);
uint32_t cp_csq_cntl = rreg(rmmio, CP_CSQ_CNTL);
printk(KERN_INFO "[r500] CP_CSQ_CNTL %08x\n", cp_csq_cntl);
uint32_t cp_csq_mode = rreg(rmmio, CP_CSQ_MODE);
printk(KERN_INFO "[r500] CP_CSQ_MODE %08x\n", cp_csq_mode);
uint32_t cp_csq_stat = rreg(rmmio, CP_CSQ_STAT);
printk(KERN_INFO "[r500] CP_CSQ_STAT %08x\n", cp_csq_stat);
uint32_t cp_csq2_stat = rreg(rmmio, CP_CSQ2_STAT);
printk(KERN_INFO "[r500] CP_CSQ2_STAT %08x\n", cp_csq2_stat);
uint32_t cp_csq_avail = rreg(rmmio, CP_CSQ_AVAIL);
printk(KERN_INFO "[r500] CP_CSQ_AVAIL %08x\n", cp_csq_avail);
uint32_t cp_rb_rptr = rreg(rmmio, CP_RB_RPTR);
printk(KERN_INFO "[r500] CP_RB_RPTR %08x\n", cp_rb_rptr);
uint32_t cp_rb_wptr = rreg(rmmio, CP_RB_WPTR);
printk(KERN_INFO "[r500] CP_RB_WPTR %08x\n", cp_rb_wptr);
}
if (0) {
wreg(rmmio, 0x1000, PACKET_TYPE_0(SCRATCH_REG0, 0));
wreg(rmmio, 0x1004, 0xdeadbeef);
for (int i = 0; i < 14; i++)
wreg(rmmio, 0x1008 + i * 4, 0x80000000);
mb();
mdelay(500);
uint32_t scratch_reg02 = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 2 %08x\n", scratch_reg02);
wreg(rmmio, CP_RB_WPTR, 16);
(void)rreg(rmmio, CP_RB_WPTR);
mdelay(500);
uint32_t scratch_reg03 = rreg(rmmio, SCRATCH_REG0);
printk(KERN_INFO "[r500] SCRATCH_REG0 3 %08x\n", scratch_reg03);
}
if (0) {
uint32_t tmp;
tmp = rreg(rmmio, 0xf8);
printk(KERN_INFO "CONFIG_MEMSIZE 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x4);
printk(KERN_INFO "MC_FB_LOCATION 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x4c);
printk(KERN_INFO "BUS_CNTL 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x5);
printk(KERN_INFO "MC_AGP_LOCATION 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x6);
printk(KERN_INFO "AGP_BASE 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x130);
printk(KERN_INFO "HOST_PATH_CNTL 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x1d0);
printk(KERN_INFO "AIC_CTRL 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x1dc);
printk(KERN_INFO "AIC_LO_ADDR 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x1e0);
printk(KERN_INFO "AIC_HI_ADDR 0x%08x\n", tmp);
tmp = rreg(rmmio, 0x01e4);
printk(KERN_INFO "AIC_TLB_ADDR 0x%08x\n", tmp);
}
// write packet0
// align to 16 dwords
// write wptr
// check reg0
iounmap(fb);
iounmap(rmmio);
release_mem_region(pci_resource_start(pdev, 2), pci_resource_len(pdev, 2));
release_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
err_free:
return 0; return 0;
} }

View File

@ -0,0 +1,18 @@
#define RBBM_SOFT_RESET 0x00f0
#define RBBM_SOFT_RESET_CP (1 << 0)
#define RBBM_SOFT_RESET_HI (1 << 1)
#define RBBM_SOFT_RESET_VAP (1 << 2)
#define RBBM_SOFT_RESET_RE (1 << 3)
#define RBBM_SOFT_RESET_PP (1 << 4)
#define RBBM_SOFT_RESET_E2 (1 << 5)
#define RBBM_SOFT_RESET_RB (1 << 6)
#define RBBM_SOFT_RESET_HDP (1 << 7)
#define RBBM_SOFT_RESET_MC (1 << 8)
#define RBBM_SOFT_RESET_AIC (1 << 9)
#define RBBM_SOFT_RESET_VIP (1 << 10)
#define RBBM_SOFT_RESET_DISP (1 << 11)
#define RBBM_SOFT_RESET_CG (1 << 12)
#define RBBM_SOFT_RESET_GA (1 << 13)
#define RBBM_SOFT_RESET_IDCT (1 << 14)
#define SCRATCH_REG0 0x15e0

9
regs/3d_registers.py Normal file
View File

@ -0,0 +1,9 @@
with open('3d_registers.txt') as f:
lines = f.read().split('\n')
for line in lines:
if not line.strip():
continue
reg_name = line.split(':')[1].split(' ')[0]
reg_value = line.split('MMReg:')[1]
print("#define", reg_name, reg_value)