mirror of
https://github.com/AmbiML/sparrow-kata-full.git
synced 2025-07-31 05:30:34 +00:00
Add VectorCoreDriver interrupt handlers
Bug: 199798457 Change-Id: I2899022b9d6d57304d70c50b08e08d225d10c511 GitOrigin-RevId: 22a051696dac158c43df42ccd6a436e314f25f70
This commit is contained in:
parent
47efe82e87
commit
cd45ee8c01
@ -1,5 +1,9 @@
|
||||
component VectorCoreDriver {
|
||||
dataport Buf csr;
|
||||
dataport Buf csr;
|
||||
consumes Interrupt host_req;
|
||||
consumes Interrupt finish;
|
||||
consumes Interrupt instruction_fault;
|
||||
consumes Interrupt data_fault;
|
||||
|
||||
provides VectorCoreInterface vctop;
|
||||
provides VectorCoreInterface vctop;
|
||||
}
|
||||
|
@ -8,6 +8,42 @@
|
||||
#define VCTOP_REG(name) \
|
||||
*((volatile uint32_t *)(CSR_OFFSET + VC_TOP_##name##_REG_OFFSET))
|
||||
|
||||
// CAmkES initialization hook.
|
||||
//
|
||||
// Enables Interrupts.
|
||||
//
|
||||
void pre_init() {
|
||||
// Enables interrupts.
|
||||
VCTOP_REG(INTR_ENABLE) = (BIT(VC_TOP_INTR_COMMON_HOST_REQ_BIT) |
|
||||
BIT(VC_TOP_INTR_ENABLE_FINISH_BIT) |
|
||||
BIT(VC_TOP_INTR_COMMON_INSTRUCTION_FAULT_BIT) |
|
||||
BIT(VC_TOP_INTR_COMMON_DATA_FAULT_BIT));
|
||||
}
|
||||
|
||||
void vctop_set_ctrl(uint32_t ctrl) {
|
||||
VCTOP_REG(CTRL) = ctrl;
|
||||
}
|
||||
|
||||
void host_req_handle(void) {
|
||||
// Also need to clear the INTR_STATE (write-1-to-clear).
|
||||
VCTOP_REG(INTR_STATE) = BIT(VC_TOP_INTR_STATE_HOST_REQ_BIT);
|
||||
seL4_Assert(host_req_acknowledge() == 0);
|
||||
}
|
||||
|
||||
void finish_handle(void) {
|
||||
// Also need to clear the INTR_STATE (write-1-to-clear).
|
||||
VCTOP_REG(INTR_STATE) = BIT(VC_TOP_INTR_STATE_FINISH_BIT);
|
||||
seL4_Assert(finish_acknowledge() == 0);
|
||||
}
|
||||
|
||||
void instruction_fault_handle(void) {
|
||||
// Also need to clear the INTR_STATE (write-1-to-clear).
|
||||
VCTOP_REG(INTR_STATE) = BIT(VC_TOP_INTR_STATE_INSTRUCTION_FAULT_BIT);
|
||||
seL4_Assert(instruction_fault_acknowledge() == 0);
|
||||
}
|
||||
|
||||
void data_fault_handle(void) {
|
||||
// Also need to clear the INTR_STATE (write-1-to-clear).
|
||||
VCTOP_REG(INTR_STATE) = BIT(VC_TOP_INTR_STATE_DATA_FAULT_BIT);
|
||||
seL4_Assert(data_fault_acknowledge() == 0);
|
||||
}
|
||||
|
@ -36,6 +36,11 @@ component OpenTitanUART {
|
||||
component VectorCoreHw {
|
||||
hardware;
|
||||
dataport Buf csr;
|
||||
|
||||
emits Interrupt host_req;
|
||||
emits Interrupt finish;
|
||||
emits Interrupt instruction_fault;
|
||||
emits Interrupt data_fault;
|
||||
}
|
||||
|
||||
assembly {
|
||||
@ -68,6 +73,14 @@ assembly {
|
||||
connection seL4HardwareMMIO vc_csr(from vc_drv.csr, to vctop.csr);
|
||||
connection seL4RPCCall ml_coord_to_driver(from ml_coordinator.vctop,
|
||||
to vc_drv.vctop);
|
||||
connection seL4HardwareInterrupt vctop_host_req(from vctop.host_req,
|
||||
to vc_drv.host_req);
|
||||
connection seL4HardwareInterrupt vctop_finish(from vctop.finish,
|
||||
to vc_drv.finish);
|
||||
connection seL4HardwareInterrupt vctop_instruction_fault(from vctop.instruction_fault,
|
||||
to vc_drv.instruction_fault);
|
||||
connection seL4HardwareInterrupt vctop_data_fault(from vctop.data_fault,
|
||||
to vc_drv.data_fault);
|
||||
|
||||
// Hookup ProcessManager to DebugConsole for shell commands.
|
||||
connection seL4RPCCall shell_process(from debug_console.proc_ctrl,
|
||||
@ -129,6 +142,10 @@ assembly {
|
||||
|
||||
vctop.csr_paddr = 0x48000000;
|
||||
vctop.csr_size = 0x1000;
|
||||
vctop.host_req_irq_number = 34;
|
||||
vctop.finish_irq_number = 35;
|
||||
vctop.instruction_fault_irq_number = 36;
|
||||
vctop.data_fault_irq_number = 37;
|
||||
|
||||
random.ID = 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user