priv->viu.osd1_blk0_cfg[0] |= OSD_BLK_MODE_32 |
                                              OSD_COLOR_MATRIX_32_ARGB;
                break;
+       case DRM_FORMAT_XBGR8888:
+               /* For XRGB, replace the pixel's alpha by 0xFF */
+               writel_bits_relaxed(OSD_REPLACE_EN, OSD_REPLACE_EN,
+                                   priv->io_base + _REG(VIU_OSD1_CTRL_STAT2));
+               priv->viu.osd1_blk0_cfg[0] |= OSD_BLK_MODE_32 |
+                                             OSD_COLOR_MATRIX_32_ABGR;
+               break;
        case DRM_FORMAT_ARGB8888:
                /* For ARGB, use the pixel's alpha */
                writel_bits_relaxed(OSD_REPLACE_EN, 0,
                priv->viu.osd1_blk0_cfg[0] |= OSD_BLK_MODE_32 |
                                              OSD_COLOR_MATRIX_32_ARGB;
                break;
+       case DRM_FORMAT_ABGR8888:
+               /* For ARGB, use the pixel's alpha */
+               writel_bits_relaxed(OSD_REPLACE_EN, 0,
+                                   priv->io_base + _REG(VIU_OSD1_CTRL_STAT2));
+               priv->viu.osd1_blk0_cfg[0] |= OSD_BLK_MODE_32 |
+                                             OSD_COLOR_MATRIX_32_ABGR;
+               break;
        case DRM_FORMAT_RGB888:
                priv->viu.osd1_blk0_cfg[0] |= OSD_BLK_MODE_24 |
                                              OSD_COLOR_MATRIX_24_RGB;
 
 static const uint32_t supported_drm_formats[] = {
        DRM_FORMAT_ARGB8888,
+       DRM_FORMAT_ABGR8888,
        DRM_FORMAT_XRGB8888,
+       DRM_FORMAT_XBGR8888,
        DRM_FORMAT_RGB888,
        DRM_FORMAT_RGB565,
 };