xref: /rk3399_rockchip-uboot/include/amp.h (revision f06413e4334dd336c1c9975d18eb5b153fb60f5a)
14388decaSJoseph Chen /* SPDX-License-Identifier:     GPL-2.0+ */
24388decaSJoseph Chen /*
34388decaSJoseph Chen  * (C) Copyright 2019 Rockchip Electronics Co., Ltd
44388decaSJoseph Chen  */
54388decaSJoseph Chen 
64388decaSJoseph Chen #ifndef _AMP_H_
74388decaSJoseph Chen #define _AMP_H_
84388decaSJoseph Chen 
94388decaSJoseph Chen #include <dm.h>
104388decaSJoseph Chen 
11*f06413e4SJoseph Chen #define MAP_AARCH(aarch64)	((aarch64) ? 1 : 0)
12*f06413e4SJoseph Chen #define MAP_HYP(hyp)		((hyp) ? 1 : 0)
13*f06413e4SJoseph Chen #define MAP_THUMB(thumb)	((thumb) ? 1 : 0)
14*f06413e4SJoseph Chen #define MAP_SECURE(secure)	((secure) ? 0 : 1)
15*f06413e4SJoseph Chen 
16*f06413e4SJoseph Chen #define	MODE_AARCH64_SHIFT	1
17*f06413e4SJoseph Chen #define	MODE_HYP_SHIFT		2
18*f06413e4SJoseph Chen #define	MODE_THUMB_SHIFT	3
19*f06413e4SJoseph Chen #define	MODE_SECURE_SHIFT	4
20*f06413e4SJoseph Chen 
21*f06413e4SJoseph Chen #define PE_STATE(aarch64, hyp, thumb, secure)				\
22*f06413e4SJoseph Chen 	       (((MAP_AARCH(aarch64) & 0x1) << MODE_AARCH64_SHIFT) |	\
23*f06413e4SJoseph Chen 		((MAP_HYP(hyp) & 0x1) << MODE_HYP_SHIFT) |		\
24*f06413e4SJoseph Chen 		((MAP_THUMB(thumb) & 0x1) << MODE_THUMB_SHIFT) |	\
25*f06413e4SJoseph Chen 		((MAP_SECURE(secure) & 0x1) << MODE_SECURE_SHIFT))
26*f06413e4SJoseph Chen 
274388decaSJoseph Chen struct dm_amp_ops {
284388decaSJoseph Chen 	int (*cpu_on)(struct udevice *dev);
294388decaSJoseph Chen };
304388decaSJoseph Chen 
314388decaSJoseph Chen struct dm_amp_uclass_platdata {
324388decaSJoseph Chen 	const char *desc;
334388decaSJoseph Chen 	const char *partition;
344388decaSJoseph Chen 	u32 cpu;		/* cpu mpidr */
35*f06413e4SJoseph Chen 	u32 aarch64;
36*f06413e4SJoseph Chen 	u32 hyp;
37*f06413e4SJoseph Chen 	u32 thumb;
38*f06413e4SJoseph Chen 	u32 secure;
394388decaSJoseph Chen 	u32 load;
404388decaSJoseph Chen 	u32 entry;
414388decaSJoseph Chen 	u32 reserved_mem[2];	/* [0]: start, [1]: size */
424388decaSJoseph Chen };
434388decaSJoseph Chen 
444388decaSJoseph Chen int amp_bind_children(struct udevice *dev, const char *drv_name);
454388decaSJoseph Chen int amp_cpus_on(void);
464388decaSJoseph Chen int amp_cpu_on(u32 cpu);
474388decaSJoseph Chen 
484388decaSJoseph Chen #endif	/* _AMP_H_ */
49*f06413e4SJoseph Chen 
50