Re: [PATCH] drm/omap: fix crash if there's no video PLL

2018-04-05 Thread Keerthy


On Thursday 05 April 2018 12:25 PM, Tomi Valkeinen wrote:
> Commit 8a7eda7686675b73d74c22c0d5b83059f9d783f6 ("drm: omapdrm: dispc:
> Pass DISPC pointer to remaining dispc API functions") made dpi.c use
> ctx->pll even when there's no PLL, causing a crash at modeset on AM4
> EVM, and presumably all OMAP2/3 boards.
> 
> Fix this by having struct dpi_data pointer in the ctx instead, giving
> access to dispc without going through the pll.

Tested for display coming up on boot which was earlier broken on
am437x-gp-evm.

Tested-by: Keerthy 

> 
> Signed-off-by: Tomi Valkeinen 
> Reported-by: Keerthy 
> Cc: Laurent Pinchart 
> ---
>  drivers/gpu/drm/omapdrm/dss/dpi.c | 15 ---
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c 
> b/drivers/gpu/drm/omapdrm/dss/dpi.c
> index fb1c27f69e3a..3d662e6805eb 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -142,7 +142,7 @@ static enum dss_clk_source dpi_get_clk_src(struct 
> dpi_data *dpi)
>  }
>  
>  struct dpi_clk_calc_ctx {
> - struct dss_pll *pll;
> + struct dpi_data *dpi;
>   unsigned int clkout_idx;
>  
>   /* inputs */
> @@ -191,7 +191,7 @@ static bool dpi_calc_hsdiv_cb(int m_dispc, unsigned long 
> dispc,
>   ctx->pll_cinfo.mX[ctx->clkout_idx] = m_dispc;
>   ctx->pll_cinfo.clkout[ctx->clkout_idx] = dispc;
>  
> - return dispc_div_calc(ctx->pll->dss->dispc, dispc,
> + return dispc_div_calc(ctx->dpi->dss->dispc, dispc,
> ctx->pck_min, ctx->pck_max,
> dpi_calc_dispc_cb, ctx);
>  }
> @@ -208,8 +208,8 @@ static bool dpi_calc_pll_cb(int n, int m, unsigned long 
> fint,
>   ctx->pll_cinfo.fint = fint;
>   ctx->pll_cinfo.clkdco = clkdco;
>  
> - return dss_pll_hsdiv_calc_a(ctx->pll, clkdco,
> - ctx->pck_min, dss_get_max_fck_rate(ctx->pll->dss),
> + return dss_pll_hsdiv_calc_a(ctx->dpi->pll, clkdco,
> + ctx->pck_min, dss_get_max_fck_rate(ctx->dpi->dss),
>   dpi_calc_hsdiv_cb, ctx);
>  }
>  
> @@ -219,7 +219,7 @@ static bool dpi_calc_dss_cb(unsigned long fck, void *data)
>  
>   ctx->fck = fck;
>  
> - return dispc_div_calc(ctx->pll->dss->dispc, fck,
> + return dispc_div_calc(ctx->dpi->dss->dispc, fck,
> ctx->pck_min, ctx->pck_max,
> dpi_calc_dispc_cb, ctx);
>  }
> @@ -230,7 +230,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, 
> unsigned long pck,
>   unsigned long clkin;
>  
>   memset(ctx, 0, sizeof(*ctx));
> - ctx->pll = dpi->pll;
> + ctx->dpi = dpi;
>   ctx->clkout_idx = dss_pll_get_clkout_idx_for_src(dpi->clk_src);
>  
>   clkin = clk_get_rate(dpi->pll->clkin);
> @@ -244,7 +244,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, 
> unsigned long pck,
>   pll_min = 0;
>   pll_max = 0;
>  
> - return dss_pll_calc_a(ctx->pll, clkin,
> + return dss_pll_calc_a(ctx->dpi->pll, clkin,
>   pll_min, pll_max,
>   dpi_calc_pll_cb, ctx);
>   } else { /* DSS_PLL_TYPE_B */
> @@ -275,6 +275,7 @@ static bool dpi_dss_clk_calc(struct dpi_data *dpi, 
> unsigned long pck,
>   bool ok;
>  
>   memset(ctx, 0, sizeof(*ctx));
> + ctx->dpi = dpi;
>   if (pck > 1000 * i * i * i)
>   ctx->pck_min = max(pck - 1000 * i * i * i, 0lu);
>   else
> 
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH] drm/omap: fix crash if there's no video PLL

2018-04-05 Thread Laurent Pinchart
Hi Tomi,

On Thursday, 5 April 2018 09:55:37 EEST Tomi Valkeinen wrote:
> Commit 8a7eda7686675b73d74c22c0d5b83059f9d783f6 ("drm: omapdrm: dispc:
> Pass DISPC pointer to remaining dispc API functions") made dpi.c use
> ctx->pll even when there's no PLL, causing a crash at modeset on AM4
> EVM, and presumably all OMAP2/3 boards.
> 
> Fix this by having struct dpi_data pointer in the ctx instead, giving
> access to dispc without going through the pll.
> 
> Signed-off-by: Tomi Valkeinen 
> Reported-by: Keerthy 
> Cc: Laurent Pinchart 

Oops, sorry about this :-/

You should add a

Fixes: 8a7eda768667 ("drm: omapdrm: dispc: Pass DISPC pointer to remaining 
dispc API functions")

Reviewed-by: Laurent Pinchart 

> ---
>  drivers/gpu/drm/omapdrm/dss/dpi.c | 15 ---
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c
> b/drivers/gpu/drm/omapdrm/dss/dpi.c index fb1c27f69e3a..3d662e6805eb 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dpi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
> @@ -142,7 +142,7 @@ static enum dss_clk_source dpi_get_clk_src(struct
> dpi_data *dpi) }
> 
>  struct dpi_clk_calc_ctx {
> - struct dss_pll *pll;
> + struct dpi_data *dpi;
>   unsigned int clkout_idx;
> 
>   /* inputs */
> @@ -191,7 +191,7 @@ static bool dpi_calc_hsdiv_cb(int m_dispc, unsigned long
> dispc, ctx->pll_cinfo.mX[ctx->clkout_idx] = m_dispc;
>   ctx->pll_cinfo.clkout[ctx->clkout_idx] = dispc;
> 
> - return dispc_div_calc(ctx->pll->dss->dispc, dispc,
> + return dispc_div_calc(ctx->dpi->dss->dispc, dispc,
> ctx->pck_min, ctx->pck_max,
> dpi_calc_dispc_cb, ctx);
>  }
> @@ -208,8 +208,8 @@ static bool dpi_calc_pll_cb(int n, int m, unsigned long
> fint, ctx->pll_cinfo.fint = fint;
>   ctx->pll_cinfo.clkdco = clkdco;
> 
> - return dss_pll_hsdiv_calc_a(ctx->pll, clkdco,
> - ctx->pck_min, dss_get_max_fck_rate(ctx->pll->dss),
> + return dss_pll_hsdiv_calc_a(ctx->dpi->pll, clkdco,
> + ctx->pck_min, dss_get_max_fck_rate(ctx->dpi->dss),
>   dpi_calc_hsdiv_cb, ctx);
>  }
> 
> @@ -219,7 +219,7 @@ static bool dpi_calc_dss_cb(unsigned long fck, void
> *data)
> 
>   ctx->fck = fck;
> 
> - return dispc_div_calc(ctx->pll->dss->dispc, fck,
> + return dispc_div_calc(ctx->dpi->dss->dispc, fck,
> ctx->pck_min, ctx->pck_max,
> dpi_calc_dispc_cb, ctx);
>  }
> @@ -230,7 +230,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi,
> unsigned long pck, unsigned long clkin;
> 
>   memset(ctx, 0, sizeof(*ctx));
> - ctx->pll = dpi->pll;
> + ctx->dpi = dpi;
>   ctx->clkout_idx = dss_pll_get_clkout_idx_for_src(dpi->clk_src);
> 
>   clkin = clk_get_rate(dpi->pll->clkin);
> @@ -244,7 +244,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi,
> unsigned long pck, pll_min = 0;
>   pll_max = 0;
> 
> - return dss_pll_calc_a(ctx->pll, clkin,
> + return dss_pll_calc_a(ctx->dpi->pll, clkin,
>   pll_min, pll_max,
>   dpi_calc_pll_cb, ctx);
>   } else { /* DSS_PLL_TYPE_B */
> @@ -275,6 +275,7 @@ static bool dpi_dss_clk_calc(struct dpi_data *dpi,
> unsigned long pck, bool ok;
> 
>   memset(ctx, 0, sizeof(*ctx));
> + ctx->dpi = dpi;
>   if (pck > 1000 * i * i * i)
>   ctx->pck_min = max(pck - 1000 * i * i * i, 0lu);
>   else

-- 
Regards,

Laurent Pinchart



___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH] drm/omap: fix crash if there's no video PLL

2018-04-05 Thread Tomi Valkeinen
Commit 8a7eda7686675b73d74c22c0d5b83059f9d783f6 ("drm: omapdrm: dispc:
Pass DISPC pointer to remaining dispc API functions") made dpi.c use
ctx->pll even when there's no PLL, causing a crash at modeset on AM4
EVM, and presumably all OMAP2/3 boards.

Fix this by having struct dpi_data pointer in the ctx instead, giving
access to dispc without going through the pll.

Signed-off-by: Tomi Valkeinen 
Reported-by: Keerthy 
Cc: Laurent Pinchart 
---
 drivers/gpu/drm/omapdrm/dss/dpi.c | 15 ---
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c 
b/drivers/gpu/drm/omapdrm/dss/dpi.c
index fb1c27f69e3a..3d662e6805eb 100644
--- a/drivers/gpu/drm/omapdrm/dss/dpi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dpi.c
@@ -142,7 +142,7 @@ static enum dss_clk_source dpi_get_clk_src(struct dpi_data 
*dpi)
 }
 
 struct dpi_clk_calc_ctx {
-   struct dss_pll *pll;
+   struct dpi_data *dpi;
unsigned int clkout_idx;
 
/* inputs */
@@ -191,7 +191,7 @@ static bool dpi_calc_hsdiv_cb(int m_dispc, unsigned long 
dispc,
ctx->pll_cinfo.mX[ctx->clkout_idx] = m_dispc;
ctx->pll_cinfo.clkout[ctx->clkout_idx] = dispc;
 
-   return dispc_div_calc(ctx->pll->dss->dispc, dispc,
+   return dispc_div_calc(ctx->dpi->dss->dispc, dispc,
  ctx->pck_min, ctx->pck_max,
  dpi_calc_dispc_cb, ctx);
 }
@@ -208,8 +208,8 @@ static bool dpi_calc_pll_cb(int n, int m, unsigned long 
fint,
ctx->pll_cinfo.fint = fint;
ctx->pll_cinfo.clkdco = clkdco;
 
-   return dss_pll_hsdiv_calc_a(ctx->pll, clkdco,
-   ctx->pck_min, dss_get_max_fck_rate(ctx->pll->dss),
+   return dss_pll_hsdiv_calc_a(ctx->dpi->pll, clkdco,
+   ctx->pck_min, dss_get_max_fck_rate(ctx->dpi->dss),
dpi_calc_hsdiv_cb, ctx);
 }
 
@@ -219,7 +219,7 @@ static bool dpi_calc_dss_cb(unsigned long fck, void *data)
 
ctx->fck = fck;
 
-   return dispc_div_calc(ctx->pll->dss->dispc, fck,
+   return dispc_div_calc(ctx->dpi->dss->dispc, fck,
  ctx->pck_min, ctx->pck_max,
  dpi_calc_dispc_cb, ctx);
 }
@@ -230,7 +230,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, unsigned 
long pck,
unsigned long clkin;
 
memset(ctx, 0, sizeof(*ctx));
-   ctx->pll = dpi->pll;
+   ctx->dpi = dpi;
ctx->clkout_idx = dss_pll_get_clkout_idx_for_src(dpi->clk_src);
 
clkin = clk_get_rate(dpi->pll->clkin);
@@ -244,7 +244,7 @@ static bool dpi_pll_clk_calc(struct dpi_data *dpi, unsigned 
long pck,
pll_min = 0;
pll_max = 0;
 
-   return dss_pll_calc_a(ctx->pll, clkin,
+   return dss_pll_calc_a(ctx->dpi->pll, clkin,
pll_min, pll_max,
dpi_calc_pll_cb, ctx);
} else { /* DSS_PLL_TYPE_B */
@@ -275,6 +275,7 @@ static bool dpi_dss_clk_calc(struct dpi_data *dpi, unsigned 
long pck,
bool ok;
 
memset(ctx, 0, sizeof(*ctx));
+   ctx->dpi = dpi;
if (pck > 1000 * i * i * i)
ctx->pck_min = max(pck - 1000 * i * i * i, 0lu);
else
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel