Skip to content

Commit

Permalink
net: fman: Map the base address once
Browse files Browse the repository at this point in the history
We don't need to remap the base address from the resource twice (once in
mac_probe() and again in set_fman_mac_params()). We still need the
resource to get the end address, but we can use a single function call
to get both at once.

While we're at it, use platform_get_mem_or_io and devm_request_resource
to map the resource. I think this is the more "correct" way to do things
here, since we use the pdev resource, instead of creating a new one.
It's still a bit tricy, since we need to ensure that the resource is a
child of the fman region when it gets requested.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
  • Loading branch information
sean-anderson-seco authored and intel-lab-lkp committed Jun 17, 2022
1 parent 53cb951 commit 91ca730
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 27 deletions.
4 changes: 2 additions & 2 deletions drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
Expand Up @@ -218,8 +218,8 @@ static int dpaa_netdev_init(struct net_device *net_dev,
net_dev->netdev_ops = dpaa_ops;
mac_addr = priv->mac_dev->addr;

net_dev->mem_start = priv->mac_dev->res->start;
net_dev->mem_end = priv->mac_dev->res->end;
net_dev->mem_start = (unsigned long)priv->mac_dev->vaddr;
net_dev->mem_end = (unsigned long)priv->mac_dev->vaddr_end;

net_dev->min_mtu = ETH_MIN_MTU;
net_dev->max_mtu = dpaa_get_max_mtu();
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c
Expand Up @@ -18,7 +18,7 @@ static ssize_t dpaa_eth_show_addr(struct device *dev,

if (mac_dev)
return sprintf(buf, "%llx",
(unsigned long long)mac_dev->res->start);
(unsigned long long)mac_dev->vaddr);
else
return sprintf(buf, "none");
}
Expand Down
35 changes: 12 additions & 23 deletions drivers/net/ethernet/freescale/fman/mac.c
Expand Up @@ -28,7 +28,6 @@ MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("FSL FMan MAC API based driver");

struct mac_priv_s {
void __iomem *vaddr;
u8 cell_index;
struct fman *fman;
/* List of multicast addresses */
Expand Down Expand Up @@ -67,12 +66,7 @@ int set_fman_mac_params(struct mac_device *mac_dev,
{
struct mac_priv_s *priv = mac_dev->priv;

params->base_addr = (typeof(params->base_addr))
devm_ioremap(mac_dev->dev, mac_dev->res->start,
resource_size(mac_dev->res));
if (!params->base_addr)
return -ENOMEM;

params->base_addr = mac_dev->vaddr;
memcpy(&params->addr, mac_dev->addr, sizeof(mac_dev->addr));
params->max_speed = priv->max_speed;
params->phy_if = mac_dev->phy_if;
Expand Down Expand Up @@ -309,7 +303,7 @@ static int mac_probe(struct platform_device *_of_dev)
struct device_node *mac_node, *dev_node;
struct mac_device *mac_dev;
struct platform_device *of_dev;
struct resource res;
struct resource *res;
struct mac_priv_s *priv;
u32 val;
u8 fman_id;
Expand Down Expand Up @@ -372,30 +366,25 @@ static int mac_probe(struct platform_device *_of_dev)
of_node_put(dev_node);

/* Get the address of the memory mapped registers */
err = of_address_to_resource(mac_node, 0, &res);
if (err < 0) {
dev_err(dev, "of_address_to_resource(%pOF) = %d\n",
mac_node, err);
goto _return_of_node_put;
res = platform_get_mem_or_io(_of_dev, 0);
if (!res) {
dev_err(dev, "could not get registers\n");
return -EINVAL;
}

mac_dev->res = __devm_request_region(dev,
fman_get_mem_region(priv->fman),
res.start, resource_size(&res),
"mac");
if (!mac_dev->res) {
dev_err(dev, "__devm_request_mem_region(mac) failed\n");
err = -EBUSY;
err = devm_request_resource(dev, fman_get_mem_region(priv->fman), res);
if (err) {
dev_err_probe(dev, err, "could not request resource\n");
goto _return_of_node_put;
}

priv->vaddr = devm_ioremap(dev, mac_dev->res->start,
resource_size(mac_dev->res));
if (!priv->vaddr) {
mac_dev->vaddr = devm_ioremap(dev, res->start, resource_size(res));
if (!mac_dev->vaddr) {
dev_err(dev, "devm_ioremap() failed\n");
err = -EIO;
goto _return_of_node_put;
}
mac_dev->vaddr_end = (void *)res->end;

if (!of_device_is_available(mac_node)) {
err = -ENODEV;
Expand Down
3 changes: 2 additions & 1 deletion drivers/net/ethernet/freescale/fman/mac.h
Expand Up @@ -19,8 +19,9 @@ struct fman_mac;
struct mac_priv_s;

struct mac_device {
void __iomem *vaddr;
void __iomem *vaddr_end;
struct device *dev;
struct resource *res;
u8 addr[ETH_ALEN];
struct fman_port *port[2];
u32 if_support;
Expand Down

0 comments on commit 91ca730

Please sign in to comment.