* [PATCH v2 0/2] phy: rockchip-inno-usb2: correct 480MHz clk_ops callbacks and stable time @ 2016-11-14 7:01 William Wu 2016-11-14 7:01 ` [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback William Wu 2016-11-14 7:01 ` [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time William Wu 0 siblings, 2 replies; 6+ messages in thread From: William Wu @ 2016-11-14 7:01 UTC (permalink / raw) To: kishon, heiko Cc: linux-kernel, linux-arm-kernel, linux-rockchip, devicetree, robh+dt, frank.wang, huangtao, dianders, briannorris, groeck, wulf This series try to correct the 480MHz output clock of USB2 PHY clk_ops callback and fix the delay time. It aims to make the 480MHz clock more sensible and stable. Tested on rk3366/rk3399 EVB board. William Wu (2): phy: rockchip-inno-usb2: correct clk_ops callback phy: rockchip-inno-usb2: correct 480MHz output clock stable time drivers/phy/phy-rockchip-inno-usb2.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) -- 2.0.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback 2016-11-14 7:01 [PATCH v2 0/2] phy: rockchip-inno-usb2: correct 480MHz clk_ops callbacks and stable time William Wu @ 2016-11-14 7:01 ` William Wu 2016-11-14 18:15 ` Doug Anderson 2016-11-14 7:01 ` [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time William Wu 1 sibling, 1 reply; 6+ messages in thread From: William Wu @ 2016-11-14 7:01 UTC (permalink / raw) To: kishon, heiko Cc: linux-kernel, linux-arm-kernel, linux-rockchip, devicetree, robh+dt, frank.wang, huangtao, dianders, briannorris, groeck, wulf Since we needs to delay ~1ms to wait for 480MHz output clock of USB2 PHY to become stable after turn on it, the delay time is pretty long for something that's supposed to be "atomic" like a clk_enable(). Consider that clk_enable() will disable interrupt and that a 1ms interrupt latency is not sensible. The 480MHz output clock should be handled in prepare callbacks which support gate a clk if the operation may sleep. Signed-off-by: William Wu <wulf@rock-chips.com> --- drivers/phy/phy-rockchip-inno-usb2.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/phy/phy-rockchip-inno-usb2.c b/drivers/phy/phy-rockchip-inno-usb2.c index ac20310..365e077 100644 --- a/drivers/phy/phy-rockchip-inno-usb2.c +++ b/drivers/phy/phy-rockchip-inno-usb2.c @@ -153,7 +153,7 @@ static inline bool property_enabled(struct rockchip_usb2phy *rphy, return tmp == reg->enable; } -static int rockchip_usb2phy_clk480m_enable(struct clk_hw *hw) +static int rockchip_usb2phy_clk480m_prepare(struct clk_hw *hw) { struct rockchip_usb2phy *rphy = container_of(hw, struct rockchip_usb2phy, clk480m_hw); @@ -172,7 +172,7 @@ static int rockchip_usb2phy_clk480m_enable(struct clk_hw *hw) return 0; } -static void rockchip_usb2phy_clk480m_disable(struct clk_hw *hw) +static void rockchip_usb2phy_clk480m_unprepare(struct clk_hw *hw) { struct rockchip_usb2phy *rphy = container_of(hw, struct rockchip_usb2phy, clk480m_hw); @@ -181,7 +181,7 @@ static void rockchip_usb2phy_clk480m_disable(struct clk_hw *hw) property_enable(rphy, &rphy->phy_cfg->clkout_ctl, false); } -static int rockchip_usb2phy_clk480m_enabled(struct clk_hw *hw) +static int rockchip_usb2phy_clk480m_prepared(struct clk_hw *hw) { struct rockchip_usb2phy *rphy = container_of(hw, struct rockchip_usb2phy, clk480m_hw); @@ -197,9 +197,9 @@ rockchip_usb2phy_clk480m_recalc_rate(struct clk_hw *hw, } static const struct clk_ops rockchip_usb2phy_clkout_ops = { - .enable = rockchip_usb2phy_clk480m_enable, - .disable = rockchip_usb2phy_clk480m_disable, - .is_enabled = rockchip_usb2phy_clk480m_enabled, + .prepare = rockchip_usb2phy_clk480m_prepare, + .unprepare = rockchip_usb2phy_clk480m_unprepare, + .is_prepared = rockchip_usb2phy_clk480m_prepared, .recalc_rate = rockchip_usb2phy_clk480m_recalc_rate, }; -- 2.0.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback 2016-11-14 7:01 ` [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback William Wu @ 2016-11-14 18:15 ` Doug Anderson 2016-11-15 3:22 ` wlf 0 siblings, 1 reply; 6+ messages in thread From: Doug Anderson @ 2016-11-14 18:15 UTC (permalink / raw) To: William Wu Cc: Kishon Vijay Abraham I, Heiko Stübner, linux-kernel, linux-arm-kernel, open list:ARM/Rockchip SoC..., devicetree, Rob Herring, Frank Wang, 黄涛, Brian Norris, Guenter Roeck William On Sun, Nov 13, 2016 at 11:01 PM, William Wu <wulf@rock-chips.com> wrote: > Since we needs to delay ~1ms to wait for 480MHz output clock > of USB2 PHY to become stable after turn on it, the delay time > is pretty long for something that's supposed to be "atomic" > like a clk_enable(). Consider that clk_enable() will disable > interrupt and that a 1ms interrupt latency is not sensible. > > The 480MHz output clock should be handled in prepare callbacks > which support gate a clk if the operation may sleep. > > Signed-off-by: William Wu <wulf@rock-chips.com> > --- > drivers/phy/phy-rockchip-inno-usb2.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) Reviewed-by: Douglas Anderson <dianders@chromium.org> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback 2016-11-14 18:15 ` Doug Anderson @ 2016-11-15 3:22 ` wlf 0 siblings, 0 replies; 6+ messages in thread From: wlf @ 2016-11-15 3:22 UTC (permalink / raw) To: Doug Anderson Cc: Kishon Vijay Abraham I, Heiko Stübner, linux-kernel, linux-arm-kernel, open list:ARM/Rockchip SoC..., devicetree, Rob Herring, Frank Wang, 黄涛, Brian Norris, Guenter Roeck Hi Doug, 在 2016年11月15日 02:15, Doug Anderson 写道: > William > > On Sun, Nov 13, 2016 at 11:01 PM, William Wu <wulf@rock-chips.com> wrote: >> Since we needs to delay ~1ms to wait for 480MHz output clock >> of USB2 PHY to become stable after turn on it, the delay time >> is pretty long for something that's supposed to be "atomic" >> like a clk_enable(). Consider that clk_enable() will disable >> interrupt and that a 1ms interrupt latency is not sensible. >> >> The 480MHz output clock should be handled in prepare callbacks >> which support gate a clk if the operation may sleep. >> >> Signed-off-by: William Wu <wulf@rock-chips.com> >> --- >> drivers/phy/phy-rockchip-inno-usb2.c | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) > Reviewed-by: Douglas Anderson <dianders@chromium.org> Thanks! I'll add Reviewed-by. > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time 2016-11-14 7:01 [PATCH v2 0/2] phy: rockchip-inno-usb2: correct 480MHz clk_ops callbacks and stable time William Wu 2016-11-14 7:01 ` [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback William Wu @ 2016-11-14 7:01 ` William Wu 2016-11-14 8:15 ` kbuild test robot 1 sibling, 1 reply; 6+ messages in thread From: William Wu @ 2016-11-14 7:01 UTC (permalink / raw) To: kishon, heiko Cc: linux-kernel, linux-arm-kernel, linux-rockchip, devicetree, robh+dt, frank.wang, huangtao, dianders, briannorris, groeck, wulf We found that the system crashed due to 480MHz output clock of USB2 PHY was unstable after clock had been enabled by gpu module. Theoretically, 1 millisecond is a critical value for 480MHz output clock stable time, so we try to change the delay time to 1.2 millisecond to avoid this issue. And the commit ed907fb1d7c3 ("phy: rockchip-inno-usb2: correct clk_ops callback") used prepare callbacks instead of enable callbacks to support gate a clk if the operation may sleep. So we can switch from delay to sleep functions. Signed-off-by: William Wu <wulf@rock-chips.com> --- Changes in v2: - use usleep_range() function instead of mdelay() drivers/phy/phy-rockchip-inno-usb2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/phy-rockchip-inno-usb2.c b/drivers/phy/phy-rockchip-inno-usb2.c index 365e077..578290b 100644 --- a/drivers/phy/phy-rockchip-inno-usb2.c +++ b/drivers/phy/phy-rockchip-inno-usb2.c @@ -166,7 +166,7 @@ static int rockchip_usb2phy_clk480m_prepare(struct clk_hw *hw) return ret; /* waitting for the clk become stable */ - mdelay(1); + usleep_range(1200); } return 0; -- 2.0.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time 2016-11-14 7:01 ` [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time William Wu @ 2016-11-14 8:15 ` kbuild test robot 0 siblings, 0 replies; 6+ messages in thread From: kbuild test robot @ 2016-11-14 8:15 UTC (permalink / raw) To: William Wu Cc: kbuild-all, kishon, heiko, linux-kernel, linux-arm-kernel, linux-rockchip, devicetree, robh+dt, frank.wang, huangtao, dianders, briannorris, groeck, wulf [-- Attachment #1: Type: text/plain, Size: 1610 bytes --] Hi William, [auto build test ERROR on rockchip/for-next] [also build test ERROR on v4.9-rc5 next-20161114] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/William-Wu/phy-rockchip-inno-usb2-correct-clk_ops-callback/20161114-150723 base: https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git for-next config: i386-allmodconfig (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): drivers/phy/phy-rockchip-inno-usb2.c: In function 'rockchip_usb2phy_clk480m_prepare': >> drivers/phy/phy-rockchip-inno-usb2.c:169:3: error: too few arguments to function 'usleep_range' usleep_range(1200); ^~~~~~~~~~~~ In file included from drivers/phy/phy-rockchip-inno-usb2.c:19:0: include/linux/delay.h:48:6: note: declared here void usleep_range(unsigned long min, unsigned long max); ^~~~~~~~~~~~ vim +/usleep_range +169 drivers/phy/phy-rockchip-inno-usb2.c 163 if (!property_enabled(rphy, &rphy->phy_cfg->clkout_ctl)) { 164 ret = property_enable(rphy, &rphy->phy_cfg->clkout_ctl, true); 165 if (ret) 166 return ret; 167 168 /* waitting for the clk become stable */ > 169 usleep_range(1200); 170 } 171 172 return 0; --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 56817 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-11-15 3:22 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-11-14 7:01 [PATCH v2 0/2] phy: rockchip-inno-usb2: correct 480MHz clk_ops callbacks and stable time William Wu 2016-11-14 7:01 ` [PATCH v2 1/2] phy: rockchip-inno-usb2: correct clk_ops callback William Wu 2016-11-14 18:15 ` Doug Anderson 2016-11-15 3:22 ` wlf 2016-11-14 7:01 ` [PATCH v2 2/2] phy: rockchip-inno-usb2: correct 480MHz output clock stable time William Wu 2016-11-14 8:15 ` kbuild test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).