mirror of https://gitee.com/openkylin/linux.git
drm/i915: move pnv|ilk_gem_mem_freq to intel_pm.c
Because this is the place where we actually use the results of them. Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
4225d0f219
commit
c921aba84a
|
@ -1375,113 +1375,6 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
|
||||||
master->driver_priv = NULL;
|
master->driver_priv = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i915_pineview_get_mem_freq(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
|
||||||
u32 tmp;
|
|
||||||
|
|
||||||
tmp = I915_READ(CLKCFG);
|
|
||||||
|
|
||||||
switch (tmp & CLKCFG_FSB_MASK) {
|
|
||||||
case CLKCFG_FSB_533:
|
|
||||||
dev_priv->fsb_freq = 533; /* 133*4 */
|
|
||||||
break;
|
|
||||||
case CLKCFG_FSB_800:
|
|
||||||
dev_priv->fsb_freq = 800; /* 200*4 */
|
|
||||||
break;
|
|
||||||
case CLKCFG_FSB_667:
|
|
||||||
dev_priv->fsb_freq = 667; /* 167*4 */
|
|
||||||
break;
|
|
||||||
case CLKCFG_FSB_400:
|
|
||||||
dev_priv->fsb_freq = 400; /* 100*4 */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (tmp & CLKCFG_MEM_MASK) {
|
|
||||||
case CLKCFG_MEM_533:
|
|
||||||
dev_priv->mem_freq = 533;
|
|
||||||
break;
|
|
||||||
case CLKCFG_MEM_667:
|
|
||||||
dev_priv->mem_freq = 667;
|
|
||||||
break;
|
|
||||||
case CLKCFG_MEM_800:
|
|
||||||
dev_priv->mem_freq = 800;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* detect pineview DDR3 setting */
|
|
||||||
tmp = I915_READ(CSHRDDR3CTL);
|
|
||||||
dev_priv->is_ddr3 = (tmp & CSHRDDR3CTL_DDR3) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void i915_ironlake_get_mem_freq(struct drm_device *dev)
|
|
||||||
{
|
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
|
||||||
u16 ddrpll, csipll;
|
|
||||||
|
|
||||||
ddrpll = I915_READ16(DDRMPLL1);
|
|
||||||
csipll = I915_READ16(CSIPLL0);
|
|
||||||
|
|
||||||
switch (ddrpll & 0xff) {
|
|
||||||
case 0xc:
|
|
||||||
dev_priv->mem_freq = 800;
|
|
||||||
break;
|
|
||||||
case 0x10:
|
|
||||||
dev_priv->mem_freq = 1066;
|
|
||||||
break;
|
|
||||||
case 0x14:
|
|
||||||
dev_priv->mem_freq = 1333;
|
|
||||||
break;
|
|
||||||
case 0x18:
|
|
||||||
dev_priv->mem_freq = 1600;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
DRM_DEBUG_DRIVER("unknown memory frequency 0x%02x\n",
|
|
||||||
ddrpll & 0xff);
|
|
||||||
dev_priv->mem_freq = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev_priv->r_t = dev_priv->mem_freq;
|
|
||||||
|
|
||||||
switch (csipll & 0x3ff) {
|
|
||||||
case 0x00c:
|
|
||||||
dev_priv->fsb_freq = 3200;
|
|
||||||
break;
|
|
||||||
case 0x00e:
|
|
||||||
dev_priv->fsb_freq = 3733;
|
|
||||||
break;
|
|
||||||
case 0x010:
|
|
||||||
dev_priv->fsb_freq = 4266;
|
|
||||||
break;
|
|
||||||
case 0x012:
|
|
||||||
dev_priv->fsb_freq = 4800;
|
|
||||||
break;
|
|
||||||
case 0x014:
|
|
||||||
dev_priv->fsb_freq = 5333;
|
|
||||||
break;
|
|
||||||
case 0x016:
|
|
||||||
dev_priv->fsb_freq = 5866;
|
|
||||||
break;
|
|
||||||
case 0x018:
|
|
||||||
dev_priv->fsb_freq = 6400;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
DRM_DEBUG_DRIVER("unknown fsb frequency 0x%04x\n",
|
|
||||||
csipll & 0x3ff);
|
|
||||||
dev_priv->fsb_freq = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dev_priv->fsb_freq == 3200) {
|
|
||||||
dev_priv->c_m = 0;
|
|
||||||
} else if (dev_priv->fsb_freq > 3200 && dev_priv->fsb_freq <= 4800) {
|
|
||||||
dev_priv->c_m = 1;
|
|
||||||
} else {
|
|
||||||
dev_priv->c_m = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base,
|
i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base,
|
||||||
unsigned long size)
|
unsigned long size)
|
||||||
|
@ -1634,11 +1527,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
||||||
goto out_gem_unload;
|
goto out_gem_unload;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_PINEVIEW(dev))
|
|
||||||
i915_pineview_get_mem_freq(dev);
|
|
||||||
else if (IS_GEN5(dev))
|
|
||||||
i915_ironlake_get_mem_freq(dev);
|
|
||||||
|
|
||||||
/* On the 945G/GM, the chipset reports the MSI capability on the
|
/* On the 945G/GM, the chipset reports the MSI capability on the
|
||||||
* integrated graphics even though the support isn't actually there
|
* integrated graphics even though the support isn't actually there
|
||||||
* according to the published specs. It doesn't appear to function
|
* according to the published specs. It doesn't appear to function
|
||||||
|
|
|
@ -526,6 +526,113 @@ void intel_update_fbc(struct drm_device *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void i915_pineview_get_mem_freq(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
|
tmp = I915_READ(CLKCFG);
|
||||||
|
|
||||||
|
switch (tmp & CLKCFG_FSB_MASK) {
|
||||||
|
case CLKCFG_FSB_533:
|
||||||
|
dev_priv->fsb_freq = 533; /* 133*4 */
|
||||||
|
break;
|
||||||
|
case CLKCFG_FSB_800:
|
||||||
|
dev_priv->fsb_freq = 800; /* 200*4 */
|
||||||
|
break;
|
||||||
|
case CLKCFG_FSB_667:
|
||||||
|
dev_priv->fsb_freq = 667; /* 167*4 */
|
||||||
|
break;
|
||||||
|
case CLKCFG_FSB_400:
|
||||||
|
dev_priv->fsb_freq = 400; /* 100*4 */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (tmp & CLKCFG_MEM_MASK) {
|
||||||
|
case CLKCFG_MEM_533:
|
||||||
|
dev_priv->mem_freq = 533;
|
||||||
|
break;
|
||||||
|
case CLKCFG_MEM_667:
|
||||||
|
dev_priv->mem_freq = 667;
|
||||||
|
break;
|
||||||
|
case CLKCFG_MEM_800:
|
||||||
|
dev_priv->mem_freq = 800;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* detect pineview DDR3 setting */
|
||||||
|
tmp = I915_READ(CSHRDDR3CTL);
|
||||||
|
dev_priv->is_ddr3 = (tmp & CSHRDDR3CTL_DDR3) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i915_ironlake_get_mem_freq(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
u16 ddrpll, csipll;
|
||||||
|
|
||||||
|
ddrpll = I915_READ16(DDRMPLL1);
|
||||||
|
csipll = I915_READ16(CSIPLL0);
|
||||||
|
|
||||||
|
switch (ddrpll & 0xff) {
|
||||||
|
case 0xc:
|
||||||
|
dev_priv->mem_freq = 800;
|
||||||
|
break;
|
||||||
|
case 0x10:
|
||||||
|
dev_priv->mem_freq = 1066;
|
||||||
|
break;
|
||||||
|
case 0x14:
|
||||||
|
dev_priv->mem_freq = 1333;
|
||||||
|
break;
|
||||||
|
case 0x18:
|
||||||
|
dev_priv->mem_freq = 1600;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DRM_DEBUG_DRIVER("unknown memory frequency 0x%02x\n",
|
||||||
|
ddrpll & 0xff);
|
||||||
|
dev_priv->mem_freq = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev_priv->r_t = dev_priv->mem_freq;
|
||||||
|
|
||||||
|
switch (csipll & 0x3ff) {
|
||||||
|
case 0x00c:
|
||||||
|
dev_priv->fsb_freq = 3200;
|
||||||
|
break;
|
||||||
|
case 0x00e:
|
||||||
|
dev_priv->fsb_freq = 3733;
|
||||||
|
break;
|
||||||
|
case 0x010:
|
||||||
|
dev_priv->fsb_freq = 4266;
|
||||||
|
break;
|
||||||
|
case 0x012:
|
||||||
|
dev_priv->fsb_freq = 4800;
|
||||||
|
break;
|
||||||
|
case 0x014:
|
||||||
|
dev_priv->fsb_freq = 5333;
|
||||||
|
break;
|
||||||
|
case 0x016:
|
||||||
|
dev_priv->fsb_freq = 5866;
|
||||||
|
break;
|
||||||
|
case 0x018:
|
||||||
|
dev_priv->fsb_freq = 6400;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DRM_DEBUG_DRIVER("unknown fsb frequency 0x%04x\n",
|
||||||
|
csipll & 0x3ff);
|
||||||
|
dev_priv->fsb_freq = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dev_priv->fsb_freq == 3200) {
|
||||||
|
dev_priv->c_m = 0;
|
||||||
|
} else if (dev_priv->fsb_freq > 3200 && dev_priv->fsb_freq <= 4800) {
|
||||||
|
dev_priv->c_m = 1;
|
||||||
|
} else {
|
||||||
|
dev_priv->c_m = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const struct cxsr_latency cxsr_latency_table[] = {
|
static const struct cxsr_latency cxsr_latency_table[] = {
|
||||||
{1, 0, 800, 400, 3382, 33382, 3983, 33983}, /* DDR2-400 SC */
|
{1, 0, 800, 400, 3382, 33382, 3983, 33983}, /* DDR2-400 SC */
|
||||||
{1, 0, 800, 667, 3354, 33354, 3807, 33807}, /* DDR2-667 SC */
|
{1, 0, 800, 667, 3354, 33354, 3807, 33807}, /* DDR2-667 SC */
|
||||||
|
@ -3440,6 +3547,12 @@ void intel_init_pm(struct drm_device *dev)
|
||||||
/* 855GM needs testing */
|
/* 855GM needs testing */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For cxsr */
|
||||||
|
if (IS_PINEVIEW(dev))
|
||||||
|
i915_pineview_get_mem_freq(dev);
|
||||||
|
else if (IS_GEN5(dev))
|
||||||
|
i915_ironlake_get_mem_freq(dev);
|
||||||
|
|
||||||
/* For FIFO watermark updates */
|
/* For FIFO watermark updates */
|
||||||
if (HAS_PCH_SPLIT(dev)) {
|
if (HAS_PCH_SPLIT(dev)) {
|
||||||
dev_priv->display.force_wake_get = __gen6_gt_force_wake_get;
|
dev_priv->display.force_wake_get = __gen6_gt_force_wake_get;
|
||||||
|
|
Loading…
Reference in New Issue