]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
amd-xgbe: Support defining PHY resources in ETH device node
authorLendacky, Thomas <Thomas.Lendacky@amd.com>
Thu, 14 May 2015 16:44:21 +0000 (11:44 -0500)
committerDavid S. Miller <davem@davemloft.net>
Fri, 15 May 2015 19:21:43 +0000 (15:21 -0400)
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>
Documentation/devicetree/bindings/net/amd-xgbe.txt
drivers/net/ethernet/amd/xgbe/xgbe-main.c
drivers/net/ethernet/amd/xgbe/xgbe.h

index 5dbc55a2db907b7482e2c81c07e995717d7766ba..4bb624a73b5409555c529a0c85e2ee10d69ce3b8 100644 (file)
@@ -1,16 +1,20 @@
 * AMD 10GbE driver (amd-xgbe)
 
-Required properties (ethernet device):
+Required properties:
 - compatible: Should be "amd,xgbe-seattle-v1a"
 - reg: Address and length of the register sets for the device
    - MAC 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
   that services interrupts for this device
 - interrupts: Should contain the amd-xgbe interrupt(s). The first interrupt
   listed is required and is the general device interrupt. If the optional
   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:
    - DMA clock for the amd-xgbe device (used for calculating the
      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
    - "dma_clk" for the DMA 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
 
-Optional properties (ethernet device):
+Optional properties:
 - mac-address: mac address to be assigned to the device. Can be overridden
   by UEFI.
 - dma-coherent: Present if dma operations are coherent
 - amd,per-channel-interrupt: Indicates that Rx and Tx complete will generate
   a unique interrupt for each DMA channel - this requires an additional
   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
     0 - 1GbE and 10GbE (default)
     1 - 2.5GbE and 10GbE
@@ -63,25 +54,19 @@ Example:
        xgbe@e0700000 {
                compatible = "amd,xgbe-seattle-v1a";
                reg = <0 0xe0700000 0 0x80000>,
-                     <0 0xe0780000 0 0x80000>;
+                     <0 0xe0780000 0 0x80000>,
+                     <0 0xe1240800 0 0x00400>,
+                     <0 0xe1250000 0 0x00060>,
+                     <0 0xe1250080 0 0x00004>;
                interrupt-parent = <&gic>;
                interrupts = <0 325 4>,
-                            <0 326 1>, <0 327 1>, <0 328 1>, <0 329 1>;
+                            <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-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 0xe1250080 0 0x00004>;
-               interrupt-parent = <&gic>;
-               interrupts = <0 323 4>;
                amd,speed-set = <0>;
                amd,serdes-blwc = <1>, <1>, <0>;
                amd,serdes-cdr-rate = <2>, <2>, <7>;
index 0c219b30c129c520a098ae86566bc1036be56b10..34c521d8b5787da695f0bf7bc1ad7ecda75a7f69 100644 (file)
@@ -300,14 +300,21 @@ static struct platform_device *xgbe_of_get_phy_pdev(struct xgbe_prv_data *pdata)
        struct platform_device *phy_pdev;
 
        phy_node = of_parse_phandle(dev->of_node, "phy-handle", 0);
-       if (!phy_node) {
-               dev_err(dev, "unable to locate phy device\n");
-               return NULL;
+       if (phy_node) {
+               /* Old style device tree:
+                *   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;
 }
 #else   /* CONFIG_OF */
@@ -401,14 +408,14 @@ static int xgbe_probe(struct platform_device *pdev)
        phy_dev = &phy_pdev->dev;
 
        if (pdev == phy_pdev) {
-               /* ACPI:
+               /* New style device tree or ACPI:
                 *   The XGBE and PHY resources are grouped together with
                 *   the PHY resources listed last
                 */
                phy_memnum = xgbe_resource_count(pdev, IORESOURCE_MEM) - 3;
                phy_irqnum = xgbe_resource_count(pdev, IORESOURCE_IRQ) - 1;
        } else {
-               /* Device tree:
+               /* Old style device tree:
                 *   The XGBE and PHY resources are separate
                 */
                phy_memnum = 0;
index b6aecc95e63f53c78d2a4bd3a43166b906b4e733..f535d19da803b20c2aa07cf46a8c02f1988b2ce7 100644 (file)
 #include <net/dcbnl.h>
 
 #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"
 
 /* Descriptor related defines */