Skip to content

Commit 28c83fd

Browse files
committed
Replaced CLINT with ACLINT
- Removed the `SEMU_FEATURE_ACLINT` feature flag and the corresponding CLINT code - Removed the `clint.c` file - Removed the `scripts/gen-clint-dts.py` script
1 parent ce2ebc1 commit 28c83fd

File tree

6 files changed

+2
-247
lines changed

6 files changed

+2
-247
lines changed

clint.c

Lines changed: 0 additions & 96 deletions
This file was deleted.

device.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ void virtio_blk_write(hart_t *vm,
172172
uint32_t *virtio_blk_init(virtio_blk_state_t *vblk, char *disk_file);
173173
#endif /* SEMU_HAS(VIRTIOBLK) */
174174

175-
#if SEMU_HAS(ACLINT)
176175
/* ACLINT MTIMER */
177176
typedef struct {
178177
uint64_t mtimecmp[4095]; // Machine Timer Compare array
@@ -224,26 +223,6 @@ void aclint_sswi_write(hart_t *hart,
224223
uint32_t addr,
225224
uint8_t width,
226225
uint32_t value);
227-
#else
228-
/* clint */
229-
typedef struct {
230-
uint32_t msip[4096];
231-
uint64_t mtimecmp[4095];
232-
semu_timer_t mtime;
233-
} clint_state_t;
234-
235-
void clint_update_interrupts(hart_t *vm, clint_state_t *clint);
236-
void clint_read(hart_t *vm,
237-
clint_state_t *clint,
238-
uint32_t addr,
239-
uint8_t width,
240-
uint32_t *value);
241-
void clint_write(hart_t *vm,
242-
clint_state_t *clint,
243-
uint32_t addr,
244-
uint8_t width,
245-
uint32_t value);
246-
#endif
247226

248227
/* memory mapping */
249228
typedef struct {
@@ -258,12 +237,8 @@ typedef struct {
258237
#if SEMU_HAS(VIRTIOBLK)
259238
virtio_blk_state_t vblk;
260239
#endif
261-
#if SEMU_HAS(ACLINT)
262240
/* ACLINT */
263241
mtimer_state_t mtimer;
264242
mswi_state_t mswi;
265243
sswi_state_t sswi;
266-
#else
267-
clint_state_t clint;
268-
#endif
269244
} emu_state_t;

feature.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,5 @@
1212
#define SEMU_FEATURE_VIRTIONET 1
1313
#endif
1414

15-
/* ACLINT */
16-
#ifndef SEMU_FEATURE_ACLINT
17-
#define SEMU_FEATURE_ACLINT 1
18-
#endif
19-
2015
/* Feature test macro */
2116
#define SEMU_HAS(x) SEMU_FEATURE_##x

main.c

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,16 @@ static void emu_update_timer_interrupt(hart_t *hart)
7777
emu_state_t *data = PRIV(hart);
7878

7979
/* Sync global timer with local timer */
80-
#if SEMU_HAS(ACLINT)
8180
hart->time = data->mtimer.mtime;
8281
aclint_mtimer_update_interrupts(hart, &data->mtimer);
83-
#else
84-
hart->time = data->clint.mtime;
85-
clint_update_interrupts(hart, &data->clint);
86-
#endif
8782
}
8883

89-
#if SEMU_HAS(ACLINT)
9084
static void emu_update_swi_interrupt(hart_t *hart)
9185
{
9286
emu_state_t *data = PRIV(hart);
9387
aclint_mswi_update_interrupts(hart, &data->mswi);
9488
aclint_sswi_update_interrupts(hart, &data->sswi);
9589
}
96-
#endif
9790

9891
static void mem_load(hart_t *hart,
9992
uint32_t addr,
@@ -131,7 +124,6 @@ static void mem_load(hart_t *hart,
131124
emu_update_vblk_interrupts(hart->vm);
132125
return;
133126
#endif
134-
#if SEMU_HAS(ACLINT)
135127
case 0x43: /* mtimer */
136128
aclint_mtimer_read(hart, &data->mtimer, addr & 0xFFFFF, width,
137129
value);
@@ -145,12 +137,6 @@ static void mem_load(hart_t *hart,
145137
aclint_sswi_read(hart, &data->sswi, addr & 0xFFFFF, width, value);
146138
aclint_sswi_update_interrupts(hart, &data->sswi);
147139
return;
148-
#else
149-
case 0x43: /* clint */
150-
clint_read(hart, &data->clint, addr & 0xFFFFF, width, value);
151-
clint_update_interrupts(hart, &data->clint);
152-
return;
153-
#endif
154140
}
155141
}
156142
vm_set_exception(hart, RV_EXC_LOAD_FAULT, hart->exc_val);
@@ -192,7 +178,6 @@ static void mem_store(hart_t *hart,
192178
emu_update_vblk_interrupts(hart->vm);
193179
return;
194180
#endif
195-
#if SEMU_HAS(ACLINT)
196181
case 0x43: /* mtimer */
197182
aclint_mtimer_write(hart, &data->mtimer, addr & 0xFFFFF, width,
198183
value);
@@ -206,12 +191,6 @@ static void mem_store(hart_t *hart,
206191
aclint_sswi_write(hart, &data->sswi, addr & 0xFFFFF, width, value);
207192
aclint_sswi_update_interrupts(hart, &data->sswi);
208193
return;
209-
#else
210-
case 0x43: /* clint */
211-
clint_write(hart, &data->clint, addr & 0xFFFFF, width, value);
212-
clint_update_interrupts(hart, &data->clint);
213-
return;
214-
#endif
215194
}
216195
}
217196
vm_set_exception(hart, RV_EXC_STORE_FAULT, hart->exc_val);
@@ -231,15 +210,9 @@ static inline sbi_ret_t handle_sbi_ecall_TIMER(hart_t *hart, int32_t fid)
231210
emu_state_t *data = PRIV(hart);
232211
switch (fid) {
233212
case SBI_TIMER__SET_TIMER:
234-
#if SEMU_HAS(ACLINT)
235213
data->mtimer.mtimecmp[hart->mhartid] =
236214
(((uint64_t) hart->x_regs[RV_R_A1]) << 32) |
237215
(uint64_t) (hart->x_regs[RV_R_A0]);
238-
#else
239-
data->clint.mtimecmp[hart->mhartid] =
240-
(((uint64_t) hart->x_regs[RV_R_A1]) << 32) |
241-
(uint64_t) (hart->x_regs[RV_R_A0]);
242-
#endif
243216
hart->sip &= ~RV_INT_STI_BIT;
244217
return (sbi_ret_t){SBI_SUCCESS, 0};
245218
default:
@@ -313,21 +286,11 @@ static inline sbi_ret_t handle_sbi_ecall_IPI(hart_t *hart, int32_t fid)
313286
hart_mask = (uint64_t) hart->x_regs[RV_R_A0];
314287
hart_mask_base = (uint64_t) hart->x_regs[RV_R_A1];
315288
if (hart_mask_base == 0xFFFFFFFFFFFFFFFF) {
316-
for (uint32_t i = 0; i < hart->vm->n_hart; i++) {
317-
#if SEMU_HAS(ACLINT)
289+
for (uint32_t i = 0; i < hart->vm->n_hart; i++)
318290
data->sswi.ssip[i] = 1;
319-
#else
320-
data->clint.msip[i] = 1;
321-
#endif
322-
}
323291
} else {
324-
for (int i = hart_mask_base; hart_mask; hart_mask >>= 1, i++) {
325-
#if SEMU_HAS(ACLINT)
292+
for (int i = hart_mask_base; hart_mask; hart_mask >>= 1, i++)
326293
data->sswi.ssip[i] = hart_mask & 1;
327-
#else
328-
data->clint.msip[i] = hart_mask & 1;
329-
#endif
330-
}
331294
}
332295

333296
return (sbi_ret_t){SBI_SUCCESS, 0};
@@ -586,11 +549,7 @@ static int semu_start(int argc, char **argv)
586549
/* Initialize the emulator */
587550
emu_state_t emu;
588551
memset(&emu, 0, sizeof(emu));
589-
#if SEMU_HAS(ACLINT)
590552
semu_timer_init(&emu.mtimer.mtime, CLOCK_FREQ);
591-
#else
592-
semu_timer_init(&emu.clint.mtime, CLOCK_FREQ);
593-
#endif
594553

595554
/* Set up RAM */
596555
emu.ram = mmap(NULL, RAM_SIZE, PROT_READ | PROT_WRITE,
@@ -680,9 +639,7 @@ static int semu_start(int argc, char **argv)
680639
}
681640

682641
emu_update_timer_interrupt(vm.hart[i]);
683-
#if SEMU_HAS(ACLINT)
684642
emu_update_swi_interrupt(vm.hart[i]);
685-
#endif
686643

687644
vm_step(vm.hart[i]);
688645
if (likely(!vm.hart[i]->error))

riscv.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -805,11 +805,7 @@ void vm_step(hart_t *vm)
805805
uint8_t idx = ilog2(applicable);
806806
if (idx == 1) {
807807
emu_state_t *data = PRIV(vm);
808-
#if SEMU_HAS(ACLINT)
809808
data->sswi.ssip[vm->mhartid] = 0;
810-
#else
811-
data->clint.msip[vm->mhartid] = 0;
812-
#endif
813809
}
814810
vm->exc_cause = (1U << 31) | idx;
815811
vm->stval = 0;

scripts/gen-clint-dts.py

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)