Revision a750fc0b

b/hw/ppc.c
376 376
            /* Level sensitive - active high */
377 377
#if defined(PPC_DEBUG_IRQ)
378 378
            if (loglevel & CPU_LOG_INT) {
379
                fprintf(logfile, "%s: set the external IRQ state to %d\n",
379
                fprintf(logfile, "%s: set the debug pin state to %d\n",
380 380
                        __func__, level);
381 381
            }
382 382
#endif
383
            ppc_set_irq(env, EXCP_40x_DEBUG, level);
383
            ppc_set_irq(env, PPC_INTERRUPT_DEBUG, level);
384 384
            break;
385 385
        default:
386 386
            /* Unknown pin - do nothing */
......
904 904
    void *opaque;
905 905
};
906 906

  
907
/* XXX: on 460, DCR addresses are 32 bits wide,
908
 *      using DCRIPR to get the 22 upper bits of the DCR address
909
 */
907 910
#define DCRN_NB 1024
908 911
struct ppc_dcr_t {
909 912
    ppc_dcrn_t dcrn[DCRN_NB];
b/linux-user/main.c
712 712
    return cpu_ppc_load_tbl(env) & 0x3FFFFF80;
713 713
}
714 714

  
715
/* XXX: to be fixed */
716
int ppc_dcr_read (ppc_dcr_t *dcr_env, int dcrn, target_ulong *valp)
717
{
718
    return -1;
719
}
720

  
721
int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, target_ulong val)
722
{
723
    return -1;
724
}
725

  
715 726
void cpu_loop(CPUPPCState *env)
716 727
{
717 728
    target_siginfo_t info;
......
761 772
        case EXCP_MACHINE_CHECK:
762 773
            fprintf(stderr, "Machine check exeption...  Stop emulation\n");
763 774
            if (loglevel)
764
                fprintf(logfile, "RESET asked... Stop emulation\n");
775
                fprintf(logfile, "Machine check exception. Stop emulation\n");
765 776
            info.si_signo = TARGET_SIGBUS;
766 777
            info.si_errno = 0;
767 778
            info.si_code = TARGET_BUS_OBJERR;
......
914 925
                    info.si_code = TARGET_ILL_ILLOPC;
915 926
                    break;
916 927
                case EXCP_INVAL_LSWX:
917
            info.si_code = TARGET_ILL_ILLOPN;
928
                    info.si_code = TARGET_ILL_ILLOPN;
918 929
                    break;
919 930
                case EXCP_INVAL_SPR:
920 931
                    info.si_code = TARGET_ILL_PRVREG;
......
1003 1014
                if (loglevel)
1004 1015
                    fprintf(logfile, "Tried to go into supervisor mode !\n");
1005 1016
                abort();
1006
        }
1017
            }
1007 1018
            break;
1008 1019
        case EXCP_BRANCH:
1009 1020
            /* We stopped because of a jump... */
b/target-ppc/STATUS
4 4
===============================================================================
5 5
PowerPC core emulation status
6 6

  
7
32 bits PowerPC
8
PowerPC 601:
9
INSN
10
SPR
11
MMU
12
EXCP
13

  
14
PowerPC 602:
15
INSN
16
SPR
17
MMU
18
EXCP
19

  
20
PowerPC 603:
21
INSN OK
22
SPR  OK
23
MMU  OK
24
EXCP OK
25

  
26
PowerPC 604:
27
INSN OK
28
SPR  OK
29
MMU  OK
30
EXCP OK
31

  
32
PowerPC 740:
33
INSN OK
34
SPR  OK
35
MMU  OK
36
EXCP OK
37

  
38
PowerPC 745:
39
INSN
40
SPR
41
MMU
42
EXCP
43

  
44
PowerPC 750:
45
INSN OK
46
SPR  OK
47
MMU  OK
48
EXCP OK
49

  
50
PowerPC 755:
51
INSN
52
SPR
53
MMU
54
EXCP
7
INSN: instruction set.
8
      OK => all instructions are emulated
9
      KO => some insns are missing or some should be removed
10
      ?  => unchecked
11
SPR:  special purpose registers set
12
      OK => all SPR registered (but some may be fake)
13
      KO => some SPR are missing or should be removed
14
      ?  => uncheked
15
MSR:  MSR bits definitions
16
      OK => all MSR bits properly defined
17
      KO => MSR definition is incorrect
18
      ?  => unchecked
19
IRQ:  input signals definitions (mostly interrupts)
20
      OK => input signals are properly defined
21
      KO => input signals are not implemented (system emulation does not work)
22
      ?  => input signals definitions may be incorrect
23
MMU:  MMU model implementation
24
      OK => MMU model is implemented and Linux is able to boot
25
      KO => MMU model not implemented or bugged
26
      ?  => MMU model not tested
27
EXCP: exceptions model implementation
28
      OK => exception model is implemented and Linux is able to boot
29
      KO => exception model not implemented or known to be buggy
30
      ?  => exception model may be incorrect or is untested
55 31

  
56
PowerPC 7400:
57
INSN KO
58
SPR  KO
59
MMU  OK
60
EXCP OK
32
Embedded PowerPC cores
33
***
34
PowerPC 401:
35
INSN  OK
36
SPR   OK 401A1
37
MSR   OK
38
IRQ   KO partially implemented
39
MMU   OK
40
EXCP  ?
61 41

  
62
PowerPC 7410:
63
INSN KO
64
SPR  KO
65
MMU  OK
66
EXCP OK
67

  
68
PowerPC 7450:
69
INSN KO
70
SPR  KO
71
MMU  OK
72
EXCP OK
73

  
74
PowerPC 7455:
75
INSN KO
76
SPR  KO
77
MMU  OK
78
EXCP OK
79

  
80
PowerPC 7457:
81
INSN KO
82
SPR  KO
83
MMU  OK
84
EXCP OK
85

  
86
PowerPC 7457A:
87
INSN KO
88
SPR  KO
89
MMU  OK
90
EXCP OK
42
PowerPC 401x2:
43
INSN  OK
44
SPR   OK 401B2 401C2 401D2 401E2 401F2
45
MSR   OK
46
IRQ   KO partially implemented
47
MMU   OK
48
EXCP  ?
91 49

  
92
64 bits PowerPC
93
PowerPC 970:
94
INSN KO
95
SPR  KO
96
MMU  KO
97
EXCP KO
98

  
99
PowerPC 620: (lack of precise informations)
100
INSN KO
101
SPR  KO
102
MMU  KO
103
EXCP KO
104

  
105
PowerPC 630: (lack of precise informations)
106
INSN KO
107
SPR  KO
108
MMU  KO
109
EXCP KO
110

  
111
PowerPC 631: (lack of precise informations)
112
INSN KO
113
SPR  KO
114
MMU  KO
115
EXCP KO
116

  
117
POWER4: (lack of precise informations)
118
INSN KO
119
SPR  KO
120
MMU  KO
121
EXCP KO
122

  
123
POWER4+: (lack of precise informations)
124
INSN KO
125
SPR  KO
126
MMU  KO
127
EXCP KO
128

  
129
POWER5: (lack of precise informations)
130
INSN KO
131
SPR  KO
132
MMU  KO
133
EXCP KO
134

  
135
POWER5+: (lack of precise informations)
136
INSN KO
137
SPR  KO
138
MMU  KO
139
EXCP KO
140

  
141
POWER6: (lack of precise informations)
142
INSN KO
143
SPR  KO
144
MMU  KO
145
EXCP KO
146

  
147
RS64: (lack of precise informations)
148
INSN KO
149
SPR  KO
150
MMU  KO
151
EXCP KO
152

  
153
RS64-II: (lack of precise informations)
154
INSN KO
155
SPR  KO
156
MMU  KO
157
EXCP KO
158

  
159
RS64-III: (lack of precise informations)
160
INSN KO
161
SPR  KO
162
MMU  KO
163
EXCP KO
164

  
165
RS64-IV: (lack of precise informations)
166
INSN KO
167
SPR  KO
168
MMU  KO
169
EXCP KO
50
PowerPC IOP480:
51
INSN  OK
52
SPR   OK IOP480
53
MSR   OK
54
IRQ   KO partially implemented
55
MMU   OK
56
EXCP  ?
170 57

  
171
Embedded PowerPC cores
172
PowerPC 401:
173
INSN OK
174
SPR  OK
175
MMU  OK
176
EXCP ?
58
To be checked: 401G2 401B3 Cobra
177 59

  
60
***
178 61
PowerPC 403:
179
INSN OK
180
SPR  OK
181
MMU  OK
182
EXCP ?
62
INSN  OK
63
SPR   OK 403GA 403GB
64
MMU   OK
65
MSR   OK
66
IRQ   KO not implemented
67
EXCP  ?
183 68

  
69
PowerPC 403GCX:
70
INSN  OK
71
SPR   OK 403GCX
72
MMU   OK
73
MSR   OK
74
IRQ   KO not implemented
75
EXCP  ?
76

  
77
To be checked: 403GC
78

  
79
***
184 80
PowerPC 405:
185
INSN OK
186
SPR  OK
187
MMU  OK
188
EXCP OK
81
Checked: 405CRa 405CRb 405CRc 405EP 405GPa 405GPb 405GPc 405GPd 405GPe 405GPR
82
         Npe405H Npe405H2 Npe405L
83
INSN  OK
84
SPR   OK
85
MSR   OK
86
IRQ   OK
87
MMU   OK
88
EXCP  OK
89
=> Linux 2.4 boots (at least 1 proprietary firmware).
90

  
91
To be checked: 405D2 405D4 405EZ 405LP Npe4GS3 STB03 STB04 STB25
92
               x2vp4 x2vp7 x2vp20 x2vp50
93

  
94
XXX: find what is IBM e407b4
189 95

  
96
***
190 97
PowerPC 440:
98
Checked: 440EPa 440EPb 440GXa 440GXb 440GXc 440GXf 440SP 440SP2
99
INSN  OK
100
SPR   OK
101
MSR   OK
102
IRQ   KO not implemented
103
MMU   ?
104
EXCP  ?
105

  
106
PowerPC 440GP:
107
Checked: 440GPb 440GPc
108
INSN  OK
109
SPR   OK
110
MSR   OK
111
IRQ   KO not implemented
112
MMU   ?
113
EXCP  ?
114

  
115
PowerPC 440x4:
116
Checked: 440A4 440B4 440G4 440H4
191 117
INSN  OK
192 118
SPR   OK
119
MSR   OK
120
IRQ   KO not implemented
193 121
MMU   ?
194 122
EXCP  ?
195 123

  
196
PowerPC 460: (lack of precise informations)
124
PowerPC 440x5:
125
Checked: 440A5 440F5 440G5 440H6 440GRa
126
INSN  OK
127
SPR   OK
128
MSR   OK
129
IRQ   KO not implemented
130
MMU   ?
131
EXCP  ?
132

  
133
To be checked: 440EPx 440GRx 440SPE
134

  
135
***
136
PowerPC 460: (disabled: lack of detailed specifications)
137
INSN  KO
138
SPR   KO
139
MSR   KO
140
IRQ   KO
141
MMU   KO
142
EXCP  KO
143

  
144
PowerPC 460F: (disabled: lack of detailed specifications)
197 145
INSN  KO
198 146
SPR   KO
147
MSR   KO
148
IRQ   KO
199 149
MMU   KO
200 150
EXCP  KO
201 151

  
202
Freescale (to be completed) ...
152
***
153
PowerPC e200: (not implemented)
154
INSN  KO
155
SPR   KO
156
MSR   KO
157
IRQ   KO
158
MMU   KO
159
EXCP  KO
203 160

  
204
Original POWER
205
POWER: (lack of precise informations)
161
***
162
PowerPC e300: (not implemented)
206 163
INSN  KO
207 164
SPR   KO
165
MSR   KO
166
IRQ   KO
208 167
MMU   KO
209 168
EXCP  KO
210 169

  
211
POWER2: (lack of precise informations)
170
***
171
PowerPC e500: (not implemented)
212 172
INSN  KO
213 173
SPR   KO
174
MSR   KO
175
IRQ   KO
214 176
MMU   KO
215 177
EXCP  KO
216 178

  
217
PowerPC CPU known to work (ie booting at least Linux 2.4):
218
* main stream PowerPC cores
219
- PowerPC 603 & derivatives
220
- PowerPC 604 & derivatives
221
- PowerPC 740 & derivatives
222
- PowerPC 750 & derivatives
223
- PowerPC 405
224

  
225
PowerPC that should work but are not supported by standard Linux kernel
226
(then remain mostly untested)
227
- PowerPC 745
228
- PowerPC 755
229

  
230
Work in progress:
231
* embedded PowerPC cores
232
- BookE PowerPC
233
- e500 core (Freescale PowerQUICC)
234
* main stream PowerPC cores
235
- PowerPC 601
236
- PowerPC 602
179
***
180
PowerPC e600: (not implemented)
181
INSN  KO
182
SPR   KO
183
MSR   KO
184
IRQ   KO
185
MMU   KO
186
EXCP  KO
237 187

  
238
TODO:
239
* embedded PowerPC cores
240
- PowerPC 401
241
- PowerPC 403
242
- PowerPC 440
243
- PowerPC 460
244
* main stream PowerPC cores
245
- PowerPC 7400 (aka G4)
246
- PowerPC 7410
247
- PowerPC 7450
248
- PowerPC 7455
249
- PowerPC 7457
250
- PowerPC 7457A
251
* original POWER
252
- POWER
253
- POWER2
254
* 64 bits PowerPC cores
255
- PowerPC 620
256
- PowerPC 630 (aka POWER3)
257
- PowerPC 631 (aka POWER3+)
258
- POWER4
259
- POWER4+
260
- POWER5
261
- POWER5+
262
- PowerPC 970
263
* RS64 series
264
- RS64
265
- RS64-II
266
- RS64-III
267
- RS64-IV
188
***
189
32 bits PowerPC
190
PowerPC 601: (601 601v2)
191
INSN  OK
192
SPR   OK is HID15 only on 601v2 ?
193
MSR   OK
194
IRQ   KO not implemented
195
MMU   ?
196
EXCP  ?
197
Remarks: some instructions should have a specific behavior (not implemented)
198

  
199
PowerPC 602: 602
200
INSN  OK
201
SPR   OK
202
MSR   OK
203
IRQ   OK
204
MMU   ?
205
EXCP  ? at least timer and external interrupt are OK
206
Remarks: Linux crashes when entering user-mode. But it seems it does not
207
         know about this CPU. As this CPU is close to 603e, it should be OK.
208

  
209
PowerPC 603: (603)
210
INSN  OK
211
SPR   OK
212
MSR   OK
213
IRQ   OK
214
MMU   OK
215
EXCP  OK
216
Remarks: Linux 2.4 boots and properly recognizes the CPU
217

  
218
PowerPC 603e: (603e11)
219
INSN  OK
220
SPR   OK
221
MSR   OK
222
IRQ   OK
223
MMU   OK
224
EXCP  OK
225
Remarks: Linux 2.4 boots and properly recognizes the CPU
226

  
227
PowerPC G2:
228
INSN  OK
229
SPR   OK
230
MSR   OK
231
IRQ   OK
232
MMU   OK
233
EXCP  OK
234
Remarks: Linux 2.4 boots, recognizes the CPU as a 82xx.
235

  
236
PowerPC G2le:
237
INSN  OK
238
SPR   OK
239
MSR   OK
240
IRQ   OK
241
MMU   OK
242
EXCP  OK
243
Remarks: Linux 2.4 does not boots. Same symptoms as 602.
244

  
245
PowerPC 604:
246
INSN  OK
247
SPR   OK
248
MSR   OK
249
IRQ   OK
250
MMU   OK
251
EXCP  OK
252
Remarks: Linux 2.4 boots and properly recognizes the CPU.
253

  
254
PowerPC 7x0:
255
INSN  OK
256
SPR   OK
257
MSR   OK
258
IRQ   OK
259
MMU   OK
260
EXCP  OK
261
Remarks: Linux 2.4 boots and properly recognizes the CPU.
262

  
263
PowerPC 750fx:
264
INSN  OK
265
SPR   OK
266
MSR   OK
267
IRQ   OK
268
MMU   OK
269
EXCP  OK
270
Remarks: Linux 2.4 boots but does not properly recognizes the CPU.
271

  
272
PowerPC 7x5:
273
INSN  ?
274
SPR   ?
275
MSR   ?
276
IRQ   OK
277
MMU   ?
278
EXCP  OK
279
=> Linux 2.4 does not boot.
280

  
281
PowerPC 7400:
282
INSN  KO Altivec missing
283
SPR   OK
284
MSR   OK
285
IRQ   OK
286
MMU   OK
287
EXCP  ?  Altivec, ...
288
=> Linux 2.4 boots and properly recognize the CPU.
289

  
290
PowerPC 7410:
291
INSN  KO Altivec missing
292
SPR   OK
293
MSR   OK
294
IRQ   OK
295
MMU   OK
296
EXCP  ?  Altivec, ...
297
=> Linux 2.4 boots and properly recognize the CPU.
298
   Note that UM says tlbld & tlbli are implemented bus this may be a mistake
299
   as TLB load are managed by the hardware and it does not implement the
300
   needed registers.
301

  
302
PowerPC 7441:
303
INSN  KO Altivec missing + TLB load insns missing
304
SPR   OK
305
MSR   OK
306
IRQ   OK
307
MMU   KO not implemented
308
EXCP  ?  Altivec, ...
309

  
310
PowerPC 7450/7451:
311
INSN  KO Altivec missing + TLB load insns missing
312
SPR   OK
313
MSR   OK
314
IRQ   OK
315
MMU   KO not implemented
316
EXCP  ?  Altivec, ...
317

  
318
PowerPC 7445/7447:
319
INSN  KO Altivec missing + TLB load insns missing
320
SPR   OK
321
MSR   OK
322
IRQ   OK
323
MMU   KO not implemented
324
EXCP  ?  Altivec, ...
325

  
326
PowerPC 7455/7457:
327
INSN  KO Altivec missing + TLB load insns missing
328
SPR   OK
329
MSR   OK
330
IRQ   OK
331
MMU   KO not implemented
332
EXCP  ?  Altivec, ...
333

  
334
64 bits PowerPC
335
PowerPC 620: (disabled)
336
INSN  KO
337
SPR   KO
338
MSR   ?
339
IRQ   KO
340
MMU   KO
341
EXCP  KO
342

  
343
PowerPC 970: (disabled)
344
INSN  KO Altivec missing and more
345
SPR   KO
346
MSR   ?
347
IRQ   OK
348
MMU   KO partially implemented
349
EXCP  KO
350

  
351
PowerPC 970FX: (disabled)
352
INSN  KO Altivec missing and more
353
SPR   KO
354
MSR   ?
355
IRQ   OK
356
MMU   KO partially implemented
357
EXCP  KO
358

  
359
PowerPC 630: (disabled: lack of detailed specifications)
360
INSN  KO
361
SPR   KO
362
MSR   KO
363
IRQ   KO
364
MMU   KO
365
EXCP  KO
366

  
367
PowerPC 631: (disabled: lack of detailed specifications)
368
INSN  KO
369
SPR   KO
370
MSR   KO
371
IRQ   KO
372
MMU   KO
373
EXCP  KO
374

  
375
POWER4: (disabled: lack of detailed specifications)
376
INSN  KO
377
SPR   KO
378
MSR   KO
379
IRQ   KO
380
MMU   KO
381
EXCP  KO
382

  
383
POWER4+: (disabled: lack of detailed specifications)
384
INSN  KO
385
SPR   KO
386
MSR   KO
387
IRQ   KO
388
MMU   KO
389
EXCP  KO
390

  
391
POWER5: (disabled: lack of detailed specifications)
392
INSN  KO
393
SPR   KO
394
MSR   KO
395
IRQ   KO
396
MMU   KO
397
EXCP  KO
398

  
399
POWER5+: (disabled: lack of detailed specifications)
400
INSN  KO
401
SPR   KO
402
MSR   KO
403
IRQ   KO
404
MMU   KO
405
EXCP  KO
406

  
407
POWER6: (disabled: lack of detailed specifications)
408
INSN  KO
409
SPR   KO
410
MSR   KO
411
IRQ   KO
412
MMU   KO
413
EXCP  KO
414

  
415
RS64: (disabled: lack of detailed specifications)
416
INSN  KO
417
SPR   KO
418
MSR   KO
419
IRQ   KO
420
MMU   KO
421
EXCP  KO
422

  
423
RS64-II: (disabled: lack of detailed specifications)
424
INSN  KO
425
SPR   KO
426
MSR   KO
427
IRQ   KO
428
MMU   KO
429
EXCP  KO
430

  
431
RS64-III: (disabled: lack of detailed specifications)
432
INSN  KO
433
SPR   KO
434
MSR   KO
435
IRQ   KO
436
MMU   KO
437
EXCP  KO
438

  
439
RS64-IV: (disabled: lack of detailed specifications)
440
INSN  KO
441
SPR   KO
442
MSR   KO
443
IRQ   KO
444
MMU   KO
445
EXCP  KO
446

  
447
Original POWER
448
POWER: (disabled: lack of detailed specifications)
449
INSN  KO
450
SPR   KO
451
MSR   KO
452
IRQ   KO
453
MMU   KO
454
EXCP  KO
455

  
456
POWER2: (disabled: lack of detailed specifications)
457
INSN  KO
458
SPR   KO
459
MSR   KO
460
IRQ   KO
461
MMU   KO
462
EXCP  KO
268 463

  
269 464
===============================================================================
270 465
PowerPC microcontrollers emulation status
b/target-ppc/cpu.h
89 89
#define DCACHE_LINE_SIZE 32
90 90

  
91 91
/*****************************************************************************/
92
/* PVR definitions for most known PowerPC */
92
/* MMU model                                                                 */
93 93
enum {
94
    /* PowerPC 401 cores */
95
    CPU_PPC_401A1     = 0x00210000,
96
    CPU_PPC_401B2     = 0x00220000,
97
#if 0
98
    CPU_PPC_401B3     = xxx,
99
#endif
100
    CPU_PPC_401C2     = 0x00230000,
101
    CPU_PPC_401D2     = 0x00240000,
102
    CPU_PPC_401E2     = 0x00250000,
103
    CPU_PPC_401F2     = 0x00260000,
104
    CPU_PPC_401G2     = 0x00270000,
105
#if 0
106
    CPU_PPC_401GF     = xxx,
107
#endif
108
#define CPU_PPC_401 CPU_PPC_401G2
109
    CPU_PPC_IOP480    = 0x40100000, /* 401B2 ? */
110
    CPU_PPC_COBRA     = 0x10100000, /* IBM Processor for Network Resources */
111
    /* PowerPC 403 cores */
112
    CPU_PPC_403GA     = 0x00200011,
113
    CPU_PPC_403GB     = 0x00200100,
114
    CPU_PPC_403GC     = 0x00200200,
115
    CPU_PPC_403GCX    = 0x00201400,
116
#if 0
117
    CPU_PPC_403GP     = xxx,
118
#endif
119
#define CPU_PPC_403 CPU_PPC_403GCX
120
    /* PowerPC 405 cores */
121
#if 0
122
    CPU_PPC_405A3     = xxx,
123
#endif
124
#if 0
125
    CPU_PPC_405A4     = xxx,
126
#endif
127
#if 0
128
    CPU_PPC_405B3     = xxx,
129
#endif
130
    CPU_PPC_405D2     = 0x20010000,
131
    CPU_PPC_405D4     = 0x41810000,
132
    CPU_PPC_405CR     = 0x40110145,
133
#define CPU_PPC_405GP CPU_PPC_405CR
134
    CPU_PPC_405EP     = 0x51210950,
135
#if 0
136
    CPU_PPC_405EZ     = xxx,
137
#endif
138
    CPU_PPC_405GPR    = 0x50910951,
139
#if 0
140
    CPU_PPC_405LP     = xxx,
141
#endif
142
#define CPU_PPC_405 CPU_PPC_405D4
143
    CPU_PPC_NPE405H   = 0x414100C0,
144
    CPU_PPC_NPE405H2  = 0x41410140,
145
    CPU_PPC_NPE405L   = 0x416100C0,
146
#if 0
147
    CPU_PPC_LC77700   = xxx,
148
#endif
149
    /* IBM STBxxx (PowerPC 401/403/405 core based microcontrollers) */
150
#if 0
151
    CPU_PPC_STB01000  = xxx,
152
#endif
153
#if 0
154
    CPU_PPC_STB01010  = xxx,
155
#endif
156
#if 0
157
    CPU_PPC_STB0210   = xxx,
158
#endif
159
    CPU_PPC_STB03     = 0x40310000,
160
#if 0
161
    CPU_PPC_STB043    = xxx,
162
#endif
163
#if 0
164
    CPU_PPC_STB045    = xxx,
165
#endif
166
    CPU_PPC_STB25     = 0x51510950,
167
#if 0
168
    CPU_PPC_STB130    = xxx,
169
#endif
170
    /* Xilinx cores */
171
    CPU_PPC_X2VP4     = 0x20010820,
172
#define CPU_PPC_X2VP7 CPU_PPC_X2VP4
173
    CPU_PPC_X2VP20    = 0x20010860,
174
#define CPU_PPC_X2VP50 CPU_PPC_X2VP20
175
    /* PowerPC 440 cores */
176
    CPU_PPC_440EP     = 0x422218D3,
177
#define CPU_PPC_440GR CPU_PPC_440EP
178
    CPU_PPC_440GP     = 0x40120481,
179
#if 0
180
    CPU_PPC_440GRX    = xxx,
181
#endif
182
    CPU_PPC_440GX     = 0x51B21850,
183
    CPU_PPC_440GXc    = 0x51B21892,
184
    CPU_PPC_440GXf    = 0x51B21894,
185
    CPU_PPC_440SP     = 0x53221850,
186
    CPU_PPC_440SP2    = 0x53221891,
187
    CPU_PPC_440SPE    = 0x53421890,
188
    /* PowerPC 460 cores */
189
#if 0
190
    CPU_PPC_464H90    = xxx,
191
#endif
192
#if 0
193
    CPU_PPC_464H90FP  = xxx,
194
#endif
195
    /* PowerPC MPC 5xx cores */
196
    CPU_PPC_5xx       = 0x00020020,
197
    /* PowerPC MPC 8xx cores (aka PowerQUICC) */
198
    CPU_PPC_8xx       = 0x00500000,
199
    /* PowerPC MPC 8xxx cores (aka PowerQUICC-II) */
200
    CPU_PPC_82xx_HIP3 = 0x00810101,
201
    CPU_PPC_82xx_HIP4 = 0x80811014,
202
    CPU_PPC_827x      = 0x80822013,
203
    /* eCores */
204
    CPU_PPC_e200      = 0x81120000,
205
    CPU_PPC_e500v110  = 0x80200010,
206
    CPU_PPC_e500v120  = 0x80200020,
207
    CPU_PPC_e500v210  = 0x80210010,
208
    CPU_PPC_e500v220  = 0x80210020,
209
#define CPU_PPC_e500 CPU_PPC_e500v220
210
    CPU_PPC_e600      = 0x80040010,
211
    /* PowerPC 6xx cores */
212
    CPU_PPC_601       = 0x00010001,
213
    CPU_PPC_602       = 0x00050100,
214
    CPU_PPC_603       = 0x00030100,
215
    CPU_PPC_603E      = 0x00060101,
216
    CPU_PPC_603P      = 0x00070000,
217
    CPU_PPC_603E7v    = 0x00070100,
218
    CPU_PPC_603E7v2   = 0x00070201,
219
    CPU_PPC_603E7     = 0x00070200,
220
    CPU_PPC_603R      = 0x00071201,
221
    CPU_PPC_G2        = 0x00810011,
222
    CPU_PPC_G2H4      = 0x80811010,
223
    CPU_PPC_G2gp      = 0x80821010,
224
    CPU_PPC_G2ls      = 0x90810010,
225
    CPU_PPC_G2LE      = 0x80820010,
226
    CPU_PPC_G2LEgp    = 0x80822010,
227
    CPU_PPC_G2LEls    = 0xA0822010,
228
    CPU_PPC_604       = 0x00040000,
229
    CPU_PPC_604E      = 0x00090100, /* Also 2110 & 2120 */
230
    CPU_PPC_604R      = 0x000a0101,
231
    /* PowerPC 74x/75x cores (aka G3) */
232
    CPU_PPC_74x       = 0x00080000,
233
    CPU_PPC_740E      = 0x00080100,
234
    CPU_PPC_74xP      = 0x10080000,
235
    CPU_PPC_750E      = 0x00080200,
236
    CPU_PPC_750CXE21  = 0x00082201,
237
    CPU_PPC_750CXE22  = 0x00082212,
238
    CPU_PPC_750CXE23  = 0x00082203,
239
    CPU_PPC_750CXE24  = 0x00082214,
240
    CPU_PPC_750CXE24b = 0x00083214,
241
    CPU_PPC_750CXE31  = 0x00083211,
242
    CPU_PPC_750CXE31b = 0x00083311,
243
#define CPU_PPC_750CXE CPU_PPC_750CXE31b
244
    CPU_PPC_750CXR    = 0x00083410,
245
    CPU_PPC_750FX10   = 0x70000100,
246
    CPU_PPC_750FX20   = 0x70000200,
247
    CPU_PPC_750FX21   = 0x70000201,
248
    CPU_PPC_750FX22   = 0x70000202,
249
    CPU_PPC_750FX23   = 0x70000203,
250
#define CPU_PPC_750FX CPU_PPC_750FX23
251
    CPU_PPC_750FL     = 0x700A0203,
252
    CPU_PPC_750GX10   = 0x70020100,
253
    CPU_PPC_750GX11   = 0x70020101,
254
    CPU_PPC_750GX12   = 0x70020102,
255
#define CPU_PPC_750GX CPU_PPC_750GX12
256
    CPU_PPC_750GL     = 0x70020102,
257
    CPU_PPC_750L30    = 0x00088300,
258
    CPU_PPC_750L32    = 0x00088302,
259
#define CPU_PPC_750L CPU_PPC_750L32
260
    CPU_PPC_750CL     = 0x00087200,
261
    CPU_PPC_755_10    = 0x00083100,
262
    CPU_PPC_755_11    = 0x00083101,
263
    CPU_PPC_755_20    = 0x00083200,
264
    CPU_PPC_755D      = 0x00083202,
265
    CPU_PPC_755E      = 0x00083203,
266
#define CPU_PPC_755 CPU_PPC_755E
267
    /* PowerPC 74xx cores (aka G4) */
268
    CPU_PPC_7400      = 0x000C0100,
269
    CPU_PPC_7410C     = 0x800C1102,
270
    CPU_PPC_7410D     = 0x800C1103,
271
    CPU_PPC_7410E     = 0x800C1104,
272
#define CPU_PPC_7410 CPU_PPC_7410E
273
    CPU_PPC_7441      = 0x80000210,
274
    CPU_PPC_7445      = 0x80010100,
275
    CPU_PPC_7447      = 0x80020100,
276
    CPU_PPC_7447A     = 0x80030101,
277
    CPU_PPC_7448      = 0x80040100,
278
    CPU_PPC_7450      = 0x80000200,
279
    CPU_PPC_7450b     = 0x80000201,
280
    CPU_PPC_7451      = 0x80000203,
281
    CPU_PPC_7451G     = 0x80000210,
282
    CPU_PPC_7455      = 0x80010201,
283
    CPU_PPC_7455F     = 0x80010303,
284
    CPU_PPC_7455G     = 0x80010304,
285
    CPU_PPC_7457      = 0x80020101,
286
    CPU_PPC_7457C     = 0x80020102,
287
    CPU_PPC_7457A     = 0x80030000,
288
    /* 64 bits PowerPC */
289
    CPU_PPC_620       = 0x00140000,
290
    CPU_PPC_630       = 0x00400000,
291
    CPU_PPC_631       = 0x00410000,
292
    CPU_PPC_POWER4    = 0x00350000,
293
    CPU_PPC_POWER4P   = 0x00380000,
294
    CPU_PPC_POWER5    = 0x003A0000,
295
    CPU_PPC_POWER5P   = 0x003B0000,
296
#if 0
297
    CPU_PPC_POWER6    = xxx,
298
#endif
299
    CPU_PPC_970       = 0x00390000,
300
    CPU_PPC_970FX10   = 0x00391100,
301
    CPU_PPC_970FX20   = 0x003C0200,
302
    CPU_PPC_970FX21   = 0x003C0201,
303
    CPU_PPC_970FX30   = 0x003C0300,
304
    CPU_PPC_970FX31   = 0x003C0301,
305
#define CPU_PPC_970FX CPU_PPC_970FX31
306
    CPU_PPC_970MP10   = 0x00440100,
307
    CPU_PPC_970MP11   = 0x00440101,
308
#define CPU_PPC_970MP CPU_PPC_970MP11
309
    CPU_PPC_CELL10    = 0x00700100,
310
    CPU_PPC_CELL20    = 0x00700400,
311
    CPU_PPC_CELL30    = 0x00700500,
312
    CPU_PPC_CELL31    = 0x00700501,
313
#define CPU_PPC_CELL32 CPU_PPC_CELL31
314
#define CPU_PPC_CELL CPU_PPC_CELL32
315
    CPU_PPC_RS64      = 0x00330000,
316
    CPU_PPC_RS64II    = 0x00340000,
317
    CPU_PPC_RS64III   = 0x00360000,
318
    CPU_PPC_RS64IV    = 0x00370000,
319
    /* Original POWER */
320
    /* XXX: should be POWER (RIOS), RSC3308, RSC4608,
321
     * POWER2 (RIOS2) & RSC2 (P2SC) here
322
     */
323
#if 0
324
    CPU_POWER         = xxx,
325
#endif
326
#if 0
327
    CPU_POWER2        = xxx,
328
#endif
329
};
330

  
331
/* System version register (used on MPC 8xxx) */
332
enum {
333
    PPC_SVR_8540      = 0x80300000,
334
    PPC_SVR_8541E     = 0x807A0010,
335
    PPC_SVR_8543v10   = 0x80320010,
336
    PPC_SVR_8543v11   = 0x80320011,
337
    PPC_SVR_8543v20   = 0x80320020,
338
    PPC_SVR_8543Ev10  = 0x803A0010,
339
    PPC_SVR_8543Ev11  = 0x803A0011,
340
    PPC_SVR_8543Ev20  = 0x803A0020,
341
    PPC_SVR_8545      = 0x80310220,
342
    PPC_SVR_8545E     = 0x80390220,
343
    PPC_SVR_8547E     = 0x80390120,
344
    PPC_SCR_8548v10   = 0x80310010,
345
    PPC_SCR_8548v11   = 0x80310011,
346
    PPC_SCR_8548v20   = 0x80310020,
347
    PPC_SVR_8548Ev10  = 0x80390010,
348
    PPC_SVR_8548Ev11  = 0x80390011,
349
    PPC_SVR_8548Ev20  = 0x80390020,
350
    PPC_SVR_8555E     = 0x80790010,
351
    PPC_SVR_8560v10   = 0x80700010,
352
    PPC_SVR_8560v20   = 0x80700020,
94
    POWERPC_MMU_UNKNOWN    = 0,
95
    /* Standard 32 bits PowerPC MMU                            */
96
    POWERPC_MMU_32B,
97
    /* Standard 64 bits PowerPC MMU                            */
98
    POWERPC_MMU_64B,
99
    /* PowerPC 601 MMU                                         */
100
    POWERPC_MMU_601,
101
    /* PowerPC 6xx MMU with software TLB                       */
102
    POWERPC_MMU_SOFT_6xx,
103
    /* PowerPC 74xx MMU with software TLB                      */
104
    POWERPC_MMU_SOFT_74xx,
105
    /* PowerPC 4xx MMU with software TLB                       */
106
    POWERPC_MMU_SOFT_4xx,
107
    /* PowerPC 4xx MMU with software TLB and zones protections */
108
    POWERPC_MMU_SOFT_4xx_Z,
109
    /* PowerPC 4xx MMU in real mode only                       */
110
    POWERPC_MMU_REAL_4xx,
111
    /* BookE MMU model                                         */
112
    POWERPC_MMU_BOOKE,
113
    /* BookE FSL MMU model                                     */
114
    POWERPC_MMU_BOOKE_FSL,
115
    /* 64 bits "bridge" PowerPC MMU                            */
116
    POWERPC_MMU_64BRIDGE,
353 117
};
354 118

  
355 119
/*****************************************************************************/
356
/* Instruction types */
357
enum {
358
    PPC_NONE        = 0x00000000,
359
    /* integer operations instructions             */
360
    /* flow control instructions                   */
361
    /* virtual memory instructions                 */
362
    /* ld/st with reservation instructions         */
363
    /* cache control instructions                  */
364
    /* spr/msr access instructions                 */
365
    PPC_INSNS_BASE  = 0x0000000000000001ULL,
366
#define PPC_INTEGER PPC_INSNS_BASE
367
#define PPC_FLOW    PPC_INSNS_BASE
368
#define PPC_MEM     PPC_INSNS_BASE
369
#define PPC_RES     PPC_INSNS_BASE
370
#define PPC_CACHE   PPC_INSNS_BASE
371
#define PPC_MISC    PPC_INSNS_BASE
372
    /* floating point operations instructions      */
373
    PPC_FLOAT       = 0x0000000000000002ULL,
374
    /* more floating point operations instructions */
375
    PPC_FLOAT_EXT   = 0x0000000000000004ULL,
376
    /* external control instructions               */
377
    PPC_EXTERN      = 0x0000000000000008ULL,
378
    /* segment register access instructions        */
379
    PPC_SEGMENT     = 0x0000000000000010ULL,
380
    /* Optional cache control instructions         */
381
    PPC_CACHE_OPT   = 0x0000000000000020ULL,
382
    /* Optional floating point op instructions     */
383
    PPC_FLOAT_OPT   = 0x0000000000000040ULL,
384
    /* Optional memory control instructions        */
385
    PPC_MEM_TLBIA   = 0x0000000000000080ULL,
386
    PPC_MEM_TLBIE   = 0x0000000000000100ULL,
387
    PPC_MEM_TLBSYNC = 0x0000000000000200ULL,
388
    /* eieio & sync                                */
389
    PPC_MEM_SYNC    = 0x0000000000000400ULL,
390
    /* PowerPC 6xx TLB management instructions     */
391
    PPC_6xx_TLB     = 0x0000000000000800ULL,
392
    /* Altivec support                             */
393
    PPC_ALTIVEC     = 0x0000000000001000ULL,
394
    /* Time base support                           */
395
    PPC_TB          = 0x0000000000002000ULL,
396
    /* Embedded PowerPC dedicated instructions     */
397
    PPC_EMB_COMMON  = 0x0000000000004000ULL,
398
    /* PowerPC 40x exception model                 */
399
    PPC_40x_EXCP    = 0x0000000000008000ULL,
400
    /* PowerPC 40x specific instructions           */
401
    PPC_40x_SPEC    = 0x0000000000010000ULL,
402
    /* PowerPC 405 Mac instructions                */
403
    PPC_405_MAC     = 0x0000000000020000ULL,
404
    /* PowerPC 440 specific instructions           */
405
    PPC_440_SPEC    = 0x0000000000040000ULL,
406
    /* Specific extensions */
407
    /* Power-to-PowerPC bridge (601)               */
408
    PPC_POWER_BR    = 0x0000000000080000ULL,
409
    /* PowerPC 602 specific */
410
    PPC_602_SPEC    = 0x0000000000100000ULL,
411
    /* Deprecated instructions                     */
412
    /* Original POWER instruction set              */
413
    PPC_POWER       = 0x0000000000200000ULL,
414
    /* POWER2 instruction set extension            */
415
    PPC_POWER2      = 0x0000000000400000ULL,
416
    /* Power RTC support */
417
    PPC_POWER_RTC   = 0x0000000000800000ULL,
418
    /* 64 bits PowerPC instructions                */
419
    /* 64 bits PowerPC instruction set             */
420
    PPC_64B         = 0x0000000001000000ULL,
421
    /* 64 bits hypervisor extensions               */
422
    PPC_64H         = 0x0000000002000000ULL,
423
    /* 64 bits PowerPC "bridge" features           */
424
    PPC_64_BRIDGE   = 0x0000000004000000ULL,
425
    /* BookE (embedded) PowerPC specification      */
426
    PPC_BOOKE       = 0x0000000008000000ULL,
427
    /* eieio                                       */
428
    PPC_MEM_EIEIO   = 0x0000000010000000ULL,
429
    /* e500 vector instructions                    */
430
    PPC_E500_VECTOR = 0x0000000020000000ULL,
431
    /* PowerPC 4xx dedicated instructions          */
432
    PPC_4xx_COMMON  = 0x0000000040000000ULL,
433
    /* PowerPC 2.03 specification extensions       */
434
    PPC_203         = 0x0000000080000000ULL,
435
    /* PowerPC 2.03 SPE extension                  */
436
    PPC_SPE         = 0x0000000100000000ULL,
437
    /* PowerPC 2.03 SPE floating-point extension   */
438
    PPC_SPEFPU      = 0x0000000200000000ULL,
439
    /* SLB management                              */
440
    PPC_SLBI        = 0x0000000400000000ULL,
441
    /* PowerPC 40x ibct instructions               */
442
    PPC_40x_ICBT    = 0x0000000800000000ULL,
443
};
444

  
445
/* CPU run-time flags (MMU and exception model) */
120
/* Exception model                                                           */
446 121
enum {
447
    /* MMU model                         */
448
    PPC_FLAGS_MMU_MASK       = 0x000000FF,
449
    /* Standard 32 bits PowerPC MMU      */
450
    PPC_FLAGS_MMU_32B        = 0x00000000,
451
    /* Standard 64 bits PowerPC MMU      */
452
    PPC_FLAGS_MMU_64B        = 0x00000001,
453
    /* PowerPC 601 MMU                   */
454
    PPC_FLAGS_MMU_601        = 0x00000002,
455
    /* PowerPC 6xx MMU with software TLB */
456
    PPC_FLAGS_MMU_SOFT_6xx   = 0x00000003,
457
    /* PowerPC 4xx MMU with software TLB */
458
    PPC_FLAGS_MMU_SOFT_4xx   = 0x00000004,
459
    /* PowerPC 403 MMU                  */
460
    PPC_FLAGS_MMU_403        = 0x00000005,
461
    /* BookE FSL MMU model              */
462
    PPC_FLAGS_MMU_BOOKE_FSL  = 0x00000006,
463
    /* BookE MMU model                  */
464
    PPC_FLAGS_MMU_BOOKE      = 0x00000007,
465
    /* 64 bits "bridge" PowerPC MMU     */
466
    PPC_FLAGS_MMU_64BRIDGE   = 0x00000008,
467
    /* PowerPC 401 MMU (real mode only) */
468
    PPC_FLAGS_MMU_401        = 0x00000009,
469
    /* Exception model                  */
470
    PPC_FLAGS_EXCP_MASK      = 0x0000FF00,
122
    POWERPC_EXCP_UNKNOWN   = 0,
471 123
    /* Standard PowerPC exception model */
472
    PPC_FLAGS_EXCP_STD       = 0x00000000,
124
    POWERPC_EXCP_STD,
473 125
    /* PowerPC 40x exception model      */
474
    PPC_FLAGS_EXCP_40x       = 0x00000100,
126
    POWERPC_EXCP_40x,
475 127
    /* PowerPC 601 exception model      */
476
    PPC_FLAGS_EXCP_601       = 0x00000200,
128
    POWERPC_EXCP_601,
477 129
    /* PowerPC 602 exception model      */
478
    PPC_FLAGS_EXCP_602       = 0x00000300,
130
    POWERPC_EXCP_602,
479 131
    /* PowerPC 603 exception model      */
480
    PPC_FLAGS_EXCP_603       = 0x00000400,
132
    POWERPC_EXCP_603,
133
    /* PowerPC 603e exception model     */
134
    POWERPC_EXCP_603E,
135
    /* PowerPC G2 exception model       */
136
    POWERPC_EXCP_G2,
481 137
    /* PowerPC 604 exception model      */
482
    PPC_FLAGS_EXCP_604       = 0x00000500,
138
    POWERPC_EXCP_604,
483 139
    /* PowerPC 7x0 exception model      */
484
    PPC_FLAGS_EXCP_7x0       = 0x00000600,
140
    POWERPC_EXCP_7x0,
485 141
    /* PowerPC 7x5 exception model      */
486
    PPC_FLAGS_EXCP_7x5       = 0x00000700,
142
    POWERPC_EXCP_7x5,
487 143
    /* PowerPC 74xx exception model     */
488
    PPC_FLAGS_EXCP_74xx      = 0x00000800,
144
    POWERPC_EXCP_74xx,
489 145
    /* PowerPC 970 exception model      */
490
    PPC_FLAGS_EXCP_970       = 0x00000900,
146
    POWERPC_EXCP_970,
491 147
    /* BookE exception model            */
492
    PPC_FLAGS_EXCP_BOOKE     = 0x00000A00,
493
    /* Input pins model                 */
494
    PPC_FLAGS_INPUT_MASK     = 0x000F0000,
148
    POWERPC_EXCP_BOOKE,
149
};
150

  
151
/*****************************************************************************/
152
/* Input pins model                                                          */
153
enum {
154
    PPC_FLAGS_INPUT_UNKNOWN = 0,
495 155
    /* PowerPC 6xx bus                  */
496
    PPC_FLAGS_INPUT_6xx      = 0x00000000,
156
    PPC_FLAGS_INPUT_6xx,
497 157
    /* BookE bus                        */
498
    PPC_FLAGS_INPUT_BookE    = 0x00010000,
499
    /* PowerPC 4xx bus                  */
500
    PPC_FLAGS_INPUT_40x      = 0x00020000,
158
    PPC_FLAGS_INPUT_BookE,
159
    /* PowerPC 405 bus                  */
160
    PPC_FLAGS_INPUT_405,
501 161
    /* PowerPC 970 bus                  */
502
    PPC_FLAGS_INPUT_970      = 0x00030000,
162
    PPC_FLAGS_INPUT_970,
163
    /* PowerPC 401 bus                  */
164
    PPC_FLAGS_INPUT_401,
503 165
};
504 166

  
505
#define PPC_MMU(env) (env->flags & PPC_FLAGS_MMU_MASK)
506
#define PPC_EXCP(env) (env->flags & PPC_FLAGS_EXCP_MASK)
507
#define PPC_INPUT(env) (env->flags & PPC_FLAGS_INPUT_MASK)
167
#define PPC_INPUT(env) (env->bus_model)
508 168

  
509
/*****************************************************************************/
510
/* Supported instruction set definitions */
511
/* This generates an empty opcode table... */
512
#define PPC_INSNS_TODO (PPC_NONE)
513
#define PPC_FLAGS_TODO (0x00000000)
514

  
515
/* PowerPC 40x instruction set */
516
#define PPC_INSNS_EMB (PPC_INSNS_BASE | PPC_EMB_COMMON)
517
/* PowerPC 401 */
518
#define PPC_INSNS_401 (PPC_INSNS_EMB | PPC_MEM_SYNC | PPC_MEM_EIEIO |         \
519
                       PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT)
520
#define PPC_FLAGS_401 (PPC_FLAGS_MMU_401 | PPC_FLAGS_EXCP_40x |               \
521
                       PPC_FLAGS_INPUT_40x)
522
/* PowerPC 403 */
523
#define PPC_INSNS_403 (PPC_INSNS_EMB | PPC_MEM_SYNC | PPC_MEM_EIEIO |         \
524
                       PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | PPC_4xx_COMMON |     \
525
                       PPC_40x_EXCP | PPC_40x_SPEC | PPC_40x_ICBT)
526
#define PPC_FLAGS_403 (PPC_FLAGS_MMU_403 | PPC_FLAGS_EXCP_40x |               \
527
                       PPC_FLAGS_INPUT_40x)
528
/* PowerPC 405 */
529
#define PPC_INSNS_405 (PPC_INSNS_EMB | PPC_MEM_SYNC | PPC_MEM_EIEIO |         \
530
                       PPC_CACHE_OPT | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC |      \
531
                       PPC_TB | PPC_4xx_COMMON | PPC_40x_SPEC |               \
532
                       PPC_40x_ICBT | PPC_40x_EXCP | PPC_405_MAC)
533
#define PPC_FLAGS_405 (PPC_FLAGS_MMU_SOFT_4xx | PPC_FLAGS_EXCP_40x |          \
534
                       PPC_FLAGS_INPUT_40x)
535
/* PowerPC 440 */
536
#define PPC_INSNS_440 (PPC_INSNS_EMB | PPC_CACHE_OPT | PPC_BOOKE |            \
537
                       PPC_MEM_TLBSYNC | PPC_4xx_COMMON | PPC_405_MAC |       \
538
                       PPC_440_SPEC)
539
#define PPC_FLAGS_440 (PPC_FLAGS_MMU_BOOKE | PPC_FLAGS_EXCP_BOOKE |           \
540
                       PPC_FLAGS_INPUT_BookE)
541
/* Generic BookE PowerPC */
542
#define PPC_INSNS_BOOKE (PPC_INSNS_EMB | PPC_MEM_TLBSYNC | PPC_BOOKE |        \
543
                         PPC_MEM_EIEIO | PPC_FLOAT | PPC_FLOAT_OPT |          \
544
                         PPC_CACHE_OPT)
545
#define PPC_FLAGS_BOOKE (PPC_FLAGS_MMU_BOOKE | PPC_FLAGS_EXCP_BOOKE |         \
546
                         PPC_FLAGS_INPUT_BookE)
547
/* e500 core */
548
#define PPC_INSNS_E500 (PPC_INSNS_EMB | PPC_MEM_TLBSYNC | PPC_BOOKE |         \
549
                        PPC_MEM_EIEIO | PPC_CACHE_OPT | PPC_E500_VECTOR)
550
#define PPC_FLAGS_E500 (PPC_FLAGS_MMU_SOFT_4xx | PPC_FLAGS_EXCP_40x |         \
551
                        PPC_FLAGS_INPUT_BookE)
552
/* Non-embedded PowerPC */
553
#define PPC_INSNS_COMMON  (PPC_INSNS_BASE | PPC_FLOAT | PPC_MEM_SYNC |        \
554
                           PPC_MEM_EIEIO | PPC_SEGMENT | PPC_MEM_TLBIE)
555
/* PowerPC 601 */
556
#define PPC_INSNS_601 (PPC_INSNS_COMMON | PPC_EXTERN | PPC_POWER_BR)
557
#define PPC_FLAGS_601 (PPC_FLAGS_MMU_601 | PPC_FLAGS_EXCP_601 |               \
558
                       PPC_FLAGS_INPUT_6xx)
559
/* PowerPC 602 */
560
#define PPC_INSNS_602 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_6xx_TLB |       \
561
                       PPC_MEM_TLBSYNC | PPC_TB | PPC_602_SPEC)
562
#define PPC_FLAGS_602 (PPC_FLAGS_MMU_SOFT_6xx | PPC_FLAGS_EXCP_602 |          \
563
                       PPC_FLAGS_INPUT_6xx)
564
/* PowerPC 603 */
565
#define PPC_INSNS_603 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_6xx_TLB |       \
566
                       PPC_MEM_TLBSYNC | PPC_EXTERN | PPC_TB)
567
#define PPC_FLAGS_603 (PPC_FLAGS_MMU_SOFT_6xx | PPC_FLAGS_EXCP_603 |          \
568
                       PPC_FLAGS_INPUT_6xx)
569
/* PowerPC G2 */
570
#define PPC_INSNS_G2 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_6xx_TLB |        \
571
                      PPC_MEM_TLBSYNC | PPC_EXTERN | PPC_TB)
572
#define PPC_FLAGS_G2 (PPC_FLAGS_MMU_SOFT_6xx | PPC_FLAGS_EXCP_603 |           \
573
                      PPC_FLAGS_INPUT_6xx)
574
/* PowerPC 604 */
575
#define PPC_INSNS_604 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_EXTERN |        \
576
                       PPC_MEM_TLBSYNC | PPC_TB)
577
#define PPC_FLAGS_604 (PPC_FLAGS_MMU_32B | PPC_FLAGS_EXCP_604 |               \
578
                       PPC_FLAGS_INPUT_6xx)
579
/* PowerPC 740/750 (aka G3) */
580
#define PPC_INSNS_7x0 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_EXTERN |        \
581
                       PPC_MEM_TLBSYNC | PPC_TB)
582
#define PPC_FLAGS_7x0 (PPC_FLAGS_MMU_32B | PPC_FLAGS_EXCP_7x0 |               \
583
                       PPC_FLAGS_INPUT_6xx)
584
/* PowerPC 745/755 */
585
#define PPC_INSNS_7x5 (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_EXTERN |        \
586
                       PPC_MEM_TLBSYNC | PPC_TB | PPC_6xx_TLB)
587
#define PPC_FLAGS_7x5 (PPC_FLAGS_MMU_SOFT_6xx | PPC_FLAGS_EXCP_7x5 |          \
588
                       PPC_FLAGS_INPUT_6xx)
589
/* PowerPC 74xx (aka G4) */
590
#define PPC_INSNS_74xx (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_ALTIVEC |      \
591
                        PPC_MEM_TLBSYNC | PPC_TB)
592
#define PPC_FLAGS_74xx (PPC_FLAGS_MMU_32B | PPC_FLAGS_EXCP_74xx |             \
593
                        PPC_FLAGS_INPUT_6xx)
594
/* PowerPC 970 (aka G5) */
595
#define PPC_INSNS_970  (PPC_INSNS_COMMON | PPC_FLOAT_EXT | PPC_FLOAT_OPT |    \
596
                        PPC_ALTIVEC | PPC_MEM_TLBSYNC | PPC_TB |              \
597
                        PPC_64B | PPC_64_BRIDGE | PPC_SLBI)
598
#define PPC_FLAGS_970  (PPC_FLAGS_MMU_64BRIDGE | PPC_FLAGS_EXCP_970 |         \
599
                        PPC_FLAGS_INPUT_970)
600

  
601
/* Default PowerPC will be 604/970 */
602
#define PPC_INSNS_PPC32 PPC_INSNS_604
603
#define PPC_FLAGS_PPC32 PPC_FLAGS_604
604
#define PPC_INSNS_PPC64 PPC_INSNS_970
605
#define PPC_FLAGS_PPC64 PPC_FLAGS_970
606
#define PPC_INSNS_DEFAULT PPC_INSNS_604
607
#define PPC_FLAGS_DEFAULT PPC_FLAGS_604
608 169
typedef struct ppc_def_t ppc_def_t;
170
typedef struct opc_handler_t opc_handler_t;
609 171

  
610 172
/*****************************************************************************/
611 173
/* Types used to describe some PowerPC registers */
612 174
typedef struct CPUPPCState CPUPPCState;
613
typedef struct opc_handler_t opc_handler_t;
614 175
typedef struct ppc_tb_t ppc_tb_t;
615 176
typedef struct ppc_spr_t ppc_spr_t;
616 177
typedef struct ppc_dcr_t ppc_dcr_t;
......
832 393

  
833 394
    /* Those resources are used during exception processing */
834 395
    /* CPU model definition */
835
    uint64_t msr_mask;
396
    target_ulong msr_mask;
397
    uint8_t mmu_model;
398
    uint8_t excp_model;
399
    uint8_t bus_model;
400
    uint8_t pad;
836 401
    uint32_t flags;
837 402

  
838 403
    int exception_index;
......
985 550
#define SPR_LR           (0x008)
986 551
#define SPR_CTR          (0x009)
987 552
#define SPR_DSISR        (0x012)
988
#define SPR_DAR          (0x013)
553
#define SPR_DAR          (0x013) /* DAE for PowerPC 601 */
989 554
#define SPR_601_RTCU     (0x014)
990 555
#define SPR_601_RTCL     (0x015)
991 556
#define SPR_DECR         (0x016)
......
1203 768
#define SPR_440_ITV1     (0x375)
1204 769
#define SPR_440_ITV2     (0x376)
1205 770
#define SPR_440_ITV3     (0x377)
771
#define SPR_440_CCR1     (0x378)
772
#define SPR_DCRIPR       (0x37B)
1206 773
#define SPR_PPR          (0x380)
1207 774
#define SPR_440_DNV0     (0x390)
1208 775
#define SPR_440_DNV1     (0x391)
......
1219 786
#define SPR_BOOKE_DCDBTRH (0x39D)
1220 787
#define SPR_BOOKE_ICDBTRL (0x39E)
1221 788
#define SPR_BOOKE_ICDBTRH (0x39F)
789
#define SPR_UMMCR2       (0x3A0)
790
#define SPR_UPMC5        (0x3A1)
791
#define SPR_UPMC6        (0x3A2)
792
#define SPR_UBAMR        (0x3A7)
1222 793
#define SPR_UMMCR0       (0x3A8)
1223 794
#define SPR_UPMC1        (0x3A9)
1224 795
#define SPR_UPMC2        (0x3AA)
1225
#define SPR_USIA         (0x3AB)
796
#define SPR_USIAR        (0x3AB)
1226 797
#define SPR_UMMCR1       (0x3AC)
1227 798
#define SPR_UPMC3        (0x3AD)
1228 799
#define SPR_UPMC4        (0x3AE)
1229 800
#define SPR_USDA         (0x3AF)
1230 801
#define SPR_40x_ZPR      (0x3B0)
1231 802
#define SPR_BOOKE_MAS7   (0x3B0)
803
#define SPR_620_PMR0     (0x3B0)
804
#define SPR_MMCR2        (0x3B0)
805
#define SPR_PMC5         (0x3B1)
1232 806
#define SPR_40x_PID      (0x3B1)
807
#define SPR_620_PMR1     (0x3B1)
808
#define SPR_PMC6         (0x3B2)
1233 809
#define SPR_440_MMUCR    (0x3B2)
810
#define SPR_620_PMR2     (0x3B2)
1234 811
#define SPR_4xx_CCR0     (0x3B3)
1235 812
#define SPR_BOOKE_EPLC   (0x3B3)
813
#define SPR_620_PMR3     (0x3B3)
1236 814
#define SPR_405_IAC3     (0x3B4)
1237 815
#define SPR_BOOKE_EPSC   (0x3B4)
816
#define SPR_620_PMR4     (0x3B4)
1238 817
#define SPR_405_IAC4     (0x3B5)
818
#define SPR_620_PMR5     (0x3B5)
1239 819
#define SPR_405_DVC1     (0x3B6)
820
#define SPR_620_PMR6     (0x3B6)
1240 821
#define SPR_405_DVC2     (0x3B7)
822
#define SPR_620_PMR7     (0x3B7)
823
#define SPR_BAMR         (0x3B7)
1241 824
#define SPR_MMCR0        (0x3B8)
825
#define SPR_620_PMR8     (0x3B8)
1242 826
#define SPR_PMC1         (0x3B9)
1243 827
#define SPR_40x_SGR      (0x3B9)
828
#define SPR_620_PMR9     (0x3B9)
1244 829
#define SPR_PMC2         (0x3BA)
1245 830
#define SPR_40x_DCWR     (0x3BA)
1246
#define SPR_SIA          (0x3BB)
831
#define SPR_620_PMRA     (0x3BA)
832
#define SPR_SIAR         (0x3BB)
1247 833
#define SPR_405_SLER     (0x3BB)
834
#define SPR_620_PMRB     (0x3BB)
1248 835
#define SPR_MMCR1        (0x3BC)
1249 836
#define SPR_405_SU0R     (0x3BC)
837
#define SPR_620_PMRC     (0x3BC)
838
#define SPR_401_SKR      (0x3BC)
1250 839
#define SPR_PMC3         (0x3BD)
1251 840
#define SPR_405_DBCR1    (0x3BD)
841
#define SPR_620_PMRD     (0x3BD)
1252 842
#define SPR_PMC4         (0x3BE)
843
#define SPR_620_PMRE     (0x3BE)
1253 844
#define SPR_SDA          (0x3BF)
845
#define SPR_620_PMRF     (0x3BF)
1254 846
#define SPR_403_VTBL     (0x3CC)
1255 847
#define SPR_403_VTBU     (0x3CD)
1256 848
#define SPR_DMISS        (0x3D0)
......
1258 850
#define SPR_HASH1        (0x3D2)
1259 851
#define SPR_HASH2        (0x3D3)
1260 852
#define SPR_BOOKE_ICDBDR (0x3D3)
853
#define SPR_TLBMISS      (0x3D4)
1261 854
#define SPR_IMISS        (0x3D4)
1262 855
#define SPR_40x_ESR      (0x3D4)
856
#define SPR_PTEHI        (0x3D5)
1263 857
#define SPR_ICMP         (0x3D5)
1264 858
#define SPR_40x_DEAR     (0x3D5)
859
#define SPR_PTELO        (0x3D6)
1265 860
#define SPR_RPA          (0x3D6)
1266 861
#define SPR_40x_EVPR     (0x3D6)
862
#define SPR_L3PM         (0x3D7)
1267 863
#define SPR_403_CDBCR    (0x3D7)
864
#define SPR_L3OHCR       (0x3D8)
1268 865
#define SPR_TCR          (0x3D8)
1269 866
#define SPR_40x_TSR      (0x3D8)
1270 867
#define SPR_IBR          (0x3DA)
1271 868
#define SPR_40x_TCR      (0x3DA)
1272
#define SPR_ESASR        (0x3DB)
869
#define SPR_ESASRR       (0x3DB)
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff