From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: Chao Li <lichao@loongson.cn>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Gao, Liming" <gaoliming@byosoft.com.cn>,
"Liu, Zhiguang" <zhiguang.liu@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [PATCH v2 01/30] MdePkg: Add the header file named Csr.h for LoongArch64
Date: Tue, 7 Nov 2023 03:30:46 +0000 [thread overview]
Message-ID: <CO1PR11MB49298D5DC4D32C8C51DA2315D2A9A@CO1PR11MB4929.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20231106032618.2252258-1-lichao@loongson.cn>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
> -----Original Message-----
> From: Chao Li <lichao@loongson.cn>
> Sent: Sunday, November 5, 2023 7:26 PM
> To: devel@edk2.groups.io
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@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.kinney@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
> Signed-off-by: Chao Li <lichao@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/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2023-11-07 3:31 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-06 3:25 [edk2-devel] [PATCH v2 00/30] Enable LoongArch virtual machine in edk2 Chao Li
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 01/30] MdePkg: Add the header file named Csr.h for LoongArch64 Chao Li
2023-11-07 3:30 ` Michael D Kinney [this message]
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 02/30] MdePkg: Add LoongArch64 FPU function set into BaseCpuLib Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 03/30] MdePkg: Add LoongArch64 exception function set into BaseLib Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:26 ` [edk2-devel] [PATCH v2 04/30] MdePkg: Add LoongArch64 local interrupt " Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 05/30] MdePkg: Add LoongArch Cpucfg function Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 06/30] MdePkg: Add read stable counter operation for LoongArch Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 07/30] MdePkg: Add CSR " Chao Li
2023-11-07 3:31 ` Michael D Kinney
2023-11-06 3:27 ` [edk2-devel] [PATCH v2 08/30] MdePkg: Add IOCSR " Chao Li
2023-11-07 3:32 ` Michael D Kinney
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 09/30] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 10/30] UefiCpuPkg: Add CPU exception library for LoongArch Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 11/30] UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg Chao Li
2023-11-09 1:17 ` Andrei Warkentin
2023-11-14 2:00 ` Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 12/30] UefiCpuPkg: Add LoongArch64CpuMmuLib " Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 13/30] UefiCpuPkg: Add multiprocessor library for LoongArch64 Chao Li
2023-11-06 3:28 ` [edk2-devel] [PATCH v2 14/30] UefiCpuPkg: Add CpuDxe driver " Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 15/30] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
2023-11-15 18:55 ` Leif Lindholm
2023-11-16 8:15 ` Pedro Falcato
2023-11-16 9:17 ` Chao Li
2023-11-16 11:21 ` Leif Lindholm
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 16/30] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
2023-11-07 9:37 ` Gerd Hoffmann
2023-11-13 11:46 ` Sami Mujawar
2023-11-14 1:41 ` Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 17/30] OvmfPkg/LoongArchVirt: Add PciCpuIo2Dxe module Chao Li
2023-11-07 9:42 ` Gerd Hoffmann
2023-11-07 10:03 ` Chao Li
2023-11-08 23:11 ` Sunil V L
2023-11-10 3:31 ` Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 18/30] OvmfPkg/LoongArchVirt: Add stable timer driver Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 19/30] OvmfPkg/LoongArchVirt: Add a NULL library named CollectApResouceLibNull Chao Li
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 20/30] OvmfPkg/LoongArchVirt: Add serial port library Chao Li
2023-11-07 9:47 ` Gerd Hoffmann
2023-11-07 10:12 ` Chao Li
2023-11-08 22:21 ` Laszlo Ersek
2023-11-10 4:51 ` Chao Li
2023-11-13 10:45 ` Laszlo Ersek
2023-11-06 3:29 ` [edk2-devel] [PATCH v2 21/30] OvmfPkg/LoongArchVirt: Add real time clock library Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 22/30] OvmfPkg/LoongArchVirt: Add NorFlashQemuLib Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 23/30] OvmfPkg/LoongArchVirt: Add PeiServiceTablePointerLib Chao Li
2023-11-08 22:22 ` Laszlo Ersek
2023-11-10 6:44 ` Chao Li
2023-11-13 11:02 ` Laszlo Ersek
2023-11-14 2:08 ` Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 24/30] OvmfPkg/LoongArchVirt: Add platform boot manager library Chao Li
2023-11-08 22:24 ` Laszlo Ersek
2023-11-10 7:09 ` Chao Li
2023-11-10 9:46 ` Gerd Hoffmann
2023-11-13 11:08 ` Laszlo Ersek
2023-11-15 3:21 ` Chao Li
2023-11-15 12:52 ` Laszlo Ersek
2023-11-16 7:09 ` Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 25/30] OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 26/30] OvmfPkg/LoongArchVirt: Add reset system library Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 27/30] OvmfPkg/LoongArchVirt: Support SEC phase Chao Li
2023-11-06 3:30 ` [edk2-devel] [PATCH v2 28/30] OvmfPkg/LoongArchVirt: Support PEI phase Chao Li
2023-11-06 3:31 ` [edk2-devel] [PATCH v2 29/30] OvmfPkg/LoongArchVirt: Add build file Chao Li
2023-11-06 3:31 ` [edk2-devel] [PATCH v2 30/30] OvmfPkg/LoongArchVirt: Add self introduction file Chao Li
[not found] ` <1794EAF40590BB23.26468@groups.io>
2023-11-07 6:41 ` [edk2-devel] [PATCH v2 09/30] UefiCpuPkg: Add LoongArch64 CPU Timer library Chao Li
[not found] ` <1794EB01154A1CFD.12603@groups.io>
2023-11-07 8:40 ` [edk2-devel] [PATCH v2 15/30] EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 Chao Li
[not found] ` <1794EB0445E96DCB.26468@groups.io>
2023-11-07 8:41 ` [edk2-devel] [PATCH v2 16/30] ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg Chao Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CO1PR11MB49298D5DC4D32C8C51DA2315D2A9A@CO1PR11MB4929.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox