mirror of https://gitee.com/openkylin/linux.git
amd-xgbe: Support defining PHY resources in ETH device node
Simplify the device tree support of the amd-xgbe driver by defining the PHY-related resources within the ethernet device node. The support provides backwards compatibility with the original way. Update the driver version to 1.0.2. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7c12aa0877
commit
34bfff404c
|
@ -1,16 +1,20 @@
|
||||||
* AMD 10GbE driver (amd-xgbe)
|
* AMD 10GbE driver (amd-xgbe)
|
||||||
|
|
||||||
Required properties (ethernet device):
|
Required properties:
|
||||||
- compatible: Should be "amd,xgbe-seattle-v1a"
|
- compatible: Should be "amd,xgbe-seattle-v1a"
|
||||||
- reg: Address and length of the register sets for the device
|
- reg: Address and length of the register sets for the device
|
||||||
- MAC registers
|
- MAC registers
|
||||||
- PCS registers
|
- PCS registers
|
||||||
|
- SerDes Rx/Tx registers
|
||||||
|
- SerDes integration registers (1/2)
|
||||||
|
- SerDes integration registers (2/2)
|
||||||
- interrupt-parent: Should be the phandle for the interrupt controller
|
- interrupt-parent: Should be the phandle for the interrupt controller
|
||||||
that services interrupts for this device
|
that services interrupts for this device
|
||||||
- interrupts: Should contain the amd-xgbe interrupt(s). The first interrupt
|
- interrupts: Should contain the amd-xgbe interrupt(s). The first interrupt
|
||||||
listed is required and is the general device interrupt. If the optional
|
listed is required and is the general device interrupt. If the optional
|
||||||
amd,per-channel-interrupt property is specified, then one additional
|
amd,per-channel-interrupt property is specified, then one additional
|
||||||
interrupt for each DMA channel supported by the device should be specified
|
interrupt for each DMA channel supported by the device should be specified.
|
||||||
|
The last interrupt listed should be the PCS auto-negotiation interrupt.
|
||||||
- clocks:
|
- clocks:
|
||||||
- DMA clock for the amd-xgbe device (used for calculating the
|
- DMA clock for the amd-xgbe device (used for calculating the
|
||||||
correct Rx interrupt watchdog timer value on a DMA channel
|
correct Rx interrupt watchdog timer value on a DMA channel
|
||||||
|
@ -19,28 +23,15 @@ Required properties (ethernet device):
|
||||||
- clock-names: Should be the names of the clocks
|
- clock-names: Should be the names of the clocks
|
||||||
- "dma_clk" for the DMA clock
|
- "dma_clk" for the DMA clock
|
||||||
- "ptp_clk" for the PTP clock
|
- "ptp_clk" for the PTP clock
|
||||||
- phy-handle: See ethernet.txt file in the same directory
|
|
||||||
- phy-mode: See ethernet.txt file in the same directory
|
- phy-mode: See ethernet.txt file in the same directory
|
||||||
|
|
||||||
Optional properties (ethernet device):
|
Optional properties:
|
||||||
- mac-address: mac address to be assigned to the device. Can be overridden
|
- mac-address: mac address to be assigned to the device. Can be overridden
|
||||||
by UEFI.
|
by UEFI.
|
||||||
- dma-coherent: Present if dma operations are coherent
|
- dma-coherent: Present if dma operations are coherent
|
||||||
- amd,per-channel-interrupt: Indicates that Rx and Tx complete will generate
|
- amd,per-channel-interrupt: Indicates that Rx and Tx complete will generate
|
||||||
a unique interrupt for each DMA channel - this requires an additional
|
a unique interrupt for each DMA channel - this requires an additional
|
||||||
interrupt be configured for each DMA channel
|
interrupt be configured for each DMA channel
|
||||||
|
|
||||||
Required properties (phy device):
|
|
||||||
- compatible: Should be "amd,xgbe-phy-seattle-v1a"
|
|
||||||
- reg: Address and length of the register sets for the device
|
|
||||||
- SerDes Rx/Tx registers
|
|
||||||
- SerDes integration registers (1/2)
|
|
||||||
- SerDes integration registers (2/2)
|
|
||||||
- interrupt-parent: Should be the phandle for the interrupt controller
|
|
||||||
that services interrupts for this device
|
|
||||||
- interrupts: Should contain the amd-xgbe-phy interrupt.
|
|
||||||
|
|
||||||
Optional properties (phy device):
|
|
||||||
- amd,speed-set: Speed capabilities of the device
|
- amd,speed-set: Speed capabilities of the device
|
||||||
0 - 1GbE and 10GbE (default)
|
0 - 1GbE and 10GbE (default)
|
||||||
1 - 2.5GbE and 10GbE
|
1 - 2.5GbE and 10GbE
|
||||||
|
@ -63,25 +54,19 @@ Example:
|
||||||
xgbe@e0700000 {
|
xgbe@e0700000 {
|
||||||
compatible = "amd,xgbe-seattle-v1a";
|
compatible = "amd,xgbe-seattle-v1a";
|
||||||
reg = <0 0xe0700000 0 0x80000>,
|
reg = <0 0xe0700000 0 0x80000>,
|
||||||
<0 0xe0780000 0 0x80000>;
|
<0 0xe0780000 0 0x80000>,
|
||||||
interrupt-parent = <&gic>;
|
<0 0xe1240800 0 0x00400>,
|
||||||
interrupts = <0 325 4>,
|
|
||||||
<0 326 1>, <0 327 1>, <0 328 1>, <0 329 1>;
|
|
||||||
amd,per-channel-interrupt;
|
|
||||||
clocks = <&xgbe_dma_clk>, <&xgbe_ptp_clk>;
|
|
||||||
clock-names = "dma_clk", "ptp_clk";
|
|
||||||
phy-handle = <&xgbe_phy>;
|
|
||||||
phy-mode = "xgmii";
|
|
||||||
mac-address = [ 02 a1 a2 a3 a4 a5 ];
|
|
||||||
};
|
|
||||||
|
|
||||||
xgbe_phy@e1240800 {
|
|
||||||
compatible = "amd,xgbe-phy-seattle-v1a";
|
|
||||||
reg = <0 0xe1240800 0 0x00400>,
|
|
||||||
<0 0xe1250000 0 0x00060>,
|
<0 0xe1250000 0 0x00060>,
|
||||||
<0 0xe1250080 0 0x00004>;
|
<0 0xe1250080 0 0x00004>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 323 4>;
|
interrupts = <0 325 4>,
|
||||||
|
<0 326 1>, <0 327 1>, <0 328 1>, <0 329 1>,
|
||||||
|
<0 323 4>;
|
||||||
|
amd,per-channel-interrupt;
|
||||||
|
clocks = <&xgbe_dma_clk>, <&xgbe_ptp_clk>;
|
||||||
|
clock-names = "dma_clk", "ptp_clk";
|
||||||
|
phy-mode = "xgmii";
|
||||||
|
mac-address = [ 02 a1 a2 a3 a4 a5 ];
|
||||||
amd,speed-set = <0>;
|
amd,speed-set = <0>;
|
||||||
amd,serdes-blwc = <1>, <1>, <0>;
|
amd,serdes-blwc = <1>, <1>, <0>;
|
||||||
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
||||||
|
|
|
@ -300,14 +300,21 @@ static struct platform_device *xgbe_of_get_phy_pdev(struct xgbe_prv_data *pdata)
|
||||||
struct platform_device *phy_pdev;
|
struct platform_device *phy_pdev;
|
||||||
|
|
||||||
phy_node = of_parse_phandle(dev->of_node, "phy-handle", 0);
|
phy_node = of_parse_phandle(dev->of_node, "phy-handle", 0);
|
||||||
if (!phy_node) {
|
if (phy_node) {
|
||||||
dev_err(dev, "unable to locate phy device\n");
|
/* Old style device tree:
|
||||||
return NULL;
|
* The XGBE and PHY resources are separate
|
||||||
|
*/
|
||||||
|
phy_pdev = of_find_device_by_node(phy_node);
|
||||||
|
of_node_put(phy_node);
|
||||||
|
} else {
|
||||||
|
/* New style device tree:
|
||||||
|
* The XGBE and PHY resources are grouped together with
|
||||||
|
* the PHY resources listed last
|
||||||
|
*/
|
||||||
|
get_device(dev);
|
||||||
|
phy_pdev = pdata->pdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
phy_pdev = of_find_device_by_node(phy_node);
|
|
||||||
of_node_put(phy_node);
|
|
||||||
|
|
||||||
return phy_pdev;
|
return phy_pdev;
|
||||||
}
|
}
|
||||||
#else /* CONFIG_OF */
|
#else /* CONFIG_OF */
|
||||||
|
@ -401,14 +408,14 @@ static int xgbe_probe(struct platform_device *pdev)
|
||||||
phy_dev = &phy_pdev->dev;
|
phy_dev = &phy_pdev->dev;
|
||||||
|
|
||||||
if (pdev == phy_pdev) {
|
if (pdev == phy_pdev) {
|
||||||
/* ACPI:
|
/* New style device tree or ACPI:
|
||||||
* The XGBE and PHY resources are grouped together with
|
* The XGBE and PHY resources are grouped together with
|
||||||
* the PHY resources listed last
|
* the PHY resources listed last
|
||||||
*/
|
*/
|
||||||
phy_memnum = xgbe_resource_count(pdev, IORESOURCE_MEM) - 3;
|
phy_memnum = xgbe_resource_count(pdev, IORESOURCE_MEM) - 3;
|
||||||
phy_irqnum = xgbe_resource_count(pdev, IORESOURCE_IRQ) - 1;
|
phy_irqnum = xgbe_resource_count(pdev, IORESOURCE_IRQ) - 1;
|
||||||
} else {
|
} else {
|
||||||
/* Device tree:
|
/* Old style device tree:
|
||||||
* The XGBE and PHY resources are separate
|
* The XGBE and PHY resources are separate
|
||||||
*/
|
*/
|
||||||
phy_memnum = 0;
|
phy_memnum = 0;
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
#include <net/dcbnl.h>
|
#include <net/dcbnl.h>
|
||||||
|
|
||||||
#define XGBE_DRV_NAME "amd-xgbe"
|
#define XGBE_DRV_NAME "amd-xgbe"
|
||||||
#define XGBE_DRV_VERSION "1.0.1"
|
#define XGBE_DRV_VERSION "1.0.2"
|
||||||
#define XGBE_DRV_DESC "AMD 10 Gigabit Ethernet Driver"
|
#define XGBE_DRV_DESC "AMD 10 Gigabit Ethernet Driver"
|
||||||
|
|
||||||
/* Descriptor related defines */
|
/* Descriptor related defines */
|
||||||
|
|
Loading…
Reference in New Issue