summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMayuresh Chitale <[email protected]>2023-09-07 17:19:46 +0530
committerAnup Patel <[email protected]>2023-09-24 17:04:41 +0530
commite8bc1621c6882766815d2a46f5c2ae88c977bfa4 (patch)
tree6f63a26a958955a9b51b30136dd942ad9be36e76
parent73aea28264977286f72d2efe615dd1773d94e2cd (diff)
lib: utils/serial: Add shared regions for serial drivers
The serial driver regions used by OpenSBI should be marked as a shared read-write regions between M-mode and SU-mode as those are accessed by earlycon and the corresponding tty serial drivers running in 'S' mode. When the smepmp extension is enabled, PMP entries for these shared regions will get programmed. Signed-off-by: Mayuresh Chitale <[email protected]> Signed-off-by: Anup Patel <[email protected]>
-rw-r--r--lib/utils/serial/cadence-uart.c6
-rw-r--r--lib/utils/serial/fdt_serial_htif.c9
-rw-r--r--lib/utils/serial/uart8250.c7
3 files changed, 20 insertions, 2 deletions
diff --git a/lib/utils/serial/cadence-uart.c b/lib/utils/serial/cadence-uart.c
index 8a2b6ba7..30fbb95f 100644
--- a/lib/utils/serial/cadence-uart.c
+++ b/lib/utils/serial/cadence-uart.c
@@ -6,6 +6,8 @@
* Author: Jun Liang Tan <[email protected]>
*/
+#include <sbi/sbi_domain.h>
+#include <sbi/riscv_asm.h>
#include <sbi/riscv_io.h>
#include <sbi/sbi_console.h>
#include <sbi_utils/serial/cadence-uart.h>
@@ -124,5 +126,7 @@ int cadence_uart_init(unsigned long base, u32 in_freq, u32 baudrate)
sbi_console_set_device(&cadence_console);
- return 0;
+ return sbi_domain_root_add_memrange(base, PAGE_SIZE, PAGE_SIZE,
+ (SBI_DOMAIN_MEMREGION_MMIO |
+ SBI_DOMAIN_MEMREGION_SHARED_SURW_MRW));
}
diff --git a/lib/utils/serial/fdt_serial_htif.c b/lib/utils/serial/fdt_serial_htif.c
index 61f66d68..7d88e7a1 100644
--- a/lib/utils/serial/fdt_serial_htif.c
+++ b/lib/utils/serial/fdt_serial_htif.c
@@ -7,6 +7,8 @@
* Anup Patel <[email protected]>
*/
+#include <sbi/riscv_asm.h>
+#include <sbi/sbi_domain.h>
#include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/serial/fdt_serial.h>
#include <sbi_utils/sys/htif.h>
@@ -19,6 +21,7 @@ static const struct fdt_match serial_htif_match[] = {
static int serial_htif_init(void *fdt, int nodeoff,
const struct fdt_match *match)
{
+ int rc;
bool custom = false;
uint64_t fromhost_addr = 0, tohost_addr = 0;
@@ -29,6 +32,12 @@ static int serial_htif_init(void *fdt, int nodeoff,
fdt_get_node_addr_size(fdt, nodeoff, 1, &tohost_addr, NULL);
+ rc = sbi_domain_root_add_memrange(fromhost_addr, PAGE_SIZE, PAGE_SIZE,
+ (SBI_DOMAIN_MEMREGION_MMIO |
+ SBI_DOMAIN_MEMREGION_SHARED_SURW_MRW));
+ if (rc)
+ return rc;
+
return htif_serial_init(custom, fromhost_addr, tohost_addr);
}
diff --git a/lib/utils/serial/uart8250.c b/lib/utils/serial/uart8250.c
index 99bf1bf7..4d158d3b 100644
--- a/lib/utils/serial/uart8250.c
+++ b/lib/utils/serial/uart8250.c
@@ -7,8 +7,10 @@
* Anup Patel <[email protected]>
*/
+#include <sbi/riscv_asm.h>
#include <sbi/riscv_io.h>
#include <sbi/sbi_console.h>
+#include <sbi/sbi_domain.h>
#include <sbi_utils/serial/uart8250.h>
/* clang-format off */
@@ -133,5 +135,8 @@ int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift,
sbi_console_set_device(&uart8250_console);
- return 0;
+ return sbi_domain_root_add_memrange(base + reg_offset, PAGE_SIZE,
+ PAGE_SIZE,
+ (SBI_DOMAIN_MEMREGION_MMIO |
+ SBI_DOMAIN_MEMREGION_SHARED_SURW_MRW));
}