]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MIPS: Octeon: Rearrange CVMX files in preperation for device tree
authorDavid Daney <david.daney@cavium.com>
Thu, 17 Nov 2011 18:53:49 +0000 (18:53 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 17 Nov 2011 18:53:49 +0000 (18:53 +0000)
Signed-off-by: David Daney <david.daney@cavium.com>
Cc: linux-mips@linux-mips.org
Cc: netdev@vger.kernel.org
Cc: devel@driverdev.osuosl.org
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Patchwork: https://patchwork.linux-mips.org/patch/2941/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/cavium-octeon/executive/cvmx-helper-sgmii.c
arch/mips/cavium-octeon/executive/cvmx-helper-spi.c
arch/mips/cavium-octeon/executive/cvmx-helper-xaui.c
arch/mips/cavium-octeon/executive/cvmx-helper.c
arch/mips/include/asm/octeon/cvmx-helper-loop.h
arch/mips/include/asm/octeon/cvmx-helper-npi.h
arch/mips/include/asm/octeon/cvmx-helper-rgmii.h
arch/mips/include/asm/octeon/cvmx-helper-sgmii.h
arch/mips/include/asm/octeon/cvmx-helper-spi.h
arch/mips/include/asm/octeon/cvmx-helper-xaui.h
arch/mips/include/asm/octeon/cvmx-helper.h

index 464347ffd3624e9fa298beaa71f2ae7832a0674b..0c0bf5d30e70375203a31efef560ff8302705979 100644 (file)
@@ -326,6 +326,10 @@ static int __cvmx_helper_sgmii_hardware_init(int interface, int num_ports)
        return 0;
 }
 
+int __cvmx_helper_sgmii_enumerate(int interface)
+{
+       return 4;
+}
 /**
  * Probe a SGMII interface and determine the number of ports
  * connected to it. The SGMII interface should still be down after
@@ -347,7 +351,7 @@ int __cvmx_helper_sgmii_probe(int interface)
        mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
        mode.s.en = 1;
        cvmx_write_csr(CVMX_GMXX_INF_MODE(interface), mode.u64);
-       return 4;
+       return __cvmx_helper_sgmii_enumerate(interface);
 }
 
 /**
index 02a444230ef7cc8c91c59661f2a47f5b4dd2d251..2830e4bdf7f3f6d2faeaf753ef286805e27a4cce 100644 (file)
@@ -51,6 +51,16 @@ void __cvmx_interrupt_stxx_int_msk_enable(int index);
 #define CVMX_HELPER_SPI_TIMEOUT 10
 #endif
 
+int __cvmx_helper_spi_enumerate(int interface)
+{
+       if ((cvmx_sysinfo_get()->board_type != CVMX_BOARD_TYPE_SIM) &&
+           cvmx_spi4000_is_present(interface)) {
+               return 10;
+       } else {
+               return 16;
+       }
+}
+
 /**
  * Probe a SPI interface and determine the number of ports
  * connected to it. The SPI interface should still be down after
index 667a8e3cb142807b12a3844d601c41ca093baff7..1723248e987dcc07c6336d82e6b954e178ee1875 100644 (file)
 void __cvmx_interrupt_gmxx_enable(int interface);
 void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block);
 void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index);
+
+int __cvmx_helper_xaui_enumerate(int interface)
+{
+       union cvmx_gmxx_hg2_control gmx_hg2_control;
+
+       /* If HiGig2 is enabled return 16 ports, otherwise return 1 port */
+       gmx_hg2_control.u64 = cvmx_read_csr(CVMX_GMXX_HG2_CONTROL(interface));
+       if (gmx_hg2_control.s.hg2tx_en)
+               return 16;
+       else
+               return 1;
+}
+
 /**
  * Probe a XAUI interface and determine the number of ports
  * connected to it. The XAUI interface should still be down
@@ -56,7 +69,6 @@ void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index);
 int __cvmx_helper_xaui_probe(int interface)
 {
        int i;
-       union cvmx_gmxx_hg2_control gmx_hg2_control;
        union cvmx_gmxx_inf_mode mode;
 
        /*
@@ -90,13 +102,7 @@ int __cvmx_helper_xaui_probe(int interface)
                pko_mem_port_ptrs.s.pid = interface * 16 + i;
                cvmx_write_csr(CVMX_PKO_MEM_PORT_PTRS, pko_mem_port_ptrs.u64);
        }
-
-       /* If HiGig2 is enabled return 16 ports, otherwise return 1 port */
-       gmx_hg2_control.u64 = cvmx_read_csr(CVMX_GMXX_HG2_CONTROL(interface));
-       if (gmx_hg2_control.s.hg2tx_en)
-               return 16;
-       else
-               return 1;
+       return __cvmx_helper_xaui_enumerate(interface);
 }
 
 /**
index daa8c8bbcfe4831a623e959085c853ab2e187708..fa4963856353e46dffc55a0b1d22a794f85f94c0 100644 (file)
@@ -234,21 +234,16 @@ static int __cvmx_helper_port_setup_ipd(int ipd_port)
 }
 
 /**
- * This function probes an interface to determine the actual
- * number of hardware ports connected to it. It doesn't setup the
- * ports or enable them. The main goal here is to set the global
- * interface_port_count[interface] correctly. Hardware setup of the
- * ports will be performed later.
+ * This function sets the interface_port_count[interface] correctly,
+ * without modifying any hardware configuration.  Hardware setup of
+ * the ports will be performed later.
  *
  * @interface: Interface to probe
  *
  * Returns Zero on success, negative on failure
  */
-int cvmx_helper_interface_probe(int interface)
+int cvmx_helper_interface_enumerate(int interface)
 {
-       /* At this stage in the game we don't want packets to be moving yet.
-          The following probe calls should perform hardware setup
-          needed to determine port counts. Receive must still be disabled */
        switch (cvmx_helper_interface_get_mode(interface)) {
                /* These types don't support ports to IPD/PKO */
        case CVMX_HELPER_INTERFACE_MODE_DISABLED:
@@ -258,7 +253,7 @@ int cvmx_helper_interface_probe(int interface)
                /* XAUI is a single high speed port */
        case CVMX_HELPER_INTERFACE_MODE_XAUI:
                interface_port_count[interface] =
-                   __cvmx_helper_xaui_probe(interface);
+                   __cvmx_helper_xaui_enumerate(interface);
                break;
                /*
                 * RGMII/GMII/MII are all treated about the same. Most
@@ -267,7 +262,7 @@ int cvmx_helper_interface_probe(int interface)
        case CVMX_HELPER_INTERFACE_MODE_RGMII:
        case CVMX_HELPER_INTERFACE_MODE_GMII:
                interface_port_count[interface] =
-                   __cvmx_helper_rgmii_probe(interface);
+                   __cvmx_helper_rgmii_enumerate(interface);
                break;
                /*
                 * SPI4 can have 1-16 ports depending on the device at
@@ -275,7 +270,7 @@ int cvmx_helper_interface_probe(int interface)
                 */
        case CVMX_HELPER_INTERFACE_MODE_SPI:
                interface_port_count[interface] =
-                   __cvmx_helper_spi_probe(interface);
+                   __cvmx_helper_spi_enumerate(interface);
                break;
                /*
                 * SGMII can have 1-4 ports depending on how many are
@@ -284,12 +279,12 @@ int cvmx_helper_interface_probe(int interface)
        case CVMX_HELPER_INTERFACE_MODE_SGMII:
        case CVMX_HELPER_INTERFACE_MODE_PICMG:
                interface_port_count[interface] =
-                   __cvmx_helper_sgmii_probe(interface);
+                   __cvmx_helper_sgmii_enumerate(interface);
                break;
                /* PCI target Network Packet Interface */
        case CVMX_HELPER_INTERFACE_MODE_NPI:
                interface_port_count[interface] =
-                   __cvmx_helper_npi_probe(interface);
+                   __cvmx_helper_npi_enumerate(interface);
                break;
                /*
                 * Special loopback only ports. These are not the same
@@ -297,7 +292,7 @@ int cvmx_helper_interface_probe(int interface)
                 */
        case CVMX_HELPER_INTERFACE_MODE_LOOP:
                interface_port_count[interface] =
-                   __cvmx_helper_loop_probe(interface);
+                   __cvmx_helper_loop_enumerate(interface);
                break;
        }
 
@@ -312,6 +307,74 @@ int cvmx_helper_interface_probe(int interface)
        return 0;
 }
 
+/**
+ * This function probes an interface to determine the actual
+ * number of hardware ports connected to it. It doesn't setup the
+ * ports or enable them. The main goal here is to set the global
+ * interface_port_count[interface] correctly. Hardware setup of the
+ * ports will be performed later.
+ *
+ * @interface: Interface to probe
+ *
+ * Returns Zero on success, negative on failure
+ */
+int cvmx_helper_interface_probe(int interface)
+{
+       cvmx_helper_interface_enumerate(interface);
+       /* At this stage in the game we don't want packets to be moving yet.
+          The following probe calls should perform hardware setup
+          needed to determine port counts. Receive must still be disabled */
+       switch (cvmx_helper_interface_get_mode(interface)) {
+               /* These types don't support ports to IPD/PKO */
+       case CVMX_HELPER_INTERFACE_MODE_DISABLED:
+       case CVMX_HELPER_INTERFACE_MODE_PCIE:
+               break;
+               /* XAUI is a single high speed port */
+       case CVMX_HELPER_INTERFACE_MODE_XAUI:
+               __cvmx_helper_xaui_probe(interface);
+               break;
+               /*
+                * RGMII/GMII/MII are all treated about the same. Most
+                * functions refer to these ports as RGMII.
+                */
+       case CVMX_HELPER_INTERFACE_MODE_RGMII:
+       case CVMX_HELPER_INTERFACE_MODE_GMII:
+               __cvmx_helper_rgmii_probe(interface);
+               break;
+               /*
+                * SPI4 can have 1-16 ports depending on the device at
+                * the other end.
+                */
+       case CVMX_HELPER_INTERFACE_MODE_SPI:
+               __cvmx_helper_spi_probe(interface);
+               break;
+               /*
+                * SGMII can have 1-4 ports depending on how many are
+                * hooked up.
+                */
+       case CVMX_HELPER_INTERFACE_MODE_SGMII:
+       case CVMX_HELPER_INTERFACE_MODE_PICMG:
+               __cvmx_helper_sgmii_probe(interface);
+               break;
+               /* PCI target Network Packet Interface */
+       case CVMX_HELPER_INTERFACE_MODE_NPI:
+               __cvmx_helper_npi_probe(interface);
+               break;
+               /*
+                * Special loopback only ports. These are not the same
+                * as other ports in loopback mode.
+                */
+       case CVMX_HELPER_INTERFACE_MODE_LOOP:
+               __cvmx_helper_loop_probe(interface);
+               break;
+       }
+
+       /* Make sure all global variables propagate to other cores */
+       CVMX_SYNCWS;
+
+       return 0;
+}
+
 /**
  * Setup the IPD/PIP for the ports on an interface. Packet
  * classification and tagging are set for every port on the
index e646a6ccce754143cb670383b12ff7a2aa1eeb65..077f0e9d3b2dc5c485c8d808933a9a54deb10d26 100644 (file)
@@ -44,6 +44,7 @@
  * Returns Number of ports on the interface. Zero to disable.
  */
 extern int __cvmx_helper_loop_probe(int interface);
+static inline int __cvmx_helper_loop_enumerate(int interface) {return 4; }
 
 /**
  * Bringup and enable a LOOP interface. After this call packet
index 908e7b08c214cfbe6cc0a37ee1126c4fd91bc531..8df4c7fafdba3dd20427a13b4c9337f9488bc8cc 100644 (file)
@@ -45,6 +45,7 @@
  * Returns Number of ports on the interface. Zero to disable.
  */
 extern int __cvmx_helper_npi_probe(int interface);
+#define __cvmx_helper_npi_enumerate __cvmx_helper_npi_probe
 
 /**
  * Bringup and enable a NPI interface. After this call packet
index ea2652604a570f38f010549c14743e9bfa0c777a..78295ba0050f6d4a8085ade41f7797cd42932a7f 100644 (file)
@@ -43,6 +43,7 @@
  * Returns Number of RGMII/GMII/MII ports (0-4).
  */
 extern int __cvmx_helper_rgmii_probe(int interface);
+#define __cvmx_helper_rgmii_enumerate __cvmx_helper_rgmii_probe
 
 /**
  * Put an RGMII interface in loopback mode. Internal packets sent
index 19b48d60857f09489b326a5240fccdd64c17e41b..9a9b6c103ede600bfe6576e598e1344a762f978b 100644 (file)
@@ -45,6 +45,7 @@
  * Returns Number of ports on the interface. Zero to disable.
  */
 extern int __cvmx_helper_sgmii_probe(int interface);
+extern int __cvmx_helper_sgmii_enumerate(int interface);
 
 /**
  * Bringup and enable a SGMII interface. After this call packet
index 69bac036d10e5b29ff20ed4b1ec919d13936f546..9f1c6b968f9145f0b523236b1e7281ed1fb52544 100644 (file)
@@ -42,6 +42,7 @@
  * Returns Number of ports on the interface. Zero to disable.
  */
 extern int __cvmx_helper_spi_probe(int interface);
+extern int __cvmx_helper_spi_enumerate(int interface);
 
 /**
  * Bringup and enable a SPI interface. After this call packet I/O
index 4b4db2f93cd4dc91a59f961d2d66b62ddd10214d..f6fbc4f45b561f5a6b9cc13a8c44c0d1993b2954 100644 (file)
@@ -45,6 +45,7 @@
  * Returns Number of ports on the interface. Zero to disable.
  */
 extern int __cvmx_helper_xaui_probe(int interface);
+extern int __cvmx_helper_xaui_enumerate(int interface);
 
 /**
  * Bringup and enable a XAUI interface. After this call packet
index 51916f3cc40c69d69d6fa4db1e2f1334ae618234..3169cd79f2ac251901e81ba366050b9c6e87eca5 100644 (file)
@@ -207,6 +207,7 @@ extern int cvmx_helper_link_set(int ipd_port,
  * Returns Zero on success, negative on failure
  */
 extern int cvmx_helper_interface_probe(int interface);
+extern int cvmx_helper_interface_enumerate(int interface);
 
 /**
  * Configure a port for internal and/or external loopback. Internal loopback