if (should_program_abm) {
                                        if (*stream_update->abm_level == ABM_LEVEL_IMMEDIATE_DISABLE) {
-                                               pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm);
+                                               pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(
+                                                               pipe_ctx->stream_res.abm,
+                                                               pipe_ctx->stream->link->panel_cntl->inst);
                                        } else {
                                                pipe_ctx->stream_res.abm->funcs->set_abm_level(
                                                        pipe_ctx->stream_res.abm, stream->abm_level);
 
                                backlight_pwm_u16_16,
                                frame_ramp,
                                controller_id,
+                               link->panel_cntl->inst,
                                fw_set_brightness);
        }
 
        bool success = false;
 
        if (abm)
-               success = abm->funcs->set_abm_immediate_disable(abm);
+               success = abm->funcs->set_abm_immediate_disable(abm, link->panel_cntl->inst);
 
        return success;
 }
 
 
 #define MCP_DISABLE_ABM_IMMEDIATELY 255
 
-static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id)
+static bool dce_abm_set_pipe(struct abm *abm, uint32_t controller_id, uint32_t panel_inst)
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(abm);
        uint32_t rampingBoundary = 0xFFFF;
        struct dce_abm *abm_dce,
        uint32_t backlight_pwm_u16_16,
        uint32_t frame_ramp,
-       uint32_t controller_id)
+       uint32_t controller_id,
+       uint32_t panel_id)
 {
        unsigned int backlight_8_bit = 0;
        uint32_t s2;
                // Take MSB of fractional part since backlight is not max
                backlight_8_bit = (backlight_pwm_u16_16 >> 8) & 0xFF;
 
-       dce_abm_set_pipe(&abm_dce->base, controller_id);
+       dce_abm_set_pipe(&abm_dce->base, controller_id, panel_id);
 
        /* waitDMCUReadyForCmd */
        REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT,
        return true;
 }
 
-static bool dce_abm_immediate_disable(struct abm *abm)
+static bool dce_abm_immediate_disable(struct abm *abm, uint32_t panel_inst)
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(abm);
 
        if (abm->dmcu_is_running == false)
                return true;
 
-       dce_abm_set_pipe(abm, MCP_DISABLE_ABM_IMMEDIATELY);
+       dce_abm_set_pipe(abm, MCP_DISABLE_ABM_IMMEDIATELY, panel_inst);
 
        abm->stored_backlight_registers.BL_PWM_CNTL =
                REG_READ(BL_PWM_CNTL);
                unsigned int backlight_pwm_u16_16,
                unsigned int frame_ramp,
                unsigned int controller_id,
+               unsigned int panel_inst,
                bool fw_set_brightness)
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(abm);
                dmcu_set_backlight_level(abm_dce,
                                backlight_pwm_u16_16,
                                frame_ramp,
-                               controller_id);
+                               controller_id,
+                               panel_inst);
        else
                driver_set_backlight_level(abm_dce, backlight_pwm_u16_16);
 
 
 
 #define DISABLE_ABM_IMMEDIATELY 255
 
-static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst)
+static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst, uint32_t panel_inst)
 {
        union dmub_rb_cmd cmd;
        struct dc_context *dc = abm->ctx;
        cmd.abm_set_pipe.header.type = DMUB_CMD__ABM;
        cmd.abm_set_pipe.header.sub_type = DMUB_CMD__ABM_SET_PIPE;
        cmd.abm_set_pipe.abm_set_pipe_data.otg_inst = otg_inst;
+       cmd.abm_set_pipe.abm_set_pipe_data.panel_inst = panel_inst;
        cmd.abm_set_pipe.abm_set_pipe_data.ramping_boundary = ramping_boundary;
        cmd.abm_set_pipe.header.payload_bytes = sizeof(struct dmub_cmd_abm_set_pipe_data);
 
        struct dce_abm *dce_abm,
        uint32_t backlight_pwm_u16_16,
        uint32_t frame_ramp,
-       uint32_t otg_inst)
+       uint32_t otg_inst,
+       uint32_t panel_inst)
 {
        union dmub_rb_cmd cmd;
        struct dc_context *dc = dce_abm->base.ctx;
                // Take MSB of fractional part since backlight is not max
                backlight_8_bit = (backlight_pwm_u16_16 >> 8) & 0xFF;
 
-       dmub_abm_set_pipe(&dce_abm->base, otg_inst);
+       dmub_abm_set_pipe(&dce_abm->base, otg_inst, panel_inst);
 
        REG_UPDATE(BL1_PWM_USER_LEVEL, BL1_PWM_USER_LEVEL, backlight_pwm_u16_16);
 
        return true;
 }
 
-static bool dmub_abm_immediate_disable(struct abm *abm)
+static bool dmub_abm_immediate_disable(struct abm *abm, uint32_t panel_inst)
 {
        struct dce_abm *dce_abm = TO_DMUB_ABM(abm);
 
-       dmub_abm_set_pipe(abm, DISABLE_ABM_IMMEDIATELY);
+       dmub_abm_set_pipe(abm, DISABLE_ABM_IMMEDIATELY, panel_inst);
 
        abm->stored_backlight_registers.BL_PWM_CNTL =
                REG_READ(BL_PWM_CNTL);
                unsigned int backlight_pwm_u16_16,
                unsigned int frame_ramp,
                unsigned int otg_inst,
+               uint32_t panel_inst,
                bool fw_set_brightness)
 {
        struct dce_abm *dce_abm = TO_DMUB_ABM(abm);
        dmcub_set_backlight_level(dce_abm,
                        backlight_pwm_u16_16,
                        frame_ramp,
-                       otg_inst);
+                       otg_inst,
+                       panel_inst);
 
        return true;
 }
 
        if (pipe_ctx->top_pipe == NULL) {
 
                if (pipe_ctx->stream_res.abm)
-                       pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm);
+                       pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm,
+                                       pipe_ctx->stream->link->panel_cntl->inst);
 
                pipe_ctx->stream_res.tg->funcs->disable_crtc(pipe_ctx->stream_res.tg);
 
                if (stream_res->tg->funcs->set_blank)
                        stream_res->tg->funcs->set_blank(stream_res->tg, blank);
                if (stream_res->abm) {
-                       stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1);
+                       stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1,
+                                       stream->link->panel_cntl->inst);
                        stream_res->abm->funcs->set_abm_level(stream_res->abm, stream->abm_level);
                }
        } else if (blank) {
                if (stream_res->abm)
-                       stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm);
+                       stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm,
+                                       stream->link->panel_cntl->inst);
                if (stream_res->tg->funcs->set_blank)
                        stream_res->tg->funcs->set_blank(stream_res->tg, blank);
        }
 
 
        if (blank) {
                if (stream_res->abm)
-                       stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm);
+                       stream_res->abm->funcs->set_abm_immediate_disable(stream_res->abm,
+                                       stream->link->panel_cntl->inst);
 
                if (dc->debug.visual_confirm != VISUAL_CONFIRM_DISABLE) {
                        test_pattern = CONTROLLER_DP_TEST_PATTERN_COLORSQUARES;
 
        if (!blank)
                if (stream_res->abm) {
-                       stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1);
+                       stream_res->abm->funcs->set_pipe(stream_res->abm, stream_res->tg->inst + 1,
+                                       stream->link->panel_cntl->inst);
                        stream_res->abm->funcs->set_abm_level(stream_res->abm, stream->abm_level);
                }
 }
        if (pipe_ctx->top_pipe == NULL) {
 
                if (pipe_ctx->stream_res.abm)
-                       pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm);
+                       pipe_ctx->stream_res.abm->funcs->set_abm_immediate_disable(pipe_ctx->stream_res.abm,
+                                       pipe_ctx->stream->link->panel_cntl->inst);
 
                pipe_ctx->stream_res.tg->funcs->disable_crtc(pipe_ctx->stream_res.tg);
 
 
 struct abm_funcs {
        void (*abm_init)(struct abm *abm);
        bool (*set_abm_level)(struct abm *abm, unsigned int abm_level);
-       bool (*set_abm_immediate_disable)(struct abm *abm);
-       bool (*set_pipe)(struct abm *abm, unsigned int controller_id);
+       bool (*set_abm_immediate_disable)(struct abm *abm, unsigned int panel_inst);
+       bool (*set_pipe)(struct abm *abm, unsigned int controller_id, unsigned int panel_inst);
        bool (*init_backlight)(struct abm *abm);
 
        /* backlight_pwm_u16_16 is unsigned 32 bit,
                        unsigned int backlight_pwm_u16_16,
                        unsigned int frame_ramp,
                        unsigned int controller_id,
+                       unsigned int panel_inst,
                        bool fw_set_brightness);
 
        unsigned int (*get_current_backlight)(struct abm *abm);
 
 struct dmub_cmd_abm_set_pipe_data {
        uint32_t ramping_boundary;
        uint32_t otg_inst;
+       uint32_t panel_inst;
 };
 
 struct dmub_rb_cmd_abm_set_pipe {