diff options
author | Andrew Turner <andrew@FreeBSD.org> | 2022-10-04 11:46:24 +0000 |
---|---|---|
committer | Andrew Turner <andrew@FreeBSD.org> | 2023-01-23 12:36:27 +0000 |
commit | 39c0645817579e56683d00d38d3290a2c0b5f2cf (patch) | |
tree | 8c5761333e4304e172b4b751282ceeb72a3de14c | |
parent | b3a94d46752d23ca75f698dce01bbb4ac33f43c8 (diff) | |
download | src-39c0645817579e56683d00d38d3290a2c0b5f2cf.tar.gz src-39c0645817579e56683d00d38d3290a2c0b5f2cf.zip |
Clear the indirect flag in the GICv3 ITS driver
Summary:
The indirect flag tells the hardware to use a flat or two level table.
As we only support using the flat table ensure the flag that marks
which is in use is set correctly.
We can't rely on this being set correctly as some firmware may set the
indirect flag, e.g. booting from LinuxBoot.
Reviewed by: imp
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D36873
(cherry picked from commit a0a4f5cf17236c7245250d1a9ec6fe39286f4a25)
-rw-r--r-- | sys/arm64/arm64/gic_v3_reg.h | 3 | ||||
-rw-r--r-- | sys/arm64/arm64/gicv3_its.c | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/sys/arm64/arm64/gic_v3_reg.h b/sys/arm64/arm64/gic_v3_reg.h index 94033d28cb01..b52fd0389d7f 100644 --- a/sys/arm64/arm64/gic_v3_reg.h +++ b/sys/arm64/arm64/gic_v3_reg.h @@ -351,6 +351,9 @@ #define GITS_BASER_VALID (1UL << 63) +#define GITS_BASER_INDIRECT_SHIFT 62 +#define GITS_BASER_INDIRECT (1UL << GITS_BASER_INDIRECT_SHIFT) + #define GITS_BASER_TYPE_SHIFT 56 #define GITS_BASER_TYPE(x) \ (((x) & GITS_BASER_TYPE_MASK) >> GITS_BASER_TYPE_SHIFT) diff --git a/sys/arm64/arm64/gicv3_its.c b/sys/arm64/arm64/gicv3_its.c index 82fd57cb42e8..afc334b91e7d 100644 --- a/sys/arm64/arm64/gicv3_its.c +++ b/sys/arm64/arm64/gicv3_its.c @@ -498,7 +498,7 @@ gicv3_its_table_init(device_t dev, struct gicv3_its_softc *sc) nitspages = howmany(its_tbl_size, page_size); /* Clear the fields we will be setting */ - reg &= ~(GITS_BASER_VALID | + reg &= ~(GITS_BASER_VALID | GITS_BASER_INDIRECT | GITS_BASER_CACHE_MASK | GITS_BASER_TYPE_MASK | GITS_BASER_ESIZE_MASK | GITS_BASER_PA_MASK | GITS_BASER_SHARE_MASK | GITS_BASER_PSZ_MASK | |