intel_extreme: for gen9.5 added new portF to DDI scan. add ID dump in kerneldriver.

This commit is contained in:
Rudolf Cornelissen
2021-12-05 12:47:05 +00:00
parent 77b2dd17df
commit d60c7e010c
4 changed files with 16 additions and 4 deletions
@@ -225,7 +225,8 @@ enum port_index {
INTEL_PORT_B,
INTEL_PORT_C,
INTEL_PORT_D,
INTEL_PORT_E
INTEL_PORT_E,
INTEL_PORT_F
};
enum pch_info {
@@ -726,6 +727,7 @@ struct intel_free_graphics_memory {
#define DDI_BUF_CTL_C (0x4200 | REGS_NORTH_PIPE_AND_PORT)
#define DDI_BUF_CTL_D (0x4300 | REGS_NORTH_PIPE_AND_PORT)
#define DDI_BUF_CTL_E (0x4400 | REGS_NORTH_PIPE_AND_PORT)
#define DDI_BUF_CTL_F (0x4500 | REGS_NORTH_PIPE_AND_PORT)
#define DDI_BUF_CTL_ENABLE (1 << 31)
#define DDI_BUF_TRANS_SELECT(n) ((n) << 24)
#define DDI_BUF_EMP_MASK (0xf << 24)
@@ -748,6 +750,7 @@ struct intel_free_graphics_memory {
#define PIPE_DDI_PORT_C 2
#define PIPE_DDI_PORT_D 3
#define PIPE_DDI_PORT_E 4
#define PIPE_DDI_PORT_F 5
#define PIPE_DDI_MODESEL_SHIFT 24
#define PIPE_DDI_MODESEL_MODE(x) ((x) << PIPE_DDI_MODESEL_SHIFT)
#define PIPE_DDI_MODESEL_MASK (7 << PIPE_DDI_MODESEL_SHIFT)
@@ -1295,6 +1295,11 @@ DigitalDisplayInterface::_PortRegister()
return DDI_BUF_CTL_D;
case INTEL_PORT_E:
return DDI_BUF_CTL_E;
case INTEL_PORT_F:
if ((gInfo->shared_info->device_type.Generation() > 8) &&
!gInfo->shared_info->device_type.InGroup(INTEL_GROUP_SKY))
return DDI_BUF_CTL_F;
return 0;
default:
return 0;
}
@@ -1353,9 +1358,11 @@ DigitalDisplayInterface::IsConnected()
TRACE("%s: %s PortRegister: 0x%" B_PRIxADDR "\n", __func__, PortName(),
portRegister);
// Please note: Skylake and up (Desktop) use eDP for a seperate active VGA converter chip.
if ((portRegister == 0) && (PortIndex() != INTEL_PORT_E)) //DP protocol has no register
// Please note: Skylake and up (Desktop) might use eDP for a seperate active VGA converter chip.
if (portRegister == 0) {
TRACE("%s: Port not implemented\n", __func__);
return false;
}
// Probe a little port info.
if ((read32(DDI_BUF_CTL_A) & DDI_A_4_LANES) != 0) {
@@ -289,7 +289,7 @@ probe_ports()
// Digital Display Interface (for DP, HDMI, DVI and eDP)
if (gInfo->shared_info->device_type.HasDDI()) {
for (int i = INTEL_PORT_B; i <= INTEL_PORT_E; i++) {
for (int i = INTEL_PORT_B; i <= INTEL_PORT_F; i++) {
TRACE("Probing DDI %d\n", i);
Port* ddiPort
@@ -190,6 +190,7 @@ get_next_intel_extreme(int32* _cookie, pci_info &info, uint32 &type)
if (info.device_id == kSupportedDevices[i].device_id) {
type = i;
*_cookie = index + 1;
ERROR("%s: Intel gfx deviceID: 0x%04x\n", __func__, info.device_id);
return B_OK;
}
}
@@ -215,6 +216,7 @@ detect_intel_pch()
// check device
unsigned short id = info.device_id & INTEL_PCH_DEVICE_ID_MASK;
ERROR("%s: Intel PCH deviceID: 0x%04x\n", __func__, info.device_id);
switch(id) {
case INTEL_PCH_IBX_DEVICE_ID:
ERROR("%s: Found Ibex Peak PCH\n", __func__);