mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00

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 <mchitale@ventanamicro.com> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
/*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*
|
|
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
|
|
*
|
|
* Authors:
|
|
* Anup Patel <anup.patel@wdc.com>
|
|
*/
|
|
|
|
#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>
|
|
|
|
static const struct fdt_match serial_htif_match[] = {
|
|
{ .compatible = "ucb,htif0" },
|
|
{ },
|
|
};
|
|
|
|
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;
|
|
|
|
if (!fdt_get_node_addr_size(fdt, nodeoff, 0, &fromhost_addr, NULL)) {
|
|
custom = true;
|
|
tohost_addr = fromhost_addr + sizeof(uint64_t);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
struct fdt_serial fdt_serial_htif = {
|
|
.match_table = serial_htif_match,
|
|
.init = serial_htif_init
|
|
};
|