diff options
| author | Petr Vandrovec <vandrove@vc.cvut.cz> | 2004-09-15 22:11:21 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-09-15 22:11:21 -0700 |
| commit | ee3b1e7ba1909974b8a904eb209a4b78b34bee18 (patch) | |
| tree | 930288986d312cfce15d91460e6c9a6dbfbe6006 | |
| parent | 8ada88c278dd9022094f96b81690c9be5a2784c3 (diff) | |
[PATCH] matroxfb update + sparse annotations
This change switches matroxfb on x86 and x86_64 from dereferencing
pointers to {read,write}[bwl], as __pa() are gone from them, and so gcc
does not need an additional register for preserving address between
consecutive {read,write}[bwl].
Then it switches only supported architecture left (ppc/ppc64/arm) from
dereferencing pointers to __raw_{read,write}[bwl].
Third part is fixing sparse complaints: add __iomem here and there, and
switch one 1bit bitfield from int to unsigned int.
After this there should be no sparse complaints in matroxfb.
Signed-off-by: Petr Vandrovec <vandrove@vc.cvut.cz>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
| -rw-r--r-- | drivers/video/matrox/matroxfb_base.h | 31 | ||||
| -rw-r--r-- | drivers/video/matrox/matroxfb_crtc2.h | 2 | ||||
| -rw-r--r-- | drivers/video/matrox/matroxfb_misc.c | 12 |
3 files changed, 19 insertions, 26 deletions
diff --git a/drivers/video/matrox/matroxfb_base.h b/drivers/video/matrox/matroxfb_base.h index 18938f11936d..79a6873f7a59 100644 --- a/drivers/video/matrox/matroxfb_base.h +++ b/drivers/video/matrox/matroxfb_base.h @@ -99,21 +99,16 @@ #endif #endif -#if defined(__alpha__) || defined(__mc68000__) +#if defined(__alpha__) || defined(__mc68000__) || defined(__i386__) || defined(__x86_64__) #define READx_WORKS #define MEMCPYTOIO_WORKS #else +/* ppc/ppc64 must use __raw_{read,write}[bwl] as we drive adapter + in big-endian mode for compatibility with XFree mga driver, and + so we do not want little-endian {read,write}[bwl] */ #define READx_FAILS -/* recheck __ppc__, maybe that __ppc__ needs MEMCPYTOIO_WRITEL */ -/* I benchmarked PII/350MHz with G200... MEMCPY, MEMCPYTOIO and WRITEL are on same speed ( <2% diff) */ -/* so that means that G200 speed (or AGP speed?) is our limit... I do not have benchmark to test, how */ -/* much of PCI bandwidth is used during transfers... */ -#if defined(__i386__) || defined(__x86_64__) -#define MEMCPYTOIO_MEMCPY -#else #define MEMCPYTOIO_WRITEL #endif -#endif #if defined(__mc68000__) #define MAP_BUSTOVIRT @@ -160,7 +155,7 @@ #endif typedef struct { - u_int8_t* vaddr; + u_int8_t __iomem* vaddr; } vaddr_t; #ifdef READx_WORKS @@ -189,27 +184,27 @@ static inline void mga_writel(vaddr_t va, unsigned int offs, u_int32_t value) { } #else static inline unsigned int mga_readb(vaddr_t va, unsigned int offs) { - return *(volatile u_int8_t*)(va.vaddr + offs); + return __raw_readb(va.vaddr + offs); } static inline unsigned int mga_readw(vaddr_t va, unsigned int offs) { - return *(volatile u_int16_t*)(va.vaddr + offs); + return __raw_readw(va.vaddr + offs); } static inline u_int32_t mga_readl(vaddr_t va, unsigned int offs) { - return *(volatile u_int32_t*)(va.vaddr + offs); + return __raw_readl(va.vaddr + offs); } static inline void mga_writeb(vaddr_t va, unsigned int offs, u_int8_t value) { - *(volatile u_int8_t*)(va.vaddr + offs) = value; + __raw_writeb(value, va.vaddr + offs); } static inline void mga_writew(vaddr_t va, unsigned int offs, u_int16_t value) { - *(volatile u_int16_t*)(va.vaddr + offs) = value; + __raw_writew(value, va.vaddr + offs); } static inline void mga_writel(vaddr_t va, unsigned int offs, u_int32_t value) { - *(volatile u_int32_t*)(va.vaddr + offs) = value; + __raw_writel(value, va.vaddr + offs); } #endif @@ -238,8 +233,6 @@ static inline void mga_memcpy_toio(vaddr_t va, unsigned int offs, const void* sr memcpy(&tmp, src, len); mga_writel(va, offs, tmp); } -#elif defined(MEMCPYTOIO_MEMCPY) - memcpy(va.vaddr + offs, src, len); #else #error "Sorry, do not know how to write block of data to device" #endif @@ -249,7 +242,7 @@ static inline void vaddr_add(vaddr_t* va, unsigned long offs) { va->vaddr += offs; } -static inline void* vaddr_va(vaddr_t va) { +static inline void __iomem* vaddr_va(vaddr_t va) { return va.vaddr; } diff --git a/drivers/video/matrox/matroxfb_crtc2.h b/drivers/video/matrox/matroxfb_crtc2.h index fa148354eb2f..9d92dda90771 100644 --- a/drivers/video/matrox/matroxfb_crtc2.h +++ b/drivers/video/matrox/matroxfb_crtc2.h @@ -27,7 +27,7 @@ struct matroxfb_dh_fb_info { unsigned int len; } mmio; - int interlaced:1; + unsigned int interlaced:1; u_int32_t cmap[17]; }; diff --git a/drivers/video/matrox/matroxfb_misc.c b/drivers/video/matrox/matroxfb_misc.c index 62f498e8236c..76fd3a519b8a 100644 --- a/drivers/video/matrox/matroxfb_misc.c +++ b/drivers/video/matrox/matroxfb_misc.c @@ -391,7 +391,7 @@ void matroxfb_vgaHWrestore(WPMINFO2) { CRITEND } -static void get_pins(unsigned char* pins, struct matrox_bios* bd) { +static void get_pins(unsigned char __iomem* pins, struct matrox_bios* bd) { unsigned int b0 = readb(pins); if (b0 == 0x2E && readb(pins+1) == 0x41) { @@ -427,7 +427,7 @@ static void get_pins(unsigned char* pins, struct matrox_bios* bd) { } } -static void get_bios_version(unsigned char* vbios, struct matrox_bios* bd) { +static void get_bios_version(unsigned char __iomem * vbios, struct matrox_bios* bd) { unsigned int pcir_offset; pcir_offset = readb(vbios + 24) | (readb(vbios + 25) << 8); @@ -452,7 +452,7 @@ static void get_bios_version(unsigned char* vbios, struct matrox_bios* bd) { } } -static void get_bios_output(unsigned char* vbios, struct matrox_bios* bd) { +static void get_bios_output(unsigned char __iomem* vbios, struct matrox_bios* bd) { unsigned char b; b = readb(vbios + 0x7FF1); @@ -462,7 +462,7 @@ static void get_bios_output(unsigned char* vbios, struct matrox_bios* bd) { bd->output.state = b; } -static void get_bios_tvout(unsigned char* vbios, struct matrox_bios* bd) { +static void get_bios_tvout(unsigned char __iomem* vbios, struct matrox_bios* bd) { unsigned int i; /* Check for 'IBM .*(V....TVO' string - it means TVO BIOS */ @@ -489,7 +489,7 @@ static void get_bios_tvout(unsigned char* vbios, struct matrox_bios* bd) { } } -static void parse_bios(unsigned char* vbios, struct matrox_bios* bd) { +static void parse_bios(unsigned char __iomem* vbios, struct matrox_bios* bd) { unsigned int pins_offset; if (readb(vbios) != 0x55 || readb(vbios + 1) != 0xAA) { @@ -738,7 +738,7 @@ void matroxfb_read_pins(WPMINFO2) { pci_write_config_dword(pdev, PCI_OPTION_REG, opt); #ifdef CONFIG_X86 if (!ACCESS_FBINFO(bios).bios_valid) { - unsigned char* b; + unsigned char __iomem* b; b = ioremap(0x000C0000, 65536); if (!b) { |
