1/* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * This software may be distributed and modified according to the terms of 5 * the GNU General Public License version 2. Note that NO WARRANTY is provided. 6 * See "LICENSE_GPLv2.txt" for details. 7 * 8 * @TAG(GD_GPL) 9 */ 10 11#ifndef __ARCH_MACHINE_H 12#define __ARCH_MACHINE_H 13 14#include <machine.h> 15#include <plat/machine/hardware.h> 16#include <arch/types.h> 17#include <util.h> 18 19#ifndef __ASSEMBLER__ 20 21int get_num_avail_p_regs(void); 22p_region_t get_avail_p_reg(word_t i); 23int get_num_dev_p_regs(void); 24p_region_t get_dev_p_reg(word_t i); 25void map_kernel_devices(void); 26 27void initL2Cache(void); 28 29void initIRQController(void); 30void cpu_initLocalIRQController(void); 31void setIRQTrigger(irq_t irq, bool_t trigger); 32 33static inline void plat_cleanL2Range(paddr_t start, paddr_t end); 34static inline void plat_invalidateL2Range(paddr_t start, paddr_t end); 35static inline void plat_cleanInvalidateL2Range(paddr_t start, paddr_t end); 36static inline void plat_cleanInvalidateCache(void); 37 38void cleanInvalidateCacheRange_RAM(word_t start, word_t end, paddr_t pstart); 39void cleanCacheRange_RAM(word_t start, word_t end, paddr_t pstart); 40void cleanCacheRange_PoU(word_t start, word_t end, paddr_t pstart); 41void invalidateCacheRange_RAM(word_t start, word_t end, paddr_t pstart); 42void invalidateCacheRange_I(word_t start, word_t end, paddr_t pstart); 43void branchFlushRange(word_t start, word_t end, paddr_t pstart); 44 45void clean_D_PoU(void); 46void cleanInvalidate_D_PoC(void); 47void cleanCaches_PoU(void); 48void cleanInvalidateL1Caches(void); 49 50/* Cleaning memory before user-level access */ 51static inline void clearMemory(word_t* ptr, word_t bits) 52{ 53 memzero(ptr, BIT(bits)); 54 cleanCacheRange_PoU((word_t)ptr, (word_t)ptr + BIT(bits) - 1, 55 addrFromPPtr(ptr)); 56} 57 58static inline void clearMemoryRAM(word_t* ptr, word_t bits) 59{ 60 memzero(ptr, BIT(bits)); 61 cleanCacheRange_RAM((word_t)ptr, (word_t)ptr + BIT(bits) - 1, 62 addrFromPPtr(ptr)); 63} 64 65#ifdef ENABLE_SMP_SUPPORT 66static inline void arch_pause(void) 67{ 68 /* TODO */ 69} 70#endif /* ENABLE_SMP_SUPPORT */ 71 72static inline void Arch_finaliseInterrupt(void) 73{ 74} 75 76#endif /* __ASSEMBLER__ */ 77 78#endif /* __ARCH_MACHINE_H */ 79