usb: host: xhci: mvebu: add reset on resume quirk
The mvebu xHCI host driver does not have suspend/resume support. Use of the XHCI_RESET_ON_RESUME quirk is mandatory in order to avoid failures after resume. This will work only if no USB device is plugged-in. While at it, mention in the Kconfig file that this IP is also present on the A3700 SoC. Signed-off-by: Ofer Heifetz <oferh@marvell.com> [miquel.raynal@bootlin.com: Reword the commit message] Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
b97a313483
Коммит
12453a897e
|
@ -70,13 +70,13 @@ config USB_XHCI_MTK
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
config USB_XHCI_MVEBU
|
config USB_XHCI_MVEBU
|
||||||
tristate "xHCI support for Marvell Armada 375/38x"
|
tristate "xHCI support for Marvell Armada 375/38x/37xx"
|
||||||
select USB_XHCI_PLATFORM
|
select USB_XHCI_PLATFORM
|
||||||
depends on HAS_IOMEM
|
depends on HAS_IOMEM
|
||||||
depends on ARCH_MVEBU || COMPILE_TEST
|
depends on ARCH_MVEBU || COMPILE_TEST
|
||||||
---help---
|
---help---
|
||||||
Say 'Y' to enable the support for the xHCI host controller
|
Say 'Y' to enable the support for the xHCI host controller
|
||||||
found in Marvell Armada 375/38x ARM SOCs.
|
found in Marvell Armada 375/38x/37xx ARM SOCs.
|
||||||
|
|
||||||
config USB_XHCI_RCAR
|
config USB_XHCI_RCAR
|
||||||
tristate "xHCI support for Renesas R-Car SoCs"
|
tristate "xHCI support for Renesas R-Car SoCs"
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <linux/usb/hcd.h>
|
#include <linux/usb/hcd.h>
|
||||||
|
|
||||||
#include "xhci-mvebu.h"
|
#include "xhci-mvebu.h"
|
||||||
|
#include "xhci.h"
|
||||||
|
|
||||||
#define USB3_MAX_WINDOWS 4
|
#define USB3_MAX_WINDOWS 4
|
||||||
#define USB3_WIN_CTRL(w) (0x0 + ((w) * 8))
|
#define USB3_WIN_CTRL(w) (0x0 + ((w) * 8))
|
||||||
|
@ -72,3 +73,13 @@ int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
|
||||||
|
{
|
||||||
|
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||||
|
|
||||||
|
/* Without reset on resume, the HC won't work at all */
|
||||||
|
xhci->quirks |= XHCI_RESET_ON_RESUME;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -12,10 +12,16 @@ struct usb_hcd;
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_USB_XHCI_MVEBU)
|
#if IS_ENABLED(CONFIG_USB_XHCI_MVEBU)
|
||||||
int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd);
|
int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd);
|
||||||
|
int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd);
|
||||||
#else
|
#else
|
||||||
static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
|
static inline int xhci_mvebu_mbus_init_quirk(struct usb_hcd *hcd)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int xhci_mvebu_a3700_init_quirk(struct usb_hcd *hcd)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* __LINUX_XHCI_MVEBU_H */
|
#endif /* __LINUX_XHCI_MVEBU_H */
|
||||||
|
|
|
@ -98,6 +98,10 @@ static const struct xhci_plat_priv xhci_plat_marvell_armada = {
|
||||||
.init_quirk = xhci_mvebu_mbus_init_quirk,
|
.init_quirk = xhci_mvebu_mbus_init_quirk,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct xhci_plat_priv xhci_plat_marvell_armada3700 = {
|
||||||
|
.init_quirk = xhci_mvebu_a3700_init_quirk,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen2 = {
|
static const struct xhci_plat_priv xhci_plat_renesas_rcar_gen2 = {
|
||||||
.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V1,
|
.firmware_name = XHCI_RCAR_FIRMWARE_NAME_V1,
|
||||||
.init_quirk = xhci_rcar_init_quirk,
|
.init_quirk = xhci_rcar_init_quirk,
|
||||||
|
@ -123,6 +127,9 @@ static const struct of_device_id usb_xhci_of_match[] = {
|
||||||
}, {
|
}, {
|
||||||
.compatible = "marvell,armada-380-xhci",
|
.compatible = "marvell,armada-380-xhci",
|
||||||
.data = &xhci_plat_marvell_armada,
|
.data = &xhci_plat_marvell_armada,
|
||||||
|
}, {
|
||||||
|
.compatible = "marvell,armada3700-xhci",
|
||||||
|
.data = &xhci_plat_marvell_armada3700,
|
||||||
}, {
|
}, {
|
||||||
.compatible = "renesas,xhci-r8a7790",
|
.compatible = "renesas,xhci-r8a7790",
|
||||||
.data = &xhci_plat_renesas_rcar_gen2,
|
.data = &xhci_plat_renesas_rcar_gen2,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче