hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/drivers/net/phy/sfp.c
....@@ -1,3 +1,5 @@
1
+// SPDX-License-Identifier: GPL-2.0
2
+#include <linux/acpi.h>
13 #include <linux/ctype.h>
24 #include <linux/delay.h>
35 #include <linux/gpio/consumer.h>
....@@ -5,6 +7,7 @@
57 #include <linux/i2c.h>
68 #include <linux/interrupt.h>
79 #include <linux/jiffies.h>
10
+#include <linux/mdio/mdio-i2c.h>
811 #include <linux/module.h>
912 #include <linux/mutex.h>
1013 #include <linux/of.h>
....@@ -14,7 +17,6 @@
1417 #include <linux/slab.h>
1518 #include <linux/workqueue.h>
1619
17
-#include "mdio-i2c.h"
1820 #include "sfp.h"
1921 #include "swphy.h"
2022
....@@ -34,6 +36,8 @@
3436
3537 SFP_E_INSERT = 0,
3638 SFP_E_REMOVE,
39
+ SFP_E_DEV_ATTACH,
40
+ SFP_E_DEV_DETACH,
3741 SFP_E_DEV_DOWN,
3842 SFP_E_DEV_UP,
3943 SFP_E_TX_FAULT,
....@@ -43,16 +47,23 @@
4347 SFP_E_TIMEOUT,
4448
4549 SFP_MOD_EMPTY = 0,
46
- SFP_MOD_PROBE,
47
- SFP_MOD_HPOWER,
48
- SFP_MOD_PRESENT,
4950 SFP_MOD_ERROR,
51
+ SFP_MOD_PROBE,
52
+ SFP_MOD_WAITDEV,
53
+ SFP_MOD_HPOWER,
54
+ SFP_MOD_WAITPWR,
55
+ SFP_MOD_PRESENT,
5056
51
- SFP_DEV_DOWN = 0,
57
+ SFP_DEV_DETACHED = 0,
58
+ SFP_DEV_DOWN,
5259 SFP_DEV_UP,
5360
5461 SFP_S_DOWN = 0,
62
+ SFP_S_FAIL,
63
+ SFP_S_WAIT,
5564 SFP_S_INIT,
65
+ SFP_S_INIT_PHY,
66
+ SFP_S_INIT_TX_FAULT,
5667 SFP_S_WAIT_LOS,
5768 SFP_S_LINK_UP,
5869 SFP_S_TX_FAULT,
....@@ -62,10 +73,12 @@
6273
6374 static const char * const mod_state_strings[] = {
6475 [SFP_MOD_EMPTY] = "empty",
65
- [SFP_MOD_PROBE] = "probe",
66
- [SFP_MOD_HPOWER] = "hpower",
67
- [SFP_MOD_PRESENT] = "present",
6876 [SFP_MOD_ERROR] = "error",
77
+ [SFP_MOD_PROBE] = "probe",
78
+ [SFP_MOD_WAITDEV] = "waitdev",
79
+ [SFP_MOD_HPOWER] = "hpower",
80
+ [SFP_MOD_WAITPWR] = "waitpwr",
81
+ [SFP_MOD_PRESENT] = "present",
6982 };
7083
7184 static const char *mod_state_to_str(unsigned short mod_state)
....@@ -76,6 +89,7 @@
7689 }
7790
7891 static const char * const dev_state_strings[] = {
92
+ [SFP_DEV_DETACHED] = "detached",
7993 [SFP_DEV_DOWN] = "down",
8094 [SFP_DEV_UP] = "up",
8195 };
....@@ -90,6 +104,8 @@
90104 static const char * const event_strings[] = {
91105 [SFP_E_INSERT] = "insert",
92106 [SFP_E_REMOVE] = "remove",
107
+ [SFP_E_DEV_ATTACH] = "dev_attach",
108
+ [SFP_E_DEV_DETACH] = "dev_detach",
93109 [SFP_E_DEV_DOWN] = "dev_down",
94110 [SFP_E_DEV_UP] = "dev_up",
95111 [SFP_E_TX_FAULT] = "tx_fault",
....@@ -108,7 +124,11 @@
108124
109125 static const char * const sm_state_strings[] = {
110126 [SFP_S_DOWN] = "down",
127
+ [SFP_S_FAIL] = "fail",
128
+ [SFP_S_WAIT] = "wait",
111129 [SFP_S_INIT] = "init",
130
+ [SFP_S_INIT_PHY] = "init_phy",
131
+ [SFP_S_INIT_TX_FAULT] = "init_tx_fault",
112132 [SFP_S_WAIT_LOS] = "wait_los",
113133 [SFP_S_LINK_UP] = "link_up",
114134 [SFP_S_TX_FAULT] = "tx_fault",
....@@ -139,29 +159,59 @@
139159 GPIOD_ASIS,
140160 };
141161
142
-#define T_INIT_JIFFIES msecs_to_jiffies(300)
143
-#define T_RESET_US 10
144
-#define T_FAULT_RECOVER msecs_to_jiffies(1000)
162
+/* t_start_up (SFF-8431) or t_init (SFF-8472) is the time required for a
163
+ * non-cooled module to initialise its laser safety circuitry. We wait
164
+ * an initial T_WAIT period before we check the tx fault to give any PHY
165
+ * on board (for a copper SFP) time to initialise.
166
+ */
167
+#define T_WAIT msecs_to_jiffies(50)
168
+#define T_START_UP msecs_to_jiffies(300)
169
+#define T_START_UP_BAD_GPON msecs_to_jiffies(60000)
170
+
171
+/* t_reset is the time required to assert the TX_DISABLE signal to reset
172
+ * an indicated TX_FAULT.
173
+ */
174
+#define T_RESET_US 10
175
+#define T_FAULT_RECOVER msecs_to_jiffies(1000)
176
+
177
+/* N_FAULT_INIT is the number of recovery attempts at module initialisation
178
+ * time. If the TX_FAULT signal is not deasserted after this number of
179
+ * attempts at clearing it, we decide that the module is faulty.
180
+ * N_FAULT is the same but after the module has initialised.
181
+ */
182
+#define N_FAULT_INIT 5
183
+#define N_FAULT 5
184
+
185
+/* T_PHY_RETRY is the time interval between attempts to probe the PHY.
186
+ * R_PHY_RETRY is the number of attempts.
187
+ */
188
+#define T_PHY_RETRY msecs_to_jiffies(50)
189
+#define R_PHY_RETRY 12
145190
146191 /* SFP module presence detection is poor: the three MOD DEF signals are
147192 * the same length on the PCB, which means it's possible for MOD DEF 0 to
148193 * connect before the I2C bus on MOD DEF 1/2.
149194 *
150
- * The SFP MSA specifies 300ms as t_init (the time taken for TX_FAULT to
151
- * be deasserted) but makes no mention of the earliest time before we can
152
- * access the I2C EEPROM. However, Avago modules require 300ms.
195
+ * The SFF-8472 specifies t_serial ("Time from power on until module is
196
+ * ready for data transmission over the two wire serial bus.") as 300ms.
153197 */
154
-#define T_PROBE_INIT msecs_to_jiffies(300)
155
-#define T_HPOWER_LEVEL msecs_to_jiffies(300)
156
-#define T_PROBE_RETRY msecs_to_jiffies(100)
198
+#define T_SERIAL msecs_to_jiffies(300)
199
+#define T_HPOWER_LEVEL msecs_to_jiffies(300)
200
+#define T_PROBE_RETRY_INIT msecs_to_jiffies(100)
201
+#define R_PROBE_RETRY_INIT 10
202
+#define T_PROBE_RETRY_SLOW msecs_to_jiffies(5000)
203
+#define R_PROBE_RETRY_SLOW 12
157204
158205 /* SFP modules appear to always have their PHY configured for bus address
159206 * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
160207 */
161208 #define SFP_PHY_ADDR 22
162209
163
-/* Give this long for the PHY to reset. */
164
-#define T_PHY_RESET_MS 50
210
+/* SFP_EEPROM_BLOCK_SIZE is the size of data chunk to read the EEPROM
211
+ * at a time. Some SFP modules and also some Linux I2C drivers do not like
212
+ * reads longer than 16 bytes.
213
+ */
214
+#define SFP_EEPROM_BLOCK_SIZE 16
165215
166216 struct sff_data {
167217 unsigned int gpios;
....@@ -175,6 +225,7 @@
175225 struct sfp_bus *sfp_bus;
176226 struct phy_device *mod_phy;
177227 const struct sff_data *type;
228
+ size_t i2c_block_size;
178229 u32 max_power_mW;
179230
180231 unsigned int (*get_state)(struct sfp *);
....@@ -183,21 +234,33 @@
183234 int (*write)(struct sfp *, bool, u8, void *, size_t);
184235
185236 struct gpio_desc *gpio[GPIO_MAX];
237
+ int gpio_irq[GPIO_MAX];
186238
187
- bool attached;
239
+ bool need_poll;
240
+
188241 struct mutex st_mutex; /* Protects state */
242
+ unsigned int state_soft_mask;
189243 unsigned int state;
190244 struct delayed_work poll;
191245 struct delayed_work timeout;
192246 struct mutex sm_mutex; /* Protects state machine */
193247 unsigned char sm_mod_state;
248
+ unsigned char sm_mod_tries_init;
249
+ unsigned char sm_mod_tries;
194250 unsigned char sm_dev_state;
195251 unsigned short sm_state;
196
- unsigned int sm_retries;
252
+ unsigned char sm_fault_retries;
253
+ unsigned char sm_phy_retries;
197254
198255 struct sfp_eeprom_id id;
256
+ unsigned int module_power_mW;
257
+ unsigned int module_t_start_up;
258
+ bool tx_fault_ignore;
259
+
199260 #if IS_ENABLED(CONFIG_HWMON)
200261 struct sfp_diag diag;
262
+ struct delayed_work hwmon_probe;
263
+ unsigned int hwmon_tries;
201264 struct device *hwmon_dev;
202265 char *hwmon_name;
203266 #endif
....@@ -206,7 +269,7 @@
206269
207270 static bool sff_module_supported(const struct sfp_eeprom_id *id)
208271 {
209
- return id->base.phys_id == SFP_PHYS_ID_SFF &&
272
+ return id->base.phys_id == SFF8024_ID_SFF_8472 &&
210273 id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
211274 }
212275
....@@ -217,8 +280,21 @@
217280
218281 static bool sfp_module_supported(const struct sfp_eeprom_id *id)
219282 {
220
- return id->base.phys_id == SFP_PHYS_ID_SFP &&
221
- id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP;
283
+ if (id->base.phys_id == SFF8024_ID_SFP &&
284
+ id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP)
285
+ return true;
286
+
287
+ /* SFP GPON module Ubiquiti U-Fiber Instant has in its EEPROM stored
288
+ * phys id SFF instead of SFP. Therefore mark this module explicitly
289
+ * as supported based on vendor name and pn match.
290
+ */
291
+ if (id->base.phys_id == SFF8024_ID_SFF_8472 &&
292
+ id->base.phys_ext_id == SFP_PHYS_EXT_ID_SFP &&
293
+ !memcmp(id->base.vendor_name, "UBNT ", 16) &&
294
+ !memcmp(id->base.vendor_pn, "UF-INSTANT ", 16))
295
+ return true;
296
+
297
+ return false;
222298 }
223299
224300 static const struct sff_data sfp_data = {
....@@ -281,6 +357,7 @@
281357 {
282358 struct i2c_msg msgs[2];
283359 u8 bus_addr = a2 ? 0x51 : 0x50;
360
+ size_t block_size = sfp->i2c_block_size;
284361 size_t this_len;
285362 int ret;
286363
....@@ -295,8 +372,8 @@
295372
296373 while (len) {
297374 this_len = len;
298
- if (this_len > 16)
299
- this_len = 16;
375
+ if (this_len > block_size)
376
+ this_len = block_size;
300377
301378 msgs[1].len = this_len;
302379
....@@ -373,16 +450,6 @@
373450 }
374451
375452 /* Interface */
376
-static unsigned int sfp_get_state(struct sfp *sfp)
377
-{
378
- return sfp->get_state(sfp);
379
-}
380
-
381
-static void sfp_set_state(struct sfp *sfp, unsigned int state)
382
-{
383
- sfp->set_state(sfp, state);
384
-}
385
-
386453 static int sfp_read(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
387454 {
388455 return sfp->read(sfp, a2, addr, buf, len);
....@@ -391,6 +458,89 @@
391458 static int sfp_write(struct sfp *sfp, bool a2, u8 addr, void *buf, size_t len)
392459 {
393460 return sfp->write(sfp, a2, addr, buf, len);
461
+}
462
+
463
+static unsigned int sfp_soft_get_state(struct sfp *sfp)
464
+{
465
+ unsigned int state = 0;
466
+ u8 status;
467
+ int ret;
468
+
469
+ ret = sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status));
470
+ if (ret == sizeof(status)) {
471
+ if (status & SFP_STATUS_RX_LOS)
472
+ state |= SFP_F_LOS;
473
+ if (status & SFP_STATUS_TX_FAULT)
474
+ state |= SFP_F_TX_FAULT;
475
+ } else {
476
+ dev_err_ratelimited(sfp->dev,
477
+ "failed to read SFP soft status: %d\n",
478
+ ret);
479
+ /* Preserve the current state */
480
+ state = sfp->state;
481
+ }
482
+
483
+ return state & sfp->state_soft_mask;
484
+}
485
+
486
+static void sfp_soft_set_state(struct sfp *sfp, unsigned int state)
487
+{
488
+ u8 status;
489
+
490
+ if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
491
+ sizeof(status)) {
492
+ if (state & SFP_F_TX_DISABLE)
493
+ status |= SFP_STATUS_TX_DISABLE_FORCE;
494
+ else
495
+ status &= ~SFP_STATUS_TX_DISABLE_FORCE;
496
+
497
+ sfp_write(sfp, true, SFP_STATUS, &status, sizeof(status));
498
+ }
499
+}
500
+
501
+static void sfp_soft_start_poll(struct sfp *sfp)
502
+{
503
+ const struct sfp_eeprom_id *id = &sfp->id;
504
+
505
+ sfp->state_soft_mask = 0;
506
+ if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_DISABLE &&
507
+ !sfp->gpio[GPIO_TX_DISABLE])
508
+ sfp->state_soft_mask |= SFP_F_TX_DISABLE;
509
+ if (id->ext.enhopts & SFP_ENHOPTS_SOFT_TX_FAULT &&
510
+ !sfp->gpio[GPIO_TX_FAULT])
511
+ sfp->state_soft_mask |= SFP_F_TX_FAULT;
512
+ if (id->ext.enhopts & SFP_ENHOPTS_SOFT_RX_LOS &&
513
+ !sfp->gpio[GPIO_LOS])
514
+ sfp->state_soft_mask |= SFP_F_LOS;
515
+
516
+ if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
517
+ !sfp->need_poll)
518
+ mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
519
+}
520
+
521
+static void sfp_soft_stop_poll(struct sfp *sfp)
522
+{
523
+ sfp->state_soft_mask = 0;
524
+}
525
+
526
+static unsigned int sfp_get_state(struct sfp *sfp)
527
+{
528
+ unsigned int state = sfp->get_state(sfp);
529
+
530
+ if (state & SFP_F_PRESENT &&
531
+ sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT))
532
+ state |= sfp_soft_get_state(sfp);
533
+
534
+ return state;
535
+}
536
+
537
+static void sfp_set_state(struct sfp *sfp, unsigned int state)
538
+{
539
+ sfp->set_state(sfp, state);
540
+
541
+ if (state & SFP_F_PRESENT &&
542
+ sfp->state_soft_mask & SFP_F_TX_DISABLE)
543
+ sfp_soft_set_state(sfp, state);
394544 }
395545
396546 static unsigned int sfp_check(void *buf, size_t len)
....@@ -424,8 +574,9 @@
424574 case hwmon_temp_crit:
425575 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
426576 return 0;
427
- /* fall through */
577
+ fallthrough;
428578 case hwmon_temp_input:
579
+ case hwmon_temp_label:
429580 return 0444;
430581 default:
431582 return 0;
....@@ -442,8 +593,9 @@
442593 case hwmon_in_crit:
443594 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
444595 return 0;
445
- /* fall through */
596
+ fallthrough;
446597 case hwmon_in_input:
598
+ case hwmon_in_label:
447599 return 0444;
448600 default:
449601 return 0;
....@@ -460,8 +612,9 @@
460612 case hwmon_curr_crit:
461613 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
462614 return 0;
463
- /* fall through */
615
+ fallthrough;
464616 case hwmon_curr_input:
617
+ case hwmon_curr_label:
465618 return 0444;
466619 default:
467620 return 0;
....@@ -487,8 +640,9 @@
487640 case hwmon_power_crit:
488641 if (!(sfp->id.ext.enhopts & SFP_ENHOPTS_ALARMWARN))
489642 return 0;
490
- /* fall through */
643
+ fallthrough;
491644 case hwmon_power_input:
645
+ case hwmon_power_label:
492646 return 0444;
493647 default:
494648 return 0;
....@@ -984,9 +1138,63 @@
9841138 }
9851139 }
9861140
1141
+static const char *const sfp_hwmon_power_labels[] = {
1142
+ "TX_power",
1143
+ "RX_power",
1144
+};
1145
+
1146
+static int sfp_hwmon_read_string(struct device *dev,
1147
+ enum hwmon_sensor_types type,
1148
+ u32 attr, int channel, const char **str)
1149
+{
1150
+ switch (type) {
1151
+ case hwmon_curr:
1152
+ switch (attr) {
1153
+ case hwmon_curr_label:
1154
+ *str = "bias";
1155
+ return 0;
1156
+ default:
1157
+ return -EOPNOTSUPP;
1158
+ }
1159
+ break;
1160
+ case hwmon_temp:
1161
+ switch (attr) {
1162
+ case hwmon_temp_label:
1163
+ *str = "temperature";
1164
+ return 0;
1165
+ default:
1166
+ return -EOPNOTSUPP;
1167
+ }
1168
+ break;
1169
+ case hwmon_in:
1170
+ switch (attr) {
1171
+ case hwmon_in_label:
1172
+ *str = "VCC";
1173
+ return 0;
1174
+ default:
1175
+ return -EOPNOTSUPP;
1176
+ }
1177
+ break;
1178
+ case hwmon_power:
1179
+ switch (attr) {
1180
+ case hwmon_power_label:
1181
+ *str = sfp_hwmon_power_labels[channel];
1182
+ return 0;
1183
+ default:
1184
+ return -EOPNOTSUPP;
1185
+ }
1186
+ break;
1187
+ default:
1188
+ return -EOPNOTSUPP;
1189
+ }
1190
+
1191
+ return -EOPNOTSUPP;
1192
+}
1193
+
9871194 static const struct hwmon_ops sfp_hwmon_ops = {
9881195 .is_visible = sfp_hwmon_is_visible,
9891196 .read = sfp_hwmon_read,
1197
+ .read_string = sfp_hwmon_read_string,
9901198 };
9911199
9921200 static u32 sfp_hwmon_chip_config[] = {
....@@ -1004,7 +1212,8 @@
10041212 HWMON_T_MAX | HWMON_T_MIN |
10051213 HWMON_T_MAX_ALARM | HWMON_T_MIN_ALARM |
10061214 HWMON_T_CRIT | HWMON_T_LCRIT |
1007
- HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM,
1215
+ HWMON_T_CRIT_ALARM | HWMON_T_LCRIT_ALARM |
1216
+ HWMON_T_LABEL,
10081217 0,
10091218 };
10101219
....@@ -1018,7 +1227,8 @@
10181227 HWMON_I_MAX | HWMON_I_MIN |
10191228 HWMON_I_MAX_ALARM | HWMON_I_MIN_ALARM |
10201229 HWMON_I_CRIT | HWMON_I_LCRIT |
1021
- HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM,
1230
+ HWMON_I_CRIT_ALARM | HWMON_I_LCRIT_ALARM |
1231
+ HWMON_I_LABEL,
10221232 0,
10231233 };
10241234
....@@ -1032,7 +1242,8 @@
10321242 HWMON_C_MAX | HWMON_C_MIN |
10331243 HWMON_C_MAX_ALARM | HWMON_C_MIN_ALARM |
10341244 HWMON_C_CRIT | HWMON_C_LCRIT |
1035
- HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM,
1245
+ HWMON_C_CRIT_ALARM | HWMON_C_LCRIT_ALARM |
1246
+ HWMON_C_LABEL,
10361247 0,
10371248 };
10381249
....@@ -1047,13 +1258,15 @@
10471258 HWMON_P_MAX | HWMON_P_MIN |
10481259 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
10491260 HWMON_P_CRIT | HWMON_P_LCRIT |
1050
- HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1261
+ HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1262
+ HWMON_P_LABEL,
10511263 /* Receive power */
10521264 HWMON_P_INPUT |
10531265 HWMON_P_MAX | HWMON_P_MIN |
10541266 HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
10551267 HWMON_P_CRIT | HWMON_P_LCRIT |
1056
- HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM,
1268
+ HWMON_P_CRIT_ALARM | HWMON_P_LCRIT_ALARM |
1269
+ HWMON_P_LABEL,
10571270 0,
10581271 };
10591272
....@@ -1076,10 +1289,57 @@
10761289 .info = sfp_hwmon_info,
10771290 };
10781291
1079
-static int sfp_hwmon_insert(struct sfp *sfp)
1292
+static void sfp_hwmon_probe(struct work_struct *work)
10801293 {
1294
+ struct sfp *sfp = container_of(work, struct sfp, hwmon_probe.work);
10811295 int err, i;
10821296
1297
+ /* hwmon interface needs to access 16bit registers in atomic way to
1298
+ * guarantee coherency of the diagnostic monitoring data. If it is not
1299
+ * possible to guarantee coherency because EEPROM is broken in such way
1300
+ * that does not support atomic 16bit read operation then we have to
1301
+ * skip registration of hwmon device.
1302
+ */
1303
+ if (sfp->i2c_block_size < 2) {
1304
+ dev_info(sfp->dev,
1305
+ "skipping hwmon device registration due to broken EEPROM\n");
1306
+ dev_info(sfp->dev,
1307
+ "diagnostic EEPROM area cannot be read atomically to guarantee data coherency\n");
1308
+ return;
1309
+ }
1310
+
1311
+ err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1312
+ if (err < 0) {
1313
+ if (sfp->hwmon_tries--) {
1314
+ mod_delayed_work(system_wq, &sfp->hwmon_probe,
1315
+ T_PROBE_RETRY_SLOW);
1316
+ } else {
1317
+ dev_warn(sfp->dev, "hwmon probe failed: %d\n", err);
1318
+ }
1319
+ return;
1320
+ }
1321
+
1322
+ sfp->hwmon_name = kstrdup(dev_name(sfp->dev), GFP_KERNEL);
1323
+ if (!sfp->hwmon_name) {
1324
+ dev_err(sfp->dev, "out of memory for hwmon name\n");
1325
+ return;
1326
+ }
1327
+
1328
+ for (i = 0; sfp->hwmon_name[i]; i++)
1329
+ if (hwmon_is_bad_char(sfp->hwmon_name[i]))
1330
+ sfp->hwmon_name[i] = '_';
1331
+
1332
+ sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1333
+ sfp->hwmon_name, sfp,
1334
+ &sfp_hwmon_chip_info,
1335
+ NULL);
1336
+ if (IS_ERR(sfp->hwmon_dev))
1337
+ dev_err(sfp->dev, "failed to register hwmon device: %ld\n",
1338
+ PTR_ERR(sfp->hwmon_dev));
1339
+}
1340
+
1341
+static int sfp_hwmon_insert(struct sfp *sfp)
1342
+{
10831343 if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE)
10841344 return 0;
10851345
....@@ -1092,33 +1352,32 @@
10921352 */
10931353 return 0;
10941354
1095
- err = sfp_read(sfp, true, 0, &sfp->diag, sizeof(sfp->diag));
1096
- if (err < 0)
1097
- return err;
1355
+ mod_delayed_work(system_wq, &sfp->hwmon_probe, 1);
1356
+ sfp->hwmon_tries = R_PROBE_RETRY_SLOW;
10981357
1099
- sfp->hwmon_name = kstrdup(dev_name(sfp->dev), GFP_KERNEL);
1100
- if (!sfp->hwmon_name)
1101
- return -ENODEV;
1102
-
1103
- for (i = 0; sfp->hwmon_name[i]; i++)
1104
- if (hwmon_is_bad_char(sfp->hwmon_name[i]))
1105
- sfp->hwmon_name[i] = '_';
1106
-
1107
- sfp->hwmon_dev = hwmon_device_register_with_info(sfp->dev,
1108
- sfp->hwmon_name, sfp,
1109
- &sfp_hwmon_chip_info,
1110
- NULL);
1111
-
1112
- return PTR_ERR_OR_ZERO(sfp->hwmon_dev);
1358
+ return 0;
11131359 }
11141360
11151361 static void sfp_hwmon_remove(struct sfp *sfp)
11161362 {
1363
+ cancel_delayed_work_sync(&sfp->hwmon_probe);
11171364 if (!IS_ERR_OR_NULL(sfp->hwmon_dev)) {
11181365 hwmon_device_unregister(sfp->hwmon_dev);
11191366 sfp->hwmon_dev = NULL;
11201367 kfree(sfp->hwmon_name);
11211368 }
1369
+}
1370
+
1371
+static int sfp_hwmon_init(struct sfp *sfp)
1372
+{
1373
+ INIT_DELAYED_WORK(&sfp->hwmon_probe, sfp_hwmon_probe);
1374
+
1375
+ return 0;
1376
+}
1377
+
1378
+static void sfp_hwmon_exit(struct sfp *sfp)
1379
+{
1380
+ cancel_delayed_work_sync(&sfp->hwmon_probe);
11221381 }
11231382 #else
11241383 static int sfp_hwmon_insert(struct sfp *sfp)
....@@ -1127,6 +1386,15 @@
11271386 }
11281387
11291388 static void sfp_hwmon_remove(struct sfp *sfp)
1389
+{
1390
+}
1391
+
1392
+static int sfp_hwmon_init(struct sfp *sfp)
1393
+{
1394
+ return 0;
1395
+}
1396
+
1397
+static void sfp_hwmon_exit(struct sfp *sfp)
11301398 {
11311399 }
11321400 #endif
....@@ -1179,7 +1447,7 @@
11791447 sfp_sm_set_timer(sfp, timeout);
11801448 }
11811449
1182
-static void sfp_sm_ins_next(struct sfp *sfp, unsigned int state,
1450
+static void sfp_sm_mod_next(struct sfp *sfp, unsigned int state,
11831451 unsigned int timeout)
11841452 {
11851453 sfp->sm_mod_state = state;
....@@ -1188,28 +1456,30 @@
11881456
11891457 static void sfp_sm_phy_detach(struct sfp *sfp)
11901458 {
1191
- phy_stop(sfp->mod_phy);
11921459 sfp_remove_phy(sfp->sfp_bus);
11931460 phy_device_remove(sfp->mod_phy);
11941461 phy_device_free(sfp->mod_phy);
11951462 sfp->mod_phy = NULL;
11961463 }
11971464
1198
-static void sfp_sm_probe_phy(struct sfp *sfp)
1465
+static int sfp_sm_probe_phy(struct sfp *sfp, bool is_c45)
11991466 {
12001467 struct phy_device *phy;
12011468 int err;
12021469
1203
- msleep(T_PHY_RESET_MS);
1204
-
1205
- phy = mdiobus_scan(sfp->i2c_mii, SFP_PHY_ADDR);
1206
- if (phy == ERR_PTR(-ENODEV)) {
1207
- dev_info(sfp->dev, "no PHY detected\n");
1208
- return;
1209
- }
1470
+ phy = get_phy_device(sfp->i2c_mii, SFP_PHY_ADDR, is_c45);
1471
+ if (phy == ERR_PTR(-ENODEV))
1472
+ return PTR_ERR(phy);
12101473 if (IS_ERR(phy)) {
12111474 dev_err(sfp->dev, "mdiobus scan returned %ld\n", PTR_ERR(phy));
1212
- return;
1475
+ return PTR_ERR(phy);
1476
+ }
1477
+
1478
+ err = phy_device_register(phy);
1479
+ if (err) {
1480
+ phy_device_free(phy);
1481
+ dev_err(sfp->dev, "phy_device_register failed: %d\n", err);
1482
+ return err;
12131483 }
12141484
12151485 err = sfp_add_phy(sfp->sfp_bus, phy);
....@@ -1217,11 +1487,12 @@
12171487 phy_device_remove(phy);
12181488 phy_device_free(phy);
12191489 dev_err(sfp->dev, "sfp_add_phy failed: %d\n", err);
1220
- return;
1490
+ return err;
12211491 }
12221492
12231493 sfp->mod_phy = phy;
1224
- phy_start(phy);
1494
+
1495
+ return 0;
12251496 }
12261497
12271498 static void sfp_sm_link_up(struct sfp *sfp)
....@@ -1237,15 +1508,19 @@
12371508
12381509 static void sfp_sm_link_check_los(struct sfp *sfp)
12391510 {
1240
- unsigned int los = sfp->state & SFP_F_LOS;
1511
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1512
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1513
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1514
+ bool los = false;
12411515
12421516 /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1243
- * are set, we assume that no LOS signal is available.
1517
+ * are set, we assume that no LOS signal is available. If both are
1518
+ * set, we assume LOS is not implemented (and is meaningless.)
12441519 */
1245
- if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
1246
- los ^= SFP_F_LOS;
1247
- else if (!(sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL)))
1248
- los = 0;
1520
+ if (los_options == los_inverted)
1521
+ los = !(sfp->state & SFP_F_LOS);
1522
+ else if (los_options == los_normal)
1523
+ los = !!(sfp->state & SFP_F_LOS);
12491524
12501525 if (los)
12511526 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
....@@ -1255,23 +1530,27 @@
12551530
12561531 static bool sfp_los_event_active(struct sfp *sfp, unsigned int event)
12571532 {
1258
- return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1259
- event == SFP_E_LOS_LOW) ||
1260
- (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1261
- event == SFP_E_LOS_HIGH);
1533
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1534
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1535
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1536
+
1537
+ return (los_options == los_inverted && event == SFP_E_LOS_LOW) ||
1538
+ (los_options == los_normal && event == SFP_E_LOS_HIGH);
12621539 }
12631540
12641541 static bool sfp_los_event_inactive(struct sfp *sfp, unsigned int event)
12651542 {
1266
- return (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) &&
1267
- event == SFP_E_LOS_HIGH) ||
1268
- (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_NORMAL) &&
1269
- event == SFP_E_LOS_LOW);
1543
+ const __be16 los_inverted = cpu_to_be16(SFP_OPTIONS_LOS_INVERTED);
1544
+ const __be16 los_normal = cpu_to_be16(SFP_OPTIONS_LOS_NORMAL);
1545
+ __be16 los_options = sfp->id.ext.options & (los_inverted | los_normal);
1546
+
1547
+ return (los_options == los_inverted && event == SFP_E_LOS_HIGH) ||
1548
+ (los_options == los_normal && event == SFP_E_LOS_LOW);
12701549 }
12711550
1272
-static void sfp_sm_fault(struct sfp *sfp, bool warn)
1551
+static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
12731552 {
1274
- if (sfp->sm_retries && !--sfp->sm_retries) {
1553
+ if (sfp->sm_fault_retries && !--sfp->sm_fault_retries) {
12751554 dev_err(sfp->dev,
12761555 "module persistently indicates fault, disabling\n");
12771556 sfp_sm_next(sfp, SFP_S_TX_DISABLE, 0);
....@@ -1279,115 +1558,247 @@
12791558 if (warn)
12801559 dev_err(sfp->dev, "module transmit fault indicated\n");
12811560
1282
- sfp_sm_next(sfp, SFP_S_TX_FAULT, T_FAULT_RECOVER);
1561
+ sfp_sm_next(sfp, next_state, T_FAULT_RECOVER);
12831562 }
12841563 }
12851564
1286
-static void sfp_sm_mod_init(struct sfp *sfp)
1565
+/* Probe a SFP for a PHY device if the module supports copper - the PHY
1566
+ * normally sits at I2C bus address 0x56, and may either be a clause 22
1567
+ * or clause 45 PHY.
1568
+ *
1569
+ * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1570
+ * negotiation enabled, but some may be in 1000base-X - which is for the
1571
+ * PHY driver to determine.
1572
+ *
1573
+ * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1574
+ * mode according to the negotiated line speed.
1575
+ */
1576
+static int sfp_sm_probe_for_phy(struct sfp *sfp)
12871577 {
1288
- sfp_module_tx_enable(sfp);
1578
+ int err = 0;
12891579
1290
- /* Wait t_init before indicating that the link is up, provided the
1291
- * current state indicates no TX_FAULT. If TX_FAULT clears before
1292
- * this time, that's fine too.
1293
- */
1294
- sfp_sm_next(sfp, SFP_S_INIT, T_INIT_JIFFIES);
1295
- sfp->sm_retries = 5;
1580
+ switch (sfp->id.base.extended_cc) {
1581
+ case SFF8024_ECC_10GBASE_T_SFI:
1582
+ case SFF8024_ECC_10GBASE_T_SR:
1583
+ case SFF8024_ECC_5GBASE_T:
1584
+ case SFF8024_ECC_2_5GBASE_T:
1585
+ err = sfp_sm_probe_phy(sfp, true);
1586
+ break;
12961587
1297
- /* Setting the serdes link mode is guesswork: there's no
1298
- * field in the EEPROM which indicates what mode should
1299
- * be used.
1300
- *
1301
- * If it's a gigabit-only fiber module, it probably does
1302
- * not have a PHY, so switch to 802.3z negotiation mode.
1303
- * Otherwise, switch to SGMII mode (which is required to
1304
- * support non-gigabit speeds) and probe for a PHY.
1305
- */
1306
- if (sfp->id.base.e1000_base_t ||
1307
- sfp->id.base.e100_base_lx ||
1308
- sfp->id.base.e100_base_fx)
1309
- sfp_sm_probe_phy(sfp);
1588
+ default:
1589
+ if (sfp->id.base.e1000_base_t)
1590
+ err = sfp_sm_probe_phy(sfp, false);
1591
+ break;
1592
+ }
1593
+ return err;
13101594 }
13111595
1312
-static int sfp_sm_mod_hpower(struct sfp *sfp)
1596
+static int sfp_module_parse_power(struct sfp *sfp)
13131597 {
1314
- u32 power;
1315
- u8 val;
1316
- int err;
1598
+ u32 power_mW = 1000;
1599
+ bool supports_a2;
13171600
1318
- power = 1000;
13191601 if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_POWER_DECL))
1320
- power = 1500;
1602
+ power_mW = 1500;
13211603 if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL))
1322
- power = 2000;
1604
+ power_mW = 2000;
13231605
1324
- if (sfp->id.ext.sff8472_compliance == SFP_SFF8472_COMPLIANCE_NONE &&
1325
- (sfp->id.ext.diagmon & (SFP_DIAGMON_DDM | SFP_DIAGMON_ADDRMODE)) !=
1326
- SFP_DIAGMON_DDM) {
1327
- /* The module appears not to implement bus address 0xa2,
1328
- * or requires an address change sequence, so assume that
1329
- * the module powers up in the indicated power mode.
1330
- */
1331
- if (power > sfp->max_power_mW) {
1606
+ supports_a2 = sfp->id.ext.sff8472_compliance !=
1607
+ SFP_SFF8472_COMPLIANCE_NONE ||
1608
+ sfp->id.ext.diagmon & SFP_DIAGMON_DDM;
1609
+
1610
+ if (power_mW > sfp->max_power_mW) {
1611
+ /* Module power specification exceeds the allowed maximum. */
1612
+ if (!supports_a2) {
1613
+ /* The module appears not to implement bus address
1614
+ * 0xa2, so assume that the module powers up in the
1615
+ * indicated mode.
1616
+ */
13321617 dev_err(sfp->dev,
13331618 "Host does not support %u.%uW modules\n",
1334
- power / 1000, (power / 100) % 10);
1619
+ power_mW / 1000, (power_mW / 100) % 10);
13351620 return -EINVAL;
1621
+ } else {
1622
+ dev_warn(sfp->dev,
1623
+ "Host does not support %u.%uW modules, module left in power mode 1\n",
1624
+ power_mW / 1000, (power_mW / 100) % 10);
1625
+ return 0;
13361626 }
1627
+ }
1628
+
1629
+ if (power_mW <= 1000) {
1630
+ /* Modules below 1W do not require a power change sequence */
1631
+ sfp->module_power_mW = power_mW;
13371632 return 0;
13381633 }
13391634
1340
- if (power > sfp->max_power_mW) {
1635
+ if (!supports_a2) {
1636
+ /* The module power level is below the host maximum and the
1637
+ * module appears not to implement bus address 0xa2, so assume
1638
+ * that the module powers up in the indicated mode.
1639
+ */
1640
+ return 0;
1641
+ }
1642
+
1643
+ /* If the module requires a higher power mode, but also requires
1644
+ * an address change sequence, warn the user that the module may
1645
+ * not be functional.
1646
+ */
1647
+ if (sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE) {
13411648 dev_warn(sfp->dev,
1342
- "Host does not support %u.%uW modules, module left in power mode 1\n",
1343
- power / 1000, (power / 100) % 10);
1649
+ "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1650
+ power_mW / 1000, (power_mW / 100) % 10);
13441651 return 0;
13451652 }
13461653
1347
- if (power <= 1000)
1348
- return 0;
1654
+ sfp->module_power_mW = power_mW;
1655
+
1656
+ return 0;
1657
+}
1658
+
1659
+static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable)
1660
+{
1661
+ u8 val;
1662
+ int err;
13491663
13501664 err = sfp_read(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
13511665 if (err != sizeof(val)) {
13521666 dev_err(sfp->dev, "Failed to read EEPROM: %d\n", err);
1353
- err = -EAGAIN;
1354
- goto err;
1667
+ return -EAGAIN;
13551668 }
13561669
1357
- val |= BIT(0);
1670
+ /* DM7052 reports as a high power module, responds to reads (with
1671
+ * all bytes 0xff) at 0x51 but does not accept writes. In any case,
1672
+ * if the bit is already set, we're already in high power mode.
1673
+ */
1674
+ if (!!(val & BIT(0)) == enable)
1675
+ return 0;
1676
+
1677
+ if (enable)
1678
+ val |= BIT(0);
1679
+ else
1680
+ val &= ~BIT(0);
13581681
13591682 err = sfp_write(sfp, true, SFP_EXT_STATUS, &val, sizeof(val));
13601683 if (err != sizeof(val)) {
13611684 dev_err(sfp->dev, "Failed to write EEPROM: %d\n", err);
1362
- err = -EAGAIN;
1363
- goto err;
1685
+ return -EAGAIN;
13641686 }
13651687
1366
- dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1367
- power / 1000, (power / 100) % 10);
1368
- return T_HPOWER_LEVEL;
1688
+ if (enable)
1689
+ dev_info(sfp->dev, "Module switched to %u.%uW power level\n",
1690
+ sfp->module_power_mW / 1000,
1691
+ (sfp->module_power_mW / 100) % 10);
13691692
1370
-err:
1371
- return err;
1693
+ return 0;
13721694 }
13731695
1374
-static int sfp_sm_mod_probe(struct sfp *sfp)
1696
+/* GPON modules based on Realtek RTL8672 and RTL9601C chips (e.g. V-SOL
1697
+ * V2801F, CarlitoxxPro CPGOS03-0490, Ubiquiti U-Fiber Instant, ...) do
1698
+ * not support multibyte reads from the EEPROM. Each multi-byte read
1699
+ * operation returns just one byte of EEPROM followed by zeros. There is
1700
+ * no way to identify which modules are using Realtek RTL8672 and RTL9601C
1701
+ * chips. Moreover every OEM of V-SOL V2801F module puts its own vendor
1702
+ * name and vendor id into EEPROM, so there is even no way to detect if
1703
+ * module is V-SOL V2801F. Therefore check for those zeros in the read
1704
+ * data and then based on check switch to reading EEPROM to one byte
1705
+ * at a time.
1706
+ */
1707
+static bool sfp_id_needs_byte_io(struct sfp *sfp, void *buf, size_t len)
1708
+{
1709
+ size_t i, block_size = sfp->i2c_block_size;
1710
+
1711
+ /* Already using byte IO */
1712
+ if (block_size == 1)
1713
+ return false;
1714
+
1715
+ for (i = 1; i < len; i += block_size) {
1716
+ if (memchr_inv(buf + i, '\0', min(block_size - 1, len - i)))
1717
+ return false;
1718
+ }
1719
+ return true;
1720
+}
1721
+
1722
+static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id)
1723
+{
1724
+ u8 check;
1725
+ int err;
1726
+
1727
+ if (id->base.phys_id != SFF8024_ID_SFF_8472 ||
1728
+ id->base.phys_ext_id != SFP_PHYS_EXT_ID_SFP ||
1729
+ id->base.connector != SFF8024_CONNECTOR_LC) {
1730
+ dev_warn(sfp->dev, "Rewriting fiber module EEPROM with corrected values\n");
1731
+ id->base.phys_id = SFF8024_ID_SFF_8472;
1732
+ id->base.phys_ext_id = SFP_PHYS_EXT_ID_SFP;
1733
+ id->base.connector = SFF8024_CONNECTOR_LC;
1734
+ err = sfp_write(sfp, false, SFP_PHYS_ID, &id->base, 3);
1735
+ if (err != 3) {
1736
+ dev_err(sfp->dev, "Failed to rewrite module EEPROM: %d\n", err);
1737
+ return err;
1738
+ }
1739
+
1740
+ /* Cotsworks modules have been found to require a delay between write operations. */
1741
+ mdelay(50);
1742
+
1743
+ /* Update base structure checksum */
1744
+ check = sfp_check(&id->base, sizeof(id->base) - 1);
1745
+ err = sfp_write(sfp, false, SFP_CC_BASE, &check, 1);
1746
+ if (err != 1) {
1747
+ dev_err(sfp->dev, "Failed to update base structure checksum in fiber module EEPROM: %d\n", err);
1748
+ return err;
1749
+ }
1750
+ }
1751
+ return 0;
1752
+}
1753
+
1754
+static int sfp_sm_mod_probe(struct sfp *sfp, bool report)
13751755 {
13761756 /* SFP module inserted - read I2C data */
13771757 struct sfp_eeprom_id id;
1758
+ bool cotsworks_sfbg;
13781759 bool cotsworks;
13791760 u8 check;
13801761 int ret;
13811762
1382
- ret = sfp_read(sfp, false, 0, &id, sizeof(id));
1763
+ sfp->i2c_block_size = SFP_EEPROM_BLOCK_SIZE;
1764
+
1765
+ ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
13831766 if (ret < 0) {
1384
- dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
1767
+ if (report)
1768
+ dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
13851769 return -EAGAIN;
13861770 }
13871771
1388
- if (ret != sizeof(id)) {
1772
+ if (ret != sizeof(id.base)) {
13891773 dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
13901774 return -EAGAIN;
1775
+ }
1776
+
1777
+ /* Some SFP modules (e.g. Nokia 3FE46541AA) lock up if read from
1778
+ * address 0x51 is just one byte at a time. Also SFF-8472 requires
1779
+ * that EEPROM supports atomic 16bit read operation for diagnostic
1780
+ * fields, so do not switch to one byte reading at a time unless it
1781
+ * is really required and we have no other option.
1782
+ */
1783
+ if (sfp_id_needs_byte_io(sfp, &id.base, sizeof(id.base))) {
1784
+ dev_info(sfp->dev,
1785
+ "Detected broken RTL8672/RTL9601C emulated EEPROM\n");
1786
+ dev_info(sfp->dev,
1787
+ "Switching to reading EEPROM to one byte at a time\n");
1788
+ sfp->i2c_block_size = 1;
1789
+
1790
+ ret = sfp_read(sfp, false, 0, &id.base, sizeof(id.base));
1791
+ if (ret < 0) {
1792
+ if (report)
1793
+ dev_err(sfp->dev, "failed to read EEPROM: %d\n",
1794
+ ret);
1795
+ return -EAGAIN;
1796
+ }
1797
+
1798
+ if (ret != sizeof(id.base)) {
1799
+ dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
1800
+ return -EAGAIN;
1801
+ }
13911802 }
13921803
13931804 /* Cotsworks do not seem to update the checksums when they
....@@ -1395,6 +1806,17 @@
13951806 * serial number and date code.
13961807 */
13971808 cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS ", 16);
1809
+ cotsworks_sfbg = !memcmp(id.base.vendor_pn, "SFBG", 4);
1810
+
1811
+ /* Cotsworks SFF module EEPROM do not always have valid phys_id,
1812
+ * phys_ext_id, and connector bytes. Rewrite SFF EEPROM bytes if
1813
+ * Cotsworks PN matches and bytes are not correct.
1814
+ */
1815
+ if (cotsworks && cotsworks_sfbg) {
1816
+ ret = sfp_cotsworks_fixup_check(sfp, &id);
1817
+ if (ret < 0)
1818
+ return ret;
1819
+ }
13981820
13991821 /* Validate the checksum over the base structure */
14001822 check = sfp_check(&id.base, sizeof(id.base) - 1);
....@@ -1411,6 +1833,18 @@
14111833 16, 1, &id, sizeof(id), true);
14121834 return -EINVAL;
14131835 }
1836
+ }
1837
+
1838
+ ret = sfp_read(sfp, false, SFP_CC_BASE + 1, &id.ext, sizeof(id.ext));
1839
+ if (ret < 0) {
1840
+ if (report)
1841
+ dev_err(sfp->dev, "failed to read EEPROM: %d\n", ret);
1842
+ return -EAGAIN;
1843
+ }
1844
+
1845
+ if (ret != sizeof(id.ext)) {
1846
+ dev_err(sfp->dev, "EEPROM short read: %d\n", ret);
1847
+ return -EAGAIN;
14141848 }
14151849
14161850 check = sfp_check(&id.ext, sizeof(id.ext) - 1);
....@@ -1439,7 +1873,7 @@
14391873 (int)sizeof(id.ext.datecode), id.ext.datecode);
14401874
14411875 /* Check whether we support this module */
1442
- if (!sfp->type->module_supported(&sfp->id)) {
1876
+ if (!sfp->type->module_supported(&id)) {
14431877 dev_err(sfp->dev,
14441878 "module is not supported - phys id 0x%02x 0x%02x\n",
14451879 sfp->id.base.phys_id, sfp->id.base.phys_ext_id);
....@@ -1451,31 +1885,332 @@
14511885 dev_warn(sfp->dev,
14521886 "module address swap to access page 0xA2 is not supported.\n");
14531887
1454
- ret = sfp_hwmon_insert(sfp);
1888
+ /* Parse the module power requirement */
1889
+ ret = sfp_module_parse_power(sfp);
14551890 if (ret < 0)
14561891 return ret;
14571892
1458
- ret = sfp_module_insert(sfp->sfp_bus, &sfp->id);
1459
- if (ret < 0)
1460
- return ret;
1893
+ if (!memcmp(id.base.vendor_name, "ALCATELLUCENT ", 16) &&
1894
+ !memcmp(id.base.vendor_pn, "3FE46541AA ", 16))
1895
+ sfp->module_t_start_up = T_START_UP_BAD_GPON;
1896
+ else
1897
+ sfp->module_t_start_up = T_START_UP;
14611898
1462
- return sfp_sm_mod_hpower(sfp);
1899
+ if (!memcmp(id.base.vendor_name, "HUAWEI ", 16) &&
1900
+ !memcmp(id.base.vendor_pn, "MA5671A ", 16))
1901
+ sfp->tx_fault_ignore = true;
1902
+ else
1903
+ sfp->tx_fault_ignore = false;
1904
+
1905
+ return 0;
14631906 }
14641907
14651908 static void sfp_sm_mod_remove(struct sfp *sfp)
14661909 {
1467
- sfp_module_remove(sfp->sfp_bus);
1910
+ if (sfp->sm_mod_state > SFP_MOD_WAITDEV)
1911
+ sfp_module_remove(sfp->sfp_bus);
14681912
14691913 sfp_hwmon_remove(sfp);
14701914
1471
- if (sfp->mod_phy)
1472
- sfp_sm_phy_detach(sfp);
1473
-
1474
- sfp_module_tx_disable(sfp);
1475
-
14761915 memset(&sfp->id, 0, sizeof(sfp->id));
1916
+ sfp->module_power_mW = 0;
14771917
14781918 dev_info(sfp->dev, "module removed\n");
1919
+}
1920
+
1921
+/* This state machine tracks the upstream's state */
1922
+static void sfp_sm_device(struct sfp *sfp, unsigned int event)
1923
+{
1924
+ switch (sfp->sm_dev_state) {
1925
+ default:
1926
+ if (event == SFP_E_DEV_ATTACH)
1927
+ sfp->sm_dev_state = SFP_DEV_DOWN;
1928
+ break;
1929
+
1930
+ case SFP_DEV_DOWN:
1931
+ if (event == SFP_E_DEV_DETACH)
1932
+ sfp->sm_dev_state = SFP_DEV_DETACHED;
1933
+ else if (event == SFP_E_DEV_UP)
1934
+ sfp->sm_dev_state = SFP_DEV_UP;
1935
+ break;
1936
+
1937
+ case SFP_DEV_UP:
1938
+ if (event == SFP_E_DEV_DETACH)
1939
+ sfp->sm_dev_state = SFP_DEV_DETACHED;
1940
+ else if (event == SFP_E_DEV_DOWN)
1941
+ sfp->sm_dev_state = SFP_DEV_DOWN;
1942
+ break;
1943
+ }
1944
+}
1945
+
1946
+/* This state machine tracks the insert/remove state of the module, probes
1947
+ * the on-board EEPROM, and sets up the power level.
1948
+ */
1949
+static void sfp_sm_module(struct sfp *sfp, unsigned int event)
1950
+{
1951
+ int err;
1952
+
1953
+ /* Handle remove event globally, it resets this state machine */
1954
+ if (event == SFP_E_REMOVE) {
1955
+ if (sfp->sm_mod_state > SFP_MOD_PROBE)
1956
+ sfp_sm_mod_remove(sfp);
1957
+ sfp_sm_mod_next(sfp, SFP_MOD_EMPTY, 0);
1958
+ return;
1959
+ }
1960
+
1961
+ /* Handle device detach globally */
1962
+ if (sfp->sm_dev_state < SFP_DEV_DOWN &&
1963
+ sfp->sm_mod_state > SFP_MOD_WAITDEV) {
1964
+ if (sfp->module_power_mW > 1000 &&
1965
+ sfp->sm_mod_state > SFP_MOD_HPOWER)
1966
+ sfp_sm_mod_hpower(sfp, false);
1967
+ sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
1968
+ return;
1969
+ }
1970
+
1971
+ switch (sfp->sm_mod_state) {
1972
+ default:
1973
+ if (event == SFP_E_INSERT) {
1974
+ sfp_sm_mod_next(sfp, SFP_MOD_PROBE, T_SERIAL);
1975
+ sfp->sm_mod_tries_init = R_PROBE_RETRY_INIT;
1976
+ sfp->sm_mod_tries = R_PROBE_RETRY_SLOW;
1977
+ }
1978
+ break;
1979
+
1980
+ case SFP_MOD_PROBE:
1981
+ /* Wait for T_PROBE_INIT to time out */
1982
+ if (event != SFP_E_TIMEOUT)
1983
+ break;
1984
+
1985
+ err = sfp_sm_mod_probe(sfp, sfp->sm_mod_tries == 1);
1986
+ if (err == -EAGAIN) {
1987
+ if (sfp->sm_mod_tries_init &&
1988
+ --sfp->sm_mod_tries_init) {
1989
+ sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
1990
+ break;
1991
+ } else if (sfp->sm_mod_tries && --sfp->sm_mod_tries) {
1992
+ if (sfp->sm_mod_tries == R_PROBE_RETRY_SLOW - 1)
1993
+ dev_warn(sfp->dev,
1994
+ "please wait, module slow to respond\n");
1995
+ sfp_sm_set_timer(sfp, T_PROBE_RETRY_SLOW);
1996
+ break;
1997
+ }
1998
+ }
1999
+ if (err < 0) {
2000
+ sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2001
+ break;
2002
+ }
2003
+
2004
+ err = sfp_hwmon_insert(sfp);
2005
+ if (err)
2006
+ dev_warn(sfp->dev, "hwmon probe failed: %d\n", err);
2007
+
2008
+ sfp_sm_mod_next(sfp, SFP_MOD_WAITDEV, 0);
2009
+ fallthrough;
2010
+ case SFP_MOD_WAITDEV:
2011
+ /* Ensure that the device is attached before proceeding */
2012
+ if (sfp->sm_dev_state < SFP_DEV_DOWN)
2013
+ break;
2014
+
2015
+ /* Report the module insertion to the upstream device */
2016
+ err = sfp_module_insert(sfp->sfp_bus, &sfp->id);
2017
+ if (err < 0) {
2018
+ sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2019
+ break;
2020
+ }
2021
+
2022
+ /* If this is a power level 1 module, we are done */
2023
+ if (sfp->module_power_mW <= 1000)
2024
+ goto insert;
2025
+
2026
+ sfp_sm_mod_next(sfp, SFP_MOD_HPOWER, 0);
2027
+ fallthrough;
2028
+ case SFP_MOD_HPOWER:
2029
+ /* Enable high power mode */
2030
+ err = sfp_sm_mod_hpower(sfp, true);
2031
+ if (err < 0) {
2032
+ if (err != -EAGAIN) {
2033
+ sfp_module_remove(sfp->sfp_bus);
2034
+ sfp_sm_mod_next(sfp, SFP_MOD_ERROR, 0);
2035
+ } else {
2036
+ sfp_sm_set_timer(sfp, T_PROBE_RETRY_INIT);
2037
+ }
2038
+ break;
2039
+ }
2040
+
2041
+ sfp_sm_mod_next(sfp, SFP_MOD_WAITPWR, T_HPOWER_LEVEL);
2042
+ break;
2043
+
2044
+ case SFP_MOD_WAITPWR:
2045
+ /* Wait for T_HPOWER_LEVEL to time out */
2046
+ if (event != SFP_E_TIMEOUT)
2047
+ break;
2048
+
2049
+ insert:
2050
+ sfp_sm_mod_next(sfp, SFP_MOD_PRESENT, 0);
2051
+ break;
2052
+
2053
+ case SFP_MOD_PRESENT:
2054
+ case SFP_MOD_ERROR:
2055
+ break;
2056
+ }
2057
+}
2058
+
2059
+static void sfp_sm_main(struct sfp *sfp, unsigned int event)
2060
+{
2061
+ unsigned long timeout;
2062
+ int ret;
2063
+
2064
+ /* Some events are global */
2065
+ if (sfp->sm_state != SFP_S_DOWN &&
2066
+ (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2067
+ sfp->sm_dev_state != SFP_DEV_UP)) {
2068
+ if (sfp->sm_state == SFP_S_LINK_UP &&
2069
+ sfp->sm_dev_state == SFP_DEV_UP)
2070
+ sfp_sm_link_down(sfp);
2071
+ if (sfp->sm_state > SFP_S_INIT)
2072
+ sfp_module_stop(sfp->sfp_bus);
2073
+ if (sfp->mod_phy)
2074
+ sfp_sm_phy_detach(sfp);
2075
+ sfp_module_tx_disable(sfp);
2076
+ sfp_soft_stop_poll(sfp);
2077
+ sfp_sm_next(sfp, SFP_S_DOWN, 0);
2078
+ return;
2079
+ }
2080
+
2081
+ /* The main state machine */
2082
+ switch (sfp->sm_state) {
2083
+ case SFP_S_DOWN:
2084
+ if (sfp->sm_mod_state != SFP_MOD_PRESENT ||
2085
+ sfp->sm_dev_state != SFP_DEV_UP)
2086
+ break;
2087
+
2088
+ if (!(sfp->id.ext.diagmon & SFP_DIAGMON_ADDRMODE))
2089
+ sfp_soft_start_poll(sfp);
2090
+
2091
+ sfp_module_tx_enable(sfp);
2092
+
2093
+ /* Initialise the fault clearance retries */
2094
+ sfp->sm_fault_retries = N_FAULT_INIT;
2095
+
2096
+ /* We need to check the TX_FAULT state, which is not defined
2097
+ * while TX_DISABLE is asserted. The earliest we want to do
2098
+ * anything (such as probe for a PHY) is 50ms.
2099
+ */
2100
+ sfp_sm_next(sfp, SFP_S_WAIT, T_WAIT);
2101
+ break;
2102
+
2103
+ case SFP_S_WAIT:
2104
+ if (event != SFP_E_TIMEOUT)
2105
+ break;
2106
+
2107
+ if (sfp->state & SFP_F_TX_FAULT) {
2108
+ /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
2109
+ * from the TX_DISABLE deassertion for the module to
2110
+ * initialise, which is indicated by TX_FAULT
2111
+ * deasserting.
2112
+ */
2113
+ timeout = sfp->module_t_start_up;
2114
+ if (timeout > T_WAIT)
2115
+ timeout -= T_WAIT;
2116
+ else
2117
+ timeout = 1;
2118
+
2119
+ sfp_sm_next(sfp, SFP_S_INIT, timeout);
2120
+ } else {
2121
+ /* TX_FAULT is not asserted, assume the module has
2122
+ * finished initialising.
2123
+ */
2124
+ goto init_done;
2125
+ }
2126
+ break;
2127
+
2128
+ case SFP_S_INIT:
2129
+ if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2130
+ /* TX_FAULT is still asserted after t_init or
2131
+ * or t_start_up, so assume there is a fault.
2132
+ */
2133
+ sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
2134
+ sfp->sm_fault_retries == N_FAULT_INIT);
2135
+ } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2136
+ init_done:
2137
+ sfp->sm_phy_retries = R_PHY_RETRY;
2138
+ goto phy_probe;
2139
+ }
2140
+ break;
2141
+
2142
+ case SFP_S_INIT_PHY:
2143
+ if (event != SFP_E_TIMEOUT)
2144
+ break;
2145
+ phy_probe:
2146
+ /* TX_FAULT deasserted or we timed out with TX_FAULT
2147
+ * clear. Probe for the PHY and check the LOS state.
2148
+ */
2149
+ ret = sfp_sm_probe_for_phy(sfp);
2150
+ if (ret == -ENODEV) {
2151
+ if (--sfp->sm_phy_retries) {
2152
+ sfp_sm_next(sfp, SFP_S_INIT_PHY, T_PHY_RETRY);
2153
+ break;
2154
+ } else {
2155
+ dev_info(sfp->dev, "no PHY detected\n");
2156
+ }
2157
+ } else if (ret) {
2158
+ sfp_sm_next(sfp, SFP_S_FAIL, 0);
2159
+ break;
2160
+ }
2161
+ if (sfp_module_start(sfp->sfp_bus)) {
2162
+ sfp_sm_next(sfp, SFP_S_FAIL, 0);
2163
+ break;
2164
+ }
2165
+ sfp_sm_link_check_los(sfp);
2166
+
2167
+ /* Reset the fault retry count */
2168
+ sfp->sm_fault_retries = N_FAULT;
2169
+ break;
2170
+
2171
+ case SFP_S_INIT_TX_FAULT:
2172
+ if (event == SFP_E_TIMEOUT) {
2173
+ sfp_module_tx_fault_reset(sfp);
2174
+ sfp_sm_next(sfp, SFP_S_INIT, sfp->module_t_start_up);
2175
+ }
2176
+ break;
2177
+
2178
+ case SFP_S_WAIT_LOS:
2179
+ if (event == SFP_E_TX_FAULT)
2180
+ sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2181
+ else if (sfp_los_event_inactive(sfp, event))
2182
+ sfp_sm_link_up(sfp);
2183
+ break;
2184
+
2185
+ case SFP_S_LINK_UP:
2186
+ if (event == SFP_E_TX_FAULT) {
2187
+ sfp_sm_link_down(sfp);
2188
+ sfp_sm_fault(sfp, SFP_S_TX_FAULT, true);
2189
+ } else if (sfp_los_event_active(sfp, event)) {
2190
+ sfp_sm_link_down(sfp);
2191
+ sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
2192
+ }
2193
+ break;
2194
+
2195
+ case SFP_S_TX_FAULT:
2196
+ if (event == SFP_E_TIMEOUT) {
2197
+ sfp_module_tx_fault_reset(sfp);
2198
+ sfp_sm_next(sfp, SFP_S_REINIT, sfp->module_t_start_up);
2199
+ }
2200
+ break;
2201
+
2202
+ case SFP_S_REINIT:
2203
+ if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
2204
+ sfp_sm_fault(sfp, SFP_S_TX_FAULT, false);
2205
+ } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
2206
+ dev_info(sfp->dev, "module transmit fault recovered\n");
2207
+ sfp_sm_link_check_los(sfp);
2208
+ }
2209
+ break;
2210
+
2211
+ case SFP_S_TX_DISABLE:
2212
+ break;
2213
+ }
14792214 }
14802215
14812216 static void sfp_sm_event(struct sfp *sfp, unsigned int event)
....@@ -1488,134 +2223,9 @@
14882223 sm_state_to_str(sfp->sm_state),
14892224 event_to_str(event));
14902225
1491
- /* This state machine tracks the insert/remove state of
1492
- * the module, and handles probing the on-board EEPROM.
1493
- */
1494
- switch (sfp->sm_mod_state) {
1495
- default:
1496
- if (event == SFP_E_INSERT && sfp->attached) {
1497
- sfp_module_tx_disable(sfp);
1498
- sfp_sm_ins_next(sfp, SFP_MOD_PROBE, T_PROBE_INIT);
1499
- }
1500
- break;
1501
-
1502
- case SFP_MOD_PROBE:
1503
- if (event == SFP_E_REMOVE) {
1504
- sfp_sm_ins_next(sfp, SFP_MOD_EMPTY, 0);
1505
- } else if (event == SFP_E_TIMEOUT) {
1506
- int val = sfp_sm_mod_probe(sfp);
1507
-
1508
- if (val == 0)
1509
- sfp_sm_ins_next(sfp, SFP_MOD_PRESENT, 0);
1510
- else if (val > 0)
1511
- sfp_sm_ins_next(sfp, SFP_MOD_HPOWER, val);
1512
- else if (val != -EAGAIN)
1513
- sfp_sm_ins_next(sfp, SFP_MOD_ERROR, 0);
1514
- else
1515
- sfp_sm_set_timer(sfp, T_PROBE_RETRY);
1516
- }
1517
- break;
1518
-
1519
- case SFP_MOD_HPOWER:
1520
- if (event == SFP_E_TIMEOUT) {
1521
- sfp_sm_ins_next(sfp, SFP_MOD_PRESENT, 0);
1522
- break;
1523
- }
1524
- /* fallthrough */
1525
- case SFP_MOD_PRESENT:
1526
- case SFP_MOD_ERROR:
1527
- if (event == SFP_E_REMOVE) {
1528
- sfp_sm_mod_remove(sfp);
1529
- sfp_sm_ins_next(sfp, SFP_MOD_EMPTY, 0);
1530
- }
1531
- break;
1532
- }
1533
-
1534
- /* This state machine tracks the netdev up/down state */
1535
- switch (sfp->sm_dev_state) {
1536
- default:
1537
- if (event == SFP_E_DEV_UP)
1538
- sfp->sm_dev_state = SFP_DEV_UP;
1539
- break;
1540
-
1541
- case SFP_DEV_UP:
1542
- if (event == SFP_E_DEV_DOWN) {
1543
- /* If the module has a PHY, avoid raising TX disable
1544
- * as this resets the PHY. Otherwise, raise it to
1545
- * turn the laser off.
1546
- */
1547
- if (!sfp->mod_phy)
1548
- sfp_module_tx_disable(sfp);
1549
- sfp->sm_dev_state = SFP_DEV_DOWN;
1550
- }
1551
- break;
1552
- }
1553
-
1554
- /* Some events are global */
1555
- if (sfp->sm_state != SFP_S_DOWN &&
1556
- (sfp->sm_mod_state != SFP_MOD_PRESENT ||
1557
- sfp->sm_dev_state != SFP_DEV_UP)) {
1558
- if (sfp->sm_state == SFP_S_LINK_UP &&
1559
- sfp->sm_dev_state == SFP_DEV_UP)
1560
- sfp_sm_link_down(sfp);
1561
- if (sfp->mod_phy)
1562
- sfp_sm_phy_detach(sfp);
1563
- sfp_sm_next(sfp, SFP_S_DOWN, 0);
1564
- mutex_unlock(&sfp->sm_mutex);
1565
- return;
1566
- }
1567
-
1568
- /* The main state machine */
1569
- switch (sfp->sm_state) {
1570
- case SFP_S_DOWN:
1571
- if (sfp->sm_mod_state == SFP_MOD_PRESENT &&
1572
- sfp->sm_dev_state == SFP_DEV_UP)
1573
- sfp_sm_mod_init(sfp);
1574
- break;
1575
-
1576
- case SFP_S_INIT:
1577
- if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT)
1578
- sfp_sm_fault(sfp, true);
1579
- else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR)
1580
- sfp_sm_link_check_los(sfp);
1581
- break;
1582
-
1583
- case SFP_S_WAIT_LOS:
1584
- if (event == SFP_E_TX_FAULT)
1585
- sfp_sm_fault(sfp, true);
1586
- else if (sfp_los_event_inactive(sfp, event))
1587
- sfp_sm_link_up(sfp);
1588
- break;
1589
-
1590
- case SFP_S_LINK_UP:
1591
- if (event == SFP_E_TX_FAULT) {
1592
- sfp_sm_link_down(sfp);
1593
- sfp_sm_fault(sfp, true);
1594
- } else if (sfp_los_event_active(sfp, event)) {
1595
- sfp_sm_link_down(sfp);
1596
- sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
1597
- }
1598
- break;
1599
-
1600
- case SFP_S_TX_FAULT:
1601
- if (event == SFP_E_TIMEOUT) {
1602
- sfp_module_tx_fault_reset(sfp);
1603
- sfp_sm_next(sfp, SFP_S_REINIT, T_INIT_JIFFIES);
1604
- }
1605
- break;
1606
-
1607
- case SFP_S_REINIT:
1608
- if (event == SFP_E_TIMEOUT && sfp->state & SFP_F_TX_FAULT) {
1609
- sfp_sm_fault(sfp, false);
1610
- } else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
1611
- dev_info(sfp->dev, "module transmit fault recovered\n");
1612
- sfp_sm_link_check_los(sfp);
1613
- }
1614
- break;
1615
-
1616
- case SFP_S_TX_DISABLE:
1617
- break;
1618
- }
2226
+ sfp_sm_device(sfp, event);
2227
+ sfp_sm_module(sfp, event);
2228
+ sfp_sm_main(sfp, event);
16192229
16202230 dev_dbg(sfp->dev, "SM: exit %s:%s:%s\n",
16212231 mod_state_to_str(sfp->sm_mod_state),
....@@ -1627,15 +2237,12 @@
16272237
16282238 static void sfp_attach(struct sfp *sfp)
16292239 {
1630
- sfp->attached = true;
1631
- if (sfp->state & SFP_F_PRESENT)
1632
- sfp_sm_event(sfp, SFP_E_INSERT);
2240
+ sfp_sm_event(sfp, SFP_E_DEV_ATTACH);
16332241 }
16342242
16352243 static void sfp_detach(struct sfp *sfp)
16362244 {
1637
- sfp->attached = false;
1638
- sfp_sm_event(sfp, SFP_E_REMOVE);
2245
+ sfp_sm_event(sfp, SFP_E_DEV_DETACH);
16392246 }
16402247
16412248 static void sfp_start(struct sfp *sfp)
....@@ -1722,7 +2329,10 @@
17222329 mutex_lock(&sfp->st_mutex);
17232330 state = sfp_get_state(sfp);
17242331 changed = state ^ sfp->state;
1725
- changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
2332
+ if (sfp->tx_fault_ignore)
2333
+ changed &= SFP_F_PRESENT | SFP_F_LOS;
2334
+ else
2335
+ changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
17262336
17272337 for (i = 0; i < GPIO_MAX; i++)
17282338 if (changed & BIT(i))
....@@ -1762,7 +2372,10 @@
17622372 struct sfp *sfp = container_of(work, struct sfp, poll.work);
17632373
17642374 sfp_check_state(sfp);
1765
- mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
2375
+
2376
+ if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) ||
2377
+ sfp->need_poll)
2378
+ mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
17662379 }
17672380
17682381 static struct sfp *sfp_alloc(struct device *dev)
....@@ -1774,11 +2387,14 @@
17742387 return ERR_PTR(-ENOMEM);
17752388
17762389 sfp->dev = dev;
2390
+ sfp->i2c_block_size = SFP_EEPROM_BLOCK_SIZE;
17772391
17782392 mutex_init(&sfp->sm_mutex);
17792393 mutex_init(&sfp->st_mutex);
17802394 INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
17812395 INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
2396
+
2397
+ sfp_hwmon_init(sfp);
17822398
17832399 return sfp;
17842400 }
....@@ -1786,6 +2402,8 @@
17862402 static void sfp_cleanup(void *data)
17872403 {
17882404 struct sfp *sfp = data;
2405
+
2406
+ sfp_hwmon_exit(sfp);
17892407
17902408 cancel_delayed_work_sync(&sfp->poll);
17912409 cancel_delayed_work_sync(&sfp->timeout);
....@@ -1801,9 +2419,10 @@
18012419 static int sfp_probe(struct platform_device *pdev)
18022420 {
18032421 const struct sff_data *sff;
2422
+ struct i2c_adapter *i2c;
2423
+ char *sfp_irq_name;
18042424 struct sfp *sfp;
1805
- bool poll = false;
1806
- int irq, err, i;
2425
+ int err, i;
18072426
18082427 sfp = sfp_alloc(&pdev->dev);
18092428 if (IS_ERR(sfp))
....@@ -1811,7 +2430,7 @@
18112430
18122431 platform_set_drvdata(pdev, sfp);
18132432
1814
- err = devm_add_action(sfp->dev, sfp_cleanup, sfp);
2433
+ err = devm_add_action_or_reset(sfp->dev, sfp_cleanup, sfp);
18152434 if (err < 0)
18162435 return err;
18172436
....@@ -1820,7 +2439,6 @@
18202439 if (pdev->dev.of_node) {
18212440 struct device_node *node = pdev->dev.of_node;
18222441 const struct of_device_id *id;
1823
- struct i2c_adapter *i2c;
18242442 struct device_node *np;
18252443
18262444 id = of_match_node(sfp_of_match, node);
....@@ -1837,14 +2455,32 @@
18372455
18382456 i2c = of_find_i2c_adapter_by_node(np);
18392457 of_node_put(np);
1840
- if (!i2c)
1841
- return -EPROBE_DEFER;
2458
+ } else if (has_acpi_companion(&pdev->dev)) {
2459
+ struct acpi_device *adev = ACPI_COMPANION(&pdev->dev);
2460
+ struct fwnode_handle *fw = acpi_fwnode_handle(adev);
2461
+ struct fwnode_reference_args args;
2462
+ struct acpi_handle *acpi_handle;
2463
+ int ret;
18422464
1843
- err = sfp_i2c_configure(sfp, i2c);
1844
- if (err < 0) {
1845
- i2c_put_adapter(i2c);
1846
- return err;
2465
+ ret = acpi_node_get_property_reference(fw, "i2c-bus", 0, &args);
2466
+ if (ret || !is_acpi_device_node(args.fwnode)) {
2467
+ dev_err(&pdev->dev, "missing 'i2c-bus' property\n");
2468
+ return -ENODEV;
18472469 }
2470
+
2471
+ acpi_handle = ACPI_HANDLE_FWNODE(args.fwnode);
2472
+ i2c = i2c_acpi_find_adapter_by_handle(acpi_handle);
2473
+ } else {
2474
+ return -EINVAL;
2475
+ }
2476
+
2477
+ if (!i2c)
2478
+ return -EPROBE_DEFER;
2479
+
2480
+ err = sfp_i2c_configure(sfp, i2c);
2481
+ if (err < 0) {
2482
+ i2c_put_adapter(i2c);
2483
+ return err;
18482484 }
18492485
18502486 for (i = 0; i < GPIO_MAX; i++)
....@@ -1880,28 +2516,43 @@
18802516 sfp->state |= SFP_F_RATE_SELECT;
18812517 sfp_set_state(sfp, sfp->state);
18822518 sfp_module_tx_disable(sfp);
2519
+ if (sfp->state & SFP_F_PRESENT) {
2520
+ rtnl_lock();
2521
+ sfp_sm_event(sfp, SFP_E_INSERT);
2522
+ rtnl_unlock();
2523
+ }
18832524
18842525 for (i = 0; i < GPIO_MAX; i++) {
18852526 if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
18862527 continue;
18872528
1888
- irq = gpiod_to_irq(sfp->gpio[i]);
1889
- if (irq < 0) {
1890
- irq = 0;
1891
- poll = true;
2529
+ sfp->gpio_irq[i] = gpiod_to_irq(sfp->gpio[i]);
2530
+ if (sfp->gpio_irq[i] < 0) {
2531
+ sfp->gpio_irq[i] = 0;
2532
+ sfp->need_poll = true;
18922533 continue;
18932534 }
18942535
1895
- err = devm_request_threaded_irq(sfp->dev, irq, NULL, sfp_irq,
2536
+ sfp_irq_name = devm_kasprintf(sfp->dev, GFP_KERNEL,
2537
+ "%s-%s", dev_name(sfp->dev),
2538
+ gpio_of_names[i]);
2539
+
2540
+ if (!sfp_irq_name)
2541
+ return -ENOMEM;
2542
+
2543
+ err = devm_request_threaded_irq(sfp->dev, sfp->gpio_irq[i],
2544
+ NULL, sfp_irq,
18962545 IRQF_ONESHOT |
18972546 IRQF_TRIGGER_RISING |
18982547 IRQF_TRIGGER_FALLING,
1899
- dev_name(sfp->dev), sfp);
1900
- if (err)
1901
- poll = true;
2548
+ sfp_irq_name, sfp);
2549
+ if (err) {
2550
+ sfp->gpio_irq[i] = 0;
2551
+ sfp->need_poll = true;
2552
+ }
19022553 }
19032554
1904
- if (poll)
2555
+ if (sfp->need_poll)
19052556 mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
19062557
19072558 /* We could have an issue in cases no Tx disable pin is available or
....@@ -1926,12 +2577,33 @@
19262577
19272578 sfp_unregister_socket(sfp->sfp_bus);
19282579
2580
+ rtnl_lock();
2581
+ sfp_sm_event(sfp, SFP_E_REMOVE);
2582
+ rtnl_unlock();
2583
+
19292584 return 0;
2585
+}
2586
+
2587
+static void sfp_shutdown(struct platform_device *pdev)
2588
+{
2589
+ struct sfp *sfp = platform_get_drvdata(pdev);
2590
+ int i;
2591
+
2592
+ for (i = 0; i < GPIO_MAX; i++) {
2593
+ if (!sfp->gpio_irq[i])
2594
+ continue;
2595
+
2596
+ devm_free_irq(sfp->dev, sfp->gpio_irq[i], sfp);
2597
+ }
2598
+
2599
+ cancel_delayed_work_sync(&sfp->poll);
2600
+ cancel_delayed_work_sync(&sfp->timeout);
19302601 }
19312602
19322603 static struct platform_driver sfp_driver = {
19332604 .probe = sfp_probe,
19342605 .remove = sfp_remove,
2606
+ .shutdown = sfp_shutdown,
19352607 .driver = {
19362608 .name = "sfp",
19372609 .of_match_table = sfp_of_match,