xref: /qemu/include/hw/tricore/tc27x_soc.h (revision ec11dc41eec5142b4776db1296972c6323ba5847)
134602f99SAndreas Konopik /*
234602f99SAndreas Konopik  * Infineon tc27x SoC System emulation.
334602f99SAndreas Konopik  *
434602f99SAndreas Konopik  * Copyright (c) 2020 Andreas Konopik <andreas.konopik@efs-auto.de>
534602f99SAndreas Konopik  * Copyright (c) 2020 David Brenken <david.brenken@efs-auto.de>
634602f99SAndreas Konopik  *
734602f99SAndreas Konopik  * This library is free software; you can redistribute it and/or
834602f99SAndreas Konopik  * modify it under the terms of the GNU Lesser General Public
934602f99SAndreas Konopik  * License as published by the Free Software Foundation; either
1034602f99SAndreas Konopik  * version 2 of the License, or (at your option) any later version.
1134602f99SAndreas Konopik  *
1234602f99SAndreas Konopik  * This library is distributed in the hope that it will be useful,
1334602f99SAndreas Konopik  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1434602f99SAndreas Konopik  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1534602f99SAndreas Konopik  * Lesser General Public License for more details.
1634602f99SAndreas Konopik  *
1734602f99SAndreas Konopik  * You should have received a copy of the GNU Lesser General Public
1834602f99SAndreas Konopik  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
1934602f99SAndreas Konopik  */
2034602f99SAndreas Konopik 
21*9c092804SMarkus Armbruster #ifndef TC27X_SOC_H
22*9c092804SMarkus Armbruster #define TC27X_SOC_H
2334602f99SAndreas Konopik 
2434602f99SAndreas Konopik #include "hw/sysbus.h"
2534602f99SAndreas Konopik #include "target/tricore/cpu.h"
2634602f99SAndreas Konopik #include "qom/object.h"
2734602f99SAndreas Konopik 
2834602f99SAndreas Konopik #define TYPE_TC27X_SOC ("tc27x-soc")
2934602f99SAndreas Konopik OBJECT_DECLARE_TYPE(TC27XSoCState, TC27XSoCClass, TC27X_SOC)
3034602f99SAndreas Konopik 
3134602f99SAndreas Konopik typedef struct TC27XSoCCPUMemState {
3234602f99SAndreas Konopik 
3334602f99SAndreas Konopik     MemoryRegion dspr;
3434602f99SAndreas Konopik     MemoryRegion pspr;
3534602f99SAndreas Konopik 
3634602f99SAndreas Konopik     MemoryRegion dcache;
3734602f99SAndreas Konopik     MemoryRegion dtag;
3834602f99SAndreas Konopik     MemoryRegion pcache;
3934602f99SAndreas Konopik     MemoryRegion ptag;
4034602f99SAndreas Konopik 
4134602f99SAndreas Konopik } TC27XSoCCPUMemState;
4234602f99SAndreas Konopik 
4334602f99SAndreas Konopik typedef struct TC27XSoCFlashMemState {
4434602f99SAndreas Konopik 
4534602f99SAndreas Konopik     MemoryRegion pflash0_c;
4634602f99SAndreas Konopik     MemoryRegion pflash1_c;
4734602f99SAndreas Konopik     MemoryRegion pflash0_u;
4834602f99SAndreas Konopik     MemoryRegion pflash1_u;
4934602f99SAndreas Konopik     MemoryRegion dflash0;
5034602f99SAndreas Konopik     MemoryRegion dflash1;
5134602f99SAndreas Konopik     MemoryRegion olda_c;
5234602f99SAndreas Konopik     MemoryRegion olda_u;
5334602f99SAndreas Konopik     MemoryRegion brom_c;
5434602f99SAndreas Konopik     MemoryRegion brom_u;
5534602f99SAndreas Konopik     MemoryRegion lmuram_c;
5634602f99SAndreas Konopik     MemoryRegion lmuram_u;
5734602f99SAndreas Konopik     MemoryRegion emem_c;
5834602f99SAndreas Konopik     MemoryRegion emem_u;
5934602f99SAndreas Konopik 
6034602f99SAndreas Konopik } TC27XSoCFlashMemState;
6134602f99SAndreas Konopik 
6234602f99SAndreas Konopik typedef struct TC27XSoCState {
6334602f99SAndreas Konopik     /*< private >*/
6434602f99SAndreas Konopik     SysBusDevice parent_obj;
6534602f99SAndreas Konopik 
6634602f99SAndreas Konopik     /*< public >*/
6734602f99SAndreas Konopik     TriCoreCPU cpu;
6834602f99SAndreas Konopik 
6934602f99SAndreas Konopik     MemoryRegion dsprX;
7034602f99SAndreas Konopik     MemoryRegion psprX;
7134602f99SAndreas Konopik 
7234602f99SAndreas Konopik     TC27XSoCCPUMemState cpu0mem;
7334602f99SAndreas Konopik     TC27XSoCCPUMemState cpu1mem;
7434602f99SAndreas Konopik     TC27XSoCCPUMemState cpu2mem;
7534602f99SAndreas Konopik 
7634602f99SAndreas Konopik     TC27XSoCFlashMemState flashmem;
7734602f99SAndreas Konopik 
7834602f99SAndreas Konopik } TC27XSoCState;
7934602f99SAndreas Konopik 
8034602f99SAndreas Konopik typedef struct MemmapEntry {
8134602f99SAndreas Konopik     hwaddr base;
8234602f99SAndreas Konopik     hwaddr size;
8334602f99SAndreas Konopik } MemmapEntry;
8434602f99SAndreas Konopik 
8534602f99SAndreas Konopik typedef struct TC27XSoCClass {
8634602f99SAndreas Konopik     DeviceClass parent_class;
8734602f99SAndreas Konopik 
8834602f99SAndreas Konopik     const char *name;
8934602f99SAndreas Konopik     const char *cpu_type;
9034602f99SAndreas Konopik     const MemmapEntry *memmap;
9134602f99SAndreas Konopik     uint32_t num_cpus;
9234602f99SAndreas Konopik } TC27XSoCClass;
9334602f99SAndreas Konopik 
9434602f99SAndreas Konopik enum {
9534602f99SAndreas Konopik     TC27XD_DSPR2,
9634602f99SAndreas Konopik     TC27XD_DCACHE2,
9734602f99SAndreas Konopik     TC27XD_DTAG2,
9834602f99SAndreas Konopik     TC27XD_PSPR2,
9934602f99SAndreas Konopik     TC27XD_PCACHE2,
10034602f99SAndreas Konopik     TC27XD_PTAG2,
10134602f99SAndreas Konopik     TC27XD_DSPR1,
10234602f99SAndreas Konopik     TC27XD_DCACHE1,
10334602f99SAndreas Konopik     TC27XD_DTAG1,
10434602f99SAndreas Konopik     TC27XD_PSPR1,
10534602f99SAndreas Konopik     TC27XD_PCACHE1,
10634602f99SAndreas Konopik     TC27XD_PTAG1,
10734602f99SAndreas Konopik     TC27XD_DSPR0,
10834602f99SAndreas Konopik     TC27XD_PSPR0,
10934602f99SAndreas Konopik     TC27XD_PCACHE0,
11034602f99SAndreas Konopik     TC27XD_PTAG0,
11134602f99SAndreas Konopik     TC27XD_PFLASH0_C,
11234602f99SAndreas Konopik     TC27XD_PFLASH1_C,
11334602f99SAndreas Konopik     TC27XD_OLDA_C,
11434602f99SAndreas Konopik     TC27XD_BROM_C,
11534602f99SAndreas Konopik     TC27XD_LMURAM_C,
11634602f99SAndreas Konopik     TC27XD_EMEM_C,
11734602f99SAndreas Konopik     TC27XD_PFLASH0_U,
11834602f99SAndreas Konopik     TC27XD_PFLASH1_U,
11934602f99SAndreas Konopik     TC27XD_DFLASH0,
12034602f99SAndreas Konopik     TC27XD_DFLASH1,
12134602f99SAndreas Konopik     TC27XD_OLDA_U,
12234602f99SAndreas Konopik     TC27XD_BROM_U,
12334602f99SAndreas Konopik     TC27XD_LMURAM_U,
12434602f99SAndreas Konopik     TC27XD_EMEM_U,
12534602f99SAndreas Konopik     TC27XD_PSPRX,
12634602f99SAndreas Konopik     TC27XD_DSPRX,
12734602f99SAndreas Konopik };
12834602f99SAndreas Konopik 
12934602f99SAndreas Konopik #endif
130