提交 a4485d8d 编写于 作者: J Johan Hovold 提交者: openeuler-sync-bot

Revert "usb: dwc3: disable USB core PHY management"

stable inclusion
from stable-v5.10.156
commit 15155f7c0e302f9cbf9f0c00cfa4812905a300e7
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7MCG1

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=15155f7c0e302f9cbf9f0c00cfa4812905a300e7

--------------------------------

commit 5c294de3 upstream.

This reverts commit 6000b8d9.

The offending commit disabled the USB core PHY management as the dwc3
already manages the PHYs in question.

Unfortunately some platforms have started relying on having USB core
also controlling the PHY and this is specifically currently needed on
some Exynos platforms for PHY calibration or connected device may fail
to enumerate.

The PHY calibration was previously handled in the dwc3 driver, but to
work around some issues related to how the dwc3 driver interacts with
xhci (e.g. using multiple drivers) this was moved to USB core by commits
34c7ed72 ("usb: core: phy: add support for PHY calibration") and
a0a46556 ("usb: dwc3: remove generic PHY calibrate() calls").

The same PHY obviously should not be controlled from two different
places, which for example do no agree on the PHY mode or power state
during suspend, but as the offending patch was backported to stable,
let's revert it for now.
Reported-by: NStefan Agner <stefan@agner.ch>
Link: https://lore.kernel.org/lkml/808bdba846bb60456adf10a3016911ee@agner.ch/
Fixes: 6000b8d9 ("usb: dwc3: disable USB core PHY management")
Cc: stable@vger.kernel.org
Signed-off-by: NJohan Hovold <johan+linaro@kernel.org>
Tested-by: NMarek Szyprowski <m.szyprowski@samsung.com>
Acked-by: NThinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20221103144648.14197-1-johan+linaro@kernel.orgSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Nsanglipeng <sanglipeng1@jd.com>
(cherry picked from commit f503e80a)
上级 d5b7034b
......@@ -10,13 +10,8 @@
#include <linux/acpi.h>
#include <linux/platform_device.h>
#include "../host/xhci-plat.h"
#include "core.h"
static const struct xhci_plat_priv dwc3_xhci_plat_priv = {
.quirks = XHCI_SKIP_PHY_INIT,
};
static int dwc3_host_get_irq(struct dwc3 *dwc)
{
struct platform_device *dwc3_pdev = to_platform_device(dwc->dev);
......@@ -92,11 +87,6 @@ int dwc3_host_init(struct dwc3 *dwc)
goto err;
}
ret = platform_device_add_data(xhci, &dwc3_xhci_plat_priv,
sizeof(dwc3_xhci_plat_priv));
if (ret)
goto err;
memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
if (dwc->usb3_lpm_capable)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册