Hi, On Fri, Feb 17, 2017 at 06:41:17PM +0100, Philipp Tomsich wrote: > #if defined(CONFIG_MACH_SUN8I_H3) || defined(CONFIG_MACH_SUN50I) > + /* On the A64-uQ7 (Lynx) we could do without opening OHCI for > + * HCI1, as the on-module hubs will do the transaction > + * translation. > + * > + * Until this is converted to the driver model (and can > + * finally go away), it won't do any harm to have this here... > + */
I'm not sure board specific comments make sense in generic code. > extra_ahb_gate_mask = 1 << AHB_GATE_OFFSET_USB_OHCI0; > #endif > priv->phy_index = ((uintptr_t)hccr - SUNXI_USB1_BASE) / BASE_DIST; > priv->ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST; > extra_ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST; > priv->phy_index++; /* Non otg phys start at 1 */ > > setbits_le32(&ccm->ahb_gate0, > priv->ahb_gate_mask | extra_ahb_gate_mask); > #ifdef CONFIG_SUNXI_GEN_SUN6I > setbits_le32(&ccm->ahb_reset0_cfg, > priv->ahb_gate_mask | extra_ahb_gate_mask); > #endif > > sunxi_usb_phy_init(priv->phy_index); > +#if defined(CONFIG_MACH_SUN50I) > + /* For the HCI blocks, the PHYCTL register is at 0x810, so > + it's an extra 0x400 for the EHCI block. This should go > + away once the PHYs use the driver model. */ This is not the proper comment style. > + sunxi_usb_phy_clear_SIDDP((void *)hccr + 0x400); > +#endif > + sunxi_usb_phy_passby(priv->phy_index, true); > sunxi_usb_phy_power_on(priv->phy_index); > > hcor = (struct ehci_hcor *)((uintptr_t)hccr + > HC_LENGTH(ehci_readl(&hccr->cr_capbase))); > > return ehci_register(dev, hccr, hcor, NULL, 0, plat->init_type); > } > > static int ehci_usb_remove(struct udevice *dev) > { > struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; > struct ehci_sunxi_priv *priv = dev_get_priv(dev); > int ret; > > ret = ehci_deregister(dev); > if (ret) > return ret; > > + sunxi_usb_phy_passby(priv->phy_index, false); > sunxi_usb_phy_exit(priv->phy_index); > > #ifdef CONFIG_SUNXI_GEN_SUN6I > clrbits_le32(&ccm->ahb_reset0_cfg, priv->ahb_gate_mask); > #endif > clrbits_le32(&ccm->ahb_gate0, priv->ahb_gate_mask); > > return 0; > } > > diff --git a/drivers/usb/host/ohci-sunxi.c b/drivers/usb/host/ohci-sunxi.c > index 0c45eec..047c3a9 100644 > --- a/drivers/usb/host/ohci-sunxi.c > +++ b/drivers/usb/host/ohci-sunxi.c > @@ -35,60 +35,68 @@ struct ohci_sunxi_priv { > static int ohci_usb_probe(struct udevice *dev) > { > struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; > struct usb_bus_priv *bus_priv = dev_get_uclass_priv(dev); > struct ohci_sunxi_priv *priv = dev_get_priv(dev); > struct ohci_regs *regs = (struct ohci_regs *)dev_get_addr(dev); > int extra_ahb_gate_mask = 0; > > bus_priv->companion = true; > > /* > * This should go away once we've moved to the driver model for > * clocks resp. phys. > */ > priv->ahb_gate_mask = 1 << AHB_GATE_OFFSET_USB_OHCI0; > #ifdef CONFIG_MACH_SUN8I_H3 > extra_ahb_gate_mask = 1 << AHB_GATE_OFFSET_USB_EHCI0; > #endif > priv->usb_gate_mask = CCM_USB_CTRL_OHCI0_CLK; > priv->phy_index = ((uintptr_t)regs - (SUNXI_USB1_BASE + 0x400)) / > BASE_DIST; > priv->ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST; > extra_ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST; > priv->usb_gate_mask <<= priv->phy_index; > priv->phy_index++; /* Non otg phys start at 1 */ > > setbits_le32(&ccm->ahb_gate0, > priv->ahb_gate_mask | extra_ahb_gate_mask); > setbits_le32(&ccm->usb_clk_cfg, priv->usb_gate_mask); > #ifdef CONFIG_SUNXI_GEN_SUN6I > setbits_le32(&ccm->ahb_reset0_cfg, > priv->ahb_gate_mask | extra_ahb_gate_mask); > #endif > > sunxi_usb_phy_init(priv->phy_index); > +#if defined(CONFIG_MACH_SUN50I) > + /* For the HCI blocks, the PHYCTL register is at 0x810, so it's > + an extra 0x400 for the EHCI block. This should go away once > + the PHYs use the driver model. */ Ditto. Thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
signature.asc
Description: PGP signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot