Re: [[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-07-10 Thread ryadav

A brief update on this topic:

The DSI clock warnings are addressed after adding runtime_pm support to 
DPU driver [1].
MDSS GDSC is used as genpd w/ above series and is requested by parent 
MDSS device on

behalf of all child devices (like DPU, DSI etc).
Before adding the runtime_pm support, DSI driver probing was happening 
before MDSS GDSC
initialization and is why the RCG clock configuration for byte and pixel 
clocks was not

consumed by hardware leading to the warnings.

Regarding display handover from bootloader to Linux display drivers 
(referred as continuous splash feature),
is supported downstream for DSI displays (where splash screen in handed 
over to kernel drivers w/o re-init'ing the hardware)
and needs coordination (as pointed out by Rob) b/t display, clock, gdsc 
and iommu teams.
But continuous splash for hot-pluggable displays is not attempted so 
far.


We will discuss among the teams to see if continuous slash changes 
(present downstream) in conjunction w/ Rob's work

can make their way upstream.

[1] 
https://lists.freedesktop.org/archives/freedreno/2018-May/002502.html


Thanks,
Rajesh

On 2018-06-28 06:05, Rob Clark wrote:
On Wed, Jun 27, 2018 at 2:48 PM, Doug Anderson  
wrote:

Hi,

On Tue, Jun 26, 2018 at 10:27 AM, Rob Clark  
wrote:
On Tue, Jun 26, 2018 at 11:55 AM, Doug Anderson 
 wrote:

Hi,

On Mon, Jun 25, 2018 at 9:45 PM, Sandeep Panda 
 wrote:

From: Abhinav Kumar 

Setting the DSI PLL src in probe doesn't provide the clock
driver sufficient time to reclaim unused clock resources
from coreboot resulting in warnings from clock driver.

Move the DSI PLL src setting to modeset_init() so that the
clock driver can claim unused display clock resources before
the display driver requests for them again.


IMHO this is a bad design.  Sean and Stephen can feel free to 
override

me, but I think the clock driver should be improved to handle this
case and not require the clock to get disabled before Linux enables
it.



I experimented with it a while back[1] (in this case w/ lk lighting 
up

the display).  In that case I needed both the clk and gdsc code to
realize that clks/gdsc's were on at boot, and fixup the refcnt of the
clks (and parent clocks and so on).  And then when probed the display
driver would check if clocks were enabled to decide to readback the
state from the hw.  (Maybe you can short-circuit some of that if you
only care about DSI panels with a single fixed resolution, but as 
soon

as external displays come into the picture you can't assume so much
about the hw  state.)

BR,
-R

[1] https://github.com/freedreno/kernel-msm/commits/display-handover


It seems like something like that is the right real solution here, but
I guess someone needs to step up and work on it.



yeah, sadly I haven't found time to revisit it (kinda been short on
time to work on display/kernel side of things.. it would be helpful if
qcom would stop coming out with new gpu's so often :-P)

But I am pretty sure if we want a general solution that can also deal
w/ splash screen on hot-pluggable display, and not just the simpler
case of fixed resolution dsi panels, it is going to require
cooperation between clk/gdsc and display driver.


...in general I'm wary of any patch that will not work when
"clk_ignore_unused" is passed as a command line parameter.  It's
useful to be able to use this command line parameter for debugging
sometimes and it would be unfortunate if doing so spewed a bunch of
extra warnings.


for "full distro" config where all the display drivers are built as
modules and prior to real display driver loading you have kernel
inheriting the display via efifb or simplefb, I think we need to be
able to flag certain clocks and power domains (and on other platforms,
perhaps regulators) as "if the bootloader left this on, keep it that
way"..  I guess for simple-fb we could perhaps solve it by attaching
power domains and clks to the simple-fb node, but that doesn't really
work for efifb..

BR,
-R





On a side node, it appears that even without ${SUBJECT} patch the
warnings seem to have gone away with the latest stack of patches I've
been testing.  The warnings don't even come back with
"clk_ignore_unused".  I haven't personally dug into why, but I figured
I'd mention it.


-Doug

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

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


Re: [[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-06-27 Thread Rob Clark
On Wed, Jun 27, 2018 at 2:48 PM, Doug Anderson  wrote:
> Hi,
>
> On Tue, Jun 26, 2018 at 10:27 AM, Rob Clark  wrote:
>> On Tue, Jun 26, 2018 at 11:55 AM, Doug Anderson  
>> wrote:
>>> Hi,
>>>
>>> On Mon, Jun 25, 2018 at 9:45 PM, Sandeep Panda  
>>> wrote:
 From: Abhinav Kumar 

 Setting the DSI PLL src in probe doesn't provide the clock
 driver sufficient time to reclaim unused clock resources
 from coreboot resulting in warnings from clock driver.

 Move the DSI PLL src setting to modeset_init() so that the
 clock driver can claim unused display clock resources before
 the display driver requests for them again.
>>>
>>> IMHO this is a bad design.  Sean and Stephen can feel free to override
>>> me, but I think the clock driver should be improved to handle this
>>> case and not require the clock to get disabled before Linux enables
>>> it.
>>>
>>
>> I experimented with it a while back[1] (in this case w/ lk lighting up
>> the display).  In that case I needed both the clk and gdsc code to
>> realize that clks/gdsc's were on at boot, and fixup the refcnt of the
>> clks (and parent clocks and so on).  And then when probed the display
>> driver would check if clocks were enabled to decide to readback the
>> state from the hw.  (Maybe you can short-circuit some of that if you
>> only care about DSI panels with a single fixed resolution, but as soon
>> as external displays come into the picture you can't assume so much
>> about the hw  state.)
>>
>> BR,
>> -R
>>
>> [1] https://github.com/freedreno/kernel-msm/commits/display-handover
>
> It seems like something like that is the right real solution here, but
> I guess someone needs to step up and work on it.
>

yeah, sadly I haven't found time to revisit it (kinda been short on
time to work on display/kernel side of things.. it would be helpful if
qcom would stop coming out with new gpu's so often :-P)

But I am pretty sure if we want a general solution that can also deal
w/ splash screen on hot-pluggable display, and not just the simpler
case of fixed resolution dsi panels, it is going to require
cooperation between clk/gdsc and display driver.

> ...in general I'm wary of any patch that will not work when
> "clk_ignore_unused" is passed as a command line parameter.  It's
> useful to be able to use this command line parameter for debugging
> sometimes and it would be unfortunate if doing so spewed a bunch of
> extra warnings.

for "full distro" config where all the display drivers are built as
modules and prior to real display driver loading you have kernel
inheriting the display via efifb or simplefb, I think we need to be
able to flag certain clocks and power domains (and on other platforms,
perhaps regulators) as "if the bootloader left this on, keep it that
way"..  I guess for simple-fb we could perhaps solve it by attaching
power domains and clks to the simple-fb node, but that doesn't really
work for efifb..

BR,
-R


>
>
> On a side node, it appears that even without ${SUBJECT} patch the
> warnings seem to have gone away with the latest stack of patches I've
> been testing.  The warnings don't even come back with
> "clk_ignore_unused".  I haven't personally dug into why, but I figured
> I'd mention it.
>
>
> -Doug
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-06-27 Thread Doug Anderson
Hi,

On Tue, Jun 26, 2018 at 10:27 AM, Rob Clark  wrote:
> On Tue, Jun 26, 2018 at 11:55 AM, Doug Anderson  wrote:
>> Hi,
>>
>> On Mon, Jun 25, 2018 at 9:45 PM, Sandeep Panda  wrote:
>>> From: Abhinav Kumar 
>>>
>>> Setting the DSI PLL src in probe doesn't provide the clock
>>> driver sufficient time to reclaim unused clock resources
>>> from coreboot resulting in warnings from clock driver.
>>>
>>> Move the DSI PLL src setting to modeset_init() so that the
>>> clock driver can claim unused display clock resources before
>>> the display driver requests for them again.
>>
>> IMHO this is a bad design.  Sean and Stephen can feel free to override
>> me, but I think the clock driver should be improved to handle this
>> case and not require the clock to get disabled before Linux enables
>> it.
>>
>
> I experimented with it a while back[1] (in this case w/ lk lighting up
> the display).  In that case I needed both the clk and gdsc code to
> realize that clks/gdsc's were on at boot, and fixup the refcnt of the
> clks (and parent clocks and so on).  And then when probed the display
> driver would check if clocks were enabled to decide to readback the
> state from the hw.  (Maybe you can short-circuit some of that if you
> only care about DSI panels with a single fixed resolution, but as soon
> as external displays come into the picture you can't assume so much
> about the hw  state.)
>
> BR,
> -R
>
> [1] https://github.com/freedreno/kernel-msm/commits/display-handover

It seems like something like that is the right real solution here, but
I guess someone needs to step up and work on it.

...in general I'm wary of any patch that will not work when
"clk_ignore_unused" is passed as a command line parameter.  It's
useful to be able to use this command line parameter for debugging
sometimes and it would be unfortunate if doing so spewed a bunch of
extra warnings.


On a side node, it appears that even without ${SUBJECT} patch the
warnings seem to have gone away with the latest stack of patches I've
been testing.  The warnings don't even come back with
"clk_ignore_unused".  I haven't personally dug into why, but I figured
I'd mention it.


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


Re: [[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-06-26 Thread Rob Clark
On Tue, Jun 26, 2018 at 11:55 AM, Doug Anderson  wrote:
> Hi,
>
> On Mon, Jun 25, 2018 at 9:45 PM, Sandeep Panda  wrote:
>> From: Abhinav Kumar 
>>
>> Setting the DSI PLL src in probe doesn't provide the clock
>> driver sufficient time to reclaim unused clock resources
>> from coreboot resulting in warnings from clock driver.
>>
>> Move the DSI PLL src setting to modeset_init() so that the
>> clock driver can claim unused display clock resources before
>> the display driver requests for them again.
>
> IMHO this is a bad design.  Sean and Stephen can feel free to override
> me, but I think the clock driver should be improved to handle this
> case and not require the clock to get disabled before Linux enables
> it.
>

I experimented with it a while back[1] (in this case w/ lk lighting up
the display).  In that case I needed both the clk and gdsc code to
realize that clks/gdsc's were on at boot, and fixup the refcnt of the
clks (and parent clocks and so on).  And then when probed the display
driver would check if clocks were enabled to decide to readback the
state from the hw.  (Maybe you can short-circuit some of that if you
only care about DSI panels with a single fixed resolution, but as soon
as external displays come into the picture you can't assume so much
about the hw  state.)

BR,
-R

[1] https://github.com/freedreno/kernel-msm/commits/display-handover
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-06-26 Thread Doug Anderson
Hi,

On Mon, Jun 25, 2018 at 9:45 PM, Sandeep Panda  wrote:
> From: Abhinav Kumar 
>
> Setting the DSI PLL src in probe doesn't provide the clock
> driver sufficient time to reclaim unused clock resources
> from coreboot resulting in warnings from clock driver.
>
> Move the DSI PLL src setting to modeset_init() so that the
> clock driver can claim unused display clock resources before
> the display driver requests for them again.

IMHO this is a bad design.  Sean and Stephen can feel free to override
me, but I think the clock driver should be improved to handle this
case and not require the clock to get disabled before Linux enables
it.

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


[[DPU]PATCH] drm/msm/dsi: move the API setting PLL src to modeset_init()

2018-06-26 Thread Sandeep Panda
From: Abhinav Kumar 

Setting the DSI PLL src in probe doesn't provide the clock
driver sufficient time to reclaim unused clock resources
from coreboot resulting in warnings from clock driver.

Move the DSI PLL src setting to modeset_init() so that the
clock driver can claim unused display clock resources before
the display driver requests for them again.

Signed-off-by: Abhinav Kumar 
---
 drivers/gpu/drm/msm/dsi/dsi.c |  6 
 drivers/gpu/drm/msm/dsi/dsi.h |  1 +
 drivers/gpu/drm/msm/dsi/dsi_manager.c | 66 +++
 3 files changed, 51 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c
index 9fb612c17a39..ea100f15ce0d 100644
--- a/drivers/gpu/drm/msm/dsi/dsi.c
+++ b/drivers/gpu/drm/msm/dsi/dsi.c
@@ -211,6 +211,12 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct 
drm_device *dev,
priv = dev->dev_private;
msm_dsi->dev = dev;
 
+   ret = msm_dsi_manager_pll_setup(msm_dsi);
+   if (ret) {
+   dev_err(dev->dev, "failed to setup pll: %d\n", ret);
+   goto fail;
+   }
+
ret = msm_dsi_host_modeset_init(msm_dsi->host, dev);
if (ret) {
dev_err(dev->dev, "failed to modeset init host: %d\n", ret);
diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h
index 356953010256..a9fed9ab17b2 100644
--- a/drivers/gpu/drm/msm/dsi/dsi.h
+++ b/drivers/gpu/drm/msm/dsi/dsi.h
@@ -101,6 +101,7 @@ void msm_dsi_manager_attach_dsi_device(int id, u32 
device_flags);
 int msm_dsi_manager_register(struct msm_dsi *msm_dsi);
 void msm_dsi_manager_unregister(struct msm_dsi *msm_dsi);
 bool msm_dsi_manager_validate_current_config(u8 id);
+int msm_dsi_manager_pll_setup(struct msm_dsi *msm_dsi);
 
 /* msm dsi */
 static inline bool msm_dsi_device_connected(struct msm_dsi *msm_dsi)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c 
b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index 980b1bba8477..40da1229565e 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -72,25 +72,60 @@ static int dsi_mgr_parse_dual_dsi(struct device_node *np, 
int id)
return 0;
 }
 
-static int dsi_mgr_setup_components(int id)
+static int msm_dsi_pll_configure(struct msm_dsi *msm_dsi, bool is_dual)
 {
-   struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
-   struct msm_dsi *other_dsi = dsi_mgr_get_other_dsi(id);
+   struct msm_dsi *other_dsi = dsi_mgr_get_other_dsi(msm_dsi->id);
struct msm_dsi *clk_master_dsi = dsi_mgr_get_dsi(DSI_CLOCK_MASTER);
struct msm_dsi *clk_slave_dsi = dsi_mgr_get_dsi(DSI_CLOCK_SLAVE);
struct msm_dsi_pll *src_pll;
-   int ret;
-
-   if (!IS_DUAL_DSI()) {
-   ret = msm_dsi_host_register(msm_dsi->host, true);
-   if (ret)
-   return ret;
+   int ret = 0;
 
+   if (!is_dual) {
msm_dsi_phy_set_usecase(msm_dsi->phy, MSM_DSI_PHY_STANDALONE);
src_pll = msm_dsi_phy_get_pll(msm_dsi->phy);
if (IS_ERR(src_pll))
return PTR_ERR(src_pll);
ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll);
+   } else {
+   /* PLL0 is to drive both 2 DSI link clocks in Dual DSI mode. */
+   msm_dsi_phy_set_usecase(clk_master_dsi->phy,
+   MSM_DSI_PHY_MASTER);
+   msm_dsi_phy_set_usecase(clk_slave_dsi->phy,
+   MSM_DSI_PHY_SLAVE);
+   src_pll = msm_dsi_phy_get_pll(clk_master_dsi->phy);
+   if (IS_ERR(src_pll))
+   return PTR_ERR(src_pll);
+   ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll);
+   if (ret)
+   return ret;
+   ret = msm_dsi_host_set_src_pll(other_dsi->host, src_pll);
+   }
+
+   return ret;
+}
+
+int msm_dsi_manager_pll_setup(struct msm_dsi *msm_dsi)
+{
+   int ret;
+
+   if (!IS_DUAL_DSI())
+   ret = msm_dsi_pll_configure(msm_dsi, true);
+   else
+   ret = msm_dsi_pll_configure(msm_dsi, false);
+
+   return ret;
+}
+
+static int dsi_mgr_setup_components(int id)
+{
+   struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
+   struct msm_dsi *other_dsi = dsi_mgr_get_other_dsi(id);
+   int ret;
+
+   if (!IS_DUAL_DSI()) {
+   ret = msm_dsi_host_register(msm_dsi->host, true);
+   if (ret)
+   return ret;
} else if (!other_dsi) {
ret = 0;
} else {
@@ -111,19 +146,6 @@ static int dsi_mgr_setup_components(int id)
ret = msm_dsi_host_register(master_link_dsi->host, true);
if (ret)
return ret;
-
-   /* PLL0 is to drive both 2 DSI link clocks in Dual DSI mode. */
-