* - DPDTO MODULO = DTBCLK_P rate
* - target pix_clk_hz = (DPDTO INTEGER * DPDTO MODULO + DPDTO PHASE)
*/
-
- dp_dto_integer += 1; // integer=0 represents 1x multiplier, etc.
temp = (unsigned long long)dp_dto_integer * modulo_hz + phase_hz;
if (temp / 100 > 0xFFFFFFFFUL) {
CS_COMMON_MASK_SH_LIST_DCN2_0(mask_sh),\
CS_SF(OTG0_PIXEL_RATE_CNTL, PIPE0_DTO_SRC_SEL, mask_sh)
+#define CS_COMMON_MASK_SH_LIST_DCN4_0_1(mask_sh)\
+ CS_COMMON_MASK_SH_LIST_DCN3_2(mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, OTG0_TMDS_PIXEL_RATE_DIV, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, DPDTO0_INT, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, OTG1_TMDS_PIXEL_RATE_DIV, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, DPDTO1_INT, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, OTG2_TMDS_PIXEL_RATE_DIV, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, DPDTO2_INT, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, OTG3_TMDS_PIXEL_RATE_DIV, mask_sh),\
+ CS_SF(OTG_PIXEL_RATE_DIV, DPDTO3_INT, mask_sh)
+
#define CS_COMMON_REG_LIST_DCN1_0(index, pllid) \
SRI(PIXCLK_RESYNC_CNTL, PHYPLL, pllid),\
SRII(PHASE, DP_DTO, 0),\
type PLL_REF_DIV; \
type DP_DTO0_PHASE; \
type DP_DTO0_MODULO; \
- type DP_DTO0_ENABLE; \
- type DPDTO0_INT; \
- type DPDTO1_INT; \
- type DPDTO2_INT; \
- type DPDTO3_INT;
+ type DP_DTO0_ENABLE;
#define CS_REG_FIELD_LIST_DCN32(type) \
type PIPE0_DTO_SRC_SEL;
+#define CS_REG_FIELD_LIST_DCN401(type) \
+ type DPDTO0_INT; \
+ type DPDTO1_INT; \
+ type DPDTO2_INT; \
+ type DPDTO3_INT; \
+ type OTG0_TMDS_PIXEL_RATE_DIV; \
+ type OTG1_TMDS_PIXEL_RATE_DIV; \
+ type OTG2_TMDS_PIXEL_RATE_DIV; \
+ type OTG3_TMDS_PIXEL_RATE_DIV;
+
struct dce110_clk_src_shift {
CS_REG_FIELD_LIST(uint8_t)
CS_REG_FIELD_LIST_DCN32(uint8_t)
+ CS_REG_FIELD_LIST_DCN401(uint8_t)
};
-struct dce110_clk_src_mask{
+struct dce110_clk_src_mask {
CS_REG_FIELD_LIST(uint32_t)
CS_REG_FIELD_LIST_DCN32(uint32_t)
+ CS_REG_FIELD_LIST_DCN401(uint32_t)
};
struct dce110_clk_src_regs {
HDMI_CLOCK_CHANNEL_RATE, 0);
}
+bool enc42_dio_get_uncompressed_dp_pixel_format(
+ struct stream_encoder *enc,
+ enum dc_pixel_encoding *encoding,
+ enum dc_color_depth *depth)
+{
+ struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc);
+ uint32_t is_compressed_pixel_format, uncompressed_component_depth, uncompressed_pixel_format, compressed_pixel_format;
+
+ if (enc == NULL || encoding == NULL || depth == NULL)
+ return false;
+
+ REG_GET_4(DP_PIXEL_FORMAT,
+ PIXEL_ENCODING_TYPE, &is_compressed_pixel_format,
+ UNCOMPRESSED_COMPONENT_DEPTH, &uncompressed_component_depth,
+ UNCOMPRESSED_PIXEL_FORMAT, &uncompressed_pixel_format,
+ COMPRESSED_PIXEL_FORMAT, &compressed_pixel_format);
+
+ if (!is_compressed_pixel_format) {
+ switch (uncompressed_component_depth) {
+ case DP_COMPONENT_PIXEL_DEPTH_6BPC:
+ *depth = COLOR_DEPTH_666;
+ break;
+ case DP_COMPONENT_PIXEL_DEPTH_8BPC:
+ *depth = COLOR_DEPTH_888;
+ break;
+ case DP_COMPONENT_PIXEL_DEPTH_10BPC:
+ *depth = COLOR_DEPTH_101010;
+ break;
+ case DP_COMPONENT_PIXEL_DEPTH_12BPC:
+ *depth = COLOR_DEPTH_121212;
+ break;
+ case DP_COMPONENT_PIXEL_DEPTH_16BPC:
+ *depth = COLOR_DEPTH_161616;
+ break;
+ default:
+ *depth = COLOR_DEPTH_UNDEFINED;
+ break;
+ }
+
+ switch (uncompressed_pixel_format) {
+ case DP_PIXEL_ENCODING_TYPE_RGB444:
+ *encoding = PIXEL_ENCODING_RGB;
+ break;
+ case DP_PIXEL_ENCODING_TYPE_YCBCR422:
+ *encoding = PIXEL_ENCODING_YCBCR422;
+ break;
+ case DP_PIXEL_ENCODING_TYPE_YCBCR444:
+ case DP_PIXEL_ENCODING_TYPE_Y_ONLY:
+ *encoding = PIXEL_ENCODING_YCBCR444;
+ break;
+ case DP_PIXEL_ENCODING_TYPE_YCBCR420:
+ *encoding = PIXEL_ENCODING_YCBCR420;
+ break;
+ default:
+ *encoding = PIXEL_ENCODING_UNDEFINED;
+ break;
+ }
+ }
+
+ return true;
+}
+
static const struct stream_encoder_funcs dcn42_str_enc_funcs = {
.dp_set_stream_attribute =
enc401_stream_encoder_dp_set_stream_attribute,
.dig_connect_to_otg = enc1_dig_connect_to_otg,
.dig_source_otg = enc1_dig_source_otg,
- .dp_get_pixel_format = enc1_stream_encoder_dp_get_pixel_format,
+ .dp_get_pixel_format = enc42_dio_get_uncompressed_dp_pixel_format,
.enc_read_state = enc401_read_state,
.dp_set_dsc_config = NULL,
void enc42_reset_hdmi_stream_attribute(
struct stream_encoder *enc);
+
+bool enc42_dio_get_uncompressed_dp_pixel_format(
+ struct stream_encoder *enc,
+ enum dc_pixel_encoding *encoding,
+ enum dc_color_depth *depth);
+
#endif /* __DC_DIO_STREAM_ENCODER_DCN42_H__ */
static struct dce110_clk_src_regs clk_src_regs[5];
static const struct dce110_clk_src_shift cs_shift = {
- CS_COMMON_MASK_SH_LIST_DCN3_2(__SHIFT)
+ CS_COMMON_MASK_SH_LIST_DCN4_0_1(__SHIFT)
};
static const struct dce110_clk_src_mask cs_mask = {
- CS_COMMON_MASK_SH_LIST_DCN3_2(_MASK)
+ CS_COMMON_MASK_SH_LIST_DCN4_0_1(_MASK)
};
#define abm_regs_init(id)\
static struct dce110_clk_src_regs clk_src_regs[5];
static const struct dce110_clk_src_shift cs_shift = {
- CS_COMMON_MASK_SH_LIST_DCN3_1_4(__SHIFT)
+ CS_COMMON_MASK_SH_LIST_DCN4_0_1(__SHIFT)
};
static const struct dce110_clk_src_mask cs_mask = {
- CS_COMMON_MASK_SH_LIST_DCN3_1_4(_MASK)
+ CS_COMMON_MASK_SH_LIST_DCN4_0_1(_MASK)
};
#define abm_regs_init(id) \
ABM_DCN42_REG_LIST_RI(id)
if (!clk_src)
return NULL;
- if (dcn401_clk_src_construct(clk_src, ctx, bios, id,
- regs, &cs_shift, &cs_mask)) {
+ if (dcn401_clk_src_construct(clk_src, ctx, bios, id, regs, &cs_shift, &cs_mask)) {
clk_src->base.dp_clk_src = dp_clk_src;
return &clk_src->base;
}
SRII_ARR_2(PIXEL_RATE_CNTL, OTG, 0, index), \
SRII_ARR_2(PIXEL_RATE_CNTL, OTG, 1, index), \
SRII_ARR_2(PIXEL_RATE_CNTL, OTG, 2, index), \
- SRII_ARR_2(PIXEL_RATE_CNTL, OTG, 3, index)
+ SRII_ARR_2(PIXEL_RATE_CNTL, OTG, 3, index), \
+ SR_ARR(OTG_PIXEL_RATE_DIV, index)
/* ABM */
#define ABM_DCN42_REG_LIST_RI(id) \