From 950522528ff11f898f96fea69aa4a9cda8b6e79d Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 10 Aug 2010 10:15:28 +1000 Subject: evergreen: add initial cursor --- avivotool.c | 66 ++++++++++++++++++++++++++++++++++++++++-------------------- radeon_reg.h | 4 ++++ 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) -- cgit v1.2.3