uint32_t max_planes;
        uint32_t max_downscale_ratio;
        uint32_t i2c_speed_in_khz;
+       uint32_t i2c_speed_in_khz_hdcp;
        uint32_t dmdata_alloc_size;
        unsigned int max_cursor_size;
        unsigned int max_video_width;
 
        /* we have checked I2c not used by DMCU, set SW use I2C REQ to 1 to indicate SW using it*/
        REG_UPDATE(DC_I2C_ARBITRATION, DC_I2C_SW_USE_I2C_REG_REQ, 1);
 
+       /*set SW requested I2c speed to default, if API calls in it will be override later*/
+       set_speed(dce_i2c_hw, dce_i2c_hw->ctx->dc->caps.i2c_speed_in_khz);
+
        if (dce_i2c_hw->setup_limit != 0)
                i2c_setup_limit = dce_i2c_hw->setup_limit;
+
        /* Program pin select */
        REG_UPDATE_6(DC_I2C_CONTROL,
                     DC_I2C_GO, 0,
 {
        bool safe_to_reset;
 
-       /* Restore original HW engine speed */
-       set_speed(dce_i2c_hw, dce_i2c_hw->default_speed);
 
        /* Reset HW engine */
        {
        /* HW I2c engine - clock gating feature */
        if (!dce_i2c_hw->engine_keep_power_up_count)
                REG_UPDATE_N(SETUP, 1, FN(SETUP, DC_I2C_DDC1_ENABLE), 0);
+
+       /*for HW HDCP Ri polling failure w/a test*/
+       set_speed(dce_i2c_hw, dce_i2c_hw->ctx->dc->caps.i2c_speed_in_khz_hdcp);
        /* Release I2C after reset, so HW or DMCU could use it */
        REG_UPDATE_2(DC_I2C_ARBITRATION, DC_I2C_SW_DONE_USING_I2C_REG, 1,
                DC_I2C_SW_USE_I2C_REG_REQ, 0);
 
        pool->base.timing_generator_count = pool->base.res_cap->num_timing_generator;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 40;
+       dc->caps.i2c_speed_in_khz = 40;
        dc->caps.max_cursor_size = 128;
        dc->caps.dual_link_dvi = true;
        dc->caps.disable_dp_clk_share = true;
 
        pool->base.underlay_pipe_index = pool->base.pipe_count;
        pool->base.timing_generator_count = pool->base.res_cap->num_timing_generator;
        dc->caps.max_downscale_ratio = 150;
-       dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz = 40;
+       dc->caps.i2c_speed_in_khz_hdcp = 40;
        dc->caps.max_cursor_size = 128;
        dc->caps.is_apu = true;
        dc->caps.extended_aux_timeout_support = false;
 
        pool->base.timing_generator_count = pool->base.res_cap->num_timing_generator;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 100; /*1.4 w/a not applied by default*/
        dc->caps.max_cursor_size = 128;
        dc->caps.dual_link_dvi = true;
        dc->caps.extended_aux_timeout_support = false;
 
 
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 100; /*1.4 w/a not applied by default*/
        dc->caps.max_cursor_size = 128;
        dc->caps.dual_link_dvi = true;
        dc->caps.psp_setup_panel_mode = true;
 
        pool->base.timing_generator_count = res_cap.num_timing_generator;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 40;
+       dc->caps.i2c_speed_in_khz_hdcp = 40;
        dc->caps.max_cursor_size = 128;
        dc->caps.dual_link_dvi = true;
        dc->caps.extended_aux_timeout_support = false;
        pool->base.timing_generator_count = res_cap_81.num_timing_generator;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 40;
+       dc->caps.i2c_speed_in_khz_hdcp = 40;
        dc->caps.max_cursor_size = 128;
        dc->caps.is_apu = true;
 
        pool->base.timing_generator_count = res_cap_83.num_timing_generator;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 40;
+       dc->caps.i2c_speed_in_khz_hdcp = 40;
        dc->caps.max_cursor_size = 128;
        dc->caps.is_apu = true;
 
 
        dc->caps.max_video_width = 3840;
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 100; /*1.4 w/a not applied by default*/
        dc->caps.max_cursor_size = 256;
        dc->caps.max_slave_planes = 1;
        dc->caps.is_apu = true;
 
 
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 100; /*1.4 w/a not applied by default*/
        dc->caps.max_cursor_size = 256;
        dc->caps.dmdata_alloc_size = 2048;
 
 
 
        dc->caps.max_downscale_ratio = 200;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 5; /*1.4 w/a applied by default*/
        dc->caps.max_cursor_size = 256;
        dc->caps.dmdata_alloc_size = 2048;
 
 
        pool->base.mpcc_count = pool->base.res_cap->num_timing_generator;
        dc->caps.max_downscale_ratio = 600;
        dc->caps.i2c_speed_in_khz = 100;
+       dc->caps.i2c_speed_in_khz_hdcp = 100; /*1.4 w/a not applied by default*/
        dc->caps.max_cursor_size = 256;
        dc->caps.dmdata_alloc_size = 2048;