1. 22 6月, 2015 2 次提交
    • J
      MIPS: R12000: Enable branch prediction global history · 8d5ded16
      Joshua Kinard 提交于
      The R12000 added a new feature to enhance branch prediction called
      "global history".  Per the Vr10000 Series User Manual (U10278EJ4V0UM),
      Coprocessor 0, Diagnostic Register (22):
      
      """
      If bit 26 is set, branch prediction uses all eight bits of the global
      history register.  If bit 26 is not set, then bits 25:23 specify a count
      of the number of bits of global history to be used. Thus if bits 26:23
      are all zero, global history is disabled.
      
      The global history contains a record of the taken/not-taken status of
      recently executed branches, and when used is XOR'ed with the PC of a
      branch being predicted to produce a hashed value for indexing the BPT.
      Some programs with small "working set of conditional branches" benefit
      significantly from the use of such hashing, some see slight performance
      degradation.
      """
      
      This patch enables global history on R12000 CPUs and up by setting bit
      26 in the branch prediction diagnostic register (CP0 $22) to '1'.  Bits
      25:23 are left alone so that all eight bits of the global history
      register are available for branch prediction.
      Signed-off-by: NJoshua Kinard <kumba@gentoo.org>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      8d5ded16
    • J
      MIPS: mipsregs.h: Add EntryLo bit definitions · 8ab6abcb
      James Hogan 提交于
      Add definitions for EntryLo register bits in mipsregs.h. The R4000
      compatible ones are prefixed MIPS_ENTRYLO_ and the R3000 compatible ones
      are prefixed R3K_ENTRYLO_.
      
      These will be used in later patches.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: linux-mips@linux-mips.org
      Cc: Maciej W. Rozycki <macro@linux-mips.org>
      Patchwork: https://patchwork.linux-mips.org/patch/10073/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      8ab6abcb
  2. 08 4月, 2015 6 次提交
  3. 31 3月, 2015 2 次提交
  4. 20 2月, 2015 1 次提交
  5. 17 2月, 2015 2 次提交
  6. 31 1月, 2015 1 次提交
    • J
      MIPS: mipsregs.h: Add write_32bit_cp1_register() · 5e32033e
      James Hogan 提交于
      Add a write_32bit_cp1_register() macro to compliment the
      read_32bit_cp1_register() macro. This is to abstract whether .set
      hardfloat needs to be used based on GAS_HAS_SET_HARDFLOAT.
      
      The implementation of _read_32bit_cp1_register() .sets mips1 due to
      failure of gas v2.19 to assemble cfc1 for Octeon (see commit
      25c30003 ("MIPS: Override assembler target architecture for
      octeon.")). I haven't copied this over to _write_32bit_cp1_register() as
      I'm uncertain whether it applies to ctc1 too, or whether anybody cares
      about that version of binutils any longer.
      Signed-off-by: NJames Hogan <james.hogan@imgtec.com>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Paul Burton <paul.burton@imgtec.com>
      Cc: David Daney <david.daney@cavium.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/9172/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      5e32033e
  7. 25 11月, 2014 1 次提交
  8. 24 11月, 2014 2 次提交
  9. 07 11月, 2014 1 次提交
    • M
      MIPS: Fix build with binutils 2.24.51+ · 842dfc11
      Manuel Lauss 提交于
      Starting with version 2.24.51.20140728 MIPS binutils complain loudly
      about mixing soft-float and hard-float object files, leading to this
      build failure since GCC is invoked with "-msoft-float" on MIPS:
      
      {standard input}: Warning: .gnu_attribute 4,3 requires `softfloat'
        LD      arch/mips/alchemy/common/built-in.o
      mipsel-softfloat-linux-gnu-ld: Warning: arch/mips/alchemy/common/built-in.o
       uses -msoft-float (set by arch/mips/alchemy/common/prom.o),
       arch/mips/alchemy/common/sleeper.o uses -mhard-float
      
      To fix this, we detect if GAS is new enough to support "-msoft-float" command
      option, and if it does, we can let GCC pass it to GAS;  but then we also need
      to sprinkle the files which make use of floating point registers with the
      necessary ".set hardfloat" directives.
      Signed-off-by: NManuel Lauss <manuel.lauss@gmail.com>
      Cc: Linux-MIPS <linux-mips@linux-mips.org>
      Cc: Matthew Fortune <Matthew.Fortune@imgtec.com>
      Cc: Markos Chandras <Markos.Chandras@imgtec.com>
      Cc: Maciej W. Rozycki <macro@linux-mips.org>
      Patchwork: https://patchwork.linux-mips.org/patch/8355/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      842dfc11
  10. 02 8月, 2014 4 次提交
  11. 31 5月, 2014 1 次提交
  12. 24 5月, 2014 1 次提交
    • R
      MIPS: MT: Remove SMTC support · b633648c
      Ralf Baechle 提交于
      Nobody is maintaining SMTC anymore and there also seems to be no userbase.
      Which is a pity - the SMTC technology primarily developed by Kevin D.
      Kissell <kevink@paralogos.com> is an ingenious demonstration for the MT
      ASE's power and elegance.
      
      Based on Markos Chandras <Markos.Chandras@imgtec.com> patch
      https://patchwork.linux-mips.org/patch/6719/ which while very similar did
      no longer apply cleanly when I tried to merge it plus some additional
      post-SMTC cleanup - SMTC was a feature as tricky to remove as it was to
      merge once upon a time.
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      b633648c
  13. 23 5月, 2014 1 次提交
  14. 27 3月, 2014 1 次提交
  15. 07 3月, 2014 3 次提交
  16. 23 1月, 2014 5 次提交
  17. 19 9月, 2013 1 次提交
  18. 01 7月, 2013 1 次提交
  19. 09 5月, 2013 1 次提交
  20. 02 5月, 2013 1 次提交
  21. 20 3月, 2013 1 次提交
    • F
      MIPS: Fix code generation for non-DSP capable CPUs · 63c2b681
      Florian Fainelli 提交于
      Commit 32a7ede6 (MIPS: dsp: Add assembler support for DSP ASEs) has
      enabled the use of DSP ASE specific instructions such as rddsp and wrdsp
      under the idea that all code path that will make use of these two
      instructions are properly checking for cpu_has_dsp to ensure that the
      particular CPU we are running on *actually* supports DSP ASE.
      
      This commit actually causes the following oops on QEMU Malta emulating a
      MIPS 24Kc without the DSP ASE implemented:
      
      [    7.960000] Reserved instruction in kernel
      [    7.960000] Cpu 0
      [    7.960000] $ 0   : 00000000 00000000 00000014 00000005
      [    7.960000] $ 4   : 8fc2de48 00000001 00000000 8f59ddb0
      [    7.960000] $ 8   : 8f5ceec4 00000018 00000c00 00800000
      [    7.960000] $12   : 00000100 00000200 00000000 00457b84
      [    7.960000] $16   : 00000000 8fc2ba78 8f4ec980 00000001
      [    7.960000] $20   : 80418f90 00000000 00000000 000002dd
      [    7.960000] $24   : 0000009c 7730d7b8
      [    7.960000] $28   : 8f59c000 8f59dd38 00000001 80104248
      [    7.960000] Hi    : 0000001d
      [    7.960000] Lo    : 0000000b
      [    7.960000] epc   : 801041ec thread_saved_pc+0x2c/0x38
      [    7.960000]     Not tainted
      [    7.960000] ra    : 80104248 get_wchan+0x48/0xac
      [    7.960000] Status: 1000b703    KERNEL EXL IE
      [    7.960000] Cause : 10800028
      [    7.960000] PrId  : 00019300 (MIPS 24Kc)
      [    7.960000] Modules linked in:
      [    7.960000] Process killall (pid: 1574, threadinfo=8f59c000,
      task=8fd14558, tls=773aa440)
      [    7.960000] Stack : 8fc2ba78 8012b008 0000000c 0000001d 00000000
      00000000 8f58a380
                        8f58a380 8fc2ba78 80202668 8f59de78 8f468600 8f59de28
      801b2a3c 8f59df00 8f98ba20 74696e69
                        8f468600 8f59de28 801b7308 0081c007 00000000 00000000
      00000000 00000000 00000000 00000000
                        00000000 8fc2bbb4 00000001 0000001d 0000000b 77f038cc
      7fe80648 ffffffff ffffffff 00000000
                        00000001 0016e000 00000000 ...
      [    7.960000] Call Trace:
      [    7.960000] [<801041ec>] thread_saved_pc+0x2c/0x38
      [    7.960000] [<80104248>] get_wchan+0x48/0xac
      
      The disassembly of thread_saved_pc points to the following:
      000006d0 <thread_saved_pc>:
       6d0:   8c820208        lw      v0,520(a0)
       6d4:   3c030000        lui     v1,0x0
       6d8:   24630000        addiu   v1,v1,0
       6dc:   10430008        beq     v0,v1,700 <thread_saved_pc+0x30>
       6e0:   00000000        nop
       6e4:   3c020000        lui     v0,0x0
       6e8:   8c43000c        lw      v1,12(v0)
       6ec:   04620004        bltzl   v1,700 <thread_saved_pc+0x30>
       6f0:   00001021        move    v0,zero
       6f4:   8c840200        lw      a0,512(a0)
       6f8:   00031080        sll     v0,v1,0x2
       6fc:   7c44100a        lwx     v0,a0(v0)   <------------
       700:   03e00008        jr      ra
       704:   00000000        nop
      
      If we specifically disable -mdsp/-mdspr2 for arch/mips/kernel/process.o,
      we get the following (non-crashing) assembly:
      
      00000708 <thread_saved_pc>:
       708:   8c820208        lw      v0,520(a0)
       70c:   3c030000        lui     v1,0x0
       710:   24630000        addiu   v1,v1,0
       714:   10430009        beq     v0,v1,73c <thread_saved_pc+0x34>
       718:   00000000        nop
       71c:   3c020000        lui     v0,0x0
       720:   8c42000c        lw      v0,12(v0)
       724:   04420005        bltzl   v0,73c <thread_saved_pc+0x34>
       728:   00001021        move    v0,zero
       72c:   8c830200        lw      v1,512(a0)
       730:   00021080        sll     v0,v0,0x2
       734:   00431021        addu    v0,v0,v1
       738:   8c420000        lw      v0,0(v0)
       73c:   03e00008        jr      ra
       740:   00000000        nop
      
      The specific line that leads a different assembly being produced is:
      
      unsigned long thread_saved_pc(struct task_struct *tsk)
      ...
      	return ((unsigned long *)t->reg29)[schedule_mfi.pc_offset]; <---
      
      The problem here is that the compiler was given the right to use DSP
      instructions with the -mdsp / -mdspr2 command-line switches and
      performed some optimization for us and used DSP ASE instructions where
      we are not checking that the running CPU actually supports DSP ASE.
      
      This patch fixes the issue by partially reverting commit 32a7ede6 for
      arch/mips/kernel/Makefile in order to remove the -mdsp / -mdspr2
      compiler command-line switches such that we are now guaranteed that the
      compiler will not optimize using DSP ASE reserved instructions. We also
      need to fixup the rddsp/wrdsp and m{t,h}{hi,lo}{0,1,2,3} macros in
      arch/mips/include/asm/mipsregs.h to tell the assembler that we are going
      to explicitely use DSP ASE reserved instructions. The comment in
      arch/mips/kernel/Makefile is also updated to reflect that.
      Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
      Acked-by: NSteven J. Hill <Steven.Hill@imgtec.com>
      Cc: linux-mips@linux-mips.org
      Cc: blogic@openwrt.org
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      63c2b681
  22. 19 2月, 2013 1 次提交