mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:24:31 +01:00
fbdev: ffb: fix corrupted video output on Sun FFB1
Fix Sun FFB1 corrupted video out ([1] and [2]) by disabling overlay and initializing window mode to a known state. The issue never appeared on my FFB2+/vertical nor Elite3D/M6. It could also depend on the PROM version. /SUNW,ffb@1e,0: FFB at 000001fc00000000, type 11, DAC pnum[236c] rev[10] manuf_rev[4] X (II) /dev/fb0: Detected FFB1, Z-buffer, Single-buffered. X (II) /dev/fb0: BT9068 (PAC1) ramdac detected (with normal cursor control) X (II) /dev/fb0: Detected Creator/Creator3D [1] https://www.instagram.com/p/DUTcSmSjSem/ [2] https://chaos.social/@ReneRebe/116023241660154102 Signed-off-by: René Rebe <rene@exactco.de> Cc: stable@kernel.org Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
c39ee2d264
commit
b28da0d092
1 changed files with 13 additions and 1 deletions
|
|
@ -335,6 +335,9 @@ struct ffb_dac {
|
|||
};
|
||||
|
||||
#define FFB_DAC_UCTRL 0x1001 /* User Control */
|
||||
#define FFB_DAC_UCTRL_OVENAB 0x00000008 /* Overlay Enable */
|
||||
#define FFB_DAC_UCTRL_WMODE 0x00000030 /* Window Mode */
|
||||
#define FFB_DAC_UCTRL_WM_COMB 0x00000000 /* Window Mode = Combined */
|
||||
#define FFB_DAC_UCTRL_MANREV 0x00000f00 /* 4-bit Manufacturing Revision */
|
||||
#define FFB_DAC_UCTRL_MANREV_SHIFT 8
|
||||
#define FFB_DAC_TGEN 0x6000 /* Timing Generator */
|
||||
|
|
@ -425,7 +428,7 @@ static void ffb_switch_from_graph(struct ffb_par *par)
|
|||
{
|
||||
struct ffb_fbc __iomem *fbc = par->fbc;
|
||||
struct ffb_dac __iomem *dac = par->dac;
|
||||
unsigned long flags;
|
||||
unsigned long flags, uctrl;
|
||||
|
||||
spin_lock_irqsave(&par->lock, flags);
|
||||
FFBWait(par);
|
||||
|
|
@ -450,6 +453,15 @@ static void ffb_switch_from_graph(struct ffb_par *par)
|
|||
upa_writel((FFB_DAC_CUR_CTRL_P0 |
|
||||
FFB_DAC_CUR_CTRL_P1), &dac->value2);
|
||||
|
||||
/* Disable overlay and window modes. */
|
||||
upa_writel(FFB_DAC_UCTRL, &dac->type);
|
||||
uctrl = upa_readl(&dac->value);
|
||||
uctrl &= ~FFB_DAC_UCTRL_WMODE;
|
||||
uctrl |= FFB_DAC_UCTRL_WM_COMB;
|
||||
uctrl &= ~FFB_DAC_UCTRL_OVENAB;
|
||||
upa_writel(FFB_DAC_UCTRL, &dac->type);
|
||||
upa_writel(uctrl, &dac->value);
|
||||
|
||||
spin_unlock_irqrestore(&par->lock, flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue