1
1

47 строки
1.1 KiB
C

/*
* (c) 2023, SWD Embedded Systems Limited, http://www.kpda.ru
*/
/*
* Allwinner H3 Generic Interrupt Controller support.
*/
#include "startup.h"
#include <arm/gic.h>
#include <arm/aw_h3.h>
static paddr_t aic_base = AW_H3_GIC_BASE;
const static struct startup_intrinfo intrs[] = {
/* ARM General Interrupt Controller */
{ .vector_base = _NTO_INTR_CLASS_EXTERNAL,
.num_vectors = 157,
.cascade_vector = _NTO_INTR_SPARE,
.cpu_intr_base = 0,
.cpu_intr_stride = 0,
.flags = 0,
.id = { INTR_GENFLAG_LOAD_SYSPAGE, 0, &interrupt_id_gic },
.eoi = { INTR_GENFLAG_LOAD_SYSPAGE | INTR_GENFLAG_LOAD_INTRMASK, 0, &interrupt_eoi_gic },
.mask = &interrupt_mask_gic,
.unmask = &interrupt_unmask_gic,
.config = &interrupt_config_gic,
.patch_data = &aic_base,
},
};
void
init_intrinfo()
{
kprintf("Initializing GIC...\n");
unsigned gic_dist = AW_H3_GICD_BASE;
unsigned gic_cpu = AW_H3_GICC_BASE;
/*
* Initialise GIC distributor and our cpu interface
*/
arm_gic_init(gic_dist, gic_cpu);
add_interrupt_array(intrs, sizeof(intrs));
}