Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5ae0b6c704877d0c6b95dd7c3b1907770ca28b79
Commit:     5ae0b6c704877d0c6b95dd7c3b1907770ca28b79
Parent:     025a22151c41890e5d30a1d4fb84c547b84d7671
Author:     Jay Estabrook <[EMAIL PROTECTED]>
AuthorDate: Fri Jun 1 00:47:04 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri Jun 1 08:18:29 2007 -0700

    ALPHA: correct low-level I/O routines for sable-lynx
    
    This code corrects the behavior of the t2_readX/t2_writeX routines,
    and t2_ioreadNN/t2_iowriteNN routines.
    
    The value T2_DENSE_MEM is now subtracted from the "xaddr" argument in
    each of the readX/writeX routines, since those routines may be called
    directly, rather than always through the ioreadNN/iowriteNN routines.
    
    Examples of the direct calls, via the __raw_readX/writeX macros, are
    the memcpy_fromio/toio, _memset_c_io, and scr_memcpyw routines.
    
    Signed-off-by: Jay Estabrook <[EMAIL PROTECTED]>
    Signed-off-by: Ivan Kokshaysky <[EMAIL PROTECTED]>
    Cc: Richard Henderson <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 include/asm-alpha/core_t2.h |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/include/asm-alpha/core_t2.h b/include/asm-alpha/core_t2.h
index 457c34b..90e6b5d 100644
--- a/include/asm-alpha/core_t2.h
+++ b/include/asm-alpha/core_t2.h
@@ -437,9 +437,15 @@ static inline void t2_outl(u32 b, unsigned long addr)
 
 static DEFINE_SPINLOCK(t2_hae_lock);
 
+/*
+ * NOTE: take T2_DENSE_MEM off in each readX/writeX routine, since
+ *       they may be called directly, rather than through the
+ *       ioreadNN/iowriteNN routines.
+ */
+
 __EXTERN_INLINE u8 t2_readb(const volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long result, msb;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -453,7 +459,7 @@ __EXTERN_INLINE u8 t2_readb(const volatile void __iomem 
*xaddr)
 
 __EXTERN_INLINE u16 t2_readw(const volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long result, msb;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -471,7 +477,7 @@ __EXTERN_INLINE u16 t2_readw(const volatile void __iomem 
*xaddr)
  */
 __EXTERN_INLINE u32 t2_readl(const volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long result, msb;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -485,7 +491,7 @@ __EXTERN_INLINE u32 t2_readl(const volatile void __iomem 
*xaddr)
 
 __EXTERN_INLINE u64 t2_readq(const volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long r0, r1, work, msb;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -501,7 +507,7 @@ __EXTERN_INLINE u64 t2_readq(const volatile void __iomem 
*xaddr)
 
 __EXTERN_INLINE void t2_writeb(u8 b, volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long msb, w;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -515,7 +521,7 @@ __EXTERN_INLINE void t2_writeb(u8 b, volatile void __iomem 
*xaddr)
 
 __EXTERN_INLINE void t2_writew(u16 b, volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long msb, w;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -533,7 +539,7 @@ __EXTERN_INLINE void t2_writew(u16 b, volatile void __iomem 
*xaddr)
  */
 __EXTERN_INLINE void t2_writel(u32 b, volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long msb;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -546,7 +552,7 @@ __EXTERN_INLINE void t2_writel(u32 b, volatile void __iomem 
*xaddr)
 
 __EXTERN_INLINE void t2_writeq(u64 b, volatile void __iomem *xaddr)
 {
-       unsigned long addr = (unsigned long) xaddr;
+       unsigned long addr = (unsigned long) xaddr - T2_DENSE_MEM;
        unsigned long msb, work;
        unsigned long flags;
        spin_lock_irqsave(&t2_hae_lock, flags);
@@ -587,14 +593,14 @@ __EXTERN_INLINE int t2_is_mmio(const volatile void 
__iomem *addr)
 __EXTERN_INLINE unsigned int t2_ioread##NS(void __iomem *xaddr)                
\
 {                                                                      \
        if (t2_is_mmio(xaddr))                                          \
-               return t2_read##OS(xaddr - T2_DENSE_MEM);               \
+               return t2_read##OS(xaddr);                              \
        else                                                            \
                return t2_in##OS((unsigned long)xaddr - T2_IO);         \
 }                                                                      \
 __EXTERN_INLINE void t2_iowrite##NS(u##NS b, void __iomem *xaddr)      \
 {                                                                      \
        if (t2_is_mmio(xaddr))                                          \
-               t2_write##OS(b, xaddr - T2_DENSE_MEM);                  \
+               t2_write##OS(b, xaddr);                                 \
        else                                                            \
                t2_out##OS(b, (unsigned long)xaddr - T2_IO);            \
 }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to