]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
e1000e: Add Support for 38.4MHZ frequency
authorSasha Neftin <sasha.neftin@intel.com>
Thu, 6 Apr 2017 07:27:03 +0000 (10:27 +0300)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 22 Jun 2017 06:24:40 +0000 (23:24 -0700)
Add support for 38.4MHz frequency is required for PTP
on CannonLake. SYSTIM frequency adjustment attributes for TIMINCA are
get/set dependent on the hardware clock frequency for a different
types of adapters. 38.4MHz frequency supported by CannonLake
and active once time synchronisation mechanism was enabled
Changed abbreviation from Hz to HZ to be compliant checkpatch code style

Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
Reviewed-by: Raanan Avargil <raanan.avargil@intel.com>
Reviewed-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Orabug: 26243014
(cherry picked from commit 68fe1d5da548aab2b6b1c28a9137248d6ccfcc43)
Signed-off-by: Jack Vogel <jack.vogel@oracle.com>
Reviewed-by: Ethan Zhao <ethan.zhao@oracle.com>
drivers/net/ethernet/intel/e1000e/e1000.h
drivers/net/ethernet/intel/e1000e/netdev.c

index 564f24496a046c169c30a5d524a6b182a13f3a1f..0828d2bda936595a77982e95c4b680defbdae971 100644 (file)
@@ -379,18 +379,22 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca);
  * INCVALUE_n into the TIMINCA register allowing 32+8+(24-INCVALUE_SHIFT_n)
  * bits to count nanoseconds leaving the rest for fractional nonseconds.
  */
-#define INCVALUE_96MHz         125
-#define INCVALUE_SHIFT_96MHz   17
-#define INCPERIOD_SHIFT_96MHz  2
-#define INCPERIOD_96MHz                (12 >> INCPERIOD_SHIFT_96MHz)
-
-#define INCVALUE_25MHz         40
-#define INCVALUE_SHIFT_25MHz   18
-#define INCPERIOD_25MHz                1
-
-#define INCVALUE_24MHz         125
-#define INCVALUE_SHIFT_24MHz   14
-#define INCPERIOD_24MHz                3
+#define INCVALUE_96MHZ         125
+#define INCVALUE_SHIFT_96MHZ   17
+#define INCPERIOD_SHIFT_96MHZ  2
+#define INCPERIOD_96MHZ                (12 >> INCPERIOD_SHIFT_96MHZ)
+
+#define INCVALUE_25MHZ         40
+#define INCVALUE_SHIFT_25MHZ   18
+#define INCPERIOD_25MHZ                1
+
+#define INCVALUE_24MHZ         125
+#define INCVALUE_SHIFT_24MHZ   14
+#define INCPERIOD_24MHZ                3
+
+#define INCVALUE_38400KHZ      26
+#define INCVALUE_SHIFT_38400KHZ        19
+#define INCPERIOD_38400KHZ     1
 
 /* Another drawback of scaling the incvalue by a large factor is the
  * 64-bit SYSTIM register overflows more quickly.  This is dealt with
index 95c6f6b8850bcca8dc3ae7b0d70a09ed8377bbf6..0c4a2938b6702391db86bc45bf7f7012bb8317d5 100644 (file)
@@ -3509,42 +3509,57 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca)
        switch (hw->mac.type) {
        case e1000_pch2lan:
                /* Stable 96MHz frequency */
-               incperiod = INCPERIOD_96MHz;
-               incvalue = INCVALUE_96MHz;
-               shift = INCVALUE_SHIFT_96MHz;
-               adapter->cc.shift = shift + INCPERIOD_SHIFT_96MHz;
+               incperiod = INCPERIOD_96MHZ;
+               incvalue = INCVALUE_96MHZ;
+               shift = INCVALUE_SHIFT_96MHZ;
+               adapter->cc.shift = shift + INCPERIOD_SHIFT_96MHZ;
                break;
        case e1000_pch_lpt:
                if (er32(TSYNCRXCTL) & E1000_TSYNCRXCTL_SYSCFI) {
                        /* Stable 96MHz frequency */
-                       incperiod = INCPERIOD_96MHz;
-                       incvalue = INCVALUE_96MHz;
-                       shift = INCVALUE_SHIFT_96MHz;
-                       adapter->cc.shift = shift + INCPERIOD_SHIFT_96MHz;
+                       incperiod = INCPERIOD_96MHZ;
+                       incvalue = INCVALUE_96MHZ;
+                       shift = INCVALUE_SHIFT_96MHZ;
+                       adapter->cc.shift = shift + INCPERIOD_SHIFT_96MHZ;
                } else {
                        /* Stable 25MHz frequency */
-                       incperiod = INCPERIOD_25MHz;
-                       incvalue = INCVALUE_25MHz;
-                       shift = INCVALUE_SHIFT_25MHz;
+                       incperiod = INCPERIOD_25MHZ;
+                       incvalue = INCVALUE_25MHZ;
+                       shift = INCVALUE_SHIFT_25MHZ;
                        adapter->cc.shift = shift;
                }
                break;
        case e1000_pch_spt:
                if (er32(TSYNCRXCTL) & E1000_TSYNCRXCTL_SYSCFI) {
                        /* Stable 24MHz frequency */
-                       incperiod = INCPERIOD_24MHz;
-                       incvalue = INCVALUE_24MHz;
-                       shift = INCVALUE_SHIFT_24MHz;
+                       incperiod = INCPERIOD_24MHZ;
+                       incvalue = INCVALUE_24MHZ;
+                       shift = INCVALUE_SHIFT_24MHZ;
                        adapter->cc.shift = shift;
                        break;
                }
                return -EINVAL;
+       case e1000_pch_cnp:
+               if (er32(TSYNCRXCTL) & E1000_TSYNCRXCTL_SYSCFI) {
+                       /* Stable 24MHz frequency */
+                       incperiod = INCPERIOD_24MHZ;
+                       incvalue = INCVALUE_24MHZ;
+                       shift = INCVALUE_SHIFT_24MHZ;
+                       adapter->cc.shift = shift;
+               } else {
+                       /* Stable 38400KHz frequency */
+                       incperiod = INCPERIOD_38400KHZ;
+                       incvalue = INCVALUE_38400KHZ;
+                       shift = INCVALUE_SHIFT_38400KHZ;
+                       adapter->cc.shift = shift;
+               }
+               break;
        case e1000_82574:
        case e1000_82583:
                /* Stable 25MHz frequency */
-               incperiod = INCPERIOD_25MHz;
-               incvalue = INCVALUE_25MHz;
-               shift = INCVALUE_SHIFT_25MHz;
+               incperiod = INCPERIOD_25MHZ;
+               incvalue = INCVALUE_25MHZ;
+               shift = INCVALUE_SHIFT_25MHZ;
                adapter->cc.shift = shift;
                break;
        default: