All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: Xiaojuan Yang <yangxiaojuan@loongson.cn>, qemu-devel@nongnu.org
Cc: Song Gao <gaosong@loongson.cn>
Subject: Re: [RFC PATCH v2 02/30] target/loongarch: Add CSR registers definition
Date: Thu, 11 Nov 2021 14:29:06 +0100	[thread overview]
Message-ID: <7bb438bb-e4ae-8f28-8f9e-7baecbccc1ac@linaro.org> (raw)
In-Reply-To: <1636594528-8175-3-git-send-email-yangxiaojuan@loongson.cn>

On 11/11/21 2:35 AM, Xiaojuan Yang wrote:
> +#define LOONGARCH_CSR_MISC           0x3 /* Misc config */
> +

Missing bitfield definitions for misc.

> +#define  EXCODE_IP                   64

What's this?

> +#define  EXCCODE_INT                 0
> +#define  EXCCODE_PIL                 1
> +#define  EXCCODE_PIS                 2
> +#define  EXCCODE_PIF                 3
> +#define  EXCCODE_PME                 4
> +#define  EXCCODE_PNR                 5
> +#define  EXCCODE_PNX                 6
> +#define  EXCCODE_PPI                 7
> +#define  EXCCODE_ADE                 8

ADEF vs ADEM?

> +#define  EXCCODE_ALE                 9
> +#define  EXCCODE_BCE                 10
> +#define  EXCCODE_SYS                 11
> +#define  EXCCODE_BRK                 12
> +#define  EXCCODE_INE                 13
> +#define  EXCCODE_IPE                 14
> +#define  EXCCODE_FPD                 15
> +#define  EXCCODE_SXD                 16
> +#define  EXCCODE_ASXD                17
> +#define  EXCCODE_FPE                 18 /* Have different expsubcode */
> +#define  EXCCODE_VFPE                18
> +#define  EXCCODE_WPEF                19 /* Have different expsubcode */
> +#define  EXCCODE_WPEM                19
> +#define  EXCCODE_BTD                 20
> +#define  EXCCODE_BTE                 21

Missing BSPR, HVC, GCSC, GCHC.

> +#define LOONGARCH_CSR_ERA            0x6 /* ERA */

Not really helpful to name the acronym with the acronym.
"Exception return address".

> +#define LOONGARCH_CSR_TLBELO0        0x12 /* TLB EntryLo0 */
> +FIELD(CSR_TLBELO0, V, 0, 1)
> +FIELD(CSR_TLBELO0, D, 1, 1)
> +FIELD(CSR_TLBELO0, PLV, 2, 2)
> +FIELD(CSR_TLBELO0, MAT, 4, 2)
> +FIELD(CSR_TLBELO0, G, 6, 1)
> +FIELD(CSR_TLBELO0, PPN, 12, 36)
> +FIELD(CSR_TLBELO0, NR, 61, 1)
> +FIELD(CSR_TLBELO0, NX, 62, 1)
> +FIELD(CSR_TLBELO0, RPLV, 63, 1)
> +
> +#define LOONGARCH_CSR_TLBELO1        0x13 /* 64 TLB EntryLo1 */
> +FIELD(CSR_TLBELO1, V, 0, 1)
> +FIELD(CSR_TLBELO1, D, 1, 1)
> +FIELD(CSR_TLBELO1, PLV, 2, 2)
> +FIELD(CSR_TLBELO1, MAT, 4, 2)
> +FIELD(CSR_TLBELO1, G, 6, 1)
> +FIELD(CSR_TLBELO1, PPN, 12, 36)
> +FIELD(CSR_TLBELO1, NR, 61, 1)
> +FIELD(CSR_TLBELO1, NX, 62, 1)
> +FIELD(CSR_TLBELO1, RPLV, 63, 1)

Better to define the fields once, dropping the 0/1 from the name.

> +#define LOONGARCH_CSR_PWCL           0x1c /* PWCl */

"Page walk controller, low addr"

> +#define LOONGARCH_CSR_PWCH           0x1d /* PWCh */

"Page walk controller, high addr"

> +#define LOONGARCH_CSR_STLBPS     0x1e /* 64 */

64?  "STLB Page size".

> +#define LOONGARCH_CSR_RVACFG         0x1f

"Reduced virtual address config"

> +/* Save registers */
> +#define LOONGARCH_CSR_SAVE0            0x30
> +#define LOONGARCH_CSR_SAVE1            0x31
> +#define LOONGARCH_CSR_SAVE2            0x32
> +#define LOONGARCH_CSR_SAVE3            0x33
> +#define LOONGARCH_CSR_SAVE4            0x34
> +#define LOONGARCH_CSR_SAVE5            0x35
> +#define LOONGARCH_CSR_SAVE6            0x36
> +#define LOONGARCH_CSR_SAVE7            0x37

Might as well must define SAVE0, and comment that the count is in PRCFG1.SAVE_NUM.

> +#define  CSR_DMW_BASE_SH             48

What's this?  It looks like you should be using TARGET_VIRT_ADDR_SPACE_BITS anyway.

> +#define dmwin_va2pa(va) \
> +    (va & (((unsigned long)1 << CSR_DMW_BASE_SH) - 1))

Using unsigned long is wrong, breaking 32-bit hosts.
You want

     ((va) & MAKE_64BIT_MASK(0, TARGET_VIRT_ADDR_SPACE_BITS))

> +/* Performance Counter registers */
> +#define LOONGARCH_CSR_PERFCTRL0      0x200 /* 32 perf event 0 config */
> +#define LOONGARCH_CSR_PERFCNTR0      0x201 /* 64 perf event 0 count value */
> +#define LOONGARCH_CSR_PERFCTRL1      0x202 /* 32 perf event 1 config */
> +#define LOONGARCH_CSR_PERFCNTR1      0x203 /* 64 perf event 1 count value */
> +#define LOONGARCH_CSR_PERFCTRL2      0x204 /* 32 perf event 2 config */
> +#define LOONGARCH_CSR_PERFCNTR2      0x205 /* 64 perf event 2 count value */
> +#define LOONGARCH_CSR_PERFCTRL3      0x206 /* 32 perf event 3 config */
> +#define LOONGARCH_CSR_PERFCNTR3      0x207 /* 64 perf event 3 count value */

Perhaps better to define

#define LOONGARCH_CSR_PERFCTRL(N)  (0x200 + 2 * N)

etc.

> +#define LOONGARCH_CSR_DB0ADDR        0x310 /* data breakpoint 0 address */
> +#define LOONGARCH_CSR_DB0MASK        0x311 /* data breakpoint 0 mask */
> +#define LOONGARCH_CSR_DB0CTL         0x312 /* data breakpoint 0 control */
> +#define LOONGARCH_CSR_DB0ASID        0x313 /* data breakpoint 0 asid */

Likewise.

> +    uint64_t CSR_SAVE0;
> +    uint64_t CSR_SAVE1;
> +    uint64_t CSR_SAVE2;
> +    uint64_t CSR_SAVE3;
> +    uint64_t CSR_SAVE4;
> +    uint64_t CSR_SAVE5;
> +    uint64_t CSR_SAVE6;
> +    uint64_t CSR_SAVE7;

Better as an array.

> +    uint64_t CSR_PERFCTRL0;
> +    uint64_t CSR_PERFCNTR0;
> +    uint64_t CSR_PERFCTRL1;
> +    uint64_t CSR_PERFCNTR1;
> +    uint64_t CSR_PERFCTRL2;
> +    uint64_t CSR_PERFCNTR2;
> +    uint64_t CSR_PERFCTRL3;
> +    uint64_t CSR_PERFCNTR3;

Likewise.

> +    uint64_t CSR_DB0ADDR;
> +    uint64_t CSR_DB0MASK;
> +    uint64_t CSR_DB0CTL;
> +    uint64_t CSR_DB0ASID;
> +    uint64_t CSR_DB1ADDR;
> +    uint64_t CSR_DB1MASK;
> +    uint64_t CSR_DB1CTL;
> +    uint64_t CSR_DB1ASID;
> +    uint64_t CSR_DB2ADDR;
> +    uint64_t CSR_DB2MASK;
> +    uint64_t CSR_DB2CTL;
> +    uint64_t CSR_DB2ASID;
> +    uint64_t CSR_DB3ADDR;
> +    uint64_t CSR_DB3MASK;
> +    uint64_t CSR_DB3CTL;
> +    uint64_t CSR_DB3ASID;

Likewise.

> +    uint64_t CSR_IB0ADDR;
> +    uint64_t CSR_IB0MASK;
> +    uint64_t CSR_IB0CTL;
> +    uint64_t CSR_IB0ASID;
> +    uint64_t CSR_IB1ADDR;
> +    uint64_t CSR_IB1MASK;
> +    uint64_t CSR_IB1CTL;
> +    uint64_t CSR_IB1ASID;
> +    uint64_t CSR_IB2ADDR;
> +    uint64_t CSR_IB2MASK;
> +    uint64_t CSR_IB2CTL;
> +    uint64_t CSR_IB2ASID;
> +    uint64_t CSR_IB3ADDR;
> +    uint64_t CSR_IB3MASK;
> +    uint64_t CSR_IB3CTL;
> +    uint64_t CSR_IB3ASID;
> +    uint64_t CSR_IB4ADDR;
> +    uint64_t CSR_IB4MASK;
> +    uint64_t CSR_IB4CTL;
> +    uint64_t CSR_IB4ASID;
> +    uint64_t CSR_IB5ADDR;
> +    uint64_t CSR_IB5MASK;
> +    uint64_t CSR_IB5CTL;
> +    uint64_t CSR_IB5ASID;
> +    uint64_t CSR_IB6ADDR;
> +    uint64_t CSR_IB6MASK;
> +    uint64_t CSR_IB6CTL;
> +    uint64_t CSR_IB6ASID;
> +    uint64_t CSR_IB7ADDR;
> +    uint64_t CSR_IB7MASK;
> +    uint64_t CSR_IB7CTL;
> +    uint64_t CSR_IB7ASID;

Likewise.


r~


  reply	other threads:[~2021-11-11 13:33 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-11  1:34 [RFC PATCH v2 00/30] Add Loongarch softmmu support Xiaojuan Yang
2021-11-11  1:34 ` [RFC PATCH v2 01/30] target/loongarch: Update README Xiaojuan Yang
2021-11-11 11:50   ` chen huacai
2021-11-15  3:34     ` yangxiaojuan
2021-11-11  1:35 ` [RFC PATCH v2 02/30] target/loongarch: Add CSR registers definition Xiaojuan Yang
2021-11-11 13:29   ` Richard Henderson [this message]
2021-11-12  2:14     ` yangxiaojuan
2021-11-12  7:14       ` Richard Henderson
2021-11-11 13:33   ` Richard Henderson
2021-11-11  1:35 ` [RFC PATCH v2 03/30] target/loongarch: Add basic vmstate description of CPU Xiaojuan Yang
2021-11-11 13:30   ` Richard Henderson
2021-11-11  1:35 ` [RFC PATCH v2 04/30] target/loongarch: Define exceptions for LoongArch Xiaojuan Yang
2021-11-11 13:36   ` Richard Henderson
2021-11-12  2:24     ` yangxiaojuan
2021-11-11  1:35 ` [RFC PATCH v2 05/30] target/loongarch: Implement qmp_query_cpu_definitions() Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 06/30] target/loongarch: Add stabletimer support Xiaojuan Yang
2021-11-11 14:34   ` Richard Henderson
2021-11-11  1:35 ` [RFC PATCH v2 07/30] target/loongarch: Add MMU support for LoongArch CPU Xiaojuan Yang
2021-11-11 15:53   ` Richard Henderson
2021-11-17  6:37     ` yangxiaojuan
2021-11-17  6:59       ` Richard Henderson
2021-11-11  1:35 ` [RFC PATCH v2 08/30] target/loongarch: Add LoongArch CSR/IOCSR instruction Xiaojuan Yang
2021-11-11 17:43   ` Richard Henderson
2021-11-17  8:48     ` yangxiaojuan
2021-11-11  1:35 ` [RFC PATCH v2 09/30] target/loongarch: Add TLB instruction support Xiaojuan Yang
2021-11-11 18:14   ` Richard Henderson
2021-11-17  7:29     ` yangxiaojuan
2021-11-17  8:22       ` Richard Henderson
2021-11-17  8:53         ` yangxiaojuan
2021-11-11  1:35 ` [RFC PATCH v2 10/30] target/loongarch: Add other core instructions support Xiaojuan Yang
2021-11-14 10:19   ` Richard Henderson
2021-11-11  1:35 ` [RFC PATCH v2 11/30] target/loongarch: Add LoongArch interrupt and exception handle Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 12/30] target/loongarch: Add timer related instructions support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 13/30] target/loongarch: Add gdb support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 14/30] target/loongarch: Implement privilege instructions disassembly Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 15/30] hw/pci-host: Add ls7a1000 PCIe Host bridge support for Loongson Platform Xiaojuan Yang
2021-11-11 13:17   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 16/30] hw/loongarch: Add a virt LoongArch 3A5000 board support Xiaojuan Yang
2021-11-11 14:17   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 17/30] hw/loongarch: Add LoongArch cpu interrupt support(CPUINTC) Xiaojuan Yang
2021-11-11 14:22   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 18/30] hw/loongarch: Add LoongArch ipi interrupt support(IPI) Xiaojuan Yang
2021-11-11 14:28   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 19/30] hw/intc: Add LoongArch ls7a interrupt controller support(PCH-PIC) Xiaojuan Yang
2021-11-11 14:37   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 20/30] hw/intc: Add LoongArch ls7a msi interrupt controller support(PCH-MSI) Xiaojuan Yang
2021-11-11 14:40   ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 21/30] hw/intc: Add LoongArch extioi interrupt controller(EIOINTC) Xiaojuan Yang
2021-11-11 14:49   ` Mark Cave-Ayland
2021-11-25  8:20     ` yangxiaojuan
2021-11-26  8:19       ` Mark Cave-Ayland
2021-11-11  1:35 ` [RFC PATCH v2 22/30] hw/loongarch: Add irq hierarchy for the system Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 23/30] hw/loongarch: Add some devices support for 3A5000 Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 24/30] hw/loongarch: Add LoongArch ls7a rtc device support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 25/30] hw/loongarch: Add default bios startup support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 26/30] hw/loongarch: Add -kernel and -initrd options support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 27/30] hw/loongarch: Add LoongArch smbios support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 28/30] hw/loongarch: Add LoongArch acpi support Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 29/30] hw/loongarch: Add machine->possible_cpus Xiaojuan Yang
2021-11-11  1:35 ` [RFC PATCH v2 30/30] hw/loongarch: Add Numa support Xiaojuan Yang
2021-11-11 14:58 ` [RFC PATCH v2 00/30] Add Loongarch softmmu support Mark Cave-Ayland
2021-11-12  1:26   ` yangxiaojuan

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-all 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=7bb438bb-e4ae-8f28-8f9e-7baecbccc1ac@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=gaosong@loongson.cn \
    --cc=qemu-devel@nongnu.org \
    --cc=yangxiaojuan@loongson.cn \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.