Skip to content

Commit 36f8cce

Browse files
committed
Decode all fields that we currently use
Signed-off-by: Daniel Schaefer <[email protected]>
1 parent 9028b11 commit 36f8cce

File tree

2 files changed

+269
-8
lines changed

2 files changed

+269
-8
lines changed

gpu_cfg_generator.c

+268-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
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

1626
static 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+
261492
void 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");

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ The application will generate a `.bin` file in the same directory with the EEPRO
3131

3232
## Different file name
3333

34-
By default the generated fiel is called `eeprom.bin`, here's how to use a different one:
34+
By default the generated file is called `eeprom.bin`, here's how to use a different one:
3535

3636
```
3737
./gpu_cfg_gen -d -s FRAKMBCP81331ASSY0 -o ssd.bin

0 commit comments

Comments
 (0)