--- zzzz-none-000/linux-4.4.271/drivers/net/ethernet/broadcom/bgmac.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/drivers/net/ethernet/broadcom/bgmac.c 2023-04-19 10:22:29.000000000 +0000 @@ -17,6 +17,7 @@ #include #include #include +#include #include static const struct bcma_device_id bgmac_bcma_tbl[] = { @@ -1549,6 +1550,17 @@ mdiobus_free(mii_bus); } +static struct b53_platform_data bgmac_b53_pdata = { +}; + +static struct platform_device bgmac_b53_dev = { + .name = "b53-srab-switch", + .id = -1, + .dev = { + .platform_data = &bgmac_b53_pdata, + }, +}; + /************************************************** * BCMA bus ops **************************************************/ @@ -1657,8 +1669,11 @@ ns_core = bcma_find_core_unit(core->bus, BCMA_CORE_MAC_GBIT, ns_gmac); - if (ns_core && !bcma_core_is_enabled(ns_core)) - bcma_core_enable(ns_core, 0); + if (!ns_core) + continue; + + bcma_core_disable(ns_core, 0); + bcma_core_enable(ns_core, 0); } } @@ -1695,6 +1710,16 @@ net_dev->hw_features = net_dev->features; net_dev->vlan_features = net_dev->features; + if ((ci->id == BCMA_CHIP_ID_BCM4707 || + ci->id == BCMA_CHIP_ID_BCM53018) && + !bgmac_b53_pdata.regs) { + bgmac_b53_pdata.regs = ioremap_nocache(0x18007000, 0x1000); + + err = platform_device_register(&bgmac_b53_dev); + if (!err) + bgmac->b53_device = &bgmac_b53_dev; + } + err = register_netdev(bgmac->net_dev); if (err) { bgmac_err(bgmac, "Cannot register net device\n"); @@ -1721,6 +1746,10 @@ { struct bgmac *bgmac = bcma_get_drvdata(core); + if (bgmac->b53_device) + platform_device_unregister(&bgmac_b53_dev); + bgmac->b53_device = NULL; + unregister_netdev(bgmac->net_dev); bgmac_mii_unregister(bgmac); netif_napi_del(&bgmac->napi);