Hi, On Mon, Nov 17, 2014 at 03:51:29PM -0800, Andrew Bresticker wrote: > >> +static const struct { > >> + const char *name; > >> + unsigned int num; > >> +} tegra_xhci_phy_types[] = { > >> + { > >> + .name = "usb3", > >> + .num = TEGRA_XUSB_USB3_PHYS, > >> + }, { > >> + .name = "utmi", > >> + .num = TEGRA_XUSB_UTMI_PHYS, > >> + }, { > >> + .name = "hsic", > >> + .num = TEGRA_XUSB_HSIC_PHYS, > >> + }, > > > > these should be using the generic PHY subsystem (drivers/phy). > > This driver does use the generic PHY subsystem, see patch 7 in this series :). true, I got misled by the fact that you added your phy provider to your pinctrl. Odd. > >> +static int tegra_xhci_load_firmware(struct tegra_xhci_hcd *tegra) > >> +{ > >> + struct device *dev = tegra->dev; > >> + struct tegra_xhci_fw_cfgtbl *cfg_tbl; > >> + struct tm fw_tm; > >> + u32 val, code_tag_blocks, code_size_blocks; > >> + u64 fw_base; > >> + time_t fw_time; > >> + unsigned long timeout; > >> + > >> + if (csb_readl(tegra, XUSB_CSB_MP_ILOAD_BASE_LO) != 0) { > >> + dev_info(dev, "Firmware already loaded, Falcon state 0x%x\n", > >> + csb_readl(tegra, XUSB_FALC_CPUCTL)); > >> + return 0; > >> + } > > > > won't this prevent rmmod && insmod from succeeding ? Maybe not, as you > > return 0 anyway, but if the firmware side craps out, it might be useful > > to reload the firmware and reset that block. I wonder if this prevents > > that. > > rmmod && insmod does work with the above since, as you mentioned, we > return successfully if the controller is already running. Attempting > to re-load the firmware if the controller is already running won't > work - it requires a full power-gate/ungate sequence of the > controller. Unfortunately, that sequence is rather complicated and I > haven't had a chance to implement it yet. it will hopefully be coming > later, though. Alright, could you add a comment on the source code stating that ? Perhaps a REVISIT note or FIXME ? cheers -- balbi
Attachment:
signature.asc
Description: Digital signature