summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2010-08-10 10:15:28 +1000
committerDave Airlie <airlied@redhat.com>2010-08-10 10:15:28 +1000
commit950522528ff11f898f96fea69aa4a9cda8b6e79d (patch)
treef84ff42f662a7223b4ce9c884dd9c2fed6fe3ca6
parent632c245c3bfdfd2fd9d32e4ea162ef716b2e3de8 (diff)
evergreen: add initial cursor
-rw-r--r--avivotool.c66
-rw-r--r--radeon_reg.h4
2 files changed, 48 insertions, 22 deletions
diff --git a/avivotool.c b/avivotool.c
index 88b74f9..28f92c0 100644
--- a/avivotool.c
+++ b/avivotool.c
@@ -931,62 +931,84 @@ static uint32_t eg_offsets[] = { EVERGREEN_CRTC0_REGISTER_OFFSET, EVERGREEN_CRTC
EVERGREEN_CRTC4_REGISTER_OFFSET, EVERGREEN_CRTC5_REGISTER_OFFSET };
#define EG_NUM_OFFSETS (sizeof(eg_offsets) / sizeof(eg_offsets[0]))
+
+#define EG_GET_MODE_REG(index, reg) GET_REG((reg) + eg_offsets[(index)])
void eg_cmd_regs(const char *type)
{
int show_grphs = 0;
int i;
uint32_t tmp, tmp1;
+ char tmpname[10];
for (i = 0; i < EG_NUM_OFFSETS; i++) {
- tmp = GET_REG(EVERGREEN_CRTC_CONTROL + eg_offsets[i]);
+ tmp = EG_GET_MODE_REG(i, EVERGREEN_CRTC_CONTROL);
+ tmp1 = EG_GET_MODE_REG(i, EVERGREEN_CUR_CONTROL);
+
if (tmp & 0x1)
show_grphs |= (1 << i);
- printf("D%dCRTC: %s\n", i+1, tmp & 0x1 ? "Enabled" : "Disabled");
+ printf("D%dCRTC: %s, Cursor %s\n", i+1, tmp & 0x1 ? "Enabled" : "Disabled",
+ tmp1 & 0x1 ? "Enabled" : "Disabled");
if (!(tmp & 0x1))
continue;
- tmp = GET_REG(EVERGREEN_VIEWPORT_START + eg_offsets[i]);
- tmp1 = GET_REG(EVERGREEN_VIEWPORT_SIZE + eg_offsets[i]);
+ tmp = EG_GET_MODE_REG(i, EVERGREEN_VIEWPORT_START);
+ tmp1 = EG_GET_MODE_REG(i, EVERGREEN_VIEWPORT_SIZE);
printf("Viewport start x: %d y: %d, w %d h %d\n", tmp >> 16, tmp & 0xffff,
tmp1 >> 16, tmp1 & 0xffff);
}
for (i = 0; i < EG_NUM_OFFSETS; i++) {
- char grphname[10];
+
if (!(show_grphs & (1 << i)))
continue;
- snprintf(grphname, 10, "D%dGRPH", i+1);
- tmp = GET_REG(EVERGREEN_GRPH_ENABLE + eg_offsets[i]);
+ snprintf(tmpname, 10, "D%dGRPH", i+1);
+ tmp = EG_GET_MODE_REG(i, EVERGREEN_GRPH_ENABLE);
if (!(tmp & 0x1)) {
- printf("\n%s: disabled\n", grphname, i);
+ printf("\n%s: disabled\n", tmpname, i);
continue;
}
- printf("\n%s: enabled %08x, control %08x\n", grphname, tmp,
- GET_REG(EVERGREEN_GRPH_CONTROL + eg_offsets[i]));
- radeon_show_reg_bits(grphname, "CONTROL", 0, 0,
+ printf("\n%s: enabled %08x, control %08x\n", tmpname, tmp,
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_CONTROL));
+ radeon_show_reg_bits(tmpname, "CONTROL", 0, 0,
EVERGREEN_GRPH_CONTROL + eg_offsets[i],
0, 1, "Depth",
8, 10, "Format",
0, 0, NULL);
printf("pitch %08x\n",
- GET_REG(EVERGREEN_GRPH_PITCH + eg_offsets[i]));
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_PITCH));
printf("Primary surface address %08x:%08x\n",
- GET_REG(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS + eg_offsets[i]));
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS));
printf("Secondary surface address %08x:%08x\n",
- GET_REG(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS + eg_offsets[i]));
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS));
printf("Surface offset X %08x Y %08x\n",
- GET_REG(EVERGREEN_GRPH_SURFACE_OFFSET_X + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_SURFACE_OFFSET_Y + eg_offsets[i]));
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_SURFACE_OFFSET_X),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_SURFACE_OFFSET_Y));
printf("X/Y start %08x %08x, end %08x %08x\n",
- GET_REG(EVERGREEN_GRPH_X_START + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_Y_START + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_X_END + eg_offsets[i]),
- GET_REG(EVERGREEN_GRPH_Y_END + eg_offsets[i]));
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_X_START),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_Y_START),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_X_END),
+ EG_GET_MODE_REG(i, EVERGREEN_GRPH_Y_END));
+ }
+
+ for (i = 0; i < EG_NUM_OFFSETS; i++) {
+ tmp = EG_GET_MODE_REG(i, EVERGREEN_CUR_CONTROL);
+ if (!(tmp & 0x1))
+ continue;
+
+ snprintf(tmpname, 10, "D%dCUR", i+1);
+ radeon_show_reg_bits(tmpname, "CONTROL", 0, 0,
+ EVERGREEN_CUR_CONTROL,
+ 0, 0, "Enable",
+ 8, 10, "Mode",
+ 0, 0, NULL);
+ printf("Cursor surface address %08x:%08x\n",
+ EG_GET_MODE_REG(i, EVERGREEN_CUR_SURFACE_ADDRESS_HIGH),
+ EG_GET_MODE_REG(i, EVERGREEN_CUR_SURFACE_ADDRESS));
}
printf("\n");
}
diff --git a/radeon_reg.h b/radeon_reg.h
index 9432be9..aa588f1 100644
--- a/radeon_reg.h
+++ b/radeon_reg.h
@@ -3052,6 +3052,10 @@
/* CUR blocks at 0x6998, 0x7598, 0x10198, 0x10d98, 0x11998, 0x12598 */
#define EVERGREEN_CUR_CONTROL 0x6998
+#define EVERGREEN_CUR_SURFACE_ADDRESS 0x699c
+#define EVERGREEN_CUR_SIZE 0x69a0
+#define EVERGREEN_CUR_SURFACE_ADDRESS_HIGH 0x69a4
+#define EVERGREEN_CUR_POSITION 0x69a8
/* display controller offsets used for crtc/cur/lut/grph/viewport/etc. */
#define EVERGREEN_CRTC0_REGISTER_OFFSET (0x6df0 - 0x6df0)