summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/files/arch/rlx/include
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/realtek/files/arch/rlx/include')
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/atomic.h73
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/barrier.h2
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/cmpxchg.h18
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/futex.h17
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/local.h44
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/processor.h9
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/spinlock.h27
-rw-r--r--target/linux/realtek/files/arch/rlx/include/asm/string.h6
8 files changed, 102 insertions, 94 deletions
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/atomic.h b/target/linux/realtek/files/arch/rlx/include/asm/atomic.h
index b042aa26b..3cd0c4b47 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/atomic.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/atomic.h
@@ -47,36 +47,35 @@
*
* Atomically adds @i to @v.
*/
+
static __inline__ void atomic_add(int i, atomic_t * v)
{
#ifdef CONFIG_CPU_HAS_LLSC
- int temp;
+ int temp;
smp_llsc_mb();
- __asm__ __volatile__(
- " .set mips3 \n"
- "1: ll %0, %1 # atomic_add \n"
+ __asm__ __volatile__(
+ "1: ll %0, %1 # atomic_add \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
#endif
" addu %0, %2 \n"
- " sc %0, %1 \n"
+ " sc %0, %1 \n"
" beqz %0, 2f \n"
" .subsection 2 \n"
- "2: b 1b \n"
- " .previous \n"
- " .set mips0 \n"
+ "2: b 1b \n"
+ " .previous \n"
: "=&r" (temp), "=m" (v->counter)
: "Ir" (i), "m" (v->counter));
smp_llsc_mb();
#else
- unsigned long flags;
+ unsigned long flags;
- raw_local_irq_save(flags);
- v->counter += i;
- raw_local_irq_restore(flags);
+ raw_local_irq_save(flags);
+ v->counter += i;
+ raw_local_irq_restore(flags);
#endif
}
@@ -90,11 +89,11 @@ static __inline__ void atomic_add(int i, atomic_t * v)
static __inline__ void atomic_sub(int i, atomic_t * v)
{
#ifdef CONFIG_CPU_HAS_LLSC
- int temp;
+ int temp;
smp_llsc_mb();
- __asm__ __volatile__(
+ __asm__ __volatile__(
"1: ll %0, %1 # atomic_sub \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -110,11 +109,11 @@ static __inline__ void atomic_sub(int i, atomic_t * v)
smp_llsc_mb();
#else
- unsigned long flags;
+ unsigned long flags;
- raw_local_irq_save(flags);
- v->counter -= i;
- raw_local_irq_restore(flags);
+ raw_local_irq_save(flags);
+ v->counter -= i;
+ raw_local_irq_restore(flags);
#endif
}
@@ -128,7 +127,7 @@ static __inline__ int atomic_add_return(int i, atomic_t * v)
int temp;
smp_llsc_mb();
- __asm__ __volatile__(
+ __asm__ __volatile__(
"1: ll %1, %2 # atomic_add_return \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -149,11 +148,11 @@ static __inline__ int atomic_add_return(int i, atomic_t * v)
int result;
unsigned long flags;
- raw_local_irq_save(flags);
- result = v->counter;
- result += i;
- v->counter = result;
- raw_local_irq_restore(flags);
+ raw_local_irq_save(flags);
+ result = v->counter;
+ result += i;
+ v->counter = result;
+ raw_local_irq_restore(flags);
#endif
return result;
@@ -167,7 +166,7 @@ static __inline__ int atomic_sub_return(int i, atomic_t * v)
smp_llsc_mb();
- __asm__ __volatile__(
+ __asm__ __volatile__(
"1: ll %1, %2 # atomic_sub_return \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -188,11 +187,11 @@ static __inline__ int atomic_sub_return(int i, atomic_t * v)
unsigned long flags;
int result;
- raw_local_irq_save(flags);
- result = v->counter;
- result -= i;
- v->counter = result;
- raw_local_irq_restore(flags);
+ raw_local_irq_save(flags);
+ result = v->counter;
+ result -= i;
+ v->counter = result;
+ raw_local_irq_restore(flags);
#endif
@@ -215,7 +214,7 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)
smp_llsc_mb();
- __asm__ __volatile__(
+ __asm__ __volatile__(
"1: ll %1, %2 # atomic_sub_if_positive\n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -240,12 +239,12 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)
unsigned long flags;
int result;
- raw_local_irq_save(flags);
- result = v->counter;
- result -= i;
- if (result >= 0)
- v->counter = result;
- raw_local_irq_restore(flags);
+ raw_local_irq_save(flags);
+ result = v->counter;
+ result -= i;
+ if (result >= 0)
+ v->counter = result;
+ raw_local_irq_restore(flags);
#endif
return result;
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/barrier.h b/target/linux/realtek/files/arch/rlx/include/asm/barrier.h
index 0d897ceae..8ae6695a6 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/barrier.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/barrier.h
@@ -74,7 +74,7 @@
: /* no input */ \
: "memory")
#else
-#define __sync() do { } while(0)
+#define __sync() __asm__ __volatile__("" : : :"memory")
#endif
#define __fast_iob() \
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/cmpxchg.h b/target/linux/realtek/files/arch/rlx/include/asm/cmpxchg.h
index dbf73e889..ea95fdb85 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/cmpxchg.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/cmpxchg.h
@@ -21,13 +21,10 @@
__asm__ __volatile__( \
" .set push \n" \
" .set noat \n" \
- " .set mips3 \n" \
"1: " ld " %0, %2 # __cmpxchg_asm \n" \
" nop \n" \
" bne %0, %z3, 2f \n" \
- " .set mips0 \n" \
" move $1, %z4 \n" \
- " .set mips3 \n" \
" " st " $1, %1 \n" \
" beqz $1, 3f \n" \
"2: \n" \
@@ -48,12 +45,9 @@
__asm__ __volatile__( \
" .set push \n" \
" .set noat \n" \
- " .set mips3 \n" \
"1: " ld " %0, %2 # __cmpxchg_asm \n" \
" bne %0, %z3, 2f \n" \
- " .set mips0 \n" \
" move $1, %z4 \n" \
- " .set mips3 \n" \
" " st " $1, %1 \n" \
" beqz $1, 3f \n" \
"2: \n" \
@@ -71,13 +65,13 @@
#define __cmpxchg_asm(ld, st, m, old, new) \
({ \
__typeof(*(m)) __ret; \
- unsigned long __flags; \
+ unsigned long __flags; \
\
- raw_local_irq_save(__flags); \
- __ret = *m; \
- if (__ret == old) \
- *m = new; \
- raw_local_irq_restore(__flags); \
+ raw_local_irq_save(__flags); \
+ __ret = *m; \
+ if (__ret == old) \
+ *m = new; \
+ raw_local_irq_restore(__flags); \
\
__ret; \
})
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/futex.h b/target/linux/realtek/files/arch/rlx/include/asm/futex.h
index bab40d064..17cdbc905 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/futex.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/futex.h
@@ -21,23 +21,19 @@
__asm__ __volatile__( \
" .set push \n" \
" .set noat \n" \
- " .set mips3 \n" \
- "1: ll %1, %4 # __futex_atomic_op \n" \
+ "1: ll %1, %4 # __futex_atomic_op \n" \
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n" \
#endif
- " .set mips0 \n" \
" " insn " \n" \
- " .set mips3 \n" \
- "2: sc $1, %2 \n" \
+ "2: sc $1, %2 \n" \
" beqz $1, 1b \n" \
__WEAK_LLSC_MB \
"3: \n" \
" .set pop \n" \
- " .set mips0 \n" \
" .section .fixup,\"ax\" \n" \
- "4: li %0, %6 \n" \
- " j 3b \n" \
+ "4: li %0, %6 \n" \
+ " j 3b \n" \
" .previous \n" \
" .section __ex_table,\"a\" \n" \
" "__UA_ADDR "\t1b, 4b \n" \
@@ -50,7 +46,7 @@
#else
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
{ \
- ret = -ENOSYS; \
+ ret = -ENOSYS; \
}
#endif
@@ -124,15 +120,12 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
"# futex_atomic_cmpxchg_inatomic \n"
" .set push \n"
" .set noat \n"
- " .set mips3 \n"
"1: ll %0, %2 \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
#endif
" bne %0, %z3, 3f \n"
- " .set mips0 \n"
" move $1, %z4 \n"
- " .set mips3 \n"
"2: sc $1, %1 \n"
" beqz $1, 1b \n"
__WEAK_LLSC_MB
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/local.h b/target/linux/realtek/files/arch/rlx/include/asm/local.h
index 889cc4a15..797a87e63 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/local.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/local.h
@@ -26,13 +26,11 @@ typedef struct
*/
static __inline__ long local_add_return(long i, local_t * l)
{
- unsigned long result;
-
#ifdef CONFIG_CPU_HAS_LLSC
- unsigned long temp;
+ unsigned long result;
+ unsigned long temp;
- __asm__ __volatile__(
- " .set mips3 \n"
+ __asm__ __volatile__(
"1: ll %1, %2 # local_add_return \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -41,18 +39,18 @@ static __inline__ long local_add_return(long i, local_t * l)
" sc %0, %2 \n"
" beqz %0, 1b \n"
" addu %0, %1, %3 \n"
- " .set mips0 \n"
: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
: "Ir" (i), "m" (l->a.counter)
: "memory");
#else
- unsigned long flags;
+ unsigned long result;
+ unsigned long flags;
- local_irq_save(flags);
- result = l->a.counter;
- result += i;
- l->a.counter = result;
- local_irq_restore(flags);
+ local_irq_save(flags);
+ result = l->a.counter;
+ result += i;
+ l->a.counter = result;
+ local_irq_restore(flags);
#endif
return result;
@@ -60,13 +58,11 @@ static __inline__ long local_add_return(long i, local_t * l)
static __inline__ long local_sub_return(long i, local_t * l)
{
- unsigned long result;
-
#ifdef CONFIG_CPU_HAS_LLSC
- unsigned long temp;
+ unsigned long result;
+ unsigned long temp;
- __asm__ __volatile__(
- " .set mips3 \n"
+ __asm__ __volatile__(
"1: ll %1, %2 # local_sub_return \n"
#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181) || defined(CONFIG_CPU_RLX5281)
" nop \n"
@@ -75,18 +71,18 @@ static __inline__ long local_sub_return(long i, local_t * l)
" sc %0, %2 \n"
" beqz %0, 1b \n"
" subu %0, %1, %3 \n"
- " .set mips0 \n"
: "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
: "Ir" (i), "m" (l->a.counter)
: "memory");
#else
- unsigned long flags;
+ unsigned long result;
+ unsigned long flags;
- local_irq_save(flags);
- result = l->a.counter;
- result -= i;
- l->a.counter = result;
- local_irq_restore(flags);
+ local_irq_save(flags);
+ result = l->a.counter;
+ result -= i;
+ l->a.counter = result;
+ local_irq_restore(flags);
#endif
return result;
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/processor.h b/target/linux/realtek/files/arch/rlx/include/asm/processor.h
index 909c7b868..b4644f7eb 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/processor.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/processor.h
@@ -65,9 +65,8 @@ static inline void cpu_wait(void)
* ==> only apply to RTL865X, it still need to check the WLAN throughput in RTL8196B
*/
-#ifdef CONFIG_RTL_8196C //michaelxxx
-#define CONFIG_RTL819X_SUSPEND_CHECK_INTERRUPT
-#ifdef CONFIG_RTL819X_SUSPEND_CHECK_INTERRUPT
+#if defined(CONFIG_RTL_8196C) || defined(CONFIG_RTL_819XD) || defined(CONFIG_RTL_8196E)
+#ifdef CONFIG_CPU_HAS_SLEEP
extern int cpu_can_suspend, cpu_can_suspend_check_init;
extern void suspend_check_interrupt_init(void);
@@ -80,8 +79,8 @@ static inline void cpu_wait(void)
suspend_check_interrupt_init();
cpu_can_suspend_check_init = 1;
}
-#endif //CONFIG_RTL819X_SUSPEND_CHECK_INTERRUPT
-#endif //CONFIG_RTL8196C
+#endif
+#endif
/* We stop the CPU to conserve power */
__cpu_wait();
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/spinlock.h b/target/linux/realtek/files/arch/rlx/include/asm/spinlock.h
index fc33c7878..996c825c9 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/spinlock.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/spinlock.h
@@ -63,6 +63,9 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock)
" .set noreorder \n"
" \n"
" ll %[ticket], %[ticket_ptr] \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
"1: addiu %[my_ticket], %[ticket], 0x4000 \n"
" sc %[my_ticket], %[ticket_ptr] \n"
" beqz %[my_ticket], 3f \n"
@@ -134,6 +137,9 @@ static inline unsigned int __raw_spin_trylock(raw_spinlock_t *lock)
" .set noreorder \n"
" \n"
" ll %[ticket], %[ticket_ptr] \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
"1: srl %[my_ticket], %[ticket], 14 \n"
" andi %[my_ticket], %[my_ticket], 0x1fff \n"
" andi %[now_serving], %[ticket], 0x1fff \n"
@@ -188,6 +194,9 @@ static inline void __raw_read_lock(raw_rwlock_t *rw)
__asm__ __volatile__(
" .set noreorder # __raw_read_lock \n"
"1: ll %1, %2 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bltz %1, 2f \n"
" addu %1, 1 \n"
" sc %1, %0 \n"
@@ -195,6 +204,9 @@ static inline void __raw_read_lock(raw_rwlock_t *rw)
" nop \n"
" .subsection 2 \n"
"2: ll %1, %2 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bltz %1, 2b \n"
" addu %1, 1 \n"
" b 1b \n"
@@ -220,6 +232,9 @@ static inline void __raw_read_unlock(raw_rwlock_t *rw)
__asm__ __volatile__(
" .set noreorder # __raw_read_unlock \n"
"1: ll %1, %2 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" sub %1, 1 \n"
" sc %1, %0 \n"
" beqz %1, 2f \n"
@@ -241,6 +256,9 @@ static inline void __raw_write_lock(raw_rwlock_t *rw)
__asm__ __volatile__(
" .set noreorder # __raw_write_lock \n"
"1: ll %1, %2 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bnez %1, 2f \n"
" lui %1, 0x8000 \n"
" sc %1, %0 \n"
@@ -248,6 +266,9 @@ static inline void __raw_write_lock(raw_rwlock_t *rw)
" nop \n"
" .subsection 2 \n"
"2: ll %1, %2 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bnez %1, 2b \n"
" lui %1, 0x8000 \n"
" b 1b \n"
@@ -282,6 +303,9 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw)
" .set noreorder # __raw_read_trylock \n"
" li %2, 0 \n"
"1: ll %1, %3 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bltz %1, 2f \n"
" addu %1, 1 \n"
" sc %1, %0 \n"
@@ -307,6 +331,9 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw)
" .set noreorder # __raw_write_trylock \n"
" li %2, 0 \n"
"1: ll %1, %3 \n"
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+ " nop \n"
+#endif
" bnez %1, 2f \n"
" lui %1, 0x8000 \n"
" sc %1, %0 \n"
diff --git a/target/linux/realtek/files/arch/rlx/include/asm/string.h b/target/linux/realtek/files/arch/rlx/include/asm/string.h
index a25225fda..4a587f74e 100644
--- a/target/linux/realtek/files/arch/rlx/include/asm/string.h
+++ b/target/linux/realtek/files/arch/rlx/include/asm/string.h
@@ -82,7 +82,7 @@ static __inline__ int strcmp(__const__ char *__cs, __const__ char *__ct)
"addiu\t%1,1\n\t"
"bnez\t%2,1b\n\t"
"lbu\t%2,(%0)\n\t"
-#if defined(CONFIG_CPU_RLX4180) || defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
"nop\n\t"
#endif
"move\t%2,$1\n"
@@ -115,7 +115,7 @@ strncmp(__const__ char *__cs, __const__ char *__ct, size_t __count)
"bnez\t%3,1b\n\t"
"addiu\t%1,1\n"
"2:\n\t"
-#if defined(CONFIG_CPU_RLX4180) || defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
+#if defined(CONFIG_CPU_RLX4181) || defined(CONFIG_CPU_RLX5181)
"nop\n\t"
#endif
"move\t%3,$1\n"
@@ -123,7 +123,7 @@ strncmp(__const__ char *__cs, __const__ char *__ct, size_t __count)
".set\tat\n\t"
".set\treorder"
: "=r" (__cs), "=r" (__ct), "=r" (__count), "=r" (__res)
- : "0" (__cs), "1" (__ct), "2" (__count), "m" (*__cs), "m" (*__ct));
+ : "0" (__cs), "1" (__ct), "2" (__count), "m" (*__cs), "m" (*__ct));
return __res;
}