All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2 0/7] drm/omap: misc improvements
@ 2019-09-30 10:38 Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 1/7] drm/omap: drop unneeded locking from mgr_fld_write() Tomi Valkeinen
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

Hi,

This is v2 of the series. Changes compared to v1:

Dropped (Jyri will work on them):
 - drm/omap: Implement CTM property for CRTC using OVL managers CPR matrix
 - drm/omap: Enable COLOR_ENCODING and COLOR_RANGE properties for planes

Added:
 - drm/omap: avoid copy in mgr_fld_read/write
 - drm/omap: hdmi4: fix use of uninitialized var

Fixed the issues pointed out by Laurent.

 Tomi

Alejandro Hernandez (1):
  drm/omap: tweak HDMI DDC timings

Jyri Sarha (1):
  drm/omap: dss: move platform_register_drivers() to dss.c and remove
    core.c

Tomi Valkeinen (5):
  drm/omap: drop unneeded locking from mgr_fld_write()
  drm/omap: avoid copy in mgr_fld_read/write
  drm/omap: fix missing scaler pixel fmt limitations
  drm/omap: hdmi5: automatically choose limited/full range output
  drm/omap: hdmi4: fix use of uninitialized var

 drivers/gpu/drm/omapdrm/dss/Makefile     |   2 +-
 drivers/gpu/drm/omapdrm/dss/core.c       |  55 ----------
 drivers/gpu/drm/omapdrm/dss/dispc.c      |  46 ++++++---
 drivers/gpu/drm/omapdrm/dss/dss.c        |  37 +++++++
 drivers/gpu/drm/omapdrm/dss/hdmi4_core.c |   5 +-
 drivers/gpu/drm/omapdrm/dss/hdmi5_core.c | 125 ++++++++++++-----------
 6 files changed, 137 insertions(+), 133 deletions(-)
 delete mode 100644 drivers/gpu/drm/omapdrm/dss/core.c

-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCHv2 1/7] drm/omap: drop unneeded locking from mgr_fld_write()
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write Tomi Valkeinen
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

Commit d49cd15550d9d4495f6187425318c245d58cb63f ("OMAPDSS: DISPC: lock
access to DISPC_CONTROL & DISPC_CONFIG") added locking to
mgr_fld_write(). This was needed in omapfb times due to lack of good
locking, especially in the case of both V4L2 and fbdev layers using the
DSS driver.

This is not needed for omapdrm, so we can remove the locking.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 785c5546067a..0dc0272569f6 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -184,9 +184,6 @@ struct dispc_device {
 
 	struct regmap *syscon_pol;
 	u32 syscon_pol_offset;
-
-	/* DISPC_CONTROL & DISPC_CONFIG lock*/
-	spinlock_t control_lock;
 };
 
 enum omap_color_component {
@@ -377,16 +374,8 @@ static void mgr_fld_write(struct dispc_device *dispc, enum omap_channel channel,
 			  enum mgr_reg_fields regfld, int val)
 {
 	const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
-	const bool need_lock = rfld.reg == DISPC_CONTROL || rfld.reg == DISPC_CONFIG;
-	unsigned long flags;
 
-	if (need_lock) {
-		spin_lock_irqsave(&dispc->control_lock, flags);
-		REG_FLD_MOD(dispc, rfld.reg, val, rfld.high, rfld.low);
-		spin_unlock_irqrestore(&dispc->control_lock, flags);
-	} else {
-		REG_FLD_MOD(dispc, rfld.reg, val, rfld.high, rfld.low);
-	}
+	REG_FLD_MOD(dispc, rfld.reg, val, rfld.high, rfld.low);
 }
 
 static int dispc_get_num_ovls(struct dispc_device *dispc)
@@ -4769,8 +4758,6 @@ static int dispc_bind(struct device *dev, struct device *master, void *data)
 	platform_set_drvdata(pdev, dispc);
 	dispc->dss = dss;
 
-	spin_lock_init(&dispc->control_lock);
-
 	/*
 	 * The OMAP3-based models can't be told apart using the compatible
 	 * string, use SoC device matching.
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 1/7] drm/omap: drop unneeded locking from mgr_fld_write() Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-10-04  7:02   ` Laurent Pinchart
  2019-09-30 10:38 ` [PATCHv2 3/7] drm/omap: tweak HDMI DDC timings Tomi Valkeinen
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

Avoid unnecessary copy in mgr_fld_read/write by taking a pointer to the
reg_resc and using that.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 0dc0272569f6..3c9315b17ef2 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -365,17 +365,17 @@ static inline u32 dispc_read_reg(struct dispc_device *dispc, u16 idx)
 static u32 mgr_fld_read(struct dispc_device *dispc, enum omap_channel channel,
 			enum mgr_reg_fields regfld)
 {
-	const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
+	const struct dispc_reg_field *rfld = &mgr_desc[channel].reg_desc[regfld];
 
-	return REG_GET(dispc, rfld.reg, rfld.high, rfld.low);
+	return REG_GET(dispc, rfld->reg, rfld->high, rfld->low);
 }
 
 static void mgr_fld_write(struct dispc_device *dispc, enum omap_channel channel,
 			  enum mgr_reg_fields regfld, int val)
 {
-	const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
+	const struct dispc_reg_field *rfld = &mgr_desc[channel].reg_desc[regfld];
 
-	REG_FLD_MOD(dispc, rfld.reg, val, rfld.high, rfld.low);
+	REG_FLD_MOD(dispc, rfld->reg, val, rfld->high, rfld->low);
 }
 
 static int dispc_get_num_ovls(struct dispc_device *dispc)
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 3/7] drm/omap: tweak HDMI DDC timings
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 1/7] drm/omap: drop unneeded locking from mgr_fld_write() Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 4/7] drm/omap: fix missing scaler pixel fmt limitations Tomi Valkeinen
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart
  Cc: Alejandro Hernandez, Tomi Valkeinen, Jyri Sarha

From: Alejandro Hernandez <ajhernandez@ti.com>

A "HDMI I2C Master Error" is sometimes reported with the current DDC SCL
timings. The current settings for a 10us SCL period (100 KHz) causes the
error with some displays.  This patch increases the SCL signal period
from 10us to 10.2us, with the new settings the error is not observed

Signed-off-by: Alejandro Hernandez <ajhernandez@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi5_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
index 7400fb99d453..4c588ec7634a 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
@@ -39,8 +39,8 @@ static void hdmi_core_ddc_init(struct hdmi_core_data *core)
 {
 	void __iomem *base = core->base;
 	const unsigned long long iclk = 266000000;	/* DSS L3 ICLK */
-	const unsigned int ss_scl_high = 4600;		/* ns */
-	const unsigned int ss_scl_low = 5400;		/* ns */
+	const unsigned int ss_scl_high = 4700;		/* ns */
+	const unsigned int ss_scl_low = 5500;		/* ns */
 	const unsigned int fs_scl_high = 600;		/* ns */
 	const unsigned int fs_scl_low = 1300;		/* ns */
 	const unsigned int sda_hold = 1000;		/* ns */
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 4/7] drm/omap: fix missing scaler pixel fmt limitations
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
                   ` (2 preceding siblings ...)
  2019-09-30 10:38 ` [PATCHv2 3/7] drm/omap: tweak HDMI DDC timings Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 5/7] drm/omap: dss: move platform_register_drivers() to dss.c and remove core.c Tomi Valkeinen
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

OMAP2 and OMAP3/AM4 have limitations with the scaler:
- OMAP2 can only scale XRGB8888
- OMAP3/AM4 can only scale XRGB8888, RGB565, YUYV and UYVY

The driver doesn't check these limitations, which leads to sync-lost
floods.

This patch adds a check for the pixel formats when scaling.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/dispc.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 3c9315b17ef2..c19e0af33013 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -114,6 +114,7 @@ struct dispc_features {
 	const unsigned int num_reg_fields;
 	const enum omap_overlay_caps *overlay_caps;
 	const u32 **supported_color_modes;
+	const u32 *supported_scaler_color_modes;
 	unsigned int num_mgrs;
 	unsigned int num_ovls;
 	unsigned int buffer_size_unit;
@@ -2499,6 +2500,19 @@ static int dispc_ovl_calc_scaling(struct dispc_device *dispc,
 	if (width == out_width && height == out_height)
 		return 0;
 
+	if (dispc->feat->supported_scaler_color_modes) {
+		const u32 *modes = dispc->feat->supported_scaler_color_modes;
+		unsigned int i;
+
+		for (i = 0; modes[i]; ++i) {
+			if (modes[i] == fourcc)
+				break;
+		}
+
+		if (modes[i] == 0)
+			return -EINVAL;
+	}
+
 	if (plane == OMAP_DSS_WB) {
 		switch (fourcc) {
 		case DRM_FORMAT_NV12:
@@ -4214,6 +4228,12 @@ static const u32 *omap4_dispc_supported_color_modes[] = {
 	DRM_FORMAT_RGBX8888),
 };
 
+static const u32 omap3_dispc_supported_scaler_color_modes[] = {
+	DRM_FORMAT_XRGB8888, DRM_FORMAT_RGB565, DRM_FORMAT_YUYV,
+	DRM_FORMAT_UYVY,
+	0,
+};
+
 static const struct dispc_features omap24xx_dispc_feats = {
 	.sw_start		=	5,
 	.fp_start		=	15,
@@ -4242,6 +4262,7 @@ static const struct dispc_features omap24xx_dispc_feats = {
 	.num_reg_fields		=	ARRAY_SIZE(omap2_dispc_reg_fields),
 	.overlay_caps		=	omap2_dispc_overlay_caps,
 	.supported_color_modes	=	omap2_dispc_supported_color_modes,
+	.supported_scaler_color_modes = COLOR_ARRAY(DRM_FORMAT_XRGB8888),
 	.num_mgrs		=	2,
 	.num_ovls		=	3,
 	.buffer_size_unit	=	1,
@@ -4276,6 +4297,7 @@ static const struct dispc_features omap34xx_rev1_0_dispc_feats = {
 	.num_reg_fields		=	ARRAY_SIZE(omap3_dispc_reg_fields),
 	.overlay_caps		=	omap3430_dispc_overlay_caps,
 	.supported_color_modes	=	omap3_dispc_supported_color_modes,
+	.supported_scaler_color_modes = omap3_dispc_supported_scaler_color_modes,
 	.num_mgrs		=	2,
 	.num_ovls		=	3,
 	.buffer_size_unit	=	1,
@@ -4310,6 +4332,7 @@ static const struct dispc_features omap34xx_rev3_0_dispc_feats = {
 	.num_reg_fields		=	ARRAY_SIZE(omap3_dispc_reg_fields),
 	.overlay_caps		=	omap3430_dispc_overlay_caps,
 	.supported_color_modes	=	omap3_dispc_supported_color_modes,
+	.supported_scaler_color_modes = omap3_dispc_supported_scaler_color_modes,
 	.num_mgrs		=	2,
 	.num_ovls		=	3,
 	.buffer_size_unit	=	1,
@@ -4344,6 +4367,7 @@ static const struct dispc_features omap36xx_dispc_feats = {
 	.num_reg_fields		=	ARRAY_SIZE(omap3_dispc_reg_fields),
 	.overlay_caps		=	omap3630_dispc_overlay_caps,
 	.supported_color_modes	=	omap3_dispc_supported_color_modes,
+	.supported_scaler_color_modes = omap3_dispc_supported_scaler_color_modes,
 	.num_mgrs		=	2,
 	.num_ovls		=	3,
 	.buffer_size_unit	=	1,
@@ -4378,6 +4402,7 @@ static const struct dispc_features am43xx_dispc_feats = {
 	.num_reg_fields		=	ARRAY_SIZE(omap3_dispc_reg_fields),
 	.overlay_caps		=	omap3430_dispc_overlay_caps,
 	.supported_color_modes	=	omap3_dispc_supported_color_modes,
+	.supported_scaler_color_modes = omap3_dispc_supported_scaler_color_modes,
 	.num_mgrs		=	1,
 	.num_ovls		=	3,
 	.buffer_size_unit	=	1,
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 5/7] drm/omap: dss: move platform_register_drivers() to dss.c and remove core.c
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
                   ` (3 preceding siblings ...)
  2019-09-30 10:38 ` [PATCHv2 4/7] drm/omap: fix missing scaler pixel fmt limitations Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 6/7] drm/omap: hdmi5: automatically choose limited/full range output Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var Tomi Valkeinen
  6 siblings, 0 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

From: Jyri Sarha <jsarha@ti.com>

The core.c just for registering the drivers is kind of useless. Let's
get rid of it and register the dss drivers in dss.c.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/Makefile |  2 +-
 drivers/gpu/drm/omapdrm/dss/core.c   | 55 ----------------------------
 drivers/gpu/drm/omapdrm/dss/dss.c    | 37 +++++++++++++++++++
 3 files changed, 38 insertions(+), 56 deletions(-)
 delete mode 100644 drivers/gpu/drm/omapdrm/dss/core.c

diff --git a/drivers/gpu/drm/omapdrm/dss/Makefile b/drivers/gpu/drm/omapdrm/dss/Makefile
index 904101c5e79d..5950c3f52c2e 100644
--- a/drivers/gpu/drm/omapdrm/dss/Makefile
+++ b/drivers/gpu/drm/omapdrm/dss/Makefile
@@ -6,7 +6,7 @@ omapdss-base-y := base.o display.o dss-of.o output.o
 
 obj-$(CONFIG_OMAP2_DSS) += omapdss.o
 # Core DSS files
-omapdss-y := core.o dss.o dispc.o dispc_coefs.o \
+omapdss-y := dss.o dispc.o dispc_coefs.o \
 	pll.o video-pll.o
 omapdss-$(CONFIG_OMAP2_DSS_DPI) += dpi.o
 omapdss-$(CONFIG_OMAP2_DSS_VENC) += venc.o
diff --git a/drivers/gpu/drm/omapdrm/dss/core.c b/drivers/gpu/drm/omapdrm/dss/core.c
deleted file mode 100644
index 6ac497b63711..000000000000
--- a/drivers/gpu/drm/omapdrm/dss/core.c
+++ /dev/null
@@ -1,55 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2009 Nokia Corporation
- * Author: Tomi Valkeinen <tomi.valkeinen@ti.com>
- *
- * Some code and ideas taken from drivers/video/omap/ driver
- * by Imre Deak.
- */
-
-#define DSS_SUBSYS_NAME "CORE"
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-
-#include "omapdss.h"
-#include "dss.h"
-
-/* INIT */
-static struct platform_driver * const omap_dss_drivers[] = {
-	&omap_dsshw_driver,
-	&omap_dispchw_driver,
-#ifdef CONFIG_OMAP2_DSS_DSI
-	&omap_dsihw_driver,
-#endif
-#ifdef CONFIG_OMAP2_DSS_VENC
-	&omap_venchw_driver,
-#endif
-#ifdef CONFIG_OMAP4_DSS_HDMI
-	&omapdss_hdmi4hw_driver,
-#endif
-#ifdef CONFIG_OMAP5_DSS_HDMI
-	&omapdss_hdmi5hw_driver,
-#endif
-};
-
-static int __init omap_dss_init(void)
-{
-	return platform_register_drivers(omap_dss_drivers,
-					 ARRAY_SIZE(omap_dss_drivers));
-}
-
-static void __exit omap_dss_exit(void)
-{
-	platform_unregister_drivers(omap_dss_drivers,
-				    ARRAY_SIZE(omap_dss_drivers));
-}
-
-module_init(omap_dss_init);
-module_exit(omap_dss_exit);
-
-MODULE_AUTHOR("Tomi Valkeinen <tomi.valkeinen@ti.com>");
-MODULE_DESCRIPTION("OMAP2/3 Display Subsystem");
-MODULE_LICENSE("GPL v2");
-
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c
index e226324adb69..41d495a360d8 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -1598,3 +1598,40 @@ struct platform_driver omap_dsshw_driver = {
 		.suppress_bind_attrs = true,
 	},
 };
+
+/* INIT */
+static struct platform_driver * const omap_dss_drivers[] = {
+	&omap_dsshw_driver,
+	&omap_dispchw_driver,
+#ifdef CONFIG_OMAP2_DSS_DSI
+	&omap_dsihw_driver,
+#endif
+#ifdef CONFIG_OMAP2_DSS_VENC
+	&omap_venchw_driver,
+#endif
+#ifdef CONFIG_OMAP4_DSS_HDMI
+	&omapdss_hdmi4hw_driver,
+#endif
+#ifdef CONFIG_OMAP5_DSS_HDMI
+	&omapdss_hdmi5hw_driver,
+#endif
+};
+
+static int __init omap_dss_init(void)
+{
+	return platform_register_drivers(omap_dss_drivers,
+					 ARRAY_SIZE(omap_dss_drivers));
+}
+
+static void __exit omap_dss_exit(void)
+{
+	platform_unregister_drivers(omap_dss_drivers,
+				    ARRAY_SIZE(omap_dss_drivers));
+}
+
+module_init(omap_dss_init);
+module_exit(omap_dss_exit);
+
+MODULE_AUTHOR("Tomi Valkeinen <tomi.valkeinen@ti.com>");
+MODULE_DESCRIPTION("OMAP2/3/4/5 Display Subsystem");
+MODULE_LICENSE("GPL v2");
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 6/7] drm/omap: hdmi5: automatically choose limited/full range output
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
                   ` (4 preceding siblings ...)
  2019-09-30 10:38 ` [PATCHv2 5/7] drm/omap: dss: move platform_register_drivers() to dss.c and remove core.c Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-09-30 10:38 ` [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var Tomi Valkeinen
  6 siblings, 0 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

Currently the HDMI driver uses always limited range RGB output. This
patch improves the behavior by using limited range only if the output is
identified as a HDMI display, and VIC > 1.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi5_core.c | 121 ++++++++++++-----------
 1 file changed, 65 insertions(+), 56 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
index 4c588ec7634a..96f5cd17768c 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
@@ -23,18 +23,6 @@
 
 #include "hdmi5_core.h"
 
-/* only 24 bit color depth used for now */
-static const struct csc_table csc_table_deepcolor[] = {
-	/* HDMI_DEEP_COLOR_24BIT */
-	[0] = { 7036, 0, 0, 32, 0, 7036, 0, 32, 0, 0, 7036, 32, },
-	/* HDMI_DEEP_COLOR_30BIT */
-	[1] = { 7015, 0, 0, 128, 0, 7015, 0, 128, 0, 0, 7015, 128, },
-	/* HDMI_DEEP_COLOR_36BIT */
-	[2] = { 7010, 0, 0, 512, 0, 7010, 0, 512, 0, 0, 7010, 512, },
-	/* FULL RANGE */
-	[3] = { 8192, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 8192, 0, },
-};
-
 static void hdmi_core_ddc_init(struct hdmi_core_data *core)
 {
 	void __iomem *base = core->base;
@@ -397,14 +385,6 @@ static void hdmi_core_config_video_packetizer(struct hdmi_core_data *core)
 	REG_FLD_MOD(base, HDMI_CORE_VP_CONF, clr_depth ? 0 : 2, 1, 0);
 }
 
-static void hdmi_core_config_csc(struct hdmi_core_data *core)
-{
-	int clr_depth = 0;	/* 24 bit color depth */
-
-	/* CSC_COLORDEPTH */
-	REG_FLD_MOD(core->base, HDMI_CORE_CSC_SCALE, clr_depth, 7, 4);
-}
-
 static void hdmi_core_config_video_sampler(struct hdmi_core_data *core)
 {
 	int video_mapping = 1;	/* for 24 bit color depth */
@@ -469,47 +449,67 @@ static void hdmi_core_write_avi_infoframe(struct hdmi_core_data *core,
 	REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, pr, 3, 0);
 }
 
-static void hdmi_core_csc_config(struct hdmi_core_data *core,
-		struct csc_table csc_coeff)
+static void hdmi_core_write_csc(struct hdmi_core_data *core,
+		const struct csc_table *csc_coeff)
 {
 	void __iomem *base = core->base;
 
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A1_MSB, csc_coeff.a1 >> 8 , 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A1_LSB, csc_coeff.a1, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A2_MSB, csc_coeff.a2 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A2_LSB, csc_coeff.a2, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A3_MSB, csc_coeff.a3 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A3_LSB, csc_coeff.a3, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A4_MSB, csc_coeff.a4 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A4_LSB, csc_coeff.a4, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B1_MSB, csc_coeff.b1 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B1_LSB, csc_coeff.b1, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B2_MSB, csc_coeff.b2 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B2_LSB, csc_coeff.b2, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B3_MSB, csc_coeff.b3 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B3_LSB, csc_coeff.b3, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B4_MSB, csc_coeff.b4 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B4_LSB, csc_coeff.b4, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C1_MSB, csc_coeff.c1 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C1_LSB, csc_coeff.c1, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C2_MSB, csc_coeff.c2 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C2_LSB, csc_coeff.c2, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C3_MSB, csc_coeff.c3 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C3_LSB, csc_coeff.c3, 7, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C4_MSB, csc_coeff.c4 >> 8, 6, 0);
-	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C4_LSB, csc_coeff.c4, 7, 0);
-
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A1_MSB, csc_coeff->a1 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A1_LSB, csc_coeff->a1, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A2_MSB, csc_coeff->a2 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A2_LSB, csc_coeff->a2, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A3_MSB, csc_coeff->a3 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A3_LSB, csc_coeff->a3, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A4_MSB, csc_coeff->a4 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_A4_LSB, csc_coeff->a4, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B1_MSB, csc_coeff->b1 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B1_LSB, csc_coeff->b1, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B2_MSB, csc_coeff->b2 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B2_LSB, csc_coeff->b2, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B3_MSB, csc_coeff->b3 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B3_LSB, csc_coeff->b3, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B4_MSB, csc_coeff->b4 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_B4_LSB, csc_coeff->b4, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C1_MSB, csc_coeff->c1 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C1_LSB, csc_coeff->c1, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C2_MSB, csc_coeff->c2 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C2_LSB, csc_coeff->c2, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C3_MSB, csc_coeff->c3 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C3_LSB, csc_coeff->c3, 7, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C4_MSB, csc_coeff->c4 >> 8, 6, 0);
+	REG_FLD_MOD(base, HDMI_CORE_CSC_COEF_C4_LSB, csc_coeff->c4, 7, 0);
+
+	/* enable CSC */
 	REG_FLD_MOD(base, HDMI_CORE_MC_FLOWCTRL, 0x1, 0, 0);
 }
 
-static void hdmi_core_configure_range(struct hdmi_core_data *core)
+static void hdmi_core_configure_range(struct hdmi_core_data *core,
+				      enum hdmi_quantization_range range)
 {
-	struct csc_table csc_coeff = { 0 };
+	static const struct csc_table csc_limited_range = {
+		7036, 0, 0, 32, 0, 7036, 0, 32, 0, 0, 7036, 32
+	};
+	static const struct csc_table csc_full_range = {
+		8192, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 8192, 0
+	};
+	const struct csc_table *csc_coeff;
+
+	/* CSC_COLORDEPTH  = 24 bits*/
+	REG_FLD_MOD(core->base, HDMI_CORE_CSC_SCALE, 0, 7, 4);
+
+	switch (range) {
+	case HDMI_QUANTIZATION_RANGE_FULL:
+		csc_coeff = &csc_full_range;
+		break;
 
-	/* support limited range with 24 bit color depth for now */
-	csc_coeff = csc_table_deepcolor[0];
+	case HDMI_QUANTIZATION_RANGE_DEFAULT:
+	case HDMI_QUANTIZATION_RANGE_LIMITED:
+	default:
+		csc_coeff = &csc_limited_range;
+		break;
+	}
 
-	hdmi_core_csc_config(core, csc_coeff);
+	hdmi_core_write_csc(core, csc_coeff);
 }
 
 static void hdmi_core_enable_video_path(struct hdmi_core_data *core)
@@ -600,9 +600,20 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
 	struct videomode vm;
 	struct hdmi_video_format video_format;
 	struct hdmi_core_vid_config v_core_cfg;
+	enum hdmi_quantization_range range;
 
 	hdmi_core_mask_interrupts(core);
 
+	if (cfg->hdmi_dvi_mode == HDMI_HDMI) {
+		char vic = cfg->infoframe.video_code;
+
+		/* All CEA modes other than VIC 1 use limited quantization range. */
+		range = vic > 1 ? HDMI_QUANTIZATION_RANGE_LIMITED :
+			HDMI_QUANTIZATION_RANGE_FULL;
+	} else {
+		range = HDMI_QUANTIZATION_RANGE_FULL;
+	}
+
 	hdmi_core_init(&v_core_cfg, cfg);
 
 	hdmi_wp_init_vid_fmt_timings(&video_format, &vm, cfg);
@@ -616,9 +627,8 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
 
 	hdmi_wp_video_config_interface(wp, &vm);
 
-	/* support limited range with 24 bit color depth for now */
-	hdmi_core_configure_range(core);
-	cfg->infoframe.quantization_range = HDMI_QUANTIZATION_RANGE_LIMITED;
+	hdmi_core_configure_range(core, range);
+	cfg->infoframe.quantization_range = range;
 
 	/*
 	 * configure core video part, set software reset in the core
@@ -628,7 +638,6 @@ void hdmi5_configure(struct hdmi_core_data *core, struct hdmi_wp_data *wp,
 	hdmi_core_video_config(core, &v_core_cfg);
 
 	hdmi_core_config_video_packetizer(core);
-	hdmi_core_config_csc(core);
 	hdmi_core_config_video_sampler(core);
 
 	if (cfg->hdmi_dvi_mode == HDMI_HDMI)
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
                   ` (5 preceding siblings ...)
  2019-09-30 10:38 ` [PATCHv2 6/7] drm/omap: hdmi5: automatically choose limited/full range output Tomi Valkeinen
@ 2019-09-30 10:38 ` Tomi Valkeinen
  2019-10-04  7:03   ` Laurent Pinchart
  2019-10-08 14:13   ` Tony Lindgren
  6 siblings, 2 replies; 17+ messages in thread
From: Tomi Valkeinen @ 2019-09-30 10:38 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart; +Cc: Tomi Valkeinen, Jyri Sarha

If use_mclk is false, mclk_mode is written to a register without
initialization. This doesn't cause any ill effects as the written value
is not used when use_mclk is false.

To fix this, write use_mclk only when use_mclk is true.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi4_core.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
index 5d5d5588ebc1..c4ffe96e28bc 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
@@ -542,8 +542,9 @@ static void hdmi_core_audio_config(struct hdmi_core_data *core,
 	}
 
 	/* Set ACR clock divisor */
-	REG_FLD_MOD(av_base,
-			HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0);
+	if (cfg->use_mclk)
+		REG_FLD_MOD(av_base, HDMI_CORE_AV_FREQ_SVAL,
+			    cfg->mclk_mode, 2, 0);
 
 	r = hdmi_read_reg(av_base, HDMI_CORE_AV_ACR_CTRL);
 	/*
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write
  2019-09-30 10:38 ` [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write Tomi Valkeinen
@ 2019-10-04  7:02   ` Laurent Pinchart
  0 siblings, 0 replies; 17+ messages in thread
From: Laurent Pinchart @ 2019-10-04  7:02 UTC (permalink / raw)
  To: Tomi Valkeinen; +Cc: Jyri Sarha, dri-devel

Hi Tomi,

Thank you for the patch.

On Mon, Sep 30, 2019 at 01:38:35PM +0300, Tomi Valkeinen wrote:
> Avoid unnecessary copy in mgr_fld_read/write by taking a pointer to the
> reg_resc and using that.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/gpu/drm/omapdrm/dss/dispc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
> index 0dc0272569f6..3c9315b17ef2 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dispc.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
> @@ -365,17 +365,17 @@ static inline u32 dispc_read_reg(struct dispc_device *dispc, u16 idx)
>  static u32 mgr_fld_read(struct dispc_device *dispc, enum omap_channel channel,
>  			enum mgr_reg_fields regfld)
>  {
> -	const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
> +	const struct dispc_reg_field *rfld = &mgr_desc[channel].reg_desc[regfld];
>  
> -	return REG_GET(dispc, rfld.reg, rfld.high, rfld.low);
> +	return REG_GET(dispc, rfld->reg, rfld->high, rfld->low);
>  }
>  
>  static void mgr_fld_write(struct dispc_device *dispc, enum omap_channel channel,
>  			  enum mgr_reg_fields regfld, int val)
>  {
> -	const struct dispc_reg_field rfld = mgr_desc[channel].reg_desc[regfld];
> +	const struct dispc_reg_field *rfld = &mgr_desc[channel].reg_desc[regfld];
>  
> -	REG_FLD_MOD(dispc, rfld.reg, val, rfld.high, rfld.low);
> +	REG_FLD_MOD(dispc, rfld->reg, val, rfld->high, rfld->low);
>  }
>  
>  static int dispc_get_num_ovls(struct dispc_device *dispc)

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-09-30 10:38 ` [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var Tomi Valkeinen
@ 2019-10-04  7:03   ` Laurent Pinchart
  2019-10-08 14:13   ` Tony Lindgren
  1 sibling, 0 replies; 17+ messages in thread
From: Laurent Pinchart @ 2019-10-04  7:03 UTC (permalink / raw)
  To: Tomi Valkeinen; +Cc: Jyri Sarha, dri-devel

Hi Tomi,

Thank you for the patch.

On Mon, Sep 30, 2019 at 01:38:40PM +0300, Tomi Valkeinen wrote:
> If use_mclk is false, mclk_mode is written to a register without
> initialization. This doesn't cause any ill effects as the written value
> is not used when use_mclk is false.
> 
> To fix this, write use_mclk only when use_mclk is true.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/gpu/drm/omapdrm/dss/hdmi4_core.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
> index 5d5d5588ebc1..c4ffe96e28bc 100644
> --- a/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
> +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_core.c
> @@ -542,8 +542,9 @@ static void hdmi_core_audio_config(struct hdmi_core_data *core,
>  	}
>  
>  	/* Set ACR clock divisor */
> -	REG_FLD_MOD(av_base,
> -			HDMI_CORE_AV_FREQ_SVAL, cfg->mclk_mode, 2, 0);
> +	if (cfg->use_mclk)
> +		REG_FLD_MOD(av_base, HDMI_CORE_AV_FREQ_SVAL,
> +			    cfg->mclk_mode, 2, 0);
>  
>  	r = hdmi_read_reg(av_base, HDMI_CORE_AV_ACR_CTRL);
>  	/*

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-09-30 10:38 ` [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var Tomi Valkeinen
  2019-10-04  7:03   ` Laurent Pinchart
@ 2019-10-08 14:13   ` Tony Lindgren
  2019-10-08 14:16     ` Tomi Valkeinen
  1 sibling, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2019-10-08 14:13 UTC (permalink / raw)
  To: Tomi Valkeinen; +Cc: linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

* Tomi Valkeinen <tomi.valkeinen@ti.com> [190930 10:38]:
> If use_mclk is false, mclk_mode is written to a register without
> initialization. This doesn't cause any ill effects as the written value
> is not used when use_mclk is false.
> 
> To fix this, write use_mclk only when use_mclk is true.

Hey nice catch. Based on a quick test looks like this fixes an
issue where power consumption stays higher after using HDMI.

Would be nice to have merged in the v5.4-rc series:

Tested-by: Tony Lindgren <tony@atomide.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-08 14:13   ` Tony Lindgren
@ 2019-10-08 14:16     ` Tomi Valkeinen
  2019-10-08 14:21       ` Tony Lindgren
  0 siblings, 1 reply; 17+ messages in thread
From: Tomi Valkeinen @ 2019-10-08 14:16 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

On 08/10/2019 17:13, Tony Lindgren wrote:
> * Tomi Valkeinen <tomi.valkeinen@ti.com> [190930 10:38]:
>> If use_mclk is false, mclk_mode is written to a register without
>> initialization. This doesn't cause any ill effects as the written value
>> is not used when use_mclk is false.
>>
>> To fix this, write use_mclk only when use_mclk is true.
> 
> Hey nice catch. Based on a quick test looks like this fixes an
> issue where power consumption stays higher after using HDMI.
> 
> Would be nice to have merged in the v5.4-rc series:
> 
> Tested-by: Tony Lindgren <tony@atomide.com>

Really? Ok, well, then it was a good random find =).

I did already push this to drm-misc-next, as I thought it does not have 
any real effect. I'll check if it's ok to push to drm-misc-fixes too, 
with Cc stable.

  Tomi

-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-08 14:16     ` Tomi Valkeinen
@ 2019-10-08 14:21       ` Tony Lindgren
  2019-10-10  6:47         ` Tomi Valkeinen
  0 siblings, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2019-10-08 14:21 UTC (permalink / raw)
  To: Tomi Valkeinen; +Cc: linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

* Tomi Valkeinen <tomi.valkeinen@ti.com> [191008 14:17]:
> On 08/10/2019 17:13, Tony Lindgren wrote:
> > * Tomi Valkeinen <tomi.valkeinen@ti.com> [190930 10:38]:
> > > If use_mclk is false, mclk_mode is written to a register without
> > > initialization. This doesn't cause any ill effects as the written value
> > > is not used when use_mclk is false.
> > > 
> > > To fix this, write use_mclk only when use_mclk is true.
> > 
> > Hey nice catch. Based on a quick test looks like this fixes an
> > issue where power consumption stays higher after using HDMI.
> > 
> > Would be nice to have merged in the v5.4-rc series:
> > 
> > Tested-by: Tony Lindgren <tony@atomide.com>
> 
> Really? Ok, well, then it was a good random find =).

Yeah so it seems :) Earlier I thought there's still some
clkctrl setting wrong after using HDMI, but did not see
anything diffing the clkctrl registers before and after
and gave up.

> I did already push this to drm-misc-next, as I thought it does not have any
> real effect. I'll check if it's ok to push to drm-misc-fixes too, with Cc
> stable.

OK great thanks.

Tony
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-08 14:21       ` Tony Lindgren
@ 2019-10-10  6:47         ` Tomi Valkeinen
  2019-10-10 13:24           ` Tony Lindgren
  0 siblings, 1 reply; 17+ messages in thread
From: Tomi Valkeinen @ 2019-10-10  6:47 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

On 08/10/2019 17:21, Tony Lindgren wrote:
> * Tomi Valkeinen <tomi.valkeinen@ti.com> [191008 14:17]:
>> On 08/10/2019 17:13, Tony Lindgren wrote:
>>> * Tomi Valkeinen <tomi.valkeinen@ti.com> [190930 10:38]:
>>>> If use_mclk is false, mclk_mode is written to a register without
>>>> initialization. This doesn't cause any ill effects as the written value
>>>> is not used when use_mclk is false.
>>>>
>>>> To fix this, write use_mclk only when use_mclk is true.
>>>
>>> Hey nice catch. Based on a quick test looks like this fixes an
>>> issue where power consumption stays higher after using HDMI.
>>>
>>> Would be nice to have merged in the v5.4-rc series:
>>>
>>> Tested-by: Tony Lindgren <tony@atomide.com>
>>
>> Really? Ok, well, then it was a good random find =).
> 
> Yeah so it seems :) Earlier I thought there's still some
> clkctrl setting wrong after using HDMI, but did not see
> anything diffing the clkctrl registers before and after
> and gave up.
> 
>> I did already push this to drm-misc-next, as I thought it does not have any
>> real effect. I'll check if it's ok to push to drm-misc-fixes too, with Cc
>> stable.
> 
> OK great thanks.

Pushing this to fixes too would cause conflicts, so we shouldn't push 
without good reason. How much power saving you see?

I think this can still be sent to stable later, after it has been merged 
to mainline.

  Tomi

-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-10  6:47         ` Tomi Valkeinen
@ 2019-10-10 13:24           ` Tony Lindgren
  2019-10-11 10:25             ` Tomi Valkeinen
  0 siblings, 1 reply; 17+ messages in thread
From: Tony Lindgren @ 2019-10-10 13:24 UTC (permalink / raw)
  To: Tomi Valkeinen; +Cc: linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

* Tomi Valkeinen <tomi.valkeinen@ti.com> [191010 06:48]:
> On 08/10/2019 17:21, Tony Lindgren wrote:
> > * Tomi Valkeinen <tomi.valkeinen@ti.com> [191008 14:17]:
> > > On 08/10/2019 17:13, Tony Lindgren wrote:
> > > > * Tomi Valkeinen <tomi.valkeinen@ti.com> [190930 10:38]:
> > > > > If use_mclk is false, mclk_mode is written to a register without
> > > > > initialization. This doesn't cause any ill effects as the written value
> > > > > is not used when use_mclk is false.
> > > > > 
> > > > > To fix this, write use_mclk only when use_mclk is true.
> > > > 
> > > > Hey nice catch. Based on a quick test looks like this fixes an
> > > > issue where power consumption stays higher after using HDMI.
> > > > 
> > > > Would be nice to have merged in the v5.4-rc series:
> > > > 
> > > > Tested-by: Tony Lindgren <tony@atomide.com>
> > > 
> > > Really? Ok, well, then it was a good random find =).
> > 
> > Yeah so it seems :) Earlier I thought there's still some
> > clkctrl setting wrong after using HDMI, but did not see
> > anything diffing the clkctrl registers before and after
> > and gave up.
> > 
> > > I did already push this to drm-misc-next, as I thought it does not have any
> > > real effect. I'll check if it's ok to push to drm-misc-fixes too, with Cc
> > > stable.
> > 
> > OK great thanks.
> 
> Pushing this to fixes too would cause conflicts, so we shouldn't push
> without good reason. How much power saving you see?

Sure no rush with this one. I should also test again that it
really fixes the issue I'm seeing.

Hmm so what register does this clock actually change?

I'm seeing an increase of few tens of extra mW, which means at
least one day of standby time less for me :) It does not happen
always, maybe half of the time.

> I think this can still be sent to stable later, after it has been merged to
> mainline.

Yes sure.

Thanks,

Tony
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-10 13:24           ` Tony Lindgren
@ 2019-10-11 10:25             ` Tomi Valkeinen
  2019-10-11 16:10               ` Tony Lindgren
  0 siblings, 1 reply; 17+ messages in thread
From: Tomi Valkeinen @ 2019-10-11 10:25 UTC (permalink / raw)
  To: Tony Lindgren
  Cc: Peter Ujfalusi, linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

On 10/10/2019 16:24, Tony Lindgren wrote:

> Hmm so what register does this clock actually change?
> 
> I'm seeing an increase of few tens of extra mW, which means at
> least one day of standby time less for me :) It does not happen
> always, maybe half of the time.

I have no idea why this would affect power consumption. As far as I can 
understand, the bits written here are a clk divider MCLK. I don't see 
why that would affect.

Maybe Jyri or Peter has an idea, I have never looked at the HDMI audio side.

  Tomi

-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var
  2019-10-11 10:25             ` Tomi Valkeinen
@ 2019-10-11 16:10               ` Tony Lindgren
  0 siblings, 0 replies; 17+ messages in thread
From: Tony Lindgren @ 2019-10-11 16:10 UTC (permalink / raw)
  To: Tomi Valkeinen
  Cc: Peter Ujfalusi, linux-omap, Jyri Sarha, Laurent Pinchart, dri-devel

* Tomi Valkeinen <tomi.valkeinen@ti.com> [191011 10:25]:
> On 10/10/2019 16:24, Tony Lindgren wrote:
> 
> > Hmm so what register does this clock actually change?
> > 
> > I'm seeing an increase of few tens of extra mW, which means at
> > least one day of standby time less for me :) It does not happen
> > always, maybe half of the time.
> 
> I have no idea why this would affect power consumption. As far as I can
> understand, the bits written here are a clk divider MCLK. I don't see why
> that would affect.

Yeah you're right, and I just got lucky initially.

I have seen the power consumption stay higher already with
the patch applied. The clocks seem just fine.

> Maybe Jyri or Peter has an idea, I have never looked at the HDMI audio side.

I'll try dumping out the hdmi registers before and after
when I get a chance.

Regards,

Tony
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2019-10-11 16:10 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-30 10:38 [PATCHv2 0/7] drm/omap: misc improvements Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 1/7] drm/omap: drop unneeded locking from mgr_fld_write() Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 2/7] drm/omap: avoid copy in mgr_fld_read/write Tomi Valkeinen
2019-10-04  7:02   ` Laurent Pinchart
2019-09-30 10:38 ` [PATCHv2 3/7] drm/omap: tweak HDMI DDC timings Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 4/7] drm/omap: fix missing scaler pixel fmt limitations Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 5/7] drm/omap: dss: move platform_register_drivers() to dss.c and remove core.c Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 6/7] drm/omap: hdmi5: automatically choose limited/full range output Tomi Valkeinen
2019-09-30 10:38 ` [PATCHv2 7/7] drm/omap: hdmi4: fix use of uninitialized var Tomi Valkeinen
2019-10-04  7:03   ` Laurent Pinchart
2019-10-08 14:13   ` Tony Lindgren
2019-10-08 14:16     ` Tomi Valkeinen
2019-10-08 14:21       ` Tony Lindgren
2019-10-10  6:47         ` Tomi Valkeinen
2019-10-10 13:24           ` Tony Lindgren
2019-10-11 10:25             ` Tomi Valkeinen
2019-10-11 16:10               ` Tony Lindgren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.