1212#include "gpio_defines.h"
1313#include "config_definition.h"
1414#define C_TO_K (temp_c ) ((temp_c) + 273)
15+ #define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
16+ #define BYTE_TO_BINARY (byte ) \
17+ ((byte) & 0x80 ? '1' : '0'), \
18+ ((byte) & 0x40 ? '1' : '0'), \
19+ ((byte) & 0x20 ? '1' : '0'), \
20+ ((byte) & 0x10 ? '1' : '0'), \
21+ ((byte) & 0x08 ? '1' : '0'), \
22+ ((byte) & 0x04 ? '1' : '0'), \
23+ ((byte) & 0x02 ? '1' : '0'), \
24+ ((byte) & 0x01 ? '1' : '0')
1525
1626static bool verbose = false;
1727
@@ -258,6 +268,227 @@ void print_subsys(struct gpu_subsys_serial* subsys)
258268 printf (" Serial: %s\n" , subsys -> serial );
259269}
260270
271+ void print_gpio (uint8_t block_length , struct gpu_cfg_gpio * block_body ) {
272+ uint8_t blocks = block_length / sizeof (struct gpu_cfg_gpio );
273+ struct gpu_cfg_gpio * block ;
274+ for (int i = 0 ; i < blocks ; i ++ ) {
275+ block = & block_body [i ];
276+ printf (" GPIO %d\n" , block -> gpio );
277+ printf (" Name: " );
278+ switch (block -> gpio ) {
279+ case GPU_1G1_GPIO0_EC :
280+ printf ("GPU_1G1_GPIO0_EC\n" );
281+ break ;
282+ case GPU_1H1_GPIO1_EC :
283+ printf ("GPU_1H1_GPIO1_EC\n" );
284+ break ;
285+ case GPU_2A2_GPIO2_EC :
286+ printf ("GPU_2A2_GPIO2_EC\n" );
287+ break ;
288+ case GPU_2L7_GPIO3_EC :
289+ printf ("GPU_2L7_GPIO3_EC\n" );
290+ break ;
291+ case GPU_2L5_TH_OVERTn :
292+ printf ("GPU_2L5_TH_OVERTn\n" );
293+ break ;
294+ case GPU_1F2_I2C_S5_INT :
295+ printf ("GPU_1F2_I2C_S5_INT\n" );
296+ break ;
297+ case GPU_1L1_DGPU_PWROK :
298+ printf ("GPU_1L1_DGPU_PWROK\n" );
299+ break ;
300+ case GPU_1C3_ALW_CLK :
301+ printf ("GPU_1C3_ALW_CLK\n" );
302+ break ;
303+ case GPU_1D3_ALW_DAT :
304+ printf ("GPU_1D3_ALW_DAT\n" );
305+ break ;
306+ case GPU_1F3_MUX1 :
307+ printf ("GPU_1F3_MUX1\n" );
308+ break ;
309+ case GPU_1G3_MUX2 :
310+ printf ("GPU_1G3_MUX2\n" );
311+ break ;
312+ case GPU_2B5_ALERTn :
313+ printf ("GPU_2B5_ALERTn\n" );
314+ break ;
315+ case GPU_EDP_MUX_SEL :
316+ printf ("GPU_EDP_MUX_SEL\n" );
317+ break ;
318+ case GPU_ECPWM_EN :
319+ printf ("GPU_ECPWM_EN\n" );
320+ break ;
321+ case GPU_PCIE_MUX_SEL :
322+ printf ("GPU_PCIE_MUX_SEL\n" );
323+ break ;
324+ case GPU_VSYS_EN :
325+ printf ("GPU_VSYS_EN\n" );
326+ break ;
327+ case GPU_VADP_EN :
328+ printf ("GPU_VADP_EN\n" );
329+ break ;
330+ case GPU_FAN_EN :
331+ printf ("GPU_FAN_EN\n" );
332+ break ;
333+ case GPU_3V_5V_EN :
334+ printf ("GPU_3V_5V_EN\n" );
335+ break ;
336+ default :
337+ printf ("Unknown\n" );
338+ break ;
339+ }
340+ printf (" Function: " );
341+ switch (block -> function ) {
342+ case GPIO_FUNC_HIGH :
343+ printf ("High\n" );
344+ break ;
345+ case GPIO_FUNC_TEMPFAULT :
346+ printf ("Tempfault\n" );
347+ break ;
348+ case GPIO_FUNC_ACDC :
349+ printf ("ACDC\n" );
350+ break ;
351+ case GPIO_FUNC_HPD :
352+ printf ("HPD\n" );
353+ break ;
354+ case GPIO_FUNC_PD_INT :
355+ printf ("PD_INT\n" );
356+ break ;
357+ case GPIO_FUNC_SSD1_POWER :
358+ printf ("SSD1_POWER\n" );
359+ break ;
360+ case GPIO_FUNC_SSD2_POWER :
361+ printf ("SSD2_POWER\n" );
362+ break ;
363+ case GPIO_FUNC_EC_PWM_EN :
364+ printf ("EC_PWM_EN\n" );
365+ break ;
366+ case GPIO_FUNC_EDP_MUX_SEL :
367+ printf ("EDP_MUX_SEL\n" );
368+ break ;
369+ case GPIO_FUNC_VSYS_EN :
370+ printf ("VSYS_EN\n" );
371+ break ;
372+ case GPIO_FUNC_VADP_EN :
373+ printf ("VADP_EN\n" );
374+ break ;
375+ case GPIO_FUNC_GPU_PWR :
376+ printf ("GPU Power\n" );
377+ break ;
378+ default :
379+ printf ("Unknown\n" );
380+ break ;
381+ }
382+ printf (" Flags: (" );
383+ if ((block -> flags & GPIO_INPUT ) != 0 ) {
384+ printf ("Input," );
385+ }
386+ if ((block -> flags & GPIO_OUTPUT ) != 0 ) {
387+ printf ("Output," );
388+ }
389+ if ((block -> flags & GPIO_OUTPUT_INIT_LOW ) != 0 ) {
390+ printf ("Low," );
391+ }
392+ if ((block -> flags & GPIO_OUTPUT_INIT_HIGH ) != 0 ) {
393+ printf ("High," );
394+ }
395+ if ((block -> flags & GPIO_OUTPUT_INIT_LOGICAL ) != 0 ) {
396+ printf ("Logical," );
397+ }
398+ printf (")\n" );
399+ // printf(""BYTE_TO_BINARY_PATTERN BYTE_TO_BINARY_PATTERN BYTE_TO_BINARY_PATTERN BYTE_TO_BINARY_PATTERN"\n",
400+ // BYTE_TO_BINARY(block->flags),
401+ // BYTE_TO_BINARY((block->flags >> 8) & 0xFF),
402+ // BYTE_TO_BINARY((block->flags >> 16) & 0xFF),
403+ // BYTE_TO_BINARY((block->flags >> 24) & 0xFF)
404+ // );
405+
406+ printf (" Power Domain:" );
407+ switch (block -> power_domain ) {
408+ case POWER_G3 :
409+ printf ("G3\n" );
410+ break ;
411+ case POWER_S5 :
412+ printf ("S5\n" );
413+ break ;
414+ case POWER_S4 :
415+ printf ("S4\n" );
416+ break ;
417+ case POWER_S3 :
418+ printf ("S3\n" );
419+ break ;
420+ case POWER_S0 :
421+ printf ("S0\n" );
422+ break ;
423+ #if CONFIG_AP_PWRSEQ_S0IX
424+ case POWER_S0ix :
425+ printf ("S0ix\n" );
426+ break ;
427+ #endif
428+ case POWER_G3S5 :
429+ printf ("G3S5\n" );
430+ break ;
431+ case POWER_S5S3 :
432+ printf ("S5S3\n" );
433+ break ;
434+ case POWER_S3S0 :
435+ printf ("S3S0\n" );
436+ break ;
437+ case POWER_S0S3 :
438+ printf ("S0S3\n" );
439+ break ;
440+ case POWER_S3S5 :
441+ printf ("S3S5\n" );
442+ break ;
443+ case POWER_S5G3 :
444+ printf ("S5G3\n" );
445+ break ;
446+ case POWER_S3S4 :
447+ printf ("S3S4\n" );
448+ break ;
449+ case POWER_S4S3 :
450+ printf ("S4S3\n" );
451+ break ;
452+ case POWER_S4S5 :
453+ printf ("S4S5\n" );
454+ break ;
455+ case POWER_S5S4 :
456+ printf ("S5S4\n" );
457+ break ;
458+ #if CONFIG_AP_PWRSEQ_S0IX
459+ case POWER_S0ixS0 :
460+ printf ("S0ixS0\n" );
461+ break ;
462+ case POWER_S0S0ix :
463+ printf ("S0S0ix\n" );
464+ break ;
465+ #endif
466+ default :
467+ printf ("Unknown\n" );
468+ break ;
469+ }
470+ }
471+ }
472+
473+ void print_pd (struct gpu_subsys_pd * pd ) {
474+ printf (" Type: " );
475+ switch (pd -> gpu_pd_type ) {
476+ case PD_TYPE_ETRON_EJ889I :
477+ printf ("EJ899I\n" );
478+ break ;
479+ default :
480+ printf ("Invalid (%d)\n" , pd -> gpu_pd_type );
481+ break ;
482+ }
483+ printf (" Address: %d\n" , pd -> address );
484+ printf (" Flags: %d\n" , pd -> flags );
485+ printf (" PDO: %d\n" , pd -> pdo );
486+ printf (" RDO: %d\n" , pd -> rdo );
487+ printf (" Power Domain:%d\n" , pd -> power_domain );
488+ printf (" GPIO HPD: %d\n" , pd -> gpio_hpd );
489+ printf (" GPIO INT: %d\n" , pd -> gpio_interrupt );
490+ }
491+
261492void print_vendor (enum gpu_vendor vendor ) {
262493 switch (vendor ) {
263494 case GPU_VENDOR_INITIALIZING :
@@ -310,35 +541,57 @@ void read_eeprom(const char * infilename)
310541 if (verbose ) {
311542 uint8_t * pcie ;
312543 struct gpu_cfg_fan * fan ;
313- printf ("Block %d\n" , n );
314- printf (" Length: %d\n" , block_header -> block_length );
544+ struct gpu_cfg_power * power ;
545+ struct gpu_cfg_battery * battery ;
546+ struct gpu_cfg_custom_temp * custom_temp ;
547+ printf ("---\n" );
548+ // printf("Block %d\n", n);
549+ // printf(" Length: %d\n", block_header->block_length);
315550 printf (" Type: " );
316551 switch (block_header -> block_type ) {
317552 case GPUCFG_TYPE_UNINITIALIZED :
318553 printf ("Uninitialized\n" );
319554 break ;
320555 case GPUCFG_TYPE_GPIO :
321556 printf ("GPIO\n" );
557+ print_gpio (block_header -> block_length , (struct gpu_cfg_gpio * )block_body );
322558 break ;
323559 case GPUCFG_TYPE_THERMAL_SENSOR :
324560 printf ("Thermal Sensor\n" );
561+ if (* ((enum gpu_thermal_sensor * )block_body ) == GPU_THERM_F75303 ) {
562+ printf (" F75303\n" );
563+ } else {
564+ printf (" Invalid\n" );
565+ }
325566 break ;
326567 case GPUCFG_TYPE_FAN :
327568 fan = block_body ;
328569 printf ("Fan\n" );
329570 printf (" ID: %d\n" , fan -> idx );
330571 printf (" Flags: %d\n" , fan -> flags );
331- printf (" Min RPM: %d\n" , fan -> min_rpm );
332- printf (" Min Temp: %d\n" , fan -> min_temp );
333- printf (" Start RPM: %d\n" , fan -> start_rpm );
334- printf (" Max RPM: %d\n" , fan -> max_rpm );
335- printf (" Max Temp: %d\n" , fan -> max_temp );
572+ printf (" Min RPM: %d\n" , fan -> min_rpm );
573+ printf (" Min Temp: %d\n" , fan -> min_temp );
574+ printf (" Start RPM: %d\n" , fan -> start_rpm );
575+ printf (" Max RPM: %d\n" , fan -> max_rpm );
576+ printf (" Max Temp: %d\n" , fan -> max_temp );
336577 break ;
337578 case GPUCFG_TYPE_POWER :
579+ power = block_body ;
338580 printf ("Power\n" );
581+ printf (" Device ID: %d\n" , power -> device_idx );
582+ printf (" Battery: %d\n" , power -> battery_power );
583+ printf (" Average: %d\n" , power -> average_power );
584+ printf (" Long Term: %d\n" , power -> long_term_power );
585+ printf (" Short Term: %d\n" , power -> short_term_power );
586+ printf (" Peak: %d\n" , power -> peak_power );
339587 break ;
340588 case GPUCFG_TYPE_BATTERY :
589+ battery = block_body ;
341590 printf ("Battery\n" );
591+ printf (" Max Current: %d\n" , battery -> max_current );
592+ printf (" Max Voltage: %dmV\n" , battery -> max_mv );
593+ printf (" Min Voltage: %dmV\n" , battery -> min_mv );
594+ printf (" Max Charge I:%d\n" , battery -> max_charge_current );
342595 break ;
343596 case GPUCFG_TYPE_PCIE :
344597 printf ("PCI-E\n" );
@@ -360,9 +613,11 @@ void read_eeprom(const char * infilename)
360613 break ;
361614 case GPUCFG_TYPE_DPMUX :
362615 printf ("DP-MUX\n" );
616+ // TODO: Decode. Unused so far
363617 break ;
364618 case GPUCFG_TYPE_POWEREN :
365619 printf ("POWER-EN\n" );
620+ // TODO: Decode. Unused so far
366621 break ;
367622 case GPUCFG_TYPE_SUBSYS :
368623 printf ("Subsystem\n" );
@@ -375,12 +630,18 @@ void read_eeprom(const char * infilename)
375630 break ;
376631 case GPUCFG_TYPE_PD :
377632 printf ("PD\n" );
633+ print_pd ((struct gpu_subsys_pd * ) block_body );
378634 break ;
379635 case GPUCFG_TYPE_GPUPWR :
380636 printf ("GPU Power\n" );
637+ // TODO: Decode. Unused so far
381638 break ;
382639 case GPUCFG_TYPE_CUSTOM_TEMP :
640+ custom_temp = block_body ;
383641 printf ("Custom Temp\n" );
642+ printf (" ID: %d\n" , custom_temp -> idx );
643+ printf (" Temp Fan Off:%d\n" , custom_temp -> temp_fan_off );
644+ printf (" Temp Fan Max:%d\n" , custom_temp -> temp_fan_max );
384645 break ;
385646 default :
386647 printf ("Unknown\n" );
0 commit comments