dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
@ 2025-07-03 14:38 Hans de Goede
  2025-07-04  9:26 ` Jani Nikula
  2025-07-04 10:31 ` Ville Syrjälä
  0 siblings, 2 replies; 6+ messages in thread
From: Hans de Goede @ 2025-07-03 14:38 UTC (permalink / raw)
  To: Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, Tvrtko Ursulin,
	Ville Syrjälä
  Cc: Hans de Goede, intel-gfx, dri-devel, Hans de Goede

From: Hans de Goede <hdegoede@redhat.com>

It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
for some DSI panel's with version 2 mipi-sequences too.

Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
A1-840FHD which is different) has the following sequences:

BDB block 53 (1284 bytes) - MIPI sequence block:
	Sequence block version v2
	Panel 0 *

Sequence 2 - MIPI_SEQ_INIT_OTP
	GPIO index 9, source 0, set 0 (0x00)
	Delay: 50000 us
	GPIO index 9, source 0, set 1 (0x01)
	Delay: 6000 us
	GPIO index 9, source 0, set 0 (0x00)
	Delay: 6000 us
	GPIO index 9, source 0, set 1 (0x01)
	Delay: 25000 us
	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
	...
	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
	Delay: 120000 us

Sequence 4 - MIPI_SEQ_DISPLAY_OFF
	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
	Delay: 105000 us
	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
	Delay: 10000 us

Sequence 5 - MIPI_SEQ_ASSERT_RESET
	Delay: 10000 us
	GPIO index 9, source 0, set 0 (0x00)

Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
the fixup from vlv_fixup_mipi_sequences() fixes up.

Extend it to also apply to v2 sequences, this fixes the panel not working
on the Acer Iconia One 8 A1-840.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index ba7b8938b17c..166ee11831ab 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
 	int index, len;
 
 	if (drm_WARN_ON(display->drm,
-			!data || panel->vbt.dsi.seq_version != 1))
+			!data || panel->vbt.dsi.seq_version >= 3))
 		return 0;
 
 	/* index = 1 to skip sequence byte */
@@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
 }
 
 /*
- * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
+ * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
  * The deassert must be done before calling intel_dsi_device_ready, so for
  * these devices we split the init OTP sequence into a deassert sequence and
  * the actual init OTP part.
@@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
 	u8 *init_otp;
 	int len;
 
-	/* Limit this to v1 vid-mode sequences */
+	/* Limit this to v1/v2 vid-mode sequences */
 	if (panel->vbt.dsi.config->is_cmd_mode ||
-	    panel->vbt.dsi.seq_version != 1)
+	    panel->vbt.dsi.seq_version >= 3)
 		return;
 
 	/* Only do this if there are otp and assert seqs and no deassert seq */
-- 
2.49.0


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

* Re: [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
  2025-07-03 14:38 [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too Hans de Goede
@ 2025-07-04  9:26 ` Jani Nikula
  2025-07-04 10:31 ` Ville Syrjälä
  1 sibling, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2025-07-04  9:26 UTC (permalink / raw)
  To: Hans de Goede, Joonas Lahtinen, Rodrigo Vivi, Tvrtko Ursulin,
	Ville Syrjälä
  Cc: Hans de Goede, intel-gfx, dri-devel, Hans de Goede

On Thu, 03 Jul 2025, Hans de Goede <hansg@kernel.org> wrote:
> From: Hans de Goede <hdegoede@redhat.com>
>
> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
> for some DSI panel's with version 2 mipi-sequences too.
>
> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
> A1-840FHD which is different) has the following sequences:
>
> BDB block 53 (1284 bytes) - MIPI sequence block:
> 	Sequence block version v2
> 	Panel 0 *
>
> Sequence 2 - MIPI_SEQ_INIT_OTP
> 	GPIO index 9, source 0, set 0 (0x00)
> 	Delay: 50000 us
> 	GPIO index 9, source 0, set 1 (0x01)
> 	Delay: 6000 us
> 	GPIO index 9, source 0, set 0 (0x00)
> 	Delay: 6000 us
> 	GPIO index 9, source 0, set 1 (0x01)
> 	Delay: 25000 us
> 	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
> 	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
> 	...
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
> 	Delay: 120000 us
>
> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
> 	Delay: 105000 us
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
> 	Delay: 10000 us
>
> Sequence 5 - MIPI_SEQ_ASSERT_RESET
> 	Delay: 10000 us
> 	GPIO index 9, source 0, set 0 (0x00)
>
> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
> the fixup from vlv_fixup_mipi_sequences() fixes up.
>
> Extend it to also apply to v2 sequences, this fixes the panel not working
> on the Acer Iconia One 8 A1-840.

I believe you have the most extensive collection of VLV/CHV DSI
machines, and I basically take your word for what works and what
doesn't.

Acked-by: Jani Nikula <jani.nikula@intel.com>

> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index ba7b8938b17c..166ee11831ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>  	int index, len;
>  
>  	if (drm_WARN_ON(display->drm,
> -			!data || panel->vbt.dsi.seq_version != 1))
> +			!data || panel->vbt.dsi.seq_version >= 3))
>  		return 0;
>  
>  	/* index = 1 to skip sequence byte */
> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>  }
>  
>  /*
> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
>   * The deassert must be done before calling intel_dsi_device_ready, so for
>   * these devices we split the init OTP sequence into a deassert sequence and
>   * the actual init OTP part.
> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
>  	u8 *init_otp;
>  	int len;
>  
> -	/* Limit this to v1 vid-mode sequences */
> +	/* Limit this to v1/v2 vid-mode sequences */
>  	if (panel->vbt.dsi.config->is_cmd_mode ||
> -	    panel->vbt.dsi.seq_version != 1)
> +	    panel->vbt.dsi.seq_version >= 3)
>  		return;
>  
>  	/* Only do this if there are otp and assert seqs and no deassert seq */

-- 
Jani Nikula, Intel

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

* Re: [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
  2025-07-03 14:38 [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too Hans de Goede
  2025-07-04  9:26 ` Jani Nikula
@ 2025-07-04 10:31 ` Ville Syrjälä
  2025-07-07 21:10   ` Hans de Goede
  1 sibling, 1 reply; 6+ messages in thread
From: Ville Syrjälä @ 2025-07-04 10:31 UTC (permalink / raw)
  To: Hans de Goede
  Cc: Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, Tvrtko Ursulin,
	intel-gfx, dri-devel, Hans de Goede

On Thu, Jul 03, 2025 at 04:38:24PM +0200, Hans de Goede wrote:
> From: Hans de Goede <hdegoede@redhat.com>
> 
> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
> for some DSI panel's with version 2 mipi-sequences too.
> 
> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
> A1-840FHD which is different) has the following sequences:
> 
> BDB block 53 (1284 bytes) - MIPI sequence block:
> 	Sequence block version v2
> 	Panel 0 *
> 
> Sequence 2 - MIPI_SEQ_INIT_OTP
> 	GPIO index 9, source 0, set 0 (0x00)
> 	Delay: 50000 us
> 	GPIO index 9, source 0, set 1 (0x01)
> 	Delay: 6000 us
> 	GPIO index 9, source 0, set 0 (0x00)
> 	Delay: 6000 us
> 	GPIO index 9, source 0, set 1 (0x01)
> 	Delay: 25000 us
> 	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
> 	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
> 	...
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
> 	Delay: 120000 us
> 
> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
> 	Delay: 105000 us
> 	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
> 	Delay: 10000 us
> 
> Sequence 5 - MIPI_SEQ_ASSERT_RESET
> 	Delay: 10000 us
> 	GPIO index 9, source 0, set 0 (0x00)
> 
> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
> the fixup from vlv_fixup_mipi_sequences() fixes up.
> 
> Extend it to also apply to v2 sequences, this fixes the panel not working
> on the Acer Iconia One 8 A1-840.

Do we have the full VBT for this machine already in some bug? If not,
please file a new issue with the VBT attached for posterity.

> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index ba7b8938b17c..166ee11831ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>  	int index, len;
>  
>  	if (drm_WARN_ON(display->drm,
> -			!data || panel->vbt.dsi.seq_version != 1))
> +			!data || panel->vbt.dsi.seq_version >= 3))
>  		return 0;
>  
>  	/* index = 1 to skip sequence byte */
> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>  }
>  
>  /*
> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
>   * The deassert must be done before calling intel_dsi_device_ready, so for
>   * these devices we split the init OTP sequence into a deassert sequence and
>   * the actual init OTP part.
> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
>  	u8 *init_otp;
>  	int len;
>  
> -	/* Limit this to v1 vid-mode sequences */
> +	/* Limit this to v1/v2 vid-mode sequences */
>  	if (panel->vbt.dsi.config->is_cmd_mode ||
> -	    panel->vbt.dsi.seq_version != 1)
> +	    panel->vbt.dsi.seq_version >= 3)
>  		return;
>  
>  	/* Only do this if there are otp and assert seqs and no deassert seq */
> -- 
> 2.49.0

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
  2025-07-04 10:31 ` Ville Syrjälä
@ 2025-07-07 21:10   ` Hans de Goede
  2025-07-10 15:34     ` Rodrigo Vivi
  0 siblings, 1 reply; 6+ messages in thread
From: Hans de Goede @ 2025-07-07 21:10 UTC (permalink / raw)
  To: Ville Syrjälä
  Cc: Jani Nikula, Joonas Lahtinen, Rodrigo Vivi, Tvrtko Ursulin,
	intel-gfx, dri-devel, Hans de Goede

Hi Ville,

On 4-Jul-25 12:31 PM, Ville Syrjälä wrote:
> On Thu, Jul 03, 2025 at 04:38:24PM +0200, Hans de Goede wrote:
>> From: Hans de Goede <hdegoede@redhat.com>
>>
>> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
>> for some DSI panel's with version 2 mipi-sequences too.
>>
>> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
>> A1-840FHD which is different) has the following sequences:
>>
>> BDB block 53 (1284 bytes) - MIPI sequence block:
>> 	Sequence block version v2
>> 	Panel 0 *
>>
>> Sequence 2 - MIPI_SEQ_INIT_OTP
>> 	GPIO index 9, source 0, set 0 (0x00)
>> 	Delay: 50000 us
>> 	GPIO index 9, source 0, set 1 (0x01)
>> 	Delay: 6000 us
>> 	GPIO index 9, source 0, set 0 (0x00)
>> 	Delay: 6000 us
>> 	GPIO index 9, source 0, set 1 (0x01)
>> 	Delay: 25000 us
>> 	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
>> 	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
>> 	...
>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
>> 	Delay: 120000 us
>>
>> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
>> 	Delay: 105000 us
>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
>> 	Delay: 10000 us
>>
>> Sequence 5 - MIPI_SEQ_ASSERT_RESET
>> 	Delay: 10000 us
>> 	GPIO index 9, source 0, set 0 (0x00)
>>
>> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
>> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
>> the fixup from vlv_fixup_mipi_sequences() fixes up.
>>
>> Extend it to also apply to v2 sequences, this fixes the panel not working
>> on the Acer Iconia One 8 A1-840.
> 
> Do we have the full VBT for this machine already in some bug? If not,
> please file a new issue with the VBT attached for posterity.

I've filed: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14605
with the VBT attached and I'll add a Closes: tag pointing to that
to the patch while applying it to drm-intel-fixes.

Regards,

Hans



> 
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>> index ba7b8938b17c..166ee11831ab 100644
>> --- a/drivers/gpu/drm/i915/display/intel_bios.c
>> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
>> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>>  	int index, len;
>>  
>>  	if (drm_WARN_ON(display->drm,
>> -			!data || panel->vbt.dsi.seq_version != 1))
>> +			!data || panel->vbt.dsi.seq_version >= 3))
>>  		return 0;
>>  
>>  	/* index = 1 to skip sequence byte */
>> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>>  }
>>  
>>  /*
>> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
>> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
>>   * The deassert must be done before calling intel_dsi_device_ready, so for
>>   * these devices we split the init OTP sequence into a deassert sequence and
>>   * the actual init OTP part.
>> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
>>  	u8 *init_otp;
>>  	int len;
>>  
>> -	/* Limit this to v1 vid-mode sequences */
>> +	/* Limit this to v1/v2 vid-mode sequences */
>>  	if (panel->vbt.dsi.config->is_cmd_mode ||
>> -	    panel->vbt.dsi.seq_version != 1)
>> +	    panel->vbt.dsi.seq_version >= 3)
>>  		return;
>>  
>>  	/* Only do this if there are otp and assert seqs and no deassert seq */
>> -- 
>> 2.49.0
> 


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

* Re: [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
  2025-07-07 21:10   ` Hans de Goede
@ 2025-07-10 15:34     ` Rodrigo Vivi
  2025-07-10 15:47       ` Hans de Goede
  0 siblings, 1 reply; 6+ messages in thread
From: Rodrigo Vivi @ 2025-07-10 15:34 UTC (permalink / raw)
  To: Hans de Goede
  Cc: Ville Syrjälä, Jani Nikula, Joonas Lahtinen,
	Tvrtko Ursulin, intel-gfx, dri-devel, Hans de Goede

On Mon, Jul 07, 2025 at 11:10:59PM +0200, Hans de Goede wrote:
> Hi Ville,
> 
> On 4-Jul-25 12:31 PM, Ville Syrjälä wrote:
> > On Thu, Jul 03, 2025 at 04:38:24PM +0200, Hans de Goede wrote:
> >> From: Hans de Goede <hdegoede@redhat.com>
> >>
> >> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
> >> for some DSI panel's with version 2 mipi-sequences too.
> >>
> >> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
> >> A1-840FHD which is different) has the following sequences:
> >>
> >> BDB block 53 (1284 bytes) - MIPI sequence block:
> >> 	Sequence block version v2
> >> 	Panel 0 *
> >>
> >> Sequence 2 - MIPI_SEQ_INIT_OTP
> >> 	GPIO index 9, source 0, set 0 (0x00)
> >> 	Delay: 50000 us
> >> 	GPIO index 9, source 0, set 1 (0x01)
> >> 	Delay: 6000 us
> >> 	GPIO index 9, source 0, set 0 (0x00)
> >> 	Delay: 6000 us
> >> 	GPIO index 9, source 0, set 1 (0x01)
> >> 	Delay: 25000 us
> >> 	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
> >> 	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
> >> 	...
> >> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
> >> 	Delay: 120000 us
> >>
> >> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
> >> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
> >> 	Delay: 105000 us
> >> 	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
> >> 	Delay: 10000 us
> >>
> >> Sequence 5 - MIPI_SEQ_ASSERT_RESET
> >> 	Delay: 10000 us
> >> 	GPIO index 9, source 0, set 0 (0x00)
> >>
> >> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
> >> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
> >> the fixup from vlv_fixup_mipi_sequences() fixes up.
> >>
> >> Extend it to also apply to v2 sequences, this fixes the panel not working
> >> on the Acer Iconia One 8 A1-840.
> > 
> > Do we have the full VBT for this machine already in some bug? If not,
> > please file a new issue with the VBT attached for posterity.
> 
> I've filed: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14605
> with the VBT attached and I'll add a Closes: tag pointing to that
> to the patch while applying it to drm-intel-fixes.

Hi Hans,

Thank you so much for all the work here.

Just one thing here is that in drm-intel and drm-xe branches,
differently from drm-misc ones, we push to the -next variants, and
then the maintainers run cherry-pick rounds to propagate to the -fixes ones.

I have just moved it around with a force-push, pushed to drm-intel-next and
cherry-picked back.

Thank you,
Rodrigo.

> 
> Regards,
> 
> Hans
> 
> 
> 
> > 
> >>
> >> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> >> ---
> >>  drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
> >>  1 file changed, 4 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> >> index ba7b8938b17c..166ee11831ab 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> >> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
> >>  	int index, len;
> >>  
> >>  	if (drm_WARN_ON(display->drm,
> >> -			!data || panel->vbt.dsi.seq_version != 1))
> >> +			!data || panel->vbt.dsi.seq_version >= 3))
> >>  		return 0;
> >>  
> >>  	/* index = 1 to skip sequence byte */
> >> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
> >>  }
> >>  
> >>  /*
> >> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
> >> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
> >>   * The deassert must be done before calling intel_dsi_device_ready, so for
> >>   * these devices we split the init OTP sequence into a deassert sequence and
> >>   * the actual init OTP part.
> >> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
> >>  	u8 *init_otp;
> >>  	int len;
> >>  
> >> -	/* Limit this to v1 vid-mode sequences */
> >> +	/* Limit this to v1/v2 vid-mode sequences */
> >>  	if (panel->vbt.dsi.config->is_cmd_mode ||
> >> -	    panel->vbt.dsi.seq_version != 1)
> >> +	    panel->vbt.dsi.seq_version >= 3)
> >>  		return;
> >>  
> >>  	/* Only do this if there are otp and assert seqs and no deassert seq */
> >> -- 
> >> 2.49.0
> > 
> 

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

* Re: [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
  2025-07-10 15:34     ` Rodrigo Vivi
@ 2025-07-10 15:47       ` Hans de Goede
  0 siblings, 0 replies; 6+ messages in thread
From: Hans de Goede @ 2025-07-10 15:47 UTC (permalink / raw)
  To: Rodrigo Vivi
  Cc: Ville Syrjälä, Jani Nikula, Joonas Lahtinen,
	Tvrtko Ursulin, intel-gfx, dri-devel, Hans de Goede

Hi Rodrigo,

On 10-Jul-25 5:34 PM, Rodrigo Vivi wrote:
> On Mon, Jul 07, 2025 at 11:10:59PM +0200, Hans de Goede wrote:
>> Hi Ville,
>>
>> On 4-Jul-25 12:31 PM, Ville Syrjälä wrote:
>>> On Thu, Jul 03, 2025 at 04:38:24PM +0200, Hans de Goede wrote:
>>>> From: Hans de Goede <hdegoede@redhat.com>
>>>>
>>>> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
>>>> for some DSI panel's with version 2 mipi-sequences too.
>>>>
>>>> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
>>>> A1-840FHD which is different) has the following sequences:
>>>>
>>>> BDB block 53 (1284 bytes) - MIPI sequence block:
>>>> 	Sequence block version v2
>>>> 	Panel 0 *
>>>>
>>>> Sequence 2 - MIPI_SEQ_INIT_OTP
>>>> 	GPIO index 9, source 0, set 0 (0x00)
>>>> 	Delay: 50000 us
>>>> 	GPIO index 9, source 0, set 1 (0x01)
>>>> 	Delay: 6000 us
>>>> 	GPIO index 9, source 0, set 0 (0x00)
>>>> 	Delay: 6000 us
>>>> 	GPIO index 9, source 0, set 1 (0x01)
>>>> 	Delay: 25000 us
>>>> 	Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
>>>> 	Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
>>>> 	...
>>>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
>>>> 	Delay: 120000 us
>>>>
>>>> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
>>>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
>>>> 	Delay: 105000 us
>>>> 	Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
>>>> 	Delay: 10000 us
>>>>
>>>> Sequence 5 - MIPI_SEQ_ASSERT_RESET
>>>> 	Delay: 10000 us
>>>> 	GPIO index 9, source 0, set 0 (0x00)
>>>>
>>>> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
>>>> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
>>>> the fixup from vlv_fixup_mipi_sequences() fixes up.
>>>>
>>>> Extend it to also apply to v2 sequences, this fixes the panel not working
>>>> on the Acer Iconia One 8 A1-840.
>>>
>>> Do we have the full VBT for this machine already in some bug? If not,
>>> please file a new issue with the VBT attached for posterity.
>>
>> I've filed: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14605
>> with the VBT attached and I'll add a Closes: tag pointing to that
>> to the patch while applying it to drm-intel-fixes.
> 
> Hi Hans,
> 
> Thank you so much for all the work here.
> 
> Just one thing here is that in drm-intel and drm-xe branches,
> differently from drm-misc ones, we push to the -next variants, and
> then the maintainers run cherry-pick rounds to propagate to the -fixes ones.

Ok, I'll try to remember that for next time.

> I have just moved it around with a force-push, pushed to drm-intel-next and
> cherry-picked back.

Thank you for fixing things up.

Regards,

Hans




>>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>>> ---
>>>>  drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
>>>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>>>> index ba7b8938b17c..166ee11831ab 100644
>>>> --- a/drivers/gpu/drm/i915/display/intel_bios.c
>>>> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
>>>> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>>>>  	int index, len;
>>>>  
>>>>  	if (drm_WARN_ON(display->drm,
>>>> -			!data || panel->vbt.dsi.seq_version != 1))
>>>> +			!data || panel->vbt.dsi.seq_version >= 3))
>>>>  		return 0;
>>>>  
>>>>  	/* index = 1 to skip sequence byte */
>>>> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>>>>  }
>>>>  
>>>>  /*
>>>> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
>>>> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
>>>>   * The deassert must be done before calling intel_dsi_device_ready, so for
>>>>   * these devices we split the init OTP sequence into a deassert sequence and
>>>>   * the actual init OTP part.
>>>> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
>>>>  	u8 *init_otp;
>>>>  	int len;
>>>>  
>>>> -	/* Limit this to v1 vid-mode sequences */
>>>> +	/* Limit this to v1/v2 vid-mode sequences */
>>>>  	if (panel->vbt.dsi.config->is_cmd_mode ||
>>>> -	    panel->vbt.dsi.seq_version != 1)
>>>> +	    panel->vbt.dsi.seq_version >= 3)
>>>>  		return;
>>>>  
>>>>  	/* Only do this if there are otp and assert seqs and no deassert seq */
>>>> -- 
>>>> 2.49.0
>>>
>>


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

end of thread, other threads:[~2025-07-10 15:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-03 14:38 [PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too Hans de Goede
2025-07-04  9:26 ` Jani Nikula
2025-07-04 10:31 ` Ville Syrjälä
2025-07-07 21:10   ` Hans de Goede
2025-07-10 15:34     ` Rodrigo Vivi
2025-07-10 15:47       ` Hans de Goede

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).