151712e49SCosta Shulyupin.. SPDX-License-Identifier: GPL-2.0
251712e49SCosta Shulyupin
351712e49SCosta Shulyupin=========================
451712e49SCosta ShulyupinIntroduction to LoongArch
551712e49SCosta Shulyupin=========================
651712e49SCosta Shulyupin
751712e49SCosta ShulyupinLoongArch is a new RISC ISA, which is a bit like MIPS or RISC-V. There are
851712e49SCosta Shulyupincurrently 3 variants: a reduced 32-bit version (LA32R), a standard 32-bit
951712e49SCosta Shulyupinversion (LA32S) and a 64-bit version (LA64). There are 4 privilege levels
1051712e49SCosta Shulyupin(PLVs) defined in LoongArch: PLV0~PLV3, from high to low. Kernel runs at PLV0
1151712e49SCosta Shulyupinwhile applications run at PLV3. This document introduces the registers, basic
1251712e49SCosta Shulyupininstruction set, virtual memory and some other topics of LoongArch.
1351712e49SCosta Shulyupin
1451712e49SCosta ShulyupinRegisters
1551712e49SCosta Shulyupin=========
1651712e49SCosta Shulyupin
1751712e49SCosta ShulyupinLoongArch registers include general purpose registers (GPRs), floating point
1851712e49SCosta Shulyupinregisters (FPRs), vector registers (VRs) and control status registers (CSRs)
1951712e49SCosta Shulyupinused in privileged mode (PLV0).
2051712e49SCosta Shulyupin
2151712e49SCosta ShulyupinGPRs
2251712e49SCosta Shulyupin----
2351712e49SCosta Shulyupin
2451712e49SCosta ShulyupinLoongArch has 32 GPRs ( ``$r0`` ~ ``$r31`` ); each one is 32-bit wide in LA32
2551712e49SCosta Shulyupinand 64-bit wide in LA64. ``$r0`` is hard-wired to zero, and the other registers
2651712e49SCosta Shulyupinare not architecturally special. (Except ``$r1``, which is hard-wired as the
2751712e49SCosta Shulyupinlink register of the BL instruction.)
2851712e49SCosta Shulyupin
2951712e49SCosta ShulyupinThe kernel uses a variant of the LoongArch register convention, as described in
3051712e49SCosta Shulyupinthe LoongArch ELF psABI spec, in :ref:`References <loongarch-references>`:
3151712e49SCosta Shulyupin
3251712e49SCosta Shulyupin================= =============== =================== ============
3351712e49SCosta ShulyupinName              Alias           Usage               Preserved
3451712e49SCosta Shulyupin                                                      across calls
3551712e49SCosta Shulyupin================= =============== =================== ============
3651712e49SCosta Shulyupin``$r0``           ``$zero``       Constant zero       Unused
3751712e49SCosta Shulyupin``$r1``           ``$ra``         Return address      No
3851712e49SCosta Shulyupin``$r2``           ``$tp``         TLS/Thread pointer  Unused
3951712e49SCosta Shulyupin``$r3``           ``$sp``         Stack pointer       Yes
4051712e49SCosta Shulyupin``$r4``-``$r11``  ``$a0``-``$a7`` Argument registers  No
4151712e49SCosta Shulyupin``$r4``-``$r5``   ``$v0``-``$v1`` Return value        No
4251712e49SCosta Shulyupin``$r12``-``$r20`` ``$t0``-``$t8`` Temp registers      No
4351712e49SCosta Shulyupin``$r21``          ``$u0``         Percpu base address Unused
4451712e49SCosta Shulyupin``$r22``          ``$fp``         Frame pointer       Yes
4551712e49SCosta Shulyupin``$r23``-``$r31`` ``$s0``-``$s8`` Static registers    Yes
4651712e49SCosta Shulyupin================= =============== =================== ============
4751712e49SCosta Shulyupin
4851712e49SCosta Shulyupin.. Note::
4951712e49SCosta Shulyupin    The register ``$r21`` is reserved in the ELF psABI, but used by the Linux
5051712e49SCosta Shulyupin    kernel for storing the percpu base address. It normally has no ABI name,
5151712e49SCosta Shulyupin    but is called ``$u0`` in the kernel. You may also see ``$v0`` or ``$v1``
5251712e49SCosta Shulyupin    in some old code,however they are deprecated aliases of ``$a0`` and ``$a1``
5351712e49SCosta Shulyupin    respectively.
5451712e49SCosta Shulyupin
5551712e49SCosta ShulyupinFPRs
5651712e49SCosta Shulyupin----
5751712e49SCosta Shulyupin
5851712e49SCosta ShulyupinLoongArch has 32 FPRs ( ``$f0`` ~ ``$f31`` ) when FPU is present. Each one is
5951712e49SCosta Shulyupin64-bit wide on the LA64 cores.
6051712e49SCosta Shulyupin
6151712e49SCosta ShulyupinThe floating-point register convention is the same as described in the
6251712e49SCosta ShulyupinLoongArch ELF psABI spec:
6351712e49SCosta Shulyupin
6451712e49SCosta Shulyupin================= ================== =================== ============
6551712e49SCosta ShulyupinName              Alias              Usage               Preserved
6651712e49SCosta Shulyupin                                                         across calls
6751712e49SCosta Shulyupin================= ================== =================== ============
6851712e49SCosta Shulyupin``$f0``-``$f7``   ``$fa0``-``$fa7``  Argument registers  No
6951712e49SCosta Shulyupin``$f0``-``$f1``   ``$fv0``-``$fv1``  Return value        No
7051712e49SCosta Shulyupin``$f8``-``$f23``  ``$ft0``-``$ft15`` Temp registers      No
7151712e49SCosta Shulyupin``$f24``-``$f31`` ``$fs0``-``$fs7``  Static registers    Yes
7251712e49SCosta Shulyupin================= ================== =================== ============
7351712e49SCosta Shulyupin
7451712e49SCosta Shulyupin.. Note::
7551712e49SCosta Shulyupin    You may see ``$fv0`` or ``$fv1`` in some old code, however they are
7651712e49SCosta Shulyupin    deprecated aliases of ``$fa0`` and ``$fa1`` respectively.
7751712e49SCosta Shulyupin
7851712e49SCosta ShulyupinVRs
7951712e49SCosta Shulyupin----
8051712e49SCosta Shulyupin
8151712e49SCosta ShulyupinThere are currently 2 vector extensions to LoongArch:
8251712e49SCosta Shulyupin
8351712e49SCosta Shulyupin- LSX (Loongson SIMD eXtension) with 128-bit vectors,
8451712e49SCosta Shulyupin- LASX (Loongson Advanced SIMD eXtension) with 256-bit vectors.
8551712e49SCosta Shulyupin
8651712e49SCosta ShulyupinLSX brings ``$v0`` ~ ``$v31`` while LASX brings ``$x0`` ~ ``$x31`` as the vector
8751712e49SCosta Shulyupinregisters.
8851712e49SCosta Shulyupin
8951712e49SCosta ShulyupinThe VRs overlap with FPRs: for example, on a core implementing LSX and LASX,
9051712e49SCosta Shulyupinthe lower 128 bits of ``$x0`` is shared with ``$v0``, and the lower 64 bits of
9151712e49SCosta Shulyupin``$v0`` is shared with ``$f0``; same with all other VRs.
9251712e49SCosta Shulyupin
9351712e49SCosta ShulyupinCSRs
9451712e49SCosta Shulyupin----
9551712e49SCosta Shulyupin
9651712e49SCosta ShulyupinCSRs can only be accessed from privileged mode (PLV0):
9751712e49SCosta Shulyupin
9851712e49SCosta Shulyupin================= ===================================== ==============
9951712e49SCosta ShulyupinAddress           Full Name                             Abbrev Name
10051712e49SCosta Shulyupin================= ===================================== ==============
10151712e49SCosta Shulyupin0x0               Current Mode Information              CRMD
10251712e49SCosta Shulyupin0x1               Pre-exception Mode Information        PRMD
10351712e49SCosta Shulyupin0x2               Extension Unit Enable                 EUEN
10451712e49SCosta Shulyupin0x3               Miscellaneous Control                 MISC
10551712e49SCosta Shulyupin0x4               Exception Configuration               ECFG
10651712e49SCosta Shulyupin0x5               Exception Status                      ESTAT
10751712e49SCosta Shulyupin0x6               Exception Return Address              ERA
10851712e49SCosta Shulyupin0x7               Bad (Faulting) Virtual Address        BADV
10951712e49SCosta Shulyupin0x8               Bad (Faulting) Instruction Word       BADI
11051712e49SCosta Shulyupin0xC               Exception Entrypoint Address          EENTRY
11151712e49SCosta Shulyupin0x10              TLB Index                             TLBIDX
11251712e49SCosta Shulyupin0x11              TLB Entry High-order Bits             TLBEHI
11351712e49SCosta Shulyupin0x12              TLB Entry Low-order Bits 0            TLBELO0
11451712e49SCosta Shulyupin0x13              TLB Entry Low-order Bits 1            TLBELO1
11551712e49SCosta Shulyupin0x18              Address Space Identifier              ASID
11651712e49SCosta Shulyupin0x19              Page Global Directory Address for     PGDL
11751712e49SCosta Shulyupin                  Lower-half Address Space
11851712e49SCosta Shulyupin0x1A              Page Global Directory Address for     PGDH
11951712e49SCosta Shulyupin                  Higher-half Address Space
12051712e49SCosta Shulyupin0x1B              Page Global Directory Address         PGD
12151712e49SCosta Shulyupin0x1C              Page Walk Control for Lower-          PWCL
12251712e49SCosta Shulyupin                  half Address Space
12351712e49SCosta Shulyupin0x1D              Page Walk Control for Higher-         PWCH
12451712e49SCosta Shulyupin                  half Address Space
12551712e49SCosta Shulyupin0x1E              STLB Page Size                        STLBPS
12651712e49SCosta Shulyupin0x1F              Reduced Virtual Address Configuration RVACFG
12751712e49SCosta Shulyupin0x20              CPU Identifier                        CPUID
12851712e49SCosta Shulyupin0x21              Privileged Resource Configuration 1   PRCFG1
12951712e49SCosta Shulyupin0x22              Privileged Resource Configuration 2   PRCFG2
13051712e49SCosta Shulyupin0x23              Privileged Resource Configuration 3   PRCFG3
13151712e49SCosta Shulyupin0x30+n (0≤n≤15)   Saved Data register                   SAVEn
13251712e49SCosta Shulyupin0x40              Timer Identifier                      TID
13351712e49SCosta Shulyupin0x41              Timer Configuration                   TCFG
13451712e49SCosta Shulyupin0x42              Timer Value                           TVAL
13551712e49SCosta Shulyupin0x43              Compensation of Timer Count           CNTC
13651712e49SCosta Shulyupin0x44              Timer Interrupt Clearing              TICLR
13751712e49SCosta Shulyupin0x60              LLBit Control                         LLBCTL
13851712e49SCosta Shulyupin0x80              Implementation-specific Control 1     IMPCTL1
13951712e49SCosta Shulyupin0x81              Implementation-specific Control 2     IMPCTL2
14051712e49SCosta Shulyupin0x88              TLB Refill Exception Entrypoint       TLBRENTRY
14151712e49SCosta Shulyupin                  Address
14251712e49SCosta Shulyupin0x89              TLB Refill Exception BAD (Faulting)   TLBRBADV
14351712e49SCosta Shulyupin                  Virtual Address
14451712e49SCosta Shulyupin0x8A              TLB Refill Exception Return Address   TLBRERA
14551712e49SCosta Shulyupin0x8B              TLB Refill Exception Saved Data       TLBRSAVE
14651712e49SCosta Shulyupin                  Register
14751712e49SCosta Shulyupin0x8C              TLB Refill Exception Entry Low-order  TLBRELO0
14851712e49SCosta Shulyupin                  Bits 0
14951712e49SCosta Shulyupin0x8D              TLB Refill Exception Entry Low-order  TLBRELO1
15051712e49SCosta Shulyupin                  Bits 1
15151712e49SCosta Shulyupin0x8E              TLB Refill Exception Entry High-order TLBEHI
15251712e49SCosta Shulyupin                  Bits
15351712e49SCosta Shulyupin0x8F              TLB Refill Exception Pre-exception    TLBRPRMD
15451712e49SCosta Shulyupin                  Mode Information
15551712e49SCosta Shulyupin0x90              Machine Error Control                 MERRCTL
15651712e49SCosta Shulyupin0x91              Machine Error Information 1           MERRINFO1
15751712e49SCosta Shulyupin0x92              Machine Error Information 2           MERRINFO2
15851712e49SCosta Shulyupin0x93              Machine Error Exception Entrypoint    MERRENTRY
15951712e49SCosta Shulyupin                  Address
16051712e49SCosta Shulyupin0x94              Machine Error Exception Return        MERRERA
16151712e49SCosta Shulyupin                  Address
16251712e49SCosta Shulyupin0x95              Machine Error Exception Saved Data    MERRSAVE
16351712e49SCosta Shulyupin                  Register
16451712e49SCosta Shulyupin0x98              Cache TAGs                            CTAG
16551712e49SCosta Shulyupin0x180+n (0≤n≤3)   Direct Mapping Configuration Window n DMWn
16651712e49SCosta Shulyupin0x200+2n (0≤n≤31) Performance Monitor Configuration n   PMCFGn
16751712e49SCosta Shulyupin0x201+2n (0≤n≤31) Performance Monitor Overall Counter n PMCNTn
16851712e49SCosta Shulyupin0x300             Memory Load/Store WatchPoint          MWPC
16951712e49SCosta Shulyupin                  Overall Control
17051712e49SCosta Shulyupin0x301             Memory Load/Store WatchPoint          MWPS
17151712e49SCosta Shulyupin                  Overall Status
17251712e49SCosta Shulyupin0x310+8n (0≤n≤7)  Memory Load/Store WatchPoint n        MWPnCFG1
17351712e49SCosta Shulyupin                  Configuration 1
17451712e49SCosta Shulyupin0x311+8n (0≤n≤7)  Memory Load/Store WatchPoint n        MWPnCFG2
17551712e49SCosta Shulyupin                  Configuration 2
17651712e49SCosta Shulyupin0x312+8n (0≤n≤7)  Memory Load/Store WatchPoint n        MWPnCFG3
17751712e49SCosta Shulyupin                  Configuration 3
17851712e49SCosta Shulyupin0x313+8n (0≤n≤7)  Memory Load/Store WatchPoint n        MWPnCFG4
17951712e49SCosta Shulyupin                  Configuration 4
18051712e49SCosta Shulyupin0x380             Instruction Fetch WatchPoint          FWPC
18151712e49SCosta Shulyupin                  Overall Control
18251712e49SCosta Shulyupin0x381             Instruction Fetch WatchPoint          FWPS
18351712e49SCosta Shulyupin                  Overall Status
18451712e49SCosta Shulyupin0x390+8n (0≤n≤7)  Instruction Fetch WatchPoint n        FWPnCFG1
18551712e49SCosta Shulyupin                  Configuration 1
18651712e49SCosta Shulyupin0x391+8n (0≤n≤7)  Instruction Fetch WatchPoint n        FWPnCFG2
18751712e49SCosta Shulyupin                  Configuration 2
18851712e49SCosta Shulyupin0x392+8n (0≤n≤7)  Instruction Fetch WatchPoint n        FWPnCFG3
18951712e49SCosta Shulyupin                  Configuration 3
19051712e49SCosta Shulyupin0x393+8n (0≤n≤7)  Instruction Fetch WatchPoint n        FWPnCFG4
19151712e49SCosta Shulyupin                  Configuration 4
19251712e49SCosta Shulyupin0x500             Debug Register                        DBG
19351712e49SCosta Shulyupin0x501             Debug Exception Return Address        DERA
19451712e49SCosta Shulyupin0x502             Debug Exception Saved Data Register   DSAVE
19551712e49SCosta Shulyupin================= ===================================== ==============
19651712e49SCosta Shulyupin
19751712e49SCosta ShulyupinERA, TLBRERA, MERRERA and DERA are sometimes also known as EPC, TLBREPC, MERREPC
19851712e49SCosta Shulyupinand DEPC respectively.
19951712e49SCosta Shulyupin
20051712e49SCosta ShulyupinBasic Instruction Set
20151712e49SCosta Shulyupin=====================
20251712e49SCosta Shulyupin
20351712e49SCosta ShulyupinInstruction formats
20451712e49SCosta Shulyupin-------------------
20551712e49SCosta Shulyupin
20651712e49SCosta ShulyupinLoongArch instructions are 32 bits wide, belonging to 9 basic instruction
20751712e49SCosta Shulyupinformats (and variants of them):
20851712e49SCosta Shulyupin
20951712e49SCosta Shulyupin=========== ==========================
21051712e49SCosta ShulyupinFormat name Composition
21151712e49SCosta Shulyupin=========== ==========================
21251712e49SCosta Shulyupin2R          Opcode + Rj + Rd
21351712e49SCosta Shulyupin3R          Opcode + Rk + Rj + Rd
21451712e49SCosta Shulyupin4R          Opcode + Ra + Rk + Rj + Rd
21551712e49SCosta Shulyupin2RI8        Opcode + I8 + Rj + Rd
21651712e49SCosta Shulyupin2RI12       Opcode + I12 + Rj + Rd
21751712e49SCosta Shulyupin2RI14       Opcode + I14 + Rj + Rd
21851712e49SCosta Shulyupin2RI16       Opcode + I16 + Rj + Rd
21951712e49SCosta Shulyupin1RI21       Opcode + I21L + Rj + I21H
22051712e49SCosta ShulyupinI26         Opcode + I26L + I26H
22151712e49SCosta Shulyupin=========== ==========================
22251712e49SCosta Shulyupin
22351712e49SCosta ShulyupinRd is the destination register operand, while Rj, Rk and Ra ("a" stands for
22451712e49SCosta Shulyupin"additional") are the source register operands. I8/I12/I14/I16/I21/I26 are
22551712e49SCosta Shulyupinimmediate operands of respective width. The longer I21 and I26 are stored
22651712e49SCosta Shulyupinin separate higher and lower parts in the instruction word, denoted by the "L"
22751712e49SCosta Shulyupinand "H" suffixes.
22851712e49SCosta Shulyupin
22951712e49SCosta ShulyupinList of Instructions
23051712e49SCosta Shulyupin--------------------
23151712e49SCosta Shulyupin
23251712e49SCosta ShulyupinFor brevity, only instruction names (mnemonics) are listed here; please see the
23351712e49SCosta Shulyupin:ref:`References <loongarch-references>` for details.
23451712e49SCosta Shulyupin
23551712e49SCosta Shulyupin
23651712e49SCosta Shulyupin1. Arithmetic Instructions::
23751712e49SCosta Shulyupin
23851712e49SCosta Shulyupin    ADD.W SUB.W ADDI.W ADD.D SUB.D ADDI.D
23951712e49SCosta Shulyupin    SLT SLTU SLTI SLTUI
24051712e49SCosta Shulyupin    AND OR NOR XOR ANDN ORN ANDI ORI XORI
24151712e49SCosta Shulyupin    MUL.W MULH.W MULH.WU DIV.W DIV.WU MOD.W MOD.WU
24251712e49SCosta Shulyupin    MUL.D MULH.D MULH.DU DIV.D DIV.DU MOD.D MOD.DU
24351712e49SCosta Shulyupin    PCADDI PCADDU12I PCADDU18I
24451712e49SCosta Shulyupin    LU12I.W LU32I.D LU52I.D ADDU16I.D
24551712e49SCosta Shulyupin
24651712e49SCosta Shulyupin2. Bit-shift Instructions::
24751712e49SCosta Shulyupin
24851712e49SCosta Shulyupin    SLL.W SRL.W SRA.W ROTR.W SLLI.W SRLI.W SRAI.W ROTRI.W
24951712e49SCosta Shulyupin    SLL.D SRL.D SRA.D ROTR.D SLLI.D SRLI.D SRAI.D ROTRI.D
25051712e49SCosta Shulyupin
25151712e49SCosta Shulyupin3. Bit-manipulation Instructions::
25251712e49SCosta Shulyupin
25351712e49SCosta Shulyupin    EXT.W.B EXT.W.H CLO.W CLO.D SLZ.W CLZ.D CTO.W CTO.D CTZ.W CTZ.D
25451712e49SCosta Shulyupin    BYTEPICK.W BYTEPICK.D BSTRINS.W BSTRINS.D BSTRPICK.W BSTRPICK.D
25551712e49SCosta Shulyupin    REVB.2H REVB.4H REVB.2W REVB.D REVH.2W REVH.D BITREV.4B BITREV.8B BITREV.W BITREV.D
25651712e49SCosta Shulyupin    MASKEQZ MASKNEZ
25751712e49SCosta Shulyupin
25851712e49SCosta Shulyupin4. Branch Instructions::
25951712e49SCosta Shulyupin
26051712e49SCosta Shulyupin    BEQ BNE BLT BGE BLTU BGEU BEQZ BNEZ B BL JIRL
26151712e49SCosta Shulyupin
26251712e49SCosta Shulyupin5. Load/Store Instructions::
26351712e49SCosta Shulyupin
26451712e49SCosta Shulyupin    LD.B LD.BU LD.H LD.HU LD.W LD.WU LD.D ST.B ST.H ST.W ST.D
26551712e49SCosta Shulyupin    LDX.B LDX.BU LDX.H LDX.HU LDX.W LDX.WU LDX.D STX.B STX.H STX.W STX.D
26651712e49SCosta Shulyupin    LDPTR.W LDPTR.D STPTR.W STPTR.D
26751712e49SCosta Shulyupin    PRELD PRELDX
26851712e49SCosta Shulyupin
26951712e49SCosta Shulyupin6. Atomic Operation Instructions::
27051712e49SCosta Shulyupin
27151712e49SCosta Shulyupin    LL.W SC.W LL.D SC.D
27251712e49SCosta Shulyupin    AMSWAP.W AMSWAP.D AMADD.W AMADD.D AMAND.W AMAND.D AMOR.W AMOR.D AMXOR.W AMXOR.D
27351712e49SCosta Shulyupin    AMMAX.W AMMAX.D AMMIN.W AMMIN.D
27451712e49SCosta Shulyupin
27551712e49SCosta Shulyupin7. Barrier Instructions::
27651712e49SCosta Shulyupin
27751712e49SCosta Shulyupin    IBAR DBAR
27851712e49SCosta Shulyupin
27951712e49SCosta Shulyupin8. Special Instructions::
28051712e49SCosta Shulyupin
28151712e49SCosta Shulyupin    SYSCALL BREAK CPUCFG NOP IDLE ERTN(ERET) DBCL(DBGCALL) RDTIMEL.W RDTIMEH.W RDTIME.D
28251712e49SCosta Shulyupin    ASRTLE.D ASRTGT.D
28351712e49SCosta Shulyupin
28451712e49SCosta Shulyupin9. Privileged Instructions::
28551712e49SCosta Shulyupin
28651712e49SCosta Shulyupin    CSRRD CSRWR CSRXCHG
28751712e49SCosta Shulyupin    IOCSRRD.B IOCSRRD.H IOCSRRD.W IOCSRRD.D IOCSRWR.B IOCSRWR.H IOCSRWR.W IOCSRWR.D
28851712e49SCosta Shulyupin    CACOP TLBP(TLBSRCH) TLBRD TLBWR TLBFILL TLBCLR TLBFLUSH INVTLB LDDIR LDPTE
28951712e49SCosta Shulyupin
29051712e49SCosta ShulyupinVirtual Memory
29151712e49SCosta Shulyupin==============
29251712e49SCosta Shulyupin
29351712e49SCosta ShulyupinLoongArch supports direct-mapped virtual memory and page-mapped virtual memory.
29451712e49SCosta Shulyupin
29551712e49SCosta ShulyupinDirect-mapped virtual memory is configured by CSR.DMWn (n=0~3), it has a simple
29651712e49SCosta Shulyupinrelationship between virtual address (VA) and physical address (PA)::
29751712e49SCosta Shulyupin
29851712e49SCosta Shulyupin VA = PA + FixedOffset
29951712e49SCosta Shulyupin
30051712e49SCosta ShulyupinPage-mapped virtual memory has arbitrary relationship between VA and PA, which
30151712e49SCosta Shulyupinis recorded in TLB and page tables. LoongArch's TLB includes a fully-associative
30251712e49SCosta ShulyupinMTLB (Multiple Page Size TLB) and set-associative STLB (Single Page Size TLB).
30351712e49SCosta Shulyupin
30451712e49SCosta ShulyupinBy default, the whole virtual address space of LA32 is configured like this:
30551712e49SCosta Shulyupin
30651712e49SCosta Shulyupin============ =========================== =============================
30751712e49SCosta ShulyupinName         Address Range               Attributes
30851712e49SCosta Shulyupin============ =========================== =============================
30951712e49SCosta Shulyupin``UVRANGE``  ``0x00000000 - 0x7FFFFFFF`` Page-mapped, Cached, PLV0~3
31051712e49SCosta Shulyupin``KPRANGE0`` ``0x80000000 - 0x9FFFFFFF`` Direct-mapped, Uncached, PLV0
31151712e49SCosta Shulyupin``KPRANGE1`` ``0xA0000000 - 0xBFFFFFFF`` Direct-mapped, Cached, PLV0
31251712e49SCosta Shulyupin``KVRANGE``  ``0xC0000000 - 0xFFFFFFFF`` Page-mapped, Cached, PLV0
31351712e49SCosta Shulyupin============ =========================== =============================
31451712e49SCosta Shulyupin
31551712e49SCosta ShulyupinUser mode (PLV3) can only access UVRANGE. For direct-mapped KPRANGE0 and
31651712e49SCosta ShulyupinKPRANGE1, PA is equal to VA with bit30~31 cleared. For example, the uncached
31751712e49SCosta Shulyupindirect-mapped VA of 0x00001000 is 0x80001000, and the cached direct-mapped
31851712e49SCosta ShulyupinVA of 0x00001000 is 0xA0001000.
31951712e49SCosta Shulyupin
32051712e49SCosta ShulyupinBy default, the whole virtual address space of LA64 is configured like this:
32151712e49SCosta Shulyupin
32251712e49SCosta Shulyupin============ ====================== ======================================
32351712e49SCosta ShulyupinName         Address Range          Attributes
32451712e49SCosta Shulyupin============ ====================== ======================================
32551712e49SCosta Shulyupin``XUVRANGE`` ``0x0000000000000000 - Page-mapped, Cached, PLV0~3
32651712e49SCosta Shulyupin             0x3FFFFFFFFFFFFFFF``
32751712e49SCosta Shulyupin``XSPRANGE`` ``0x4000000000000000 - Direct-mapped, Cached / Uncached, PLV0
32851712e49SCosta Shulyupin             0x7FFFFFFFFFFFFFFF``
32951712e49SCosta Shulyupin``XKPRANGE`` ``0x8000000000000000 - Direct-mapped, Cached / Uncached, PLV0
33051712e49SCosta Shulyupin             0xBFFFFFFFFFFFFFFF``
33151712e49SCosta Shulyupin``XKVRANGE`` ``0xC000000000000000 - Page-mapped, Cached, PLV0
33251712e49SCosta Shulyupin             0xFFFFFFFFFFFFFFFF``
33351712e49SCosta Shulyupin============ ====================== ======================================
33451712e49SCosta Shulyupin
33551712e49SCosta ShulyupinUser mode (PLV3) can only access XUVRANGE. For direct-mapped XSPRANGE and
33651712e49SCosta ShulyupinXKPRANGE, PA is equal to VA with bits 60~63 cleared, and the cache attribute
33751712e49SCosta Shulyupinis configured by bits 60~61 in VA: 0 is for strongly-ordered uncached, 1 is
33851712e49SCosta Shulyupinfor coherent cached, and 2 is for weakly-ordered uncached.
33951712e49SCosta Shulyupin
34051712e49SCosta ShulyupinCurrently we only use XKPRANGE for direct mapping and XSPRANGE is reserved.
34151712e49SCosta Shulyupin
34251712e49SCosta ShulyupinTo put this in action: the strongly-ordered uncached direct-mapped VA (in
34351712e49SCosta ShulyupinXKPRANGE) of 0x00000000_00001000 is 0x80000000_00001000, the coherent cached
34451712e49SCosta Shulyupindirect-mapped VA (in XKPRANGE) of 0x00000000_00001000 is 0x90000000_00001000,
34551712e49SCosta Shulyupinand the weakly-ordered uncached direct-mapped VA (in XKPRANGE) of 0x00000000
34651712e49SCosta Shulyupin_00001000 is 0xA0000000_00001000.
34751712e49SCosta Shulyupin
34851712e49SCosta ShulyupinRelationship of Loongson and LoongArch
34951712e49SCosta Shulyupin======================================
35051712e49SCosta Shulyupin
35151712e49SCosta ShulyupinLoongArch is a RISC ISA which is different from any other existing ones, while
35251712e49SCosta ShulyupinLoongson is a family of processors. Loongson includes 3 series: Loongson-1 is
35351712e49SCosta Shulyupinthe 32-bit processor series, Loongson-2 is the low-end 64-bit processor series,
35451712e49SCosta Shulyupinand Loongson-3 is the high-end 64-bit processor series. Old Loongson is based on
35551712e49SCosta ShulyupinMIPS, while New Loongson is based on LoongArch. Take Loongson-3 as an example:
35651712e49SCosta ShulyupinLoongson-3A1000/3B1500/3A2000/3A3000/3A4000 are MIPS-compatible, while Loongson-
35751712e49SCosta Shulyupin3A5000 (and future revisions) are all based on LoongArch.
35851712e49SCosta Shulyupin
35951712e49SCosta Shulyupin.. _loongarch-references:
36051712e49SCosta Shulyupin
36151712e49SCosta ShulyupinReferences
36251712e49SCosta Shulyupin==========
36351712e49SCosta Shulyupin
36451712e49SCosta ShulyupinOfficial web site of Loongson Technology Corp. Ltd.:
36551712e49SCosta Shulyupin
36651712e49SCosta Shulyupin  http://www.loongson.cn/
36751712e49SCosta Shulyupin
36851712e49SCosta ShulyupinDeveloper web site of Loongson and LoongArch (Software and Documentation):
36951712e49SCosta Shulyupin
37051712e49SCosta Shulyupin  http://www.loongnix.cn/
37151712e49SCosta Shulyupin
37251712e49SCosta Shulyupin  https://github.com/loongson/
37351712e49SCosta Shulyupin
37451712e49SCosta Shulyupin  https://loongson.github.io/LoongArch-Documentation/
37551712e49SCosta Shulyupin
37651712e49SCosta ShulyupinDocumentation of LoongArch ISA:
37751712e49SCosta Shulyupin
37851712e49SCosta Shulyupin  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-Vol1-v1.02-CN.pdf (in Chinese)
37951712e49SCosta Shulyupin
38051712e49SCosta Shulyupin  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-Vol1-v1.02-EN.pdf (in English)
38151712e49SCosta Shulyupin
38251712e49SCosta ShulyupinDocumentation of LoongArch ELF psABI:
38351712e49SCosta Shulyupin
384*84fafe98STiezhu Yang  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-ELF-ABI-v2.01-CN.pdf (in Chinese)
38551712e49SCosta Shulyupin
386*84fafe98STiezhu Yang  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/LoongArch-ELF-ABI-v2.01-EN.pdf (in English)
38751712e49SCosta Shulyupin
38851712e49SCosta ShulyupinLinux kernel repository of Loongson and LoongArch:
38951712e49SCosta Shulyupin
39051712e49SCosta Shulyupin  https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git
391