diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-07 15:54:59 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-10 18:13:51 -0400 |
commit | 021357acc8ea85273a9882b3fe89935629f51b12 (patch) | |
tree | 0b3203f90289d2f7e31b299d6804a8aa61fe407d | |
parent | 8c4223bee91b771782f2ec07f2c85d81cdff3ed5 (diff) |
drm/i915: Use the real FDI frequency for determining b/w
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 3 |
3 files changed, 20 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index d0b4b2375d56..fbf58e0f2588 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -2398,6 +2398,7 @@ | |||
2398 | #define RR_HW_HIGH_POWER_FRAMES_MASK 0xff00 | 2398 | #define RR_HW_HIGH_POWER_FRAMES_MASK 0xff00 |
2399 | 2399 | ||
2400 | #define FDI_PLL_BIOS_0 0x46000 | 2400 | #define FDI_PLL_BIOS_0 0x46000 |
2401 | #define FDI_PLL_FB_CLOCK_MASK 0xff | ||
2401 | #define FDI_PLL_BIOS_1 0x46004 | 2402 | #define FDI_PLL_BIOS_1 0x46004 |
2402 | #define FDI_PLL_BIOS_2 0x46008 | 2403 | #define FDI_PLL_BIOS_2 0x46008 |
2403 | #define DISPLAY_PORT_PLL_BIOS_0 0x4600c | 2404 | #define DISPLAY_PORT_PLL_BIOS_0 0x4600c |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index df410e4827e4..5279b0c88e9c 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -342,6 +342,13 @@ static bool | |||
342 | intel_find_pll_ironlake_dp(const intel_limit_t *, struct drm_crtc *crtc, | 342 | intel_find_pll_ironlake_dp(const intel_limit_t *, struct drm_crtc *crtc, |
343 | int target, int refclk, intel_clock_t *best_clock); | 343 | int target, int refclk, intel_clock_t *best_clock); |
344 | 344 | ||
345 | static inline u32 /* units of 100MHz */ | ||
346 | intel_fdi_link_freq(struct drm_device *dev) | ||
347 | { | ||
348 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
349 | return (I915_READ(FDI_PLL_BIOS_0) & FDI_PLL_FB_CLOCK_MASK) + 2; | ||
350 | } | ||
351 | |||
345 | static const intel_limit_t intel_limits_i8xx_dvo = { | 352 | static const intel_limit_t intel_limits_i8xx_dvo = { |
346 | .dot = { .min = I8XX_DOT_MIN, .max = I8XX_DOT_MAX }, | 353 | .dot = { .min = I8XX_DOT_MIN, .max = I8XX_DOT_MAX }, |
347 | .vco = { .min = I8XX_VCO_MIN, .max = I8XX_VCO_MAX }, | 354 | .vco = { .min = I8XX_VCO_MIN, .max = I8XX_VCO_MAX }, |
@@ -3767,7 +3774,15 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, | |||
3767 | target_clock = mode->clock; | 3774 | target_clock = mode->clock; |
3768 | else | 3775 | else |
3769 | target_clock = adjusted_mode->clock; | 3776 | target_clock = adjusted_mode->clock; |
3770 | link_bw = 270000; | 3777 | |
3778 | /* FDI is a binary signal running at ~2.7GHz, encoding | ||
3779 | * each output octet as 10 bits. The actual frequency | ||
3780 | * is stored as a divider into a 100MHz clock, and the | ||
3781 | * mode pixel clock is stored in units of 1KHz. | ||
3782 | * Hence the bw of each lane in terms of the mode signal | ||
3783 | * is: | ||
3784 | */ | ||
3785 | link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10; | ||
3771 | } | 3786 | } |
3772 | 3787 | ||
3773 | /* determine panel color depth */ | 3788 | /* determine panel color depth */ |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 1ada684ea569..6c6b897539f8 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -49,6 +49,9 @@ | |||
49 | #define wait_for(COND, MS) _wait_for(COND, MS, 1) | 49 | #define wait_for(COND, MS) _wait_for(COND, MS, 1) |
50 | #define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0) | 50 | #define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0) |
51 | 51 | ||
52 | #define KHz(x) (1000*x) | ||
53 | #define MHz(x) KHz(1000*x) | ||
54 | |||
52 | /* | 55 | /* |
53 | * Display related stuff | 56 | * Display related stuff |
54 | */ | 57 | */ |