#define        OVL_CON_AEN             BIT(8)
 #define        OVL_CON_ALPHA           0xff
 #define        OVL_CON_VIRT_FLIP       BIT(9)
+#define        OVL_CON_HORZ_FLIP       BIT(10)
 
 struct mtk_disp_ovl_data {
        unsigned int addr;
 
 static unsigned int mtk_ovl_supported_rotations(struct mtk_ddp_comp *comp)
 {
-       return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y;
+       return DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y |
+              DRM_MODE_REFLECT_X;
 }
 
 static int mtk_ovl_layer_check(struct mtk_ddp_comp *comp, unsigned int idx,
 
        rotation = drm_rotation_simplify(state->rotation,
                                         DRM_MODE_ROTATE_0 |
+                                        DRM_MODE_REFLECT_X |
                                         DRM_MODE_REFLECT_Y);
        rotation &= ~DRM_MODE_ROTATE_0;
 
                addr += (pending->height - 1) * pending->pitch;
        }
 
+       if (pending->rotation & DRM_MODE_REFLECT_X) {
+               con |= OVL_CON_HORZ_FLIP;
+               addr += pending->pitch - 1;
+       }
+
        writel_relaxed(con, comp->regs + DISP_REG_OVL_CON(idx));
        writel_relaxed(pitch, comp->regs + DISP_REG_OVL_PITCH(idx));
        writel_relaxed(src_size, comp->regs + DISP_REG_OVL_SRC_SIZE(idx));