mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
linux:
- update to linux-2.6.33-rc7
This commit is contained in:
parent
61515ac1c0
commit
9d7808f03d
@ -1,93 +0,0 @@
|
|||||||
From 7373cc1452c551f7c3ef7523483d76d2dd16373e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Li Peng <peng.li@intel.com>
|
|
||||||
Date: Tue, 19 Jan 2010 02:13:00 -0500
|
|
||||||
Subject: drm/i915: enable memory self refresh on 9xx
|
|
||||||
|
|
||||||
Enabling memory self refresh (SR) on 9xx needs to set additional
|
|
||||||
register bits. On 945, we need bit 31 of FW_BLC_SELF to enable the
|
|
||||||
write to self refresh bit and bit 16 to enable the write of self
|
|
||||||
refresh watermark. On 915, bit 12 of INSTPM is used to enable SR.
|
|
||||||
|
|
||||||
SR will take effect when CPU enters C3+ state and its entry/exit
|
|
||||||
should be automatically controlled by H/W, driver only needs to set
|
|
||||||
SR enable bits in wm update. But this isn't safe in my test on 945
|
|
||||||
because GPU is hung. So this patch explicitly enables SR when GPU
|
|
||||||
is idle, and disables SR when it is busy. In my test on a netbook of
|
|
||||||
945GSE chipset, it saves about 0.8W idle power.
|
|
||||||
|
|
||||||
Signed-off-by: Li Peng <peng.li@intel.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/i915/i915_reg.h | 5 ++++-
|
|
||||||
drivers/gpu/drm/i915/intel_display.c | 22 +++++++++++++++++++++-
|
|
||||||
2 files changed, 25 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
|
|
||||||
index 847006c..3921e5a 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_reg.h
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_reg.h
|
|
||||||
@@ -306,11 +306,14 @@
|
|
||||||
#define I915_ERROR_MEMORY_REFRESH (1<<1)
|
|
||||||
#define I915_ERROR_INSTRUCTION (1<<0)
|
|
||||||
#define INSTPM 0x020c0
|
|
||||||
+#define INSTPM_SELF_EN (1<<12) /* 915GM only */
|
|
||||||
#define ACTHD 0x020c8
|
|
||||||
#define FW_BLC 0x020d8
|
|
||||||
#define FW_BLC2 0x020dc
|
|
||||||
#define FW_BLC_SELF 0x020e0 /* 915+ only */
|
|
||||||
-#define FW_BLC_SELF_EN (1<<15)
|
|
||||||
+#define FW_BLC_SELF_EN_MASK (1<<31)
|
|
||||||
+#define FW_BLC_SELF_FIFO_MASK (1<<16) /* 945 only */
|
|
||||||
+#define FW_BLC_SELF_EN (1<<15) /* 945 only */
|
|
||||||
#define MM_BURST_LENGTH 0x00700000
|
|
||||||
#define MM_FIFO_WATERMARK 0x0001F000
|
|
||||||
#define LM_BURST_LENGTH 0x00000700
|
|
||||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
index 45da78e..d042955 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
@@ -2629,7 +2629,13 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
|
|
||||||
srwm = total_size - sr_entries;
|
|
||||||
if (srwm < 0)
|
|
||||||
srwm = 1;
|
|
||||||
- I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f));
|
|
||||||
+ if (IS_I945G(dev) || IS_I945GM(dev))
|
|
||||||
+ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_FIFO_MASK | (srwm & 0xff));
|
|
||||||
+ else if (IS_I915GM(dev)) {
|
|
||||||
+ /* 915M has a smaller SRWM field */
|
|
||||||
+ I915_WRITE(FW_BLC_SELF, srwm & 0x3f);
|
|
||||||
+ I915_WRITE(INSTPM, I915_READ(INSTPM) | INSTPM_SELF_EN);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
|
|
||||||
@@ -3879,6 +3885,11 @@ static void intel_idle_update(struct work_struct *work)
|
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
|
||||||
|
|
||||||
+ if (IS_I945G(dev) || IS_I945GM(dev)) {
|
|
||||||
+ DRM_DEBUG_DRIVER("enable memory self refresh on 945\n");
|
|
||||||
+ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN_MASK | FW_BLC_SELF_EN);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
|
||||||
/* Skip inactive CRTCs */
|
|
||||||
if (!crtc->fb)
|
|
||||||
@@ -3912,6 +3923,15 @@ void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj)
|
|
||||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
|
||||||
return;
|
|
||||||
|
|
||||||
+ if (IS_I945G(dev) || IS_I945GM(dev)) {
|
|
||||||
+ u32 fw_blc_self;
|
|
||||||
+
|
|
||||||
+ DRM_DEBUG_DRIVER("disable memory self refresh on 945\n");
|
|
||||||
+ fw_blc_self = I915_READ(FW_BLC_SELF);
|
|
||||||
+ fw_blc_self &= ~FW_BLC_SELF_EN;
|
|
||||||
+ I915_WRITE(FW_BLC_SELF, fw_blc_self | FW_BLC_SELF_EN_MASK);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (!dev_priv->busy)
|
|
||||||
dev_priv->busy = true;
|
|
||||||
else
|
|
||||||
--
|
|
||||||
1.6.1.3
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
|||||||
From d9bd8741f35be8bdb11e4ff8ac513375188dcc2c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Li Peng <peng.li@intel.com>
|
|
||||||
Date: Fri, 22 Jan 2010 20:59:59 +0800
|
|
||||||
Subject: drm/i915: enable vblank interrupt on ironlake
|
|
||||||
|
|
||||||
so far vblank interrupt on ironlake is disabled, this would cause
|
|
||||||
bad gfx performance if userspace calls drm_wait_vblank. This patch
|
|
||||||
enables vblank interrupt on ironlake and follows vblank get/put
|
|
||||||
model.
|
|
||||||
|
|
||||||
Signed-off-by: Li Peng <peng.li@intel.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/i915/i915_irq.c | 30 +++++++++++++++++++-----------
|
|
||||||
drivers/gpu/drm/i915/intel_display.c | 1 +
|
|
||||||
2 files changed, 20 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
|
||||||
index 89a071a..e7472d8 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_irq.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
|
||||||
@@ -309,6 +309,12 @@ irqreturn_t ironlake_irq_handler(struct drm_device *dev)
|
|
||||||
if (de_iir & DE_GSE)
|
|
||||||
ironlake_opregion_gse_intr(dev);
|
|
||||||
|
|
||||||
+ if (de_iir & DE_PIPEA_VBLANK)
|
|
||||||
+ drm_handle_vblank(dev, 0);
|
|
||||||
+
|
|
||||||
+ if (de_iir & DE_PIPEB_VBLANK)
|
|
||||||
+ drm_handle_vblank(dev, 1);
|
|
||||||
+
|
|
||||||
/* check event from PCH */
|
|
||||||
if ((de_iir & DE_PCH_EVENT) &&
|
|
||||||
(pch_iir & SDE_HOTPLUG_MASK)) {
|
|
||||||
@@ -844,11 +850,11 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
|
|
||||||
if (!(pipeconf & PIPEACONF_ENABLE))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (IS_IRONLAKE(dev))
|
|
||||||
- return 0;
|
|
||||||
-
|
|
||||||
spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
|
|
||||||
- if (IS_I965G(dev))
|
|
||||||
+ if (IS_IRONLAKE(dev))
|
|
||||||
+ ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
|
|
||||||
+ DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
|
|
||||||
+ else if (IS_I965G(dev))
|
|
||||||
i915_enable_pipestat(dev_priv, pipe,
|
|
||||||
PIPE_START_VBLANK_INTERRUPT_ENABLE);
|
|
||||||
else
|
|
||||||
@@ -866,13 +872,14 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)
|
|
||||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
|
||||||
unsigned long irqflags;
|
|
||||||
|
|
||||||
- if (IS_IRONLAKE(dev))
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags);
|
|
||||||
- i915_disable_pipestat(dev_priv, pipe,
|
|
||||||
- PIPE_VBLANK_INTERRUPT_ENABLE |
|
|
||||||
- PIPE_START_VBLANK_INTERRUPT_ENABLE);
|
|
||||||
+ if (IS_IRONLAKE(dev))
|
|
||||||
+ ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
|
|
||||||
+ DE_PIPEA_VBLANK: DE_PIPEB_VBLANK);
|
|
||||||
+ else
|
|
||||||
+ i915_disable_pipestat(dev_priv, pipe,
|
|
||||||
+ PIPE_VBLANK_INTERRUPT_ENABLE |
|
|
||||||
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
|
|
||||||
spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1015,7 +1022,8 @@ static int ironlake_irq_postinstall(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
|
||||||
/* enable kind of interrupts always enabled */
|
|
||||||
- u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT;
|
|
||||||
+ u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
|
|
||||||
+ DE_PIPEA_VBLANK | DE_PIPEB_VBLANK;
|
|
||||||
u32 render_mask = GT_USER_INTERRUPT;
|
|
||||||
u32 hotplug_mask = SDE_CRT_HOTPLUG | SDE_PORTB_HOTPLUG |
|
|
||||||
SDE_PORTC_HOTPLUG | SDE_PORTD_HOTPLUG;
|
|
||||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
index 45da78e..2cc489b 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
@@ -1638,6 +1638,7 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode)
|
|
||||||
case DRM_MODE_DPMS_OFF:
|
|
||||||
DRM_DEBUG_KMS("crtc %d dpms off\n", pipe);
|
|
||||||
|
|
||||||
+ drm_vblank_off(dev, pipe);
|
|
||||||
/* Disable display plane */
|
|
||||||
temp = I915_READ(dspcntr_reg);
|
|
||||||
if ((temp & DISPLAY_PLANE_ENABLE) != 0) {
|
|
||||||
--
|
|
||||||
1.6.6
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 349ff4274278d4fd4abd47c638e048f679ea1ca4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Li Peng <peng.li@intel.com>
|
|
||||||
Date: Thu, 21 Jan 2010 18:09:13 +0800
|
|
||||||
Subject: drm/i915: Fix the device info of Pineview
|
|
||||||
|
|
||||||
Pineview doesn't has CXSR and need GTT-based hardware status page.
|
|
||||||
It fixes a X boot hung issue on Pinview since commit cfdf1f
|
|
||||||
|
|
||||||
Signed-off-by: Li Peng <peng.li@intel.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/i915/i915_drv.c | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
|
|
||||||
index 46d8896..ecac882 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/i915_drv.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/i915_drv.c
|
|
||||||
@@ -120,7 +120,7 @@ const static struct intel_device_info intel_gm45_info = {
|
|
||||||
|
|
||||||
const static struct intel_device_info intel_pineview_info = {
|
|
||||||
.is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .is_i9xx = 1,
|
|
||||||
- .has_pipe_cxsr = 1,
|
|
||||||
+ .need_gfx_hws = 1,
|
|
||||||
.has_hotplug = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.6
|
|
||||||
|
|
@ -1 +1 @@
|
|||||||
http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.33-rc6.tar.bz2
|
http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.33-rc7.tar.bz2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user