/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2020 Western Digital Corporation or its affiliates. * Copyright (C) 2020 Google, Inc */ #ifndef _ASM_RISCV_SOC_H #define _ASM_RISCV_SOC_H #include <linux/of.h> #include <linux/linkage.h> #include <linux/types.h> #define SOC_EARLY_INIT_DECLARE(name, compat, fn) \ static const struct of_device_id __soc_early_init__##name \ __used __section(__soc_early_init_table) \ = { .compatible = compat, .data = fn } void soc_early_init(void); extern unsigned long __soc_early_init_table_start; extern unsigned long __soc_early_init_table_end; /* * Allows Linux to provide a device tree, which is necessary for SOCs that * don't provide a useful one on their own. */ struct soc_builtin_dtb { unsigned long vendor_id; unsigned long arch_id; unsigned long imp_id; void *(*dtb_func)(void); }; /* * The argument name must specify a valid DTS file name without the dts * extension. */ #define SOC_BUILTIN_DTB_DECLARE(name, vendor, arch, impl) \ extern void *__dtb_##name##_begin; \ \ static __init __used \ void *__soc_builtin_dtb_f__##name(void) \ { \ return (void *)&__dtb_##name##_begin; \ } \ \ static const struct soc_builtin_dtb __soc_builtin_dtb__##name \ __used __section(__soc_builtin_dtb_table) = \ { \ .vendor_id = vendor, \ .arch_id = arch, \ .imp_id = impl, \ .dtb_func = __soc_builtin_dtb_f__##name, \ } extern unsigned long __soc_builtin_dtb_table_start; extern unsigned long __soc_builtin_dtb_table_end; void *soc_lookup_builtin_dtb(void); #endif