| /* 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 |