MIPS: BMIPS: Fix compilation for BMIPS5000
Commit 02b849f761
("MIPS: Get rid of the
use of .macro in C code.") replaced the macro usage but missed
the accessors in bmips.h, causing the following build error:
CC arch/mips/kernel/smp-bmips.o
{standard input}: Assembler messages:
{standard input}:951: Error: Unrecognized opcode `_ssnop'
{standard input}:952: Error: Unrecognized opcode `_ssnop'
(...)
make[6]: *** [arch/mips/kernel/smp-bmips.o] Error 1
Fix by rewriting the inline assembler using existing inline functions.
The generated code should stay unchanged.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/5644/
Reviewed-by: Jonas Gorski <jogo@openwrt.org>
This commit is contained in:
parent
7848ea7902
commit
43d3093903
|
@ -65,44 +65,33 @@ static inline unsigned long bmips_read_zscm_reg(unsigned int offset)
|
|||
{
|
||||
unsigned long ret;
|
||||
|
||||
__asm__ __volatile__(
|
||||
".set push\n"
|
||||
".set noreorder\n"
|
||||
"cache %1, 0(%2)\n"
|
||||
"sync\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"mfc0 %0, $28, 3\n"
|
||||
"_ssnop\n"
|
||||
".set pop\n"
|
||||
: "=&r" (ret)
|
||||
: "i" (Index_Load_Tag_S), "r" (ZSCM_REG_BASE + offset)
|
||||
: "memory");
|
||||
barrier();
|
||||
cache_op(Index_Load_Tag_S, ZSCM_REG_BASE + offset);
|
||||
__sync();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
ret = read_c0_ddatalo();
|
||||
_ssnop();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void bmips_write_zscm_reg(unsigned int offset, unsigned long data)
|
||||
{
|
||||
__asm__ __volatile__(
|
||||
".set push\n"
|
||||
".set noreorder\n"
|
||||
"mtc0 %0, $28, 3\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"cache %1, 0(%2)\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
"_ssnop\n"
|
||||
: /* no outputs */
|
||||
: "r" (data),
|
||||
"i" (Index_Store_Tag_S), "r" (ZSCM_REG_BASE + offset)
|
||||
: "memory");
|
||||
write_c0_ddatalo(data);
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
cache_op(Index_Store_Tag_S, ZSCM_REG_BASE + offset);
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
_ssnop();
|
||||
barrier();
|
||||
}
|
||||
|
||||
#endif /* !defined(__ASSEMBLY__) */
|
||||
|
|
Loading…
Reference in New Issue