Commit a59e122a authored by Jesse Barnes's avatar Jesse Barnes Committed by Dave Airlie

drm/i915: fix off by one in VGA save/restore of AR & CR regs.

turns out it's important to save/restore AR14 in particular.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent f116cc56
...@@ -147,7 +147,7 @@ static void i915_save_vga(struct drm_device *dev) ...@@ -147,7 +147,7 @@ static void i915_save_vga(struct drm_device *dev)
i915_write_indexed(cr_index, cr_data, 0x11, i915_write_indexed(cr_index, cr_data, 0x11,
i915_read_indexed(cr_index, cr_data, 0x11) & i915_read_indexed(cr_index, cr_data, 0x11) &
(~0x80)); (~0x80));
for (i = 0; i < 0x24; i++) for (i = 0; i <= 0x24; i++)
dev_priv->saveCR[i] = dev_priv->saveCR[i] =
i915_read_indexed(cr_index, cr_data, i); i915_read_indexed(cr_index, cr_data, i);
/* Make sure we don't turn off CR group 0 writes */ /* Make sure we don't turn off CR group 0 writes */
...@@ -156,7 +156,7 @@ static void i915_save_vga(struct drm_device *dev) ...@@ -156,7 +156,7 @@ static void i915_save_vga(struct drm_device *dev)
/* Attribute controller registers */ /* Attribute controller registers */
inb(st01); inb(st01);
dev_priv->saveAR_INDEX = inb(VGA_AR_INDEX); dev_priv->saveAR_INDEX = inb(VGA_AR_INDEX);
for (i = 0; i < 20; i++) for (i = 0; i <= 0x14; i++)
dev_priv->saveAR[i] = i915_read_ar(st01, i, 0); dev_priv->saveAR[i] = i915_read_ar(st01, i, 0);
inb(st01); inb(st01);
outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX); outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX);
...@@ -206,7 +206,7 @@ static void i915_restore_vga(struct drm_device *dev) ...@@ -206,7 +206,7 @@ static void i915_restore_vga(struct drm_device *dev)
/* CRT controller regs */ /* CRT controller regs */
/* Enable CR group 0 writes */ /* Enable CR group 0 writes */
i915_write_indexed(cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]); i915_write_indexed(cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]);
for (i = 0; i < 0x24; i++) for (i = 0; i <= 0x24; i++)
i915_write_indexed(cr_index, cr_data, i, dev_priv->saveCR[i]); i915_write_indexed(cr_index, cr_data, i, dev_priv->saveCR[i]);
/* Graphics controller regs */ /* Graphics controller regs */
...@@ -223,7 +223,7 @@ static void i915_restore_vga(struct drm_device *dev) ...@@ -223,7 +223,7 @@ static void i915_restore_vga(struct drm_device *dev)
/* Attribute controller registers */ /* Attribute controller registers */
inb(st01); inb(st01);
for (i = 0; i < 20; i++) for (i = 0; i <= 0x14; i++)
i915_write_ar(st01, i, dev_priv->saveAR[i], 0); i915_write_ar(st01, i, dev_priv->saveAR[i], 0);
inb(st01); /* switch back to index mode */ inb(st01); /* switch back to index mode */
outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX); outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX);
......
...@@ -197,10 +197,10 @@ typedef struct drm_i915_private { ...@@ -197,10 +197,10 @@ typedef struct drm_i915_private {
u8 saveSR[8]; u8 saveSR[8];
u8 saveGR[25]; u8 saveGR[25];
u8 saveAR_INDEX; u8 saveAR_INDEX;
u8 saveAR[20]; u8 saveAR[21];
u8 saveDACMASK; u8 saveDACMASK;
u8 saveDACDATA[256*3]; /* 256 3-byte colors */ u8 saveDACDATA[256*3]; /* 256 3-byte colors */
u8 saveCR[36]; u8 saveCR[37];
} drm_i915_private_t; } drm_i915_private_t;
extern struct drm_ioctl_desc i915_ioctls[]; extern struct drm_ioctl_desc i915_ioctls[];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment