tools/intel_bios_reader: Dump out more information from the child device structure
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
diff --git a/tools/intel_bios.h b/tools/intel_bios.h
index c4632da..ac8c865 100644
--- a/tools/intel_bios.h
+++ b/tools/intel_bios.h
@@ -272,18 +272,55 @@
struct efp_child_device_config {
uint16_t handle;
uint16_t device_type;
- uint8_t skip1[12];
+ uint16_t device_class;
+ uint8_t i2c_speed;
+ uint8_t dp_onboard_redriver; /* 158 */
+ uint8_t dp_ondock_redriver; /* 158 */
+ uint8_t hdmi_level_shifter_value:4; /* 169 */
+ uint8_t hdmi_max_data_rate:4; /* 204 */
+ uint16_t dtd_buf_ptr; /* 161 */
+ uint8_t edidless_efp:1; /* 161 */
+ uint8_t compression_enable:1; /* 198 */
+ uint8_t compression_method:1; /* 198 */
+ uint8_t ganged_edp:1; /* 202 */
+ uint8_t skip0:4;
+ uint8_t compression_structure_index:4; /* 198 */
+ uint8_t skip1:4;
+ uint8_t slave_port; /* 202 */
+ uint8_t skip2;
uint8_t port;
- uint8_t skip2[2];
+ uint8_t i2c_pin; /* for add-in card */
+ uint8_t slave_addr; /* for add-in card */
uint8_t ddc_pin;
- uint8_t skip3[3];
- uint8_t docked_port;
+ uint16_t edid_ptr;
+ uint8_t dvo_config;
+ uint8_t efp_docked_port:1; /* 158 */
+ uint8_t lane_reversal:1; /* 184 */
+ uint8_t onboard_lspcon:1; /* 192 */
+ uint8_t iboost_enable:1; /* 196 */
+ uint8_t hpd_invert:1; /* BXT 196 */
+ uint8_t slip3:3;
uint8_t hdmi_compat:1;
- uint8_t conn_info:3;
- uint8_t skip4:4;
+ uint8_t dp_compat:1;
+ uint8_t tmds_compat:1;
+ uint8_t skip4:5;
uint8_t aux_chan;
uint8_t dongle_detect;
- uint8_t skip5[6];
+ uint8_t pipe_cap:2;
+ uint8_t sdvo_stall:1; /* 158 */
+ uint8_t hpd_status:2;
+ uint8_t integrated_encoder:1;
+ uint8_t skip5:2;
+ uint8_t dvo_wiring;
+ uint8_t mipi_bridge_type; /* 171 */
+ uint16_t device_class_ext;
+ uint8_t dvo_function;
+ uint8_t dp_usb_type_c:1; /* 195 */
+ uint8_t skip6:7;
+ uint8_t dp_usb_type_c_2x_gpio_index; /* 195 */
+ uint16_t dp_usb_type_c_2x_gpio_pin; /* 195 */
+ uint8_t iboost_dp:4; /* 196 */
+ uint8_t iboost_hdmi:4; /* 196 */
} __attribute__ ((packed));
struct bdb_general_definitions {
diff --git a/tools/intel_bios_reader.c b/tools/intel_bios_reader.c
index 588cc2c..3aefe2b 100644
--- a/tools/intel_bios_reader.c
+++ b/tools/intel_bios_reader.c
@@ -421,15 +421,72 @@
printf("\t\tDevice type: 0x%04x (%s)\n", efp->device_type,
child_device_type(efp->device_type));
dump_child_device_type_bits(efp->device_type);
- printf("\t\tPort: 0x%02x (%s)\n", efp->port,
- efp_port(efp->port));
+ printf("\t\tI2C speed: 0x%02x\n", efp->i2c_speed);
+ printf("\t\tDP onboard redriver: 0x%02x\n", efp->dp_onboard_redriver);
+ printf("\t\tDP ondock redriver: 0x%02x\n", efp->dp_ondock_redriver);
+ printf("\t\tHDMI max data rate: 0x%02x\n", efp->hdmi_max_data_rate);
+ printf("\t\tHDMI level shifter value: 0x%02x\n", efp->hdmi_level_shifter_value);
+ printf("\t\tOffset to DTD buffer for edidless EFP: 0x%02x\n", efp->dtd_buf_ptr);
+ printf("\t\tDual pipe ganged eDP: %s\n", YESNO(efp->ganged_edp));
+ printf("\t\tCompression method CPS: %s\n", YESNO(efp->compression_method));
+ printf("\t\tCompression enable: %s\n", YESNO(efp->compression_enable));
+ printf("\t\tEdidless EFP: %s\n", YESNO(efp->edidless_efp));
+ printf("\t\tCompression structure index: 0x%02x)\n", efp->compression_structure_index);
+ printf("\t\tSlave DDI port: 0x%02x (%s)\n", efp->slave_port, efp_port(efp->slave_port));
+ printf("\t\tAIM offset: %d\n", child->addin_offset);
+ printf("\t\tPort: 0x%02x (%s)\n", efp->port, efp_port(efp->port));
+ printf("\t\tAIM I2C pin: 0x%02x\n", efp->i2c_pin);
+ printf("\t\tAIM Slave address: 0x%02x\n", efp->slave_addr);
printf("\t\tDDC pin: 0x%02x\n", efp->ddc_pin);
- printf("\t\tDock port: 0x%02x (%s)\n", efp->docked_port,
- efp_port(efp->docked_port));
- printf("\t\tHDMI compatible? %s\n", efp->hdmi_compat ? "Yes" : "No");
- printf("\t\tInfo: %s\n", efp_conn(efp->conn_info));
+ printf("\t\tEDID buffer ptr: 0x%02x\n", efp->edid_ptr);
+ printf("\t\tDVO config: 0x%02x\n", efp->dvo_config);
+ printf("\t\tHPD sense invert: %s\n", YESNO(efp->hpd_invert));
+ printf("\t\tIboost enable: %s\n", YESNO(efp->iboost_enable));
+ printf("\t\tOnboard LSPCON: %s\n", YESNO(efp->onboard_lspcon));
+ printf("\t\tLane reversal: %s\n", YESNO(efp->lane_reversal));
+ printf("\t\tEFP routed through dock: %s\n", YESNO(efp->efp_docked_port));
+ printf("\t\tHDMI compatible? %s\n", YESNO(efp->hdmi_compat));
+ printf("\t\tDP compatible? %s\n", YESNO(efp->dp_compat));
+ printf("\t\tTMDS compatible? %s\n", YESNO(efp->tmds_compat));
printf("\t\tAux channel: 0x%02x\n", efp->aux_chan);
printf("\t\tDongle detect: 0x%02x\n", efp->dongle_detect);
+ printf("\t\tIntegrated encoder instead of SDVO: %s\n", YESNO(efp->integrated_encoder));
+ printf("\t\tHotplu connect status: 0x%02x\n", efp->hpd_status);
+ printf("\t\tSDVO stall signal available: %s\n", YESNO(efp->sdvo_stall));
+ printf("\t\tPipe capabilities: 0x%02x\n", efp->pipe_cap);
+ printf("\t\tDVO wiring: 0x%02x\n", efp->dvo_wiring);
+ printf("\t\tMIPI bridge type:");
+ switch (efp->mipi_bridge_type) {
+ case 1:
+ printf("ASUS\n");
+ break;
+ case 2:
+ printf("Toshiba\n");
+ break;
+ case 3:
+ printf("Renesas\n");
+ break;
+ default:
+ printf("(unknown value %d)\n", efp->mipi_bridge_type);
+ break;
+ }
+ printf("\t\tDevice class extendsion: 0x%02x\n", efp->device_class_ext);
+ printf("\t\tDVO function: 0x%02x\n", efp->dvo_function);
+ }
+
+ if (context->bdb->version >= 195) {
+ struct efp_child_device_config *efp =
+ (struct efp_child_device_config *)child;
+ printf("\t\tDP USB type C support: %s\n", YESNO(efp->dp_usb_type_c));
+ printf("\t\t2X DP GPIO index: 0x%02x\n", efp->dp_usb_type_c_2x_gpio_index);
+ printf("\t\t2X DP GPIO pin number: 0x%02x\n", efp->dp_usb_type_c_2x_gpio_pin);
+ }
+
+ if (context->bdb->version >= 196) {
+ struct efp_child_device_config *efp =
+ (struct efp_child_device_config *)child;
+ printf("\t\tIBoost level for HDMI: 0x%02x\n", efp->iboost_hdmi);
+ printf("\t\tIBoost level for DP/eDP: 0x%02x\n", efp->iboost_dp);
}
}