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