qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alvin Chang <vivahavey@gmail.com>
To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org
Cc: alistair.francis@wdc.com, Andrew Jones <ajones@ventanamicro.com>,
	liweiwei@iscas.ac.cn, dbarboza@ventanamicro.com
Subject: RE: [PATCH v5] target/riscv: update checks on writing pmpcfg for Smepmp to version 1.0
Date: Wed, 6 Dec 2023 09:12:12 +0800	[thread overview]
Message-ID: <CAEV2DRr8HNQSM=kiv6+Rsaad28rw0eCaPrNeCpEaN8O5LOd5bg@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 4280 bytes --]

Ping for review.



> -----Original Message-----

> From: Alvin Che-Chia Chang(張哲嘉) <alvinga@andestech.com>

> Sent: Tuesday, November 14, 2023 10:23 AM

> To: qemu-riscv@nongnu.org; qemu-devel@nongnu.org

> Cc: alistair.francis@wdc.com; liweiwei@iscas.ac.cn; Alvin Che-Chia Chang(張

> 哲嘉) <alvinga@andestech.com>

> Subject: [PATCH v5] target/riscv: update checks on writing pmpcfg for
Smepmp

> to version 1.0

>

> Current checks on writing pmpcfg for Smepmp follows Smepmp version 0.9.1.

> However, Smepmp specification has already been ratified, and there are
some

> differences between version 0.9.1 and 1.0. In this commit we update the

> checks of writing pmpcfg to follow Smepmp version 1.0.

>

> When mseccfg.MML is set, the constraints to modify PMP rules are:

> 1. Locked rules cannot be removed or modified until a PMP reset, unless

>    mseccfg.RLB is set.

> 2. From Smepmp specification version 1.0, chapter 2 section 4b:

>    Adding a rule with executable privileges that either is M-mode-only

>    or a locked Shared-Region is not possible and such pmpcfg writes are

>    ignored, leaving pmpcfg unchanged.

>

> The commit transfers the value of pmpcfg into the index of the Smepmp
truth

> table, and checks the rules by aforementioned specification changes.

>

> Signed-off-by: Alvin Chang <alvinga@andestech.com>

> ---

> Changes from v4: Rebase on master.

>

> Changes from v3: Modify "epmp_operation" to "smepmp_operation".

>

> Changes from v2: Adopt switch case ranges and numerical order.

>

> Changes from v1: Convert ePMP over to Smepmp.

>

>  target/riscv/pmp.c | 40 ++++++++++++++++++++++++++++++++--------

>  1 file changed, 32 insertions(+), 8 deletions(-)

>

> diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c index

> 162e88a90a..4069514069 100644

> --- a/target/riscv/pmp.c

> +++ b/target/riscv/pmp.c

> @@ -102,16 +102,40 @@ static bool pmp_write_cfg(CPURISCVState *env,

> uint32_t pmp_index, uint8_t val)

>                  locked = false;

>              }

>

> -            /* mseccfg.MML is set */

> -            if (MSECCFG_MML_ISSET(env)) {

> -                /* not adding execute bit */

> -                if ((val & PMP_LOCK) != 0 && (val & PMP_EXEC) !=

> PMP_EXEC) {

> +            /*

> +             * mseccfg.MML is set. Locked rules cannot be removed or

> modified

> +             * until a PMP reset. Besides, from Smepmp specification

> version 1.0

> +             * , chapter 2 section 4b says:

> +             * Adding a rule with executable privileges that either is

> +             * M-mode-only or a locked Shared-Region is not possible and

> such

> +             * pmpcfg writes are ignored, leaving pmpcfg unchanged.

> +             */

> +            if (MSECCFG_MML_ISSET(env) && !pmp_is_locked(env,

> pmp_index)) {

> +                /*

> +                 * Convert the PMP permissions to match the truth table

> in the

> +                 * Smepmp spec.

> +                 */

> +                const uint8_t smepmp_operation =

> +                    ((val & PMP_LOCK) >> 4) | ((val & PMP_READ) << 2)

> |

> +                    (val & PMP_WRITE) | ((val & PMP_EXEC) >> 2);

> +

> +                switch (smepmp_operation) {

> +                case 0 ... 8:

>                      locked = false;

> -                }

> -                /* shared region and not adding X bit */

> -                if ((val & PMP_LOCK) != PMP_LOCK &&

> -                    (val & 0x7) != (PMP_WRITE | PMP_EXEC)) {

> +                    break;

> +                case 9 ... 11:

> +                    break;

> +                case 12:

> +                    locked = false;

> +                    break;

> +                case 13:

> +                    break;

> +                case 14:

> +                case 15:

>                      locked = false;

> +                    break;

> +                default:

> +                    g_assert_not_reached();

>                  }

>              }

>          } else {

> --

> 2.34.1

[-- Attachment #2: Type: text/html, Size: 19218 bytes --]

             reply	other threads:[~2023-12-06  1:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-06  1:12 Alvin Chang [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-12-06  5:36 [PATCH v5] target/riscv: update checks on writing pmpcfg for Smepmp to version 1.0 Alvin Chang
2023-12-15  5:25 ` Alistair Francis
2023-11-14  2:22 Alvin Chang via
2023-12-06  3:38 ` Alistair Francis

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='CAEV2DRr8HNQSM=kiv6+Rsaad28rw0eCaPrNeCpEaN8O5LOd5bg@mail.gmail.com' \
    --to=vivahavey@gmail.com \
    --cc=ajones@ventanamicro.com \
    --cc=alistair.francis@wdc.com \
    --cc=dbarboza@ventanamicro.com \
    --cc=liweiwei@iscas.ac.cn \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    /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;
as well as URLs for NNTP newsgroup(s).