1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Copyright 2002
4  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5  *
6  * Copyright (c) 2017 Microsemi Corporation.
7  * Padmarao Begari, Microsemi Corporation <padmarao.begari@microsemi.com>
8  */
9 
10 #ifndef	__ASM_GBL_DATA_H
11 #define __ASM_GBL_DATA_H
12 
13 #include <asm/smp.h>
14 #include <asm/u-boot.h>
15 #include <compiler.h>
16 
17 /* Architecture-specific global data */
18 struct arch_global_data {
19 	long boot_hart;		/* boot hart id */
20 	phys_addr_t firmware_fdt_addr;
21 #ifdef CONFIG_SIFIVE_CLINT
22 	void __iomem *clint;	/* clint base address */
23 #endif
24 #ifdef CONFIG_ANDES_PLIC
25 	void __iomem *plic;	/* plic base address */
26 #endif
27 #if CONFIG_IS_ENABLED(SMP)
28 	struct ipi_data ipi[CONFIG_NR_CPUS];
29 #endif
30 #ifndef CONFIG_XIP
31 	ulong available_harts;
32 #endif
33 };
34 
35 #include <asm-generic/global_data.h>
36 
37 #define DECLARE_GLOBAL_DATA_PTR register gd_t *gd asm ("gp")
38 
set_gd(volatile gd_t * gd_ptr)39 static inline void set_gd(volatile gd_t *gd_ptr)
40 {
41 #ifdef CONFIG_64BIT
42 	asm volatile("ld gp, %0\n" : : "m"(gd_ptr));
43 #else
44 	asm volatile("lw gp, %0\n" : : "m"(gd_ptr));
45 #endif
46 }
47 
48 #endif /* __ASM_GBL_DATA_H */
49