lkml.org 
[lkml]   [2010]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: 6175ddf06b6172046a329e3abfd9c901a43efd2e breaks matroxfb console
Date
On Monday 02 August 2010 23:04:28 H. Peter Anvin wrote:
> On 08/02/2010 12:49 PM, Ondrej Zary wrote:
> > Hello,
> > matroxfb (at least with Mystique and Mystique 220) stopped working in
> > 2.6.34 - the screen is completely corrupted. Bisection shows that
> > 6175ddf06b6172046a329e3abfd9c901a43efd2e is first bad commit.
> >
> > Reverting 6175ddf06b6172046a329e3abfd9c901a43efd2e in 2.6.34 fixes the
> > problem (1c5b9069e12e20d2fe883076ae0bf73966492108 must be reverted
> > first).
>
> Sounds like another driver which used memcpy_toio() when it should have
> used iowrite32_rep() or __iowrite32_copy().
>
> Hmm... is __iowrite32_copy() and iowrite32_rep() redundant? If so, we
> should get rid of the former.

There is a wrapper in drivers/video/matrox/matroxfb_base.h (see below) with
some comment. So this commit changed one of the three points?

static inline void mga_memcpy_toio(vaddr_t va, const void* src, int len) {
#if defined(__alpha__) || defined(__i386__) || defined(__x86_64__)
/*
* memcpy_toio works for us if:
* (1) Copies data as 32bit quantities, not byte after byte,
* (2) Performs LE ordered stores, and
* (3) It copes with unaligned source (destination is guaranteed to be page
* aligned and length is guaranteed to be multiple of 4).
*/
memcpy_toio(va.vaddr, src, len);
#else
u_int32_t __iomem* addr = va.vaddr;

if ((unsigned long)src & 3) {
while (len >= 4) {
fb_writel(get_unaligned((u32 *)src), addr);
addr++;
len -= 4;
src += 4;
}
} else {
while (len >= 4) {
fb_writel(*(u32 *)src, addr);
addr++;
len -= 4;
src += 4;
}
}
#endif
}

--
Ondrej Zary


\
 
 \ /
  Last update: 2010-08-02 23:17    [W:0.804 / U:0.224 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site