|
@@ -192,24 +192,8 @@ DEF_MMIO_OUT_D(out_le32, 32, stw);
|
|
|
|
|
|
#endif /* __BIG_ENDIAN */
|
|
|
|
|
|
-/*
|
|
|
- * Cache inhibitied accessors for use in real mode, you don't want to use these
|
|
|
- * unless you know what you're doing.
|
|
|
- *
|
|
|
- * NB. These use the cpu byte ordering.
|
|
|
- */
|
|
|
-DEF_MMIO_OUT_X(out_rm8, 8, stbcix);
|
|
|
-DEF_MMIO_OUT_X(out_rm16, 16, sthcix);
|
|
|
-DEF_MMIO_OUT_X(out_rm32, 32, stwcix);
|
|
|
-DEF_MMIO_IN_X(in_rm8, 8, lbzcix);
|
|
|
-DEF_MMIO_IN_X(in_rm16, 16, lhzcix);
|
|
|
-DEF_MMIO_IN_X(in_rm32, 32, lwzcix);
|
|
|
-
|
|
|
#ifdef __powerpc64__
|
|
|
|
|
|
-DEF_MMIO_OUT_X(out_rm64, 64, stdcix);
|
|
|
-DEF_MMIO_IN_X(in_rm64, 64, ldcix);
|
|
|
-
|
|
|
#ifdef __BIG_ENDIAN__
|
|
|
DEF_MMIO_OUT_D(out_be64, 64, std);
|
|
|
DEF_MMIO_IN_D(in_be64, 64, ld);
|
|
@@ -242,35 +226,6 @@ static inline void out_be64(volatile u64 __iomem *addr, u64 val)
|
|
|
#endif
|
|
|
#endif /* __powerpc64__ */
|
|
|
|
|
|
-
|
|
|
-/*
|
|
|
- * Simple Cache inhibited accessors
|
|
|
- * Unlike the DEF_MMIO_* macros, these don't include any h/w memory
|
|
|
- * barriers, callers need to manage memory barriers on their own.
|
|
|
- * These can only be used in hypervisor real mode.
|
|
|
- */
|
|
|
-
|
|
|
-static inline u32 _lwzcix(unsigned long addr)
|
|
|
-{
|
|
|
- u32 ret;
|
|
|
-
|
|
|
- __asm__ __volatile__("lwzcix %0,0, %1"
|
|
|
- : "=r" (ret) : "r" (addr) : "memory");
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void _stbcix(u64 addr, u8 val)
|
|
|
-{
|
|
|
- __asm__ __volatile__("stbcix %0,0,%1"
|
|
|
- : : "r" (val), "r" (addr) : "memory");
|
|
|
-}
|
|
|
-
|
|
|
-static inline void _stwcix(u64 addr, u32 val)
|
|
|
-{
|
|
|
- __asm__ __volatile__("stwcix %0,0,%1"
|
|
|
- : : "r" (val), "r" (addr) : "memory");
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Low level IO stream instructions are defined out of line for now
|
|
|
*/
|
|
@@ -417,15 +372,64 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Real mode version of the above. stdcix is only supposed to be used
|
|
|
- * in hypervisor real mode as per the architecture spec.
|
|
|
+ * Real mode versions of the above. Those instructions are only supposed
|
|
|
+ * to be used in hypervisor real mode as per the architecture spec.
|
|
|
*/
|
|
|
+static inline void __raw_rm_writeb(u8 val, volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ __asm__ __volatile__("stbcix %0,0,%1"
|
|
|
+ : : "r" (val), "r" (paddr) : "memory");
|
|
|
+}
|
|
|
+
|
|
|
+static inline void __raw_rm_writew(u16 val, volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ __asm__ __volatile__("sthcix %0,0,%1"
|
|
|
+ : : "r" (val), "r" (paddr) : "memory");
|
|
|
+}
|
|
|
+
|
|
|
+static inline void __raw_rm_writel(u32 val, volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ __asm__ __volatile__("stwcix %0,0,%1"
|
|
|
+ : : "r" (val), "r" (paddr) : "memory");
|
|
|
+}
|
|
|
+
|
|
|
static inline void __raw_rm_writeq(u64 val, volatile void __iomem *paddr)
|
|
|
{
|
|
|
__asm__ __volatile__("stdcix %0,0,%1"
|
|
|
: : "r" (val), "r" (paddr) : "memory");
|
|
|
}
|
|
|
|
|
|
+static inline u8 __raw_rm_readb(volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ u8 ret;
|
|
|
+ __asm__ __volatile__("lbzcix %0,0, %1"
|
|
|
+ : "=r" (ret) : "r" (paddr) : "memory");
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static inline u16 __raw_rm_readw(volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ u16 ret;
|
|
|
+ __asm__ __volatile__("lhzcix %0,0, %1"
|
|
|
+ : "=r" (ret) : "r" (paddr) : "memory");
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static inline u32 __raw_rm_readl(volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ u32 ret;
|
|
|
+ __asm__ __volatile__("lwzcix %0,0, %1"
|
|
|
+ : "=r" (ret) : "r" (paddr) : "memory");
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static inline u64 __raw_rm_readq(volatile void __iomem *paddr)
|
|
|
+{
|
|
|
+ u64 ret;
|
|
|
+ __asm__ __volatile__("ldcix %0,0, %1"
|
|
|
+ : "=r" (ret) : "r" (paddr) : "memory");
|
|
|
+ return ret;
|
|
|
+}
|
|
|
#endif /* __powerpc64__ */
|
|
|
|
|
|
/*
|