xref: /qemu/include/hw/tricore/tc27x_soc.h (revision 34602f9904aaea163e63a157a568ccc70d38397c)
1*34602f99SAndreas Konopik /*
2*34602f99SAndreas Konopik  * Infineon tc27x SoC System emulation.
3*34602f99SAndreas Konopik  *
4*34602f99SAndreas Konopik  * Copyright (c) 2020 Andreas Konopik <andreas.konopik@efs-auto.de>
5*34602f99SAndreas Konopik  * Copyright (c) 2020 David Brenken <david.brenken@efs-auto.de>
6*34602f99SAndreas Konopik  *
7*34602f99SAndreas Konopik  * This library is free software; you can redistribute it and/or
8*34602f99SAndreas Konopik  * modify it under the terms of the GNU Lesser General Public
9*34602f99SAndreas Konopik  * License as published by the Free Software Foundation; either
10*34602f99SAndreas Konopik  * version 2 of the License, or (at your option) any later version.
11*34602f99SAndreas Konopik  *
12*34602f99SAndreas Konopik  * This library is distributed in the hope that it will be useful,
13*34602f99SAndreas Konopik  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14*34602f99SAndreas Konopik  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*34602f99SAndreas Konopik  * Lesser General Public License for more details.
16*34602f99SAndreas Konopik  *
17*34602f99SAndreas Konopik  * You should have received a copy of the GNU Lesser General Public
18*34602f99SAndreas Konopik  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19*34602f99SAndreas Konopik  */
20*34602f99SAndreas Konopik 
21*34602f99SAndreas Konopik #ifndef TC27X_SoC_H
22*34602f99SAndreas Konopik #define TC27X_SoC_H
23*34602f99SAndreas Konopik 
24*34602f99SAndreas Konopik #include "hw/sysbus.h"
25*34602f99SAndreas Konopik #include "target/tricore/cpu.h"
26*34602f99SAndreas Konopik #include "qom/object.h"
27*34602f99SAndreas Konopik 
28*34602f99SAndreas Konopik #define TYPE_TC27X_SOC ("tc27x-soc")
29*34602f99SAndreas Konopik OBJECT_DECLARE_TYPE(TC27XSoCState, TC27XSoCClass, TC27X_SOC)
30*34602f99SAndreas Konopik 
31*34602f99SAndreas Konopik typedef struct TC27XSoCCPUMemState {
32*34602f99SAndreas Konopik 
33*34602f99SAndreas Konopik     MemoryRegion dspr;
34*34602f99SAndreas Konopik     MemoryRegion pspr;
35*34602f99SAndreas Konopik 
36*34602f99SAndreas Konopik     MemoryRegion dcache;
37*34602f99SAndreas Konopik     MemoryRegion dtag;
38*34602f99SAndreas Konopik     MemoryRegion pcache;
39*34602f99SAndreas Konopik     MemoryRegion ptag;
40*34602f99SAndreas Konopik 
41*34602f99SAndreas Konopik } TC27XSoCCPUMemState;
42*34602f99SAndreas Konopik 
43*34602f99SAndreas Konopik typedef struct TC27XSoCFlashMemState {
44*34602f99SAndreas Konopik 
45*34602f99SAndreas Konopik     MemoryRegion pflash0_c;
46*34602f99SAndreas Konopik     MemoryRegion pflash1_c;
47*34602f99SAndreas Konopik     MemoryRegion pflash0_u;
48*34602f99SAndreas Konopik     MemoryRegion pflash1_u;
49*34602f99SAndreas Konopik     MemoryRegion dflash0;
50*34602f99SAndreas Konopik     MemoryRegion dflash1;
51*34602f99SAndreas Konopik     MemoryRegion olda_c;
52*34602f99SAndreas Konopik     MemoryRegion olda_u;
53*34602f99SAndreas Konopik     MemoryRegion brom_c;
54*34602f99SAndreas Konopik     MemoryRegion brom_u;
55*34602f99SAndreas Konopik     MemoryRegion lmuram_c;
56*34602f99SAndreas Konopik     MemoryRegion lmuram_u;
57*34602f99SAndreas Konopik     MemoryRegion emem_c;
58*34602f99SAndreas Konopik     MemoryRegion emem_u;
59*34602f99SAndreas Konopik 
60*34602f99SAndreas Konopik } TC27XSoCFlashMemState;
61*34602f99SAndreas Konopik 
62*34602f99SAndreas Konopik typedef struct TC27XSoCState {
63*34602f99SAndreas Konopik     /*< private >*/
64*34602f99SAndreas Konopik     SysBusDevice parent_obj;
65*34602f99SAndreas Konopik 
66*34602f99SAndreas Konopik     /*< public >*/
67*34602f99SAndreas Konopik     TriCoreCPU cpu;
68*34602f99SAndreas Konopik 
69*34602f99SAndreas Konopik     MemoryRegion dsprX;
70*34602f99SAndreas Konopik     MemoryRegion psprX;
71*34602f99SAndreas Konopik 
72*34602f99SAndreas Konopik     TC27XSoCCPUMemState cpu0mem;
73*34602f99SAndreas Konopik     TC27XSoCCPUMemState cpu1mem;
74*34602f99SAndreas Konopik     TC27XSoCCPUMemState cpu2mem;
75*34602f99SAndreas Konopik 
76*34602f99SAndreas Konopik     TC27XSoCFlashMemState flashmem;
77*34602f99SAndreas Konopik 
78*34602f99SAndreas Konopik } TC27XSoCState;
79*34602f99SAndreas Konopik 
80*34602f99SAndreas Konopik typedef struct MemmapEntry {
81*34602f99SAndreas Konopik     hwaddr base;
82*34602f99SAndreas Konopik     hwaddr size;
83*34602f99SAndreas Konopik } MemmapEntry;
84*34602f99SAndreas Konopik 
85*34602f99SAndreas Konopik typedef struct TC27XSoCClass {
86*34602f99SAndreas Konopik     DeviceClass parent_class;
87*34602f99SAndreas Konopik 
88*34602f99SAndreas Konopik     const char *name;
89*34602f99SAndreas Konopik     const char *cpu_type;
90*34602f99SAndreas Konopik     const MemmapEntry *memmap;
91*34602f99SAndreas Konopik     uint32_t num_cpus;
92*34602f99SAndreas Konopik } TC27XSoCClass;
93*34602f99SAndreas Konopik 
94*34602f99SAndreas Konopik enum {
95*34602f99SAndreas Konopik     TC27XD_DSPR2,
96*34602f99SAndreas Konopik     TC27XD_DCACHE2,
97*34602f99SAndreas Konopik     TC27XD_DTAG2,
98*34602f99SAndreas Konopik     TC27XD_PSPR2,
99*34602f99SAndreas Konopik     TC27XD_PCACHE2,
100*34602f99SAndreas Konopik     TC27XD_PTAG2,
101*34602f99SAndreas Konopik     TC27XD_DSPR1,
102*34602f99SAndreas Konopik     TC27XD_DCACHE1,
103*34602f99SAndreas Konopik     TC27XD_DTAG1,
104*34602f99SAndreas Konopik     TC27XD_PSPR1,
105*34602f99SAndreas Konopik     TC27XD_PCACHE1,
106*34602f99SAndreas Konopik     TC27XD_PTAG1,
107*34602f99SAndreas Konopik     TC27XD_DSPR0,
108*34602f99SAndreas Konopik     TC27XD_PSPR0,
109*34602f99SAndreas Konopik     TC27XD_PCACHE0,
110*34602f99SAndreas Konopik     TC27XD_PTAG0,
111*34602f99SAndreas Konopik     TC27XD_PFLASH0_C,
112*34602f99SAndreas Konopik     TC27XD_PFLASH1_C,
113*34602f99SAndreas Konopik     TC27XD_OLDA_C,
114*34602f99SAndreas Konopik     TC27XD_BROM_C,
115*34602f99SAndreas Konopik     TC27XD_LMURAM_C,
116*34602f99SAndreas Konopik     TC27XD_EMEM_C,
117*34602f99SAndreas Konopik     TC27XD_PFLASH0_U,
118*34602f99SAndreas Konopik     TC27XD_PFLASH1_U,
119*34602f99SAndreas Konopik     TC27XD_DFLASH0,
120*34602f99SAndreas Konopik     TC27XD_DFLASH1,
121*34602f99SAndreas Konopik     TC27XD_OLDA_U,
122*34602f99SAndreas Konopik     TC27XD_BROM_U,
123*34602f99SAndreas Konopik     TC27XD_LMURAM_U,
124*34602f99SAndreas Konopik     TC27XD_EMEM_U,
125*34602f99SAndreas Konopik     TC27XD_PSPRX,
126*34602f99SAndreas Konopik     TC27XD_DSPRX,
127*34602f99SAndreas Konopik };
128*34602f99SAndreas Konopik 
129*34602f99SAndreas Konopik #endif
130