47 строки
1.1 KiB
C
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));
|
|
}
|