mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

- Define new types for ast2700tsp INTC and INTCIO - Add register definitions for TSP INTC and INTCIO - Implement write handlers for TSP INTC and INTCIO - Register new types in aspeed_intc_register_types The design of the TSP INTC and INTCIO controllers is similar to AST2700, with the following differences: - AST2700 Support GICINT128 to GICINT136 in INTC The INTCIO GIC_192_201 has 10 output pins, mapped as follows: Bit 0 -> GIC 192 Bit 1 -> GIC 193 Bit 2 -> GIC 194 Bit 3 -> GIC 195 Bit 4 -> GIC 196 - AST2700-tsp Support TSPINT128 to TSPINT136 in INTC The INTCIO TSPINT_160_169 has 10 output pins, mapped as follows: Bit 0 -> TSPINT 160 Bit 1 -> TSPINT 161 Bit 2 -> TSPINT 162 Bit 3 -> TSPINT 163 Bit 4 -> TSPINT 164 Signed-off-by: Steven Lee <steven_lee@aspeedtech.com> Change-Id: I3f3aca4b90129640369cf4a92deb4b9a12df5b70 Reviewed-by: Cédric Le Goater <clg@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250502103449.3091642-5-steven_lee@aspeedtech.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
/*
|
|
* ASPEED INTC Controller
|
|
*
|
|
* Copyright (C) 2024 ASPEED Technology Inc.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#ifndef ASPEED_INTC_H
|
|
#define ASPEED_INTC_H
|
|
|
|
#include "hw/sysbus.h"
|
|
#include "qom/object.h"
|
|
#include "hw/or-irq.h"
|
|
|
|
#define TYPE_ASPEED_INTC "aspeed.intc"
|
|
#define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700"
|
|
#define TYPE_ASPEED_2700_INTCIO TYPE_ASPEED_INTC "io-ast2700"
|
|
#define TYPE_ASPEED_2700SSP_INTC TYPE_ASPEED_INTC "-ast2700ssp"
|
|
#define TYPE_ASPEED_2700SSP_INTCIO TYPE_ASPEED_INTC "io-ast2700ssp"
|
|
#define TYPE_ASPEED_2700TSP_INTC TYPE_ASPEED_INTC "-ast2700tsp"
|
|
#define TYPE_ASPEED_2700TSP_INTCIO TYPE_ASPEED_INTC "io-ast2700tsp"
|
|
|
|
OBJECT_DECLARE_TYPE(AspeedINTCState, AspeedINTCClass, ASPEED_INTC)
|
|
|
|
#define ASPEED_INTC_MAX_INPINS 10
|
|
#define ASPEED_INTC_MAX_OUTPINS 19
|
|
|
|
typedef struct AspeedINTCIRQ {
|
|
int inpin_idx;
|
|
int outpin_idx;
|
|
int num_outpins;
|
|
uint32_t enable_reg;
|
|
uint32_t status_reg;
|
|
} AspeedINTCIRQ;
|
|
|
|
struct AspeedINTCState {
|
|
/*< private >*/
|
|
SysBusDevice parent_obj;
|
|
|
|
/*< public >*/
|
|
MemoryRegion iomem;
|
|
MemoryRegion iomem_container;
|
|
|
|
uint32_t *regs;
|
|
OrIRQState orgates[ASPEED_INTC_MAX_INPINS];
|
|
qemu_irq output_pins[ASPEED_INTC_MAX_OUTPINS];
|
|
|
|
uint32_t enable[ASPEED_INTC_MAX_INPINS];
|
|
uint32_t mask[ASPEED_INTC_MAX_INPINS];
|
|
uint32_t pending[ASPEED_INTC_MAX_INPINS];
|
|
};
|
|
|
|
struct AspeedINTCClass {
|
|
SysBusDeviceClass parent_class;
|
|
|
|
uint32_t num_lines;
|
|
uint32_t num_inpins;
|
|
uint32_t num_outpins;
|
|
uint64_t mem_size;
|
|
uint64_t nr_regs;
|
|
uint64_t reg_offset;
|
|
const MemoryRegionOps *reg_ops;
|
|
const AspeedINTCIRQ *irq_table;
|
|
int irq_table_count;
|
|
};
|
|
|
|
#endif /* ASPEED_INTC_H */
|