lkml.org 
[lkml]   [2018]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/5] Extract FPU context operations from entry.S
    Date
    We move __fstate_save and __fstate_restore to a new source
    file, fpu.S.

    Signed-off-by: Alan Kao <alankao@andestech.com>
    Cc: Greentime Hu <greentime@andestech.com>
    Cc: Vincent Chen <vincentc@andestech.com>
    Cc: Zong Li <zong@andestech.com>
    Cc: Nick Hu <nickhu@andestech.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    arch/riscv/kernel/Makefile | 1 +
    arch/riscv/kernel/entry.S | 87 ------------------------------
    arch/riscv/kernel/fpu.S | 106 +++++++++++++++++++++++++++++++++++++
    3 files changed, 107 insertions(+), 87 deletions(-)
    create mode 100644 arch/riscv/kernel/fpu.S

    diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile
    index e1274fc03af4..bd433efd915e 100644
    --- a/arch/riscv/kernel/Makefile
    +++ b/arch/riscv/kernel/Makefile
    @@ -13,6 +13,7 @@ extra-y += vmlinux.lds
    obj-y += cpu.o
    obj-y += cpufeature.o
    obj-y += entry.o
    +obj-y += fpu.o
    obj-y += irq.o
    obj-y += process.o
    obj-y += ptrace.o
    diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S
    index 9aaf6c986771..edcd5920ee4e 100644
    --- a/arch/riscv/kernel/entry.S
    +++ b/arch/riscv/kernel/entry.S
    @@ -357,93 +357,6 @@ ENTRY(__switch_to)
    ret
    ENDPROC(__switch_to)

    -ENTRY(__fstate_save)
    - li a2, TASK_THREAD_F0
    - add a0, a0, a2
    - li t1, SR_FS
    - csrs sstatus, t1
    - frcsr t0
    - fsd f0, TASK_THREAD_F0_F0(a0)
    - fsd f1, TASK_THREAD_F1_F0(a0)
    - fsd f2, TASK_THREAD_F2_F0(a0)
    - fsd f3, TASK_THREAD_F3_F0(a0)
    - fsd f4, TASK_THREAD_F4_F0(a0)
    - fsd f5, TASK_THREAD_F5_F0(a0)
    - fsd f6, TASK_THREAD_F6_F0(a0)
    - fsd f7, TASK_THREAD_F7_F0(a0)
    - fsd f8, TASK_THREAD_F8_F0(a0)
    - fsd f9, TASK_THREAD_F9_F0(a0)
    - fsd f10, TASK_THREAD_F10_F0(a0)
    - fsd f11, TASK_THREAD_F11_F0(a0)
    - fsd f12, TASK_THREAD_F12_F0(a0)
    - fsd f13, TASK_THREAD_F13_F0(a0)
    - fsd f14, TASK_THREAD_F14_F0(a0)
    - fsd f15, TASK_THREAD_F15_F0(a0)
    - fsd f16, TASK_THREAD_F16_F0(a0)
    - fsd f17, TASK_THREAD_F17_F0(a0)
    - fsd f18, TASK_THREAD_F18_F0(a0)
    - fsd f19, TASK_THREAD_F19_F0(a0)
    - fsd f20, TASK_THREAD_F20_F0(a0)
    - fsd f21, TASK_THREAD_F21_F0(a0)
    - fsd f22, TASK_THREAD_F22_F0(a0)
    - fsd f23, TASK_THREAD_F23_F0(a0)
    - fsd f24, TASK_THREAD_F24_F0(a0)
    - fsd f25, TASK_THREAD_F25_F0(a0)
    - fsd f26, TASK_THREAD_F26_F0(a0)
    - fsd f27, TASK_THREAD_F27_F0(a0)
    - fsd f28, TASK_THREAD_F28_F0(a0)
    - fsd f29, TASK_THREAD_F29_F0(a0)
    - fsd f30, TASK_THREAD_F30_F0(a0)
    - fsd f31, TASK_THREAD_F31_F0(a0)
    - sw t0, TASK_THREAD_FCSR_F0(a0)
    - csrc sstatus, t1
    - ret
    -ENDPROC(__fstate_save)
    -
    -ENTRY(__fstate_restore)
    - li a2, TASK_THREAD_F0
    - add a0, a0, a2
    - li t1, SR_FS
    - lw t0, TASK_THREAD_FCSR_F0(a0)
    - csrs sstatus, t1
    - fld f0, TASK_THREAD_F0_F0(a0)
    - fld f1, TASK_THREAD_F1_F0(a0)
    - fld f2, TASK_THREAD_F2_F0(a0)
    - fld f3, TASK_THREAD_F3_F0(a0)
    - fld f4, TASK_THREAD_F4_F0(a0)
    - fld f5, TASK_THREAD_F5_F0(a0)
    - fld f6, TASK_THREAD_F6_F0(a0)
    - fld f7, TASK_THREAD_F7_F0(a0)
    - fld f8, TASK_THREAD_F8_F0(a0)
    - fld f9, TASK_THREAD_F9_F0(a0)
    - fld f10, TASK_THREAD_F10_F0(a0)
    - fld f11, TASK_THREAD_F11_F0(a0)
    - fld f12, TASK_THREAD_F12_F0(a0)
    - fld f13, TASK_THREAD_F13_F0(a0)
    - fld f14, TASK_THREAD_F14_F0(a0)
    - fld f15, TASK_THREAD_F15_F0(a0)
    - fld f16, TASK_THREAD_F16_F0(a0)
    - fld f17, TASK_THREAD_F17_F0(a0)
    - fld f18, TASK_THREAD_F18_F0(a0)
    - fld f19, TASK_THREAD_F19_F0(a0)
    - fld f20, TASK_THREAD_F20_F0(a0)
    - fld f21, TASK_THREAD_F21_F0(a0)
    - fld f22, TASK_THREAD_F22_F0(a0)
    - fld f23, TASK_THREAD_F23_F0(a0)
    - fld f24, TASK_THREAD_F24_F0(a0)
    - fld f25, TASK_THREAD_F25_F0(a0)
    - fld f26, TASK_THREAD_F26_F0(a0)
    - fld f27, TASK_THREAD_F27_F0(a0)
    - fld f28, TASK_THREAD_F28_F0(a0)
    - fld f29, TASK_THREAD_F29_F0(a0)
    - fld f30, TASK_THREAD_F30_F0(a0)
    - fld f31, TASK_THREAD_F31_F0(a0)
    - fscsr t0
    - csrc sstatus, t1
    - ret
    -ENDPROC(__fstate_restore)
    -
    -
    .section ".rodata"
    /* Exception vector table */
    ENTRY(excp_vect_table)
    diff --git a/arch/riscv/kernel/fpu.S b/arch/riscv/kernel/fpu.S
    new file mode 100644
    index 000000000000..1defb0618aff
    --- /dev/null
    +++ b/arch/riscv/kernel/fpu.S
    @@ -0,0 +1,106 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +/*
    + * Copyright (C) 2012 Regents of the University of California
    + * Copyright (C) 2017 SiFive
    + *
    + * This program is free software; you can redistribute it and/or
    + * modify it under the terms of the GNU General Public License
    + * as published by the Free Software Foundation, version 2.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    + * GNU General Public License for more details.
    + */
    +
    +#include <linux/linkage.h>
    +
    +#include <asm/asm.h>
    +#include <asm/csr.h>
    +#include <asm/asm-offsets.h>
    +
    +ENTRY(__fstate_save)
    + li a2, TASK_THREAD_F0
    + add a0, a0, a2
    + li t1, SR_FS
    + csrs sstatus, t1
    + frcsr t0
    + fsd f0, TASK_THREAD_F0_F0(a0)
    + fsd f1, TASK_THREAD_F1_F0(a0)
    + fsd f2, TASK_THREAD_F2_F0(a0)
    + fsd f3, TASK_THREAD_F3_F0(a0)
    + fsd f4, TASK_THREAD_F4_F0(a0)
    + fsd f5, TASK_THREAD_F5_F0(a0)
    + fsd f6, TASK_THREAD_F6_F0(a0)
    + fsd f7, TASK_THREAD_F7_F0(a0)
    + fsd f8, TASK_THREAD_F8_F0(a0)
    + fsd f9, TASK_THREAD_F9_F0(a0)
    + fsd f10, TASK_THREAD_F10_F0(a0)
    + fsd f11, TASK_THREAD_F11_F0(a0)
    + fsd f12, TASK_THREAD_F12_F0(a0)
    + fsd f13, TASK_THREAD_F13_F0(a0)
    + fsd f14, TASK_THREAD_F14_F0(a0)
    + fsd f15, TASK_THREAD_F15_F0(a0)
    + fsd f16, TASK_THREAD_F16_F0(a0)
    + fsd f17, TASK_THREAD_F17_F0(a0)
    + fsd f18, TASK_THREAD_F18_F0(a0)
    + fsd f19, TASK_THREAD_F19_F0(a0)
    + fsd f20, TASK_THREAD_F20_F0(a0)
    + fsd f21, TASK_THREAD_F21_F0(a0)
    + fsd f22, TASK_THREAD_F22_F0(a0)
    + fsd f23, TASK_THREAD_F23_F0(a0)
    + fsd f24, TASK_THREAD_F24_F0(a0)
    + fsd f25, TASK_THREAD_F25_F0(a0)
    + fsd f26, TASK_THREAD_F26_F0(a0)
    + fsd f27, TASK_THREAD_F27_F0(a0)
    + fsd f28, TASK_THREAD_F28_F0(a0)
    + fsd f29, TASK_THREAD_F29_F0(a0)
    + fsd f30, TASK_THREAD_F30_F0(a0)
    + fsd f31, TASK_THREAD_F31_F0(a0)
    + sw t0, TASK_THREAD_FCSR_F0(a0)
    + csrc sstatus, t1
    + ret
    +ENDPROC(__fstate_save)
    +
    +ENTRY(__fstate_restore)
    + li a2, TASK_THREAD_F0
    + add a0, a0, a2
    + li t1, SR_FS
    + lw t0, TASK_THREAD_FCSR_F0(a0)
    + csrs sstatus, t1
    + fld f0, TASK_THREAD_F0_F0(a0)
    + fld f1, TASK_THREAD_F1_F0(a0)
    + fld f2, TASK_THREAD_F2_F0(a0)
    + fld f3, TASK_THREAD_F3_F0(a0)
    + fld f4, TASK_THREAD_F4_F0(a0)
    + fld f5, TASK_THREAD_F5_F0(a0)
    + fld f6, TASK_THREAD_F6_F0(a0)
    + fld f7, TASK_THREAD_F7_F0(a0)
    + fld f8, TASK_THREAD_F8_F0(a0)
    + fld f9, TASK_THREAD_F9_F0(a0)
    + fld f10, TASK_THREAD_F10_F0(a0)
    + fld f11, TASK_THREAD_F11_F0(a0)
    + fld f12, TASK_THREAD_F12_F0(a0)
    + fld f13, TASK_THREAD_F13_F0(a0)
    + fld f14, TASK_THREAD_F14_F0(a0)
    + fld f15, TASK_THREAD_F15_F0(a0)
    + fld f16, TASK_THREAD_F16_F0(a0)
    + fld f17, TASK_THREAD_F17_F0(a0)
    + fld f18, TASK_THREAD_F18_F0(a0)
    + fld f19, TASK_THREAD_F19_F0(a0)
    + fld f20, TASK_THREAD_F20_F0(a0)
    + fld f21, TASK_THREAD_F21_F0(a0)
    + fld f22, TASK_THREAD_F22_F0(a0)
    + fld f23, TASK_THREAD_F23_F0(a0)
    + fld f24, TASK_THREAD_F24_F0(a0)
    + fld f25, TASK_THREAD_F25_F0(a0)
    + fld f26, TASK_THREAD_F26_F0(a0)
    + fld f27, TASK_THREAD_F27_F0(a0)
    + fld f28, TASK_THREAD_F28_F0(a0)
    + fld f29, TASK_THREAD_F29_F0(a0)
    + fld f30, TASK_THREAD_F30_F0(a0)
    + fld f31, TASK_THREAD_F31_F0(a0)
    + fscsr t0
    + csrc sstatus, t1
    + ret
    +ENDPROC(__fstate_restore)
    --
    2.18.0
    \
     
     \ /
      Last update: 2018-08-08 05:27    [W:2.215 / U:2.864 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site