[linux-sunxi] Re: [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver

2021-11-25 Thread Jagan Teki
On Mon, Nov 22, 2021 at 8:34 PM Maxime Ripard  wrote:
>
> On Mon, Nov 22, 2021 at 07:49:26PM +0530, Jagan Teki wrote:
> > On Mon, Nov 22, 2021 at 7:35 PM Maxime Ripard  wrote:
> > > On Mon, Nov 22, 2021 at 07:18:13PM +0530, Jagan Teki wrote:
> > > > On Mon, Nov 22, 2021 at 3:37 PM Maxime Ripard  wrote:
> > > > >
> > > > > On Mon, Nov 22, 2021 at 12:22:19PM +0530, Jagan Teki wrote:
> > > > > > Some display panels would come up with a non-DSI output, those
> > > > > > can have an option to connect the DSI host by means of interface
> > > > > > bridge converter.
> > > > > >
> > > > > > This DSI to non-DSI interface bridge converter would requires
> > > > > > DSI Host to handle drm bridge functionalities in order to DSI
> > > > > > Host to Interface bridge.
> > > > >
> > > > > In order to do this you would need to use the DRM bridge API...
> > > >
> > > > Sorry, which bridge API do you mean?
> > >
> > > Any variant of of_drm_find_bridge, and drm_bridge_attach. Just like
> > > we're doing in sun4i_rgb.c
> >
> > Yes, we have drm_bridge_attach in bind and bridge_function.attach
> > calls in this patch and of_drm_find_bridge in sun6i_mipi_dsi_attach.
> > Not sure which API's I've missed.
>
> None, that's my point, you don't need anything else in order to do what
> you wanted to achieve.

Correct, the order is some how confused in this patch. I will fix it
in next version.

>
> > >
> > > > > > This patch convert the existing to a drm bridge driver with a
> > > > > > built-in encoder support for compatibility with existing
> > > > > > component drivers.
> > > > >
> > > > > ... but changing the encoder driver to a bridge is completely
> > > > > unnecessary to do so. Why did you need to make that change?
> > > >
> > > > Idea of this series is to convert the driver to bridge and use the
> > > > latest bridge function from the v1 series.
> > >
> > > Ok, but it's not at all what you mention in your commit log? You don't
> > > need any of that in order to support a bridge downstream.
> >
> > I've mentioned "Converting to bridge driver" and thought it has
> > meaning of converting encoder related function to bridge functions as
> > well. Not think about specific description to describe on commit
> > message. Will update this.
>
> But you provided no reason to do so. The only one you did mention was
> that you wanted to support downstream bridges, but you don't need to
> convert the DSI driver to a bridge in order to do that.

Okay. Look like I've combined both downstream bridge support and
converting bridge together. This what it totally confused, I will fix
it.

>
> > > > > > Signed-off-by: Jagan Teki 
> > > > > >
> > > > > > ---
> > > > > > Changes for v5:
> > > > > > - add atomic APIs
> > > > > > - find host and device variant DSI devices.
> > > > > > Changes for v4, v3:
> > > > > > - none
> > > > > >
> > > > > >  drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 112 
> > > > > > -
> > > > > >  drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h |   7 ++
> > > > > >  2 files changed, 96 insertions(+), 23 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c 
> > > > > > b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > > > index 43d9c9e5198d..a6a272b55f77 100644
> > > > > > --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > > > +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > > > @@ -21,6 +21,7 @@
> > > > > >
> > > > > >  #include 
> > > > > >  #include 
> > > > > > +#include 
> > > > > >  #include 
> > > > > >  #include 
> > > > > >  #include 
> > > > > > @@ -713,10 +714,11 @@ static int sun6i_dsi_start(struct sun6i_dsi 
> > > > > > *dsi,
> > > > > >   return 0;
> > > > > >  }
> > > > > >
> > > > > > -static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder)
> > > > > > +static void sun6i_dsi_bridge_atomic_enable(struct drm_bridge 
> > > > > > *bridge,
> > > > > > +struct drm_bridge_state 
> > > > > > *old_bridge_state)
> > > > > >  {
> > > > > > - struct drm_display_mode *mode = 
> > > > > > >crtc->state->adjusted_mode;
> > > > > > - struct sun6i_dsi *dsi = encoder_to_sun6i_dsi(encoder);
> > > > > > + struct sun6i_dsi *dsi = bridge_to_sun6i_dsi(bridge);
> > > > > > + struct drm_display_mode *mode = 
> > > > > > >encoder->crtc->state->adjusted_mode;
> > > > > >   struct mipi_dsi_device *device = dsi->device;
> > > > > >   union phy_configure_opts opts = { };
> > > > > >   struct phy_configure_opts_mipi_dphy *cfg = _dphy;
> > > > > > @@ -772,6 +774,9 @@ static void sun6i_dsi_encoder_enable(struct 
> > > > > > drm_encoder *encoder)
> > > > > >   if (dsi->panel)
> > > > > >   drm_panel_prepare(dsi->panel);
> > > > > >
> > > > > > + if (dsi->next_bridge)
> > > > > > + 
> > > > > > dsi->next_bridge->funcs->atomic_pre_enable(dsi->next_bridge, 
> > > > > > old_bridge_state);
> > > > > > +
> > > > >
> > > > > Please use the proper helpers.
> > > >
> > > > If we use 

[linux-sunxi] Re: [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver

2021-11-25 Thread Jagan Teki
On Thu, Nov 25, 2021 at 9:40 PM Maxime Ripard  wrote:
>
> On Thu, Nov 25, 2021 at 07:55:41PM +0530, Jagan Teki wrote:
> > Hi,
> >
> > On Thu, Nov 25, 2021 at 7:45 PM Maxime Ripard  wrote:
> > >
> > > On Wed, Nov 24, 2021 at 12:02:47AM +0530, Jagan Teki wrote:
> > > > > > > > > + dsi->panel = of_drm_find_panel(remote);
> > > > > > > > > + if (IS_ERR(dsi->panel)) {
> > > > > > > > > + dsi->panel = NULL;
> > > > > > > > > +
> > > > > > > > > + dsi->next_bridge = of_drm_find_bridge(remote);
> > > > > > > > > + if (IS_ERR(dsi->next_bridge)) {
> > > > > > > > > + dev_err(dsi->dev, "failed to find 
> > > > > > > > > bridge\n");
> > > > > > > > > + return PTR_ERR(dsi->next_bridge);
> > > > > > > > > + }
> > > > > > > > > + } else {
> > > > > > > > > + dsi->next_bridge = NULL;
> > > > > > > > > + }
> > > > > > > > > +
> > > > > > > > > + of_node_put(remote);
> > > > > > > >
> > > > > > > > Using devm_drm_of_get_bridge would greatly simplify the driver
> > > > > > >
> > > > > > > I'm aware of this and this would break the existing sunxi dsi 
> > > > > > > binding,
> > > > > > > we are not using ports based pipeline in dsi node. Of-course you 
> > > > > > > have
> > > > > > > pointed the same before, please check below
> > > > > > > https://patchwork.kernel.org/project/dri-devel/patch/20210322140152.101709-2-ja...@amarulasolutions.com/
> > > > > >
> > > > > > Then drm_of_find_panel_or_bridge needs to be adjusted to handle the 
> > > > > > DSI
> > > > > > bindings and look for a panel or bridge not only through the OF 
> > > > > > graph,
> > > > > > but also on the child nodes
> > > > >
> > > > > Okay. I need to check this.
> > > >
> > > > devm_drm_of_get_bridge is not working with legacy binding like the one
> > > > used in sun6i dsi
> > >
> > > There's nothing legacy about it.
> >
> > What I'm mean legacy here with current binding used in sun6i-dsi like this.
> >
> >  {
> >   vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
> >   status = "okay";
> >
> >  panel@0 {
> >compatible = "bananapi,s070wv20-ct16-icn6211";
> >reg = <0>;
> >reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /*
> > LCD-RST: PL5 */
> >   enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /*
> > LCD-PWR-EN: PB7 */
> >   backlight = <>;
> > };
> > };
>
> Yes, I know, it's the generic DSI binding. It's still not legacy.
>
> > devm_drm_of_get_bridge cannot find the device with above binding and
> > able to find the device with below binding.
> >
> >  {
> >vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
> >status = "okay";
> >
> >   ports {
> > #address-cells = <1>;
> > #size-cells = <0>;
> >
> >dsi_out: port@0 {
> >reg = <0>;
> >
> >   dsi_out_bridge: endpoint {
> > remote-endpoint = <_out_dsi>;
> >   };
> >};
> >   };
> >
> >   panel@0 {
> >  compatible = "bananapi,s070wv20-ct16-icn6211";
> >  reg = <0>;
> >  reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /* LCD-RST: PL5 */
> >  enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /* LCD-PWR-EN: PB7 
> > */
> >  backlight = <>;
> >
> >   port {
> > bridge_out_dsi: endpoint {
> > remote-endpoint = <_out_bridge>;
> > };
> > };
> >};
> > };
>
> Yes, I know, and that's because ...

Okay. I will use find panel and bridge separately instead of
devm_drm_of_get_bridge in version patches.

>
> > >
> > > > https://patchwork.kernel.org/project/dri-devel/patch/20211122065223.88059-6-ja...@amarulasolutions.com/
> > > >
> > > > dsi->next_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 
> > > > 0, 0);
> > > > if (IS_ERR(dsi->next_bridge))
> > > >return PTR_ERR(dsi->next_bridge);
> > > >
> > > > It is only working if we have ports on the pipeline, something like this
> > > > https://patchwork.kernel.org/project/dri-devel/patch/20210214194102.126146-8-ja...@amarulasolutions.com/
> > > >
> > > > Please have a look and let me know if I miss anything?
> > >
> > > Yes, you're missing the answer you quoted earlier:
> >
> > Yes, I'm trying to resolve the comment one after another. Will get back.
>
> ... You've ignored that comment.

Not understand which comment you mean. There are few about bridge
conversion details, I will send my comments.

Thanks,
Jagan.

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 

[linux-sunxi] Re: [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver

2021-11-25 Thread Maxime Ripard
On Thu, Nov 25, 2021 at 07:55:41PM +0530, Jagan Teki wrote:
> Hi,
> 
> On Thu, Nov 25, 2021 at 7:45 PM Maxime Ripard  wrote:
> >
> > On Wed, Nov 24, 2021 at 12:02:47AM +0530, Jagan Teki wrote:
> > > > > > > > + dsi->panel = of_drm_find_panel(remote);
> > > > > > > > + if (IS_ERR(dsi->panel)) {
> > > > > > > > + dsi->panel = NULL;
> > > > > > > > +
> > > > > > > > + dsi->next_bridge = of_drm_find_bridge(remote);
> > > > > > > > + if (IS_ERR(dsi->next_bridge)) {
> > > > > > > > + dev_err(dsi->dev, "failed to find 
> > > > > > > > bridge\n");
> > > > > > > > + return PTR_ERR(dsi->next_bridge);
> > > > > > > > + }
> > > > > > > > + } else {
> > > > > > > > + dsi->next_bridge = NULL;
> > > > > > > > + }
> > > > > > > > +
> > > > > > > > + of_node_put(remote);
> > > > > > >
> > > > > > > Using devm_drm_of_get_bridge would greatly simplify the driver
> > > > > >
> > > > > > I'm aware of this and this would break the existing sunxi dsi 
> > > > > > binding,
> > > > > > we are not using ports based pipeline in dsi node. Of-course you 
> > > > > > have
> > > > > > pointed the same before, please check below
> > > > > > https://patchwork.kernel.org/project/dri-devel/patch/20210322140152.101709-2-ja...@amarulasolutions.com/
> > > > >
> > > > > Then drm_of_find_panel_or_bridge needs to be adjusted to handle the 
> > > > > DSI
> > > > > bindings and look for a panel or bridge not only through the OF graph,
> > > > > but also on the child nodes
> > > >
> > > > Okay. I need to check this.
> > >
> > > devm_drm_of_get_bridge is not working with legacy binding like the one
> > > used in sun6i dsi
> >
> > There's nothing legacy about it.
> 
> What I'm mean legacy here with current binding used in sun6i-dsi like this.
> 
>  {
>   vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
>   status = "okay";
> 
>  panel@0 {
>compatible = "bananapi,s070wv20-ct16-icn6211";
>reg = <0>;
>reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /*
> LCD-RST: PL5 */
>   enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /*
> LCD-PWR-EN: PB7 */
>   backlight = <>;
> };
> };

Yes, I know, it's the generic DSI binding. It's still not legacy.

> devm_drm_of_get_bridge cannot find the device with above binding and
> able to find the device with below binding.
> 
>  {
>vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
>status = "okay";
> 
>   ports {
> #address-cells = <1>;
> #size-cells = <0>;
> 
>dsi_out: port@0 {
>reg = <0>;
> 
>   dsi_out_bridge: endpoint {
> remote-endpoint = <_out_dsi>;
>   };
>};
>   };
> 
>   panel@0 {
>  compatible = "bananapi,s070wv20-ct16-icn6211";
>  reg = <0>;
>  reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /* LCD-RST: PL5 */
>  enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /* LCD-PWR-EN: PB7 */
>  backlight = <>;
> 
>   port {
> bridge_out_dsi: endpoint {
> remote-endpoint = <_out_bridge>;
> };
> };
>};
> };

Yes, I know, and that's because ...

> >
> > > https://patchwork.kernel.org/project/dri-devel/patch/20211122065223.88059-6-ja...@amarulasolutions.com/
> > >
> > > dsi->next_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 0, 
> > > 0);
> > > if (IS_ERR(dsi->next_bridge))
> > >return PTR_ERR(dsi->next_bridge);
> > >
> > > It is only working if we have ports on the pipeline, something like this
> > > https://patchwork.kernel.org/project/dri-devel/patch/20210214194102.126146-8-ja...@amarulasolutions.com/
> > >
> > > Please have a look and let me know if I miss anything?
> >
> > Yes, you're missing the answer you quoted earlier:
> 
> Yes, I'm trying to resolve the comment one after another. Will get back.

... You've ignored that comment.

Maxime

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/20211125161026.ndfygaa6c4nnst4i%40gilmour.


signature.asc
Description: PGP signature


[linux-sunxi] Re: [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver

2021-11-25 Thread Jagan Teki
Hi,

On Thu, Nov 25, 2021 at 7:45 PM Maxime Ripard  wrote:
>
> On Wed, Nov 24, 2021 at 12:02:47AM +0530, Jagan Teki wrote:
> > > > > > > + dsi->panel = of_drm_find_panel(remote);
> > > > > > > + if (IS_ERR(dsi->panel)) {
> > > > > > > + dsi->panel = NULL;
> > > > > > > +
> > > > > > > + dsi->next_bridge = of_drm_find_bridge(remote);
> > > > > > > + if (IS_ERR(dsi->next_bridge)) {
> > > > > > > + dev_err(dsi->dev, "failed to find 
> > > > > > > bridge\n");
> > > > > > > + return PTR_ERR(dsi->next_bridge);
> > > > > > > + }
> > > > > > > + } else {
> > > > > > > + dsi->next_bridge = NULL;
> > > > > > > + }
> > > > > > > +
> > > > > > > + of_node_put(remote);
> > > > > >
> > > > > > Using devm_drm_of_get_bridge would greatly simplify the driver
> > > > >
> > > > > I'm aware of this and this would break the existing sunxi dsi binding,
> > > > > we are not using ports based pipeline in dsi node. Of-course you have
> > > > > pointed the same before, please check below
> > > > > https://patchwork.kernel.org/project/dri-devel/patch/20210322140152.101709-2-ja...@amarulasolutions.com/
> > > >
> > > > Then drm_of_find_panel_or_bridge needs to be adjusted to handle the DSI
> > > > bindings and look for a panel or bridge not only through the OF graph,
> > > > but also on the child nodes
> > >
> > > Okay. I need to check this.
> >
> > devm_drm_of_get_bridge is not working with legacy binding like the one
> > used in sun6i dsi
>
> There's nothing legacy about it.

What I'm mean legacy here with current binding used in sun6i-dsi like this.

 {
  vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
  status = "okay";

 panel@0 {
   compatible = "bananapi,s070wv20-ct16-icn6211";
   reg = <0>;
   reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /*
LCD-RST: PL5 */
  enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /*
LCD-PWR-EN: PB7 */
  backlight = <>;
};
};

devm_drm_of_get_bridge cannot find the device with above binding and
able to find the device with below binding.

 {
   vcc-dsi-supply = <_dcdc1>; /* VCC-DSI */
   status = "okay";

  ports {
#address-cells = <1>;
#size-cells = <0>;

   dsi_out: port@0 {
   reg = <0>;

  dsi_out_bridge: endpoint {
remote-endpoint = <_out_dsi>;
  };
   };
  };

  panel@0 {
 compatible = "bananapi,s070wv20-ct16-icn6211";
 reg = <0>;
 reset-gpios = <_pio 0 5 GPIO_ACTIVE_HIGH>; /* LCD-RST: PL5 */
 enable-gpios = < 1 7 GPIO_ACTIVE_HIGH>; /* LCD-PWR-EN: PB7 */
 backlight = <>;

  port {
bridge_out_dsi: endpoint {
remote-endpoint = <_out_bridge>;
};
};
   };
};

>
> > https://patchwork.kernel.org/project/dri-devel/patch/20211122065223.88059-6-ja...@amarulasolutions.com/
> >
> > dsi->next_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 0, 
> > 0);
> > if (IS_ERR(dsi->next_bridge))
> >return PTR_ERR(dsi->next_bridge);
> >
> > It is only working if we have ports on the pipeline, something like this
> > https://patchwork.kernel.org/project/dri-devel/patch/20210214194102.126146-8-ja...@amarulasolutions.com/
> >
> > Please have a look and let me know if I miss anything?
>
> Yes, you're missing the answer you quoted earlier:

Yes, I'm trying to resolve the comment one after another. Will get back.

Thanks,
Jagan.

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/CAMty3ZC0KOUxr2rComOCfC70wGS_aSXzjFGS4f%3DpEB6MQHRGFw%40mail.gmail.com.


[linux-sunxi] Re: [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver

2021-11-25 Thread Maxime Ripard
On Wed, Nov 24, 2021 at 12:02:47AM +0530, Jagan Teki wrote:
> > > > > > + dsi->panel = of_drm_find_panel(remote);
> > > > > > + if (IS_ERR(dsi->panel)) {
> > > > > > + dsi->panel = NULL;
> > > > > > +
> > > > > > + dsi->next_bridge = of_drm_find_bridge(remote);
> > > > > > + if (IS_ERR(dsi->next_bridge)) {
> > > > > > + dev_err(dsi->dev, "failed to find bridge\n");
> > > > > > + return PTR_ERR(dsi->next_bridge);
> > > > > > + }
> > > > > > + } else {
> > > > > > + dsi->next_bridge = NULL;
> > > > > > + }
> > > > > > +
> > > > > > + of_node_put(remote);
> > > > >
> > > > > Using devm_drm_of_get_bridge would greatly simplify the driver
> > > >
> > > > I'm aware of this and this would break the existing sunxi dsi binding,
> > > > we are not using ports based pipeline in dsi node. Of-course you have
> > > > pointed the same before, please check below
> > > > https://patchwork.kernel.org/project/dri-devel/patch/20210322140152.101709-2-ja...@amarulasolutions.com/
> > >
> > > Then drm_of_find_panel_or_bridge needs to be adjusted to handle the DSI
> > > bindings and look for a panel or bridge not only through the OF graph,
> > > but also on the child nodes
> >
> > Okay. I need to check this.
> 
> devm_drm_of_get_bridge is not working with legacy binding like the one
> used in sun6i dsi

There's nothing legacy about it.

> https://patchwork.kernel.org/project/dri-devel/patch/20211122065223.88059-6-ja...@amarulasolutions.com/
> 
> dsi->next_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 0, 0);
> if (IS_ERR(dsi->next_bridge))
>return PTR_ERR(dsi->next_bridge);
> 
> It is only working if we have ports on the pipeline, something like this
> https://patchwork.kernel.org/project/dri-devel/patch/20210214194102.126146-8-ja...@amarulasolutions.com/
> 
> Please have a look and let me know if I miss anything?

Yes, you're missing the answer you quoted earlier:

> > > Then drm_of_find_panel_or_bridge needs to be adjusted to handle the DSI
> > > bindings and look for a panel or bridge not only through the OF graph,
> > > but also on the child nodes

Maxime

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/20211125141516.oymscgs3xcjqmgce%40gilmour.


signature.asc
Description: PGP signature