1. 13 5月, 2014 1 次提交
    • M
      MIPS: __delay CPU_DADDI_WORKAROUNDS bug fix · 2db4bc34
      Maciej W. Rozycki 提交于
      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: NMaciej W. Rozycki <macro@linux-mips.org>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/6669/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      2db4bc34
  2. 01 2月, 2013 1 次提交
  3. 22 1月, 2013 1 次提交
  4. 17 10月, 2012 1 次提交
    • D
      MIPS: Make __{,n,u}delay declarations match definitions and generic delay.h · 5210edcd
      David Daney 提交于
      At some recent point arch/mips/include/asm/delay.h has started being
      included into csrc-octeon.c where the __?delay() functions are defined.
      This causes a compile failure due to conflicting declarations and
      definitions of the functions.
      
      It turns out that the generic definitions in arch/mips/lib/delay.c also
      conflict.
      
      Proposed fix: Declare the functions to take unsigned long parameters
      just like asm-generic (and x86) does.  Update __delay to agree
      (__ndelay and __udelay need no change).
      
      Bonus: Get rid of 'inline' from __delay() definition, as it is globally
      visible, and the compiler should be making this decision itself (it does
      in fact inline the function without being told to).
      Signed-off-by: NDavid Daney <david.daney@cavium.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/4354/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      5210edcd
  5. 13 4月, 2010 1 次提交
    • R
      MIPS: delay: Fix use of current_cpu_data in preemptable code. · abe5b417
      Ralf Baechle 提交于
      This may lead to warnings like:
      
      BUG: using smp_processor_id() in preemptible [00000000] code: reboot/1989
      caller is __udelay+0x14/0x70
      Call Trace:
      [<ffffffff8110ad28>] dump_stack+0x8/0x34
      [<ffffffff812dde04>] debug_smp_processor_id+0xf4/0x110
      [<ffffffff812d90bc>] __udelay+0x14/0x70
      [<ffffffff81378274>] md_notify_reboot+0x12c/0x148
      [<ffffffff81161054>] notifier_call_chain+0x64/0xc8
      [<ffffffff811614dc>] __blocking_notifier_call_chain+0x64/0xc0
      [<ffffffff8115566c>] kernel_restart_prepare+0x1c/0x38
      [<ffffffff811556cc>] kernel_restart+0x14/0x50
      [<ffffffff8115581c>] SyS_reboot+0x10c/0x1f0
      [<ffffffff81103684>] handle_sysn32+0x44/0x84
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      abe5b417
  6. 17 6月, 2009 1 次提交
  7. 08 6月, 2009 1 次提交
    • R
      MIPS: Outline udelay and fix a few issues. · 5636919b
      Ralf Baechle 提交于
      Outlining fixes the issue were on certain CPUs such as the R10000 family
      the delay loop would need an extra cycle if it overlaps a cacheline
      boundary.
      
      The rewrite also fixes build errors with GCC 4.4 which was changed in
      way incompatible with the kernel's inline assembly.
      
      Relying on pure C for computation of the delay value removes the need for
      explicit.  The price we pay is a slight slowdown of the computation - to
      be fixed on another day.
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      5636919b