Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-ebsa110/include/mach/system.h
10820 views
1
/*
2
* arch/arm/mach-ebsa110/include/mach/system.h
3
*
4
* Copyright (C) 1996-2000 Russell King.
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation.
9
*/
10
#ifndef __ASM_ARCH_SYSTEM_H
11
#define __ASM_ARCH_SYSTEM_H
12
13
/*
14
* EBSA110 idling methodology:
15
*
16
* We can not execute the "wait for interrupt" instruction since that
17
* will stop our MCLK signal (which provides the clock for the glue
18
* logic, and therefore the timer interrupt).
19
*
20
* Instead, we spin, polling the IRQ_STAT register for the occurrence
21
* of any interrupt with core clock down to the memory clock.
22
*/
23
static inline void arch_idle(void)
24
{
25
const char *irq_stat = (char *)0xff000000;
26
27
/* disable clock switching */
28
asm volatile ("mcr p15, 0, ip, c15, c2, 2" : : : "cc");
29
30
/* wait for an interrupt to occur */
31
while (!*irq_stat);
32
33
/* enable clock switching */
34
asm volatile ("mcr p15, 0, ip, c15, c1, 2" : : : "cc");
35
}
36
37
#define arch_reset(mode, cmd) cpu_reset(0x80000000)
38
39
#endif
40
41