Skip to content

Commit 6248017

Browse files
ArthurHeymansvsyrjala
authored andcommitted
drm/i915: Get correct display clock on 945gm
This is according to Mobile Intel® 945 Express Chipset Family datasheet. Signed-off-by: Arthur Heymans <[email protected]> Link: http://patchwork.freedesktop.org/patch/msgid/[email protected] Reviewed-by: Ville Syrjälä <[email protected]> Signed-off-by: Ville Syrjälä <[email protected]>
1 parent e0ec3ec commit 6248017

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
119119
#define GCFGC 0xf0 /* 915+ only */
120120
#define GC_LOW_FREQUENCY_ENABLE (1 << 7)
121121
#define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
122-
#define GC_DISPLAY_CLOCK_333_MHZ (4 << 4)
122+
#define GC_DISPLAY_CLOCK_333_320_MHZ (4 << 4)
123123
#define GC_DISPLAY_CLOCK_267_MHZ_PNV (0 << 4)
124124
#define GC_DISPLAY_CLOCK_333_MHZ_PNV (1 << 4)
125125
#define GC_DISPLAY_CLOCK_444_MHZ_PNV (2 << 4)

drivers/gpu/drm/i915/intel_display.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7411,6 +7411,26 @@ static int i945_get_display_clock_speed(struct drm_i915_private *dev_priv)
74117411
return 400000;
74127412
}
74137413

7414+
static int i945gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
7415+
{
7416+
struct pci_dev *pdev = dev_priv->drm.pdev;
7417+
u16 gcfgc = 0;
7418+
7419+
pci_read_config_word(pdev, GCFGC, &gcfgc);
7420+
7421+
if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
7422+
return 133333;
7423+
else {
7424+
switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
7425+
case GC_DISPLAY_CLOCK_333_320_MHZ:
7426+
return 320000;
7427+
default:
7428+
case GC_DISPLAY_CLOCK_190_200_MHZ:
7429+
return 200000;
7430+
}
7431+
}
7432+
}
7433+
74147434
static int i915_get_display_clock_speed(struct drm_i915_private *dev_priv)
74157435
{
74167436
return 333333;
@@ -7457,7 +7477,7 @@ static int i915gm_get_display_clock_speed(struct drm_i915_private *dev_priv)
74577477
return 133333;
74587478
else {
74597479
switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
7460-
case GC_DISPLAY_CLOCK_333_MHZ:
7480+
case GC_DISPLAY_CLOCK_333_320_MHZ:
74617481
return 333333;
74627482
default:
74637483
case GC_DISPLAY_CLOCK_190_200_MHZ:
@@ -16268,9 +16288,12 @@ void intel_init_display_hooks(struct drm_i915_private *dev_priv)
1626816288
else if (IS_I915G(dev_priv))
1626916289
dev_priv->display.get_display_clock_speed =
1627016290
i915_get_display_clock_speed;
16271-
else if (IS_I945GM(dev_priv) || IS_I845G(dev_priv))
16291+
else if (IS_I845G(dev_priv))
1627216292
dev_priv->display.get_display_clock_speed =
1627316293
i9xx_misc_get_display_clock_speed;
16294+
else if (IS_I945GM(dev_priv))
16295+
dev_priv->display.get_display_clock_speed =
16296+
i945gm_get_display_clock_speed;
1627416297
else if (IS_I915GM(dev_priv))
1627516298
dev_priv->display.get_display_clock_speed =
1627616299
i915gm_get_display_clock_speed;

0 commit comments

Comments
 (0)