|
@@ -126,12 +126,43 @@ static const struct drm_crtc_helper_funcs bochs_helper_funcs = {
|
|
|
.commit = bochs_crtc_commit,
|
|
|
};
|
|
|
|
|
|
+static const uint32_t bochs_formats[] = {
|
|
|
+ DRM_FORMAT_HOST_XRGB8888,
|
|
|
+};
|
|
|
+
|
|
|
+static struct drm_plane *bochs_primary_plane(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct drm_plane *primary;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ primary = kzalloc(sizeof(*primary), GFP_KERNEL);
|
|
|
+ if (primary == NULL) {
|
|
|
+ DRM_DEBUG_KMS("Failed to allocate primary plane\n");
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = drm_universal_plane_init(dev, primary, 0,
|
|
|
+ &drm_primary_helper_funcs,
|
|
|
+ bochs_formats,
|
|
|
+ ARRAY_SIZE(bochs_formats),
|
|
|
+ NULL,
|
|
|
+ DRM_PLANE_TYPE_PRIMARY, NULL);
|
|
|
+ if (ret) {
|
|
|
+ kfree(primary);
|
|
|
+ primary = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return primary;
|
|
|
+}
|
|
|
+
|
|
|
static void bochs_crtc_init(struct drm_device *dev)
|
|
|
{
|
|
|
struct bochs_device *bochs = dev->dev_private;
|
|
|
struct drm_crtc *crtc = &bochs->crtc;
|
|
|
+ struct drm_plane *primary = bochs_primary_plane(dev);
|
|
|
|
|
|
- drm_crtc_init(dev, crtc, &bochs_crtc_funcs);
|
|
|
+ drm_crtc_init_with_planes(dev, crtc, primary, NULL,
|
|
|
+ &bochs_crtc_funcs, NULL);
|
|
|
drm_crtc_helper_add(crtc, &bochs_helper_funcs);
|
|
|
}
|
|
|
|
|
@@ -250,6 +281,7 @@ int bochs_kms_init(struct bochs_device *bochs)
|
|
|
bochs->dev->mode_config.fb_base = bochs->fb_base;
|
|
|
bochs->dev->mode_config.preferred_depth = 24;
|
|
|
bochs->dev->mode_config.prefer_shadow = 0;
|
|
|
+ bochs->dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
|
|
|
|
|
|
bochs->dev->mode_config.funcs = &bochs_mode_funcs;
|
|
|
|