29 Nov, 2010

1 commit


02 Sep, 2010

1 commit


20 Aug, 2009

1 commit

  • The kernel uses SPRG registers for various purposes, typically in
    low level assembly code as scratch registers or to hold per-cpu
    global infos such as the PACA or the current thread_info pointer.

    We want to be able to easily shuffle the usage of those registers
    as some implementations have specific constraints realted to some
    of them, for example, some have userspace readable aliases, etc..
    and the current choice isn't always the best.

    This patch should not change any code generation, and replaces the
    usage of SPRN_SPRGn everywhere in the kernel with a named replacement
    and adds documentation next to the definition of the names as to
    what those are used for on each processor family.

    The only parts that still use the original numbers are bits of KVM
    or suspend/resume code that just blindly needs to save/restore all
    the SPRGs.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

07 Apr, 2009

1 commit

  • When we call giveup_fpu, we need to need to turn off VSX for the
    current process. If we don't, on return to userspace it may execute a
    VSX instruction before the next FP instruction, and not have its
    register state refreshed correctly from the thread_struct. Ditto for
    altivec.

    This caused a bug where an unaligned lfs or stfs results in
    fix_alignment calling giveup_fpu so it can use the FPRs (in order to
    do a single double conversion), and then returning to userspace
    with FP off but VSX on. Then if a VSX instruction is executed, before
    another FP instruction, it will proceed without another exception and
    hence have the incorrect register state for VSX registers 0-31.

    lfs unaligned
    Signed-off-by: Paul Mackerras

    Michael Neuling
     

01 Jul, 2008

3 commits

  • This patch extends the floating point save and restore code to use the
    VSX load/stores when VSX is available. This will make FP context
    save/restore marginally slower on FP only code, when VSX is available,
    as it has to load/store 128bits rather than just 64bits.

    Mixing FP, VMX and VSX code will get constant architected state.

    The signals interface is extended to enable access to VSR 0-31
    doubleword 1 after discussions with tool chain maintainers. Backward
    compatibility is maintained.

    The ptrace interface is also extended to allow access to VSR 0-31 full
    registers.

    Signed-off-by: Michael Neuling
    Signed-off-by: Paul Mackerras

    Michael Neuling
     
  • This adds the macros for the VSX load/store instruction as most
    binutils are not going to support this for a while.

    Also add VSX register save/restore macros and vsr[0-63] register definitions.

    Signed-off-by: Michael Neuling
    Signed-off-by: Paul Mackerras

    Michael Neuling
     
  • Make load_up_fpu and load_up_altivec callable so they can be reused by
    the VSX code.

    Signed-off-by: Michael Neuling
    Signed-off-by: Paul Mackerras

    Michael Neuling
     

30 Aug, 2006

1 commit


01 Jul, 2006

1 commit


15 Jun, 2006

1 commit

  • Forthcoming machines will extend the FPSCR to 64 bits. We already
    had a 64-bit save area for the FPSCR, but we need to use a new form
    of the mtfsf instruction. Fortunately this new form is decoded as
    an ordinary mtfsf by existing 64-bit processors.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Paul Mackerras

    Anton Blanchard
     

07 Feb, 2006

1 commit


13 Jan, 2006

1 commit

  • This patch consolidates the variety of macros used for loading 32 or
    64-bit constants in assembler (LOADADDR, LOADBASE, SET_REG_TO_*). The
    idea is to make the set of macros consistent across 32 and 64 bit and
    to make it more obvious which is the appropriate one to use in a given
    situation. The new macros and their semantics are described in the
    comments in ppc_asm.h.

    In the process, we change several places that were unnecessarily using
    immediate loads on ppc64 to use the GOT/TOC. Likewise we cleanup a
    couple of places where we were clumsily subtracting PAGE_OFFSET with
    asm instructions to use assemble-time arithmetic or the toreal() macro
    instead.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

10 Nov, 2005

1 commit

  • This patch consolidates macros used to generate assembly for
    compatibility across different CPUs or configs. A new header,
    asm-powerpc/asm-compat.h contains the main compatibility macros. It
    uses some preprocessor magic to make the macros suitable both for use
    in .S files, and in inline asm in .c files. Headers (bitops.h,
    uaccess.h, atomic.h, bug.h) which had their own such compatibility
    macros are changed to use asm-compat.h.

    ppc_asm.h is now for use in .S files *only*, and a #error enforces
    that. As such, we're a lot more careless about namespace pollution
    here than in asm-compat.h.

    While we're at it, this patch adds a call to the PPC405_ERR77 macro in
    futex.h which should have had it already, but didn't.

    Built and booted on pSeries, Maple and iSeries (ARCH=powerpc). Built
    for 32-bit powermac (ARCH=powerpc) and Walnut (ARCH=ppc).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

27 Oct, 2005

2 commits

  • On 32-bit platforms, these convert from kernel virtual addresses
    to real (physical addresses), like tophys/tovirt but they use
    the same register for the source and destination. On 64-bit
    platforms, they do nothing because the hardware ignores the top
    two bits of the address in real mode.

    These new macros are used in fpu.S now.

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     
  • The recent merge of fpu.S broken the handling of fpscr for
    ARCH=powerpc and CONFIG_PPC64=y. FP registers could be corrupted,
    leading to strange random application crashes.

    The confusion arises, because the thread_struct has (and requires) a
    64-bit area to save the fpscr, because we use load/store double
    instructions to get it in to/out of the FPU. However, only the low
    32-bits are actually used, so we want to treat it as a 32-bit quantity
    when manipulating its bits to avoid extra load/stores on 32-bit. This
    patch replaces the current definition with a structure of two 32-bit
    quantities (pad and val), to clarify things as much as is possible.
    The 'val' field is used when manipulating bits, the structure itself
    is used when obtaining the address for loading/unloading the value
    from the FPU.

    While we're at it, consolidate the 4 (!) almost identical versions of
    cvt_fd() and cvt_df() (arch/ppc/kernel/misc.S,
    arch/ppc64/kernel/misc.S, arch/powerpc/kernel/misc_32.S,
    arch/powerpc/kernel/misc_64.S) into a single version in fpu.S. The
    new version takes a pointer to thread_struct and applies the correct
    offset itself, rather than a pointer to the fpscr field itself, again
    to avoid confusion as to which is the correct field to use.

    Finally, this patch makes ARCH=ppc64 also use the consolidated fpu.S
    code, which it previously did not.

    Built for G5 (ARCH=ppc64 and ARCH=powerpc), 32-bit powermac (ARCH=ppc
    and ARCH=powerpc) and Walnut (ARCH=ppc, CONFIG_MATH_EMULATION=y).
    Booted on G5 (ARCH=powerpc) and things which previously fell over no
    longer do.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     

10 Oct, 2005

1 commit


06 Oct, 2005

1 commit


26 Sep, 2005

1 commit

  • This creates the directory structure under arch/powerpc and a bunch
    of Kconfig files. It does a first-cut merge of arch/powerpc/mm,
    arch/powerpc/lib and arch/powerpc/platforms/powermac. This is enough
    to build a 32-bit powermac kernel with ARCH=powerpc.

    For now we are getting some unmerged files from arch/ppc/kernel and
    arch/ppc/syslib, or arch/ppc64/kernel. This makes some minor changes
    to files in those directories and files outside arch/powerpc.

    The boot directory is still not merged. That's going to be interesting.

    Signed-off-by: Paul Mackerras

    Paul Mackerras