Lines Matching +full:bcm58623 +full:- +full:srab

4  * Copyright (C) 2013 Hauke Mehrtens <hauke@hauke-m.de>
30 /* command and status register of the SRAB */
50 /* command and status register of the SRAB */
93 struct b53_srab_priv *priv = dev->priv; in b53_srab_request_grant()
94 u8 __iomem *regs = priv->regs; in b53_srab_request_grant()
109 return -EIO; in b53_srab_request_grant()
116 struct b53_srab_priv *priv = dev->priv; in b53_srab_release_grant()
117 u8 __iomem *regs = priv->regs; in b53_srab_release_grant()
127 struct b53_srab_priv *priv = dev->priv; in b53_srab_op()
128 u8 __iomem *regs = priv->regs; in b53_srab_op()
148 return -EIO; in b53_srab_op()
155 struct b53_srab_priv *priv = dev->priv; in b53_srab_read8()
156 u8 __iomem *regs = priv->regs; in b53_srab_read8()
177 struct b53_srab_priv *priv = dev->priv; in b53_srab_read16()
178 u8 __iomem *regs = priv->regs; in b53_srab_read16()
199 struct b53_srab_priv *priv = dev->priv; in b53_srab_read32()
200 u8 __iomem *regs = priv->regs; in b53_srab_read32()
221 struct b53_srab_priv *priv = dev->priv; in b53_srab_read48()
222 u8 __iomem *regs = priv->regs; in b53_srab_read48()
244 struct b53_srab_priv *priv = dev->priv; in b53_srab_read64()
245 u8 __iomem *regs = priv->regs; in b53_srab_read64()
267 struct b53_srab_priv *priv = dev->priv; in b53_srab_write8()
268 u8 __iomem *regs = priv->regs; in b53_srab_write8()
288 struct b53_srab_priv *priv = dev->priv; in b53_srab_write16()
289 u8 __iomem *regs = priv->regs; in b53_srab_write16()
309 struct b53_srab_priv *priv = dev->priv; in b53_srab_write32()
310 u8 __iomem *regs = priv->regs; in b53_srab_write32()
330 struct b53_srab_priv *priv = dev->priv; in b53_srab_write48()
331 u8 __iomem *regs = priv->regs; in b53_srab_write48()
352 struct b53_srab_priv *priv = dev->priv; in b53_srab_write64()
353 u8 __iomem *regs = priv->regs; in b53_srab_write64()
374 struct b53_device *dev = port->dev; in b53_srab_port_thread()
376 if (port->mode == PHY_INTERFACE_MODE_SGMII) in b53_srab_port_thread()
377 b53_port_event(dev->ds, port->num); in b53_srab_port_thread()
385 struct b53_device *dev = port->dev; in b53_srab_port_isr()
386 struct b53_srab_priv *priv = dev->priv; in b53_srab_port_isr()
389 writel(BIT(port->num), priv->regs + B53_SRAB_INTR); in b53_srab_port_isr()
397 struct b53_srab_priv *priv = dev->priv; in b53_srab_serdes_map_lane()
398 struct b53_srab_port_priv *p = &priv->port_intrs[port]; in b53_srab_serdes_map_lane()
400 if (p->mode != PHY_INTERFACE_MODE_SGMII) in b53_srab_serdes_map_lane()
416 struct b53_srab_priv *priv = dev->priv; in b53_srab_irq_enable()
417 struct b53_srab_port_priv *p = &priv->port_intrs[port]; in b53_srab_irq_enable()
423 if (p->irq == -ENXIO) in b53_srab_irq_enable()
426 ret = request_threaded_irq(p->irq, b53_srab_port_isr, in b53_srab_irq_enable()
428 dev_name(dev->dev), p); in b53_srab_irq_enable()
430 p->irq_enabled = true; in b53_srab_irq_enable()
437 struct b53_srab_priv *priv = dev->priv; in b53_srab_irq_disable()
438 struct b53_srab_port_priv *p = &priv->port_intrs[port]; in b53_srab_irq_disable()
440 if (p->irq_enabled) { in b53_srab_irq_disable()
441 free_irq(p->irq, p); in b53_srab_irq_disable()
442 p->irq_enabled = false; in b53_srab_irq_disable()
449 struct b53_srab_priv *priv = dev->priv; in b53_srab_phylink_get_caps()
450 struct b53_srab_port_priv *p = &priv->port_intrs[port]; in b53_srab_phylink_get_caps()
452 switch (p->mode) { in b53_srab_phylink_get_caps()
455 /* If p->mode indicates SGMII mode, that essentially means we in b53_srab_phylink_get_caps()
469 phy_interface_set_rgmii(config->supported_interfaces); in b53_srab_phylink_get_caps()
474 __set_bit(p->mode, config->supported_interfaces); in b53_srab_phylink_get_caps()
501 { .compatible = "brcm,bcm53010-srab" },
502 { .compatible = "brcm,bcm53011-srab" },
503 { .compatible = "brcm,bcm53012-srab" },
504 { .compatible = "brcm,bcm53018-srab" },
505 { .compatible = "brcm,bcm53019-srab" },
506 { .compatible = "brcm,bcm5301x-srab" },
507 { .compatible = "brcm,bcm11360-srab", .data = (void *)BCM583XX_DEVICE_ID },
508 { .compatible = "brcm,bcm58522-srab", .data = (void *)BCM58XX_DEVICE_ID },
509 { .compatible = "brcm,bcm58525-srab", .data = (void *)BCM58XX_DEVICE_ID },
510 { .compatible = "brcm,bcm58535-srab", .data = (void *)BCM58XX_DEVICE_ID },
511 { .compatible = "brcm,bcm58622-srab", .data = (void *)BCM58XX_DEVICE_ID },
512 { .compatible = "brcm,bcm58623-srab", .data = (void *)BCM58XX_DEVICE_ID },
513 { .compatible = "brcm,bcm58625-srab", .data = (void *)BCM58XX_DEVICE_ID },
514 { .compatible = "brcm,bcm88312-srab", .data = (void *)BCM58XX_DEVICE_ID },
515 { .compatible = "brcm,cygnus-srab", .data = (void *)BCM583XX_DEVICE_ID },
516 { .compatible = "brcm,nsp-srab", .data = (void *)BCM58XX_DEVICE_ID },
517 { .compatible = "brcm,omega-srab", .data = (void *)BCM583XX_DEVICE_ID },
526 reg = readl(priv->regs + B53_SRAB_CTRLS); in b53_srab_intr_set()
531 writel(reg, priv->regs + B53_SRAB_CTRLS); in b53_srab_intr_set()
537 struct b53_srab_priv *priv = dev->priv; in b53_srab_prepare_irq()
543 writel(0xffffffff, priv->regs + B53_SRAB_INTR); in b53_srab_prepare_irq()
546 port = &priv->port_intrs[i]; in b53_srab_prepare_irq()
556 port->num = i; in b53_srab_prepare_irq()
557 port->dev = dev; in b53_srab_prepare_irq()
558 port->irq = platform_get_irq_byname_optional(pdev, name); in b53_srab_prepare_irq()
568 struct b53_srab_priv *priv = dev->priv; in b53_srab_mux_init()
574 if (dev->pdata && dev->pdata->chip_id != BCM58XX_DEVICE_ID) in b53_srab_mux_init()
577 priv->mux_config = devm_platform_ioremap_resource(pdev, 1); in b53_srab_mux_init()
578 if (IS_ERR(priv->mux_config)) in b53_srab_mux_init()
584 for (port = 5; port > 3; port--, off += 4) { in b53_srab_mux_init()
585 p = &priv->port_intrs[port]; in b53_srab_mux_init()
587 reg = readl(priv->mux_config + B53_MUX_CONFIG_P5 + off); in b53_srab_mux_init()
590 p->mode = PHY_INTERFACE_MODE_SGMII; in b53_srab_mux_init()
596 p->mode = PHY_INTERFACE_MODE_MII; in b53_srab_mux_init()
599 p->mode = PHY_INTERFACE_MODE_GMII; in b53_srab_mux_init()
602 p->mode = PHY_INTERFACE_MODE_RGMII; in b53_srab_mux_init()
605 p->mode = PHY_INTERFACE_MODE_INTERNAL; in b53_srab_mux_init()
608 p->mode = PHY_INTERFACE_MODE_NA; in b53_srab_mux_init()
612 if (p->mode != PHY_INTERFACE_MODE_NA) in b53_srab_mux_init()
613 dev_info(&pdev->dev, "Port %d mode: %s\n", in b53_srab_mux_init()
614 port, phy_modes(p->mode)); in b53_srab_mux_init()
620 struct b53_platform_data *pdata = pdev->dev.platform_data; in b53_srab_probe()
621 struct device_node *dn = pdev->dev.of_node; in b53_srab_probe()
630 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); in b53_srab_probe()
632 return -ENOMEM; in b53_srab_probe()
634 pdata->chip_id = (u32)(unsigned long)of_id->data; in b53_srab_probe()
637 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in b53_srab_probe()
639 return -ENOMEM; in b53_srab_probe()
641 priv->regs = devm_platform_ioremap_resource(pdev, 0); in b53_srab_probe()
642 if (IS_ERR(priv->regs)) in b53_srab_probe()
643 return PTR_ERR(priv->regs); in b53_srab_probe()
645 dev = b53_switch_alloc(&pdev->dev, &b53_srab_ops, priv); in b53_srab_probe()
647 return -ENOMEM; in b53_srab_probe()
650 dev->pdata = pdata; in b53_srab_probe()
667 b53_srab_intr_set(dev->priv, false); in b53_srab_remove()
690 .name = "b53-srab-switch",
696 MODULE_AUTHOR("Hauke Mehrtens <hauke@hauke-m.de>");
697 MODULE_DESCRIPTION("B53 Switch Register Access Bridge Registers (SRAB) access driver");