lkml.org 
[lkml]   [2004]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [Linux-fbdev-devel] Re: [PATCH] fbdev: Fix IO access in rivafb
    Date
    On Tuesday 09 November 2004 04:13, Linus Torvalds wrote:
    > On Tue, 9 Nov 2004, Antonino A. Daplas wrote:
    > > In big endian machines, the read*/write* accessors do a byteswap for an
    > > inherently little endian PCI bus. However, rivafb puts the hardwire in
    > > big endian register access, thus the byteswap is not needed. So, instead
    > > of read*/write*, use __raw_read*/__raw_write*.
    >
    > This fix should make the #ifdef CONFIG_PCC entirely superfluous afaik.

    Ah, of course.

    >
    > The thing is, once riva does its HW accesses right, the special cases just
    > go away. There's a reason we have abstractions..
    >
    > Does anybody have the hardware to test with?
    >

    I've asked Guido Guenther to test, might take a couple of days. I also
    asked him if he can use the in/out_be* which is probably safer for ppc.
    And the mb()'s scattered all over the driver may be removed.

    Tony


    In big endian machines, the read*/write* accessors do a byteswap for an
    inherently little endian PCI bus. However, rivafb puts the hardwire in big
    endian register access, thus the byteswap is not needed. So for 16- and
    32-bit access, instead of read*/write*, use __raw_read*/__raw_write* for all
    archs.

    Signed-off-by: Antonino Daplas <adaplas@pol.net>
    ---

    diff -Nru a/drivers/video/riva/riva_hw.h b/drivers/video/riva/riva_hw.h
    --- a/drivers/video/riva/riva_hw.h 2004-11-09 05:39:48 +08:00
    +++ b/drivers/video/riva/riva_hw.h 2004-11-09 06:00:09 +08:00
    @@ -73,18 +73,13 @@
    /*
    * HW access macros.
    */
    -#if defined(__powerpc__)
    #include <asm/io.h>
    -#define NV_WR08(p,i,d) out_8(p+i, d)
    -#define NV_RD08(p,i) in_8(p+i)
    -#else
    #define NV_WR08(p,i,d) (writeb((d), (u8 __iomem *)(p) + (i)))
    #define NV_RD08(p,i) (readb((u8 __iomem *)(p) + (i)))
    -#endif
    -#define NV_WR16(p,i,d) (writew((d), (u16 __iomem *)(p) + (i)/2))
    -#define NV_RD16(p,i) (readw((u16 __iomem *)(p) + (i)/2))
    -#define NV_WR32(p,i,d) (writel((d), (u32 __iomem *)(p) + (i)/4))
    -#define NV_RD32(p,i) (readl((u32 __iomem *)(p) + (i)/4))
    +#define NV_WR16(p,i,d) (__raw_writew((d), (u16 __iomem *)(p) + (i)/2))
    +#define NV_RD16(p,i) (__raw_readw((u16 __iomem *)(p) + (i)/2))
    +#define NV_WR32(p,i,d) (__raw_writel((d), (u32 __iomem *)(p) + (i)/4))
    +#define NV_RD32(p,i) (__raw_readl((u32 __iomem *)(p) + (i)/4))
    #define VGA_WR08(p,i,d) NV_WR08(p,i,d)
    #define VGA_RD08(p,i) NV_RD08(p,i)



    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:07    [W:2.782 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site