Commit 46ea178b authored by Hirokazu Takata's avatar Hirokazu Takata Committed by Linus Torvalds

[PATCH] m32r: Update _port2addr to use NONCACHE_OFFSET

Modify _port2addr*() routines in arch/m32r/kernel/io_*.c to use
NONCACHE_OFFSET instead of hard-coding of a constant address.

This modification is also required to support an M3A-ZA36 FPGA eva board in
case an MMU-less synthesizable m32r core is used.
Signed-off-by: default avatarHirokazu Takata <takata@linux-m32r.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 1b5b776a
...@@ -32,7 +32,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int); ...@@ -32,7 +32,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port + NONCACHE_OFFSET); return (void *)(port | NONCACHE_OFFSET);
} }
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC) #if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
...@@ -41,15 +41,15 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -41,15 +41,15 @@ static inline void *__port2addr_ata(unsigned long port)
static int dummy_reg; static int dummy_reg;
switch (port) { switch (port) {
case 0x1f0: return (void *)0xac002000; case 0x1f0: return (void *)(0x0c002000 | NONCACHE_OFFSET);
case 0x1f1: return (void *)0xac012800; case 0x1f1: return (void *)(0x0c012800 | NONCACHE_OFFSET);
case 0x1f2: return (void *)0xac012002; case 0x1f2: return (void *)(0x0c012002 | NONCACHE_OFFSET);
case 0x1f3: return (void *)0xac012802; case 0x1f3: return (void *)(0x0c012802 | NONCACHE_OFFSET);
case 0x1f4: return (void *)0xac012004; case 0x1f4: return (void *)(0x0c012004 | NONCACHE_OFFSET);
case 0x1f5: return (void *)0xac012804; case 0x1f5: return (void *)(0x0c012804 | NONCACHE_OFFSET);
case 0x1f6: return (void *)0xac012006; case 0x1f6: return (void *)(0x0c012006 | NONCACHE_OFFSET);
case 0x1f7: return (void *)0xac012806; case 0x1f7: return (void *)(0x0c012806 | NONCACHE_OFFSET);
case 0x3f6: return (void *)0xac01200e; case 0x3f6: return (void *)(0x0c01200e | NONCACHE_OFFSET);
default: return (void *)&dummy_reg; default: return (void *)&dummy_reg;
} }
} }
...@@ -60,8 +60,8 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -60,8 +60,8 @@ static inline void *__port2addr_ata(unsigned long port)
* from 0x01000000 to 0x01ffffff on physical address. * from 0x01000000 to 0x01ffffff on physical address.
* The base address of LAN controller(LAN91C111) is 0x300. * The base address of LAN controller(LAN91C111) is 0x300.
*/ */
#define LAN_IOSTART 0x300 #define LAN_IOSTART (0x300 | NONCACHE_OFFSET)
#define LAN_IOEND 0x320 #define LAN_IOEND (0x320 | NONCACHE_OFFSET)
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
{ {
return (void *)(port + NONCACHE_OFFSET + 0x01000000); return (void *)(port + NONCACHE_OFFSET + 0x01000000);
......
...@@ -36,7 +36,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int); ...@@ -36,7 +36,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port + NONCACHE_OFFSET); return (void *)(port | NONCACHE_OFFSET);
} }
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC) #if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
...@@ -45,15 +45,15 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -45,15 +45,15 @@ static inline void *__port2addr_ata(unsigned long port)
static int dummy_reg; static int dummy_reg;
switch (port) { switch (port) {
case 0x1f0: return (void *)0xac002000; case 0x1f0: return (void *)(0x0c002000 | NONCACHE_OFFSET);
case 0x1f1: return (void *)0xac012800; case 0x1f1: return (void *)(0x0c012800 | NONCACHE_OFFSET);
case 0x1f2: return (void *)0xac012002; case 0x1f2: return (void *)(0x0c012002 | NONCACHE_OFFSET);
case 0x1f3: return (void *)0xac012802; case 0x1f3: return (void *)(0x0c012802 | NONCACHE_OFFSET);
case 0x1f4: return (void *)0xac012004; case 0x1f4: return (void *)(0x0c012004 | NONCACHE_OFFSET);
case 0x1f5: return (void *)0xac012804; case 0x1f5: return (void *)(0x0c012804 | NONCACHE_OFFSET);
case 0x1f6: return (void *)0xac012006; case 0x1f6: return (void *)(0x0c012006 | NONCACHE_OFFSET);
case 0x1f7: return (void *)0xac012806; case 0x1f7: return (void *)(0x0c012806 | NONCACHE_OFFSET);
case 0x3f6: return (void *)0xac01200e; case 0x3f6: return (void *)(0x0c01200e | NONCACHE_OFFSET);
default: return (void *)&dummy_reg; default: return (void *)&dummy_reg;
} }
} }
...@@ -64,8 +64,8 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -64,8 +64,8 @@ static inline void *__port2addr_ata(unsigned long port)
* from 0x10000000 to 0x13ffffff on physical address. * from 0x10000000 to 0x13ffffff on physical address.
* The base address of LAN controller(LAN91C111) is 0x300. * The base address of LAN controller(LAN91C111) is 0x300.
*/ */
#define LAN_IOSTART 0xa0000300 #define LAN_IOSTART (0x300 | NONCACHE_OFFSET)
#define LAN_IOEND 0xa0000320 #define LAN_IOEND (0x320 | NONCACHE_OFFSET)
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
{ {
return (void *)(port + 0x10000000); return (void *)(port + 0x10000000);
......
...@@ -31,7 +31,7 @@ extern void pcc_iowrite(int, unsigned long, void *, size_t, size_t, int); ...@@ -31,7 +31,7 @@ extern void pcc_iowrite(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port | (NONCACHE_OFFSET)); return (void *)(port | NONCACHE_OFFSET);
} }
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
......
...@@ -33,7 +33,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int); ...@@ -33,7 +33,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port | (NONCACHE_OFFSET)); return (void *)(port | NONCACHE_OFFSET);
} }
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC) #if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
...@@ -42,22 +42,22 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -42,22 +42,22 @@ static inline void *__port2addr_ata(unsigned long port)
static int dummy_reg; static int dummy_reg;
switch (port) { switch (port) {
case 0x1f0: return (void *)0xac002000; case 0x1f0: return (void *)(0x0c002000 | NONCACHE_OFFSET);
case 0x1f1: return (void *)0xac012800; case 0x1f1: return (void *)(0x0c012800 | NONCACHE_OFFSET);
case 0x1f2: return (void *)0xac012002; case 0x1f2: return (void *)(0x0c012002 | NONCACHE_OFFSET);
case 0x1f3: return (void *)0xac012802; case 0x1f3: return (void *)(0x0c012802 | NONCACHE_OFFSET);
case 0x1f4: return (void *)0xac012004; case 0x1f4: return (void *)(0x0c012004 | NONCACHE_OFFSET);
case 0x1f5: return (void *)0xac012804; case 0x1f5: return (void *)(0x0c012804 | NONCACHE_OFFSET);
case 0x1f6: return (void *)0xac012006; case 0x1f6: return (void *)(0x0c012006 | NONCACHE_OFFSET);
case 0x1f7: return (void *)0xac012806; case 0x1f7: return (void *)(0x0c012806 | NONCACHE_OFFSET);
case 0x3f6: return (void *)0xac01200e; case 0x3f6: return (void *)(0x0c01200e | NONCACHE_OFFSET);
default: return (void *)&dummy_reg; default: return (void *)&dummy_reg;
} }
} }
#endif #endif
#define LAN_IOSTART 0xa0000300 #define LAN_IOSTART (0x300 | NONCACHE_OFFSET)
#define LAN_IOEND 0xa0000320 #define LAN_IOEND (0x320 | NONCACHE_OFFSET)
#ifdef CONFIG_CHIP_OPSP #ifdef CONFIG_CHIP_OPSP
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
{ {
......
...@@ -33,7 +33,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int); ...@@ -33,7 +33,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port + NONCACHE_OFFSET); return (void *)(port | NONCACHE_OFFSET);
} }
#if defined(CONFIG_IDE) #if defined(CONFIG_IDE)
...@@ -43,33 +43,42 @@ static inline void *__port2addr_ata(unsigned long port) ...@@ -43,33 +43,42 @@ static inline void *__port2addr_ata(unsigned long port)
switch (port) { switch (port) {
/* IDE0 CF */ /* IDE0 CF */
case 0x1f0: return (void *)0xb4002000; case 0x1f0: return (void *)(0x14002000 | NONCACHE_OFFSET);
case 0x1f1: return (void *)0xb4012800; case 0x1f1: return (void *)(0x14012800 | NONCACHE_OFFSET);
case 0x1f2: return (void *)0xb4012002; case 0x1f2: return (void *)(0x14012002 | NONCACHE_OFFSET);
case 0x1f3: return (void *)0xb4012802; case 0x1f3: return (void *)(0x14012802 | NONCACHE_OFFSET);
case 0x1f4: return (void *)0xb4012004; case 0x1f4: return (void *)(0x14012004 | NONCACHE_OFFSET);
case 0x1f5: return (void *)0xb4012804; case 0x1f5: return (void *)(0x14012804 | NONCACHE_OFFSET);
case 0x1f6: return (void *)0xb4012006; case 0x1f6: return (void *)(0x14012006 | NONCACHE_OFFSET);
case 0x1f7: return (void *)0xb4012806; case 0x1f7: return (void *)(0x14012806 | NONCACHE_OFFSET);
case 0x3f6: return (void *)0xb401200e; case 0x3f6: return (void *)(0x1401200e | NONCACHE_OFFSET);
/* IDE1 IDE */ /* IDE1 IDE */
case 0x170: return (void *)0xb4810000; /* Data 16bit */ case 0x170: /* Data 16bit */
case 0x171: return (void *)0xb4810002; /* Features / Error */ return (void *)(0x14810000 | NONCACHE_OFFSET);
case 0x172: return (void *)0xb4810004; /* Sector count */ case 0x171: /* Features / Error */
case 0x173: return (void *)0xb4810006; /* Sector number */ return (void *)(0x14810002 | NONCACHE_OFFSET);
case 0x174: return (void *)0xb4810008; /* Cylinder low */ case 0x172: /* Sector count */
case 0x175: return (void *)0xb481000a; /* Cylinder high */ return (void *)(0x14810004 | NONCACHE_OFFSET);
case 0x176: return (void *)0xb481000c; /* Device head */ case 0x173: /* Sector number */
case 0x177: return (void *)0xb481000e; /* Command */ return (void *)(0x14810006 | NONCACHE_OFFSET);
case 0x376: return (void *)0xb480800c; /* Device control / Alt status */ case 0x174: /* Cylinder low */
return (void *)(0x14810008 | NONCACHE_OFFSET);
case 0x175: /* Cylinder high */
return (void *)(0x1481000a | NONCACHE_OFFSET);
case 0x176: /* Device head */
return (void *)(0x1481000c | NONCACHE_OFFSET);
case 0x177: /* Command */
return (void *)(0x1481000e | NONCACHE_OFFSET);
case 0x376: /* Device control / Alt status */
return (void *)(0x1480800c | NONCACHE_OFFSET);
default: return (void *)&dummy_reg; default: return (void *)&dummy_reg;
} }
} }
#endif #endif
#define LAN_IOSTART 0xa0000300 #define LAN_IOSTART (0x300 | NONCACHE_OFFSET)
#define LAN_IOEND 0xa0000320 #define LAN_IOEND (0x320 | NONCACHE_OFFSET)
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
{ {
return (void *)(port + 0x10000000); return (void *)(port + 0x10000000);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port | (NONCACHE_OFFSET)); return (void *)(port | NONCACHE_OFFSET);
} }
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
......
...@@ -36,7 +36,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int); ...@@ -36,7 +36,7 @@ extern void pcc_iowrite_word(int, unsigned long, void *, size_t, size_t, int);
static inline void *_port2addr(unsigned long port) static inline void *_port2addr(unsigned long port)
{ {
return (void *)(port | (NONCACHE_OFFSET)); return (void *)(port | NONCACHE_OFFSET);
} }
/* /*
...@@ -44,8 +44,8 @@ static inline void *_port2addr(unsigned long port) ...@@ -44,8 +44,8 @@ static inline void *_port2addr(unsigned long port)
* from 0x10000000 to 0x13ffffff on physical address. * from 0x10000000 to 0x13ffffff on physical address.
* The base address of LAN controller(LAN91C111) is 0x300. * The base address of LAN controller(LAN91C111) is 0x300.
*/ */
#define LAN_IOSTART 0xa0000300 #define LAN_IOSTART (0x300 | NONCACHE_OFFSET)
#define LAN_IOEND 0xa0000320 #define LAN_IOEND (0x320 | NONCACHE_OFFSET)
static inline void *_port2addr_ne(unsigned long port) static inline void *_port2addr_ne(unsigned long port)
{ {
return (void *)(port + 0x10000000); return (void *)(port + 0x10000000);
......
...@@ -126,7 +126,7 @@ ...@@ -126,7 +126,7 @@
#include <asm/page.h> #include <asm/page.h>
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
#define NONCACHE_OFFSET __PAGE_OFFSET+0x20000000 #define NONCACHE_OFFSET (__PAGE_OFFSET + 0x20000000)
#else #else
#define NONCACHE_OFFSET __PAGE_OFFSET #define NONCACHE_OFFSET __PAGE_OFFSET
#endif /* CONFIG_MMU */ #endif /* CONFIG_MMU */
......
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