2db4bc3418
With CPU_DADDI_WORKAROUNDS enabled __delay assembles with a macro in a branch delay slot: {standard input}: Assembler messages: {standard input}:18: Warning: Macro instruction expanded into multiple instructions in a branch delay slot and broken code results: 0000000000000000 <__delay>: 0: 1480ffff bnez a0,0 <__delay> 4: 24010001 li at,1 8: 0081202f dsubu a0,a0,at c: 03e00008 jr ra 10: 00000000 nop 14: 00000000 nop Consequently the function loops indefinitely, showing up prominently as a hang in the delay loop calibration at bootstrap. This change corrects the problem by forcing the immediate 1 into a register while keeping code produced identical where CPU_DADDI_WORKAROUNDS is disabled. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/6669/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
||
---|---|---|
.. | ||
ashldi3.c | ||
ashrdi3.c | ||
bitops.c | ||
cmpdi2.c | ||
csum_partial.S | ||
delay.c | ||
dump_tlb.c | ||
iomap-pci.c | ||
iomap.c | ||
libgcc.h | ||
lshrdi3.c | ||
Makefile | ||
memcpy.S | ||
memset.S | ||
mips-atomic.c | ||
r3k_dump_tlb.c | ||
strlen_user.S | ||
strncpy_user.S | ||
strnlen_user.S | ||
ucmpdi2.c | ||
uncached.c |