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