]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: dsa: mv88e6xxx: group cycle counter coefficients
authorShenghao Yang <me@shenghaoyang.info>
Sun, 20 Oct 2024 06:38:28 +0000 (14:38 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 24 Oct 2024 10:57:46 +0000 (12:57 +0200)
Instead of having them as individual fields in ptp_ops, wrap the
coefficients in a separate struct so they can be referenced together.

Fixes: de776d0d316f ("net: dsa: mv88e6xxx: add support for mv88e6393x family")
Signed-off-by: Shenghao Yang <me@shenghaoyang.info>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/mv88e6xxx/chip.h
drivers/net/dsa/mv88e6xxx/ptp.c

index c34caf9815c5cb12a889adc2645765ad1b3c1199..1d003a9deafa733c742b65e59ecf6bc066471efc 100644 (file)
@@ -206,6 +206,7 @@ struct mv88e6xxx_gpio_ops;
 struct mv88e6xxx_avb_ops;
 struct mv88e6xxx_ptp_ops;
 struct mv88e6xxx_pcs_ops;
+struct mv88e6xxx_cc_coeffs;
 
 struct mv88e6xxx_irq {
        u16 masked;
@@ -731,10 +732,7 @@ struct mv88e6xxx_ptp_ops {
        int arr1_sts_reg;
        int dep_sts_reg;
        u32 rx_filters;
-       u32 cc_shift;
-       u32 cc_mult;
-       u32 cc_mult_num;
-       u32 cc_mult_dem;
+       const struct mv88e6xxx_cc_coeffs *cc_coeffs;
 };
 
 struct mv88e6xxx_pcs_ops {
index 56391e09b3257eefe51d88282fe11ef82bf30dbc..641af44e00af9cf8817ab1fd96e05300022bfbdf 100644 (file)
 
 #define MV88E6XXX_MAX_ADJ_PPB  1000000
 
+struct mv88e6xxx_cc_coeffs {
+       u32 cc_shift;
+       u32 cc_mult;
+       u32 cc_mult_num;
+       u32 cc_mult_dem;
+};
+
 /* Family MV88E6250:
  * Raw timestamps are in units of 10-ns clock periods.
  *
  * simplifies to
  * clkadj = scaled_ppm * 2^7 / 5^5
  */
-#define MV88E6250_CC_SHIFT     28
-#define MV88E6250_CC_MULT      (10 << MV88E6250_CC_SHIFT)
-#define MV88E6250_CC_MULT_NUM  (1 << 7)
-#define MV88E6250_CC_MULT_DEM  3125ULL
+#define MV88E6250_CC_SHIFT 28
+static const struct mv88e6xxx_cc_coeffs mv88e6250_cc_coeffs = {
+       .cc_shift = MV88E6250_CC_SHIFT,
+       .cc_mult = 10 << MV88E6250_CC_SHIFT,
+       .cc_mult_num = 1 << 7,
+       .cc_mult_dem = 3125ULL,
+};
 
 /* Other families:
  * Raw timestamps are in units of 8-ns clock periods.
  * simplifies to
  * clkadj = scaled_ppm * 2^9 / 5^6
  */
-#define MV88E6XXX_CC_SHIFT     28
-#define MV88E6XXX_CC_MULT      (8 << MV88E6XXX_CC_SHIFT)
-#define MV88E6XXX_CC_MULT_NUM  (1 << 9)
-#define MV88E6XXX_CC_MULT_DEM  15625ULL
+#define MV88E6XXX_CC_SHIFT 28
+static const struct mv88e6xxx_cc_coeffs mv88e6xxx_cc_coeffs = {
+       .cc_shift = MV88E6XXX_CC_SHIFT,
+       .cc_mult = 8 << MV88E6XXX_CC_SHIFT,
+       .cc_mult_num = 1 << 9,
+       .cc_mult_dem = 15625ULL
+};
 
 #define TAI_EVENT_WORK_INTERVAL msecs_to_jiffies(100)
 
@@ -214,10 +227,10 @@ static int mv88e6xxx_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
                scaled_ppm = -scaled_ppm;
        }
 
-       mult = ptp_ops->cc_mult;
-       adj = ptp_ops->cc_mult_num;
+       mult = ptp_ops->cc_coeffs->cc_mult;
+       adj = ptp_ops->cc_coeffs->cc_mult_num;
        adj *= scaled_ppm;
-       diff = div_u64(adj, ptp_ops->cc_mult_dem);
+       diff = div_u64(adj, ptp_ops->cc_coeffs->cc_mult_dem);
 
        mv88e6xxx_reg_lock(chip);
 
@@ -364,10 +377,7 @@ const struct mv88e6xxx_ptp_ops mv88e6165_ptp_ops = {
                (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
                (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) |
                (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ),
-       .cc_shift = MV88E6XXX_CC_SHIFT,
-       .cc_mult = MV88E6XXX_CC_MULT,
-       .cc_mult_num = MV88E6XXX_CC_MULT_NUM,
-       .cc_mult_dem = MV88E6XXX_CC_MULT_DEM,
+       .cc_coeffs = &mv88e6xxx_cc_coeffs
 };
 
 const struct mv88e6xxx_ptp_ops mv88e6250_ptp_ops = {
@@ -391,10 +401,7 @@ const struct mv88e6xxx_ptp_ops mv88e6250_ptp_ops = {
                (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
                (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) |
                (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ),
-       .cc_shift = MV88E6250_CC_SHIFT,
-       .cc_mult = MV88E6250_CC_MULT,
-       .cc_mult_num = MV88E6250_CC_MULT_NUM,
-       .cc_mult_dem = MV88E6250_CC_MULT_DEM,
+       .cc_coeffs = &mv88e6250_cc_coeffs,
 };
 
 const struct mv88e6xxx_ptp_ops mv88e6352_ptp_ops = {
@@ -418,10 +425,7 @@ const struct mv88e6xxx_ptp_ops mv88e6352_ptp_ops = {
                (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
                (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) |
                (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ),
-       .cc_shift = MV88E6XXX_CC_SHIFT,
-       .cc_mult = MV88E6XXX_CC_MULT,
-       .cc_mult_num = MV88E6XXX_CC_MULT_NUM,
-       .cc_mult_dem = MV88E6XXX_CC_MULT_DEM,
+       .cc_coeffs = &mv88e6xxx_cc_coeffs,
 };
 
 const struct mv88e6xxx_ptp_ops mv88e6390_ptp_ops = {
@@ -446,10 +450,7 @@ const struct mv88e6xxx_ptp_ops mv88e6390_ptp_ops = {
                (1 << HWTSTAMP_FILTER_PTP_V2_EVENT) |
                (1 << HWTSTAMP_FILTER_PTP_V2_SYNC) |
                (1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ),
-       .cc_shift = MV88E6XXX_CC_SHIFT,
-       .cc_mult = MV88E6XXX_CC_MULT,
-       .cc_mult_num = MV88E6XXX_CC_MULT_NUM,
-       .cc_mult_dem = MV88E6XXX_CC_MULT_DEM,
+       .cc_coeffs = &mv88e6xxx_cc_coeffs,
 };
 
 static u64 mv88e6xxx_ptp_clock_read(const struct cyclecounter *cc)
@@ -487,8 +488,8 @@ int mv88e6xxx_ptp_setup(struct mv88e6xxx_chip *chip)
        memset(&chip->tstamp_cc, 0, sizeof(chip->tstamp_cc));
        chip->tstamp_cc.read    = mv88e6xxx_ptp_clock_read;
        chip->tstamp_cc.mask    = CYCLECOUNTER_MASK(32);
-       chip->tstamp_cc.mult    = ptp_ops->cc_mult;
-       chip->tstamp_cc.shift   = ptp_ops->cc_shift;
+       chip->tstamp_cc.mult    = ptp_ops->cc_coeffs->cc_mult;
+       chip->tstamp_cc.shift   = ptp_ops->cc_coeffs->cc_shift;
 
        timecounter_init(&chip->tstamp_tc, &chip->tstamp_cc,
                         ktime_to_ns(ktime_get_real()));