Commit 99c6b06a authored by Jeremy Linton's avatar Jeremy Linton Committed by David S. Miller

net: bcmgenet: Initial bcmgenet ACPI support

The rpi4 is capable of booting in ACPI mode with the latest
edk2-platform commits. As such it would be helpful if the genet
platform device were usable.

To achieve this we add a new MODULE_DEVICE_TABLE, and convert
a few dt specific methods to their generic device_ calls. Until
the next patch, ACPI based machines will fallback on random
mac addresses.
Signed-off-by: default avatarJeremy Linton <jeremy.linton@arm.com>
Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6ef31c8b
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#define pr_fmt(fmt) "bcmgenet: " fmt #define pr_fmt(fmt) "bcmgenet: " fmt
#include <linux/acpi.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -3466,10 +3467,9 @@ static int bcmgenet_probe(struct platform_device *pdev) ...@@ -3466,10 +3467,9 @@ static int bcmgenet_probe(struct platform_device *pdev)
const struct bcmgenet_plat_data *pdata; const struct bcmgenet_plat_data *pdata;
struct bcmgenet_priv *priv; struct bcmgenet_priv *priv;
struct net_device *dev; struct net_device *dev;
const void *macaddr; const void *macaddr = NULL;
unsigned int i; unsigned int i;
int err = -EIO; int err = -EIO;
const char *phy_mode_str;
/* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */ /* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */
dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1, dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1,
...@@ -3500,7 +3500,7 @@ static int bcmgenet_probe(struct platform_device *pdev) ...@@ -3500,7 +3500,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (dn) if (dn)
macaddr = of_get_mac_address(dn); macaddr = of_get_mac_address(dn);
else else if (pd)
macaddr = pd->mac_address; macaddr = pd->mac_address;
priv->base = devm_platform_ioremap_resource(pdev, 0); priv->base = devm_platform_ioremap_resource(pdev, 0);
...@@ -3547,8 +3547,9 @@ static int bcmgenet_probe(struct platform_device *pdev) ...@@ -3547,8 +3547,9 @@ static int bcmgenet_probe(struct platform_device *pdev)
priv->dev = dev; priv->dev = dev;
priv->pdev = pdev; priv->pdev = pdev;
if (of_id) {
pdata = of_id->data; pdata = device_get_match_data(&pdev->dev);
if (pdata) {
priv->version = pdata->version; priv->version = pdata->version;
priv->dma_max_burst_length = pdata->dma_max_burst_length; priv->dma_max_burst_length = pdata->dma_max_burst_length;
} else { } else {
...@@ -3595,8 +3596,7 @@ static int bcmgenet_probe(struct platform_device *pdev) ...@@ -3595,8 +3596,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
/* If this is an internal GPHY, power it on now, before UniMAC is /* If this is an internal GPHY, power it on now, before UniMAC is
* brought out of reset as absolutely no UniMAC activity is allowed * brought out of reset as absolutely no UniMAC activity is allowed
*/ */
if (dn && !of_property_read_string(dn, "phy-mode", &phy_mode_str) && if (device_get_phy_mode(&pdev->dev) == PHY_INTERFACE_MODE_INTERNAL)
!strcasecmp(phy_mode_str, "internal"))
bcmgenet_power_up(priv, GENET_POWER_PASSIVE); bcmgenet_power_up(priv, GENET_POWER_PASSIVE);
reset_umac(priv); reset_umac(priv);
...@@ -3771,6 +3771,12 @@ static int bcmgenet_suspend(struct device *d) ...@@ -3771,6 +3771,12 @@ static int bcmgenet_suspend(struct device *d)
static SIMPLE_DEV_PM_OPS(bcmgenet_pm_ops, bcmgenet_suspend, bcmgenet_resume); static SIMPLE_DEV_PM_OPS(bcmgenet_pm_ops, bcmgenet_suspend, bcmgenet_resume);
static const struct acpi_device_id genet_acpi_match[] = {
{ "BCM6E4E", (kernel_ulong_t)&bcm2711_plat_data },
{ },
};
MODULE_DEVICE_TABLE(acpi, genet_acpi_match);
static struct platform_driver bcmgenet_driver = { static struct platform_driver bcmgenet_driver = {
.probe = bcmgenet_probe, .probe = bcmgenet_probe,
.remove = bcmgenet_remove, .remove = bcmgenet_remove,
...@@ -3779,6 +3785,7 @@ static struct platform_driver bcmgenet_driver = { ...@@ -3779,6 +3785,7 @@ static struct platform_driver bcmgenet_driver = {
.name = "bcmgenet", .name = "bcmgenet",
.of_match_table = bcmgenet_match, .of_match_table = bcmgenet_match,
.pm = &bcmgenet_pm_ops, .pm = &bcmgenet_pm_ops,
.acpi_match_table = ACPI_PTR(genet_acpi_match),
}, },
}; };
module_platform_driver(bcmgenet_driver); module_platform_driver(bcmgenet_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment