From fb255821eb637b84ca67a96f7c0449ba1ccca385 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV <kallisti5@unixzen.com> Date: Wed, 4 Nov 2015 16:11:22 -0600 Subject: [PATCH] intel_extreme: Correct generations based on some Intel help --- .../graphics/intel_extreme/intel_extreme.h | 23 +++++++++---------- .../accelerants/intel_extreme/Ports.cpp | 10 ++++---- .../accelerants/intel_extreme/mode.cpp | 6 ++--- .../kernel/busses/agp_gart/intel_gart.cpp | 5 +--- .../graphics/intel_extreme/intel_extreme.cpp | 2 +- .../drivers/graphics/intel_extreme/power.cpp | 2 +- 6 files changed, 21 insertions(+), 27 deletions(-) diff --git a/headers/private/graphics/intel_extreme/intel_extreme.h b/headers/private/graphics/intel_extreme/intel_extreme.h index 550ecb0999..973de11ce7 100644 --- a/headers/private/graphics/intel_extreme/intel_extreme.h +++ b/headers/private/graphics/intel_extreme/intel_extreme.h @@ -47,9 +47,9 @@ #define INTEL_GROUP_HAS (INTEL_FAMILY_SER5 | 0x0080) // Haswell #define INTEL_GROUP_SLT (INTEL_FAMILY_POVR | 0x0010) // Saltwell #define INTEL_GROUP_FSM (INTEL_FAMILY_POVR | 0x0020) // Fu.Silvermont -#define INTEL_GROUP_SLV (INTEL_FAMILY_SOC0 | 0x0010) // Silvermont -#define INTEL_GROUP_AIR (INTEL_FAMILY_SOC0 | 0x0020) // Airmont -#define INTEL_GROUP_GOL (INTEL_FAMILY_SOC0 | 0x0040) // Goldmont +#define INTEL_GROUP_VLV (INTEL_FAMILY_SOC0 | 0x0010) // ValleyView +#define INTEL_GROUP_CHV (INTEL_FAMILY_SOC0 | 0x0020) // CherryView +#define INTEL_GROUP_BXT (INTEL_FAMILY_SOC0 | 0x0040) // Broxton // models #define INTEL_TYPE_SERVER 0x0004 #define INTEL_TYPE_MOBILE 0x0008 @@ -74,8 +74,8 @@ #define INTEL_MODEL_IVBGS (INTEL_GROUP_IVB | INTEL_TYPE_SERVER) #define INTEL_MODEL_HAS (INTEL_GROUP_HAS) #define INTEL_MODEL_HASM (INTEL_GROUP_HAS | INTEL_TYPE_MOBILE) -#define INTEL_MODEL_VLV (INTEL_GROUP_SLV) -#define INTEL_MODEL_VLVM (INTEL_GROUP_SLV | INTEL_TYPE_MOBILE) +#define INTEL_MODEL_VLV (INTEL_GROUP_VLV) +#define INTEL_MODEL_VLVM (INTEL_GROUP_VLV | INTEL_TYPE_MOBILE) // ValleyView MMIO offset #define VLV_DISPLAY_BASE 0x180000 @@ -177,14 +177,12 @@ struct DeviceType { return 5; if (InGroup(INTEL_GROUP_SNB)) return 6; - if (InFamily(INTEL_FAMILY_SER5) || InGroup(INTEL_GROUP_SLV)) + if (InFamily(INTEL_FAMILY_SER5) || InGroup(INTEL_GROUP_VLV)) return 7; - - // TODO: Groups below here might need some tweaking - if (InGroup(INTEL_GROUP_AIR) || InGroup(INTEL_GROUP_GOL)) + if (InGroup(INTEL_GROUP_CHV)) return 8; - - // TODO: SkyLake, Broxton is gen 9 + if (InGroup(INTEL_GROUP_BXT)) + return 9; // Generation 0 means somethins is wrong :-) return 0; @@ -305,7 +303,6 @@ struct intel_free_graphics_memory { // PCI bridge memory management #define INTEL_GRAPHICS_MEMORY_CONTROL 0x52 // i830+ -#define SNB_GRAPHICS_MEMORY_CONTROL 0x50 // GGC - (G)MCH Graphics Control Register #define MEMORY_CONTROL_ENABLED 0x0004 @@ -341,6 +338,8 @@ struct intel_free_graphics_memory { // SandyBridge (SNB) +#define SNB_GRAPHICS_MEMORY_CONTROL 0x50 + #define SNB_STOLEN_MEMORY_MASK 0xf8 #define SNB_STOLEN_MEMORY_32MB (1 << 3) #define SNB_STOLEN_MEMORY_64MB (2 << 3) diff --git a/src/add-ons/accelerants/intel_extreme/Ports.cpp b/src/add-ons/accelerants/intel_extreme/Ports.cpp index f2a60a5088..3dee0888c7 100644 --- a/src/add-ons/accelerants/intel_extreme/Ports.cpp +++ b/src/add-ons/accelerants/intel_extreme/Ports.cpp @@ -418,11 +418,9 @@ LVDSPort::SetDisplayMode(display_mode* target, uint32 colorMode) compute_pll_divisors(target, &divisors, true); uint32 dpll = DISPLAY_PLL_NO_VGA_CONTROL | DISPLAY_PLL_ENABLED; - if (gInfo->shared_info->device_type.InFamily(INTEL_FAMILY_9xx) - || gInfo->shared_info->device_type.InFamily(INTEL_FAMILY_SER5) - || gInfo->shared_info->device_type.InFamily(INTEL_FAMILY_SOC0)) { + if (gInfo->shared_info->device_type.Generation() >= 4) { + // DPLL mode LVDS for i915+ dpll |= LVDS_PLL_MODE_LVDS; - // DPLL mode LVDS for i915+ } // Compute bitmask from p1 value @@ -702,7 +700,7 @@ HDMIPort::_PortRegister() { // on PCH there's an additional port sandwiched in bool hasPCH = gInfo->shared_info->device_type.HasPlatformControlHub(); - bool fourthGen = gInfo->shared_info->device_type.InGroup(INTEL_GROUP_SLV); + bool fourthGen = gInfo->shared_info->device_type.InGroup(INTEL_GROUP_VLV); switch (PortIndex()) { case INTEL_PORT_B: @@ -714,7 +712,7 @@ HDMIPort::_PortRegister() return GEN4_HDMI_PORT_C; return hasPCH ? PCH_HDMI_PORT_C : INTEL_HDMI_PORT_C; case INTEL_PORT_D: - if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_AIR)) + if (gInfo->shared_info->device_type.InGroup(INTEL_GROUP_CHV)) return CHV_HDMI_PORT_D; return hasPCH ? PCH_HDMI_PORT_D : 0; default: diff --git a/src/add-ons/accelerants/intel_extreme/mode.cpp b/src/add-ons/accelerants/intel_extreme/mode.cpp index 736e8ab05a..5c659f9250 100644 --- a/src/add-ons/accelerants/intel_extreme/mode.cpp +++ b/src/add-ons/accelerants/intel_extreme/mode.cpp @@ -35,12 +35,12 @@ #undef TRACE #define TRACE_MODE #ifdef TRACE_MODE -# define TRACE(x...) _sPrintf("intel_extreme accelerant:" x) +# define TRACE(x...) _sPrintf("intel_extreme:" x) #else # define TRACE(x...) #endif -#define ERROR(x...) _sPrintf("intel_extreme accelerant: " x) +#define ERROR(x...) _sPrintf("intel_extreme: " x) #define CALLED(x...) TRACE("CALLED %s\n", __PRETTY_FUNCTION__) @@ -77,7 +77,7 @@ retrieve_current_mode(display_mode& mode, uint32 pllRegister) imageSizeRegister = INTEL_DISPLAY_B_IMAGE_SIZE; controlRegister = INTEL_DISPLAY_B_CONTROL; } else { - // TODO: not supported + ERROR("%s: PLL not supported\n", __func__); return; } diff --git a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp index bc6d60bffa..f416d8a517 100644 --- a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp +++ b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp @@ -393,18 +393,15 @@ static void set_gtt_entry(intel_info &info, uint32 offset, phys_addr_t physicalAddress) { if (info.type->Generation() >= 8) { - // Airmont, Goldmont - + // CHV + BXT physicalAddress |= (physicalAddress >> 28) & 0x07f0; // TODO: cache control? } else if (info.type->Generation() >= 6) { // SandyBridge, IronLake, IvyBridge, Haswell - physicalAddress |= (physicalAddress >> 28) & 0x0ff0; physicalAddress |= 0x02; // cache control, l3 cacheable } else if (info.type->Generation() >= 4) { // Intel 9xx minus 91x, 94x, G33 - // possible high bits are stored in the lower end physicalAddress |= (physicalAddress >> 28) & 0x00f0; // TODO: cache control? diff --git a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp index 6b54d834ab..f097fe9e43 100644 --- a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp +++ b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp @@ -347,7 +347,7 @@ intel_extreme_init(intel_info &info) = ICH_PORT_REGISTER_BASE; } - if (info.device_type.InGroup(INTEL_GROUP_SLV)) { + if (info.device_type.InGroup(INTEL_GROUP_VLV)) { // "I nearly got violent with the hw guys when they told me..." blocks[REGISTER_BLOCK(REGS_NORTH_PIPE_AND_PORT)] += VLV_DISPLAY_BASE; blocks[REGISTER_BLOCK(REGS_NORTH_PLANE_CONTROL)] += VLV_DISPLAY_BASE; diff --git a/src/add-ons/kernel/drivers/graphics/intel_extreme/power.cpp b/src/add-ons/kernel/drivers/graphics/intel_extreme/power.cpp index f3756a4111..9c33a9f8e1 100644 --- a/src/add-ons/kernel/drivers/graphics/intel_extreme/power.cpp +++ b/src/add-ons/kernel/drivers/graphics/intel_extreme/power.cpp @@ -37,7 +37,7 @@ intel_en_gating(intel_info &info) } else if (info.device_type.InGroup(INTEL_GROUP_IVB)) { TRACE("IvyBridge clock gating\n"); write32(info, 0x42020, (1L << 28)); - } else if (info.device_type.InGroup(INTEL_GROUP_SLV)) { + } else if (info.device_type.InGroup(INTEL_GROUP_VLV)) { TRACE("ValleyView clock gating\n"); write32(info, VLV_DISPLAY_BASE + 0x6200, (1L << 28)); } else if (info.device_type.InGroup(INTEL_GROUP_ILK)) {