12
12
#include "gpio_defines.h"
13
13
#include "config_definition.h"
14
14
#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')
15
25
16
26
static bool verbose = false;
17
27
@@ -258,6 +268,227 @@ void print_subsys(struct gpu_subsys_serial* subsys)
258
268
printf (" Serial: %s\n" , subsys -> serial );
259
269
}
260
270
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
+
261
492
void print_vendor (enum gpu_vendor vendor ) {
262
493
switch (vendor ) {
263
494
case GPU_VENDOR_INITIALIZING :
@@ -310,35 +541,57 @@ void read_eeprom(const char * infilename)
310
541
if (verbose ) {
311
542
uint8_t * pcie ;
312
543
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);
315
550
printf (" Type: " );
316
551
switch (block_header -> block_type ) {
317
552
case GPUCFG_TYPE_UNINITIALIZED :
318
553
printf ("Uninitialized\n" );
319
554
break ;
320
555
case GPUCFG_TYPE_GPIO :
321
556
printf ("GPIO\n" );
557
+ print_gpio (block_header -> block_length , (struct gpu_cfg_gpio * )block_body );
322
558
break ;
323
559
case GPUCFG_TYPE_THERMAL_SENSOR :
324
560
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
+ }
325
566
break ;
326
567
case GPUCFG_TYPE_FAN :
327
568
fan = block_body ;
328
569
printf ("Fan\n" );
329
570
printf (" ID: %d\n" , fan -> idx );
330
571
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 );
336
577
break ;
337
578
case GPUCFG_TYPE_POWER :
579
+ power = block_body ;
338
580
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 );
339
587
break ;
340
588
case GPUCFG_TYPE_BATTERY :
589
+ battery = block_body ;
341
590
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 );
342
595
break ;
343
596
case GPUCFG_TYPE_PCIE :
344
597
printf ("PCI-E\n" );
@@ -360,9 +613,11 @@ void read_eeprom(const char * infilename)
360
613
break ;
361
614
case GPUCFG_TYPE_DPMUX :
362
615
printf ("DP-MUX\n" );
616
+ // TODO: Decode. Unused so far
363
617
break ;
364
618
case GPUCFG_TYPE_POWEREN :
365
619
printf ("POWER-EN\n" );
620
+ // TODO: Decode. Unused so far
366
621
break ;
367
622
case GPUCFG_TYPE_SUBSYS :
368
623
printf ("Subsystem\n" );
@@ -375,12 +630,18 @@ void read_eeprom(const char * infilename)
375
630
break ;
376
631
case GPUCFG_TYPE_PD :
377
632
printf ("PD\n" );
633
+ print_pd ((struct gpu_subsys_pd * ) block_body );
378
634
break ;
379
635
case GPUCFG_TYPE_GPUPWR :
380
636
printf ("GPU Power\n" );
637
+ // TODO: Decode. Unused so far
381
638
break ;
382
639
case GPUCFG_TYPE_CUSTOM_TEMP :
640
+ custom_temp = block_body ;
383
641
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 );
384
645
break ;
385
646
default :
386
647
printf ("Unknown\n" );
0 commit comments