summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-04-15 22:51:59 +0200
committerJerome Glisse <jglisse@redhat.com>2010-04-15 22:51:59 +0200
commit5b7ea48a52382deb083be8b251174ad74a8ab6e5 (patch)
tree55af2973af034d3057045ec74fe0091cc5b69b7e
parentdfaba1972382ae8e614fa8a5a56661edd90d6bf5 (diff)
radeondb: add support for dumping register
Register information are store in json file and a tools allow to automaticly generate files for the dumping utilities. Signed-off-by: Jerome Glisse <jglisse@redhat.com>
-rw-r--r--Makefile.am4
-rw-r--r--configure.ac3
-rw-r--r--json/rs600.json3684
-rw-r--r--src/Makefile.am11
-rw-r--r--src/radeon.c2
-rw-r--r--src/radeon_pci.c130
-rw-r--r--src/radeon_priv.h10
-rw-r--r--src/radeon_reg.c139
-rw-r--r--src/radeon_reg.h60
-rw-r--r--src/radeondb.c7
-rw-r--r--src/rs600_reg.c83
-rw-r--r--tools/Makefile.am29
-rw-r--r--tools/rdb.c153
-rw-r--r--tools/rdb_json.c123
-rw-r--r--tools/rdb_json.h49
15 files changed, 4480 insertions, 7 deletions
diff --git a/Makefile.am b/Makefile.am
index a39844f..c79b63d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -23,4 +23,6 @@ AUTOMAKE_OPTIONS = foreign
debug:
$(MAKE) all "CFLAGS=-O0 -g3 -DDEBUG"
-SUBDIRS = src
+SUBDIRS = \
+ tools \
+ src
diff --git a/configure.ac b/configure.ac
index 72f92dd..48856ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,5 +35,6 @@ AC_PROG_INSTALL
PKG_CHECK_MODULES(LIBJANSSON, jansson)
PKG_CHECK_MODULES(LIBDRM, libdrm)
PKG_CHECK_MODULES(LIBDRM_RADEON, libdrm_radeon)
+PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
-AC_OUTPUT([Makefile src/Makefile])
+AC_OUTPUT([Makefile src/Makefile tools/Makefile])
diff --git a/json/rs600.json b/json/rs600.json
new file mode 100644
index 0000000..90087eb
--- /dev/null
+++ b/json/rs600.json
@@ -0,0 +1,3684 @@
+{
+ "block": [
+ {
+ "name": "MMIO",
+ "0x00007D08": {
+ "name": "DC_HOT_PLUG_DETECT1_INT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT1_INT_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 8,
+ "name": "DC_HOT_PLUG_DETECT1_INT_POLARITY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 16,
+ "name": "DC_HOT_PLUG_DETECT1_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00000040": {
+ "name": "GEN_INT_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 18,
+ "name": "SCRATCH_INT_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 18
+ },
+ {
+ "bl": 19,
+ "name": "GUI_IDLE_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ },
+ {
+ "bl": 13,
+ "name": "DMA_VIPH1_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 13
+ },
+ {
+ "bl": 14,
+ "name": "DMA_VIPH2_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 15,
+ "name": "DMA_VIPH3_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 17,
+ "name": "I2C_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 17
+ },
+ {
+ "bl": 19,
+ "name": "GUI_IDLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ },
+ {
+ "bl": 24,
+ "name": "VIPH_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ },
+ {
+ "bl": 25,
+ "name": "SW_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 25
+ },
+ {
+ "bl": 27,
+ "name": "GEYSERVILLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 27
+ },
+ {
+ "bl": 28,
+ "name": "HDCP_AUTHORIZED_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 28
+ },
+ {
+ "bl": 29,
+ "name": "DVI_I2C_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 29
+ },
+ {
+ "bl": 30,
+ "name": "GUIDMA",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 30
+ },
+ {
+ "bl": 31,
+ "name": "VIDDMA",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 31
+ }
+ ]
+ },
+ "0x00007D10": {
+ "name": "DC_HOT_PLUG_DETECT2_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT2_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x000060A4": {
+ "name": "D1CRTC_STATUS_FRAME_COUNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 23,
+ "name": "D1CRTC_FRAME_COUNT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000E40": {
+ "name": "RBBM_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 6,
+ "name": "CMDFIFO_AVAIL",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 8,
+ "name": "HIRQ_ON_RBB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 9,
+ "name": "CPRQ_ON_RBB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 9
+ },
+ {
+ "bl": 10,
+ "name": "CFRQ_ON_RBB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 11,
+ "name": "HIRQ_IN_RTBUF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 12,
+ "name": "CPRQ_IN_RTBUF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 13,
+ "name": "CFRQ_IN_RTBUF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 13
+ },
+ {
+ "bl": 14,
+ "name": "CF_PIPE_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 15,
+ "name": "ENG_EV_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 16,
+ "name": "CP_CMDSTRM_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 17,
+ "name": "E2_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 17
+ },
+ {
+ "bl": 18,
+ "name": "RB2D_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 18
+ },
+ {
+ "bl": 19,
+ "name": "RB3D_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ },
+ {
+ "bl": 20,
+ "name": "VAP_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 21,
+ "name": "RE_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 21
+ },
+ {
+ "bl": 22,
+ "name": "TAM_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 22
+ },
+ {
+ "bl": 23,
+ "name": "TDM_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 23
+ },
+ {
+ "bl": 24,
+ "name": "PB_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ },
+ {
+ "bl": 25,
+ "name": "TIM_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 25
+ },
+ {
+ "bl": 26,
+ "name": "GA_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 26
+ },
+ {
+ "bl": 27,
+ "name": "CBA2D_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 27
+ },
+ {
+ "bl": 31,
+ "name": "GUI_ACTIVE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 31
+ }
+ ]
+ },
+ "0x00000070": {
+ "name": "MC_IND_INDEX",
+ "size": 32,
+ "field": [
+ {
+ "bl": 15,
+ "name": "MC_IND_ADDR",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "MC_IND_SEQ_RBS_0",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 17,
+ "name": "MC_IND_SEQ_RBS_1",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 17
+ },
+ {
+ "bl": 18,
+ "name": "MC_IND_SEQ_RBS_2",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 18
+ },
+ {
+ "bl": 19,
+ "name": "MC_IND_SEQ_RBS_3",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ },
+ {
+ "bl": 20,
+ "name": "MC_IND_AIC_RBS",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 21,
+ "name": "MC_IND_CITF_ARB0",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 21
+ },
+ {
+ "bl": 22,
+ "name": "MC_IND_CITF_ARB1",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 22
+ },
+ {
+ "bl": 23,
+ "name": "MC_IND_WR_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 23
+ },
+ {
+ "bl": 24,
+ "name": "MC_IND_RD_INV",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ }
+ ]
+ },
+ "0x000007C0": {
+ "name": "CP_STAT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "MRU_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "MWU_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 2,
+ "name": "RSIU_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 2
+ },
+ {
+ "bl": 3,
+ "name": "RCIU_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 3
+ },
+ {
+ "bl": 9,
+ "name": "CSF_PRIMARY_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 9
+ },
+ {
+ "bl": 10,
+ "name": "CSF_INDIRECT_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 11,
+ "name": "CSQ_PRIMARY_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 12,
+ "name": "CSQ_INDIRECT_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 13,
+ "name": "CSI_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 13
+ },
+ {
+ "bl": 14,
+ "name": "CSF_INDIRECT2_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 15,
+ "name": "CSQ_INDIRECT2_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 28,
+ "name": "GUIDMA_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 28
+ },
+ {
+ "bl": 29,
+ "name": "VIDDMA_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 29
+ },
+ {
+ "bl": 30,
+ "name": "CMDSTRM_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 30
+ },
+ {
+ "bl": 31,
+ "name": "CP_BUSY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 31
+ }
+ ]
+ },
+ "0x0000004C": {
+ "name": "BUS_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 14,
+ "name": "BUS_MASTER_DIS",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 20,
+ "name": "BUS_MSI_REARM",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00006548": {
+ "name": "D1MODE_PRIORITY_A_CNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 14,
+ "name": "D1MODE_PRIORITY_MARK_A",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "D1MODE_PRIORITY_A_OFF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 20,
+ "name": "D1MODE_PRIORITY_A_ALWAYS_ON",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 24,
+ "name": "D1MODE_PRIORITY_A_FORCE_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ }
+ ]
+ },
+ "0x00007A38": {
+ "name": "DACB_AUTODETECT_INT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DACB_AUTODETECT_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "DACB_AUTODETECT_INT_ENABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00006540": {
+ "name": "DxMODE_INT_MASK",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "D1MODE_VBLANK_INT_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 4,
+ "name": "D1MODE_VLINE_INT_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 4
+ },
+ {
+ "bl": 8,
+ "name": "D2MODE_VBLANK_INT_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 12,
+ "name": "D2MODE_VLINE_INT_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 30,
+ "name": "D1MODE_VBLANK_CP_SEL",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 30
+ },
+ {
+ "bl": 31,
+ "name": "D2MODE_VBLANK_CP_SEL",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 31
+ }
+ ]
+ },
+ "0x00000044": {
+ "name": "GEN_INT_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DISPLAY_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "VGA_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 8,
+ "name": "CAP0_INT_ACTIVE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 12,
+ "name": "DMA_VIPH0_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 13,
+ "name": "DMA_VIPH1_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 13
+ },
+ {
+ "bl": 14,
+ "name": "DMA_VIPH2_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 15,
+ "name": "DMA_VIPH3_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 16,
+ "name": "MC_PROBE_FAULT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 17,
+ "name": "I2C_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 17
+ },
+ {
+ "bl": 18,
+ "name": "SCRATCH_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 18
+ },
+ {
+ "bl": 19,
+ "name": "GUI_IDLE_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ },
+ {
+ "bl": 20,
+ "name": "ATI_OVERDRIVE_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 21,
+ "name": "MC_PROTECTION_FAULT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 21
+ },
+ {
+ "bl": 22,
+ "name": "RBBM_READ_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 22
+ },
+ {
+ "bl": 23,
+ "name": "CB_CONTEXT_SWITCH_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 23
+ },
+ {
+ "bl": 24,
+ "name": "VIPH_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ },
+ {
+ "bl": 25,
+ "name": "SW_INT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 25
+ },
+ {
+ "bl": 26,
+ "name": "SW_INT_SET",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 26
+ },
+ {
+ "bl": 27,
+ "name": "IDCT_INT_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 27
+ },
+ {
+ "bl": 30,
+ "name": "GUIDMA_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 30
+ },
+ {
+ "bl": 31,
+ "name": "VIDDMA_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 31
+ }
+ ]
+ },
+ "0x00006534": {
+ "name": "D1MODE_VBLANK_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "D1MODE_VBLANK_OCCURRED",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 4,
+ "name": "D1MODE_VBLANK_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 4
+ },
+ {
+ "bl": 12,
+ "name": "D1MODE_VBLANK_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 16,
+ "name": "D1MODE_VBLANK_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x000068A4": {
+ "name": "D2CRTC_STATUS_FRAME_COUNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 23,
+ "name": "D2CRTC_FRAME_COUNT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000074": {
+ "name": "MC_IND_DATA",
+ "size": 32,
+ "field": [
+ {
+ "bl": 31,
+ "name": "MC_IND_DATA",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00007828": {
+ "name": "DACA_AUTODETECT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 1,
+ "name": "DACA_AUTODETECT_MODE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 15,
+ "name": "DACA_AUTODETECT_FRAME_TIME_COUNTER",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 17,
+ "name": "DACA_AUTODETECT_CHECK_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00007D00": {
+ "name": "DC_HOT_PLUG_DETECT1_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT1_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00006D34": {
+ "name": "D2MODE_VBLANK_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "D2MODE_VBLANK_OCCURRED",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 4,
+ "name": "D2MODE_VBLANK_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 4
+ },
+ {
+ "bl": 12,
+ "name": "D2MODE_VBLANK_STAT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 12
+ },
+ {
+ "bl": 16,
+ "name": "D2MODE_VBLANK_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00007EDC": {
+ "name": "DISP_INTERRUPT_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 4,
+ "name": "LB_D1_VBLANK_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 4
+ },
+ {
+ "bl": 5,
+ "name": "LB_D2_VBLANK_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 5
+ },
+ {
+ "bl": 16,
+ "name": "DACA_AUTODETECT_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 17,
+ "name": "DACB_AUTODETECT_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 17
+ },
+ {
+ "bl": 18,
+ "name": "DC_HOT_PLUG_DETECT1_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 18
+ },
+ {
+ "bl": 19,
+ "name": "DC_HOT_PLUG_DETECT2_INTERRUPT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 19
+ }
+ ]
+ },
+ "0x00007838": {
+ "name": "DACA_AUTODETECT_INT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DACA_AUTODETECT_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "DACA_AUTODETECT_INT_ENABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00007D04": {
+ "name": "DC_HOT_PLUG_DETECT1_INT_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT1_INT_STATUS",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "DC_HOT_PLUG_DETECT1_SENSE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00007A28": {
+ "name": "DACB_AUTODETECT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 1,
+ "name": "DACB_AUTODETECT_MODE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 15,
+ "name": "DACB_AUTODETECT_FRAME_TIME_COUNTER",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 17,
+ "name": "DACB_AUTODETECT_CHECK_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00007D14": {
+ "name": "DC_HOT_PLUG_DETECT2_INT_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT2_INT_STATUS",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "DC_HOT_PLUG_DETECT2_SENSE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00007D18": {
+ "name": "DC_HOT_PLUG_DETECT2_INT_CONTROL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "DC_HOT_PLUG_DETECT2_INT_ACK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 8,
+ "name": "DC_HOT_PLUG_DETECT2_INT_POLARITY",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 16,
+ "name": "DC_HOT_PLUG_DETECT2_INT_EN",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00006D4C": {
+ "name": "D2MODE_PRIORITY_B_CNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 14,
+ "name": "D2MODE_PRIORITY_MARK_B",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "D2MODE_PRIORITY_B_OFF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 20,
+ "name": "D2MODE_PRIORITY_B_ALWAYS_ON",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 24,
+ "name": "D2MODE_PRIORITY_B_FORCE_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ }
+ ]
+ },
+ "0x00006D48": {
+ "name": "D2MODE_PRIORITY_A_CNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 14,
+ "name": "D2MODE_PRIORITY_MARK_A",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "D2MODE_PRIORITY_A_OFF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 20,
+ "name": "D2MODE_PRIORITY_A_ALWAYS_ON",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 24,
+ "name": "D2MODE_PRIORITY_A_FORCE_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ }
+ ]
+ },
+ "0x0000654C": {
+ "name": "D1MODE_PRIORITY_B_CNT",
+ "size": 32,
+ "field": [
+ {
+ "bl": 14,
+ "name": "D1MODE_PRIORITY_MARK_B",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 16,
+ "name": "D1MODE_PRIORITY_B_OFF",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ },
+ {
+ "bl": 20,
+ "name": "D1MODE_PRIORITY_B_ALWAYS_ON",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ },
+ {
+ "bl": 24,
+ "name": "D1MODE_PRIORITY_B_FORCE_MASK",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 24
+ }
+ ]
+ }
+ },
+ {
+ "name": "MC",
+ "0x00000000": {
+ "name": "MC_STATUS",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "MC_IDLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000004": {
+ "name": "MC_FB_LOCATION",
+ "size": 32,
+ "field": [
+ {
+ "bl": 15,
+ "name": "MC_FB_START",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 31,
+ "name": "MC_FB_TOP",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00000005": {
+ "name": "MC_AGP_LOCATION",
+ "size": 32,
+ "field": [
+ {
+ "bl": 15,
+ "name": "MC_AGP_START",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 31,
+ "name": "MC_AGP_TOP",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 16
+ }
+ ]
+ },
+ "0x00000006": {
+ "name": "AGP_BASE",
+ "size": 32,
+ "field": [
+ {
+ "bl": 31,
+ "name": "AGP_BASE_ADDR",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000007": {
+ "name": "AGP_BASE_2",
+ "size": 32,
+ "field": [
+ {
+ "bl": 3,
+ "name": "AGP_BASE_ADDR_2",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000009": {
+ "name": "MC_CNTL1",
+ "size": 32,
+ "field": [
+ {
+ "bl": 26,
+ "name": "ENABLE_PAGE_TABLES",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 26
+ }
+ ]
+ },
+ "0x00000134": {
+ "name": "HDP_FB_LOCATION",
+ "size": 32,
+ "field": [
+ {
+ "bl": 15,
+ "name": "HDP_FB_START",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ }
+ ]
+ },
+ "0x00000100": {
+ "name": "MC_PT0_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PT",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L2_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 23,
+ "name": "EFFECTIVE_L2_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 21
+ },
+ {
+ "bl": 28,
+ "name": "INVALIDATE_ALL_L1_TLBS",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 28
+ },
+ {
+ "bl": 29,
+ "name": "INVALIDATE_L2_CACHE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 29
+ }
+ ]
+ },
+ "0x00000102": {
+ "name": "MC_PT0_CONTEXT0_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000103": {
+ "name": "MC_PT0_CONTEXT1_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000104": {
+ "name": "MC_PT0_CONTEXT2_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000105": {
+ "name": "MC_PT0_CONTEXT3_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000106": {
+ "name": "MC_PT0_CONTEXT4_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000107": {
+ "name": "MC_PT0_CONTEXT5_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000108": {
+ "name": "MC_PT0_CONTEXT6_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000109": {
+ "name": "MC_PT0_CONTEXT7_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_PAGE_TABLE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 2,
+ "name": "PAGE_TABLE_DEPTH",
+ "value": [
+ {
+ "name": "PAGE_TABLE_FLAT",
+ "value": 0,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ }
+ ]
+ },
+ "0x00000112": {
+ "name": "MC_PT0_SYSTEM_APERTURE_LOW_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x00000114": {
+ "name": "MC_PT0_SYSTEM_APERTURE_HIGH_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x0000011C": {
+ "name": "MC_PT0_CONTEXT0_DEFAULT_READ_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x0000012C": {
+ "name": "MC_PT0_CONTEXT0_FLAT_BASE_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x0000013C": {
+ "name": "MC_PT0_CONTEXT0_FLAT_START_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x0000014C": {
+ "name": "MC_PT0_CONTEXT0_FLAT_END_ADDR",
+ "size": 32,
+ "field": []
+ },
+ "0x0000016C": {
+ "name": "MC_PT0_CLIENT0_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000016D": {
+ "name": "MC_PT0_CLIENT1_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000016E": {
+ "name": "MC_PT0_CLIENT2_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000016F": {
+ "name": "MC_PT0_CLIENT3_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000170": {
+ "name": "MC_PT0_CLIENT4_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000171": {
+ "name": "MC_PT0_CLIENT5_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000172": {
+ "name": "MC_PT0_CLIENT6_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000173": {
+ "name": "MC_PT0_CLIENT7_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000174": {
+ "name": "MC_PT0_CLIENT8_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000175": {
+ "name": "MC_PT0_CLIENT9_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000176": {
+ "name": "MC_PT0_CLIENT10_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000177": {
+ "name": "MC_PT0_CLIENT11_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000178": {
+ "name": "MC_PT0_CLIENT12_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x00000179": {
+ "name": "MC_PT0_CLIENT13_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000017A": {
+ "name": "MC_PT0_CLIENT14_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000017B": {
+ "name": "MC_PT0_CLIENT15_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000017C": {
+ "name": "MC_PT0_CLIENT16_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000017D": {
+ "name": "MC_PT0_CLIENT17_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ },
+ "0x0000017E": {
+ "name": "MC_PT0_CLIENT18_CNTL",
+ "size": 32,
+ "field": [
+ {
+ "bl": 0,
+ "name": "ENABLE_TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 0
+ },
+ {
+ "bl": 1,
+ "name": "TRANSLATION_MODE_OVERRIDE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 1
+ },
+ {
+ "bl": 9,
+ "name": "SYSTEM_ACCESS_MODE_MASK",
+ "value": [
+ {
+ "name": "SYSTEM_ACCESS_MODE_PA_ONLY",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_USE_SYS_MAP",
+ "value": 1,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_IN_SYS",
+ "value": 2,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_ACCESS_MODE_NOT_IN_SYS",
+ "value": 3,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 8
+ },
+ {
+ "bl": 10,
+ "name": "SYSTEM_APERTURE_UNMAPPED_ACCESS",
+ "value": [
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH",
+ "value": 0,
+ "description": ""
+ },
+ {
+ "name": "SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE",
+ "value": 1,
+ "description": ""
+ }
+ ],
+ "description": "",
+ "access": "RW",
+ "bf": 10
+ },
+ {
+ "bl": 13,
+ "name": "EFFECTIVE_L1_CACHE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 11
+ },
+ {
+ "bl": 14,
+ "name": "ENABLE_FRAGMENT_PROCESSING",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 14
+ },
+ {
+ "bl": 17,
+ "name": "EFFECTIVE_L1_QUEUE_SIZE",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 15
+ },
+ {
+ "bl": 20,
+ "name": "INVALIDATE_L1_TLB",
+ "value": [],
+ "description": "",
+ "access": "RW",
+ "bf": 20
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/src/Makefile.am b/src/Makefile.am
index 5cefdc0..1d25b46 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -23,11 +23,14 @@ AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = radeondb
-AM_CFLAGS = -std=c99 $(LIBJANSSON_CFLAGS) $(LIBDRM_CFLAGS)$(LIBDRM_RADEON_CFLAGS)
+AM_CFLAGS = -std=c99 $(LIBJANSSON_CFLAGS) $(LIBDRM_CFLAGS)$(LIBDRM_RADEON_CFLAGS)\
+ $(PCIACCESS_CFLAGS)
+noinst_HEADER = radeon.h radeon_priv.h r600_states.h mode.h
radeondb_SOURCES = radeondb.c bof.c radeon_pciid.c radeon_ctx.c radeon_bof.c\
radeon_json.c r600_state.c r600_ctx.c mode.c radeon.c radeon_state.c\
- radeon_draw.c
-radeondb_LDADD = $(LIBJANSSON_LIBS) $(LIBDRM_LIBS) $(LIBDRM_RADEON_LIBS)
+ radeon_draw.c radeon_pci.c radeon_reg.c rs600_reg.c
+radeondb_LDADD = $(LIBJANSSON_LIBS) $(LIBDRM_LIBS) $(LIBDRM_RADEON_LIBS) $(PCIACCESS_LIBS)
-EXTRA_DIST = radeon.h radeon_priv.h r600_states.h mode.h
+rs600_reg.c: ../json/rs600.json ../tools/rdb.c
+ ../tools/rdb -j ../json/rs600.json -h rs600 > rs600_reg.c
diff --git a/src/radeon.c b/src/radeon.c
index 66dbfc3..2873fa2 100644
--- a/src/radeon.c
+++ b/src/radeon.c
@@ -157,6 +157,8 @@ struct radeon *radeon_decref(struct radeon *radeon)
if (--radeon->refcount > 0) {
return NULL;
}
+ if (radeon->mmio)
+ pci_device_unmap_range(radeon->dev, radeon->mmio, radeon->mmio_size);
radeon_mode_cleanup(radeon);
radeon_bo_manager_gem_dtor(radeon->bom);
radeon_cs_manager_gem_dtor(radeon->csm);
diff --git a/src/radeon_pci.c b/src/radeon_pci.c
new file mode 100644
index 0000000..90b1106
--- /dev/null
+++ b/src/radeon_pci.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright © 2009 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include "xf86drm.h"
+#include "radeon_priv.h"
+
+int radeon_probe(struct radeon *radeon)
+{
+ struct pci_slot_match match;
+ struct pci_device_iterator *iter;
+ struct pci_device *device;
+ int i = 0;
+ int r = 0;
+
+ radeon->bios = (uint8_t*)malloc(256*1024);
+ if (radeon->bios == NULL) {
+ fprintf(stderr, "Failed to allocate bios copy\n");
+ return -1;
+ }
+ if (pci_system_init()) {
+ fprintf(stderr, "Failed to initialize libpciaccess\n");
+ return -1;
+ }
+ match.domain = PCI_MATCH_ANY;
+ match.bus = PCI_MATCH_ANY;
+ match.dev = PCI_MATCH_ANY;
+ match.func = 0;
+ match.match_data = 0;
+ iter = pci_slot_match_iterator_create(&match);
+ while ((device = pci_device_next(iter))) {
+ pci_device_probe(device);
+ /* ATI vendor id 0x1002 and we are looking for a video
+ * card class 0x03 with subclass 0x00 (VGA)
+ */
+ if (device->vendor_id == 0x1002) {
+ radeon->family = radeon_family_from_device(device->device_id);
+ radeon->device = device->device_id;
+ if (radeon->family != CHIP_UNKNOWN) {
+ for (i = 0; i < 6; i++) {
+ if (device->regions[i].size == 64 * 1024) {
+ radeon->mmio_base = device->regions[i].base_addr;
+ radeon->mmio_size = device->regions[i].size;
+ }
+ }
+ radeon->dev = device;
+ break;
+ }
+ }
+ }
+ pci_iterator_destroy(iter);
+ if (!radeon->dev) {
+ fprintf(stderr, "Cannot find radeon device\n");
+ return -1;
+ }
+ if (pci_device_map_range(radeon->dev, radeon->mmio_base, radeon->mmio_size,
+ PCI_DEV_MAP_FLAG_WRITABLE,
+ (void**)&radeon->mmio)) {
+ fprintf(stderr, "Mapping mmio failed (are you root ?)\n");
+ return -1;
+ }
+ r = pci_device_read_rom(radeon->dev, radeon->bios);
+ if (r) {
+ fprintf(stderr, "Cannot read rom %d\n", r);
+ return -1;
+ }
+ return 0;
+}
+
+void radeon_close(struct radeon *radeon)
+{
+ if (pci_device_unmap_range(radeon->dev, radeon->mmio, radeon->mmio_size)) {
+ fprintf(stderr, "Unmapping mmio failed\n");
+ }
+}
+
+u32 radeon_mmio_rd32(struct radeon *radeon, u32 offset)
+{
+ u32 value;
+
+ if (radeon->mmio == NULL) {
+ fprintf(stderr, "(%s:%d) internal error\n", __func__, __LINE__);
+ exit(1);
+ }
+ value = *(u32 * volatile)(radeon->mmio + offset);
+ return value;
+}
+
+void radeon_mmio_wr32(struct radeon *radeon, u32 offset, u32 value)
+{
+ if (radeon->mmio == NULL) {
+ fprintf(stderr, "(%s:%d) internal error\n", __func__, __LINE__);
+ exit(1);
+ }
+ *(u32 * volatile)(radeon->mmio + offset) = value;
+}
+
+struct radeon *radeon_new_from_pci(void)
+{
+ struct radeon *radeon;
+ int r;
+
+ radeon = calloc(1, sizeof(*radeon));
+ if (radeon == NULL)
+ return NULL;
+ radeon->refcount = 1;
+ if (radeon_probe(radeon)) {
+ return radeon_decref(radeon);
+ }
+ return radeon;
+}
diff --git a/src/radeon_priv.h b/src/radeon_priv.h
index a30ba73..6d04687 100644
--- a/src/radeon_priv.h
+++ b/src/radeon_priv.h
@@ -24,6 +24,7 @@
#include "radeon_cs.h"
#include <errno.h>
#include <jansson.h>
+#include <pciaccess.h>
#include "bof.h"
#include "radeon.h"
@@ -118,6 +119,11 @@ struct radeon {
const struct radeon_type *type;
const struct radeon_asic *asic;
struct radeon_ctx *ctx;
+ struct pci_device *dev;
+ unsigned char * volatile mmio;
+ pciaddr_t mmio_base;
+ pciaddr_t mmio_size;
+ uint8_t *bios;
};
extern int radeon_open_fd(void);
@@ -220,6 +226,10 @@ extern void *copy_object(void *ptr, unsigned size);
extern void memset_bo(struct radeon_bo *bo, u32 value);
extern void memcpy_bo(struct radeon_bo *bo, u32 *src, u32 size);
+extern u32 radeon_mmio_rd32(struct radeon *radeon, u32 offset);
+extern void radeon_mmio_wr32(struct radeon *radeon, u32 offset, u32 value);
+struct radeon *radeon_new_from_pci(void);
+
#define radeon_ctx_get_dst_surface(ctx, dst) (ctx)->radeon->asic->ctx_get_dst_surface((ctx), (dst))
#define radeon_ctx_next_reloc(ctx, reloc) (ctx)->radeon->asic->ctx_next_reloc(ctx, reloc)
diff --git a/src/radeon_reg.c b/src/radeon_reg.c
new file mode 100644
index 0000000..1a24466
--- /dev/null
+++ b/src/radeon_reg.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, 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 (including the next
+ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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:
+ * Jerome Glisse
+ */
+#include "radeon_priv.h"
+#include "radeon_reg.h"
+
+void radeon_register_dump(const char *bname)
+{
+ struct radeon *radeon = radeon_new_from_pci();
+ struct reg_block *block;
+ struct reg *reg;
+ unsigned nreg;
+ unsigned nblock;
+ unsigned bid, i;
+
+ if (radeon == NULL) {
+ fprintf(stderr, "%s didn't found GPU\n", __func__);
+ return;
+ }
+ switch (radeon->family) {
+ case CHIP_RS600:
+ block = rs600_block;
+ reg = rs600_reg;
+ nblock = rs600_nblock;
+ nreg = rs600_nreg;
+ break;
+ case CHIP_R600:
+ case CHIP_RV610:
+ case CHIP_RV630:
+ case CHIP_RV670:
+ case CHIP_RV620:
+ case CHIP_RV635:
+ case CHIP_RS780:
+ case CHIP_RS880:
+ case CHIP_RV770:
+ case CHIP_RV730:
+ case CHIP_RV710:
+ case CHIP_RV740:
+ case CHIP_R100:
+ case CHIP_RV100:
+ case CHIP_RS100:
+ case CHIP_RV200:
+ case CHIP_RS200:
+ case CHIP_R200:
+ case CHIP_RV250:
+ case CHIP_RS300:
+ case CHIP_RV280:
+ case CHIP_R300:
+ case CHIP_R350:
+ case CHIP_RV350:
+ case CHIP_RV380:
+ case CHIP_R420:
+ case CHIP_R423:
+ case CHIP_RV410:
+ case CHIP_RS400:
+ case CHIP_RS480:
+ case CHIP_RS690:
+ case CHIP_RS740:
+ case CHIP_RV515:
+ case CHIP_R520:
+ case CHIP_RV530:
+ case CHIP_RV560:
+ case CHIP_RV570:
+ case CHIP_R580:
+ case CHIP_CEDAR:
+ case CHIP_REDWOOD:
+ case CHIP_JUNIPER:
+ case CHIP_CYPRESS:
+ case CHIP_HEMLOCK:
+ default:
+ fprintf(stderr, "%s unknown or unsupported chipset 0x%04X\n",
+ __func__, radeon->device);
+ return;
+ }
+ if (bname) {
+ for (bid = 0; bid < nblock; bid++) {
+ if (!strcmp(bname, block[bid].name))
+ break;
+ }
+ if (bid == nblock) {
+ fprintf(stderr, "%s unknown block %s for chipset 0x%04X\n",
+ __func__, bname, radeon->device);
+ }
+ }
+ for (i = 0; i < nreg; i++) {
+ if ((bname && reg[i].block_id == bid) || bname == NULL) {
+ bid = reg[i].block_id;
+ printf("%s 0x%08X 0x%08X %s\n", block[bid].name, reg[i].offset,
+ block[bid].rreg(radeon, reg[i].offset), reg[i].name);
+ }
+ }
+ radeon_decref(radeon);
+}
+
+
+/* RS600 */
+u32 rs600_MMIO_rreg(struct radeon *radeon, u32 offset)
+{
+ return radeon_mmio_rd32(radeon, offset);
+}
+
+void rs600_MMIO_wreg(struct radeon *radeon, u32 offset, u32 value)
+{
+ radeon_mmio_wr32(radeon, offset, value);
+}
+
+u32 rs600_MC_rreg(struct radeon *radeon, u32 offset)
+{
+ radeon_mmio_wr32(radeon, 0x0070, (offset & 0xFFFF) | (1 << 21));
+ return radeon_mmio_rd32(radeon, 0x0074);
+}
+
+void rs600_MC_wreg(struct radeon *radeon, u32 offset, u32 value)
+{
+ radeon_mmio_wr32(radeon, 0x0070, (offset & 0xFFFF) | (1 << 21) | (1 << 23));
+ radeon_mmio_wr32(radeon, 0x0074, value);
+}
diff --git a/src/radeon_reg.h b/src/radeon_reg.h
new file mode 100644
index 0000000..bc35398
--- /dev/null
+++ b/src/radeon_reg.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, 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 (including the next
+ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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:
+ * Jerome Glisse
+ */
+#ifndef RADEON_REG_H
+#define RADEON_REG_H
+
+#include <stdio.h>
+#include <stdint.h>
+
+#include "radeon.h"
+
+typedef u32 (*radeon_rreg_t)(struct radeon *radeon, u32 offset);
+typedef void (*radeon_wreg_t)(struct radeon *radeon, u32 offset, u32 value);
+
+struct reg_block {
+ unsigned id;
+ char name[128];
+ radeon_rreg_t rreg;
+ radeon_wreg_t wreg;
+};
+
+struct reg {
+ unsigned offset;
+ unsigned block_id;
+ char name[128];
+};
+
+/* RS600 */
+u32 rs600_MMIO_rreg(struct radeon *radeon, u32 offset);
+void rs600_MMIO_wreg(struct radeon *radeon, u32 offset, u32 value);
+u32 rs600_MC_rreg(struct radeon *radeon, u32 offset);
+void rs600_MC_wreg(struct radeon *radeon, u32 offset, u32 value);
+extern struct reg_block rs600_block[];
+extern struct reg rs600_reg[];
+extern unsigned rs600_nblock;
+extern unsigned rs600_nreg;
+
+#endif
diff --git a/src/radeondb.c b/src/radeondb.c
index b81fb5f..6d3dd74 100644
--- a/src/radeondb.c
+++ b/src/radeondb.c
@@ -43,6 +43,7 @@ static int conv(const char *file);
static int json(const char *file);
static int play(const char *file);
static int dump(const char *file);
+void radeon_register_dump(const char *bname);
int main(int argc, char *argv[])
{
@@ -51,13 +52,14 @@ int main(int argc, char *argv[])
{"play", required_argument, 0, 'p'},
{"dump", required_argument, 0, 'd'},
{"conv", required_argument, 0, 'c'},
+ {"reg", required_argument, 0, 'r'},
{0, 0, 0, 0}
};
int option_id;
int c;
while (1) {
- c = getopt_long(argc, argv, "p:d:j:c:", options, &option_id);
+ c = getopt_long(argc, argv, "p:d:j:c:r:", options, &option_id);
if (c == -1)
break;
switch (c) {
@@ -69,6 +71,9 @@ int main(int argc, char *argv[])
return conv(optarg);
case 'p':
return play(optarg);
+ case 'r':
+ radeon_register_dump(optarg);
+ return 0;
case '?':
/* getopt_long already printed an error message. */
break;
diff --git a/src/rs600_reg.c b/src/rs600_reg.c
new file mode 100644
index 0000000..7d79876
--- /dev/null
+++ b/src/rs600_reg.c
@@ -0,0 +1,83 @@
+/* this file is autogenerated don't edit */
+#include "radeon_reg.h"
+
+struct reg_block rs600_block[] = {
+ {0, "MMIO", rs600_MMIO_rreg, rs600_MMIO_wreg},
+ {1, "MC", rs600_MC_rreg, rs600_MC_wreg},
+};
+
+unsigned rs600_nblock = 2;
+
+struct reg rs600_reg[] = {
+ {0x00000040, 0, "GEN_INT_CNTL"},
+ {0x00007D08, 0, "DC_HOT_PLUG_DETECT1_INT_CONTROL"},
+ {0x00000E40, 0, "RBBM_STATUS"},
+ {0x00000070, 0, "MC_IND_INDEX"},
+ {0x000060A4, 0, "D1CRTC_STATUS_FRAME_COUNT"},
+ {0x0000004C, 0, "BUS_CNTL"},
+ {0x00007A38, 0, "DACB_AUTODETECT_INT_CONTROL"},
+ {0x00006548, 0, "D1MODE_PRIORITY_A_CNT"},
+ {0x000007C0, 0, "CP_STAT"},
+ {0x00007D10, 0, "DC_HOT_PLUG_DETECT2_CONTROL"},
+ {0x00007828, 0, "DACA_AUTODETECT_CONTROL"},
+ {0x00000044, 0, "GEN_INT_STATUS"},
+ {0x00006540, 0, "DxMODE_INT_MASK"},
+ {0x00006534, 0, "D1MODE_VBLANK_STATUS"},
+ {0x00000074, 0, "MC_IND_DATA"},
+ {0x000068A4, 0, "D2CRTC_STATUS_FRAME_COUNT"},
+ {0x00006D34, 0, "D2MODE_VBLANK_STATUS"},
+ {0x00007D00, 0, "DC_HOT_PLUG_DETECT1_CONTROL"},
+ {0x00007EDC, 0, "DISP_INTERRUPT_STATUS"},
+ {0x00007838, 0, "DACA_AUTODETECT_INT_CONTROL"},
+ {0x00007A28, 0, "DACB_AUTODETECT_CONTROL"},
+ {0x00007D04, 0, "DC_HOT_PLUG_DETECT1_INT_STATUS"},
+ {0x00007D14, 0, "DC_HOT_PLUG_DETECT2_INT_STATUS"},
+ {0x00007D18, 0, "DC_HOT_PLUG_DETECT2_INT_CONTROL"},
+ {0x00006D4C, 0, "D2MODE_PRIORITY_B_CNT"},
+ {0x0000654C, 0, "D1MODE_PRIORITY_B_CNT"},
+ {0x00006D48, 0, "D2MODE_PRIORITY_A_CNT"},
+ {0x0000017E, 1, "MC_PT0_CLIENT18_CNTL"},
+ {0x00000134, 1, "HDP_FB_LOCATION"},
+ {0x00000009, 1, "MC_CNTL1"},
+ {0x00000005, 1, "MC_AGP_LOCATION"},
+ {0x0000013C, 1, "MC_PT0_CONTEXT0_FLAT_START_ADDR"},
+ {0x00000103, 1, "MC_PT0_CONTEXT1_CNTL"},
+ {0x00000175, 1, "MC_PT0_CLIENT9_CNTL"},
+ {0x00000000, 1, "MC_STATUS"},
+ {0x00000179, 1, "MC_PT0_CLIENT13_CNTL"},
+ {0x00000004, 1, "MC_FB_LOCATION"},
+ {0x00000006, 1, "AGP_BASE"},
+ {0x00000007, 1, "AGP_BASE_2"},
+ {0x00000100, 1, "MC_PT0_CNTL"},
+ {0x00000102, 1, "MC_PT0_CONTEXT0_CNTL"},
+ {0x00000104, 1, "MC_PT0_CONTEXT2_CNTL"},
+ {0x0000016C, 1, "MC_PT0_CLIENT0_CNTL"},
+ {0x00000105, 1, "MC_PT0_CONTEXT3_CNTL"},
+ {0x0000011C, 1, "MC_PT0_CONTEXT0_DEFAULT_READ_ADDR"},
+ {0x0000016D, 1, "MC_PT0_CLIENT1_CNTL"},
+ {0x00000106, 1, "MC_PT0_CONTEXT4_CNTL"},
+ {0x0000016E, 1, "MC_PT0_CLIENT2_CNTL"},
+ {0x00000107, 1, "MC_PT0_CONTEXT5_CNTL"},
+ {0x0000016F, 1, "MC_PT0_CLIENT3_CNTL"},
+ {0x00000108, 1, "MC_PT0_CONTEXT6_CNTL"},
+ {0x00000109, 1, "MC_PT0_CONTEXT7_CNTL"},
+ {0x00000112, 1, "MC_PT0_SYSTEM_APERTURE_LOW_ADDR"},
+ {0x0000017B, 1, "MC_PT0_CLIENT15_CNTL"},
+ {0x00000114, 1, "MC_PT0_SYSTEM_APERTURE_HIGH_ADDR"},
+ {0x0000012C, 1, "MC_PT0_CONTEXT0_FLAT_BASE_ADDR"},
+ {0x0000014C, 1, "MC_PT0_CONTEXT0_FLAT_END_ADDR"},
+ {0x00000170, 1, "MC_PT0_CLIENT4_CNTL"},
+ {0x00000171, 1, "MC_PT0_CLIENT5_CNTL"},
+ {0x00000172, 1, "MC_PT0_CLIENT6_CNTL"},
+ {0x00000173, 1, "MC_PT0_CLIENT7_CNTL"},
+ {0x00000174, 1, "MC_PT0_CLIENT8_CNTL"},
+ {0x00000176, 1, "MC_PT0_CLIENT10_CNTL"},
+ {0x00000177, 1, "MC_PT0_CLIENT11_CNTL"},
+ {0x00000178, 1, "MC_PT0_CLIENT12_CNTL"},
+ {0x0000017A, 1, "MC_PT0_CLIENT14_CNTL"},
+ {0x0000017C, 1, "MC_PT0_CLIENT16_CNTL"},
+ {0x0000017D, 1, "MC_PT0_CLIENT17_CNTL"},
+};
+
+unsigned rs600_nreg = 68;
+
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 0000000..86457c6
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,29 @@
+# Copyright 2009 Dave Airlie
+# Copyright 2010 Jerome Glisse
+#
+# 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
+# on the rights to use, copy, modify, merge, publish, distribute, sub
+# license, 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 (including the next
+# paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS 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.
+
+noinst_PROGRAMS = rdb
+
+AM_CFLAGS = -std=c99 $(LIBJANSSON_CFLAGS) $(LIBDRM_CFLAGS)$(LIBDRM_RADEON_CFLAGS)
+
+noinst_HEADER = rdb_json.h
+
+rdb_SOURCES = rdb.c rdb_json.c
+rdb_LDADD = $(LIBJANSSON_LIBS)
diff --git a/tools/rdb.c b/tools/rdb.c
new file mode 100644
index 0000000..99849ea
--- /dev/null
+++ b/tools/rdb.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, 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 (including the next
+ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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:
+ * Jerome Glisse
+ */
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <getopt.h>
+#include <jansson.h>
+#include "rdb_json.h"
+
+void usage(void)
+{
+ printf("usage: rdb [arguments] [file ..]\n\n");
+ printf("arguments:\n");
+ printf(" -j replay json command stream\n");
+ printf(" -l list\n");
+ printf(" -h header\n");
+}
+
+struct param {
+ int list;
+ int header;
+ char *file;
+ char *list_str;
+ char *header_name;
+};
+
+int main(int argc, char *argv[])
+{
+ static struct option options[] = {
+ {"json", required_argument, 0, 'j'},
+ {"list", required_argument, 0, 'l'},
+ {"header", required_argument, 0, 'h'},
+ {0, 0, 0, 0}
+ };
+ struct param param;
+ struct rdb_json *rdb;
+ json_t *block, *reg, *tmp, *name;
+ unsigned i;
+ int option_id;
+ void *iter;
+ int c;
+
+ memset(&param, 0, sizeof(struct param));
+ while (1) {
+ c = getopt_long(argc, argv, "l:j:h:", options, &option_id);
+ if (c == -1)
+ break;
+ switch (c) {
+ case 'l':
+ param.list = 1;
+ param.list_str = strdup(optarg);
+ break;
+ case 'j':
+ param.file = strdup(optarg);
+ break;
+ case 'h':
+ param.header = 1;
+ param.header_name = strdup(optarg);
+ break;
+ case '?':
+ /* getopt_long already printed an error message. */
+ break;
+ default:
+ abort ();
+ }
+ }
+ if (param.file == NULL) {
+ usage();
+ return -1;
+ }
+ rdb = rdb_json_load(param.file);
+ if (rdb == NULL) {
+ return -1;
+ }
+ if (param.list) {
+ if (strstr(param.list_str, "r")) {
+ for (i = 0; i < json_array_size(rdb->block); i++) {
+ block = json_array_get(rdb->block, i);
+ iter = json_object_iter(block);
+ while (iter) {
+ reg = json_object_iter_value(iter);
+ if (json_is_object(reg)) {
+ tmp = json_object_get(reg, "name");
+ printf("%s\n", json_string_value(tmp));
+ }
+ iter = json_object_iter_next(block, iter);
+ }
+ }
+ }
+ return 0;
+ }
+ if (param.header_name) {
+ printf("/* this file is autogenerated don't edit */\n");
+ printf("#include \"radeon_reg.h\"\n\n");
+ printf("struct reg_block %s_block[] = {\n", param.header_name);
+ for (i = 0; i < json_array_size(rdb->block); i++) {
+ block = json_array_get(rdb->block, i);
+ tmp = json_object_get(block, "name");
+ printf("\t{%d, \"%s\", %s_%s_rreg, %s_%s_wreg},\n", i,
+ json_string_value(tmp), param.header_name,
+ json_string_value(tmp), param.header_name,
+ json_string_value(tmp));
+ }
+ printf("};\n\n");
+ printf("unsigned %s_nblock = %d;\n\n", param.header_name, json_array_size(rdb->block));
+
+ printf("struct reg %s_reg[] = {\n", param.header_name);
+ for (i = 0, c = 0; i < json_array_size(rdb->block); i++) {
+ block = json_array_get(rdb->block, i);
+ name = json_object_get(block, "name");
+ iter = json_object_iter(block);
+ while (iter) {
+ unsigned offset;
+ reg = json_object_iter_value(iter);
+ if (json_is_object(reg)) {
+ offset = strtoul(json_object_iter_key(iter), NULL, 16);
+ tmp = json_object_get(reg, "name");
+ printf("\t{0x%08X, %4d, \"%s\"},\n",
+ offset, i, json_string_value(tmp));
+ c++;
+ }
+ iter = json_object_iter_next(block, iter);
+ }
+ }
+ printf("};\n\n");
+ printf("unsigned %s_nreg = %d;\n\n", param.header_name, c);
+ }
+ return 0;
+}
diff --git a/tools/rdb_json.c b/tools/rdb_json.c
new file mode 100644
index 0000000..40c9d36
--- /dev/null
+++ b/tools/rdb_json.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, 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 (including the next
+ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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:
+ * Jerome Glisse
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include "jansson.h"
+#include "rdb_json.h"
+
+json_t *rdb_json_block_find(struct rdb_json *rdb, const char *name)
+{
+ unsigned i;
+ json_t *block;
+ json_t *bname;
+
+ for (i = 0; i < json_array_size(rdb->block); i++) {
+ block = json_array_get(rdb->block, i);
+ bname = json_object_get(block, "name");
+ if (!strcmp(name, json_string_value(bname)))
+ return block;
+ }
+ return NULL;
+}
+
+int rdb_json_block_add(struct rdb_json *rdb, const char *name)
+{
+ unsigned i;
+ json_t *block;
+ json_t *bname;
+
+ block = json_object();
+ bname = json_string(name);
+ json_object_set_new(block, "name", bname);
+ return json_array_append_new(rdb->block, block);
+}
+
+json_t *rdb_json_block_reg_find(json_t *block, unsigned offset)
+{
+ char tmp[16];
+
+ sprintf(tmp, "0x%08X", offset);
+ return json_object_get(block, tmp);
+}
+
+int rdb_json_block_reg_add(json_t *block, unsigned offset, json_t *reg)
+{
+ char tmp[16];
+
+ sprintf(tmp, "0x%08X", offset);
+ return json_object_set_new(block, tmp, reg);
+}
+
+struct rdb_json *rdb_json_load(const char *file)
+{
+ struct rdb_json *rdb = calloc(1, sizeof(struct rdb_json));
+ json_error_t error;
+
+ if (rdb == NULL)
+ return NULL;
+ rdb->root = json_load_file(file, &error);
+ if (rdb->root == NULL) {
+ fprintf(stderr, "%s failed to load %s (%d:%s)\n", __func__, file, error.line, error.text);
+ free(rdb);
+ return NULL;
+ }
+ rdb->block = json_object_get(rdb->root, "block");
+ return rdb;
+}
+
+json_t *rdb_json_block_reg_find_name(json_t *block, const char *name)
+{
+ void *iter;
+ json_t *reg, *tmp;
+
+ iter = json_object_iter(block);
+ while (iter) {
+ reg = json_object_iter_value(iter);
+ if (json_is_object(reg)) {
+ tmp = json_object_get(reg, "name");
+ if (!strcmp(name, json_string_value(tmp)))
+ return reg;
+ }
+ iter = json_object_iter_next(block, iter);
+ }
+ return NULL;
+}
+
+char *strdup(const char *str)
+{
+ char *nstr;
+
+ if (str == NULL)
+ return NULL;
+ nstr = malloc(strlen(str) + 1);
+ if (nstr == NULL)
+ return NULL;
+ strcpy(nstr, str);
+ return nstr;
+}
diff --git a/tools/rdb_json.h b/tools/rdb_json.h
new file mode 100644
index 0000000..aa66722
--- /dev/null
+++ b/tools/rdb_json.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
+ *
+ * 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
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, 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 (including the next
+ * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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:
+ * Jerome Glisse
+ */
+#ifndef RDB_JSON_H
+#define RDB_JSON_H
+
+#include <stdio.h>
+#include <stdint.h>
+#include "jansson.h"
+
+struct rdb_json {
+ json_t *root;
+ json_t *block;
+};
+
+int rdb_json_block_add(struct rdb_json *rdb, const char *name);
+json_t *rdb_json_block_find(struct rdb_json *rdb, const char *name);
+
+int rdb_json_block_reg_add(json_t *block, unsigned offset, json_t *reg);
+json_t *rdb_json_block_reg_find(json_t *block, unsigned offset);
+json_t *rdb_json_block_reg_find_name(json_t *block, const char *name);
+
+struct rdb_json *rdb_json_load(const char *file);
+
+char *strdup(const char *str);
+
+#endif