diff mbox series

[v2] drm/bridge: ps8640: Add software to support aux defer

Message ID 20220930042506.2529522-1-jason.yen@paradetech.corp-partner.google.com (mailing list archive)
State New, archived
Headers show
Series [v2] drm/bridge: ps8640: Add software to support aux defer | expand

Commit Message

Jason Yen Sept. 30, 2022, 4:25 a.m. UTC
This chip can not handle aux defer if the host directly program
its aux registers to access edid/dpcd. So we need let software
to handle the aux defer situation.

Signed-off-by: Jason Yen <jason.yen@paradetech.corp-partner.google.com>
---

Changes in v2:
- Add aux defer handler
- Remove incorrect statements

 drivers/gpu/drm/bridge/parade-ps8640.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Doug Anderson Sept. 30, 2022, 2:20 p.m. UTC | #1
Hi,

On Thu, Sep 29, 2022 at 9:25 PM Jason Yen
<jason.yen@paradetech.corp-partner.google.com> wrote:
>
> This chip can not handle aux defer if the host directly program
> its aux registers to access edid/dpcd. So we need let software
> to handle the aux defer situation.
>
> Signed-off-by: Jason Yen <jason.yen@paradetech.corp-partner.google.com>
> ---
>
> Changes in v2:
> - Add aux defer handler
> - Remove incorrect statements
>
>  drivers/gpu/drm/bridge/parade-ps8640.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c
> index 31e88cb39f8a..76ada237096d 100644
> --- a/drivers/gpu/drm/bridge/parade-ps8640.c
> +++ b/drivers/gpu/drm/bridge/parade-ps8640.c
> @@ -286,7 +286,6 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
>         }
>
>         switch (data & SWAUX_STATUS_MASK) {
> -       /* Ignore the DEFER cases as they are already handled in hardware */
>         case SWAUX_STATUS_NACK:
>         case SWAUX_STATUS_I2C_NACK:
>                 /*
> @@ -303,6 +302,14 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
>         case SWAUX_STATUS_ACKM:
>                 len = data & SWAUX_M_MASK;
>                 break;
> +       case SWAUX_STATUS_DEFER:
> +       case SWAUX_STATUS_I2C_DEFER:
> +               if (is_native_aux)
> +                       msg->reply |= DP_AUX_NATIVE_REPLY_DEFER;
> +               else
> +                       msg->reply |= DP_AUX_I2C_REPLY_DEFER;
> +               len = data & SWAUX_M_MASK;
> +               break;

This seems fine to me now. There is nothing too controversial here but
I'll still give this a few days on the list for anyone else to speak
up. I'll plan to land it midway through next week unless anything
comes up.

Reviewed-by: Douglas Anderson <dianders@chromium.org>
Doug Anderson Oct. 5, 2022, 3:14 p.m. UTC | #2
Hi,

On Fri, Sep 30, 2022 at 7:20 AM Doug Anderson <dianders@chromium.org> wrote:
>
> Hi,
>
> On Thu, Sep 29, 2022 at 9:25 PM Jason Yen
> <jason.yen@paradetech.corp-partner.google.com> wrote:
> >
> > This chip can not handle aux defer if the host directly program
> > its aux registers to access edid/dpcd. So we need let software
> > to handle the aux defer situation.
> >
> > Signed-off-by: Jason Yen <jason.yen@paradetech.corp-partner.google.com>
> > ---
> >
> > Changes in v2:
> > - Add aux defer handler
> > - Remove incorrect statements
> >
> >  drivers/gpu/drm/bridge/parade-ps8640.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c
> > index 31e88cb39f8a..76ada237096d 100644
> > --- a/drivers/gpu/drm/bridge/parade-ps8640.c
> > +++ b/drivers/gpu/drm/bridge/parade-ps8640.c
> > @@ -286,7 +286,6 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
> >         }
> >
> >         switch (data & SWAUX_STATUS_MASK) {
> > -       /* Ignore the DEFER cases as they are already handled in hardware */
> >         case SWAUX_STATUS_NACK:
> >         case SWAUX_STATUS_I2C_NACK:
> >                 /*
> > @@ -303,6 +302,14 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
> >         case SWAUX_STATUS_ACKM:
> >                 len = data & SWAUX_M_MASK;
> >                 break;
> > +       case SWAUX_STATUS_DEFER:
> > +       case SWAUX_STATUS_I2C_DEFER:
> > +               if (is_native_aux)
> > +                       msg->reply |= DP_AUX_NATIVE_REPLY_DEFER;
> > +               else
> > +                       msg->reply |= DP_AUX_I2C_REPLY_DEFER;
> > +               len = data & SWAUX_M_MASK;
> > +               break;
>
> This seems fine to me now. There is nothing too controversial here but
> I'll still give this a few days on the list for anyone else to speak
> up. I'll plan to land it midway through next week unless anything
> comes up.
>
> Reviewed-by: Douglas Anderson <dianders@chromium.org>

As promised, pushed to drm-misc-next:

562d2dd87028 drm/bridge: ps8640: Add software to support aux defer
diff mbox series

Patch

diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c
index 31e88cb39f8a..76ada237096d 100644
--- a/drivers/gpu/drm/bridge/parade-ps8640.c
+++ b/drivers/gpu/drm/bridge/parade-ps8640.c
@@ -286,7 +286,6 @@  static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
 	}
 
 	switch (data & SWAUX_STATUS_MASK) {
-	/* Ignore the DEFER cases as they are already handled in hardware */
 	case SWAUX_STATUS_NACK:
 	case SWAUX_STATUS_I2C_NACK:
 		/*
@@ -303,6 +302,14 @@  static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,
 	case SWAUX_STATUS_ACKM:
 		len = data & SWAUX_M_MASK;
 		break;
+	case SWAUX_STATUS_DEFER:
+	case SWAUX_STATUS_I2C_DEFER:
+		if (is_native_aux)
+			msg->reply |= DP_AUX_NATIVE_REPLY_DEFER;
+		else
+			msg->reply |= DP_AUX_I2C_REPLY_DEFER;
+		len = data & SWAUX_M_MASK;
+		break;
 	case SWAUX_STATUS_INVALID:
 		return -EOPNOTSUPP;
 	case SWAUX_STATUS_TIMEOUT: