mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 10:34:22 -04:00
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: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user