Commit f7cb403e authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net-xilinx-emaclite-adopt-clock-support'

Radhey Shyam Pandey says:

====================
net: xilinx: emaclite: Adopt clock support

This patchset adds emaclite clock support. AXI Ethernet Lite IP can also
be used on SoC platforms like Zynq UltraScale+ MPSoC which combines
powerful processing system (PS) and user-programmable logic (PL) into
the same device. On these platforms it is mandatory to explicitly enable
IP clocks for proper functionality.
====================

Link: https://patch.msgid.link/1728491303-1456171-1-git-send-email-radhey.shyam.pandey@amd.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 356d568f 76d46d76
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -29,6 +29,9 @@ properties:
  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  phy-handle: true

  local-mac-address: true
@@ -45,6 +48,7 @@ required:
  - compatible
  - reg
  - interrupts
  - clocks
  - phy-handle

additionalProperties: false
@@ -56,6 +60,7 @@ examples:
        reg = <0x40e00000 0x10000>;
        interrupt-parent = <&axi_intc_1>;
        interrupts = <1>;
        clocks = <&dummy>;
        local-mac-address = [00 00 00 00 00 00];
        phy-handle = <&phy0>;
        xlnx,rx-ping-pong;
+11 −10
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
 * Copyright (c) 2007 - 2013 Xilinx, Inc.
 */

#include <linux/clk.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/uaccess.h>
@@ -1091,13 +1092,14 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
	struct net_device *ndev = NULL;
	struct net_local *lp = NULL;
	struct device *dev = &ofdev->dev;
	struct clk *clkin;

	int rc = 0;

	dev_info(dev, "Device Tree Probing\n");

	/* Create an ethernet device instance */
	ndev = alloc_etherdev(sizeof(struct net_local));
	ndev = devm_alloc_etherdev(dev, sizeof(struct net_local));
	if (!ndev)
		return -ENOMEM;

@@ -1110,15 +1112,13 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
	/* Get IRQ for the device */
	rc = platform_get_irq(ofdev, 0);
	if (rc < 0)
		goto error;
		return rc;

	ndev->irq = rc;

	lp->base_addr = devm_platform_get_and_ioremap_resource(ofdev, 0, &res);
	if (IS_ERR(lp->base_addr)) {
		rc = PTR_ERR(lp->base_addr);
		goto error;
	}
	if (IS_ERR(lp->base_addr))
		return PTR_ERR(lp->base_addr);

	ndev->mem_start = res->start;
	ndev->mem_end = res->end;
@@ -1129,6 +1129,11 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
	lp->tx_ping_pong = get_bool(ofdev, "xlnx,tx-ping-pong");
	lp->rx_ping_pong = get_bool(ofdev, "xlnx,rx-ping-pong");

	clkin = devm_clk_get_optional_enabled(&ofdev->dev, NULL);
	if (IS_ERR(clkin))
		return dev_err_probe(&ofdev->dev, PTR_ERR(clkin),
				"Failed to get and enable clock from Device Tree\n");

	rc = of_get_ethdev_address(ofdev->dev.of_node, ndev);
	if (rc) {
		dev_warn(dev, "No MAC address found, using random\n");
@@ -1167,8 +1172,6 @@ static int xemaclite_of_probe(struct platform_device *ofdev)

put_node:
	of_node_put(lp->phy_node);
error:
	free_netdev(ndev);
	return rc;
}

@@ -1197,8 +1200,6 @@ static void xemaclite_of_remove(struct platform_device *of_dev)

	of_node_put(lp->phy_node);
	lp->phy_node = NULL;

	free_netdev(ndev);
}

#ifdef CONFIG_NET_POLL_CONTROLLER