]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
microblaze: Add support for little/big endian in/out api's
authorT Karthik Reddy <t.karthik.reddy@xilinx.com>
Fri, 21 Aug 2020 04:35:33 +0000 (22:35 -0600)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 23 Sep 2020 08:31:40 +0000 (10:31 +0200)
Add read/write memory utilities for 16 and 32 bits. Add these
api's for both little and big endian systems similar to arm
architecture.

Signed-off-by: T Karthik Reddy <t.karthik.reddy@xilinx.com>
Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/microblaze/include/asm/io.h

index 8e6be0ae267f47c930437884dd01c2a9bac832b4..632bb236fbbe32182ea550d94c00d1e40b242f97 100644 (file)
 #define outw(x, addr)  ((void)writew(x, addr))
 #define outl(x, addr)  ((void)writel(x, addr))
 
-/* Some #definitions to keep strange Xilinx code happy */
-#define in_8(addr)     readb(addr)
-#define in_be16(addr)  readw(addr)
-#define in_be32(addr)  readl(addr)
+#define out_arch(type, endian, addr, x)        \
+                __raw_write##type(cpu_to_##endian(x), addr)
+#define in_arch(type, endian, addr)    \
+               endian##_to_cpu(__raw_read##type(addr))
+
+#define out_le16(addr, x)      out_arch(w, le16, addr, x)
+#define out_le32(addr, x)      out_arch(l, le32, addr, x)
+
+#define in_le16(addr)          in_arch(w, le16, addr)
+#define in_le32(addr)          in_arch(l, le32, addr)
+
+#define in_8(addr)             readb(addr)
+#define in_be16(addr)          in_arch(w, be16, addr)
+#define in_be32(addr)          in_arch(l, be32, addr)
 
 #define out_8(addr, x)         outb(x, addr)
-#define out_be16(addr, x)      outw(x, addr)
-#define out_be32(addr, x)      outl(x, addr)
+#define out_be16(addr, x)      out_arch(w, be16, addr, x)
+#define out_be32(addr, x)      out_arch(l, be32, addr, x)
 
 #define inb_p(port)            inb((port))
 #define outb_p(val, port)      outb((val), (port))