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