Skip to content

Commit

Permalink
feat: GICR
Browse files Browse the repository at this point in the history
Signed-off-by: Zone.N <[email protected]>
  • Loading branch information
MRNIU committed Feb 7, 2025
1 parent ca5d05f commit b846b27
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions src/kernel/driver/gic/include/gic.h
Original file line number Diff line number Diff line change
Expand Up @@ -359,21 +359,21 @@ class Gic {
void SetupSPI(uint32_t intid) const;

void gicr_enable_int(uint32_t cpuid, uint32_t intid) {
uint32_t is = gicr_read(cpuid, R_ISENABLER0);
uint32_t is = GICRRead(cpuid, R_ISENABLER0);
is |= 1 << (intid % 32);
gicr_write(cpuid, R_ISENABLER0, is);
GICRWrite(cpuid, R_ISENABLER0, is);
}

void gicr_clear_pending(uint32_t cpuid, uint32_t intid) {
uint32_t ic = gicr_read(cpuid, R_ICPENDR0);
uint32_t ic = GICRRead(cpuid, R_ICPENDR0);
ic |= 1 << (intid % 32);
gicr_write(cpuid, R_ICPENDR0, ic);
GICRWrite(cpuid, R_ICPENDR0, ic);
}

void gicr_set_prio0(uint32_t cpuid, uint32_t intid) {
uint32_t p = gicr_read(cpuid, R_IPRIORITYR(intid / 4));
uint32_t p = GICRRead(cpuid, R_IPRIORITYR(intid / 4));
p &= ~((uint32_t)0xff << (intid % 4 * 8)); // set prio 0
gicr_write(cpuid, R_IPRIORITYR(intid / 4), p);
GICRWrite(cpuid, R_IPRIORITYR(intid / 4), p);
}

// PPI: private peripheral interrupt,
Expand All @@ -396,12 +396,12 @@ class Gic {
return io::In<uint32_t>(gicd_base_addr_ + off);
}

__always_inline void gicr_write(uint32_t cpuid, uint32_t off,
uint32_t val) const {
__always_inline void GICRWrite(uint32_t cpuid, uint32_t off,
uint32_t val) const {
io::Out<uint32_t>(gicr_base_addr_ + cpuid * kGICR_STRIDE + off, val);
}

__always_inline auto gicr_read(uint32_t cpuid, uint32_t off) const
__always_inline auto GICRRead(uint32_t cpuid, uint32_t off) const
-> uint32_t {
return io::In<uint32_t>(gicr_base_addr_ + cpuid * kGICR_STRIDE + off);
}
Expand Down Expand Up @@ -436,16 +436,16 @@ class Gic {
}

void GICRInit(uint32_t cpuid) const {
gicr_write(cpuid, R_CTLR, 0);
GICRWrite(cpuid, R_CTLR, 0);

cpu_io::ICC_SRE_EL1::SRE::Set();

gicr_write(cpuid, R_IGROUPR0, ~0);
gicr_write(cpuid, R_IGRPMODR0, 0);
GICRWrite(cpuid, R_IGROUPR0, ~0);
GICRWrite(cpuid, R_IGRPMODR0, 0);

uint32_t waker = gicr_read(cpuid, R_WAKER);
gicr_write(cpuid, R_WAKER, waker & ~(1 << 1));
while (gicr_read(cpuid, R_WAKER) & (1 << 2))
uint32_t waker = GICRRead(cpuid, R_WAKER);
GICRWrite(cpuid, R_WAKER, waker & ~(1 << 1));
while (GICRRead(cpuid, R_WAKER) & (1 << 2))
;
}

Expand Down

0 comments on commit b846b27

Please sign in to comment.