Hi, Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> writes: >> From: Felipe Balbi >> Sent: Wednesday, June 01, 2016 4:01 PM >> >> Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> writes: >> >> > I'm afraid but I found a regression of xhci-rcar in v4.7-rc1. >> > This regression is caused by the following commit: >> > >> > commit b1c127ae990bccf0187d741c1695a61e54de1943 >> > Author: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> >> > Date: Fri Apr 22 13:17:16 2016 +0300 >> > >> > usb: host: xhci: plat: make use of new methods in xhci_plat_priv >> > >> > Now that the code has been refactored enough, >> > switching over to using ->plat_start() and >> > ->init_quirk() becomes a very simple patch. >> > >> > After this patch, there are no further uses for >> > xhci_plat_type_is() which will be removed in a >> > follow-up patch. >> > >> > Acked-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> >> > Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> >> > Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx> >> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> >> > >> > < Overview > >> > The regression is the quirks flag "XHCI_NO_64BIT_SUPPORT" will be overwritten >> > by xhci_gen_setup(). Then, the driver will not work correctly. >> > >> > < Detail > >> > Since the previous code will do the following, the quirks flag can be set: >> > >> > xhci_plat_setup() >> > -> xhci_gen_setup(hcd, xhci_plat_quirks); >> > -> xhci->quirks = quirks; >> > -> get_quirks() [This is xhci_plat_quirks] >> > -> xhci->quirks |= XHCI_NO_64BIT_SUPPORT >> > >> > However, after we applied the patch above, the quirks will disappear: >> > >> > xhci_plat_setup() >> > -> xhci_priv_init_quirk(); >> > -> xhci_rcar_init_quirk(); >> > -> xhci->quirks |= XHCI_NO_64BIT_SUPPORT >> > -> xhci_gen_setup(hcd, xhci_plat_quirks); >> > -> xhci->quirks = quirks; <----------------- here >> > -> get_quirks() [This is xhci_plat_quirks] >> > >> > So, I submitted incremental patches to resolve this issue like the followings: >> > >> > xhci_plat_setup() >> > -> xhci_priv_init_quirk(); >> > -> xhci_rcar_init_quirk(); >> > -> xhci_gen_setup(hcd, xhci_plat_quirks); >> > -> xhci->quirks = quirks; >> > -> get_quirks() [This is xhci_plat_quirks] >> > -> xhci->quirks |= priv->quirks (XHCI_NO_64BIT_SUPPORT) >> >> isn't the following enough? >> >> @@ -4886,7 +4886,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) >> xhci->hcc_params2 = readl(&xhci->cap_regs->hcc_params2); >> xhci_print_registers(xhci); >> >> - xhci->quirks = quirks; >> + xhci->quirks |= quirks; >> >> get_quirks(dev, xhci); > > Thank you for the comment! > You're correct. This also can resolve the issue. > Do you prefer such a simple patch? > At least, I prefer such a simple patch :) I'll defer that to Mathias :-) > Why I wrote this patch set is I thought I should implement similar > flow before regression. understood :-) -- balbi
Attachment:
signature.asc
Description: PGP signature