summaryrefslogtreecommitdiff
path: root/radeonreg.c
diff options
context:
space:
mode:
Diffstat (limited to 'radeonreg.c')
-rw-r--r--radeonreg.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/radeonreg.c b/radeonreg.c
index 7ebce54..1aa706c 100644
--- a/radeonreg.c
+++ b/radeonreg.c
@@ -34,6 +34,14 @@
#include "radeon.h"
#include "radeon_reg.h"
+#ifdef __powerpc__
+#ifdef _LITTLE_ENDIAN
+#define ppc64le
+#else
+#define ppcBE
+#endif
+#endif
+
int skip;
/* *ctrl_mem is mapped to the actual device's memory mapped control area. */
@@ -57,6 +65,17 @@ static void die_error(int err, const char *why)
exit(-1);
}
+#ifdef ppc64le
+#define LOADX "lwzx"
+#define STOREX "stwx"
+#elif defined(ppcBE)
+#define LOADX "lwbrx"
+#define STOREX "stwbrx"
+#else
+#define LOADX
+#define STOREX
+#endif
+
static void radeon_set(unsigned long offset, const char *name, unsigned int value)
{
@@ -64,7 +83,7 @@ static void radeon_set(unsigned long offset, const char *name, unsigned int valu
die("internal error");
#ifdef __powerpc__
- __asm__ __volatile__ ("stwbrx %1,%2,%3\n\t"
+ __asm__ __volatile__ (STOREX " %1,%2,%3\n\t"
"eieio"
: "=m" (*((volatile unsigned int *)ctrl_mem+offset))
: "r"(value), "b"(ctrl_mem), "r"(offset));
@@ -89,7 +108,7 @@ static unsigned int radeon_get(unsigned long offset, const char *name)
die("internal error");
#ifdef __powerpc__
- __asm__ __volatile__ ("lwbrx %0,%1,%2\n\t"
+ __asm__ __volatile__ (LOADX " %0,%1,%2\n\t"
"eieio"
: "=r" (value)
: "b" (ctrl_mem), "r"(offset),