phy: starfive: jh7110-usb: Fix USB 2.0 host occasional detection failure
[ Upstream commit 3f097adb9b6c804636bcf8d01e0e7bc037bee0d3 ] JH7110 USB 2.0 host fails to detect USB 2.0 devices occasionally. With a long time of debugging and testing, we found that setting Rx clock gating control signal to normal power consumption mode can solve this problem. Signed-off-by: Hal Feng <hal.feng@starfivetech.com> Link: https://lore.kernel.org/r/20250422101244.51686-1-hal.feng@starfivetech.com Signed-off-by: Vinod Koul <vkoul@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
eae121397e
commit
b8435b7697
@@ -16,6 +16,8 @@
|
|||||||
#include <linux/usb/of.h>
|
#include <linux/usb/of.h>
|
||||||
|
|
||||||
#define USB_125M_CLK_RATE 125000000
|
#define USB_125M_CLK_RATE 125000000
|
||||||
|
#define USB_CLK_MODE_OFF 0x0
|
||||||
|
#define USB_CLK_MODE_RX_NORMAL_PWR BIT(1)
|
||||||
#define USB_LS_KEEPALIVE_OFF 0x4
|
#define USB_LS_KEEPALIVE_OFF 0x4
|
||||||
#define USB_LS_KEEPALIVE_ENABLE BIT(4)
|
#define USB_LS_KEEPALIVE_ENABLE BIT(4)
|
||||||
|
|
||||||
@@ -68,6 +70,7 @@ static int jh7110_usb2_phy_init(struct phy *_phy)
|
|||||||
{
|
{
|
||||||
struct jh7110_usb2_phy *phy = phy_get_drvdata(_phy);
|
struct jh7110_usb2_phy *phy = phy_get_drvdata(_phy);
|
||||||
int ret;
|
int ret;
|
||||||
|
unsigned int val;
|
||||||
|
|
||||||
ret = clk_set_rate(phy->usb_125m_clk, USB_125M_CLK_RATE);
|
ret = clk_set_rate(phy->usb_125m_clk, USB_125M_CLK_RATE);
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -77,6 +80,10 @@ static int jh7110_usb2_phy_init(struct phy *_phy)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
val = readl(phy->regs + USB_CLK_MODE_OFF);
|
||||||
|
val |= USB_CLK_MODE_RX_NORMAL_PWR;
|
||||||
|
writel(val, phy->regs + USB_CLK_MODE_OFF);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user