summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
diff options
context:
space:
mode:
authorjames qian wang (Arm Technology China)2019-05-23 11:36:38 +0200
committerLiviu Dudau2019-06-19 12:42:16 +0200
commit5d51f6c0da1b563e2f8eb5022a4d7748aa687be4 (patch)
tree5b64db60a37ddf437a493d5b96096f9648fed90c /drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
parentMerge v5.2-rc5 into drm-next (diff)
downloadkernel-qcow2-linux-5d51f6c0da1b563e2f8eb5022a4d7748aa687be4.tar.gz
kernel-qcow2-linux-5d51f6c0da1b563e2f8eb5022a4d7748aa687be4.tar.xz
kernel-qcow2-linux-5d51f6c0da1b563e2f8eb5022a4d7748aa687be4.zip
drm/komeda: Add writeback support
Komeda driver uses a individual component to describe the HW's writeback caps, but drivers doesn't define a new structure and still uses the existing "struct komeda_layer" to describe this new component. The detailed changes as follow: 1. Initialize wb_layer according to HW and report it to CORE. 2. CORE exposes wb_layer as a resource to KMS by private_obj. 3. Report writeback supporting by add a wb_connector to KMS, and then wb_connector will take act as a component resources user, so the func komeda_wb_encoder_atomic_check claims komeda resources (scaler and wb_layer) accroding to its state configuration to the wb_connector. and the wb_state configuration will be validated on the specific component resources to see if the caps of component can meet the requirement of wb_connector. if not check failed. 4. Update irq_handler to notify the completion of writeback. NOTE: This change doesn't add scaling writeback support, that support will be added in the future after the scaler support. v2: Rebase v3: Rebase and constify the d71_wb_layer_funcs v4: Addressed Ayan's comments Depends on: - https://patchwork.freedesktop.org/series/59915/ Signed-off-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com> Acked-by: Ayan Kumar Halder <ayan.halder@arm.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Diffstat (limited to 'drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c')
-rw-r--r--drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
index 9cc9935024f7..4d8160cf09c3 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
@@ -165,3 +165,22 @@ komeda_fb_get_pixel_addr(struct komeda_fb *kfb, int x, int y, int plane)
return obj->paddr + offset;
}
+
+/* if the fb can be supported by a specific layer */
+bool komeda_fb_is_layer_supported(struct komeda_fb *kfb, u32 layer_type)
+{
+ struct drm_framebuffer *fb = &kfb->base;
+ struct komeda_dev *mdev = fb->dev->dev_private;
+ const struct komeda_format_caps *caps;
+ u32 fourcc = fb->format->format;
+ u64 modifier = fb->modifier;
+
+ caps = komeda_get_format_caps(&mdev->fmt_tbl, fourcc, modifier);
+ if (!caps)
+ return false;
+
+ if (!(caps->supported_layer_types & layer_type))
+ return false;
+
+ return true;
+}