156f6e31eSBin Meng /*
256f6e31eSBin Meng  * Microchip PolarFire SoC machine interface
356f6e31eSBin Meng  *
456f6e31eSBin Meng  * Copyright (c) 2020 Wind River Systems, Inc.
556f6e31eSBin Meng  *
656f6e31eSBin Meng  * Author:
756f6e31eSBin Meng  *   Bin Meng <bin.meng@windriver.com>
856f6e31eSBin Meng  *
956f6e31eSBin Meng  * This program is free software; you can redistribute it and/or modify it
1056f6e31eSBin Meng  * under the terms and conditions of the GNU General Public License,
1156f6e31eSBin Meng  * version 2 or later, as published by the Free Software Foundation.
1256f6e31eSBin Meng  *
1356f6e31eSBin Meng  * This program is distributed in the hope it will be useful, but WITHOUT
1456f6e31eSBin Meng  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1556f6e31eSBin Meng  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
1656f6e31eSBin Meng  * more details.
1756f6e31eSBin Meng  *
1856f6e31eSBin Meng  * You should have received a copy of the GNU General Public License along with
1956f6e31eSBin Meng  * this program.  If not, see <http://www.gnu.org/licenses/>.
2056f6e31eSBin Meng  */
2156f6e31eSBin Meng 
2256f6e31eSBin Meng #ifndef HW_MICROCHIP_PFSOC_H
2356f6e31eSBin Meng #define HW_MICROCHIP_PFSOC_H
2456f6e31eSBin Meng 
25*8f2ac39dSBin Meng #include "hw/char/mchp_pfsoc_mmuart.h"
26*8f2ac39dSBin Meng 
2756f6e31eSBin Meng typedef struct MicrochipPFSoCState {
2856f6e31eSBin Meng     /*< private >*/
2956f6e31eSBin Meng     DeviceState parent_obj;
3056f6e31eSBin Meng 
3156f6e31eSBin Meng     /*< public >*/
3256f6e31eSBin Meng     CPUClusterState e_cluster;
3356f6e31eSBin Meng     CPUClusterState u_cluster;
3456f6e31eSBin Meng     RISCVHartArrayState e_cpus;
3556f6e31eSBin Meng     RISCVHartArrayState u_cpus;
3656f6e31eSBin Meng     DeviceState *plic;
37*8f2ac39dSBin Meng     MchpPfSoCMMUartState *serial0;
38*8f2ac39dSBin Meng     MchpPfSoCMMUartState *serial1;
39*8f2ac39dSBin Meng     MchpPfSoCMMUartState *serial2;
40*8f2ac39dSBin Meng     MchpPfSoCMMUartState *serial3;
41*8f2ac39dSBin Meng     MchpPfSoCMMUartState *serial4;
4256f6e31eSBin Meng } MicrochipPFSoCState;
4356f6e31eSBin Meng 
4456f6e31eSBin Meng #define TYPE_MICROCHIP_PFSOC    "microchip.pfsoc"
4556f6e31eSBin Meng #define MICROCHIP_PFSOC(obj) \
4656f6e31eSBin Meng     OBJECT_CHECK(MicrochipPFSoCState, (obj), TYPE_MICROCHIP_PFSOC)
4756f6e31eSBin Meng 
4856f6e31eSBin Meng typedef struct MicrochipIcicleKitState {
4956f6e31eSBin Meng     /*< private >*/
5056f6e31eSBin Meng     MachineState parent_obj;
5156f6e31eSBin Meng 
5256f6e31eSBin Meng     /*< public >*/
5356f6e31eSBin Meng     MicrochipPFSoCState soc;
5456f6e31eSBin Meng } MicrochipIcicleKitState;
5556f6e31eSBin Meng 
5656f6e31eSBin Meng #define TYPE_MICROCHIP_ICICLE_KIT_MACHINE \
5756f6e31eSBin Meng     MACHINE_TYPE_NAME("microchip-icicle-kit")
5856f6e31eSBin Meng #define MICROCHIP_ICICLE_KIT_MACHINE(obj) \
5956f6e31eSBin Meng     OBJECT_CHECK(MicrochipIcicleKitState, (obj), \
6056f6e31eSBin Meng                  TYPE_MICROCHIP_ICICLE_KIT_MACHINE)
6156f6e31eSBin Meng 
6256f6e31eSBin Meng enum {
6356f6e31eSBin Meng     MICROCHIP_PFSOC_DEBUG,
6456f6e31eSBin Meng     MICROCHIP_PFSOC_E51_DTIM,
6556f6e31eSBin Meng     MICROCHIP_PFSOC_BUSERR_UNIT0,
6656f6e31eSBin Meng     MICROCHIP_PFSOC_BUSERR_UNIT1,
6756f6e31eSBin Meng     MICROCHIP_PFSOC_BUSERR_UNIT2,
6856f6e31eSBin Meng     MICROCHIP_PFSOC_BUSERR_UNIT3,
6956f6e31eSBin Meng     MICROCHIP_PFSOC_BUSERR_UNIT4,
7056f6e31eSBin Meng     MICROCHIP_PFSOC_CLINT,
7156f6e31eSBin Meng     MICROCHIP_PFSOC_L2CC,
7256f6e31eSBin Meng     MICROCHIP_PFSOC_L2LIM,
7356f6e31eSBin Meng     MICROCHIP_PFSOC_PLIC,
74*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART0,
7556f6e31eSBin Meng     MICROCHIP_PFSOC_SYSREG,
7656f6e31eSBin Meng     MICROCHIP_PFSOC_MPUCFG,
77*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART1,
78*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART2,
79*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART3,
80*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART4,
8156f6e31eSBin Meng     MICROCHIP_PFSOC_ENVM_CFG,
8256f6e31eSBin Meng     MICROCHIP_PFSOC_ENVM_DATA,
8356f6e31eSBin Meng     MICROCHIP_PFSOC_IOSCB_CFG,
8456f6e31eSBin Meng     MICROCHIP_PFSOC_DRAM,
8556f6e31eSBin Meng };
8656f6e31eSBin Meng 
87*8f2ac39dSBin Meng enum {
88*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART0_IRQ = 90,
89*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART1_IRQ = 91,
90*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART2_IRQ = 92,
91*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART3_IRQ = 93,
92*8f2ac39dSBin Meng     MICROCHIP_PFSOC_MMUART4_IRQ = 94,
93*8f2ac39dSBin Meng };
94*8f2ac39dSBin Meng 
9556f6e31eSBin Meng #define MICROCHIP_PFSOC_MANAGEMENT_CPU_COUNT    1
9656f6e31eSBin Meng #define MICROCHIP_PFSOC_COMPUTE_CPU_COUNT       4
9756f6e31eSBin Meng 
9856f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_HART_CONFIG        "MS"
9956f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_NUM_SOURCES        185
10056f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_NUM_PRIORITIES     7
10156f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_PRIORITY_BASE      0x04
10256f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_PENDING_BASE       0x1000
10356f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_ENABLE_BASE        0x2000
10456f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_ENABLE_STRIDE      0x80
10556f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_CONTEXT_BASE       0x200000
10656f6e31eSBin Meng #define MICROCHIP_PFSOC_PLIC_CONTEXT_STRIDE     0x1000
10756f6e31eSBin Meng 
10856f6e31eSBin Meng #endif /* HW_MICROCHIP_PFSOC_H */
109