Lines Matching +full:vsc7514 +full:- +full:switch
1 // SPDX-License-Identifier: (GPL-2.0 OR MIT)
3 * Microsemi Ocelot Switch driver
33 ocelot->map = vsc7514_regmap;
34 ocelot->num_mact_rows = 1024;
35 ocelot->ops = ops;
43 eth_random_addr(ocelot->base_mac);
44 ocelot->base_mac[5] &= 0xf0;
63 skb->dev->stats.rx_bytes += skb->len;
64 skb->dev->stats.rx_packets++;
89 { .compatible = "mscc,vsc7514-switch" },
126 for (port = 0; port < ocelot->num_phys_ports; port++)
134 for (port = 0; port < ocelot->num_phys_ports; port++) {
137 ocelot_port = ocelot->ports[port];
155 ocelot->ports = devm_kcalloc(ocelot->dev, ocelot->num_phys_ports,
157 if (!ocelot->ports)
158 return -ENOMEM;
160 ocelot->devlink_ports = devm_kcalloc(ocelot->dev,
161 ocelot->num_phys_ports,
162 sizeof(*ocelot->devlink_ports),
164 if (!ocelot->devlink_ports)
165 return -ENOMEM;
176 if (port < 0 || port >= ocelot->num_phys_ports) {
177 dev_err(ocelot->dev,
179 ocelot->num_phys_ports);
211 for (port = 0; port < ocelot->num_phys_ports; port++) {
229 for (port = 0; port < ocelot->num_phys_ports; port++) {
238 struct device_node *np = pdev->dev.of_node;
263 if (!np && !pdev->dev.platform_data)
264 return -ENODEV;
267 devlink_alloc(&ocelot_devlink_ops, sizeof(*ocelot), &pdev->dev);
269 return -ENOMEM;
272 ocelot->devlink = priv_to_devlink(ocelot);
274 ocelot->dev = &pdev->dev;
286 ocelot->targets[io_target[i].id] = NULL;
293 ocelot->targets[io_target[i].id] = target;
296 if (ocelot->targets[FDMA])
299 hsio = syscon_regmap_lookup_by_compatible("mscc,ocelot-hsio");
301 dev_err(&pdev->dev, "missing hsio syscon\n");
306 ocelot->targets[HSIO] = hsio;
318 err = devm_request_threaded_irq(&pdev->dev, irq_xtr, NULL,
325 if (irq_ptp_rdy > 0 && ocelot->targets[PTP]) {
326 err = devm_request_threaded_irq(&pdev->dev, irq_ptp_rdy, NULL,
334 ocelot->ptp = 1;
337 ports = of_get_child_by_name(np, "ethernet-ports");
339 dev_err(ocelot->dev, "no ethernet-ports child node found\n");
340 err = -ENODEV;
344 ocelot->num_phys_ports = of_get_child_count(ports);
345 ocelot->num_flooding_pgids = 1;
347 ocelot->vcap = vsc7514_vcap_props;
349 ocelot->vcap_pol.base = VSC7514_VCAP_POLICER_BASE;
350 ocelot->vcap_pol.max = VSC7514_VCAP_POLICER_MAX;
352 ocelot->npi = -1;
362 if (ocelot->fdma)
369 if (ocelot->ptp) {
372 dev_err(ocelot->dev,
374 ocelot->ptp = 0;
385 dev_info(&pdev->dev, "Ocelot switch probed\n");
405 if (ocelot->fdma)
407 devlink_unregister(ocelot->devlink);
416 devlink_free(ocelot->devlink);
423 .name = "ocelot-switch",
430 MODULE_DESCRIPTION("Microsemi Ocelot switch driver");