90 lines
2.6 KiB
Diff
90 lines
2.6 KiB
Diff
From: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
|
|
Date: Wed, 3 Feb 2016 18:01:36 +0000
|
|
Subject: MIPS: Octeon: Add Octeon III CN7xxx interface detection
|
|
Origin: https://git.kernel.org/linus/885872b722b73b2026a48bdff4621f289be2b044
|
|
|
|
Add basic CN7XXX interface detection.
|
|
|
|
This allows the kernel to boot with ethernet working as it initializes
|
|
the ethernet ports with SGMII instead of defaulting to RGMII routines.
|
|
|
|
Tested on the utm8 from Rhino Labs with a CN7130.
|
|
|
|
Signed-off-by: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
|
|
Acked-by: David Daney <david.daney@cavium.com>
|
|
---
|
|
arch/mips/cavium-octeon/executive/cvmx-helper.c | 43 +++++++++++++++++++++++++
|
|
1 file changed, 43 insertions(+)
|
|
|
|
diff --git a/arch/mips/cavium-octeon/executive/cvmx-helper.c b/arch/mips/cavium-octeon/executive/cvmx-helper.c
|
|
index 376701f..ff26d02 100644
|
|
--- a/arch/mips/cavium-octeon/executive/cvmx-helper.c
|
|
+++ b/arch/mips/cavium-octeon/executive/cvmx-helper.c
|
|
@@ -87,6 +87,8 @@ int cvmx_helper_get_number_of_interfaces(void)
|
|
return 9;
|
|
if (OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN52XX))
|
|
return 4;
|
|
+ if (OCTEON_IS_MODEL(OCTEON_CN7XXX))
|
|
+ return 5;
|
|
else
|
|
return 3;
|
|
}
|
|
@@ -260,6 +262,41 @@ static cvmx_helper_interface_mode_t __cvmx_get_mode_octeon2(int interface)
|
|
}
|
|
|
|
/**
|
|
+ * @INTERNAL
|
|
+ * Return interface mode for CN7XXX.
|
|
+ */
|
|
+static cvmx_helper_interface_mode_t __cvmx_get_mode_cn7xxx(int interface)
|
|
+{
|
|
+ union cvmx_gmxx_inf_mode mode;
|
|
+
|
|
+ mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
|
|
+
|
|
+ switch (interface) {
|
|
+ case 0:
|
|
+ case 1:
|
|
+ switch (mode.cn68xx.mode) {
|
|
+ case 0:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_DISABLED;
|
|
+ case 1:
|
|
+ case 2:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_SGMII;
|
|
+ case 3:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_XAUI;
|
|
+ default:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_SGMII;
|
|
+ }
|
|
+ case 2:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_NPI;
|
|
+ case 3:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_LOOP;
|
|
+ case 4:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_RGMII;
|
|
+ default:
|
|
+ return CVMX_HELPER_INTERFACE_MODE_DISABLED;
|
|
+ }
|
|
+}
|
|
+
|
|
+/**
|
|
* Get the operating mode of an interface. Depending on the Octeon
|
|
* chip and configuration, this function returns an enumeration
|
|
* of the type of packet I/O supported by an interface.
|
|
@@ -278,6 +315,12 @@ cvmx_helper_interface_mode_t cvmx_helper_interface_get_mode(int interface)
|
|
return CVMX_HELPER_INTERFACE_MODE_DISABLED;
|
|
|
|
/*
|
|
+ * OCTEON III models
|
|
+ */
|
|
+ if (OCTEON_IS_MODEL(OCTEON_CN7XXX))
|
|
+ return __cvmx_get_mode_cn7xxx(interface);
|
|
+
|
|
+ /*
|
|
* Octeon II models
|
|
*/
|
|
if (OCTEON_IS_MODEL(OCTEON_CN6XXX) || OCTEON_IS_MODEL(OCTEON_CNF71XX))
|
|
--
|
|
2.8.0.rc3
|
|
|