Acked-by: Michael D Kinney <michael.d.kin...@intel.com> > -----Original Message----- > From: Chao Li <lic...@loongson.cn> > Sent: Sunday, November 5, 2023 7:26 PM > To: devel@edk2.groups.io > Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming > <gaolim...@byosoft.com.cn>; Liu, Zhiguang <zhiguang....@intel.com> > Subject: [PATCH v2 01/30] MdePkg: Add the header file named Csr.h for > LoongArch64 > > Adding Csr.h for LoongArch64, it is use for accessing the CSR > registers. > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Zhiguang Liu <zhiguang....@intel.com> > Signed-off-by: Chao Li <lic...@loongson.cn> > --- > MdePkg/Include/Register/LoongArch64/Csr.h | 221 > ++++++++++++++++++++++ > 1 file changed, 221 insertions(+) > create mode 100644 MdePkg/Include/Register/LoongArch64/Csr.h > > diff --git a/MdePkg/Include/Register/LoongArch64/Csr.h > b/MdePkg/Include/Register/LoongArch64/Csr.h > new file mode 100644 > index 0000000000..b78d766b42 > --- /dev/null > +++ b/MdePkg/Include/Register/LoongArch64/Csr.h > @@ -0,0 +1,221 @@ > +/** @file > + > + Copyright (c) 2023 Loongson Technology Corporation Limited. All > rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > + @par Glossary: > + - EXC - Exception > + - CSR - CPU Status Register > +**/ > + > +#ifndef LOONGARCH_CSR_H_ > +#define LOONGARCH_CSR_H_ > + > +#include <Base.h> > + > +// > +// CSR register numbers > +// > + > +// > +// Basic CSR registers > +// > +#define LOONGARCH_CSR_CRMD 0x0 > +#define LOONGARCH_CSR_PRMD 0x1 > +#define LOONGARCH_CSR_EUEN 0x2 > +#define CSR_EUEN_LBTEN_SHIFT 3 > +#define CSR_EUEN_LBTEN (0x1ULL << CSR_EUEN_LBTEN_SHIFT) > +#define CSR_EUEN_LASXEN_SHIFT 2 > +#define CSR_EUEN_LASXEN (0x1ULL << CSR_EUEN_LASXEN_SHIFT) > +#define CSR_EUEN_LSXEN_SHIFT 1 > +#define CSR_EUEN_LSXEN (0x1ULL << CSR_EUEN_LSXEN_SHIFT) > +#define CSR_EUEN_FPEN_SHIFT 0 > +#define CSR_EUEN_FPEN (0x1ULL << CSR_EUEN_FPEN_SHIFT) > +#define LOONGARCH_CSR_MISC 0x3 > +#define LOONGARCH_CSR_ECFG 0x4 > + > +#define LOONGARCH_CSR_ESTAT 0x5 > +#define CSR_ESTAT_ESUBCODE_SHIFT 22 > +#define CSR_ESTAT_ESUBCODE_WIDTH 9 > +#define CSR_ESTAT_ESUBCODE (0x1ffULL << > CSR_ESTAT_ESUBCODE_SHIFT) > +#define CSR_ESTAT_EXC_SHIFT 16 > +#define CSR_ESTAT_EXC_WIDTH 6 > +#define CSR_ESTAT_EXC (0x3FULL << CSR_ESTAT_EXC_SHIFT) > +#define CSR_ESTAT_IS_SHIFT 0 > +#define CSR_ESTAT_IS_WIDTH 15 > +#define CSR_ESTAT_IS (0x7FFFULL << CSR_ESTAT_IS_SHIFT) > + > +#define LOONGARCH_CSR_ERA 0x6 > +#define LOONGARCH_CSR_BADV 0x7 > +#define LOONGARCH_CSR_BADI 0x8 > +#define LOONGARCH_CSR_EBASE 0xC // Exception entry base address > + > +// > +// TLB related CSR registers > +// > +#define LOONGARCH_CSR_TLBIDX 0x10 // TLB Index, EHINV, > PageSize, NP > +#define LOONGARCH_CSR_TLBEHI 0x11 // TLB EntryHi > +#define LOONGARCH_CSR_TLBELO0 0x12 // TLB EntryLo0 > +#define LOONGARCH_CSR_TLBELO1 0x13 // TLB EntryLo1 > +#define LOONGARCH_CSR_ASID 0x18 // ASID > +#define LOONGARCH_CSR_PGDL 0x19 // Page table base > address when VA[47] = 0 > +#define LOONGARCH_CSR_PGDH 0x1A // Page table base > address when VA[47] = 1 > +#define LOONGARCH_CSR_PGD 0x1B // Page table base > +#define LOONGARCH_CSR_PWCTL0 0x1C // PWCtl0 > +#define LOONGARCH_CSR_PWCTL1 0x1D // PWCtl1 > +#define LOONGARCH_CSR_STLBPGSIZE 0x1E > +#define LOONGARCH_CSR_RVACFG 0x1F > + > +// > +// Config CSR registers > +// > +#define LOONGARCH_CSR_CPUNUM 0x20 // CPU core number > +#define LOONGARCH_CSR_PRCFG1 0x21 // Config1 > +#define LOONGARCH_CSR_PRCFG2 0x22 // Config2 > +#define LOONGARCH_CSR_PRCFG3 0x23 // Config3 > + > +// > +// Kscratch registers > +// > +#define LOONGARCH_CSR_KS0 0x30 > +#define LOONGARCH_CSR_KS1 0x31 > +#define LOONGARCH_CSR_KS2 0x32 > +#define LOONGARCH_CSR_KS3 0x33 > +#define LOONGARCH_CSR_KS4 0x34 > +#define LOONGARCH_CSR_KS5 0x35 > +#define LOONGARCH_CSR_KS6 0x36 > +#define LOONGARCH_CSR_KS7 0x37 > +#define LOONGARCH_CSR_KS8 0x38 > + > +// > +// Stable timer registers > +// > +#define LOONGARCH_CSR_TMID 0x40 // Timer ID > +#define LOONGARCH_CSR_TMCFG 0x41 > +#define LOONGARCH_CSR_TMCFG_EN (1ULL << 0) > +#define LOONGARCH_CSR_TMCFG_PERIOD (1ULL << 1) > +#define LOONGARCH_CSR_TMCFG_TIMEVAL (0x3FFFFFFFFFFFULL << 2) > +#define LOONGARCH_CSR_TVAL 0x42 // Timer value > +#define LOONGARCH_CSR_CNTC 0x43 // Timer offset > +#define LOONGARCH_CSR_TINTCLR 0x44 // Timer interrupt clear > + > +// > +// TLB refill exception base address > +// > +#define LOONGARCH_CSR_TLBREBASE 0x88 // TLB refill exception > entry > +#define LOONGARCH_CSR_TLBRBADV 0x89 // TLB refill badvaddr > +#define LOONGARCH_CSR_TLBRERA 0x8a // TLB refill ERA > +#define LOONGARCH_CSR_TLBRSAVE 0x8b // KScratch for TLB refill > exception > +#define LOONGARCH_CSR_TLBRELO0 0x8c // TLB refill entrylo0 > +#define LOONGARCH_CSR_TLBRELO1 0x8d // TLB refill entrylo1 > +#define LOONGARCH_CSR_TLBREHI 0x8e // TLB refill entryhi > + > +// > +// Direct map windows registers > +// > +#define LOONGARCH_CSR_DMWIN0 0x180 // 64 direct map win0: MEM & IF > +#define LOONGARCH_CSR_DMWIN1 0x181 // 64 direct map win1: MEM & IF > +#define LOONGARCH_CSR_DMWIN2 0x182 // 64 direct map win2: MEM > +#define LOONGARCH_CSR_DMWIN3 0x183 // 64 direct map win3: MEM > +// > +// CSR register numbers end > +// > + > +// > +// IOCSR register numbers > +// > +#define LOONGARCH_IOCSR_FEATURES 0x8 > +#define IOCSRF_TEMP (1ULL << 0) > +#define IOCSRF_NODECNT (1ULL << 1) > +#define IOCSRF_MSI (1ULL << 2) > +#define IOCSRF_EXTIOI (1ULL << 3) > +#define IOCSRF_CSRIPI (1ULL << 4) > +#define IOCSRF_FREQCSR (1ULL << 5) > +#define IOCSRF_FREQSCALE (1ULL << 6) > +#define IOCSRF_DVFSV1 (1ULL << 7) > +#define IOCSRF_EXTIOI_DECODE (1ULL << 9) > +#define IOCSRF_FLATMODE (1ULL << 10) > +#define IOCSRF_VM (1ULL << 11) > + > +#define LOONGARCH_IOCSR_VENDOR 0x10 > + > +#define LOONGARCH_IOCSR_CPUNAME 0x20 > + > +#define LOONGARCH_IOCSR_NODECNT 0x408 > + > +#define LOONGARCH_IOCSR_MISC_FUNC 0x420 > +#define IOCSR_MISC_FUNC_TIMER_RESET (1ULL << 21) > +#define IOCSR_MISC_FUNC_EXT_IOI_EN (1ULL << 48) > + > +#define LOONGARCH_IOCSR_CPUTEMP 0x428 > + > +// > +// PerCore CSR, only accessable by local cores > +// > +#define LOONGARCH_IOCSR_IPI_STATUS 0x1000 > +#define LOONGARCH_IOCSR_IPI_EN 0x1004 > +#define LOONGARCH_IOCSR_IPI_SET 0x1008 > +#define LOONGARCH_IOCSR_IPI_CLEAR 0x100c > +#define LOONGARCH_IOCSR_MBUF0 0x1020 > +#define LOONGARCH_IOCSR_MBUF1 0x1028 > +#define LOONGARCH_IOCSR_MBUF2 0x1030 > +#define LOONGARCH_IOCSR_MBUF3 0x1038 > + > +#define LOONGARCH_IOCSR_IPI_SEND 0x1040 > +#define IOCSR_IPI_SEND_IP_SHIFT 0 > +#define IOCSR_IPI_SEND_CPU_SHIFT 16 > +#define IOCSR_IPI_SEND_BLOCKING (1ULL << 31) > + > +#define LOONGARCH_IOCSR_MBUF_SEND 0x1048 > +#define IOCSR_MBUF_SEND_BLOCKING (1ULL << 31) > +#define IOCSR_MBUF_SEND_BOX_SHIFT 2 > +#define IOCSR_MBUF_SEND_BOX_LO(box) (box << 1) > +#define IOCSR_MBUF_SEND_BOX_HI(box) ((box << 1) + 1) > +#define IOCSR_MBUF_SEND_CPU_SHIFT 16 > +#define IOCSR_MBUF_SEND_BUF_SHIFT 32 > +#define IOCSR_MBUF_SEND_H32_MASK 0xFFFFFFFF00000000ULL > + > +#define LOONGARCH_IOCSR_ANY_SEND 0x1158 > +#define IOCSR_ANY_SEND_BLOCKING (1ULL << 31) > +#define IOCSR_ANY_SEND_CPU_SHIFT 16 > +#define IOCSR_ANY_SEND_MASK_SHIFT 27 > +#define IOCSR_ANY_SEND_BUF_SHIFT 32 > +#define IOCSR_ANY_SEND_H32_MASK 0xFFFFFFFF00000000ULL > + > +// > +// Register offset and bit definition for CSR access > +// > +#define LOONGARCH_IOCSR_TIMER_CFG 0x1060 > +#define LOONGARCH_IOCSR_TIMER_TICK 0x1070 > +#define IOCSR_TIMER_CFG_RESERVED BIT63 > +#define IOCSR_TIMER_CFG_PERIODIC BIT62 > +#define IOCSR_TIMER_CFG_EN BIT61 > +#define IOCSR_TIMER_MASK 0x0FFFFFFFFFFFFULL > +#define IOCSR_TIMER_INITVAL_RST (0xFFFFULL << 48) > +// > +// IOCSR register numbers end > +// > + > +// > +// Invalid addr with global=1 or matched asid in current TLB > +// > +#define INVTLB_ADDR_GTRUE_OR_ASID 0x6 > + > +// > +// Bits 8 and 9 of FPU Status Register specify the rounding mode > +// > +#define FPU_CSR_RM 0x300 > +#define FPU_CSR_RN 0x000 // nearest > +#define FPU_CSR_RZ 0x100 // towards zero > +#define FPU_CSR_RU 0x200 // towards +Infinity > +#define FPU_CSR_RD 0x300 // towards -Infinity > + > +#define DEFAULT_PAGE_SIZE 0x0c > +#define CSR_TLBIDX_SIZE_MASK 0x3f000000 > +#define CSR_TLBIDX_PS_SHIFT 24 > +#define CSR_TLBIDX_SIZE CSR_TLBIDX_PS_SHIFT > +#define CSR_TLBREHI_PS_SHIFT 0x0 > +#define CSR_TLBREHI_PS 0x3f > + > +#endif > -- > 2.27.0
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110788): https://edk2.groups.io/g/devel/message/110788 Mute This Topic: https://groups.io/mt/102413840/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-