Files
opensbi/include/sbi_utils/fdt/fdt_domain.h
T
Anup Patel 71faf5a307 lib: sbi_domain: Re-work boot-time assignment of HARTs to non-ROOT domains
Assign a non-ROOT domain to a HART on first come first serve basis if the
HART is listed as a possible HART of the non-ROOT domain. If no non-ROOT
domain list a HART as possible HART then the HART is assigned to the ROOT
domain.

This allows us to drop the OpenSBI specific DT property from each CPU DT
node (aka "opensbi-domain" Dt property).

Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com>
Reviewed-by: Pawandeep Oza <pawandeep.oza@oss.qualcomm.com>
Tested-by: Pawandeep Oza <pawandeep.oza@oss.qualcomm.com>
Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.com>
Link: https://lore.kernel.org/r/20260905131748.922920-3-anup.patel@oss.qualcomm.com
Signed-off-by: Anup Patel <anup@brainfault.org>
2026-09-16 09:21:21 +05:30

82 lines
2.0 KiB
C

// SPDX-License-Identifier: BSD-2-Clause
/*
* fdt_domain.c - Flat Device Tree Domain helper routines
*
* Copyright (c) 2020 Western Digital Corporation or its affiliates.
*
* Authors:
* Anup Patel <anup.patel@wdc.com>
*/
#ifndef __FDT_DOMAIN_H__
#define __FDT_DOMAIN_H__
#include <sbi/sbi_types.h>
#ifdef CONFIG_FDT_DOMAIN
struct sbi_domain;
/**
* Iterate over each domains in device tree
*
* @param fdt device tree blob
* @param opaque private pointer for each iteration
* @param fn callback function for each iteration
*
* @return 0 on success and negative error code on failure
*/
int fdt_iterate_each_domain(void *fdt, void *opaque,
int (*fn)(void *fdt, int domain_offset,
void *opaque));
/**
* Iterate over each memregion of a domain in device tree
*
* @param fdt device tree blob
* @param domain_offset domain DT node offset
* @param opaque private pointer for each iteration
* @param fn callback function for each iteration
*
* @return 0 on success and negative error code on failure
*/
int fdt_iterate_each_memregion(void *fdt, int domain_offset, void *opaque,
int (*fn)(void *fdt, int domain_offset,
int region_offset, u32 region_access,
void *opaque));
/**
* Fix up the domain configuration in the device tree
*
* This routine:
* 1. Disables MMIO devices not accessible to the coldboot HART domain
* 2. Removes domain configuration DT node under /chosen DT node
*
* It is recommended that platform support call this function in
* their final_init() platform operation.
*
* @param fdt device tree blob
*/
void fdt_domain_fixup(void *fdt);
/**
* Populate domains from device tree
*
* It is recommended that platform support call this function in
* their domains_init() platform operation.
*
* @param fdt device tree blob
*
* @return 0 on success and negative error code on failure
*/
int fdt_domains_populate(const void *fdt);
#else
static inline void fdt_domain_fixup(void *fdt) { }
static inline int fdt_domains_populate(const void *fdt) { return 0; }
#endif
#endif /* __FDT_DOMAIN_H__ */