Commit 67af86af authored by Shenghao Yang's avatar Shenghao Yang Committed by Paolo Abeni
Browse files

net: dsa: mv88e6xxx: group cycle counter coefficients



Instead of having them as individual fields in ptp_ops, wrap the
coefficients in a separate struct so they can be referenced together.

Fixes: de776d0d ("net: dsa: mv88e6xxx: add support for mv88e6393x family")
Signed-off-by: default avatarShenghao Yang <me@shenghaoyang.info>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 64761c98
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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 {
+30 −29
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@

#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.
 *
@@ -26,9 +33,12 @@
 * 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
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.
@@ -38,9 +48,12 @@
 * 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
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()));