Lines Matching defs:usb3
58 int (*phy_write)(struct bcm_ns_usb3 *usb3, u16 reg, u16 value);
63 .compatible = "brcm,ns-ax-usb3-phy",
67 .compatible = "brcm,ns-bx-usb3-phy",
74 static int bcm_ns_usb3_mdio_phy_write(struct bcm_ns_usb3 *usb3, u16 reg,
77 return usb3->phy_write(usb3, reg, value);
80 static int bcm_ns_usb3_phy_init_ns_bx(struct bcm_ns_usb3 *usb3)
85 err = bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG,
91 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLL_CONTROL, 0x1000);
94 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLLA_CONTROL0, 0x6400);
97 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLLA_CONTROL1, 0xc000);
100 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLLA_CONTROL1, 0x8000);
103 writel(0, usb3->dmp + BCMA_RESET_CTL);
106 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLL_CONTROL, 0x9000);
109 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG,
113 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_LFPS_CMP, 0xf30d);
116 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_LFPS_DEGLITCH, 0x6302);
119 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG,
123 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_TX_PMD_CONTROL1, 0x1003);
128 static int bcm_ns_usb3_phy_init_ns_ax(struct bcm_ns_usb3 *usb3)
133 err = bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG,
138 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PLLA_CONTROL0, 0x6400);
140 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG, 0x80e0);
142 bcm_ns_usb3_mdio_phy_write(usb3, 0x02, 0x009c);
145 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_PHY_BASE_ADDR_REG,
148 bcm_ns_usb3_mdio_phy_write(usb3, 0x02, 0x21d3);
150 bcm_ns_usb3_mdio_phy_write(usb3, BCM_NS_USB3_TX_PMD_CONTROL1, 0x1003);
153 writel(0, usb3->dmp + BCMA_RESET_CTL);
160 struct bcm_ns_usb3 *usb3 = phy_get_drvdata(phy);
164 writel(BCMA_RESET_CTL_RESET, usb3->dmp + BCMA_RESET_CTL);
166 switch (usb3->family) {
168 err = bcm_ns_usb3_phy_init_ns_ax(usb3);
171 err = bcm_ns_usb3_phy_init_ns_bx(usb3);
190 static int bcm_ns_usb3_mdiodev_phy_write(struct bcm_ns_usb3 *usb3, u16 reg,
193 struct mdio_device *mdiodev = usb3->mdiodev;
204 struct bcm_ns_usb3 *usb3;
208 usb3 = devm_kzalloc(dev, sizeof(*usb3), GFP_KERNEL);
209 if (!usb3)
212 usb3->dev = dev;
213 usb3->mdiodev = mdiodev;
218 usb3->family = (enum bcm_ns_family)of_id->data;
220 syscon_np = of_parse_phandle(dev->of_node, "usb3-dmp-syscon", 0);
226 usb3->dmp = devm_ioremap_resource(dev, &res);
227 if (IS_ERR(usb3->dmp)) {
229 return PTR_ERR(usb3->dmp);
232 usb3->phy_write = bcm_ns_usb3_mdiodev_phy_write;
234 usb3->phy = devm_phy_create(dev, NULL, &ops);
235 if (IS_ERR(usb3->phy)) {
237 return PTR_ERR(usb3->phy);
240 phy_set_drvdata(usb3->phy, usb3);
261 static int bcm_ns_usb3_wait_reg(struct bcm_ns_usb3 *usb3, void __iomem *addr,
270 dev_err(usb3->dev, "Timeout waiting for register %p\n", addr);
275 static inline int bcm_ns_usb3_mii_mng_wait_idle(struct bcm_ns_usb3 *usb3)
277 return bcm_ns_usb3_wait_reg(usb3, usb3->ccb_mii + BCMA_CCB_MII_MNG_CTL,
282 static int bcm_ns_usb3_platform_phy_write(struct bcm_ns_usb3 *usb3, u16 reg,
288 err = bcm_ns_usb3_mii_mng_wait_idle(usb3);
290 dev_err(usb3->dev, "Couldn't write 0x%08x value\n", value);
298 writel(tmp, usb3->ccb_mii + BCMA_CCB_MII_MNG_CMD_DATA);
300 return bcm_ns_usb3_mii_mng_wait_idle(usb3);
307 struct bcm_ns_usb3 *usb3;
311 usb3 = devm_kzalloc(dev, sizeof(*usb3), GFP_KERNEL);
312 if (!usb3)
315 usb3->dev = dev;
320 usb3->family = (enum bcm_ns_family)of_id->data;
323 usb3->dmp = devm_ioremap_resource(dev, res);
324 if (IS_ERR(usb3->dmp)) {
326 return PTR_ERR(usb3->dmp);
330 usb3->ccb_mii = devm_ioremap_resource(dev, res);
331 if (IS_ERR(usb3->ccb_mii)) {
333 return PTR_ERR(usb3->ccb_mii);
337 writel(0x0000009a, usb3->ccb_mii + BCMA_CCB_MII_MNG_CTL);
342 usb3->phy_write = bcm_ns_usb3_platform_phy_write;
344 usb3->phy = devm_phy_create(dev, NULL, &ops);
345 if (IS_ERR(usb3->phy)) {
347 return PTR_ERR(usb3->phy);
350 phy_set_drvdata(usb3->phy, usb3);
351 platform_set_drvdata(pdev, usb3);