18 Mar, 2009

3 commits

  • Add kexec jump support to the SuperH architecture.

    Similar to the x86 implementation, with the following
    exceptions:

    - Instead of separating the assembly code flow into
    two parts for regular kexec and kexec jump we use a
    single code path. In the assembly snippet regular
    kexec is just kexec jump that never comes back.

    - Instead of using a swap page when moving data between
    pages the page copy assembly routine has been modified
    to exchange the data between the pages using registers.

    - We walk the page list twice in machine_kexec() to
    do and undo physical to virtual address conversion.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     
  • Rework the kexec code to avoid using P2SEG. Instead
    we walk the page list in machine_kexec() and convert
    the addresses from physical to virtual using C.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     
  • Setup the vbr register in machine_kexec(). This
    instead of passing values to the assembly snippet.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

06 Dec, 2006

1 commit

  • There were a number of places that made evil PAGE_SIZE == 4k
    assumptions that ended up breaking when trying to play with
    8k and 64k page sizes, this fixes those up.

    The most significant change is the way we load THREAD_SIZE,
    previously this was done via:

    mov #(THREAD_SIZE >> 8), reg
    shll8 reg

    to avoid a memory access and allow the immediate load. With
    a 64k PAGE_SIZE, we're out of range for the immediate load
    size without resorting to special instructions available in
    later ISAs (movi20s and so on). The "workaround" for this is
    to bump up the shift to 10 and insert a shll2, which gives a
    bit more flexibility while still being much cheaper than a
    memory access.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

01 Jul, 2006

1 commit


17 Jan, 2006

1 commit