162306a36Sopenharmony_ci#ifndef _VC4_HDMI_REGS_H_ 262306a36Sopenharmony_ci#define _VC4_HDMI_REGS_H_ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/pm_runtime.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include "vc4_hdmi.h" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define VC4_HDMI_PACKET_STRIDE 0x24 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cienum vc4_hdmi_regs { 1162306a36Sopenharmony_ci VC4_INVALID = 0, 1262306a36Sopenharmony_ci VC4_HDMI, 1362306a36Sopenharmony_ci VC4_HD, 1462306a36Sopenharmony_ci VC5_CEC, 1562306a36Sopenharmony_ci VC5_CSC, 1662306a36Sopenharmony_ci VC5_DVP, 1762306a36Sopenharmony_ci VC5_PHY, 1862306a36Sopenharmony_ci VC5_RAM, 1962306a36Sopenharmony_ci VC5_RM, 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cienum vc4_hdmi_field { 2362306a36Sopenharmony_ci HDMI_AUDIO_PACKET_CONFIG, 2462306a36Sopenharmony_ci HDMI_CEC_CNTRL_1, 2562306a36Sopenharmony_ci HDMI_CEC_CNTRL_2, 2662306a36Sopenharmony_ci HDMI_CEC_CNTRL_3, 2762306a36Sopenharmony_ci HDMI_CEC_CNTRL_4, 2862306a36Sopenharmony_ci HDMI_CEC_CNTRL_5, 2962306a36Sopenharmony_ci HDMI_CEC_CPU_CLEAR, 3062306a36Sopenharmony_ci HDMI_CEC_CPU_MASK_CLEAR, 3162306a36Sopenharmony_ci HDMI_CEC_CPU_MASK_SET, 3262306a36Sopenharmony_ci HDMI_CEC_CPU_MASK_STATUS, 3362306a36Sopenharmony_ci HDMI_CEC_CPU_STATUS, 3462306a36Sopenharmony_ci HDMI_CEC_CPU_SET, 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci /* 3762306a36Sopenharmony_ci * Transmit data, first byte is low byte of the 32-bit reg. 3862306a36Sopenharmony_ci * MSB of each byte transmitted first. 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci HDMI_CEC_RX_DATA_1, 4162306a36Sopenharmony_ci HDMI_CEC_RX_DATA_2, 4262306a36Sopenharmony_ci HDMI_CEC_RX_DATA_3, 4362306a36Sopenharmony_ci HDMI_CEC_RX_DATA_4, 4462306a36Sopenharmony_ci HDMI_CEC_TX_DATA_1, 4562306a36Sopenharmony_ci HDMI_CEC_TX_DATA_2, 4662306a36Sopenharmony_ci HDMI_CEC_TX_DATA_3, 4762306a36Sopenharmony_ci HDMI_CEC_TX_DATA_4, 4862306a36Sopenharmony_ci HDMI_CLOCK_STOP, 4962306a36Sopenharmony_ci HDMI_CORE_REV, 5062306a36Sopenharmony_ci HDMI_CRP_CFG, 5162306a36Sopenharmony_ci HDMI_CSC_12_11, 5262306a36Sopenharmony_ci HDMI_CSC_14_13, 5362306a36Sopenharmony_ci HDMI_CSC_22_21, 5462306a36Sopenharmony_ci HDMI_CSC_24_23, 5562306a36Sopenharmony_ci HDMI_CSC_32_31, 5662306a36Sopenharmony_ci HDMI_CSC_34_33, 5762306a36Sopenharmony_ci HDMI_CSC_CHANNEL_CTL, 5862306a36Sopenharmony_ci HDMI_CSC_CTL, 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci /* 6162306a36Sopenharmony_ci * 20-bit fields containing CTS values to be transmitted if 6262306a36Sopenharmony_ci * !EXTERNAL_CTS_EN 6362306a36Sopenharmony_ci */ 6462306a36Sopenharmony_ci HDMI_CTS_0, 6562306a36Sopenharmony_ci HDMI_CTS_1, 6662306a36Sopenharmony_ci HDMI_DEEP_COLOR_CONFIG_1, 6762306a36Sopenharmony_ci HDMI_DVP_CTL, 6862306a36Sopenharmony_ci HDMI_FIFO_CTL, 6962306a36Sopenharmony_ci HDMI_FRAME_COUNT, 7062306a36Sopenharmony_ci HDMI_GCP_CONFIG, 7162306a36Sopenharmony_ci HDMI_GCP_WORD_1, 7262306a36Sopenharmony_ci HDMI_HORZA, 7362306a36Sopenharmony_ci HDMI_HORZB, 7462306a36Sopenharmony_ci HDMI_HOTPLUG, 7562306a36Sopenharmony_ci HDMI_HOTPLUG_INT, 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci /* 7862306a36Sopenharmony_ci * 3 bits per field, where each field maps from that 7962306a36Sopenharmony_ci * corresponding MAI bus channel to the given HDMI channel. 8062306a36Sopenharmony_ci */ 8162306a36Sopenharmony_ci HDMI_MAI_CHANNEL_MAP, 8262306a36Sopenharmony_ci HDMI_MAI_CONFIG, 8362306a36Sopenharmony_ci HDMI_MAI_CTL, 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci /* 8662306a36Sopenharmony_ci * Register for DMAing in audio data to be transported over 8762306a36Sopenharmony_ci * the MAI bus to the Falcon core. 8862306a36Sopenharmony_ci */ 8962306a36Sopenharmony_ci HDMI_MAI_DATA, 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci /* Format header to be placed on the MAI data. Unused. */ 9262306a36Sopenharmony_ci HDMI_MAI_FMT, 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci /* Last received format word on the MAI bus. */ 9562306a36Sopenharmony_ci HDMI_MAI_FORMAT, 9662306a36Sopenharmony_ci HDMI_MAI_SMP, 9762306a36Sopenharmony_ci HDMI_MAI_THR, 9862306a36Sopenharmony_ci HDMI_M_CTL, 9962306a36Sopenharmony_ci HDMI_RAM_PACKET_CONFIG, 10062306a36Sopenharmony_ci HDMI_RAM_PACKET_START, 10162306a36Sopenharmony_ci HDMI_RAM_PACKET_STATUS, 10262306a36Sopenharmony_ci HDMI_RM_CONTROL, 10362306a36Sopenharmony_ci HDMI_RM_FORMAT, 10462306a36Sopenharmony_ci HDMI_RM_OFFSET, 10562306a36Sopenharmony_ci HDMI_SCHEDULER_CONTROL, 10662306a36Sopenharmony_ci HDMI_SCRAMBLER_CTL, 10762306a36Sopenharmony_ci HDMI_SW_RESET_CONTROL, 10862306a36Sopenharmony_ci HDMI_TX_PHY_CHANNEL_SWAP, 10962306a36Sopenharmony_ci HDMI_TX_PHY_CLK_DIV, 11062306a36Sopenharmony_ci HDMI_TX_PHY_CTL_0, 11162306a36Sopenharmony_ci HDMI_TX_PHY_CTL_1, 11262306a36Sopenharmony_ci HDMI_TX_PHY_CTL_2, 11362306a36Sopenharmony_ci HDMI_TX_PHY_CTL_3, 11462306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1, 11562306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2, 11662306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4, 11762306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CFG, 11862306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CTL_0, 11962306a36Sopenharmony_ci HDMI_TX_PHY_PLL_CTL_1, 12062306a36Sopenharmony_ci HDMI_TX_PHY_POWERDOWN_CTL, 12162306a36Sopenharmony_ci HDMI_TX_PHY_RESET_CTL, 12262306a36Sopenharmony_ci HDMI_TX_PHY_TMDS_CLK_WORD_SEL, 12362306a36Sopenharmony_ci HDMI_VEC_INTERFACE_CFG, 12462306a36Sopenharmony_ci HDMI_VEC_INTERFACE_XBAR, 12562306a36Sopenharmony_ci HDMI_VERTA0, 12662306a36Sopenharmony_ci HDMI_VERTA1, 12762306a36Sopenharmony_ci HDMI_VERTB0, 12862306a36Sopenharmony_ci HDMI_VERTB1, 12962306a36Sopenharmony_ci HDMI_VID_CTL, 13062306a36Sopenharmony_ci HDMI_MISC_CONTROL, 13162306a36Sopenharmony_ci HDMI_FORMAT_DET_1, 13262306a36Sopenharmony_ci HDMI_FORMAT_DET_2, 13362306a36Sopenharmony_ci HDMI_FORMAT_DET_3, 13462306a36Sopenharmony_ci HDMI_FORMAT_DET_4, 13562306a36Sopenharmony_ci HDMI_FORMAT_DET_5, 13662306a36Sopenharmony_ci HDMI_FORMAT_DET_6, 13762306a36Sopenharmony_ci HDMI_FORMAT_DET_7, 13862306a36Sopenharmony_ci HDMI_FORMAT_DET_8, 13962306a36Sopenharmony_ci HDMI_FORMAT_DET_9, 14062306a36Sopenharmony_ci HDMI_FORMAT_DET_10, 14162306a36Sopenharmony_ci}; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistruct vc4_hdmi_register { 14462306a36Sopenharmony_ci char *name; 14562306a36Sopenharmony_ci enum vc4_hdmi_regs reg; 14662306a36Sopenharmony_ci unsigned int offset; 14762306a36Sopenharmony_ci}; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci#define _VC4_REG(_base, _reg, _offset) \ 15062306a36Sopenharmony_ci [_reg] = { \ 15162306a36Sopenharmony_ci .name = #_reg, \ 15262306a36Sopenharmony_ci .reg = _base, \ 15362306a36Sopenharmony_ci .offset = _offset, \ 15462306a36Sopenharmony_ci } 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci#define VC4_HD_REG(reg, offset) _VC4_REG(VC4_HD, reg, offset) 15762306a36Sopenharmony_ci#define VC4_HDMI_REG(reg, offset) _VC4_REG(VC4_HDMI, reg, offset) 15862306a36Sopenharmony_ci#define VC5_CEC_REG(reg, offset) _VC4_REG(VC5_CEC, reg, offset) 15962306a36Sopenharmony_ci#define VC5_CSC_REG(reg, offset) _VC4_REG(VC5_CSC, reg, offset) 16062306a36Sopenharmony_ci#define VC5_DVP_REG(reg, offset) _VC4_REG(VC5_DVP, reg, offset) 16162306a36Sopenharmony_ci#define VC5_PHY_REG(reg, offset) _VC4_REG(VC5_PHY, reg, offset) 16262306a36Sopenharmony_ci#define VC5_RAM_REG(reg, offset) _VC4_REG(VC5_RAM, reg, offset) 16362306a36Sopenharmony_ci#define VC5_RM_REG(reg, offset) _VC4_REG(VC5_RM, reg, offset) 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_cistatic const struct vc4_hdmi_register __maybe_unused vc4_hdmi_fields[] = { 16662306a36Sopenharmony_ci VC4_HD_REG(HDMI_M_CTL, 0x000c), 16762306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_CTL, 0x0014), 16862306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_THR, 0x0018), 16962306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_FMT, 0x001c), 17062306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_DATA, 0x0020), 17162306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_SMP, 0x002c), 17262306a36Sopenharmony_ci VC4_HD_REG(HDMI_VID_CTL, 0x0038), 17362306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_CTL, 0x0040), 17462306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_12_11, 0x0044), 17562306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_14_13, 0x0048), 17662306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_22_21, 0x004c), 17762306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_24_23, 0x0050), 17862306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_32_31, 0x0054), 17962306a36Sopenharmony_ci VC4_HD_REG(HDMI_CSC_34_33, 0x0058), 18062306a36Sopenharmony_ci VC4_HD_REG(HDMI_FRAME_COUNT, 0x0068), 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CORE_REV, 0x0000), 18362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SW_RESET_CONTROL, 0x0004), 18462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HOTPLUG_INT, 0x0008), 18562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HOTPLUG, 0x000c), 18662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FIFO_CTL, 0x005c), 18762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x0090), 18862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0094), 18962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_FORMAT, 0x0098), 19062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x009c), 19162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x00a0), 19262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x00a4), 19362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CRP_CFG, 0x00a8), 19462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_0, 0x00ac), 19562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_1, 0x00b0), 19662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x00c0), 19762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZA, 0x00c4), 19862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZB, 0x00c8), 19962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA0, 0x00cc), 20062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB0, 0x00d0), 20162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA1, 0x00d4), 20262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB1, 0x00d8), 20362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x00e4), 20462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CNTRL_1, 0x00e8), 20562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CNTRL_2, 0x00ec), 20662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CNTRL_3, 0x00f0), 20762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CNTRL_4, 0x00f4), 20862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CNTRL_5, 0x00f8), 20962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_TX_DATA_1, 0x00fc), 21062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_TX_DATA_2, 0x0100), 21162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_TX_DATA_3, 0x0104), 21262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_TX_DATA_4, 0x0108), 21362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_RX_DATA_1, 0x010c), 21462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_RX_DATA_2, 0x0110), 21562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_RX_DATA_3, 0x0114), 21662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_RX_DATA_4, 0x0118), 21762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_TX_PHY_RESET_CTL, 0x02c0), 21862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_TX_PHY_CTL_0, 0x02c4), 21962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_STATUS, 0x0340), 22062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_SET, 0x0344), 22162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_CLEAR, 0x0348), 22262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_MASK_STATUS, 0x034c), 22362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_MASK_SET, 0x0350), 22462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CEC_CPU_MASK_CLEAR, 0x0354), 22562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_START, 0x0400), 22662306a36Sopenharmony_ci}; 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_cistatic const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi0_fields[] = { 22962306a36Sopenharmony_ci VC4_HD_REG(HDMI_DVP_CTL, 0x0000), 23062306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_CTL, 0x0010), 23162306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_THR, 0x0014), 23262306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_FMT, 0x0018), 23362306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_DATA, 0x001c), 23462306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_SMP, 0x0020), 23562306a36Sopenharmony_ci VC4_HD_REG(HDMI_VID_CTL, 0x0044), 23662306a36Sopenharmony_ci VC4_HD_REG(HDMI_FRAME_COUNT, 0x0060), 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FIFO_CTL, 0x074), 23962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x0b8), 24062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x0bc), 24162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x0c4), 24262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CRP_CFG, 0x0c8), 24362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_0, 0x0cc), 24462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_1, 0x0d0), 24562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x0e0), 24662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZA, 0x0e4), 24762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZB, 0x0e8), 24862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA0, 0x0ec), 24962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB0, 0x0f0), 25062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA1, 0x0f4), 25162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB1, 0x0f8), 25262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100), 25362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c), 25462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0), 25562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_1, 0x134), 25662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_2, 0x138), 25762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_3, 0x13c), 25862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_4, 0x140), 25962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_5, 0x144), 26062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_6, 0x148), 26162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_7, 0x14c), 26262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_8, 0x150), 26362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_9, 0x154), 26462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_10, 0x158), 26562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170), 26662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_GCP_CONFIG, 0x178), 26762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_GCP_WORD_1, 0x17c), 26862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HOTPLUG, 0x1a8), 26962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SCRAMBLER_CTL, 0x1c4), 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci VC5_DVP_REG(HDMI_CLOCK_STOP, 0x0bc), 27262306a36Sopenharmony_ci VC5_DVP_REG(HDMI_VEC_INTERFACE_CFG, 0x0ec), 27362306a36Sopenharmony_ci VC5_DVP_REG(HDMI_VEC_INTERFACE_XBAR, 0x0f0), 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_RESET_CTL, 0x000), 27662306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_POWERDOWN_CTL, 0x004), 27762306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_0, 0x008), 27862306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_1, 0x00c), 27962306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_2, 0x010), 28062306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_3, 0x014), 28162306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_0, 0x01c), 28262306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_1, 0x020), 28362306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CLK_DIV, 0x028), 28462306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CFG, 0x034), 28562306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_TMDS_CLK_WORD_SEL, 0x044), 28662306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CHANNEL_SWAP, 0x04c), 28762306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1, 0x050), 28862306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2, 0x054), 28962306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4, 0x05c), 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_CONTROL, 0x000), 29262306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_OFFSET, 0x018), 29362306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_FORMAT, 0x01c), 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci VC5_RAM_REG(HDMI_RAM_PACKET_START, 0x000), 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_1, 0x010), 29862306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_2, 0x014), 29962306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_3, 0x018), 30062306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_4, 0x01c), 30162306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_5, 0x020), 30262306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_1, 0x028), 30362306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_2, 0x02c), 30462306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_3, 0x030), 30562306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_4, 0x034), 30662306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_1, 0x038), 30762306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_2, 0x03c), 30862306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_3, 0x040), 30962306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_4, 0x044), 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_CTL, 0x000), 31262306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_12_11, 0x004), 31362306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_14_13, 0x008), 31462306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_22_21, 0x00c), 31562306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_24_23, 0x010), 31662306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_32_31, 0x014), 31762306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_34_33, 0x018), 31862306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_CHANNEL_CTL, 0x02c), 31962306a36Sopenharmony_ci}; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cistatic const struct vc4_hdmi_register __maybe_unused vc5_hdmi_hdmi1_fields[] = { 32262306a36Sopenharmony_ci VC4_HD_REG(HDMI_DVP_CTL, 0x0000), 32362306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_CTL, 0x0030), 32462306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_THR, 0x0034), 32562306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_FMT, 0x0038), 32662306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_DATA, 0x003c), 32762306a36Sopenharmony_ci VC4_HD_REG(HDMI_MAI_SMP, 0x0040), 32862306a36Sopenharmony_ci VC4_HD_REG(HDMI_VID_CTL, 0x0048), 32962306a36Sopenharmony_ci VC4_HD_REG(HDMI_FRAME_COUNT, 0x0064), 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FIFO_CTL, 0x074), 33262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_AUDIO_PACKET_CONFIG, 0x0b8), 33362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_CONFIG, 0x0bc), 33462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_RAM_PACKET_STATUS, 0x0c4), 33562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CRP_CFG, 0x0c8), 33662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_0, 0x0cc), 33762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_CTS_1, 0x0d0), 33862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SCHEDULER_CONTROL, 0x0e0), 33962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZA, 0x0e4), 34062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HORZB, 0x0e8), 34162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA0, 0x0ec), 34262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB0, 0x0f0), 34362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTA1, 0x0f4), 34462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_VERTB1, 0x0f8), 34562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MISC_CONTROL, 0x100), 34662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CHANNEL_MAP, 0x09c), 34762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_MAI_CONFIG, 0x0a0), 34862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_1, 0x134), 34962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_2, 0x138), 35062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_3, 0x13c), 35162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_4, 0x140), 35262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_5, 0x144), 35362306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_6, 0x148), 35462306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_7, 0x14c), 35562306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_8, 0x150), 35662306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_9, 0x154), 35762306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_FORMAT_DET_10, 0x158), 35862306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_DEEP_COLOR_CONFIG_1, 0x170), 35962306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_GCP_CONFIG, 0x178), 36062306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_GCP_WORD_1, 0x17c), 36162306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_HOTPLUG, 0x1a8), 36262306a36Sopenharmony_ci VC4_HDMI_REG(HDMI_SCRAMBLER_CTL, 0x1c4), 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci VC5_DVP_REG(HDMI_CLOCK_STOP, 0x0bc), 36562306a36Sopenharmony_ci VC5_DVP_REG(HDMI_VEC_INTERFACE_CFG, 0x0ec), 36662306a36Sopenharmony_ci VC5_DVP_REG(HDMI_VEC_INTERFACE_XBAR, 0x0f0), 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_RESET_CTL, 0x000), 36962306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_POWERDOWN_CTL, 0x004), 37062306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_0, 0x008), 37162306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_1, 0x00c), 37262306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_2, 0x010), 37362306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CTL_3, 0x014), 37462306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_0, 0x01c), 37562306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CTL_1, 0x020), 37662306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CLK_DIV, 0x028), 37762306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CFG, 0x034), 37862306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_CHANNEL_SWAP, 0x04c), 37962306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_TMDS_CLK_WORD_SEL, 0x044), 38062306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_1, 0x050), 38162306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_2, 0x054), 38262306a36Sopenharmony_ci VC5_PHY_REG(HDMI_TX_PHY_PLL_CALIBRATION_CONFIG_4, 0x05c), 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_CONTROL, 0x000), 38562306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_OFFSET, 0x018), 38662306a36Sopenharmony_ci VC5_RM_REG(HDMI_RM_FORMAT, 0x01c), 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci VC5_RAM_REG(HDMI_RAM_PACKET_START, 0x000), 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_1, 0x010), 39162306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_2, 0x014), 39262306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_3, 0x018), 39362306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_4, 0x01c), 39462306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_CNTRL_5, 0x020), 39562306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_1, 0x028), 39662306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_2, 0x02c), 39762306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_3, 0x030), 39862306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_TX_DATA_4, 0x034), 39962306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_1, 0x038), 40062306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_2, 0x03c), 40162306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_3, 0x040), 40262306a36Sopenharmony_ci VC5_CEC_REG(HDMI_CEC_RX_DATA_4, 0x044), 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_CTL, 0x000), 40562306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_12_11, 0x004), 40662306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_14_13, 0x008), 40762306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_22_21, 0x00c), 40862306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_24_23, 0x010), 40962306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_32_31, 0x014), 41062306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_34_33, 0x018), 41162306a36Sopenharmony_ci VC5_CSC_REG(HDMI_CSC_CHANNEL_CTL, 0x02c), 41262306a36Sopenharmony_ci}; 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_cistatic inline 41562306a36Sopenharmony_civoid __iomem *__vc4_hdmi_get_field_base(struct vc4_hdmi *hdmi, 41662306a36Sopenharmony_ci enum vc4_hdmi_regs reg) 41762306a36Sopenharmony_ci{ 41862306a36Sopenharmony_ci switch (reg) { 41962306a36Sopenharmony_ci case VC4_HD: 42062306a36Sopenharmony_ci return hdmi->hd_regs; 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci case VC4_HDMI: 42362306a36Sopenharmony_ci return hdmi->hdmicore_regs; 42462306a36Sopenharmony_ci 42562306a36Sopenharmony_ci case VC5_CSC: 42662306a36Sopenharmony_ci return hdmi->csc_regs; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci case VC5_CEC: 42962306a36Sopenharmony_ci return hdmi->cec_regs; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_ci case VC5_DVP: 43262306a36Sopenharmony_ci return hdmi->dvp_regs; 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci case VC5_PHY: 43562306a36Sopenharmony_ci return hdmi->phy_regs; 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ci case VC5_RAM: 43862306a36Sopenharmony_ci return hdmi->ram_regs; 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ci case VC5_RM: 44162306a36Sopenharmony_ci return hdmi->rm_regs; 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci default: 44462306a36Sopenharmony_ci return NULL; 44562306a36Sopenharmony_ci } 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ci return NULL; 44862306a36Sopenharmony_ci} 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_cistatic inline u32 vc4_hdmi_read(struct vc4_hdmi *hdmi, 45162306a36Sopenharmony_ci enum vc4_hdmi_field reg) 45262306a36Sopenharmony_ci{ 45362306a36Sopenharmony_ci const struct vc4_hdmi_register *field; 45462306a36Sopenharmony_ci const struct vc4_hdmi_variant *variant = hdmi->variant; 45562306a36Sopenharmony_ci void __iomem *base; 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci WARN_ON(pm_runtime_status_suspended(&hdmi->pdev->dev)); 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_ci kunit_fail_current_test("Accessing an HDMI register in a unit test!\n"); 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci if (reg >= variant->num_registers) { 46262306a36Sopenharmony_ci dev_warn(&hdmi->pdev->dev, 46362306a36Sopenharmony_ci "Invalid register ID %u\n", reg); 46462306a36Sopenharmony_ci return 0; 46562306a36Sopenharmony_ci } 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci field = &variant->registers[reg]; 46862306a36Sopenharmony_ci base = __vc4_hdmi_get_field_base(hdmi, field->reg); 46962306a36Sopenharmony_ci if (!base) { 47062306a36Sopenharmony_ci dev_warn(&hdmi->pdev->dev, 47162306a36Sopenharmony_ci "Unknown register ID %u\n", reg); 47262306a36Sopenharmony_ci return 0; 47362306a36Sopenharmony_ci } 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci return readl(base + field->offset); 47662306a36Sopenharmony_ci} 47762306a36Sopenharmony_ci#define HDMI_READ(reg) vc4_hdmi_read(vc4_hdmi, reg) 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_cistatic inline void vc4_hdmi_write(struct vc4_hdmi *hdmi, 48062306a36Sopenharmony_ci enum vc4_hdmi_field reg, 48162306a36Sopenharmony_ci u32 value) 48262306a36Sopenharmony_ci{ 48362306a36Sopenharmony_ci const struct vc4_hdmi_register *field; 48462306a36Sopenharmony_ci const struct vc4_hdmi_variant *variant = hdmi->variant; 48562306a36Sopenharmony_ci void __iomem *base; 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ci lockdep_assert_held(&hdmi->hw_lock); 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci WARN_ON(pm_runtime_status_suspended(&hdmi->pdev->dev)); 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci kunit_fail_current_test("Accessing an HDMI register in a unit test!\n"); 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci if (reg >= variant->num_registers) { 49462306a36Sopenharmony_ci dev_warn(&hdmi->pdev->dev, 49562306a36Sopenharmony_ci "Invalid register ID %u\n", reg); 49662306a36Sopenharmony_ci return; 49762306a36Sopenharmony_ci } 49862306a36Sopenharmony_ci 49962306a36Sopenharmony_ci field = &variant->registers[reg]; 50062306a36Sopenharmony_ci base = __vc4_hdmi_get_field_base(hdmi, field->reg); 50162306a36Sopenharmony_ci if (!base) 50262306a36Sopenharmony_ci return; 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_ci writel(value, base + field->offset); 50562306a36Sopenharmony_ci} 50662306a36Sopenharmony_ci#define HDMI_WRITE(reg, val) vc4_hdmi_write(vc4_hdmi, reg, val) 50762306a36Sopenharmony_ci 50862306a36Sopenharmony_ci#endif /* _VC4_HDMI_REGS_H_ */ 509