* [PATCH] drm/radeon/kms: add register definitions for audio
@ 2012-03-28 17:19 alexdeucher
2012-03-29 7:53 ` Christian König
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: alexdeucher @ 2012-03-28 17:19 UTC (permalink / raw)
To: airlied, dri-devel, zajec5; +Cc: Alex Deucher
From: Alex Deucher <alexander.deucher@amd.com>
This adds register definitions for HDMI/DP audio on
DCE2/3/4/5 hardware.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/radeon/evergreend.h | 220 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/radeon/r600d.h | 236 +++++++++++++++++++++++++++++++++++
drivers/gpu/drm/radeon/rs600d.h | 14 ++
drivers/gpu/drm/radeon/rv770d.h | 191 ++++++++++++++++++++++++++++
4 files changed, 661 insertions(+), 0 deletions(-)
diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
index eb5708c..3955d98 100644
--- a/drivers/gpu/drm/radeon/evergreend.h
+++ b/drivers/gpu/drm/radeon/evergreend.h
@@ -112,6 +112,226 @@
#define CP_SEM_INCOMPLETE_TIMER_CNTL 0x85C8
#define CP_DEBUG 0xC1FC
+/* Audio clocks */
+#define DCCG_AUDIO_DTO_SOURCE 0x05ac
+# define DCCG_AUDIO_DTO0_SOURCE_SEL(x) ((x) << 0) /* crtc0 - crtc5 */
+# define DCCG_AUDIO_DTO_SEL (1 << 4) /* 0=dto0 1=dto1 */
+
+#define DCCG_AUDIO_DTO0_PHASE 0x05b0
+#define DCCG_AUDIO_DTO0_MODULE 0x05b4
+#define DCCG_AUDIO_DTO0_LOAD 0x05b8
+#define DCCG_AUDIO_DTO0_CNTL 0x05bc
+
+#define DCCG_AUDIO_DTO1_PHASE 0x05c0
+#define DCCG_AUDIO_DTO1_MODULE 0x05c4
+#define DCCG_AUDIO_DTO1_LOAD 0x05c8
+#define DCCG_AUDIO_DTO1_CNTL 0x05cc
+
+/* DCE 4.0 AFMT */
+#define HDMI_CONTROL 0x7030
+# define HDMI_KEEPOUT_MODE (1 << 0)
+# define HDMI_PACKET_GEN_VERSION (1 << 4) /* 0 = r6xx compat */
+# define HDMI_ERROR_ACK (1 << 8)
+# define HDMI_ERROR_MASK (1 << 9)
+# define HDMI_DEEP_COLOR_ENABLE (1 << 24)
+# define HDMI_DEEP_COLOR_DEPTH (((x) & 3) << 28)
+# define HDMI_24BIT_DEEP_COLOR 0
+# define HDMI_30BIT_DEEP_COLOR 1
+# define HDMI_36BIT_DEEP_COLOR 2
+#define HDMI_STATUS 0x7034
+# define HDMI_ACTIVE_AVMUTE (1 << 0)
+# define HDMI_AUDIO_PACKET_ERROR (1 << 16)
+# define HDMI_VBI_PACKET_ERROR (1 << 20)
+#define HDMI_AUDIO_PACKET_CONTROL 0x7038
+# define HDMI_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
+# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
+#define HDMI_ACR_PACKET_CONTROL 0x703c
+# define HDMI_ACR_SEND (1 << 0)
+# define HDMI_ACR_CONT (1 << 1)
+# define HDMI_ACR_SELECT(x) (((x) & 3) << 4)
+# define HDMI_ACR_HW 0
+# define HDMI_ACR_32 1
+# define HDMI_ACR_44 2
+# define HDMI_ACR_48 3
+# define HDMI_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
+# define HDMI_ACR_AUTO_SEND (1 << 12)
+# define HDMI_ACR_N_MULTIPLE(x) (((x) & 7) << 16)
+# define HDMI_ACR_X1 1
+# define HDMI_ACR_X2 2
+# define HDMI_ACR_X4 4
+# define HDMI_ACR_AUDIO_PRIORITY (1 << 31)
+#define HDMI_VBI_PACKET_CONTROL 0x7040
+# define HDMI_NULL_SEND (1 << 0)
+# define HDMI_GC_SEND (1 << 4)
+# define HDMI_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
+#define HDMI_INFOFRAME_CONTROL0 0x7044
+# define HDMI_AVI_INFO_SEND (1 << 0)
+# define HDMI_AVI_INFO_CONT (1 << 1)
+# define HDMI_AUDIO_INFO_SEND (1 << 4)
+# define HDMI_AUDIO_INFO_CONT (1 << 5)
+# define HDMI_MPEG_INFO_SEND (1 << 8)
+# define HDMI_MPEG_INFO_CONT (1 << 9)
+#define HDMI_INFOFRAME_CONTROL1 0x7048
+# define HDMI_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
+# define HDMI_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
+# define HDMI_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
+#define HDMI_GENERIC_PACKET_CONTROL 0x704c
+# define HDMI_GENERIC0_SEND (1 << 0)
+# define HDMI_GENERIC0_CONT (1 << 1)
+# define HDMI_GENERIC1_SEND (1 << 4)
+# define HDMI_GENERIC1_CONT (1 << 5)
+# define HDMI_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
+# define HDMI_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
+#define HDMI_GC 0x7058
+# define HDMI_GC_AVMUTE (1 << 0)
+# define HDMI_GC_AVMUTE_CONT (1 << 2)
+#define AFMT_AUDIO_PACKET_CONTROL2 0x705c
+# define AFMT_AUDIO_LAYOUT_OVRD (1 << 0)
+# define AFMT_AUDIO_LAYOUT_SELECT (1 << 1)
+# define AFMT_60958_CS_SOURCE (1 << 4)
+# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x) & 0xff) << 8)
+# define AFMT_DP_AUDIO_STREAM_ID(x) (((x) & 0xff) << 16)
+#define AFMT_AVI_INFO0 0x7084
+# define AFMT_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_AVI_INFO_S(x) (((x) & 3) << 8)
+# define AFMT_AVI_INFO_B(x) (((x) & 3) << 10)
+# define AFMT_AVI_INFO_A(x) (((x) & 1) << 12)
+# define AFMT_AVI_INFO_Y(x) (((x) & 3) << 13)
+# define AFMT_AVI_INFO_Y_RGB 0
+# define AFMT_AVI_INFO_Y_YCBCR422 1
+# define AFMT_AVI_INFO_Y_YCBCR444 2
+# define AFMT_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
+# define AFMT_AVI_INFO_R(x) (((x) & 0xf) << 16)
+# define AFMT_AVI_INFO_M(x) (((x) & 0x3) << 20)
+# define AFMT_AVI_INFO_C(x) (((x) & 0x3) << 22)
+# define AFMT_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
+# define AFMT_AVI_INFO_SC(x) (((x) & 0x3) << 24)
+# define AFMT_AVI_INFO_Q(x) (((x) & 0x3) << 26)
+# define AFMT_AVI_INFO_EC(x) (((x) & 0x3) << 28)
+# define AFMT_AVI_INFO_ITC(x) (((x) & 0x1) << 31)
+# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
+#define AFMT_AVI_INFO1 0x7088
+# define AFMT_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
+# define AFMT_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
+# define AFMT_AVI_INFO_CN(x) (((x) & 0x3) << 12)
+# define AFMT_AVI_INFO_YQ(x) (((x) & 0x3) << 14)
+# define AFMT_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
+#define AFMT_AVI_INFO2 0x708c
+# define AFMT_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
+# define AFMT_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
+#define AFMT_AVI_INFO3 0x7090
+# define AFMT_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
+# define AFMT_AVI_INFO_VERSION(x) (((x) & 3) << 24)
+#define AFMT_MPEG_INFO0 0x7094
+# define AFMT_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
+# define AFMT_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
+# define AFMT_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
+#define AFMT_MPEG_INFO1 0x7098
+# define AFMT_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
+# define AFMT_MPEG_INFO_MF(x) (((x) & 3) << 8)
+# define AFMT_MPEG_INFO_FR(x) (((x) & 1) << 12)
+#define AFMT_GENERIC0_HDR 0x709c
+#define AFMT_GENERIC0_0 0x70a0
+#define AFMT_GENERIC0_1 0x70a4
+#define AFMT_GENERIC0_2 0x70a8
+#define AFMT_GENERIC0_3 0x70ac
+#define AFMT_GENERIC0_4 0x70b0
+#define AFMT_GENERIC0_5 0x70b4
+#define AFMT_GENERIC0_6 0x70b8
+#define AFMT_GENERIC1_HDR 0x70bc
+#define AFMT_GENERIC1_0 0x70c0
+#define AFMT_GENERIC1_1 0x70c4
+#define AFMT_GENERIC1_2 0x70c8
+#define AFMT_GENERIC1_3 0x70cc
+#define AFMT_GENERIC1_4 0x70d0
+#define AFMT_GENERIC1_5 0x70d4
+#define AFMT_GENERIC1_6 0x70d8
+#define HDMI_ACR_32_0 0x70dc
+# define HDMI_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_32_1 0x70e0
+# define HDMI_ACR_N_32(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_44_0 0x70e4
+# define HDMI_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_44_1 0x70e8
+# define HDMI_ACR_N_44(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_48_0 0x70ec
+# define HDMI_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_48_1 0x70f0
+# define HDMI_ACR_N_48(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_STATUS_0 0x70f4
+#define HDMI_ACR_STATUS_1 0x70f8
+#define AFMT_AUDIO_INFO0 0x70fc
+# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_AUDIO_INFO_CC(x) (((x) & 7) << 8)
+# define AFMT_AUDIO_INFO_CT(x) (((x) & 0xf) << 11)
+# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x) & 0xff) << 16)
+# define AFMT_AUDIO_INFO_CXT(x) (((x) & 0x1f) << 24)
+#define AFMT_AUDIO_INFO1 0x7100
+# define AFMT_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
+# define AFMT_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
+# define AFMT_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
+# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
+# define AFMT_AUDIO_INFO_LFEBPL(x) (((x) & 3) << 16)
+#define AFMT_60958_0 0x7104
+# define AFMT_60958_CS_A(x) (((x) & 1) << 0)
+# define AFMT_60958_CS_B(x) (((x) & 1) << 1)
+# define AFMT_60958_CS_C(x) (((x) & 1) << 2)
+# define AFMT_60958_CS_D(x) (((x) & 3) << 3)
+# define AFMT_60958_CS_MODE(x) (((x) & 3) << 6)
+# define AFMT_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
+# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
+# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
+# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
+# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
+#define AFMT_60958_1 0x7108
+# define AFMT_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
+# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
+# define AFMT_60958_CS_VALID_L(x) (((x) & 1) << 16)
+# define AFMT_60958_CS_VALID_R(x) (((x) & 1) << 18)
+# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
+#define AFMT_AUDIO_CRC_CONTROL 0x710c
+# define AFMT_AUDIO_CRC_EN (1 << 0)
+#define AFMT_RAMP_CONTROL0 0x7110
+# define AFMT_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
+# define AFMT_RAMP_DATA_SIGN (1 << 31)
+#define AFMT_RAMP_CONTROL1 0x7114
+# define AFMT_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
+# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x) & 0xff) << 24)
+#define AFMT_RAMP_CONTROL2 0x7118
+# define AFMT_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
+#define AFMT_RAMP_CONTROL3 0x711c
+# define AFMT_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
+#define AFMT_60958_2 0x7120
+# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
+# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
+# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
+# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
+# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
+# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
+#define AFMT_STATUS 0x7128
+# define AFMT_AUDIO_ENABLE (1 << 4)
+# define AFMT_AUDIO_HBR_ENABLE (1 << 8)
+# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
+#define AFMT_AUDIO_PACKET_CONTROL 0x712c
+# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
+# define AFMT_RESET_FIFO_WHEN_AUDIO_DIS (1 << 11) /* set to 1 */
+# define AFMT_AUDIO_TEST_EN (1 << 12)
+# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
+# define AFMT_60958_CS_UPDATE (1 << 26)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
+# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
+#define AFMT_VBI_PACKET_CONTROL 0x7130
+# define AFMT_GENERIC0_UPDATE (1 << 2)
+#define AFMT_INFOFRAME_CONTROL0 0x7134
+# define AFMT_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - afmt regs */
+# define AFMT_AUDIO_INFO_UPDATE (1 << 7)
+# define AFMT_MPEG_INFO_UPDATE (1 << 10)
+#define AFMT_GENERIC0_7 0x7138
#define GC_USER_SHADER_PIPE_CONFIG 0x8954
#define INACTIVE_QD_PIPES(x) ((x) << 8)
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
index 3568a2e..7f0c223 100644
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -816,6 +816,242 @@
# define TARGET_LINK_SPEED_MASK (0xf << 0)
# define SELECTABLE_DEEMPHASIS (1 << 6)
+/* Audio clocks */
+#define DCCG_AUDIO_DTO0_PHASE 0x0514
+#define DCCG_AUDIO_DTO0_MODULE 0x0518
+#define DCCG_AUDIO_DTO0_LOAD 0x051c
+# define DTO_LOAD (1 << 31)
+#define DCCG_AUDIO_DTO0_CNTL 0x0520
+
+#define DCCG_AUDIO_DTO1_PHASE 0x0524
+#define DCCG_AUDIO_DTO1_MODULE 0x0528
+#define DCCG_AUDIO_DTO1_LOAD 0x052c
+#define DCCG_AUDIO_DTO1_CNTL 0x0530
+
+#define DCCG_AUDIO_DTO_SELECT 0x0534
+
+/* digital blocks */
+#define TMDSA_CNTL 0x7880
+# define TMDSA_HDMI_EN (1 << 2)
+#define LVTMA_CNTL 0x7a80
+# define LVTMA_HDMI_EN (1 << 2)
+#define DDIA_CNTL 0x7200
+# define DDIA_HDMI_EN (1 << 2)
+#define DIG0_CNTL 0x75a0
+# define DIG_MODE(x) (((x) & 7) << 8)
+# define DIG_MODE_DP 0
+# define DIG_MODE_LVDS 1
+# define DIG_MODE_TMDS_DVI 2
+# define DIG_MODE_TMDS_HDMI 3
+# define DIG_MODE_SDVO 4
+#define DIG1_CNTL 0x79a0
+
+/* rs6xx/rs740 and r6xx share the same HDMI blocks, however, rs6xx has only one
+ * instance of the blocks while r6xx has 2. DCE 3.0 cards are slightly
+ * different due to the new DIG blocks, but also have 2 instances.
+ * DCE 3.0 HDMI blocks are part of each DIG encoder.
+ */
+
+/* rs6xx/rs740/r6xx/dce3 */
+#define HDMI0_CONTROL 0x7400
+/* rs6xx/rs740/r6xx */
+# define HDMI0_ENABLE (1 << 0)
+# define HDMI0_STREAM(x) (((x) & 3) << 2)
+# define HDMI0_STREAM_TMDSA 0
+# define HDMI0_STREAM_LVTMA 1
+# define HDMI0_STREAM_DVOA 2
+# define HDMI0_STREAM_DDIA 3
+/* rs6xx/r6xx/dce3 */
+# define HDMI0_ERROR_ACK (1 << 8)
+# define HDMI0_ERROR_MASK (1 << 9)
+#define HDMI0_STATUS 0x7404
+# define HDMI0_ACTIVE_AVMUTE (1 << 0)
+# define HDMI0_AUDIO_ENABLE (1 << 4)
+# define HDMI0_AZ_FORMAT_WTRIG (1 << 28)
+# define HDMI0_AZ_FORMAT_WTRIG_INT (1 << 29)
+#define HDMI0_AUDIO_PACKET_CONTROL 0x7408
+# define HDMI0_AUDIO_SAMPLE_SEND (1 << 0)
+# define HDMI0_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
+# define HDMI0_AUDIO_SEND_MAX_PACKETS (1 << 8)
+# define HDMI0_AUDIO_TEST_EN (1 << 12)
+# define HDMI0_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
+# define HDMI0_AUDIO_CHANNEL_SWAP (1 << 24)
+# define HDMI0_60958_CS_UPDATE (1 << 26)
+# define HDMI0_AZ_FORMAT_WTRIG_MASK (1 << 28)
+# define HDMI0_AZ_FORMAT_WTRIG_ACK (1 << 29)
+#define HDMI0_AUDIO_CRC_CONTROL 0x740c
+# define HDMI0_AUDIO_CRC_EN (1 << 0)
+#define HDMI0_VBI_PACKET_CONTROL 0x7410
+# define HDMI0_NULL_SEND (1 << 0)
+# define HDMI0_GC_SEND (1 << 4)
+# define HDMI0_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
+#define HDMI0_INFOFRAME_CONTROL0 0x7414
+# define HDMI0_AVI_INFO_SEND (1 << 0)
+# define HDMI0_AVI_INFO_CONT (1 << 1)
+# define HDMI0_AUDIO_INFO_SEND (1 << 4)
+# define HDMI0_AUDIO_INFO_CONT (1 << 5)
+# define HDMI0_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - hmdi regs */
+# define HDMI0_AUDIO_INFO_UPDATE (1 << 7)
+# define HDMI0_MPEG_INFO_SEND (1 << 8)
+# define HDMI0_MPEG_INFO_CONT (1 << 9)
+# define HDMI0_MPEG_INFO_UPDATE (1 << 10)
+#define HDMI0_INFOFRAME_CONTROL1 0x7418
+# define HDMI0_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
+# define HDMI0_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
+# define HDMI0_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
+#define HDMI0_GENERIC_PACKET_CONTROL 0x741c
+# define HDMI0_GENERIC0_SEND (1 << 0)
+# define HDMI0_GENERIC0_CONT (1 << 1)
+# define HDMI0_GENERIC0_UPDATE (1 << 2)
+# define HDMI0_GENERIC1_SEND (1 << 4)
+# define HDMI0_GENERIC1_CONT (1 << 5)
+# define HDMI0_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
+# define HDMI0_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
+#define HDMI0_GC 0x7428
+# define HDMI0_GC_AVMUTE (1 << 0)
+#define HDMI0_AVI_INFO0 0x7454
+# define HDMI0_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define HDMI0_AVI_INFO_S(x) (((x) & 3) << 8)
+# define HDMI0_AVI_INFO_B(x) (((x) & 3) << 10)
+# define HDMI0_AVI_INFO_A(x) (((x) & 1) << 12)
+# define HDMI0_AVI_INFO_Y(x) (((x) & 3) << 13)
+# define HDMI0_AVI_INFO_Y_RGB 0
+# define HDMI0_AVI_INFO_Y_YCBCR422 1
+# define HDMI0_AVI_INFO_Y_YCBCR444 2
+# define HDMI0_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
+# define HDMI0_AVI_INFO_R(x) (((x) & 0xf) << 16)
+# define HDMI0_AVI_INFO_M(x) (((x) & 0x3) << 20)
+# define HDMI0_AVI_INFO_C(x) (((x) & 0x3) << 22)
+# define HDMI0_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
+# define HDMI0_AVI_INFO_SC(x) (((x) & 0x3) << 24)
+# define HDMI0_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
+#define HDMI0_AVI_INFO1 0x7458
+# define HDMI0_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
+# define HDMI0_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
+# define HDMI0_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
+#define HDMI0_AVI_INFO2 0x745c
+# define HDMI0_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
+# define HDMI0_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
+#define HDMI0_AVI_INFO3 0x7460
+# define HDMI0_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
+# define HDMI0_AVI_INFO_VERSION(x) (((x) & 3) << 24)
+#define HDMI0_MPEG_INFO0 0x7464
+# define HDMI0_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define HDMI0_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
+# define HDMI0_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
+# define HDMI0_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
+#define HDMI0_MPEG_INFO1 0x7468
+# define HDMI0_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
+# define HDMI0_MPEG_INFO_MF(x) (((x) & 3) << 8)
+# define HDMI0_MPEG_INFO_FR(x) (((x) & 1) << 12)
+#define HDMI0_GENERIC0_HDR 0x746c
+#define HDMI0_GENERIC0_0 0x7470
+#define HDMI0_GENERIC0_1 0x7474
+#define HDMI0_GENERIC0_2 0x7478
+#define HDMI0_GENERIC0_3 0x747c
+#define HDMI0_GENERIC0_4 0x7480
+#define HDMI0_GENERIC0_5 0x7484
+#define HDMI0_GENERIC0_6 0x7488
+#define HDMI0_GENERIC1_HDR 0x748c
+#define HDMI0_GENERIC1_0 0x7490
+#define HDMI0_GENERIC1_1 0x7494
+#define HDMI0_GENERIC1_2 0x7498
+#define HDMI0_GENERIC1_3 0x749c
+#define HDMI0_GENERIC1_4 0x74a0
+#define HDMI0_GENERIC1_5 0x74a4
+#define HDMI0_GENERIC1_6 0x74a8
+#define HDMI0_ACR_32_0 0x74ac
+# define HDMI0_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
+#define HDMI0_ACR_32_1 0x74b0
+# define HDMI0_ACR_N_32(x) (((x) & 0xfffff) << 0)
+#define HDMI0_ACR_44_0 0x74b4
+# define HDMI0_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
+#define HDMI0_ACR_44_1 0x74b8
+# define HDMI0_ACR_N_44(x) (((x) & 0xfffff) << 0)
+#define HDMI0_ACR_48_0 0x74bc
+# define HDMI0_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
+#define HDMI0_ACR_48_1 0x74c0
+# define HDMI0_ACR_N_48(x) (((x) & 0xfffff) << 0)
+#define HDMI0_ACR_STATUS_0 0x74c4
+#define HDMI0_ACR_STATUS_1 0x74c8
+#define HDMI0_AUDIO_INFO0 0x74cc
+# define HDMI0_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define HDMI0_AUDIO_INFO_CC(x) (((x) & 7) << 8)
+#define HDMI0_AUDIO_INFO1 0x74d0
+# define HDMI0_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
+# define HDMI0_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
+# define HDMI0_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
+# define HDMI0_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
+#define HDMI0_60958_0 0x74d4
+# define HDMI0_60958_CS_A(x) (((x) & 1) << 0)
+# define HDMI0_60958_CS_B(x) (((x) & 1) << 1)
+# define HDMI0_60958_CS_C(x) (((x) & 1) << 2)
+# define HDMI0_60958_CS_D(x) (((x) & 3) << 3)
+# define HDMI0_60958_CS_MODE(x) (((x) & 3) << 6)
+# define HDMI0_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
+# define HDMI0_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
+# define HDMI0_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
+# define HDMI0_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
+#define HDMI0_60958_1 0x74d8
+# define HDMI0_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
+# define HDMI0_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
+# define HDMI0_60958_CS_VALID_L(x) (((x) & 1) << 16)
+# define HDMI0_60958_CS_VALID_R(x) (((x) & 1) << 18)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
+#define HDMI0_ACR_PACKET_CONTROL 0x74dc
+# define HDMI0_ACR_SEND (1 << 0)
+# define HDMI0_ACR_CONT (1 << 1)
+# define HDMI0_ACR_SELECT(x) (((x) & 3) << 4)
+# define HDMI0_ACR_HW 0
+# define HDMI0_ACR_32 1
+# define HDMI0_ACR_44 2
+# define HDMI0_ACR_48 3
+# define HDMI0_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
+# define HDMI0_ACR_AUTO_SEND (1 << 12)
+#define HDMI0_RAMP_CONTROL0 0x74e0
+# define HDMI0_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
+#define HDMI0_RAMP_CONTROL1 0x74e4
+# define HDMI0_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
+#define HDMI0_RAMP_CONTROL2 0x74e8
+# define HDMI0_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
+#define HDMI0_RAMP_CONTROL3 0x74ec
+# define HDMI0_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
+/* HDMI0_60958_2 is r7xx only */
+#define HDMI0_60958_2 0x74f0
+# define HDMI0_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
+# define HDMI0_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
+/* r6xx only; second instance starts at 0x7700 */
+#define HDMI1_CONTROL 0x7700
+#define HDMI1_STATUS 0x7704
+#define HDMI1_AUDIO_PACKET_CONTROL 0x7708
+/* DCE3; second instance starts at 0x7800 NOT 0x7700 */
+#define DCE3_HDMI1_CONTROL 0x7800
+#define DCE3_HDMI1_STATUS 0x7804
+#define DCE3_HDMI1_AUDIO_PACKET_CONTROL 0x7808
+/* DCE3.2 (for interrupts) */
+#define AFMT_STATUS 0x7600
+# define AFMT_AUDIO_ENABLE (1 << 4)
+# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
+#define AFMT_AUDIO_PACKET_CONTROL 0x7604
+# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
+# define AFMT_AUDIO_TEST_EN (1 << 12)
+# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
+# define AFMT_60958_CS_UPDATE (1 << 26)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
+# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
+/* DCE3.2 second instance starts at 0x7800 */
+#define HDMI_OFFSET0 (0x7400 - 0x7400)
+#define HDMI_OFFSET1 (0x7800 - 0x7400)
+
/*
* PM4
*/
diff --git a/drivers/gpu/drm/radeon/rs600d.h b/drivers/gpu/drm/radeon/rs600d.h
index a27c13a..f1f8941 100644
--- a/drivers/gpu/drm/radeon/rs600d.h
+++ b/drivers/gpu/drm/radeon/rs600d.h
@@ -485,6 +485,20 @@
#define S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) & 0x1) << 16)
#define G_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) >> 16) & 0x1)
#define C_007D18_DC_HOT_PLUG_DETECT2_INT_EN 0xFFFEFFFF
+#define R_007404_HDMI0_STATUS 0x007404
+#define S_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x) & 0x1) << 28)
+#define G_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x) >> 28) & 0x1)
+#define C_007404_HDMI0_AZ_FORMAT_WTRIG 0xEFFFFFFF
+#define S_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x) & 0x1) << 29)
+#define G_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x) >> 29) & 0x1)
+#define C_007404_HDMI0_AZ_FORMAT_WTRIG_INT 0xDFFFFFFF
+#define R_007408_HDMI0_AUDIO_PACKET_CONTROL 0x007408
+#define S_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x) & 0x1) << 28)
+#define G_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x) >> 28) & 0x1)
+#define C_007408_HDMI0_AZ_FORMAT_WTRIG_MASK 0xEFFFFFFF
+#define S_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x) & 0x1) << 29)
+#define G_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x) >> 29) & 0x1)
+#define C_007408_HDMI0_AZ_FORMAT_WTRIG_ACK 0xDFFFFFFF
/* MC registers */
#define R_000000_MC_STATUS 0x000000
diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
index 79fa588..9c549f7 100644
--- a/drivers/gpu/drm/radeon/rv770d.h
+++ b/drivers/gpu/drm/radeon/rv770d.h
@@ -353,6 +353,197 @@
#define SRBM_STATUS 0x0E50
+/* DCE 3.2 HDMI */
+#define HDMI_CONTROL 0x7400
+# define HDMI_KEEPOUT_MODE (1 << 0)
+# define HDMI_PACKET_GEN_VERSION (1 << 4) /* 0 = r6xx compat */
+# define HDMI_ERROR_ACK (1 << 8)
+# define HDMI_ERROR_MASK (1 << 9)
+#define HDMI_STATUS 0x7404
+# define HDMI_ACTIVE_AVMUTE (1 << 0)
+# define HDMI_AUDIO_PACKET_ERROR (1 << 16)
+# define HDMI_VBI_PACKET_ERROR (1 << 20)
+#define HDMI_AUDIO_PACKET_CONTROL 0x7408
+# define HDMI_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
+# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
+#define HDMI_ACR_PACKET_CONTROL 0x740c
+# define HDMI_ACR_SEND (1 << 0)
+# define HDMI_ACR_CONT (1 << 1)
+# define HDMI_ACR_SELECT(x) (((x) & 3) << 4)
+# define HDMI_ACR_HW 0
+# define HDMI_ACR_32 1
+# define HDMI_ACR_44 2
+# define HDMI_ACR_48 3
+# define HDMI_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
+# define HDMI_ACR_AUTO_SEND (1 << 12)
+#define HDMI_VBI_PACKET_CONTROL 0x7410
+# define HDMI_NULL_SEND (1 << 0)
+# define HDMI_GC_SEND (1 << 4)
+# define HDMI_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
+#define HDMI_INFOFRAME_CONTROL0 0x7414
+# define HDMI_AVI_INFO_SEND (1 << 0)
+# define HDMI_AVI_INFO_CONT (1 << 1)
+# define HDMI_AUDIO_INFO_SEND (1 << 4)
+# define HDMI_AUDIO_INFO_CONT (1 << 5)
+# define HDMI_MPEG_INFO_SEND (1 << 8)
+# define HDMI_MPEG_INFO_CONT (1 << 9)
+#define HDMI_INFOFRAME_CONTROL1 0x7418
+# define HDMI_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
+# define HDMI_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
+# define HDMI_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
+#define HDMI_GENERIC_PACKET_CONTROL 0x741c
+# define HDMI_GENERIC0_SEND (1 << 0)
+# define HDMI_GENERIC0_CONT (1 << 1)
+# define HDMI_GENERIC1_SEND (1 << 4)
+# define HDMI_GENERIC1_CONT (1 << 5)
+# define HDMI_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
+# define HDMI_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
+#define HDMI_GC 0x7428
+# define HDMI_GC_AVMUTE (1 << 0)
+#define AFMT_AUDIO_PACKET_CONTROL2 0x742c
+# define AFMT_AUDIO_LAYOUT_OVRD (1 << 0)
+# define AFMT_AUDIO_LAYOUT_SELECT (1 << 1)
+# define AFMT_60958_CS_SOURCE (1 << 4)
+# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x) & 0xff) << 8)
+# define AFMT_DP_AUDIO_STREAM_ID(x) (((x) & 0xff) << 16)
+#define AFMT_AVI_INFO0 0x7454
+# define AFMT_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_AVI_INFO_S(x) (((x) & 3) << 8)
+# define AFMT_AVI_INFO_B(x) (((x) & 3) << 10)
+# define AFMT_AVI_INFO_A(x) (((x) & 1) << 12)
+# define AFMT_AVI_INFO_Y(x) (((x) & 3) << 13)
+# define AFMT_AVI_INFO_Y_RGB 0
+# define AFMT_AVI_INFO_Y_YCBCR422 1
+# define AFMT_AVI_INFO_Y_YCBCR444 2
+# define AFMT_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
+# define AFMT_AVI_INFO_R(x) (((x) & 0xf) << 16)
+# define AFMT_AVI_INFO_M(x) (((x) & 0x3) << 20)
+# define AFMT_AVI_INFO_C(x) (((x) & 0x3) << 22)
+# define AFMT_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
+# define AFMT_AVI_INFO_SC(x) (((x) & 0x3) << 24)
+# define AFMT_AVI_INFO_Q(x) (((x) & 0x3) << 26)
+# define AFMT_AVI_INFO_EC(x) (((x) & 0x3) << 28)
+# define AFMT_AVI_INFO_ITC(x) (((x) & 0x1) << 31)
+# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
+#define AFMT_AVI_INFO1 0x7458
+# define AFMT_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
+# define AFMT_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
+# define AFMT_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
+#define AFMT_AVI_INFO2 0x745c
+# define AFMT_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
+# define AFMT_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
+#define AFMT_AVI_INFO3 0x7460
+# define AFMT_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
+# define AFMT_AVI_INFO_VERSION(x) (((x) & 3) << 24)
+#define AFMT_MPEG_INFO0 0x7464
+# define AFMT_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
+# define AFMT_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
+# define AFMT_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
+#define AFMT_MPEG_INFO1 0x7468
+# define AFMT_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
+# define AFMT_MPEG_INFO_MF(x) (((x) & 3) << 8)
+# define AFMT_MPEG_INFO_FR(x) (((x) & 1) << 12)
+#define AFMT_GENERIC0_HDR 0x746c
+#define AFMT_GENERIC0_0 0x7470
+#define AFMT_GENERIC0_1 0x7474
+#define AFMT_GENERIC0_2 0x7478
+#define AFMT_GENERIC0_3 0x747c
+#define AFMT_GENERIC0_4 0x7480
+#define AFMT_GENERIC0_5 0x7484
+#define AFMT_GENERIC0_6 0x7488
+#define AFMT_GENERIC1_HDR 0x748c
+#define AFMT_GENERIC1_0 0x7490
+#define AFMT_GENERIC1_1 0x7494
+#define AFMT_GENERIC1_2 0x7498
+#define AFMT_GENERIC1_3 0x749c
+#define AFMT_GENERIC1_4 0x74a0
+#define AFMT_GENERIC1_5 0x74a4
+#define AFMT_GENERIC1_6 0x74a8
+#define HDMI_ACR_32_0 0x74ac
+# define HDMI_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_32_1 0x74b0
+# define HDMI_ACR_N_32(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_44_0 0x74b4
+# define HDMI_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_44_1 0x74b8
+# define HDMI_ACR_N_44(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_48_0 0x74bc
+# define HDMI_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
+#define HDMI_ACR_48_1 0x74c0
+# define HDMI_ACR_N_48(x) (((x) & 0xfffff) << 0)
+#define HDMI_ACR_STATUS_0 0x74c4
+#define HDMI_ACR_STATUS_1 0x74c8
+#define AFMT_AUDIO_INFO0 0x74cc
+# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
+# define AFMT_AUDIO_INFO_CC(x) (((x) & 7) << 8)
+# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x) & 0xff) << 16)
+#define AFMT_AUDIO_INFO1 0x74d0
+# define AFMT_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
+# define AFMT_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
+# define AFMT_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
+# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
+#define AFMT_60958_0 0x74d4
+# define AFMT_60958_CS_A(x) (((x) & 1) << 0)
+# define AFMT_60958_CS_B(x) (((x) & 1) << 1)
+# define AFMT_60958_CS_C(x) (((x) & 1) << 2)
+# define AFMT_60958_CS_D(x) (((x) & 3) << 3)
+# define AFMT_60958_CS_MODE(x) (((x) & 3) << 6)
+# define AFMT_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
+# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
+# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
+# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
+# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
+#define AFMT_60958_1 0x74d8
+# define AFMT_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
+# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
+# define AFMT_60958_CS_VALID_L(x) (((x) & 1) << 16)
+# define AFMT_60958_CS_VALID_R(x) (((x) & 1) << 18)
+# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
+#define AFMT_AUDIO_CRC_CONTROL 0x74dc
+# define AFMT_AUDIO_CRC_EN (1 << 0)
+#define AFMT_RAMP_CONTROL0 0x74e0
+# define AFMT_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
+# define AFMT_RAMP_DATA_SIGN (1 << 31)
+#define AFMT_RAMP_CONTROL1 0x74e4
+# define AFMT_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
+# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x) & 0xff) << 24)
+#define AFMT_RAMP_CONTROL2 0x74e8
+# define AFMT_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
+#define AFMT_RAMP_CONTROL3 0x74ec
+# define AFMT_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
+#define AFMT_60958_2 0x74f0
+# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
+# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
+# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
+# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
+# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
+# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
+#define AFMT_STATUS 0x7600
+# define AFMT_AUDIO_ENABLE (1 << 4)
+# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
+#define AFMT_AUDIO_PACKET_CONTROL 0x7604
+# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
+# define AFMT_AUDIO_TEST_EN (1 << 12)
+# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
+# define AFMT_60958_CS_UPDATE (1 << 26)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
+# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
+# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
+# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
+#define AFMT_VBI_PACKET_CONTROL 0x7608
+# define AFMT_GENERIC0_UPDATE (1 << 2)
+#define AFMT_INFOFRAME_CONTROL0 0x760c
+# define AFMT_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - hmdi regs */
+# define AFMT_AUDIO_INFO_UPDATE (1 << 7)
+# define AFMT_MPEG_INFO_UPDATE (1 << 10)
+#define AFMT_GENERIC0_7 0x7610
+/* second instance starts at 0x7800 */
+#define HDMI_OFFSET0 (0x7400 - 0x7400)
+#define HDMI_OFFSET1 (0x7800 - 0x7400)
+
#define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
#define D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914
#define D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114
--
1.7.7.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-28 17:19 [PATCH] drm/radeon/kms: add register definitions for audio alexdeucher
@ 2012-03-29 7:53 ` Christian König
2012-03-29 8:16 ` Rafał Miłecki
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2012-03-29 7:53 UTC (permalink / raw)
To: "Miłecki, Rafał"; +Cc: Alex Deucher, dri-devel
Oh YES! Finally!
Just as a side note before it went unnoticed: That is the official HDMI
register documentation from R6xx - NI hardware, not just something
reverse engineered! @Rafał and the rest of the community: We hoped that
you could stick with it and cleanup the current implementation with this
new informations.
Well, it's auto-generated, so you can't do much wrong, but anyway:
Reviewed by: Christian König <christian.koenig@amd.com>
On 28.03.2012 19:19, alexdeucher@gmail.com wrote:
> From: Alex Deucher<alexander.deucher@amd.com>
>
> This adds register definitions for HDMI/DP audio on
> DCE2/3/4/5 hardware.
>
> Signed-off-by: Alex Deucher<alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/radeon/evergreend.h | 220 ++++++++++++++++++++++++++++++++
> drivers/gpu/drm/radeon/r600d.h | 236 +++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/radeon/rs600d.h | 14 ++
> drivers/gpu/drm/radeon/rv770d.h | 191 ++++++++++++++++++++++++++++
> 4 files changed, 661 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
> index eb5708c..3955d98 100644
> --- a/drivers/gpu/drm/radeon/evergreend.h
> +++ b/drivers/gpu/drm/radeon/evergreend.h
> @@ -112,6 +112,226 @@
> #define CP_SEM_INCOMPLETE_TIMER_CNTL 0x85C8
> #define CP_DEBUG 0xC1FC
>
> +/* Audio clocks */
> +#define DCCG_AUDIO_DTO_SOURCE 0x05ac
> +# define DCCG_AUDIO_DTO0_SOURCE_SEL(x) ((x)<< 0) /* crtc0 - crtc5 */
> +# define DCCG_AUDIO_DTO_SEL (1<< 4) /* 0=dto0 1=dto1 */
> +
> +#define DCCG_AUDIO_DTO0_PHASE 0x05b0
> +#define DCCG_AUDIO_DTO0_MODULE 0x05b4
> +#define DCCG_AUDIO_DTO0_LOAD 0x05b8
> +#define DCCG_AUDIO_DTO0_CNTL 0x05bc
> +
> +#define DCCG_AUDIO_DTO1_PHASE 0x05c0
> +#define DCCG_AUDIO_DTO1_MODULE 0x05c4
> +#define DCCG_AUDIO_DTO1_LOAD 0x05c8
> +#define DCCG_AUDIO_DTO1_CNTL 0x05cc
> +
> +/* DCE 4.0 AFMT */
> +#define HDMI_CONTROL 0x7030
> +# define HDMI_KEEPOUT_MODE (1<< 0)
> +# define HDMI_PACKET_GEN_VERSION (1<< 4) /* 0 = r6xx compat */
> +# define HDMI_ERROR_ACK (1<< 8)
> +# define HDMI_ERROR_MASK (1<< 9)
> +# define HDMI_DEEP_COLOR_ENABLE (1<< 24)
> +# define HDMI_DEEP_COLOR_DEPTH (((x)& 3)<< 28)
> +# define HDMI_24BIT_DEEP_COLOR 0
> +# define HDMI_30BIT_DEEP_COLOR 1
> +# define HDMI_36BIT_DEEP_COLOR 2
> +#define HDMI_STATUS 0x7034
> +# define HDMI_ACTIVE_AVMUTE (1<< 0)
> +# define HDMI_AUDIO_PACKET_ERROR (1<< 16)
> +# define HDMI_VBI_PACKET_ERROR (1<< 20)
> +#define HDMI_AUDIO_PACKET_CONTROL 0x7038
> +# define HDMI_AUDIO_DELAY_EN(x) (((x)& 3)<< 4)
> +# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x)& 0x1f)<< 16)
> +#define HDMI_ACR_PACKET_CONTROL 0x703c
> +# define HDMI_ACR_SEND (1<< 0)
> +# define HDMI_ACR_CONT (1<< 1)
> +# define HDMI_ACR_SELECT(x) (((x)& 3)<< 4)
> +# define HDMI_ACR_HW 0
> +# define HDMI_ACR_32 1
> +# define HDMI_ACR_44 2
> +# define HDMI_ACR_48 3
> +# define HDMI_ACR_SOURCE (1<< 8) /* 0 - hw; 1 - cts value */
> +# define HDMI_ACR_AUTO_SEND (1<< 12)
> +# define HDMI_ACR_N_MULTIPLE(x) (((x)& 7)<< 16)
> +# define HDMI_ACR_X1 1
> +# define HDMI_ACR_X2 2
> +# define HDMI_ACR_X4 4
> +# define HDMI_ACR_AUDIO_PRIORITY (1<< 31)
> +#define HDMI_VBI_PACKET_CONTROL 0x7040
> +# define HDMI_NULL_SEND (1<< 0)
> +# define HDMI_GC_SEND (1<< 4)
> +# define HDMI_GC_CONT (1<< 5) /* 0 - once; 1 - every frame */
> +#define HDMI_INFOFRAME_CONTROL0 0x7044
> +# define HDMI_AVI_INFO_SEND (1<< 0)
> +# define HDMI_AVI_INFO_CONT (1<< 1)
> +# define HDMI_AUDIO_INFO_SEND (1<< 4)
> +# define HDMI_AUDIO_INFO_CONT (1<< 5)
> +# define HDMI_MPEG_INFO_SEND (1<< 8)
> +# define HDMI_MPEG_INFO_CONT (1<< 9)
> +#define HDMI_INFOFRAME_CONTROL1 0x7048
> +# define HDMI_AVI_INFO_LINE(x) (((x)& 0x3f)<< 0)
> +# define HDMI_AUDIO_INFO_LINE(x) (((x)& 0x3f)<< 8)
> +# define HDMI_MPEG_INFO_LINE(x) (((x)& 0x3f)<< 16)
> +#define HDMI_GENERIC_PACKET_CONTROL 0x704c
> +# define HDMI_GENERIC0_SEND (1<< 0)
> +# define HDMI_GENERIC0_CONT (1<< 1)
> +# define HDMI_GENERIC1_SEND (1<< 4)
> +# define HDMI_GENERIC1_CONT (1<< 5)
> +# define HDMI_GENERIC0_LINE(x) (((x)& 0x3f)<< 16)
> +# define HDMI_GENERIC1_LINE(x) (((x)& 0x3f)<< 24)
> +#define HDMI_GC 0x7058
> +# define HDMI_GC_AVMUTE (1<< 0)
> +# define HDMI_GC_AVMUTE_CONT (1<< 2)
> +#define AFMT_AUDIO_PACKET_CONTROL2 0x705c
> +# define AFMT_AUDIO_LAYOUT_OVRD (1<< 0)
> +# define AFMT_AUDIO_LAYOUT_SELECT (1<< 1)
> +# define AFMT_60958_CS_SOURCE (1<< 4)
> +# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x)& 0xff)<< 8)
> +# define AFMT_DP_AUDIO_STREAM_ID(x) (((x)& 0xff)<< 16)
> +#define AFMT_AVI_INFO0 0x7084
> +# define AFMT_AVI_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_AVI_INFO_S(x) (((x)& 3)<< 8)
> +# define AFMT_AVI_INFO_B(x) (((x)& 3)<< 10)
> +# define AFMT_AVI_INFO_A(x) (((x)& 1)<< 12)
> +# define AFMT_AVI_INFO_Y(x) (((x)& 3)<< 13)
> +# define AFMT_AVI_INFO_Y_RGB 0
> +# define AFMT_AVI_INFO_Y_YCBCR422 1
> +# define AFMT_AVI_INFO_Y_YCBCR444 2
> +# define AFMT_AVI_INFO_Y_A_B_S(x) (((x)& 0xff)<< 8)
> +# define AFMT_AVI_INFO_R(x) (((x)& 0xf)<< 16)
> +# define AFMT_AVI_INFO_M(x) (((x)& 0x3)<< 20)
> +# define AFMT_AVI_INFO_C(x) (((x)& 0x3)<< 22)
> +# define AFMT_AVI_INFO_C_M_R(x) (((x)& 0xff)<< 16)
> +# define AFMT_AVI_INFO_SC(x) (((x)& 0x3)<< 24)
> +# define AFMT_AVI_INFO_Q(x) (((x)& 0x3)<< 26)
> +# define AFMT_AVI_INFO_EC(x) (((x)& 0x3)<< 28)
> +# define AFMT_AVI_INFO_ITC(x) (((x)& 0x1)<< 31)
> +# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x)& 0xff)<< 24)
> +#define AFMT_AVI_INFO1 0x7088
> +# define AFMT_AVI_INFO_VIC(x) (((x)& 0x7f)<< 0) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_PR(x) (((x)& 0xf)<< 8) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_CN(x) (((x)& 0x3)<< 12)
> +# define AFMT_AVI_INFO_YQ(x) (((x)& 0x3)<< 14)
> +# define AFMT_AVI_INFO_TOP(x) (((x)& 0xffff)<< 16)
> +#define AFMT_AVI_INFO2 0x708c
> +# define AFMT_AVI_INFO_BOTTOM(x) (((x)& 0xffff)<< 0)
> +# define AFMT_AVI_INFO_LEFT(x) (((x)& 0xffff)<< 16)
> +#define AFMT_AVI_INFO3 0x7090
> +# define AFMT_AVI_INFO_RIGHT(x) (((x)& 0xffff)<< 0)
> +# define AFMT_AVI_INFO_VERSION(x) (((x)& 3)<< 24)
> +#define AFMT_MPEG_INFO0 0x7094
> +# define AFMT_MPEG_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_MPEG_INFO_MB0(x) (((x)& 0xff)<< 8)
> +# define AFMT_MPEG_INFO_MB1(x) (((x)& 0xff)<< 16)
> +# define AFMT_MPEG_INFO_MB2(x) (((x)& 0xff)<< 24)
> +#define AFMT_MPEG_INFO1 0x7098
> +# define AFMT_MPEG_INFO_MB3(x) (((x)& 0xff)<< 0)
> +# define AFMT_MPEG_INFO_MF(x) (((x)& 3)<< 8)
> +# define AFMT_MPEG_INFO_FR(x) (((x)& 1)<< 12)
> +#define AFMT_GENERIC0_HDR 0x709c
> +#define AFMT_GENERIC0_0 0x70a0
> +#define AFMT_GENERIC0_1 0x70a4
> +#define AFMT_GENERIC0_2 0x70a8
> +#define AFMT_GENERIC0_3 0x70ac
> +#define AFMT_GENERIC0_4 0x70b0
> +#define AFMT_GENERIC0_5 0x70b4
> +#define AFMT_GENERIC0_6 0x70b8
> +#define AFMT_GENERIC1_HDR 0x70bc
> +#define AFMT_GENERIC1_0 0x70c0
> +#define AFMT_GENERIC1_1 0x70c4
> +#define AFMT_GENERIC1_2 0x70c8
> +#define AFMT_GENERIC1_3 0x70cc
> +#define AFMT_GENERIC1_4 0x70d0
> +#define AFMT_GENERIC1_5 0x70d4
> +#define AFMT_GENERIC1_6 0x70d8
> +#define HDMI_ACR_32_0 0x70dc
> +# define HDMI_ACR_CTS_32(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_32_1 0x70e0
> +# define HDMI_ACR_N_32(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_44_0 0x70e4
> +# define HDMI_ACR_CTS_44(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_44_1 0x70e8
> +# define HDMI_ACR_N_44(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_48_0 0x70ec
> +# define HDMI_ACR_CTS_48(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_48_1 0x70f0
> +# define HDMI_ACR_N_48(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_STATUS_0 0x70f4
> +#define HDMI_ACR_STATUS_1 0x70f8
> +#define AFMT_AUDIO_INFO0 0x70fc
> +# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_AUDIO_INFO_CC(x) (((x)& 7)<< 8)
> +# define AFMT_AUDIO_INFO_CT(x) (((x)& 0xf)<< 11)
> +# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x)& 0xff)<< 16)
> +# define AFMT_AUDIO_INFO_CXT(x) (((x)& 0x1f)<< 24)
> +#define AFMT_AUDIO_INFO1 0x7100
> +# define AFMT_AUDIO_INFO_CA(x) (((x)& 0xff)<< 0)
> +# define AFMT_AUDIO_INFO_LSV(x) (((x)& 0xf)<< 11)
> +# define AFMT_AUDIO_INFO_DM_INH(x) (((x)& 1)<< 15)
> +# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x)& 0xff)<< 8)
> +# define AFMT_AUDIO_INFO_LFEBPL(x) (((x)& 3)<< 16)
> +#define AFMT_60958_0 0x7104
> +# define AFMT_60958_CS_A(x) (((x)& 1)<< 0)
> +# define AFMT_60958_CS_B(x) (((x)& 1)<< 1)
> +# define AFMT_60958_CS_C(x) (((x)& 1)<< 2)
> +# define AFMT_60958_CS_D(x) (((x)& 3)<< 3)
> +# define AFMT_60958_CS_MODE(x) (((x)& 3)<< 6)
> +# define AFMT_60958_CS_CATEGORY_CODE(x) (((x)& 0xff)<< 8)
> +# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x)& 0xf)<< 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x)& 0xf)<< 20)
> +# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 24)
> +# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x)& 3)<< 28)
> +#define AFMT_60958_1 0x7108
> +# define AFMT_60958_CS_WORD_LENGTH(x) (((x)& 0xf)<< 0)
> +# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 4)
> +# define AFMT_60958_CS_VALID_L(x) (((x)& 1)<< 16)
> +# define AFMT_60958_CS_VALID_R(x) (((x)& 1)<< 18)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x)& 0xf)<< 20)
> +#define AFMT_AUDIO_CRC_CONTROL 0x710c
> +# define AFMT_AUDIO_CRC_EN (1<< 0)
> +#define AFMT_RAMP_CONTROL0 0x7110
> +# define AFMT_RAMP_MAX_COUNT(x) (((x)& 0xffffff)<< 0)
> +# define AFMT_RAMP_DATA_SIGN (1<< 31)
> +#define AFMT_RAMP_CONTROL1 0x7114
> +# define AFMT_RAMP_MIN_COUNT(x) (((x)& 0xffffff)<< 0)
> +# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x)& 0xff)<< 24)
> +#define AFMT_RAMP_CONTROL2 0x7118
> +# define AFMT_RAMP_INC_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define AFMT_RAMP_CONTROL3 0x711c
> +# define AFMT_RAMP_DEC_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define AFMT_60958_2 0x7120
> +# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x)& 0xf)<< 0)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x)& 0xf)<< 4)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x)& 0xf)<< 8)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x)& 0xf)<< 12)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x)& 0xf)<< 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x)& 0xf)<< 20)
> +#define AFMT_STATUS 0x7128
> +# define AFMT_AUDIO_ENABLE (1<< 4)
> +# define AFMT_AUDIO_HBR_ENABLE (1<< 8)
> +# define AFMT_AZ_FORMAT_WTRIG (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1<< 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x712c
> +# define AFMT_AUDIO_SAMPLE_SEND (1<< 0)
> +# define AFMT_RESET_FIFO_WHEN_AUDIO_DIS (1<< 11) /* set to 1 */
> +# define AFMT_AUDIO_TEST_EN (1<< 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1<< 24)
> +# define AFMT_60958_CS_UPDATE (1<< 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1<< 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1<< 30)
> +#define AFMT_VBI_PACKET_CONTROL 0x7130
> +# define AFMT_GENERIC0_UPDATE (1<< 2)
> +#define AFMT_INFOFRAME_CONTROL0 0x7134
> +# define AFMT_AUDIO_INFO_SOURCE (1<< 6) /* 0 - sound block; 1 - afmt regs */
> +# define AFMT_AUDIO_INFO_UPDATE (1<< 7)
> +# define AFMT_MPEG_INFO_UPDATE (1<< 10)
> +#define AFMT_GENERIC0_7 0x7138
>
> #define GC_USER_SHADER_PIPE_CONFIG 0x8954
> #define INACTIVE_QD_PIPES(x) ((x)<< 8)
> diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
> index 3568a2e..7f0c223 100644
> --- a/drivers/gpu/drm/radeon/r600d.h
> +++ b/drivers/gpu/drm/radeon/r600d.h
> @@ -816,6 +816,242 @@
> # define TARGET_LINK_SPEED_MASK (0xf<< 0)
> # define SELECTABLE_DEEMPHASIS (1<< 6)
>
> +/* Audio clocks */
> +#define DCCG_AUDIO_DTO0_PHASE 0x0514
> +#define DCCG_AUDIO_DTO0_MODULE 0x0518
> +#define DCCG_AUDIO_DTO0_LOAD 0x051c
> +# define DTO_LOAD (1<< 31)
> +#define DCCG_AUDIO_DTO0_CNTL 0x0520
> +
> +#define DCCG_AUDIO_DTO1_PHASE 0x0524
> +#define DCCG_AUDIO_DTO1_MODULE 0x0528
> +#define DCCG_AUDIO_DTO1_LOAD 0x052c
> +#define DCCG_AUDIO_DTO1_CNTL 0x0530
> +
> +#define DCCG_AUDIO_DTO_SELECT 0x0534
> +
> +/* digital blocks */
> +#define TMDSA_CNTL 0x7880
> +# define TMDSA_HDMI_EN (1<< 2)
> +#define LVTMA_CNTL 0x7a80
> +# define LVTMA_HDMI_EN (1<< 2)
> +#define DDIA_CNTL 0x7200
> +# define DDIA_HDMI_EN (1<< 2)
> +#define DIG0_CNTL 0x75a0
> +# define DIG_MODE(x) (((x)& 7)<< 8)
> +# define DIG_MODE_DP 0
> +# define DIG_MODE_LVDS 1
> +# define DIG_MODE_TMDS_DVI 2
> +# define DIG_MODE_TMDS_HDMI 3
> +# define DIG_MODE_SDVO 4
> +#define DIG1_CNTL 0x79a0
> +
> +/* rs6xx/rs740 and r6xx share the same HDMI blocks, however, rs6xx has only one
> + * instance of the blocks while r6xx has 2. DCE 3.0 cards are slightly
> + * different due to the new DIG blocks, but also have 2 instances.
> + * DCE 3.0 HDMI blocks are part of each DIG encoder.
> + */
> +
> +/* rs6xx/rs740/r6xx/dce3 */
> +#define HDMI0_CONTROL 0x7400
> +/* rs6xx/rs740/r6xx */
> +# define HDMI0_ENABLE (1<< 0)
> +# define HDMI0_STREAM(x) (((x)& 3)<< 2)
> +# define HDMI0_STREAM_TMDSA 0
> +# define HDMI0_STREAM_LVTMA 1
> +# define HDMI0_STREAM_DVOA 2
> +# define HDMI0_STREAM_DDIA 3
> +/* rs6xx/r6xx/dce3 */
> +# define HDMI0_ERROR_ACK (1<< 8)
> +# define HDMI0_ERROR_MASK (1<< 9)
> +#define HDMI0_STATUS 0x7404
> +# define HDMI0_ACTIVE_AVMUTE (1<< 0)
> +# define HDMI0_AUDIO_ENABLE (1<< 4)
> +# define HDMI0_AZ_FORMAT_WTRIG (1<< 28)
> +# define HDMI0_AZ_FORMAT_WTRIG_INT (1<< 29)
> +#define HDMI0_AUDIO_PACKET_CONTROL 0x7408
> +# define HDMI0_AUDIO_SAMPLE_SEND (1<< 0)
> +# define HDMI0_AUDIO_DELAY_EN(x) (((x)& 3)<< 4)
> +# define HDMI0_AUDIO_SEND_MAX_PACKETS (1<< 8)
> +# define HDMI0_AUDIO_TEST_EN (1<< 12)
> +# define HDMI0_AUDIO_PACKETS_PER_LINE(x) (((x)& 0x1f)<< 16)
> +# define HDMI0_AUDIO_CHANNEL_SWAP (1<< 24)
> +# define HDMI0_60958_CS_UPDATE (1<< 26)
> +# define HDMI0_AZ_FORMAT_WTRIG_MASK (1<< 28)
> +# define HDMI0_AZ_FORMAT_WTRIG_ACK (1<< 29)
> +#define HDMI0_AUDIO_CRC_CONTROL 0x740c
> +# define HDMI0_AUDIO_CRC_EN (1<< 0)
> +#define HDMI0_VBI_PACKET_CONTROL 0x7410
> +# define HDMI0_NULL_SEND (1<< 0)
> +# define HDMI0_GC_SEND (1<< 4)
> +# define HDMI0_GC_CONT (1<< 5) /* 0 - once; 1 - every frame */
> +#define HDMI0_INFOFRAME_CONTROL0 0x7414
> +# define HDMI0_AVI_INFO_SEND (1<< 0)
> +# define HDMI0_AVI_INFO_CONT (1<< 1)
> +# define HDMI0_AUDIO_INFO_SEND (1<< 4)
> +# define HDMI0_AUDIO_INFO_CONT (1<< 5)
> +# define HDMI0_AUDIO_INFO_SOURCE (1<< 6) /* 0 - sound block; 1 - hmdi regs */
> +# define HDMI0_AUDIO_INFO_UPDATE (1<< 7)
> +# define HDMI0_MPEG_INFO_SEND (1<< 8)
> +# define HDMI0_MPEG_INFO_CONT (1<< 9)
> +# define HDMI0_MPEG_INFO_UPDATE (1<< 10)
> +#define HDMI0_INFOFRAME_CONTROL1 0x7418
> +# define HDMI0_AVI_INFO_LINE(x) (((x)& 0x3f)<< 0)
> +# define HDMI0_AUDIO_INFO_LINE(x) (((x)& 0x3f)<< 8)
> +# define HDMI0_MPEG_INFO_LINE(x) (((x)& 0x3f)<< 16)
> +#define HDMI0_GENERIC_PACKET_CONTROL 0x741c
> +# define HDMI0_GENERIC0_SEND (1<< 0)
> +# define HDMI0_GENERIC0_CONT (1<< 1)
> +# define HDMI0_GENERIC0_UPDATE (1<< 2)
> +# define HDMI0_GENERIC1_SEND (1<< 4)
> +# define HDMI0_GENERIC1_CONT (1<< 5)
> +# define HDMI0_GENERIC0_LINE(x) (((x)& 0x3f)<< 16)
> +# define HDMI0_GENERIC1_LINE(x) (((x)& 0x3f)<< 24)
> +#define HDMI0_GC 0x7428
> +# define HDMI0_GC_AVMUTE (1<< 0)
> +#define HDMI0_AVI_INFO0 0x7454
> +# define HDMI0_AVI_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define HDMI0_AVI_INFO_S(x) (((x)& 3)<< 8)
> +# define HDMI0_AVI_INFO_B(x) (((x)& 3)<< 10)
> +# define HDMI0_AVI_INFO_A(x) (((x)& 1)<< 12)
> +# define HDMI0_AVI_INFO_Y(x) (((x)& 3)<< 13)
> +# define HDMI0_AVI_INFO_Y_RGB 0
> +# define HDMI0_AVI_INFO_Y_YCBCR422 1
> +# define HDMI0_AVI_INFO_Y_YCBCR444 2
> +# define HDMI0_AVI_INFO_Y_A_B_S(x) (((x)& 0xff)<< 8)
> +# define HDMI0_AVI_INFO_R(x) (((x)& 0xf)<< 16)
> +# define HDMI0_AVI_INFO_M(x) (((x)& 0x3)<< 20)
> +# define HDMI0_AVI_INFO_C(x) (((x)& 0x3)<< 22)
> +# define HDMI0_AVI_INFO_C_M_R(x) (((x)& 0xff)<< 16)
> +# define HDMI0_AVI_INFO_SC(x) (((x)& 0x3)<< 24)
> +# define HDMI0_AVI_INFO_ITC_EC_Q_SC(x) (((x)& 0xff)<< 24)
> +#define HDMI0_AVI_INFO1 0x7458
> +# define HDMI0_AVI_INFO_VIC(x) (((x)& 0x7f)<< 0) /* don't use avi infoframe v1 */
> +# define HDMI0_AVI_INFO_PR(x) (((x)& 0xf)<< 8) /* don't use avi infoframe v1 */
> +# define HDMI0_AVI_INFO_TOP(x) (((x)& 0xffff)<< 16)
> +#define HDMI0_AVI_INFO2 0x745c
> +# define HDMI0_AVI_INFO_BOTTOM(x) (((x)& 0xffff)<< 0)
> +# define HDMI0_AVI_INFO_LEFT(x) (((x)& 0xffff)<< 16)
> +#define HDMI0_AVI_INFO3 0x7460
> +# define HDMI0_AVI_INFO_RIGHT(x) (((x)& 0xffff)<< 0)
> +# define HDMI0_AVI_INFO_VERSION(x) (((x)& 3)<< 24)
> +#define HDMI0_MPEG_INFO0 0x7464
> +# define HDMI0_MPEG_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define HDMI0_MPEG_INFO_MB0(x) (((x)& 0xff)<< 8)
> +# define HDMI0_MPEG_INFO_MB1(x) (((x)& 0xff)<< 16)
> +# define HDMI0_MPEG_INFO_MB2(x) (((x)& 0xff)<< 24)
> +#define HDMI0_MPEG_INFO1 0x7468
> +# define HDMI0_MPEG_INFO_MB3(x) (((x)& 0xff)<< 0)
> +# define HDMI0_MPEG_INFO_MF(x) (((x)& 3)<< 8)
> +# define HDMI0_MPEG_INFO_FR(x) (((x)& 1)<< 12)
> +#define HDMI0_GENERIC0_HDR 0x746c
> +#define HDMI0_GENERIC0_0 0x7470
> +#define HDMI0_GENERIC0_1 0x7474
> +#define HDMI0_GENERIC0_2 0x7478
> +#define HDMI0_GENERIC0_3 0x747c
> +#define HDMI0_GENERIC0_4 0x7480
> +#define HDMI0_GENERIC0_5 0x7484
> +#define HDMI0_GENERIC0_6 0x7488
> +#define HDMI0_GENERIC1_HDR 0x748c
> +#define HDMI0_GENERIC1_0 0x7490
> +#define HDMI0_GENERIC1_1 0x7494
> +#define HDMI0_GENERIC1_2 0x7498
> +#define HDMI0_GENERIC1_3 0x749c
> +#define HDMI0_GENERIC1_4 0x74a0
> +#define HDMI0_GENERIC1_5 0x74a4
> +#define HDMI0_GENERIC1_6 0x74a8
> +#define HDMI0_ACR_32_0 0x74ac
> +# define HDMI0_ACR_CTS_32(x) (((x)& 0xfffff)<< 12)
> +#define HDMI0_ACR_32_1 0x74b0
> +# define HDMI0_ACR_N_32(x) (((x)& 0xfffff)<< 0)
> +#define HDMI0_ACR_44_0 0x74b4
> +# define HDMI0_ACR_CTS_44(x) (((x)& 0xfffff)<< 12)
> +#define HDMI0_ACR_44_1 0x74b8
> +# define HDMI0_ACR_N_44(x) (((x)& 0xfffff)<< 0)
> +#define HDMI0_ACR_48_0 0x74bc
> +# define HDMI0_ACR_CTS_48(x) (((x)& 0xfffff)<< 12)
> +#define HDMI0_ACR_48_1 0x74c0
> +# define HDMI0_ACR_N_48(x) (((x)& 0xfffff)<< 0)
> +#define HDMI0_ACR_STATUS_0 0x74c4
> +#define HDMI0_ACR_STATUS_1 0x74c8
> +#define HDMI0_AUDIO_INFO0 0x74cc
> +# define HDMI0_AUDIO_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define HDMI0_AUDIO_INFO_CC(x) (((x)& 7)<< 8)
> +#define HDMI0_AUDIO_INFO1 0x74d0
> +# define HDMI0_AUDIO_INFO_CA(x) (((x)& 0xff)<< 0)
> +# define HDMI0_AUDIO_INFO_LSV(x) (((x)& 0xf)<< 11)
> +# define HDMI0_AUDIO_INFO_DM_INH(x) (((x)& 1)<< 15)
> +# define HDMI0_AUDIO_INFO_DM_INH_LSV(x) (((x)& 0xff)<< 8)
> +#define HDMI0_60958_0 0x74d4
> +# define HDMI0_60958_CS_A(x) (((x)& 1)<< 0)
> +# define HDMI0_60958_CS_B(x) (((x)& 1)<< 1)
> +# define HDMI0_60958_CS_C(x) (((x)& 1)<< 2)
> +# define HDMI0_60958_CS_D(x) (((x)& 3)<< 3)
> +# define HDMI0_60958_CS_MODE(x) (((x)& 3)<< 6)
> +# define HDMI0_60958_CS_CATEGORY_CODE(x) (((x)& 0xff)<< 8)
> +# define HDMI0_60958_CS_SOURCE_NUMBER(x) (((x)& 0xf)<< 16)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_L(x) (((x)& 0xf)<< 20)
> +# define HDMI0_60958_CS_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 24)
> +# define HDMI0_60958_CS_CLOCK_ACCURACY(x) (((x)& 3)<< 28)
> +#define HDMI0_60958_1 0x74d8
> +# define HDMI0_60958_CS_WORD_LENGTH(x) (((x)& 0xf)<< 0)
> +# define HDMI0_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 4)
> +# define HDMI0_60958_CS_VALID_L(x) (((x)& 1)<< 16)
> +# define HDMI0_60958_CS_VALID_R(x) (((x)& 1)<< 18)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_R(x) (((x)& 0xf)<< 20)
> +#define HDMI0_ACR_PACKET_CONTROL 0x74dc
> +# define HDMI0_ACR_SEND (1<< 0)
> +# define HDMI0_ACR_CONT (1<< 1)
> +# define HDMI0_ACR_SELECT(x) (((x)& 3)<< 4)
> +# define HDMI0_ACR_HW 0
> +# define HDMI0_ACR_32 1
> +# define HDMI0_ACR_44 2
> +# define HDMI0_ACR_48 3
> +# define HDMI0_ACR_SOURCE (1<< 8) /* 0 - hw; 1 - cts value */
> +# define HDMI0_ACR_AUTO_SEND (1<< 12)
> +#define HDMI0_RAMP_CONTROL0 0x74e0
> +# define HDMI0_RAMP_MAX_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define HDMI0_RAMP_CONTROL1 0x74e4
> +# define HDMI0_RAMP_MIN_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define HDMI0_RAMP_CONTROL2 0x74e8
> +# define HDMI0_RAMP_INC_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define HDMI0_RAMP_CONTROL3 0x74ec
> +# define HDMI0_RAMP_DEC_COUNT(x) (((x)& 0xffffff)<< 0)
> +/* HDMI0_60958_2 is r7xx only */
> +#define HDMI0_60958_2 0x74f0
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_2(x) (((x)& 0xf)<< 0)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_3(x) (((x)& 0xf)<< 4)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_4(x) (((x)& 0xf)<< 8)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_5(x) (((x)& 0xf)<< 12)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_6(x) (((x)& 0xf)<< 16)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_7(x) (((x)& 0xf)<< 20)
> +/* r6xx only; second instance starts at 0x7700 */
> +#define HDMI1_CONTROL 0x7700
> +#define HDMI1_STATUS 0x7704
> +#define HDMI1_AUDIO_PACKET_CONTROL 0x7708
> +/* DCE3; second instance starts at 0x7800 NOT 0x7700 */
> +#define DCE3_HDMI1_CONTROL 0x7800
> +#define DCE3_HDMI1_STATUS 0x7804
> +#define DCE3_HDMI1_AUDIO_PACKET_CONTROL 0x7808
> +/* DCE3.2 (for interrupts) */
> +#define AFMT_STATUS 0x7600
> +# define AFMT_AUDIO_ENABLE (1<< 4)
> +# define AFMT_AZ_FORMAT_WTRIG (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1<< 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x7604
> +# define AFMT_AUDIO_SAMPLE_SEND (1<< 0)
> +# define AFMT_AUDIO_TEST_EN (1<< 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1<< 24)
> +# define AFMT_60958_CS_UPDATE (1<< 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1<< 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1<< 30)
> +/* DCE3.2 second instance starts at 0x7800 */
> +#define HDMI_OFFSET0 (0x7400 - 0x7400)
> +#define HDMI_OFFSET1 (0x7800 - 0x7400)
> +
> /*
> * PM4
> */
> diff --git a/drivers/gpu/drm/radeon/rs600d.h b/drivers/gpu/drm/radeon/rs600d.h
> index a27c13a..f1f8941 100644
> --- a/drivers/gpu/drm/radeon/rs600d.h
> +++ b/drivers/gpu/drm/radeon/rs600d.h
> @@ -485,6 +485,20 @@
> #define S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x)& 0x1)<< 16)
> #define G_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x)>> 16)& 0x1)
> #define C_007D18_DC_HOT_PLUG_DETECT2_INT_EN 0xFFFEFFFF
> +#define R_007404_HDMI0_STATUS 0x007404
> +#define S_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x)& 0x1)<< 28)
> +#define G_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x)>> 28)& 0x1)
> +#define C_007404_HDMI0_AZ_FORMAT_WTRIG 0xEFFFFFFF
> +#define S_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x)& 0x1)<< 29)
> +#define G_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x)>> 29)& 0x1)
> +#define C_007404_HDMI0_AZ_FORMAT_WTRIG_INT 0xDFFFFFFF
> +#define R_007408_HDMI0_AUDIO_PACKET_CONTROL 0x007408
> +#define S_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x)& 0x1)<< 28)
> +#define G_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x)>> 28)& 0x1)
> +#define C_007408_HDMI0_AZ_FORMAT_WTRIG_MASK 0xEFFFFFFF
> +#define S_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x)& 0x1)<< 29)
> +#define G_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x)>> 29)& 0x1)
> +#define C_007408_HDMI0_AZ_FORMAT_WTRIG_ACK 0xDFFFFFFF
>
> /* MC registers */
> #define R_000000_MC_STATUS 0x000000
> diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
> index 79fa588..9c549f7 100644
> --- a/drivers/gpu/drm/radeon/rv770d.h
> +++ b/drivers/gpu/drm/radeon/rv770d.h
> @@ -353,6 +353,197 @@
>
> #define SRBM_STATUS 0x0E50
>
> +/* DCE 3.2 HDMI */
> +#define HDMI_CONTROL 0x7400
> +# define HDMI_KEEPOUT_MODE (1<< 0)
> +# define HDMI_PACKET_GEN_VERSION (1<< 4) /* 0 = r6xx compat */
> +# define HDMI_ERROR_ACK (1<< 8)
> +# define HDMI_ERROR_MASK (1<< 9)
> +#define HDMI_STATUS 0x7404
> +# define HDMI_ACTIVE_AVMUTE (1<< 0)
> +# define HDMI_AUDIO_PACKET_ERROR (1<< 16)
> +# define HDMI_VBI_PACKET_ERROR (1<< 20)
> +#define HDMI_AUDIO_PACKET_CONTROL 0x7408
> +# define HDMI_AUDIO_DELAY_EN(x) (((x)& 3)<< 4)
> +# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x)& 0x1f)<< 16)
> +#define HDMI_ACR_PACKET_CONTROL 0x740c
> +# define HDMI_ACR_SEND (1<< 0)
> +# define HDMI_ACR_CONT (1<< 1)
> +# define HDMI_ACR_SELECT(x) (((x)& 3)<< 4)
> +# define HDMI_ACR_HW 0
> +# define HDMI_ACR_32 1
> +# define HDMI_ACR_44 2
> +# define HDMI_ACR_48 3
> +# define HDMI_ACR_SOURCE (1<< 8) /* 0 - hw; 1 - cts value */
> +# define HDMI_ACR_AUTO_SEND (1<< 12)
> +#define HDMI_VBI_PACKET_CONTROL 0x7410
> +# define HDMI_NULL_SEND (1<< 0)
> +# define HDMI_GC_SEND (1<< 4)
> +# define HDMI_GC_CONT (1<< 5) /* 0 - once; 1 - every frame */
> +#define HDMI_INFOFRAME_CONTROL0 0x7414
> +# define HDMI_AVI_INFO_SEND (1<< 0)
> +# define HDMI_AVI_INFO_CONT (1<< 1)
> +# define HDMI_AUDIO_INFO_SEND (1<< 4)
> +# define HDMI_AUDIO_INFO_CONT (1<< 5)
> +# define HDMI_MPEG_INFO_SEND (1<< 8)
> +# define HDMI_MPEG_INFO_CONT (1<< 9)
> +#define HDMI_INFOFRAME_CONTROL1 0x7418
> +# define HDMI_AVI_INFO_LINE(x) (((x)& 0x3f)<< 0)
> +# define HDMI_AUDIO_INFO_LINE(x) (((x)& 0x3f)<< 8)
> +# define HDMI_MPEG_INFO_LINE(x) (((x)& 0x3f)<< 16)
> +#define HDMI_GENERIC_PACKET_CONTROL 0x741c
> +# define HDMI_GENERIC0_SEND (1<< 0)
> +# define HDMI_GENERIC0_CONT (1<< 1)
> +# define HDMI_GENERIC1_SEND (1<< 4)
> +# define HDMI_GENERIC1_CONT (1<< 5)
> +# define HDMI_GENERIC0_LINE(x) (((x)& 0x3f)<< 16)
> +# define HDMI_GENERIC1_LINE(x) (((x)& 0x3f)<< 24)
> +#define HDMI_GC 0x7428
> +# define HDMI_GC_AVMUTE (1<< 0)
> +#define AFMT_AUDIO_PACKET_CONTROL2 0x742c
> +# define AFMT_AUDIO_LAYOUT_OVRD (1<< 0)
> +# define AFMT_AUDIO_LAYOUT_SELECT (1<< 1)
> +# define AFMT_60958_CS_SOURCE (1<< 4)
> +# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x)& 0xff)<< 8)
> +# define AFMT_DP_AUDIO_STREAM_ID(x) (((x)& 0xff)<< 16)
> +#define AFMT_AVI_INFO0 0x7454
> +# define AFMT_AVI_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_AVI_INFO_S(x) (((x)& 3)<< 8)
> +# define AFMT_AVI_INFO_B(x) (((x)& 3)<< 10)
> +# define AFMT_AVI_INFO_A(x) (((x)& 1)<< 12)
> +# define AFMT_AVI_INFO_Y(x) (((x)& 3)<< 13)
> +# define AFMT_AVI_INFO_Y_RGB 0
> +# define AFMT_AVI_INFO_Y_YCBCR422 1
> +# define AFMT_AVI_INFO_Y_YCBCR444 2
> +# define AFMT_AVI_INFO_Y_A_B_S(x) (((x)& 0xff)<< 8)
> +# define AFMT_AVI_INFO_R(x) (((x)& 0xf)<< 16)
> +# define AFMT_AVI_INFO_M(x) (((x)& 0x3)<< 20)
> +# define AFMT_AVI_INFO_C(x) (((x)& 0x3)<< 22)
> +# define AFMT_AVI_INFO_C_M_R(x) (((x)& 0xff)<< 16)
> +# define AFMT_AVI_INFO_SC(x) (((x)& 0x3)<< 24)
> +# define AFMT_AVI_INFO_Q(x) (((x)& 0x3)<< 26)
> +# define AFMT_AVI_INFO_EC(x) (((x)& 0x3)<< 28)
> +# define AFMT_AVI_INFO_ITC(x) (((x)& 0x1)<< 31)
> +# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x)& 0xff)<< 24)
> +#define AFMT_AVI_INFO1 0x7458
> +# define AFMT_AVI_INFO_VIC(x) (((x)& 0x7f)<< 0) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_PR(x) (((x)& 0xf)<< 8) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_TOP(x) (((x)& 0xffff)<< 16)
> +#define AFMT_AVI_INFO2 0x745c
> +# define AFMT_AVI_INFO_BOTTOM(x) (((x)& 0xffff)<< 0)
> +# define AFMT_AVI_INFO_LEFT(x) (((x)& 0xffff)<< 16)
> +#define AFMT_AVI_INFO3 0x7460
> +# define AFMT_AVI_INFO_RIGHT(x) (((x)& 0xffff)<< 0)
> +# define AFMT_AVI_INFO_VERSION(x) (((x)& 3)<< 24)
> +#define AFMT_MPEG_INFO0 0x7464
> +# define AFMT_MPEG_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_MPEG_INFO_MB0(x) (((x)& 0xff)<< 8)
> +# define AFMT_MPEG_INFO_MB1(x) (((x)& 0xff)<< 16)
> +# define AFMT_MPEG_INFO_MB2(x) (((x)& 0xff)<< 24)
> +#define AFMT_MPEG_INFO1 0x7468
> +# define AFMT_MPEG_INFO_MB3(x) (((x)& 0xff)<< 0)
> +# define AFMT_MPEG_INFO_MF(x) (((x)& 3)<< 8)
> +# define AFMT_MPEG_INFO_FR(x) (((x)& 1)<< 12)
> +#define AFMT_GENERIC0_HDR 0x746c
> +#define AFMT_GENERIC0_0 0x7470
> +#define AFMT_GENERIC0_1 0x7474
> +#define AFMT_GENERIC0_2 0x7478
> +#define AFMT_GENERIC0_3 0x747c
> +#define AFMT_GENERIC0_4 0x7480
> +#define AFMT_GENERIC0_5 0x7484
> +#define AFMT_GENERIC0_6 0x7488
> +#define AFMT_GENERIC1_HDR 0x748c
> +#define AFMT_GENERIC1_0 0x7490
> +#define AFMT_GENERIC1_1 0x7494
> +#define AFMT_GENERIC1_2 0x7498
> +#define AFMT_GENERIC1_3 0x749c
> +#define AFMT_GENERIC1_4 0x74a0
> +#define AFMT_GENERIC1_5 0x74a4
> +#define AFMT_GENERIC1_6 0x74a8
> +#define HDMI_ACR_32_0 0x74ac
> +# define HDMI_ACR_CTS_32(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_32_1 0x74b0
> +# define HDMI_ACR_N_32(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_44_0 0x74b4
> +# define HDMI_ACR_CTS_44(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_44_1 0x74b8
> +# define HDMI_ACR_N_44(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_48_0 0x74bc
> +# define HDMI_ACR_CTS_48(x) (((x)& 0xfffff)<< 12)
> +#define HDMI_ACR_48_1 0x74c0
> +# define HDMI_ACR_N_48(x) (((x)& 0xfffff)<< 0)
> +#define HDMI_ACR_STATUS_0 0x74c4
> +#define HDMI_ACR_STATUS_1 0x74c8
> +#define AFMT_AUDIO_INFO0 0x74cc
> +# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x)& 0xff)<< 0)
> +# define AFMT_AUDIO_INFO_CC(x) (((x)& 7)<< 8)
> +# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x)& 0xff)<< 16)
> +#define AFMT_AUDIO_INFO1 0x74d0
> +# define AFMT_AUDIO_INFO_CA(x) (((x)& 0xff)<< 0)
> +# define AFMT_AUDIO_INFO_LSV(x) (((x)& 0xf)<< 11)
> +# define AFMT_AUDIO_INFO_DM_INH(x) (((x)& 1)<< 15)
> +# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x)& 0xff)<< 8)
> +#define AFMT_60958_0 0x74d4
> +# define AFMT_60958_CS_A(x) (((x)& 1)<< 0)
> +# define AFMT_60958_CS_B(x) (((x)& 1)<< 1)
> +# define AFMT_60958_CS_C(x) (((x)& 1)<< 2)
> +# define AFMT_60958_CS_D(x) (((x)& 3)<< 3)
> +# define AFMT_60958_CS_MODE(x) (((x)& 3)<< 6)
> +# define AFMT_60958_CS_CATEGORY_CODE(x) (((x)& 0xff)<< 8)
> +# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x)& 0xf)<< 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x)& 0xf)<< 20)
> +# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 24)
> +# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x)& 3)<< 28)
> +#define AFMT_60958_1 0x74d8
> +# define AFMT_60958_CS_WORD_LENGTH(x) (((x)& 0xf)<< 0)
> +# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x)& 0xf)<< 4)
> +# define AFMT_60958_CS_VALID_L(x) (((x)& 1)<< 16)
> +# define AFMT_60958_CS_VALID_R(x) (((x)& 1)<< 18)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x)& 0xf)<< 20)
> +#define AFMT_AUDIO_CRC_CONTROL 0x74dc
> +# define AFMT_AUDIO_CRC_EN (1<< 0)
> +#define AFMT_RAMP_CONTROL0 0x74e0
> +# define AFMT_RAMP_MAX_COUNT(x) (((x)& 0xffffff)<< 0)
> +# define AFMT_RAMP_DATA_SIGN (1<< 31)
> +#define AFMT_RAMP_CONTROL1 0x74e4
> +# define AFMT_RAMP_MIN_COUNT(x) (((x)& 0xffffff)<< 0)
> +# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x)& 0xff)<< 24)
> +#define AFMT_RAMP_CONTROL2 0x74e8
> +# define AFMT_RAMP_INC_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define AFMT_RAMP_CONTROL3 0x74ec
> +# define AFMT_RAMP_DEC_COUNT(x) (((x)& 0xffffff)<< 0)
> +#define AFMT_60958_2 0x74f0
> +# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x)& 0xf)<< 0)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x)& 0xf)<< 4)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x)& 0xf)<< 8)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x)& 0xf)<< 12)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x)& 0xf)<< 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x)& 0xf)<< 20)
> +#define AFMT_STATUS 0x7600
> +# define AFMT_AUDIO_ENABLE (1<< 4)
> +# define AFMT_AZ_FORMAT_WTRIG (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1<< 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x7604
> +# define AFMT_AUDIO_SAMPLE_SEND (1<< 0)
> +# define AFMT_AUDIO_TEST_EN (1<< 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1<< 24)
> +# define AFMT_60958_CS_UPDATE (1<< 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1<< 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1<< 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1<< 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1<< 30)
> +#define AFMT_VBI_PACKET_CONTROL 0x7608
> +# define AFMT_GENERIC0_UPDATE (1<< 2)
> +#define AFMT_INFOFRAME_CONTROL0 0x760c
> +# define AFMT_AUDIO_INFO_SOURCE (1<< 6) /* 0 - sound block; 1 - hmdi regs */
> +# define AFMT_AUDIO_INFO_UPDATE (1<< 7)
> +# define AFMT_MPEG_INFO_UPDATE (1<< 10)
> +#define AFMT_GENERIC0_7 0x7610
> +/* second instance starts at 0x7800 */
> +#define HDMI_OFFSET0 (0x7400 - 0x7400)
> +#define HDMI_OFFSET1 (0x7800 - 0x7400)
> +
> #define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
> #define D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914
> #define D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-28 17:19 [PATCH] drm/radeon/kms: add register definitions for audio alexdeucher
2012-03-29 7:53 ` Christian König
@ 2012-03-29 8:16 ` Rafał Miłecki
2012-03-29 11:54 ` Deucher, Alexander
2012-03-30 9:09 ` Rafał Miłecki
2012-03-30 13:07 ` Alex Deucher
3 siblings, 1 reply; 7+ messages in thread
From: Rafał Miłecki @ 2012-03-29 8:16 UTC (permalink / raw)
To: alexdeucher; +Cc: Alex Deucher, dri-devel
2012/3/28 <alexdeucher@gmail.com>:
> +/* digital blocks */
> +#define TMDSA_CNTL 0x7880
> +# define TMDSA_HDMI_EN (1 << 2)
> +#define LVTMA_CNTL 0x7a80
> +# define LVTMA_HDMI_EN (1 << 2)
> +#define DDIA_CNTL 0x7200
> +# define DDIA_HDMI_EN (1 << 2)
> +#define DIG0_CNTL 0x75a0
> +# define DIG_MODE(x) (((x) & 7) << 8)
> +# define DIG_MODE_DP 0
> +# define DIG_MODE_LVDS 1
> +# define DIG_MODE_TMDS_DVI 2
> +# define DIG_MODE_TMDS_HDMI 3
> +# define DIG_MODE_SDVO 4
> +#define DIG1_CNTL 0x79a0
TMDSA and LVTMA seem to be duplicated. Not sure if you want to have
them in 2 places?
--
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-29 8:16 ` Rafał Miłecki
@ 2012-03-29 11:54 ` Deucher, Alexander
0 siblings, 0 replies; 7+ messages in thread
From: Deucher, Alexander @ 2012-03-29 11:54 UTC (permalink / raw)
To: Rafał Miłecki, alexdeucher; +Cc: dri-devel
> -----Original Message-----
> From: Rafał Miłecki [mailto:zajec5@gmail.com]
> Sent: Thursday, March 29, 2012 4:17 AM
> To: alexdeucher@gmail.com
> Cc: airlied@gmail.com; dri-devel@lists.freedesktop.org; Deucher, Alexander
> Subject: Re: [PATCH] drm/radeon/kms: add register definitions for audio
>
> 2012/3/28 <alexdeucher@gmail.com>:
> > +/* digital blocks */
> > +#define TMDSA_CNTL 0x7880
> > +# define TMDSA_HDMI_EN (1 << 2)
> > +#define LVTMA_CNTL 0x7a80
> > +# define LVTMA_HDMI_EN (1 << 2)
> > +#define DDIA_CNTL 0x7200
> > +# define DDIA_HDMI_EN (1 << 2)
> > +#define DIG0_CNTL 0x75a0
> > +# define DIG_MODE(x) (((x) & 7) << 8)
> > +# define DIG_MODE_DP 0
> > +# define DIG_MODE_LVDS 1
> > +# define DIG_MODE_TMDS_DVI 2
> > +# define DIG_MODE_TMDS_HDMI 3
> > +# define DIG_MODE_SDVO 4
> > +#define DIG1_CNTL 0x79a0
>
> TMDSA and LVTMA seem to be duplicated. Not sure if you want to have
> them in 2 places?
It's fine. It depends where the headers are used.
Alex
>
> --
> Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-28 17:19 [PATCH] drm/radeon/kms: add register definitions for audio alexdeucher
2012-03-29 7:53 ` Christian König
2012-03-29 8:16 ` Rafał Miłecki
@ 2012-03-30 9:09 ` Rafał Miłecki
2012-03-30 9:11 ` Rafał Miłecki
2012-03-30 13:07 ` Alex Deucher
3 siblings, 1 reply; 7+ messages in thread
From: Rafał Miłecki @ 2012-03-30 9:09 UTC (permalink / raw)
To: alexdeucher; +Cc: Alex Deucher, dri-devel
2012/3/28 <alexdeucher@gmail.com>:
> From: Alex Deucher <alexander.deucher@amd.com>
>
> This adds register definitions for HDMI/DP audio on
> DCE2/3/4/5 hardware.
OK, AICS we got PLL regs and HDMI blocks regs. May I ask about audio block regs?
Did you just missed them or do they need passing some additional review first?
I mean:
#define EVERGREEN_AUDIO_ENABLE 0x5e78
#define EVERGREEN_AUDIO_VENDOR_ID 0x5ec0
#define EVERGREEN_AUDIO_RATE_BPS_CHANNEL 0x5f00
#define EVERGREEN_AUDIO_PLAYING 0x5f04
#define EVERGREEN_AUDIO_CAT_STATUS 0x5f18
/* Audio general */
#define R600_AUDIO_ENABLE 0x7300
#define R600_AUDIO_TIMING 0x7344
/* Audio params */
#define R600_AUDIO_VENDOR_ID 0x7380
#define R600_AUDIO_REVISION_ID 0x7384
(...)
--
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-30 9:09 ` Rafał Miłecki
@ 2012-03-30 9:11 ` Rafał Miłecki
0 siblings, 0 replies; 7+ messages in thread
From: Rafał Miłecki @ 2012-03-30 9:11 UTC (permalink / raw)
To: alexdeucher; +Cc: Alex Deucher, dri-devel
W dniu 30 marca 2012 11:09 użytkownik Rafał Miłecki <zajec5@gmail.com> napisał:
> 2012/3/28 <alexdeucher@gmail.com>:
>> From: Alex Deucher <alexander.deucher@amd.com>
>>
>> This adds register definitions for HDMI/DP audio on
>> DCE2/3/4/5 hardware.
>
> OK, AICS we got PLL regs and HDMI blocks regs. May I ask about audio block regs?
>
> Did you just missed them or do they need passing some additional review first?
We probably can live without them just fine (quite easy ones to guess)
but I wanted to ask anyway, while we're still around HDMI.
--
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] drm/radeon/kms: add register definitions for audio
2012-03-28 17:19 [PATCH] drm/radeon/kms: add register definitions for audio alexdeucher
` (2 preceding siblings ...)
2012-03-30 9:09 ` Rafał Miłecki
@ 2012-03-30 13:07 ` Alex Deucher
3 siblings, 0 replies; 7+ messages in thread
From: Alex Deucher @ 2012-03-30 13:07 UTC (permalink / raw)
To: airlied, dri-devel, zajec5
For those that are interested, I pulled together most of my original
hdmi code if someone wants to finish it up:
http://people.freedesktop.org/~agd5f/0001-WIP-port-of-hdmi-dp-audio-code-to-newer-kernel.patch
It needs:
- helper functions for calculating the infoframes and checksums
- helper functions for looking up the ACR cts and n values
- removal of the old hdmi code
- general cleanup
Unfortunately, I'm not going to have time to finish it in the near
future. It should be a pretty easy task if anyone wants to take a
crack at it.
Alex
On Wed, Mar 28, 2012 at 1:19 PM, <alexdeucher@gmail.com> wrote:
> From: Alex Deucher <alexander.deucher@amd.com>
>
> This adds register definitions for HDMI/DP audio on
> DCE2/3/4/5 hardware.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/radeon/evergreend.h | 220 ++++++++++++++++++++++++++++++++
> drivers/gpu/drm/radeon/r600d.h | 236 +++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/radeon/rs600d.h | 14 ++
> drivers/gpu/drm/radeon/rv770d.h | 191 ++++++++++++++++++++++++++++
> 4 files changed, 661 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/evergreend.h b/drivers/gpu/drm/radeon/evergreend.h
> index eb5708c..3955d98 100644
> --- a/drivers/gpu/drm/radeon/evergreend.h
> +++ b/drivers/gpu/drm/radeon/evergreend.h
> @@ -112,6 +112,226 @@
> #define CP_SEM_INCOMPLETE_TIMER_CNTL 0x85C8
> #define CP_DEBUG 0xC1FC
>
> +/* Audio clocks */
> +#define DCCG_AUDIO_DTO_SOURCE 0x05ac
> +# define DCCG_AUDIO_DTO0_SOURCE_SEL(x) ((x) << 0) /* crtc0 - crtc5 */
> +# define DCCG_AUDIO_DTO_SEL (1 << 4) /* 0=dto0 1=dto1 */
> +
> +#define DCCG_AUDIO_DTO0_PHASE 0x05b0
> +#define DCCG_AUDIO_DTO0_MODULE 0x05b4
> +#define DCCG_AUDIO_DTO0_LOAD 0x05b8
> +#define DCCG_AUDIO_DTO0_CNTL 0x05bc
> +
> +#define DCCG_AUDIO_DTO1_PHASE 0x05c0
> +#define DCCG_AUDIO_DTO1_MODULE 0x05c4
> +#define DCCG_AUDIO_DTO1_LOAD 0x05c8
> +#define DCCG_AUDIO_DTO1_CNTL 0x05cc
> +
> +/* DCE 4.0 AFMT */
> +#define HDMI_CONTROL 0x7030
> +# define HDMI_KEEPOUT_MODE (1 << 0)
> +# define HDMI_PACKET_GEN_VERSION (1 << 4) /* 0 = r6xx compat */
> +# define HDMI_ERROR_ACK (1 << 8)
> +# define HDMI_ERROR_MASK (1 << 9)
> +# define HDMI_DEEP_COLOR_ENABLE (1 << 24)
> +# define HDMI_DEEP_COLOR_DEPTH (((x) & 3) << 28)
> +# define HDMI_24BIT_DEEP_COLOR 0
> +# define HDMI_30BIT_DEEP_COLOR 1
> +# define HDMI_36BIT_DEEP_COLOR 2
> +#define HDMI_STATUS 0x7034
> +# define HDMI_ACTIVE_AVMUTE (1 << 0)
> +# define HDMI_AUDIO_PACKET_ERROR (1 << 16)
> +# define HDMI_VBI_PACKET_ERROR (1 << 20)
> +#define HDMI_AUDIO_PACKET_CONTROL 0x7038
> +# define HDMI_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
> +# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
> +#define HDMI_ACR_PACKET_CONTROL 0x703c
> +# define HDMI_ACR_SEND (1 << 0)
> +# define HDMI_ACR_CONT (1 << 1)
> +# define HDMI_ACR_SELECT(x) (((x) & 3) << 4)
> +# define HDMI_ACR_HW 0
> +# define HDMI_ACR_32 1
> +# define HDMI_ACR_44 2
> +# define HDMI_ACR_48 3
> +# define HDMI_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
> +# define HDMI_ACR_AUTO_SEND (1 << 12)
> +# define HDMI_ACR_N_MULTIPLE(x) (((x) & 7) << 16)
> +# define HDMI_ACR_X1 1
> +# define HDMI_ACR_X2 2
> +# define HDMI_ACR_X4 4
> +# define HDMI_ACR_AUDIO_PRIORITY (1 << 31)
> +#define HDMI_VBI_PACKET_CONTROL 0x7040
> +# define HDMI_NULL_SEND (1 << 0)
> +# define HDMI_GC_SEND (1 << 4)
> +# define HDMI_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
> +#define HDMI_INFOFRAME_CONTROL0 0x7044
> +# define HDMI_AVI_INFO_SEND (1 << 0)
> +# define HDMI_AVI_INFO_CONT (1 << 1)
> +# define HDMI_AUDIO_INFO_SEND (1 << 4)
> +# define HDMI_AUDIO_INFO_CONT (1 << 5)
> +# define HDMI_MPEG_INFO_SEND (1 << 8)
> +# define HDMI_MPEG_INFO_CONT (1 << 9)
> +#define HDMI_INFOFRAME_CONTROL1 0x7048
> +# define HDMI_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
> +# define HDMI_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
> +# define HDMI_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
> +#define HDMI_GENERIC_PACKET_CONTROL 0x704c
> +# define HDMI_GENERIC0_SEND (1 << 0)
> +# define HDMI_GENERIC0_CONT (1 << 1)
> +# define HDMI_GENERIC1_SEND (1 << 4)
> +# define HDMI_GENERIC1_CONT (1 << 5)
> +# define HDMI_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
> +# define HDMI_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
> +#define HDMI_GC 0x7058
> +# define HDMI_GC_AVMUTE (1 << 0)
> +# define HDMI_GC_AVMUTE_CONT (1 << 2)
> +#define AFMT_AUDIO_PACKET_CONTROL2 0x705c
> +# define AFMT_AUDIO_LAYOUT_OVRD (1 << 0)
> +# define AFMT_AUDIO_LAYOUT_SELECT (1 << 1)
> +# define AFMT_60958_CS_SOURCE (1 << 4)
> +# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x) & 0xff) << 8)
> +# define AFMT_DP_AUDIO_STREAM_ID(x) (((x) & 0xff) << 16)
> +#define AFMT_AVI_INFO0 0x7084
> +# define AFMT_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_AVI_INFO_S(x) (((x) & 3) << 8)
> +# define AFMT_AVI_INFO_B(x) (((x) & 3) << 10)
> +# define AFMT_AVI_INFO_A(x) (((x) & 1) << 12)
> +# define AFMT_AVI_INFO_Y(x) (((x) & 3) << 13)
> +# define AFMT_AVI_INFO_Y_RGB 0
> +# define AFMT_AVI_INFO_Y_YCBCR422 1
> +# define AFMT_AVI_INFO_Y_YCBCR444 2
> +# define AFMT_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
> +# define AFMT_AVI_INFO_R(x) (((x) & 0xf) << 16)
> +# define AFMT_AVI_INFO_M(x) (((x) & 0x3) << 20)
> +# define AFMT_AVI_INFO_C(x) (((x) & 0x3) << 22)
> +# define AFMT_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
> +# define AFMT_AVI_INFO_SC(x) (((x) & 0x3) << 24)
> +# define AFMT_AVI_INFO_Q(x) (((x) & 0x3) << 26)
> +# define AFMT_AVI_INFO_EC(x) (((x) & 0x3) << 28)
> +# define AFMT_AVI_INFO_ITC(x) (((x) & 0x1) << 31)
> +# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
> +#define AFMT_AVI_INFO1 0x7088
> +# define AFMT_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_CN(x) (((x) & 0x3) << 12)
> +# define AFMT_AVI_INFO_YQ(x) (((x) & 0x3) << 14)
> +# define AFMT_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
> +#define AFMT_AVI_INFO2 0x708c
> +# define AFMT_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
> +# define AFMT_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
> +#define AFMT_AVI_INFO3 0x7090
> +# define AFMT_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
> +# define AFMT_AVI_INFO_VERSION(x) (((x) & 3) << 24)
> +#define AFMT_MPEG_INFO0 0x7094
> +# define AFMT_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
> +# define AFMT_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
> +# define AFMT_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
> +#define AFMT_MPEG_INFO1 0x7098
> +# define AFMT_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
> +# define AFMT_MPEG_INFO_MF(x) (((x) & 3) << 8)
> +# define AFMT_MPEG_INFO_FR(x) (((x) & 1) << 12)
> +#define AFMT_GENERIC0_HDR 0x709c
> +#define AFMT_GENERIC0_0 0x70a0
> +#define AFMT_GENERIC0_1 0x70a4
> +#define AFMT_GENERIC0_2 0x70a8
> +#define AFMT_GENERIC0_3 0x70ac
> +#define AFMT_GENERIC0_4 0x70b0
> +#define AFMT_GENERIC0_5 0x70b4
> +#define AFMT_GENERIC0_6 0x70b8
> +#define AFMT_GENERIC1_HDR 0x70bc
> +#define AFMT_GENERIC1_0 0x70c0
> +#define AFMT_GENERIC1_1 0x70c4
> +#define AFMT_GENERIC1_2 0x70c8
> +#define AFMT_GENERIC1_3 0x70cc
> +#define AFMT_GENERIC1_4 0x70d0
> +#define AFMT_GENERIC1_5 0x70d4
> +#define AFMT_GENERIC1_6 0x70d8
> +#define HDMI_ACR_32_0 0x70dc
> +# define HDMI_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_32_1 0x70e0
> +# define HDMI_ACR_N_32(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_44_0 0x70e4
> +# define HDMI_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_44_1 0x70e8
> +# define HDMI_ACR_N_44(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_48_0 0x70ec
> +# define HDMI_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_48_1 0x70f0
> +# define HDMI_ACR_N_48(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_STATUS_0 0x70f4
> +#define HDMI_ACR_STATUS_1 0x70f8
> +#define AFMT_AUDIO_INFO0 0x70fc
> +# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_AUDIO_INFO_CC(x) (((x) & 7) << 8)
> +# define AFMT_AUDIO_INFO_CT(x) (((x) & 0xf) << 11)
> +# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x) & 0xff) << 16)
> +# define AFMT_AUDIO_INFO_CXT(x) (((x) & 0x1f) << 24)
> +#define AFMT_AUDIO_INFO1 0x7100
> +# define AFMT_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
> +# define AFMT_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
> +# define AFMT_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
> +# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
> +# define AFMT_AUDIO_INFO_LFEBPL(x) (((x) & 3) << 16)
> +#define AFMT_60958_0 0x7104
> +# define AFMT_60958_CS_A(x) (((x) & 1) << 0)
> +# define AFMT_60958_CS_B(x) (((x) & 1) << 1)
> +# define AFMT_60958_CS_C(x) (((x) & 1) << 2)
> +# define AFMT_60958_CS_D(x) (((x) & 3) << 3)
> +# define AFMT_60958_CS_MODE(x) (((x) & 3) << 6)
> +# define AFMT_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
> +# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
> +# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
> +# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
> +#define AFMT_60958_1 0x7108
> +# define AFMT_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
> +# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
> +# define AFMT_60958_CS_VALID_L(x) (((x) & 1) << 16)
> +# define AFMT_60958_CS_VALID_R(x) (((x) & 1) << 18)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
> +#define AFMT_AUDIO_CRC_CONTROL 0x710c
> +# define AFMT_AUDIO_CRC_EN (1 << 0)
> +#define AFMT_RAMP_CONTROL0 0x7110
> +# define AFMT_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
> +# define AFMT_RAMP_DATA_SIGN (1 << 31)
> +#define AFMT_RAMP_CONTROL1 0x7114
> +# define AFMT_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
> +# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x) & 0xff) << 24)
> +#define AFMT_RAMP_CONTROL2 0x7118
> +# define AFMT_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
> +#define AFMT_RAMP_CONTROL3 0x711c
> +# define AFMT_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
> +#define AFMT_60958_2 0x7120
> +# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
> +#define AFMT_STATUS 0x7128
> +# define AFMT_AUDIO_ENABLE (1 << 4)
> +# define AFMT_AUDIO_HBR_ENABLE (1 << 8)
> +# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x712c
> +# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
> +# define AFMT_RESET_FIFO_WHEN_AUDIO_DIS (1 << 11) /* set to 1 */
> +# define AFMT_AUDIO_TEST_EN (1 << 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
> +# define AFMT_60958_CS_UPDATE (1 << 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
> +#define AFMT_VBI_PACKET_CONTROL 0x7130
> +# define AFMT_GENERIC0_UPDATE (1 << 2)
> +#define AFMT_INFOFRAME_CONTROL0 0x7134
> +# define AFMT_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - afmt regs */
> +# define AFMT_AUDIO_INFO_UPDATE (1 << 7)
> +# define AFMT_MPEG_INFO_UPDATE (1 << 10)
> +#define AFMT_GENERIC0_7 0x7138
>
> #define GC_USER_SHADER_PIPE_CONFIG 0x8954
> #define INACTIVE_QD_PIPES(x) ((x) << 8)
> diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
> index 3568a2e..7f0c223 100644
> --- a/drivers/gpu/drm/radeon/r600d.h
> +++ b/drivers/gpu/drm/radeon/r600d.h
> @@ -816,6 +816,242 @@
> # define TARGET_LINK_SPEED_MASK (0xf << 0)
> # define SELECTABLE_DEEMPHASIS (1 << 6)
>
> +/* Audio clocks */
> +#define DCCG_AUDIO_DTO0_PHASE 0x0514
> +#define DCCG_AUDIO_DTO0_MODULE 0x0518
> +#define DCCG_AUDIO_DTO0_LOAD 0x051c
> +# define DTO_LOAD (1 << 31)
> +#define DCCG_AUDIO_DTO0_CNTL 0x0520
> +
> +#define DCCG_AUDIO_DTO1_PHASE 0x0524
> +#define DCCG_AUDIO_DTO1_MODULE 0x0528
> +#define DCCG_AUDIO_DTO1_LOAD 0x052c
> +#define DCCG_AUDIO_DTO1_CNTL 0x0530
> +
> +#define DCCG_AUDIO_DTO_SELECT 0x0534
> +
> +/* digital blocks */
> +#define TMDSA_CNTL 0x7880
> +# define TMDSA_HDMI_EN (1 << 2)
> +#define LVTMA_CNTL 0x7a80
> +# define LVTMA_HDMI_EN (1 << 2)
> +#define DDIA_CNTL 0x7200
> +# define DDIA_HDMI_EN (1 << 2)
> +#define DIG0_CNTL 0x75a0
> +# define DIG_MODE(x) (((x) & 7) << 8)
> +# define DIG_MODE_DP 0
> +# define DIG_MODE_LVDS 1
> +# define DIG_MODE_TMDS_DVI 2
> +# define DIG_MODE_TMDS_HDMI 3
> +# define DIG_MODE_SDVO 4
> +#define DIG1_CNTL 0x79a0
> +
> +/* rs6xx/rs740 and r6xx share the same HDMI blocks, however, rs6xx has only one
> + * instance of the blocks while r6xx has 2. DCE 3.0 cards are slightly
> + * different due to the new DIG blocks, but also have 2 instances.
> + * DCE 3.0 HDMI blocks are part of each DIG encoder.
> + */
> +
> +/* rs6xx/rs740/r6xx/dce3 */
> +#define HDMI0_CONTROL 0x7400
> +/* rs6xx/rs740/r6xx */
> +# define HDMI0_ENABLE (1 << 0)
> +# define HDMI0_STREAM(x) (((x) & 3) << 2)
> +# define HDMI0_STREAM_TMDSA 0
> +# define HDMI0_STREAM_LVTMA 1
> +# define HDMI0_STREAM_DVOA 2
> +# define HDMI0_STREAM_DDIA 3
> +/* rs6xx/r6xx/dce3 */
> +# define HDMI0_ERROR_ACK (1 << 8)
> +# define HDMI0_ERROR_MASK (1 << 9)
> +#define HDMI0_STATUS 0x7404
> +# define HDMI0_ACTIVE_AVMUTE (1 << 0)
> +# define HDMI0_AUDIO_ENABLE (1 << 4)
> +# define HDMI0_AZ_FORMAT_WTRIG (1 << 28)
> +# define HDMI0_AZ_FORMAT_WTRIG_INT (1 << 29)
> +#define HDMI0_AUDIO_PACKET_CONTROL 0x7408
> +# define HDMI0_AUDIO_SAMPLE_SEND (1 << 0)
> +# define HDMI0_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
> +# define HDMI0_AUDIO_SEND_MAX_PACKETS (1 << 8)
> +# define HDMI0_AUDIO_TEST_EN (1 << 12)
> +# define HDMI0_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
> +# define HDMI0_AUDIO_CHANNEL_SWAP (1 << 24)
> +# define HDMI0_60958_CS_UPDATE (1 << 26)
> +# define HDMI0_AZ_FORMAT_WTRIG_MASK (1 << 28)
> +# define HDMI0_AZ_FORMAT_WTRIG_ACK (1 << 29)
> +#define HDMI0_AUDIO_CRC_CONTROL 0x740c
> +# define HDMI0_AUDIO_CRC_EN (1 << 0)
> +#define HDMI0_VBI_PACKET_CONTROL 0x7410
> +# define HDMI0_NULL_SEND (1 << 0)
> +# define HDMI0_GC_SEND (1 << 4)
> +# define HDMI0_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
> +#define HDMI0_INFOFRAME_CONTROL0 0x7414
> +# define HDMI0_AVI_INFO_SEND (1 << 0)
> +# define HDMI0_AVI_INFO_CONT (1 << 1)
> +# define HDMI0_AUDIO_INFO_SEND (1 << 4)
> +# define HDMI0_AUDIO_INFO_CONT (1 << 5)
> +# define HDMI0_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - hmdi regs */
> +# define HDMI0_AUDIO_INFO_UPDATE (1 << 7)
> +# define HDMI0_MPEG_INFO_SEND (1 << 8)
> +# define HDMI0_MPEG_INFO_CONT (1 << 9)
> +# define HDMI0_MPEG_INFO_UPDATE (1 << 10)
> +#define HDMI0_INFOFRAME_CONTROL1 0x7418
> +# define HDMI0_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
> +# define HDMI0_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
> +# define HDMI0_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
> +#define HDMI0_GENERIC_PACKET_CONTROL 0x741c
> +# define HDMI0_GENERIC0_SEND (1 << 0)
> +# define HDMI0_GENERIC0_CONT (1 << 1)
> +# define HDMI0_GENERIC0_UPDATE (1 << 2)
> +# define HDMI0_GENERIC1_SEND (1 << 4)
> +# define HDMI0_GENERIC1_CONT (1 << 5)
> +# define HDMI0_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
> +# define HDMI0_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
> +#define HDMI0_GC 0x7428
> +# define HDMI0_GC_AVMUTE (1 << 0)
> +#define HDMI0_AVI_INFO0 0x7454
> +# define HDMI0_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define HDMI0_AVI_INFO_S(x) (((x) & 3) << 8)
> +# define HDMI0_AVI_INFO_B(x) (((x) & 3) << 10)
> +# define HDMI0_AVI_INFO_A(x) (((x) & 1) << 12)
> +# define HDMI0_AVI_INFO_Y(x) (((x) & 3) << 13)
> +# define HDMI0_AVI_INFO_Y_RGB 0
> +# define HDMI0_AVI_INFO_Y_YCBCR422 1
> +# define HDMI0_AVI_INFO_Y_YCBCR444 2
> +# define HDMI0_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
> +# define HDMI0_AVI_INFO_R(x) (((x) & 0xf) << 16)
> +# define HDMI0_AVI_INFO_M(x) (((x) & 0x3) << 20)
> +# define HDMI0_AVI_INFO_C(x) (((x) & 0x3) << 22)
> +# define HDMI0_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
> +# define HDMI0_AVI_INFO_SC(x) (((x) & 0x3) << 24)
> +# define HDMI0_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
> +#define HDMI0_AVI_INFO1 0x7458
> +# define HDMI0_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
> +# define HDMI0_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
> +# define HDMI0_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
> +#define HDMI0_AVI_INFO2 0x745c
> +# define HDMI0_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
> +# define HDMI0_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
> +#define HDMI0_AVI_INFO3 0x7460
> +# define HDMI0_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
> +# define HDMI0_AVI_INFO_VERSION(x) (((x) & 3) << 24)
> +#define HDMI0_MPEG_INFO0 0x7464
> +# define HDMI0_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define HDMI0_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
> +# define HDMI0_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
> +# define HDMI0_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
> +#define HDMI0_MPEG_INFO1 0x7468
> +# define HDMI0_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
> +# define HDMI0_MPEG_INFO_MF(x) (((x) & 3) << 8)
> +# define HDMI0_MPEG_INFO_FR(x) (((x) & 1) << 12)
> +#define HDMI0_GENERIC0_HDR 0x746c
> +#define HDMI0_GENERIC0_0 0x7470
> +#define HDMI0_GENERIC0_1 0x7474
> +#define HDMI0_GENERIC0_2 0x7478
> +#define HDMI0_GENERIC0_3 0x747c
> +#define HDMI0_GENERIC0_4 0x7480
> +#define HDMI0_GENERIC0_5 0x7484
> +#define HDMI0_GENERIC0_6 0x7488
> +#define HDMI0_GENERIC1_HDR 0x748c
> +#define HDMI0_GENERIC1_0 0x7490
> +#define HDMI0_GENERIC1_1 0x7494
> +#define HDMI0_GENERIC1_2 0x7498
> +#define HDMI0_GENERIC1_3 0x749c
> +#define HDMI0_GENERIC1_4 0x74a0
> +#define HDMI0_GENERIC1_5 0x74a4
> +#define HDMI0_GENERIC1_6 0x74a8
> +#define HDMI0_ACR_32_0 0x74ac
> +# define HDMI0_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
> +#define HDMI0_ACR_32_1 0x74b0
> +# define HDMI0_ACR_N_32(x) (((x) & 0xfffff) << 0)
> +#define HDMI0_ACR_44_0 0x74b4
> +# define HDMI0_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
> +#define HDMI0_ACR_44_1 0x74b8
> +# define HDMI0_ACR_N_44(x) (((x) & 0xfffff) << 0)
> +#define HDMI0_ACR_48_0 0x74bc
> +# define HDMI0_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
> +#define HDMI0_ACR_48_1 0x74c0
> +# define HDMI0_ACR_N_48(x) (((x) & 0xfffff) << 0)
> +#define HDMI0_ACR_STATUS_0 0x74c4
> +#define HDMI0_ACR_STATUS_1 0x74c8
> +#define HDMI0_AUDIO_INFO0 0x74cc
> +# define HDMI0_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define HDMI0_AUDIO_INFO_CC(x) (((x) & 7) << 8)
> +#define HDMI0_AUDIO_INFO1 0x74d0
> +# define HDMI0_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
> +# define HDMI0_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
> +# define HDMI0_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
> +# define HDMI0_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
> +#define HDMI0_60958_0 0x74d4
> +# define HDMI0_60958_CS_A(x) (((x) & 1) << 0)
> +# define HDMI0_60958_CS_B(x) (((x) & 1) << 1)
> +# define HDMI0_60958_CS_C(x) (((x) & 1) << 2)
> +# define HDMI0_60958_CS_D(x) (((x) & 3) << 3)
> +# define HDMI0_60958_CS_MODE(x) (((x) & 3) << 6)
> +# define HDMI0_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
> +# define HDMI0_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
> +# define HDMI0_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
> +# define HDMI0_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
> +#define HDMI0_60958_1 0x74d8
> +# define HDMI0_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
> +# define HDMI0_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
> +# define HDMI0_60958_CS_VALID_L(x) (((x) & 1) << 16)
> +# define HDMI0_60958_CS_VALID_R(x) (((x) & 1) << 18)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
> +#define HDMI0_ACR_PACKET_CONTROL 0x74dc
> +# define HDMI0_ACR_SEND (1 << 0)
> +# define HDMI0_ACR_CONT (1 << 1)
> +# define HDMI0_ACR_SELECT(x) (((x) & 3) << 4)
> +# define HDMI0_ACR_HW 0
> +# define HDMI0_ACR_32 1
> +# define HDMI0_ACR_44 2
> +# define HDMI0_ACR_48 3
> +# define HDMI0_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
> +# define HDMI0_ACR_AUTO_SEND (1 << 12)
> +#define HDMI0_RAMP_CONTROL0 0x74e0
> +# define HDMI0_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
> +#define HDMI0_RAMP_CONTROL1 0x74e4
> +# define HDMI0_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
> +#define HDMI0_RAMP_CONTROL2 0x74e8
> +# define HDMI0_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
> +#define HDMI0_RAMP_CONTROL3 0x74ec
> +# define HDMI0_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
> +/* HDMI0_60958_2 is r7xx only */
> +#define HDMI0_60958_2 0x74f0
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
> +# define HDMI0_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
> +/* r6xx only; second instance starts at 0x7700 */
> +#define HDMI1_CONTROL 0x7700
> +#define HDMI1_STATUS 0x7704
> +#define HDMI1_AUDIO_PACKET_CONTROL 0x7708
> +/* DCE3; second instance starts at 0x7800 NOT 0x7700 */
> +#define DCE3_HDMI1_CONTROL 0x7800
> +#define DCE3_HDMI1_STATUS 0x7804
> +#define DCE3_HDMI1_AUDIO_PACKET_CONTROL 0x7808
> +/* DCE3.2 (for interrupts) */
> +#define AFMT_STATUS 0x7600
> +# define AFMT_AUDIO_ENABLE (1 << 4)
> +# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x7604
> +# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
> +# define AFMT_AUDIO_TEST_EN (1 << 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
> +# define AFMT_60958_CS_UPDATE (1 << 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
> +/* DCE3.2 second instance starts at 0x7800 */
> +#define HDMI_OFFSET0 (0x7400 - 0x7400)
> +#define HDMI_OFFSET1 (0x7800 - 0x7400)
> +
> /*
> * PM4
> */
> diff --git a/drivers/gpu/drm/radeon/rs600d.h b/drivers/gpu/drm/radeon/rs600d.h
> index a27c13a..f1f8941 100644
> --- a/drivers/gpu/drm/radeon/rs600d.h
> +++ b/drivers/gpu/drm/radeon/rs600d.h
> @@ -485,6 +485,20 @@
> #define S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) & 0x1) << 16)
> #define G_007D18_DC_HOT_PLUG_DETECT2_INT_EN(x) (((x) >> 16) & 0x1)
> #define C_007D18_DC_HOT_PLUG_DETECT2_INT_EN 0xFFFEFFFF
> +#define R_007404_HDMI0_STATUS 0x007404
> +#define S_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x) & 0x1) << 28)
> +#define G_007404_HDMI0_AZ_FORMAT_WTRIG(x) (((x) >> 28) & 0x1)
> +#define C_007404_HDMI0_AZ_FORMAT_WTRIG 0xEFFFFFFF
> +#define S_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x) & 0x1) << 29)
> +#define G_007404_HDMI0_AZ_FORMAT_WTRIG_INT(x) (((x) >> 29) & 0x1)
> +#define C_007404_HDMI0_AZ_FORMAT_WTRIG_INT 0xDFFFFFFF
> +#define R_007408_HDMI0_AUDIO_PACKET_CONTROL 0x007408
> +#define S_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x) & 0x1) << 28)
> +#define G_007408_HDMI0_AZ_FORMAT_WTRIG_MASK(x) (((x) >> 28) & 0x1)
> +#define C_007408_HDMI0_AZ_FORMAT_WTRIG_MASK 0xEFFFFFFF
> +#define S_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x) & 0x1) << 29)
> +#define G_007408_HDMI0_AZ_FORMAT_WTRIG_ACK(x) (((x) >> 29) & 0x1)
> +#define C_007408_HDMI0_AZ_FORMAT_WTRIG_ACK 0xDFFFFFFF
>
> /* MC registers */
> #define R_000000_MC_STATUS 0x000000
> diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
> index 79fa588..9c549f7 100644
> --- a/drivers/gpu/drm/radeon/rv770d.h
> +++ b/drivers/gpu/drm/radeon/rv770d.h
> @@ -353,6 +353,197 @@
>
> #define SRBM_STATUS 0x0E50
>
> +/* DCE 3.2 HDMI */
> +#define HDMI_CONTROL 0x7400
> +# define HDMI_KEEPOUT_MODE (1 << 0)
> +# define HDMI_PACKET_GEN_VERSION (1 << 4) /* 0 = r6xx compat */
> +# define HDMI_ERROR_ACK (1 << 8)
> +# define HDMI_ERROR_MASK (1 << 9)
> +#define HDMI_STATUS 0x7404
> +# define HDMI_ACTIVE_AVMUTE (1 << 0)
> +# define HDMI_AUDIO_PACKET_ERROR (1 << 16)
> +# define HDMI_VBI_PACKET_ERROR (1 << 20)
> +#define HDMI_AUDIO_PACKET_CONTROL 0x7408
> +# define HDMI_AUDIO_DELAY_EN(x) (((x) & 3) << 4)
> +# define HDMI_AUDIO_PACKETS_PER_LINE(x) (((x) & 0x1f) << 16)
> +#define HDMI_ACR_PACKET_CONTROL 0x740c
> +# define HDMI_ACR_SEND (1 << 0)
> +# define HDMI_ACR_CONT (1 << 1)
> +# define HDMI_ACR_SELECT(x) (((x) & 3) << 4)
> +# define HDMI_ACR_HW 0
> +# define HDMI_ACR_32 1
> +# define HDMI_ACR_44 2
> +# define HDMI_ACR_48 3
> +# define HDMI_ACR_SOURCE (1 << 8) /* 0 - hw; 1 - cts value */
> +# define HDMI_ACR_AUTO_SEND (1 << 12)
> +#define HDMI_VBI_PACKET_CONTROL 0x7410
> +# define HDMI_NULL_SEND (1 << 0)
> +# define HDMI_GC_SEND (1 << 4)
> +# define HDMI_GC_CONT (1 << 5) /* 0 - once; 1 - every frame */
> +#define HDMI_INFOFRAME_CONTROL0 0x7414
> +# define HDMI_AVI_INFO_SEND (1 << 0)
> +# define HDMI_AVI_INFO_CONT (1 << 1)
> +# define HDMI_AUDIO_INFO_SEND (1 << 4)
> +# define HDMI_AUDIO_INFO_CONT (1 << 5)
> +# define HDMI_MPEG_INFO_SEND (1 << 8)
> +# define HDMI_MPEG_INFO_CONT (1 << 9)
> +#define HDMI_INFOFRAME_CONTROL1 0x7418
> +# define HDMI_AVI_INFO_LINE(x) (((x) & 0x3f) << 0)
> +# define HDMI_AUDIO_INFO_LINE(x) (((x) & 0x3f) << 8)
> +# define HDMI_MPEG_INFO_LINE(x) (((x) & 0x3f) << 16)
> +#define HDMI_GENERIC_PACKET_CONTROL 0x741c
> +# define HDMI_GENERIC0_SEND (1 << 0)
> +# define HDMI_GENERIC0_CONT (1 << 1)
> +# define HDMI_GENERIC1_SEND (1 << 4)
> +# define HDMI_GENERIC1_CONT (1 << 5)
> +# define HDMI_GENERIC0_LINE(x) (((x) & 0x3f) << 16)
> +# define HDMI_GENERIC1_LINE(x) (((x) & 0x3f) << 24)
> +#define HDMI_GC 0x7428
> +# define HDMI_GC_AVMUTE (1 << 0)
> +#define AFMT_AUDIO_PACKET_CONTROL2 0x742c
> +# define AFMT_AUDIO_LAYOUT_OVRD (1 << 0)
> +# define AFMT_AUDIO_LAYOUT_SELECT (1 << 1)
> +# define AFMT_60958_CS_SOURCE (1 << 4)
> +# define AFMT_AUDIO_CHANNEL_ENABLE(x) (((x) & 0xff) << 8)
> +# define AFMT_DP_AUDIO_STREAM_ID(x) (((x) & 0xff) << 16)
> +#define AFMT_AVI_INFO0 0x7454
> +# define AFMT_AVI_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_AVI_INFO_S(x) (((x) & 3) << 8)
> +# define AFMT_AVI_INFO_B(x) (((x) & 3) << 10)
> +# define AFMT_AVI_INFO_A(x) (((x) & 1) << 12)
> +# define AFMT_AVI_INFO_Y(x) (((x) & 3) << 13)
> +# define AFMT_AVI_INFO_Y_RGB 0
> +# define AFMT_AVI_INFO_Y_YCBCR422 1
> +# define AFMT_AVI_INFO_Y_YCBCR444 2
> +# define AFMT_AVI_INFO_Y_A_B_S(x) (((x) & 0xff) << 8)
> +# define AFMT_AVI_INFO_R(x) (((x) & 0xf) << 16)
> +# define AFMT_AVI_INFO_M(x) (((x) & 0x3) << 20)
> +# define AFMT_AVI_INFO_C(x) (((x) & 0x3) << 22)
> +# define AFMT_AVI_INFO_C_M_R(x) (((x) & 0xff) << 16)
> +# define AFMT_AVI_INFO_SC(x) (((x) & 0x3) << 24)
> +# define AFMT_AVI_INFO_Q(x) (((x) & 0x3) << 26)
> +# define AFMT_AVI_INFO_EC(x) (((x) & 0x3) << 28)
> +# define AFMT_AVI_INFO_ITC(x) (((x) & 0x1) << 31)
> +# define AFMT_AVI_INFO_ITC_EC_Q_SC(x) (((x) & 0xff) << 24)
> +#define AFMT_AVI_INFO1 0x7458
> +# define AFMT_AVI_INFO_VIC(x) (((x) & 0x7f) << 0) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_PR(x) (((x) & 0xf) << 8) /* don't use avi infoframe v1 */
> +# define AFMT_AVI_INFO_TOP(x) (((x) & 0xffff) << 16)
> +#define AFMT_AVI_INFO2 0x745c
> +# define AFMT_AVI_INFO_BOTTOM(x) (((x) & 0xffff) << 0)
> +# define AFMT_AVI_INFO_LEFT(x) (((x) & 0xffff) << 16)
> +#define AFMT_AVI_INFO3 0x7460
> +# define AFMT_AVI_INFO_RIGHT(x) (((x) & 0xffff) << 0)
> +# define AFMT_AVI_INFO_VERSION(x) (((x) & 3) << 24)
> +#define AFMT_MPEG_INFO0 0x7464
> +# define AFMT_MPEG_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_MPEG_INFO_MB0(x) (((x) & 0xff) << 8)
> +# define AFMT_MPEG_INFO_MB1(x) (((x) & 0xff) << 16)
> +# define AFMT_MPEG_INFO_MB2(x) (((x) & 0xff) << 24)
> +#define AFMT_MPEG_INFO1 0x7468
> +# define AFMT_MPEG_INFO_MB3(x) (((x) & 0xff) << 0)
> +# define AFMT_MPEG_INFO_MF(x) (((x) & 3) << 8)
> +# define AFMT_MPEG_INFO_FR(x) (((x) & 1) << 12)
> +#define AFMT_GENERIC0_HDR 0x746c
> +#define AFMT_GENERIC0_0 0x7470
> +#define AFMT_GENERIC0_1 0x7474
> +#define AFMT_GENERIC0_2 0x7478
> +#define AFMT_GENERIC0_3 0x747c
> +#define AFMT_GENERIC0_4 0x7480
> +#define AFMT_GENERIC0_5 0x7484
> +#define AFMT_GENERIC0_6 0x7488
> +#define AFMT_GENERIC1_HDR 0x748c
> +#define AFMT_GENERIC1_0 0x7490
> +#define AFMT_GENERIC1_1 0x7494
> +#define AFMT_GENERIC1_2 0x7498
> +#define AFMT_GENERIC1_3 0x749c
> +#define AFMT_GENERIC1_4 0x74a0
> +#define AFMT_GENERIC1_5 0x74a4
> +#define AFMT_GENERIC1_6 0x74a8
> +#define HDMI_ACR_32_0 0x74ac
> +# define HDMI_ACR_CTS_32(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_32_1 0x74b0
> +# define HDMI_ACR_N_32(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_44_0 0x74b4
> +# define HDMI_ACR_CTS_44(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_44_1 0x74b8
> +# define HDMI_ACR_N_44(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_48_0 0x74bc
> +# define HDMI_ACR_CTS_48(x) (((x) & 0xfffff) << 12)
> +#define HDMI_ACR_48_1 0x74c0
> +# define HDMI_ACR_N_48(x) (((x) & 0xfffff) << 0)
> +#define HDMI_ACR_STATUS_0 0x74c4
> +#define HDMI_ACR_STATUS_1 0x74c8
> +#define AFMT_AUDIO_INFO0 0x74cc
> +# define AFMT_AUDIO_INFO_CHECKSUM(x) (((x) & 0xff) << 0)
> +# define AFMT_AUDIO_INFO_CC(x) (((x) & 7) << 8)
> +# define AFMT_AUDIO_INFO_CHECKSUM_OFFSET(x) (((x) & 0xff) << 16)
> +#define AFMT_AUDIO_INFO1 0x74d0
> +# define AFMT_AUDIO_INFO_CA(x) (((x) & 0xff) << 0)
> +# define AFMT_AUDIO_INFO_LSV(x) (((x) & 0xf) << 11)
> +# define AFMT_AUDIO_INFO_DM_INH(x) (((x) & 1) << 15)
> +# define AFMT_AUDIO_INFO_DM_INH_LSV(x) (((x) & 0xff) << 8)
> +#define AFMT_60958_0 0x74d4
> +# define AFMT_60958_CS_A(x) (((x) & 1) << 0)
> +# define AFMT_60958_CS_B(x) (((x) & 1) << 1)
> +# define AFMT_60958_CS_C(x) (((x) & 1) << 2)
> +# define AFMT_60958_CS_D(x) (((x) & 3) << 3)
> +# define AFMT_60958_CS_MODE(x) (((x) & 3) << 6)
> +# define AFMT_60958_CS_CATEGORY_CODE(x) (((x) & 0xff) << 8)
> +# define AFMT_60958_CS_SOURCE_NUMBER(x) (((x) & 0xf) << 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_L(x) (((x) & 0xf) << 20)
> +# define AFMT_60958_CS_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 24)
> +# define AFMT_60958_CS_CLOCK_ACCURACY(x) (((x) & 3) << 28)
> +#define AFMT_60958_1 0x74d8
> +# define AFMT_60958_CS_WORD_LENGTH(x) (((x) & 0xf) << 0)
> +# define AFMT_60958_CS_ORIGINAL_SAMPLING_FREQUENCY(x) (((x) & 0xf) << 4)
> +# define AFMT_60958_CS_VALID_L(x) (((x) & 1) << 16)
> +# define AFMT_60958_CS_VALID_R(x) (((x) & 1) << 18)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_R(x) (((x) & 0xf) << 20)
> +#define AFMT_AUDIO_CRC_CONTROL 0x74dc
> +# define AFMT_AUDIO_CRC_EN (1 << 0)
> +#define AFMT_RAMP_CONTROL0 0x74e0
> +# define AFMT_RAMP_MAX_COUNT(x) (((x) & 0xffffff) << 0)
> +# define AFMT_RAMP_DATA_SIGN (1 << 31)
> +#define AFMT_RAMP_CONTROL1 0x74e4
> +# define AFMT_RAMP_MIN_COUNT(x) (((x) & 0xffffff) << 0)
> +# define AFMT_AUDIO_TEST_CH_DISABLE(x) (((x) & 0xff) << 24)
> +#define AFMT_RAMP_CONTROL2 0x74e8
> +# define AFMT_RAMP_INC_COUNT(x) (((x) & 0xffffff) << 0)
> +#define AFMT_RAMP_CONTROL3 0x74ec
> +# define AFMT_RAMP_DEC_COUNT(x) (((x) & 0xffffff) << 0)
> +#define AFMT_60958_2 0x74f0
> +# define AFMT_60958_CS_CHANNEL_NUMBER_2(x) (((x) & 0xf) << 0)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_3(x) (((x) & 0xf) << 4)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_4(x) (((x) & 0xf) << 8)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_5(x) (((x) & 0xf) << 12)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_6(x) (((x) & 0xf) << 16)
> +# define AFMT_60958_CS_CHANNEL_NUMBER_7(x) (((x) & 0xf) << 20)
> +#define AFMT_STATUS 0x7600
> +# define AFMT_AUDIO_ENABLE (1 << 4)
> +# define AFMT_AZ_FORMAT_WTRIG (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_INT (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG (1 << 30)
> +#define AFMT_AUDIO_PACKET_CONTROL 0x7604
> +# define AFMT_AUDIO_SAMPLE_SEND (1 << 0)
> +# define AFMT_AUDIO_TEST_EN (1 << 12)
> +# define AFMT_AUDIO_CHANNEL_SWAP (1 << 24)
> +# define AFMT_60958_CS_UPDATE (1 << 26)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_MASK (1 << 27)
> +# define AFMT_AZ_FORMAT_WTRIG_MASK (1 << 28)
> +# define AFMT_AZ_FORMAT_WTRIG_ACK (1 << 29)
> +# define AFMT_AZ_AUDIO_ENABLE_CHG_ACK (1 << 30)
> +#define AFMT_VBI_PACKET_CONTROL 0x7608
> +# define AFMT_GENERIC0_UPDATE (1 << 2)
> +#define AFMT_INFOFRAME_CONTROL0 0x760c
> +# define AFMT_AUDIO_INFO_SOURCE (1 << 6) /* 0 - sound block; 1 - hmdi regs */
> +# define AFMT_AUDIO_INFO_UPDATE (1 << 7)
> +# define AFMT_MPEG_INFO_UPDATE (1 << 10)
> +#define AFMT_GENERIC0_7 0x7610
> +/* second instance starts at 0x7800 */
> +#define HDMI_OFFSET0 (0x7400 - 0x7400)
> +#define HDMI_OFFSET1 (0x7800 - 0x7400)
> +
> #define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
> #define D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6914
> #define D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH 0x6114
> --
> 1.7.7.5
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-03-30 13:07 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-28 17:19 [PATCH] drm/radeon/kms: add register definitions for audio alexdeucher
2012-03-29 7:53 ` Christian König
2012-03-29 8:16 ` Rafał Miłecki
2012-03-29 11:54 ` Deucher, Alexander
2012-03-30 9:09 ` Rafał Miłecki
2012-03-30 9:11 ` Rafał Miłecki
2012-03-30 13:07 ` Alex Deucher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.