Thread (30 messages) flat view 30 messages, 7 authors, 2013-01-28
STALE4948d

[PATCH 1/4] drm/tilcdc: add TI LCD Controller DRM driver (v3)

From: Rob Clark <hidden>
Date: 2013-01-25 14:52:55
Also in: dri-devel, linux-fbdev, linux-omap

On Fri, Jan 25, 2013 at 8:15 AM, Mohammed, Afzal [off-list ref] wrote:
Hi Rob,

On Fri, Jan 25, 2013 at 19:29:40, Rob Clark wrote:
quoted
On Fri, Jan 25, 2013 at 7:19 AM, Mohammed, Afzal [off-list ref] wrote:
quoted
On Wed, Jan 23, 2013 at 04:06:22, Rob Clark wrote:
quoted
quoted
quoted
A simple DRM/KMS driver for the TI LCD Controller found in various
smaller TI parts (AM33xx, OMAPL138, etc).  This driver uses the
quoted
quoted
quoted
+void tilcdc_crtc_update_clk(struct drm_crtc *crtc)
quoted
+     /* in raster mode, minimum divisor is 2: */
+     ret = clk_set_rate(priv->disp_clk, crtc->mode.clock * 1000 * 2);
quoted
quoted
These things can better be handled with divider clock having a
minimum value (being discussed with Mike on how exactly it should
be) and instead of setting rate over a platform specific clock,
you can set rate over lcd clock using SET_RATE_PARENT at platform
level, more below,
quoted
I looked at that patch you were proposing for da8xx-fb..  to be
honest, it did not seem simpler to me, so I was sort of failing to see
the benefit..
It's not about being simple, but not doing the wrong way, here you are
relying on a platform specific clock in a driver, think about the case
where same IP is used on another platform. Either way it is not a good
thing to handle platform specific details (about disp_clk) in driver.
Right, but I was trying to understand what was the benefit that the
added complexity is.  I didn't realize on davinci that you are limited
to just setting divider values (which is going to drastically limit
the timings you can generate, although maybe not an issue if all you
support is a fixed lcd panel).
And Mike mentioned that one of design goals of CCF is to model these
kinds of clocks in IP's.
quoted
quoted
quoted
+     /* Configure the LCD clock divisor. */
+     tilcdc_write(dev, LCDC_CTRL_REG, LCDC_CLK_DIVISOR(div) |
+                     LCDC_RASTER_MODE);
+
+     if (priv->rev == 2)
+             tilcdc_set(dev, LCDC_CLK_ENABLE_REG,
+                             LCDC_V2_DMA_CLK_EN | LCDC_V2_LIDD_CLK_EN |
+                             LCDC_V2_CORE_CLK_EN);
Mike was suggesting to model the above using gate/divider/composite
clocks of CCF in the FB driver.
quoted
quoted
quoted
+     priv->clk = clk_get(dev->dev, "fck");
+     if (IS_ERR(priv->clk)) {
+             dev_err(dev->dev, "failed to get functional clock\n");
+             ret = -ENODEV;
+             goto fail;
+     }
+
+     priv->disp_clk = clk_get(dev->dev, "dpll_disp_ck");
+     if (IS_ERR(priv->clk)) {
+             dev_err(dev->dev, "failed to get display clock\n");
+             ret = -ENODEV;
+             goto fail;
+     }
"dpll_disp_ck" is a platform specific matter, driver should not
be handling platform specifics. And this won't work on DaVinci,
you can probably make use of
meaning the clock has a different name on davinci, or?  Presumably
there must be some clock generating the pixel clock for the display,
but I confess to not being too familiar with the details on davinci..
The only option for the driver in DaVinci is to configure clock rate
using the divider of LCDC IP, it has "fck", which gives a rate
decided by its ancestors.
Well, from looking at the other patch series it seems CCF doesn't
support minimum divider yet.  And davinci doesn't support CCF yet.  So
at the moment all this discussion is a bit moot.  I'd propose leaving
the driver as it is for now, because that at least makes it useful on
am33xx.  And when CCF and davinci have the needed support in place,
then send a patch to change the clock handling in tilcdc.  I don't
actually have any davinci hw to test on, but I can easily test on
am33xx.

BR,
-R
Regards
Afzal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help