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 <[email protected]>
>>>>
>>>> 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 <[email protected]>
>>>> ---
>>>>  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
>>>
>>

Reply via email to