Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'net-dsa-mv88e6xxx-further-ptp-related-cleanups'

Russell King says:

====================
net: dsa: mv88e6xxx: further PTP-related cleanups

Further mv88e6xxx PTP-related cleanups, mostly centred around the
register definitions, but also moving one function prototype to a
more logical header.
====================

Link: https://patch.msgid.link/aMnJ1uRPvw82_aCT@shell.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+39 -118
+1 -1
drivers/net/dsa/mv88e6xxx/hwtstamp.c
··· 570 570 } 571 571 572 572 /* Set the ethertype of L2 PTP messages */ 573 - err = mv88e6xxx_ptp_write(chip, MV88E6XXX_PTP_GC_ETYPE, ETH_P_1588); 573 + err = mv88e6xxx_ptp_write(chip, MV88E6XXX_PTP_ETHERTYPE, ETH_P_1588); 574 574 if (err) 575 575 return err; 576 576
+1
drivers/net/dsa/mv88e6xxx/hwtstamp.h
··· 124 124 int mv88e6xxx_get_ts_info(struct dsa_switch *ds, int port, 125 125 struct kernel_ethtool_ts_info *info); 126 126 127 + long mv88e6xxx_hwtstamp_work(struct ptp_clock_info *ptp); 127 128 int mv88e6xxx_hwtstamp_setup(struct mv88e6xxx_chip *chip); 128 129 void mv88e6xxx_hwtstamp_free(struct mv88e6xxx_chip *chip); 129 130 int mv88e6352_hwtstamp_port_enable(struct mv88e6xxx_chip *chip, int port);
+12 -12
drivers/net/dsa/mv88e6xxx/ptp.c
··· 144 144 u16 phc_time[2]; 145 145 int err; 146 146 147 - err = mv88e6xxx_tai_read(chip, MV88E6XXX_TAI_TIME_LO, phc_time, 147 + err = mv88e6xxx_tai_read(chip, MV88E6352_TAI_TIME_LO, phc_time, 148 148 ARRAY_SIZE(phc_time)); 149 149 if (err) 150 150 return 0; ··· 158 158 u16 phc_time[2]; 159 159 int err; 160 160 161 - err = mv88e6xxx_tai_read(chip, MV88E6XXX_PTP_GC_TIME_LO, phc_time, 161 + err = mv88e6xxx_tai_read(chip, MV88E6165_PTP_GC_TIME_LO, phc_time, 162 162 ARRAY_SIZE(phc_time)); 163 163 if (err) 164 164 return 0; ··· 176 176 u16 evcap_config; 177 177 int err; 178 178 179 - evcap_config = MV88E6XXX_TAI_CFG_CAP_OVERWRITE | 180 - MV88E6XXX_TAI_CFG_CAP_CTR_START; 179 + evcap_config = MV88E6352_TAI_CFG_CAP_OVERWRITE | 180 + MV88E6352_TAI_CFG_CAP_CTR_START; 181 181 if (!rising) 182 - evcap_config |= MV88E6XXX_TAI_CFG_EVREQ_FALLING; 182 + evcap_config |= MV88E6352_TAI_CFG_EVREQ_FALLING; 183 183 184 - err = mv88e6xxx_tai_write(chip, MV88E6XXX_TAI_CFG, evcap_config); 184 + err = mv88e6xxx_tai_write(chip, MV88E6352_TAI_CFG, evcap_config); 185 185 if (err) 186 186 return err; 187 187 188 188 /* Write the capture config; this also clears the capture counter */ 189 - return mv88e6xxx_tai_write(chip, MV88E6XXX_TAI_EVENT_STATUS, 0); 189 + return mv88e6xxx_tai_write(chip, MV88E6352_TAI_EVENT_STATUS, 0); 190 190 } 191 191 192 192 static void mv88e6352_tai_event_work(struct work_struct *ugly) ··· 199 199 int err; 200 200 201 201 mv88e6xxx_reg_lock(chip); 202 - err = mv88e6xxx_tai_read(chip, MV88E6XXX_TAI_EVENT_STATUS, 202 + err = mv88e6xxx_tai_read(chip, MV88E6352_TAI_EVENT_STATUS, 203 203 status, ARRAY_SIZE(status)); 204 204 mv88e6xxx_reg_unlock(chip); 205 205 ··· 207 207 dev_err(chip->dev, "failed to read TAI status register\n"); 208 208 return; 209 209 } 210 - if (status[0] & MV88E6XXX_TAI_EVENT_STATUS_ERROR) { 210 + if (status[0] & MV88E6352_TAI_EVENT_STATUS_ERROR) { 211 211 dev_warn(chip->dev, "missed event capture\n"); 212 212 return; 213 213 } 214 - if (!(status[0] & MV88E6XXX_TAI_EVENT_STATUS_VALID)) 214 + if (!(status[0] & MV88E6352_TAI_EVENT_STATUS_VALID)) 215 215 goto out; 216 216 217 217 raw_ts = ((u32)status[2] << 16) | status[1]; 218 218 219 219 /* Clear the valid bit so the next timestamp can come in */ 220 - status[0] &= ~MV88E6XXX_TAI_EVENT_STATUS_VALID; 220 + status[0] &= ~MV88E6352_TAI_EVENT_STATUS_VALID; 221 221 mv88e6xxx_reg_lock(chip); 222 - err = mv88e6xxx_tai_write(chip, MV88E6XXX_TAI_EVENT_STATUS, status[0]); 222 + err = mv88e6xxx_tai_write(chip, MV88E6352_TAI_EVENT_STATUS, status[0]); 223 223 mv88e6xxx_reg_unlock(chip); 224 224 if (err) { 225 225 dev_err(chip->dev, "failed to write TAI status register\n");
+25 -105
drivers/net/dsa/mv88e6xxx/ptp.h
··· 16 16 #include "chip.h" 17 17 18 18 /* Offset 0x00: TAI Global Config */ 19 - #define MV88E6XXX_TAI_CFG 0x00 20 - #define MV88E6XXX_TAI_CFG_CAP_OVERWRITE 0x8000 21 - #define MV88E6XXX_TAI_CFG_CAP_CTR_START 0x4000 22 - #define MV88E6XXX_TAI_CFG_EVREQ_FALLING 0x2000 23 - #define MV88E6XXX_TAI_CFG_TRIG_ACTIVE_LO 0x1000 24 - #define MV88E6XXX_TAI_CFG_IRL_ENABLE 0x0400 25 - #define MV88E6XXX_TAI_CFG_TRIG_IRQ_EN 0x0200 26 - #define MV88E6XXX_TAI_CFG_EVREQ_IRQ_EN 0x0100 27 - #define MV88E6XXX_TAI_CFG_TRIG_LOCK 0x0080 28 - #define MV88E6XXX_TAI_CFG_BLOCK_UPDATE 0x0008 29 - #define MV88E6XXX_TAI_CFG_MULTI_PTP 0x0004 30 - #define MV88E6XXX_TAI_CFG_TRIG_MODE_ONESHOT 0x0002 31 - #define MV88E6XXX_TAI_CFG_TRIG_ENABLE 0x0001 19 + #define MV88E6352_TAI_CFG 0x00 20 + #define MV88E6352_TAI_CFG_CAP_OVERWRITE 0x8000 21 + #define MV88E6352_TAI_CFG_CAP_CTR_START 0x4000 22 + #define MV88E6352_TAI_CFG_EVREQ_FALLING 0x2000 23 + #define MV88E6352_TAI_CFG_TRIG_ACTIVE_LO 0x1000 24 + #define MV88E6352_TAI_CFG_IRL_ENABLE 0x0400 25 + #define MV88E6352_TAI_CFG_TRIG_IRQ_EN 0x0200 26 + #define MV88E6352_TAI_CFG_EVREQ_IRQ_EN 0x0100 27 + #define MV88E6352_TAI_CFG_TRIG_LOCK 0x0080 28 + #define MV88E6352_TAI_CFG_BLOCK_UPDATE 0x0008 29 + #define MV88E6352_TAI_CFG_MULTI_PTP 0x0004 30 + #define MV88E6352_TAI_CFG_TRIG_MODE_ONESHOT 0x0002 31 + #define MV88E6352_TAI_CFG_TRIG_ENABLE 0x0001 32 32 33 33 /* Offset 0x01: Timestamp Clock Period (ps) */ 34 34 #define MV88E6XXX_TAI_CLOCK_PERIOD 0x01 35 35 36 - /* Offset 0x02/0x03: Trigger Generation Amount */ 37 - #define MV88E6XXX_TAI_TRIG_GEN_AMOUNT_LO 0x02 38 - #define MV88E6XXX_TAI_TRIG_GEN_AMOUNT_HI 0x03 39 - 40 - /* Offset 0x04: Clock Compensation */ 41 - #define MV88E6XXX_TAI_TRIG_CLOCK_COMP 0x04 42 - 43 - /* Offset 0x05: Trigger Configuration */ 44 - #define MV88E6XXX_TAI_TRIG_CFG 0x05 45 - 46 - /* Offset 0x06: Ingress Rate Limiter Clock Generation Amount */ 47 - #define MV88E6XXX_TAI_IRL_AMOUNT 0x06 48 - 49 - /* Offset 0x07: Ingress Rate Limiter Compensation */ 50 - #define MV88E6XXX_TAI_IRL_COMP 0x07 51 - 52 - /* Offset 0x08: Ingress Rate Limiter Compensation */ 53 - #define MV88E6XXX_TAI_IRL_COMP_PS 0x08 54 - 55 36 /* Offset 0x09: Event Status */ 56 - #define MV88E6XXX_TAI_EVENT_STATUS 0x09 57 - #define MV88E6XXX_TAI_EVENT_STATUS_ERROR 0x0200 58 - #define MV88E6XXX_TAI_EVENT_STATUS_VALID 0x0100 59 - #define MV88E6XXX_TAI_EVENT_STATUS_CTR_MASK 0x00ff 60 - 61 - /* Offset 0x0A/0x0B: Event Time */ 62 - #define MV88E6XXX_TAI_EVENT_TIME_LO 0x0a 63 - #define MV88E6XXX_TAI_EVENT_TYPE_HI 0x0b 37 + #define MV88E6352_TAI_EVENT_STATUS 0x09 38 + #define MV88E6352_TAI_EVENT_STATUS_ERROR 0x0200 39 + #define MV88E6352_TAI_EVENT_STATUS_VALID 0x0100 40 + #define MV88E6352_TAI_EVENT_STATUS_CTR_MASK 0x00ff 41 + /* Offset 0x0A/0x0B: Event Time Lo/Hi. Always read with Event Status. */ 64 42 65 43 /* Offset 0x0E/0x0F: PTP Global Time */ 66 - #define MV88E6XXX_TAI_TIME_LO 0x0e 67 - #define MV88E6XXX_TAI_TIME_HI 0x0f 68 - 69 - /* Offset 0x10/0x11: Trig Generation Time */ 70 - #define MV88E6XXX_TAI_TRIG_TIME_LO 0x10 71 - #define MV88E6XXX_TAI_TRIG_TIME_HI 0x11 72 - 73 - /* Offset 0x12: Lock Status */ 74 - #define MV88E6XXX_TAI_LOCK_STATUS 0x12 75 - 76 - /* Offset 0x00: Ether Type */ 77 - #define MV88E6XXX_PTP_GC_ETYPE 0x00 44 + #define MV88E6352_TAI_TIME_LO 0x0e 45 + #define MV88E6352_TAI_TIME_HI 0x0f 78 46 79 47 /* 6165 Global Control Registers */ 80 - /* Offset 0x00: Ether Type */ 81 - #define MV88E6XXX_PTP_GC_ETYPE 0x00 82 - 83 - /* Offset 0x01: Message ID */ 84 - #define MV88E6XXX_PTP_GC_MESSAGE_ID 0x01 85 - 86 - /* Offset 0x02: Time Stamp Arrive Time */ 87 - #define MV88E6XXX_PTP_GC_TS_ARR_PTR 0x02 88 - 89 - /* Offset 0x03: Port Arrival Interrupt Enable */ 90 - #define MV88E6XXX_PTP_GC_PORT_ARR_INT_EN 0x03 91 - 92 - /* Offset 0x04: Port Departure Interrupt Enable */ 93 - #define MV88E6XXX_PTP_GC_PORT_DEP_INT_EN 0x04 94 - 95 - /* Offset 0x05: Configuration */ 96 - #define MV88E6XXX_PTP_GC_CONFIG 0x05 97 - #define MV88E6XXX_PTP_GC_CONFIG_DIS_OVERWRITE BIT(1) 98 - #define MV88E6XXX_PTP_GC_CONFIG_DIS_TS BIT(0) 99 - 100 - /* Offset 0x8: Interrupt Status */ 101 - #define MV88E6XXX_PTP_GC_INT_STATUS 0x08 102 - 103 48 /* Offset 0x9/0xa: Global Time */ 104 - #define MV88E6XXX_PTP_GC_TIME_LO 0x09 105 - #define MV88E6XXX_PTP_GC_TIME_HI 0x0A 49 + #define MV88E6165_PTP_GC_TIME_LO 0x09 50 + #define MV88E6165_PTP_GC_TIME_HI 0x0A 106 51 107 - /* 6165 Per Port Registers */ 52 + /* 6165 Per Port Registers. The arrival and departure registers are a 53 + * common block consisting of status, two time registers and the sequence ID 54 + */ 108 55 /* Offset 0: Arrival Time 0 Status */ 109 56 #define MV88E6165_PORT_PTP_ARR0_STS 0x00 110 - 111 - /* Offset 0x01/0x02: PTP Arrival 0 Time */ 112 - #define MV88E6165_PORT_PTP_ARR0_TIME_LO 0x01 113 - #define MV88E6165_PORT_PTP_ARR0_TIME_HI 0x02 114 - 115 - /* Offset 0x03: PTP Arrival 0 Sequence ID */ 116 - #define MV88E6165_PORT_PTP_ARR0_SEQID 0x03 117 57 118 58 /* Offset 0x04: PTP Arrival 1 Status */ 119 59 #define MV88E6165_PORT_PTP_ARR1_STS 0x04 120 60 121 - /* Offset 0x05/0x6E: PTP Arrival 1 Time */ 122 - #define MV88E6165_PORT_PTP_ARR1_TIME_LO 0x05 123 - #define MV88E6165_PORT_PTP_ARR1_TIME_HI 0x06 124 - 125 - /* Offset 0x07: PTP Arrival 1 Sequence ID */ 126 - #define MV88E6165_PORT_PTP_ARR1_SEQID 0x07 127 - 128 61 /* Offset 0x08: PTP Departure Status */ 129 62 #define MV88E6165_PORT_PTP_DEP_STS 0x08 130 - 131 - /* Offset 0x09/0x0a: PTP Deperture Time */ 132 - #define MV88E6165_PORT_PTP_DEP_TIME_LO 0x09 133 - #define MV88E6165_PORT_PTP_DEP_TIME_HI 0x0a 134 - 135 - /* Offset 0x0b: PTP Departure Sequence ID */ 136 - #define MV88E6165_PORT_PTP_DEP_SEQID 0x0b 137 63 138 64 /* Offset 0x0d: Port Status */ 139 65 #define MV88E6164_PORT_STATUS 0x0d 140 66 141 67 #ifdef CONFIG_NET_DSA_MV88E6XXX_PTP 142 68 143 - long mv88e6xxx_hwtstamp_work(struct ptp_clock_info *ptp); 144 69 int mv88e6xxx_ptp_setup(struct mv88e6xxx_chip *chip); 145 70 void mv88e6xxx_ptp_free(struct mv88e6xxx_chip *chip); 146 71 ··· 77 152 extern const struct mv88e6xxx_ptp_ops mv88e6390_ptp_ops; 78 153 79 154 #else /* !CONFIG_NET_DSA_MV88E6XXX_PTP */ 80 - 81 - static inline long mv88e6xxx_hwtstamp_work(struct ptp_clock_info *ptp) 82 - { 83 - return -1; 84 - } 85 155 86 156 static inline int mv88e6xxx_ptp_setup(struct mv88e6xxx_chip *chip) 87 157 {