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