usb: dwc3: pci: Add "snps,dis_u2_susphy_quirk" for Intel Bay Trail
Commite0082698b6
("usb: dwc3: ulpi: conditionally resume ULPI PHY") fixed an issue where ULPI transfers would timeout if any requests where send to the phy sometime after init, giving it enough time to auto-suspend. Commite5f4ca3fce
("usb: dwc3: ulpi: Fix USB2.0 HS/FS/LS PHY suspend regression") changed the behavior to instead of clearing the DWC3_GUSB2PHYCFG_SUSPHY bit, add an extra sleep when it is set. But on Bay Trail devices, when phy_set_mode() gets called during init, this leads to errors like these: [ 28.451522] tusb1210 dwc3.ulpi: error -110 writing val 0x01 to reg 0x0a [ 28.464089] tusb1210 dwc3.ulpi: error -110 writing val 0x01 to reg 0x0a Add "snps,dis_u2_susphy_quirk" to the settings for Bay Trail devices to fix this. This restores the old behavior for Bay Trail devices, since previously the DWC3_GUSB2PHYCFG_SUSPHY bit would get cleared on the first ulpi_read/_write() and then was never set again. Fixes:e5f4ca3fce
("usb: dwc3: ulpi: Fix USB2.0 HS/FS/LS PHY suspend regression") Cc: stable@kernel.org Cc: Serge Semin <Sergey.Semin@baikalelectronics.ru> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Link: https://lore.kernel.org/r/20220213130524.18748-2-hdegoede@redhat.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
038438a25c
Коммит
d7c93a903f
|
@ -120,6 +120,13 @@ static const struct property_entry dwc3_pci_intel_properties[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static const struct property_entry dwc3_pci_intel_byt_properties[] = {
|
||||
PROPERTY_ENTRY_STRING("dr_mode", "peripheral"),
|
||||
PROPERTY_ENTRY_BOOL("snps,dis_u2_susphy_quirk"),
|
||||
PROPERTY_ENTRY_BOOL("linux,sysdev_is_parent"),
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct property_entry dwc3_pci_mrfld_properties[] = {
|
||||
PROPERTY_ENTRY_STRING("dr_mode", "otg"),
|
||||
PROPERTY_ENTRY_STRING("linux,extcon-name", "mrfld_bcove_pwrsrc"),
|
||||
|
@ -162,6 +169,10 @@ static const struct software_node dwc3_pci_intel_swnode = {
|
|||
.properties = dwc3_pci_intel_properties,
|
||||
};
|
||||
|
||||
static const struct software_node dwc3_pci_intel_byt_swnode = {
|
||||
.properties = dwc3_pci_intel_byt_properties,
|
||||
};
|
||||
|
||||
static const struct software_node dwc3_pci_intel_mrfld_swnode = {
|
||||
.properties = dwc3_pci_mrfld_properties,
|
||||
};
|
||||
|
@ -345,7 +356,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
|
|||
(kernel_ulong_t) &dwc3_pci_intel_swnode, },
|
||||
|
||||
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BYT),
|
||||
(kernel_ulong_t) &dwc3_pci_intel_swnode, },
|
||||
(kernel_ulong_t) &dwc3_pci_intel_byt_swnode, },
|
||||
|
||||
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_MRFLD),
|
||||
(kernel_ulong_t) &dwc3_pci_intel_mrfld_swnode, },
|
||||
|
|
Загрузка…
Ссылка в новой задаче