Files
opensbi/lib/utils/reset/fdt_reset_htif.c
Samuel Holland 434add551c lib: utils: Initialize miscellaneous drivers in one pass
For driver subsystems that are not tightly integrated into the OpenSBI
init sequence, it is not important that the drivers are initialized in
any particular order. By putting all of these drivers in one array, they
can all be initialized with a single pass through the devicetree. This
saves about 10 ms of boot time on HiFive Unmatched.

Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
2025-02-12 21:39:25 +05:30

39 lines
923 B
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_utils/fdt/fdt_driver.h>
#include <sbi_utils/fdt/fdt_helper.h>
#include <sbi_utils/sys/htif.h>
static int htif_reset_init(const void *fdt, int nodeoff,
const struct fdt_match *match)
{
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);
return htif_system_reset_init(custom, fromhost_addr, tohost_addr);
}
static const struct fdt_match htif_reset_match[] = {
{ .compatible = "ucb,htif0" },
{ },
};
const struct fdt_driver fdt_reset_htif = {
.match_table = htif_reset_match,
.init = htif_reset_init
};