~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/SLOF/include/ppcp7/cpu.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 * Copyright (c) 2004, 2008 IBM Corporation
 
3
 * All rights reserved.
 
4
 * This program and the accompanying materials
 
5
 * are made available under the terms of the BSD License
 
6
 * which accompanies this distribution, and is available at
 
7
 * http://www.opensource.org/licenses/bsd-license.php
 
8
 *
 
9
 * Contributors:
 
10
 *     IBM Corporation - initial implementation
 
11
 *****************************************************************************/
 
12
 
 
13
#ifndef __CPU_H
 
14
#define __CPU_H
 
15
 
 
16
/* Used in boot_abort.S, will need something better for KVM */
 
17
#define HSPRG0  304
 
18
 
 
19
/* XXX FIXME: Can be more efficient, no dcbst nor loop needed on P7 */
 
20
/* This macro uses r0 */
 
21
#define FLUSH_CACHE(r, n)       add     n, n, r; \
 
22
                                addi    n, n, 127; \
 
23
                                rlwinm  r, r, 0,0,24; \
 
24
                                rlwinm  n, n, 0,0,24; \
 
25
                                sub     n, n, r; \
 
26
                                srwi    n, n, 7; \
 
27
                                mtctr   n; \
 
28
                        0:      dcbst   0, r; \
 
29
                                sync; \
 
30
                                icbi    0, r; \
 
31
                                sync; \
 
32
                                isync; \
 
33
                                addi    r, r, 128; \
 
34
                                bdnz    0b;
 
35
 
 
36
#ifndef __ASSEMBLER__
 
37
#define STRINGIFY(x...) #x
 
38
#define EXPAND(x) STRINGIFY(x)
 
39
 
 
40
static inline void flush_cache(void* r, long n)
 
41
{
 
42
        asm volatile(EXPAND(FLUSH_CACHE(%0, %1))
 
43
                     : "+r"(r), "+r"(n)
 
44
                     :: "memory", "cc", "r0", "ctr");
 
45
}
 
46
 
 
47
static inline void eieio(void)
 
48
{
 
49
        asm volatile ("eieio":::"memory");
 
50
}
 
51
 
 
52
static inline void barrier(void)
 
53
{
 
54
        asm volatile("" : : : "memory");
 
55
}
 
56
#define cpu_relax() barrier()
 
57
 
 
58
static inline void sync(void)
 
59
{
 
60
        asm volatile ("sync" ::: "memory");
 
61
}
 
62
#define mb() sync()
 
63
 
 
64
#endif /* __ASSEMBLER__ */
 
65
 
 
66
#endif