[PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe

Liu Ying posted 1 patch 4 weeks ago
There is a newer version of this series
drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
1 file changed, 52 insertions(+), 20 deletions(-)
[PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by Liu Ying 4 weeks ago
IT6263 supports HDMI vendor specific infoframe.  The infoframe header
and payload are configurable via NULL packet registers.  The infoframe
is enabled and disabled via PKT_NULL_CTRL register.  Add the HDMI vendor
specific infoframe support.

Signed-off-by: Liu Ying <victor.liu@nxp.com>
---
 drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
 1 file changed, 52 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
index cf813672b4ffb8ab5c524c6414ee7b414cebc018..0cc5e44b325afe177e0da41cdce753407cec51e7 100644
--- a/drivers/gpu/drm/bridge/ite-it6263.c
+++ b/drivers/gpu/drm/bridge/ite-it6263.c
@@ -146,6 +146,7 @@
 #define  HDMI_COLOR_DEPTH_24		FIELD_PREP(HDMI_COLOR_DEPTH, 4)
 
 #define HDMI_REG_PKT_GENERAL_CTRL	0xc6
+#define HDMI_REG_PKT_NULL_CTRL		0xc9
 #define HDMI_REG_AVI_INFOFRM_CTRL	0xcd
 #define  ENABLE_PKT			BIT(0)
 #define  REPEAT_PKT			BIT(1)
@@ -154,6 +155,14 @@
  * 3) HDMI register bank1: 0x130 ~ 0x1ff (HDMI packet registers)
  */
 
+/* NULL packet registers */
+/* Header Byte(HB): n = 0 ~ 2 */
+#define HDMI_REG_PKT_HB(n)		(0x138 + (n))
+/* Packet Byte(PB): n = 0 ~ 27(HDMI_MAX_INFOFRAME_SIZE), n = 0 for checksum */
+#define HDMI_REG_PKT_PB(n)		(0x13b + (n))
+#define HDMI_PKT_HB_PB_CHUNK_SIZE	\
+	(HDMI_REG_PKT_PB(HDMI_MAX_INFOFRAME_SIZE) - HDMI_REG_PKT_HB(0) + 1)
+
 /* AVI packet registers */
 #define HDMI_REG_AVI_DB1		0x158
 #define HDMI_REG_AVI_DB2		0x159
@@ -224,7 +233,9 @@ static bool it6263_hdmi_writeable_reg(struct device *dev, unsigned int reg)
 	case HDMI_REG_HDMI_MODE:
 	case HDMI_REG_GCP:
 	case HDMI_REG_PKT_GENERAL_CTRL:
+	case HDMI_REG_PKT_NULL_CTRL:
 	case HDMI_REG_AVI_INFOFRM_CTRL:
+	case HDMI_REG_PKT_HB(0) ... HDMI_REG_PKT_PB(HDMI_MAX_INFOFRAME_SIZE):
 	case HDMI_REG_AVI_DB1:
 	case HDMI_REG_AVI_DB2:
 	case HDMI_REG_AVI_DB3:
@@ -755,10 +766,16 @@ static int it6263_hdmi_clear_infoframe(struct drm_bridge *bridge,
 {
 	struct it6263 *it = bridge_to_it6263(bridge);
 
-	if (type == HDMI_INFOFRAME_TYPE_AVI)
+	switch (type) {
+	case HDMI_INFOFRAME_TYPE_AVI:
 		regmap_write(it->hdmi_regmap, HDMI_REG_AVI_INFOFRM_CTRL, 0);
-	else
+		break;
+	case HDMI_INFOFRAME_TYPE_VENDOR:
+		regmap_write(it->hdmi_regmap, HDMI_REG_PKT_NULL_CTRL, 0);
+		break;
+	default:
 		dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
+	}
 
 	return 0;
 }
@@ -770,27 +787,42 @@ static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
 	struct it6263 *it = bridge_to_it6263(bridge);
 	struct regmap *regmap = it->hdmi_regmap;
 
-	if (type != HDMI_INFOFRAME_TYPE_AVI) {
+	switch (type) {
+	case HDMI_INFOFRAME_TYPE_AVI:
+		/* write the first AVI infoframe data byte chunk(DB1-DB5) */
+		regmap_bulk_write(regmap, HDMI_REG_AVI_DB1,
+				  &buffer[HDMI_INFOFRAME_HEADER_SIZE],
+				  HDMI_AVI_DB_CHUNK1_SIZE);
+
+		/* write the second AVI infoframe data byte chunk(DB6-DB13) */
+		regmap_bulk_write(regmap, HDMI_REG_AVI_DB6,
+				  &buffer[HDMI_INFOFRAME_HEADER_SIZE +
+					  HDMI_AVI_DB_CHUNK1_SIZE],
+				  HDMI_AVI_DB_CHUNK2_SIZE);
+
+		/* write checksum */
+		regmap_write(regmap, HDMI_REG_AVI_CSUM, buffer[3]);
+
+		regmap_write(regmap, HDMI_REG_AVI_INFOFRM_CTRL,
+			     ENABLE_PKT | REPEAT_PKT);
+		break;
+	case HDMI_INFOFRAME_TYPE_VENDOR:
+		const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
+
+		/* clear NULL packet registers due to undefined default value */
+		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
+				  zero_bulk, sizeof(zero_bulk));
+
+		/* write header and payload */
+		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
+
+		regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
+			     ENABLE_PKT | REPEAT_PKT);
+		break;
+	default:
 		dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
-		return 0;
 	}
 
-	/* write the first AVI infoframe data byte chunk(DB1-DB5) */
-	regmap_bulk_write(regmap, HDMI_REG_AVI_DB1,
-			  &buffer[HDMI_INFOFRAME_HEADER_SIZE],
-			  HDMI_AVI_DB_CHUNK1_SIZE);
-
-	/* write the second AVI infoframe data byte chunk(DB6-DB13) */
-	regmap_bulk_write(regmap, HDMI_REG_AVI_DB6,
-			  &buffer[HDMI_INFOFRAME_HEADER_SIZE +
-				  HDMI_AVI_DB_CHUNK1_SIZE],
-			  HDMI_AVI_DB_CHUNK2_SIZE);
-
-	/* write checksum */
-	regmap_write(regmap, HDMI_REG_AVI_CSUM, buffer[3]);
-
-	regmap_write(regmap, HDMI_REG_AVI_INFOFRM_CTRL, ENABLE_PKT | REPEAT_PKT);
-
 	return 0;
 }
 

---
base-commit: 4ac65880ebca1b68495bd8704263b26c050ac010
change-id: 20250904-it6263-vendor-specific-infoframe-aa40214f41f7

Best regards,
-- 
Liu Ying <victor.liu@nxp.com>
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by kernel test robot 3 weeks, 6 days ago
Hi Liu,

kernel test robot noticed the following build errors:

[auto build test ERROR on 4ac65880ebca1b68495bd8704263b26c050ac010]

url:    https://github.com/intel-lab-lkp/linux/commits/Liu-Ying/drm-bridge-ite-it6263-Support-HDMI-vendor-specific-infoframe/20250904-171143
base:   4ac65880ebca1b68495bd8704263b26c050ac010
patch link:    https://lore.kernel.org/r/20250904-it6263-vendor-specific-infoframe-v1-1-6efe6545b634%40nxp.com
patch subject: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
config: xtensa-randconfig-002-20250906 (https://download.01.org/0day-ci/archive/20250906/202509060506.8qlqQKQi-lkp@intel.com/config)
compiler: xtensa-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250906/202509060506.8qlqQKQi-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509060506.8qlqQKQi-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/gpu/drm/bridge/ite-it6263.c: In function 'it6263_hdmi_write_infoframe':
>> drivers/gpu/drm/bridge/ite-it6263.c:810:3: error: a label can only be part of a statement and a declaration is not a statement
     810 |   const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
         |   ^~~~~


vim +810 drivers/gpu/drm/bridge/ite-it6263.c

   782	
   783	static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
   784					       enum hdmi_infoframe_type type,
   785					       const u8 *buffer, size_t len)
   786	{
   787		struct it6263 *it = bridge_to_it6263(bridge);
   788		struct regmap *regmap = it->hdmi_regmap;
   789	
   790		switch (type) {
   791		case HDMI_INFOFRAME_TYPE_AVI:
   792			/* write the first AVI infoframe data byte chunk(DB1-DB5) */
   793			regmap_bulk_write(regmap, HDMI_REG_AVI_DB1,
   794					  &buffer[HDMI_INFOFRAME_HEADER_SIZE],
   795					  HDMI_AVI_DB_CHUNK1_SIZE);
   796	
   797			/* write the second AVI infoframe data byte chunk(DB6-DB13) */
   798			regmap_bulk_write(regmap, HDMI_REG_AVI_DB6,
   799					  &buffer[HDMI_INFOFRAME_HEADER_SIZE +
   800						  HDMI_AVI_DB_CHUNK1_SIZE],
   801					  HDMI_AVI_DB_CHUNK2_SIZE);
   802	
   803			/* write checksum */
   804			regmap_write(regmap, HDMI_REG_AVI_CSUM, buffer[3]);
   805	
   806			regmap_write(regmap, HDMI_REG_AVI_INFOFRM_CTRL,
   807				     ENABLE_PKT | REPEAT_PKT);
   808			break;
   809		case HDMI_INFOFRAME_TYPE_VENDOR:
 > 810			const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
   811	
   812			/* clear NULL packet registers due to undefined default value */
   813			regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
   814					  zero_bulk, sizeof(zero_bulk));
   815	
   816			/* write header and payload */
   817			regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
   818	
   819			regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
   820				     ENABLE_PKT | REPEAT_PKT);
   821			break;
   822		default:
   823			dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
   824		}
   825	
   826		return 0;
   827	}
   828	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by kernel test robot 3 weeks, 6 days ago
Hi Liu,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 4ac65880ebca1b68495bd8704263b26c050ac010]

url:    https://github.com/intel-lab-lkp/linux/commits/Liu-Ying/drm-bridge-ite-it6263-Support-HDMI-vendor-specific-infoframe/20250904-171143
base:   4ac65880ebca1b68495bd8704263b26c050ac010
patch link:    https://lore.kernel.org/r/20250904-it6263-vendor-specific-infoframe-v1-1-6efe6545b634%40nxp.com
patch subject: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
config: i386-buildonly-randconfig-001-20250906 (https://download.01.org/0day-ci/archive/20250906/202509060412.LmXs40Rg-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250906/202509060412.LmXs40Rg-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509060412.LmXs40Rg-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/bridge/ite-it6263.c:810:3: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]
     810 |                 const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
         |                 ^
   1 warning generated.


vim +810 drivers/gpu/drm/bridge/ite-it6263.c

   782	
   783	static int it6263_hdmi_write_infoframe(struct drm_bridge *bridge,
   784					       enum hdmi_infoframe_type type,
   785					       const u8 *buffer, size_t len)
   786	{
   787		struct it6263 *it = bridge_to_it6263(bridge);
   788		struct regmap *regmap = it->hdmi_regmap;
   789	
   790		switch (type) {
   791		case HDMI_INFOFRAME_TYPE_AVI:
   792			/* write the first AVI infoframe data byte chunk(DB1-DB5) */
   793			regmap_bulk_write(regmap, HDMI_REG_AVI_DB1,
   794					  &buffer[HDMI_INFOFRAME_HEADER_SIZE],
   795					  HDMI_AVI_DB_CHUNK1_SIZE);
   796	
   797			/* write the second AVI infoframe data byte chunk(DB6-DB13) */
   798			regmap_bulk_write(regmap, HDMI_REG_AVI_DB6,
   799					  &buffer[HDMI_INFOFRAME_HEADER_SIZE +
   800						  HDMI_AVI_DB_CHUNK1_SIZE],
   801					  HDMI_AVI_DB_CHUNK2_SIZE);
   802	
   803			/* write checksum */
   804			regmap_write(regmap, HDMI_REG_AVI_CSUM, buffer[3]);
   805	
   806			regmap_write(regmap, HDMI_REG_AVI_INFOFRM_CTRL,
   807				     ENABLE_PKT | REPEAT_PKT);
   808			break;
   809		case HDMI_INFOFRAME_TYPE_VENDOR:
 > 810			const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
   811	
   812			/* clear NULL packet registers due to undefined default value */
   813			regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
   814					  zero_bulk, sizeof(zero_bulk));
   815	
   816			/* write header and payload */
   817			regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
   818	
   819			regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
   820				     ENABLE_PKT | REPEAT_PKT);
   821			break;
   822		default:
   823			dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type);
   824		}
   825	
   826		return 0;
   827	}
   828	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by Dmitry Baryshkov 4 weeks ago
On Thu, Sep 04, 2025 at 05:10:02PM +0800, Liu Ying wrote:
> IT6263 supports HDMI vendor specific infoframe.  The infoframe header
> and payload are configurable via NULL packet registers.  The infoframe
> is enabled and disabled via PKT_NULL_CTRL register.  Add the HDMI vendor
> specific infoframe support.
> 
> Signed-off-by: Liu Ying <victor.liu@nxp.com>
> ---
>  drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
>  1 file changed, 52 insertions(+), 20 deletions(-)
> 
> +	case HDMI_INFOFRAME_TYPE_VENDOR:
> +		const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
> +
> +		/* clear NULL packet registers due to undefined default value */
> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
> +				  zero_bulk, sizeof(zero_bulk));

What if you move this to the probe function? Then there will be no need
to write those registers each time the infoframe is being written.

LGTM otherwise.

> +
> +		/* write header and payload */
> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
> +
> +		regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
> +			     ENABLE_PKT | REPEAT_PKT);
> +		break;

-- 
With best wishes
Dmitry
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by Liu Ying 3 weeks, 6 days ago
On 09/05/2025, Dmitry Baryshkov wrote:
> On Thu, Sep 04, 2025 at 05:10:02PM +0800, Liu Ying wrote:
>> IT6263 supports HDMI vendor specific infoframe.  The infoframe header
>> and payload are configurable via NULL packet registers.  The infoframe
>> is enabled and disabled via PKT_NULL_CTRL register.  Add the HDMI vendor
>> specific infoframe support.
>>
>> Signed-off-by: Liu Ying <victor.liu@nxp.com>
>> ---
>>  drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
>>  1 file changed, 52 insertions(+), 20 deletions(-)
>>
>> +	case HDMI_INFOFRAME_TYPE_VENDOR:
>> +		const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
>> +
>> +		/* clear NULL packet registers due to undefined default value */
>> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
>> +				  zero_bulk, sizeof(zero_bulk));
> 
> What if you move this to the probe function? Then there will be no need
> to write those registers each time the infoframe is being written.

Good idea.  But looking at drm_hdmi_vendor_infoframe_from_display_mode(),
hdmi_vendor_infoframe_length() and hdmi_vendor_infoframe_pack_only(), the
payload length could be changed in runtime according to display mode's VIC
and flags(see DRM_MODE_FLAG_3D_MASK).  And, IT6263 supports HDMI1.4a 3D
formats according to it's product information[1].  So, it makes sense to
clear HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here which map to ptr[8]
and ptr[9] in hdmi_vendor_infoframe_pack_only().  For v2, I'd move the
NULL packet registers bulk write to it6263_hdmi_config()(i.e., it6263_probe())
and write zero to HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here.

What do you think?

[1] www.ite.com.tw/en/product/cate1/IT6263

> 
> LGTM otherwise.
> 
>> +
>> +		/* write header and payload */
>> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
>> +
>> +		regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
>> +			     ENABLE_PKT | REPEAT_PKT);
>> +		break;
> 

-- 
Regards,
Liu Ying
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by Dmitry Baryshkov 3 weeks, 6 days ago
On Fri, Sep 05, 2025 at 01:46:56PM +0800, Liu Ying wrote:
> On 09/05/2025, Dmitry Baryshkov wrote:
> > On Thu, Sep 04, 2025 at 05:10:02PM +0800, Liu Ying wrote:
> >> IT6263 supports HDMI vendor specific infoframe.  The infoframe header
> >> and payload are configurable via NULL packet registers.  The infoframe
> >> is enabled and disabled via PKT_NULL_CTRL register.  Add the HDMI vendor
> >> specific infoframe support.
> >>
> >> Signed-off-by: Liu Ying <victor.liu@nxp.com>
> >> ---
> >>  drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
> >>  1 file changed, 52 insertions(+), 20 deletions(-)
> >>
> >> +	case HDMI_INFOFRAME_TYPE_VENDOR:
> >> +		const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
> >> +
> >> +		/* clear NULL packet registers due to undefined default value */
> >> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
> >> +				  zero_bulk, sizeof(zero_bulk));
> > 
> > What if you move this to the probe function? Then there will be no need
> > to write those registers each time the infoframe is being written.
> 
> Good idea.  But looking at drm_hdmi_vendor_infoframe_from_display_mode(),
> hdmi_vendor_infoframe_length() and hdmi_vendor_infoframe_pack_only(), the
> payload length could be changed in runtime according to display mode's VIC
> and flags(see DRM_MODE_FLAG_3D_MASK).  And, IT6263 supports HDMI1.4a 3D
> formats according to it's product information[1].  So, it makes sense to
> clear HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here which map to ptr[8]
> and ptr[9] in hdmi_vendor_infoframe_pack_only().  For v2, I'd move the
> NULL packet registers bulk write to it6263_hdmi_config()(i.e., it6263_probe())
> and write zero to HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here.

Then you don't even need to write zeroes in probe(). Just write
something like:

regmap_bulk_write(regmap, HDMI_REG_PKT_HB(len), zero_bulk, FRAMESIZE-len);

But as a note: I don't think other drivers zero out packet memory. I
think it's expected that displays ignore the frame after the 'len'
bytes.

> 
> What do you think?
> 
> [1] www.ite.com.tw/en/product/cate1/IT6263
> 
> > 
> > LGTM otherwise.
> > 
> >> +
> >> +		/* write header and payload */
> >> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
> >> +
> >> +		regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
> >> +			     ENABLE_PKT | REPEAT_PKT);
> >> +		break;
> > 
> 
> -- 
> Regards,
> Liu Ying

-- 
With best wishes
Dmitry
Re: [PATCH] drm/bridge: ite-it6263: Support HDMI vendor specific infoframe
Posted by Liu Ying 3 weeks, 3 days ago
On 09/05/2025, Dmitry Baryshkov wrote:
> On Fri, Sep 05, 2025 at 01:46:56PM +0800, Liu Ying wrote:
>> On 09/05/2025, Dmitry Baryshkov wrote:
>>> On Thu, Sep 04, 2025 at 05:10:02PM +0800, Liu Ying wrote:
>>>> IT6263 supports HDMI vendor specific infoframe.  The infoframe header
>>>> and payload are configurable via NULL packet registers.  The infoframe
>>>> is enabled and disabled via PKT_NULL_CTRL register.  Add the HDMI vendor
>>>> specific infoframe support.
>>>>
>>>> Signed-off-by: Liu Ying <victor.liu@nxp.com>
>>>> ---
>>>>  drivers/gpu/drm/bridge/ite-it6263.c | 72 ++++++++++++++++++++++++++-----------
>>>>  1 file changed, 52 insertions(+), 20 deletions(-)
>>>>
>>>> +	case HDMI_INFOFRAME_TYPE_VENDOR:
>>>> +		const char zero_bulk[HDMI_PKT_HB_PB_CHUNK_SIZE] = { };
>>>> +
>>>> +		/* clear NULL packet registers due to undefined default value */
>>>> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0),
>>>> +				  zero_bulk, sizeof(zero_bulk));
>>>
>>> What if you move this to the probe function? Then there will be no need
>>> to write those registers each time the infoframe is being written.
>>
>> Good idea.  But looking at drm_hdmi_vendor_infoframe_from_display_mode(),
>> hdmi_vendor_infoframe_length() and hdmi_vendor_infoframe_pack_only(), the
>> payload length could be changed in runtime according to display mode's VIC
>> and flags(see DRM_MODE_FLAG_3D_MASK).  And, IT6263 supports HDMI1.4a 3D
>> formats according to it's product information[1].  So, it makes sense to
>> clear HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here which map to ptr[8]
>> and ptr[9] in hdmi_vendor_infoframe_pack_only().  For v2, I'd move the
>> NULL packet registers bulk write to it6263_hdmi_config()(i.e., it6263_probe())
>> and write zero to HDMI_REG_PKT_PB(5) and HDMI_REG_PKT_PB(6) here.
> 
> Then you don't even need to write zeroes in probe(). Just write
> something like:
> 
> regmap_bulk_write(regmap, HDMI_REG_PKT_HB(len), zero_bulk, FRAMESIZE-len);
> 
> But as a note: I don't think other drivers zero out packet memory. I
> think it's expected that displays ignore the frame after the 'len'
> bytes.

Then I'd choose not to zero out any packet memory since it turns out at
least for my setup that the vendor specific infoframe can be captured by
HDMI analyzer without doing that(HDMI analyzer does show leftover random
packet data).

> 
>>
>> What do you think?
>>
>> [1] http://www.ite.com.tw/en/product/cate1/IT6263
>>
>>>
>>> LGTM otherwise.
>>>
>>>> +
>>>> +		/* write header and payload */
>>>> +		regmap_bulk_write(regmap, HDMI_REG_PKT_HB(0), buffer, len);
>>>> +
>>>> +		regmap_write(regmap, HDMI_REG_PKT_NULL_CTRL,
>>>> +			     ENABLE_PKT | REPEAT_PKT);
>>>> +		break;
>>>
>>
>> -- 
>> Regards,
>> Liu Ying
> 


-- 
Regards,
Liu Ying