Skip to content

Commit afc3d2b

Browse files
Figo-zhangRuss Weight
authored andcommitted
fpga: hwmon: add sensor support for the N6010 card
Add sensor support for N6010 FPGA Card, including temperature, voltage, and current data.
1 parent ea01d8d commit afc3d2b

1 file changed

Lines changed: 230 additions & 0 deletions

File tree

drivers/hwmon/intel-m10-bmc-hwmon.c

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,232 @@ static const struct m10bmc_hwmon_board_data n5010bmc_hwmon_bdata = {
340340
.hinfo = n5010bmc_hinfo,
341341
};
342342

343+
static const struct m10bmc_sdata n6010bmc_temp_tbl[] = {
344+
{ 0x444, 0x448, 0x44c, 0x0, 0x0, 500, "FPGA E-TILE Temperature #1" },
345+
{ 0x450, 0x454, 0x458, 0x0, 0x0, 500, "FPGA E-TILE Temperature #2" },
346+
{ 0x45c, 0x460, 0x464, 0x0, 0x0, 500, "FPGA E-TILE Temperature #3" },
347+
{ 0x468, 0x46c, 0x470, 0x0, 0x0, 500, "FPGA E-TILE Temperature #4" },
348+
{ 0x474, 0x478, 0x47c, 0x0, 0x0, 500, "FPGA P-TILE Temperature" },
349+
{ 0x484, 0x488, 0x48c, 0x0, 0x0, 500, "FPGA FABRIC Digital Temperature#1" },
350+
{ 0x490, 0x494, 0x498, 0x0, 0x0, 500, "FPGA FABRIC Digital Temperature#2" },
351+
{ 0x49c, 0x4a0, 0x4a4, 0x0, 0x0, 500, "FPGA FABRIC Digital Temperature#3" },
352+
{ 0x4a8, 0x4ac, 0x4b0, 0x0, 0x0, 500, "FPGA FABRIC Digital Temperature#4" },
353+
{ 0x4b4, 0x4b8, 0x4bc, 0x0, 0x0, 500, "FPGA FABRIC Digital Temperature#5" },
354+
{ 0x4c0, 0x4c4, 0x4c8, 0x0, 0x0, 500, "FPGA FABRIC Remote Digital Temperature#1" },
355+
{ 0x4cc, 0x4d0, 0x4d4, 0x0, 0x0, 500, "FPGA FABRIC Remote Digital Temperature#2" },
356+
{ 0x4d8, 0x4dc, 0x4e0, 0x0, 0x0, 500, "FPGA FABRIC Remote Digital Temperature#3" },
357+
{ 0x4e4, 0x4e8, 0x4ec, 0x0, 0x0, 500, "FPGA FABRIC Remote Digital Temperature#4" },
358+
{ 0x4f0, 0x4f4, 0x4f8, 0x0, 0x0, 500, "Board Top Near FPGA Temperature" },
359+
{ 0x4fc, 0x500, 0x504, 0x52c, 0x0, 500, "Board Bottom Near CVL Temperature" },
360+
{ 0x508, 0x50c, 0x510, 0x52c, 0x0, 500, "Board Top East Near VRs Temperature" },
361+
{ 0x51c, 0x518, 0x51c, 0x52c, 0x0, 500, "Columbiaville Die Temperature" },
362+
{ 0x520, 0x524, 0x528, 0x52c, 0x0, 500, "Board Rear Side Temperature" },
363+
{ 0x530, 0x534, 0x538, 0x52c, 0x0, 500, "Board Front Side Temperature" },
364+
{ 0x53c, 0x540, 0x544, 0x0, 0x0, 500, "QSFP1 Temperature" },
365+
{ 0x548, 0x54c, 0x550, 0x0, 0x0, 500, "QSFP2 Temperature" },
366+
{ 0x554, 0x0, 0x0, 0x0, 0x0, 500, "FPGA Core Voltage Phase 0 VR Temperature" },
367+
{ 0x560, 0x0, 0x0, 0x0, 0x0, 500, "FPGA Core Voltage Phase 1 VR Temperature" },
368+
{ 0x56c, 0x0, 0x0, 0x0, 0x0, 500, "FPGA Core Voltage Phase 2 VR Temperature" },
369+
{ 0x578, 0x0, 0x0, 0x0, 0x0, 500, "FPGA Core Voltage VR Controller Temperature" },
370+
{ 0x584, 0x0, 0x0, 0x0, 0x0, 500, "FPGA VCCH VR Temperature" },
371+
{ 0x590, 0x0, 0x0, 0x0, 0x0, 500, "FPGA VCC_1V2 VR Temperature" },
372+
{ 0x59c, 0x0, 0x0, 0x0, 0x0, 500, "FPGA VCCH, VCC_1V2 VR Controller Temperature" },
373+
{ 0x5a8, 0x0, 0x0, 0x0, 0x0, 500, "3V3 VR Temperature" },
374+
{ 0x5b4, 0x5b8, 0x5bc, 0x0, 0x0, 500, "CVL Core Voltage VR Temperature" },
375+
{ 0x5c4, 0x5c8, 0x5cc, 0x5c0, 0x0, 500, "FPGA P-Tile Temperature [Remote]" },
376+
{ 0x5d0, 0x5d4, 0x5d8, 0x5c0, 0x0, 500, "FPGA E-Tile Temperature [Remote]" },
377+
{ 0x5dc, 0x5e0, 0x5e4, 0x5c0, 0x0, 500, "FPGA SDM Temperature [Remote]" },
378+
{ 0x5e8, 0x5ec, 0x5f0, 0x5c0, 0x0, 500, "FPGA Corner Temperature [Remote]" },
379+
};
380+
381+
static const struct m10bmc_sdata n6010bmc_in_tbl[] = {
382+
{ 0x5f4, 0x0, 0x0, 0x0, 0x0, 1, "Inlet 12V PCIe Rail Voltage" },
383+
{ 0x60c, 0x0, 0x0, 0x0, 0x0, 1, "Inlet 12V Aux Rail Voltage" },
384+
{ 0x624, 0x0, 0x0, 0x0, 0x0, 1, "Inlet 3V3 PCIe Rail Voltage" },
385+
{ 0x63c, 0x0, 0x0, 0x0, 0x0, 1, "FPGA Core Voltage Rail Voltage" },
386+
{ 0x644, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCCH Rail Voltage" },
387+
{ 0x64c, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCC_1V2 Rail Voltage" },
388+
{ 0x654, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCCH_GXER_1V1, VCCA_1V8 Voltage" },
389+
{ 0x664, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCCIO_1V2 Voltage" },
390+
{ 0x674, 0x0, 0x0, 0x0, 0x0, 1, "CVL Non Core Rails Inlet Voltage" },
391+
{ 0x684, 0x0, 0x0, 0x0, 0x0, 1, "MAX10 & Board CLK PWR 3V3 Inlet Voltage" },
392+
{ 0x694, 0x0, 0x0, 0x0, 0x0, 1, "CVL Core Voltage Rail Voltage" },
393+
{ 0x6ac, 0x0, 0x0, 0x0, 0x0, 1, "Board 3V3 VR Voltage" },
394+
{ 0x6b4, 0x0, 0x0, 0x0, 0x0, 1, "QSFP 3V3 Rail Voltage" },
395+
{ 0x6c4, 0x0, 0x0, 0x0, 0x0, 1, "QSFP (Primary) Supply Rail Voltage" },
396+
{ 0x6c8, 0x0, 0x0, 0x0, 0x0, 1, "QSFP (Secondary) Supply Rail Voltage" },
397+
{ 0x6cc, 0x0, 0x0, 0x0, 0x0, 1, "VCCCLK_GXER_2V5 Voltage" },
398+
{ 0x6d0, 0x0, 0x0, 0x0, 0x0, 1, "AVDDH_1V1_CVL Voltage" },
399+
{ 0x6d4, 0x0, 0x0, 0x0, 0x0, 1, "VDDH_1V8_CVL Voltage" },
400+
{ 0x6d8, 0x0, 0x0, 0x0, 0x0, 1, "VCCA_PLL Voltage" },
401+
{ 0x6e0, 0x0, 0x0, 0x0, 0x0, 1, "VCCRT_GXER_0V9 Voltage" },
402+
{ 0x6e8, 0x0, 0x0, 0x0, 0x0, 1, "VCCRT_GXEL_0V9 Voltage" },
403+
{ 0x6f0, 0x0, 0x0, 0x0, 0x0, 1, "VCCH_GXPL_1V8 Voltage" },
404+
{ 0x6f4, 0x0, 0x0, 0x0, 0x0, 1, "VCCPT_1V8 Voltage" },
405+
{ 0x6fc, 0x0, 0x0, 0x0, 0x0, 1, "VCC_3V3_M10 Voltage" },
406+
{ 0x700, 0x0, 0x0, 0x0, 0x0, 1, "VCC_1V8_M10 Voltage" },
407+
{ 0x704, 0x0, 0x0, 0x0, 0x0, 1, "VCC_1V2_EMIF1_2_3 Voltage" },
408+
{ 0x70c, 0x0, 0x0, 0x0, 0x0, 1, "VCC_1V2_EMIF4_5 Voltage" },
409+
{ 0x714, 0x0, 0x0, 0x0, 0x0, 1, "VCCA_1V8 Voltage" },
410+
{ 0x718, 0x0, 0x0, 0x0, 0x0, 1, "VCCH_GXER_1V1 Voltage" },
411+
{ 0x71c, 0x0, 0x0, 0x0, 0x0, 1, "AVDD_ETH_0V9_CVL Voltage" },
412+
{ 0x720, 0x0, 0x0, 0x0, 0x0, 1, "AVDD_PCIE_0V9_CVL Voltage" },
413+
};
414+
415+
static const struct m10bmc_sdata n6010bmc_curr_tbl[] = {
416+
{ 0x600, 0x604, 0x608, 0x0, 0x0, 1, "Inlet 12V PCIe Rail Current" },
417+
{ 0x618, 0x61c, 0x620, 0x0, 0x0, 1, "Inlet 12V Aux Rail Current" },
418+
{ 0x630, 0x634, 0x638, 0x0, 0x0, 1, "Inlet 3V3 PCIe Rail Current" },
419+
{ 0x640, 0x0, 0x0, 0x0, 0x0, 1, "FPGA Core Voltage Rail Current" },
420+
{ 0x648, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCCH Rail Current" },
421+
{ 0x650, 0x0, 0x0, 0x0, 0x0, 1, "FPGA VCC_1V2 Rail Current" },
422+
{ 0x658, 0x65c, 0x660, 0x0, 0x0, 1, "FPGA VCCH_GXER_1V1, VCCA_1V8 Current" },
423+
{ 0x668, 0x66c, 0x670, 0x0, 0x0, 1, "FPGA VCCIO_1V2 Current" },
424+
{ 0x678, 0x67c, 0x680, 0x0, 0x0, 1, "CVL Non Core Rails Inlet Current" },
425+
{ 0x688, 0x68c, 0x680, 0x0, 0x0, 1, "MAX10 & Board CLK PWR 3V3 Inlet Current" },
426+
{ 0x690, 0x0, 0x0, 0x0, 0x0, 1, "CVL Core Voltage Rail Current" },
427+
{ 0x6b0, 0x0, 0x0, 0x0, 0x0, 1, "Board 3V3 VR Current" },
428+
{ 0x6b8, 0x6bc, 0x670, 0x0, 0x0, 1, "QSFP 3V3 Rail Current" },
429+
};
430+
431+
static const struct m10bmc_sdata n6010bmc_power_tbl[] = {
432+
{ 0x724, 0x0, 0x0, 0x0, 0x0, 1000, "Board Power" },
433+
};
434+
435+
static const struct hwmon_channel_info *n6010bmc_hinfo[] = {
436+
HWMON_CHANNEL_INFO(temp,
437+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
438+
HWMON_T_LABEL,
439+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
440+
HWMON_T_LABEL,
441+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
442+
HWMON_T_LABEL,
443+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
444+
HWMON_T_LABEL,
445+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
446+
HWMON_T_LABEL,
447+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
448+
HWMON_T_LABEL,
449+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
450+
HWMON_T_LABEL,
451+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
452+
HWMON_T_LABEL,
453+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
454+
HWMON_T_LABEL,
455+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
456+
HWMON_T_LABEL,
457+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
458+
HWMON_T_LABEL,
459+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
460+
HWMON_T_LABEL,
461+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
462+
HWMON_T_LABEL,
463+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
464+
HWMON_T_LABEL,
465+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
466+
HWMON_T_LABEL,
467+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
468+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
469+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
470+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
471+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
472+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
473+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
474+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
475+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
476+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
477+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
478+
HWMON_T_LABEL,
479+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
480+
HWMON_T_LABEL,
481+
HWMON_T_INPUT | HWMON_T_LABEL,
482+
HWMON_T_INPUT | HWMON_T_LABEL,
483+
HWMON_T_INPUT | HWMON_T_LABEL,
484+
HWMON_T_INPUT | HWMON_T_LABEL,
485+
HWMON_T_INPUT | HWMON_T_LABEL,
486+
HWMON_T_INPUT | HWMON_T_LABEL,
487+
HWMON_T_INPUT | HWMON_T_LABEL,
488+
HWMON_T_INPUT | HWMON_T_LABEL,
489+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT |
490+
HWMON_T_LABEL,
491+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
492+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
493+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
494+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
495+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
496+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL,
497+
HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_MAX_HYST |
498+
HWMON_T_CRIT | HWMON_T_CRIT_HYST | HWMON_T_LABEL),
499+
HWMON_CHANNEL_INFO(in,
500+
HWMON_I_INPUT | HWMON_I_LABEL,
501+
HWMON_I_INPUT | HWMON_I_LABEL,
502+
HWMON_I_INPUT | HWMON_I_LABEL,
503+
HWMON_I_INPUT | HWMON_I_LABEL,
504+
HWMON_I_INPUT | HWMON_I_LABEL,
505+
HWMON_I_INPUT | HWMON_I_LABEL,
506+
HWMON_I_INPUT | HWMON_I_LABEL,
507+
HWMON_I_INPUT | HWMON_I_LABEL,
508+
HWMON_I_INPUT | HWMON_I_LABEL,
509+
HWMON_I_INPUT | HWMON_I_LABEL,
510+
HWMON_I_INPUT | HWMON_I_LABEL,
511+
HWMON_I_INPUT | HWMON_I_LABEL,
512+
HWMON_I_INPUT | HWMON_I_LABEL,
513+
HWMON_I_INPUT | HWMON_I_LABEL,
514+
HWMON_I_INPUT | HWMON_I_LABEL,
515+
HWMON_I_INPUT | HWMON_I_LABEL,
516+
HWMON_I_INPUT | HWMON_I_LABEL,
517+
HWMON_I_INPUT | HWMON_I_LABEL,
518+
HWMON_I_INPUT | HWMON_I_LABEL,
519+
HWMON_I_INPUT | HWMON_I_LABEL,
520+
HWMON_I_INPUT | HWMON_I_LABEL,
521+
HWMON_I_INPUT | HWMON_I_LABEL,
522+
HWMON_I_INPUT | HWMON_I_LABEL,
523+
HWMON_I_INPUT | HWMON_I_LABEL,
524+
HWMON_I_INPUT | HWMON_I_LABEL,
525+
HWMON_I_INPUT | HWMON_I_LABEL,
526+
HWMON_I_INPUT | HWMON_I_LABEL,
527+
HWMON_I_INPUT | HWMON_I_LABEL,
528+
HWMON_I_INPUT | HWMON_I_LABEL,
529+
HWMON_I_INPUT | HWMON_I_LABEL,
530+
HWMON_I_INPUT | HWMON_I_LABEL),
531+
HWMON_CHANNEL_INFO(curr,
532+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
533+
HWMON_C_LABEL,
534+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
535+
HWMON_C_LABEL,
536+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
537+
HWMON_C_LABEL,
538+
HWMON_C_INPUT | HWMON_C_LABEL,
539+
HWMON_C_INPUT | HWMON_C_LABEL,
540+
HWMON_C_INPUT | HWMON_C_LABEL,
541+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
542+
HWMON_C_LABEL,
543+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
544+
HWMON_C_LABEL,
545+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
546+
HWMON_C_LABEL,
547+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
548+
HWMON_C_LABEL,
549+
HWMON_C_INPUT | HWMON_C_LABEL,
550+
HWMON_C_INPUT | HWMON_C_LABEL,
551+
HWMON_C_INPUT | HWMON_C_MAX | HWMON_C_CRIT |
552+
HWMON_C_LABEL),
553+
HWMON_CHANNEL_INFO(power,
554+
HWMON_P_INPUT | HWMON_P_LABEL),
555+
NULL
556+
};
557+
558+
static const struct m10bmc_hwmon_board_data n6010bmc_hwmon_bdata = {
559+
.tables = {
560+
[hwmon_temp] = n6010bmc_temp_tbl,
561+
[hwmon_in] = n6010bmc_in_tbl,
562+
[hwmon_curr] = n6010bmc_curr_tbl,
563+
[hwmon_power] = n6010bmc_power_tbl,
564+
},
565+
566+
.hinfo = n6010bmc_hinfo,
567+
};
568+
343569
static umode_t
344570
m10bmc_hwmon_is_visible(const void *data, enum hwmon_sensor_types type,
345571
u32 attr, int channel)
@@ -554,6 +780,10 @@ static const struct platform_device_id intel_m10bmc_hwmon_ids[] = {
554780
.name = "n5010bmc-hwmon",
555781
.driver_data = (unsigned long)&n5010bmc_hwmon_bdata,
556782
},
783+
{
784+
.name = "n6010bmc-hwmon",
785+
.driver_data = (unsigned long)&n6010bmc_hwmon_bdata,
786+
},
557787
{ }
558788
};
559789

0 commit comments

Comments
 (0)