From d1043dfa07c4bb078102f3a0cf4bab53166ee770 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Fri, 28 Dec 2012 16:10:04 +0000 Subject: [PATCH] intel_extreme: Add IvyBridge fixups * Add initial clock gating fix (may need tweaking) --- src/add-ons/accelerants/intel_extreme/hooks.cpp | 3 ++- src/add-ons/accelerants/intel_extreme/mode.cpp | 6 ++++-- .../kernel/drivers/graphics/intel_extreme/intel_extreme.cpp | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/add-ons/accelerants/intel_extreme/hooks.cpp b/src/add-ons/accelerants/intel_extreme/hooks.cpp index b8c1b86a86..e97a8d7f8d 100644 --- a/src/add-ons/accelerants/intel_extreme/hooks.cpp +++ b/src/add-ons/accelerants/intel_extreme/hooks.cpp @@ -117,7 +117,8 @@ get_accelerant_hook(uint32 feature, void* data) || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_G4x) || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_IGD) || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_ILK) - || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB)) + || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB) + || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_IVB)) return NULL; return (void*)intel_allocate_overlay_buffer; diff --git a/src/add-ons/accelerants/intel_extreme/mode.cpp b/src/add-ons/accelerants/intel_extreme/mode.cpp index 67f11a8cde..538b1a0b12 100644 --- a/src/add-ons/accelerants/intel_extreme/mode.cpp +++ b/src/add-ons/accelerants/intel_extreme/mode.cpp @@ -138,7 +138,8 @@ set_frame_buffer_base() if (sharedInfo.device_type.InGroup(INTEL_TYPE_96x) || sharedInfo.device_type.InGroup(INTEL_TYPE_G4x) || sharedInfo.device_type.InGroup(INTEL_TYPE_ILK) - || sharedInfo.device_type.InGroup(INTEL_TYPE_SNB)) { + || sharedInfo.device_type.InGroup(INTEL_TYPE_SNB) + || sharedInfo.device_type.InGroup(INTEL_TYPE_IVB)) { write32(baseRegister, mode.v_display_start * sharedInfo.bytes_per_row + mode.h_display_start * (sharedInfo.bits_per_pixel + 7) / 8); read32(baseRegister); @@ -241,7 +242,8 @@ get_pll_limits(pll_limits &limits) // tested if (gInfo->shared_info->device_type.InGroup(INTEL_TYPE_ILK) - || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB)) { + || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_SNB) + || gInfo->shared_info->device_type.InGroup(INTEL_TYPE_IVB)) { // TODO: support LVDS output limits as well static const pll_limits kLimits = { // p, p1, p2, high, n, m, m1, m2 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 442dd11015..54bd2cbfda 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 @@ -305,6 +305,9 @@ intel_extreme_init(intel_info &info) } else if (info.device_type.InGroup(INTEL_TYPE_SNB)) { TRACE("SandyBridge clock gating\n"); write32(info, 0x42020, (1L << 28) | (1L << 7) | (1L << 5)); + } else if (info.device_type.InGroup(INTEL_TYPE_IVB)) { + TRACE("IvyBridge clock gating\n"); + write32(info, 0x42020, (1L << 28)); } else if (info.device_type.InGroup(INTEL_TYPE_ILK)) { TRACE("IronLake clock gating\n"); write32(info, 0x42020, (1L << 7) | (1L << 5));