11use alloc:: vec:: Vec ;
2+ use core:: ptr;
23
34use ahash:: RandomState ;
45use hashbrown:: HashMap ;
@@ -128,18 +129,21 @@ pub(crate) fn install_handlers() {
128129
129130 // Set priority to 7 (highest on FU740)
130131 let prio_address = * base_ptr + * irq_number as usize * 4 ;
131- core:: ptr:: write_volatile ( prio_address as * mut u32 , 1 ) ;
132+ let prio_ptr = ptr:: with_exposed_provenance_mut :: < u32 > ( prio_address) ;
133+ prio_ptr. write_volatile ( 1 ) ;
132134 // Set Threshold to 0 (lowest)
133135 let thresh_address = * base_ptr + 0x20_0000 + 0x1000 * ( * context as usize ) ;
134- core:: ptr:: write_volatile ( thresh_address as * mut u32 , 0 ) ;
136+ let thresh_ptr = ptr:: with_exposed_provenance_mut :: < u32 > ( thresh_address) ;
137+ thresh_ptr. write_volatile ( 0 ) ;
135138 // Enable irq for context
136139 const PLIC_ENABLE_OFFSET : usize = 0x0000_2000 ;
137140 let enable_address = * base_ptr
138141 + PLIC_ENABLE_OFFSET
139142 + 0x80 * ( * context as usize )
140143 + ( ( * irq_number / 32 ) * 4 ) as usize ;
141- debug ! ( "enable_address {enable_address:x}" ) ;
142- core:: ptr:: write_volatile ( enable_address as * mut u32 , 1 << ( irq_number % 32 ) ) ;
144+ let enable_ptr = ptr:: with_exposed_provenance_mut :: < u32 > ( enable_address) ;
145+ debug ! ( "enable_address {enable_ptr:p}" ) ;
146+ enable_ptr. write_volatile ( 1 << ( irq_number % 32 ) ) ;
143147 }
144148 }
145149
@@ -193,7 +197,8 @@ fn external_handler() {
193197 let base_ptr = PLIC_BASE . lock ( ) ;
194198 let context = PLIC_CONTEXT . lock ( ) ;
195199 let claim_address = * base_ptr + 0x20_0004 + 0x1000 * ( * context as usize ) ;
196- let irq = unsafe { core:: ptr:: read_volatile ( claim_address as * mut u32 ) } ;
200+ let claim_ptr = ptr:: with_exposed_provenance_mut :: < u32 > ( claim_address) ;
201+ let irq = unsafe { claim_ptr. read_volatile ( ) } ;
197202
198203 if irq != 0 {
199204 debug ! ( "External INT: {irq}" ) ;
@@ -219,7 +224,7 @@ fn external_handler() {
219224
220225 // Complete interrupt after handling
221226 unsafe {
222- core :: ptr :: write_volatile ( claim_address as * mut u32 , irq) ;
227+ claim_ptr . write_volatile ( irq) ;
223228 }
224229
225230 // Remove from active interrupts
0 commit comments