@@ -130,8 +130,8 @@ impl PmpData {
130130 GFP_KERNEL ,
131131 )
132132 }
133- fn start_cpu ( & self ) -> Result < ( ) > {
134- let asc_mmio = self . asc_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
133+ fn start_cpu ( & self , dev : & platform :: Device < Core > ) -> Result < ( ) > {
134+ let asc_mmio = self . asc_mmio . access ( dev . as_ref ( ) ) ?;
135135 let val = asc_mmio. read32_relaxed ( CPU_CONTROL ) ;
136136 asc_mmio. write32_relaxed ( val | CPU_RUN , CPU_CONTROL ) ;
137137 Ok ( ( ) )
@@ -142,21 +142,12 @@ impl PmpData {
142142 rtk. as_mut ( ) . wake ( ) ?;
143143 rtk. start_endpoint ( PMP_ENDPOINT )
144144 }
145- fn pmp_read32 ( & self , off : usize ) -> u32 {
146- if let Some ( pmp_mmio) = self . pmp_mmio . try_access ( ) {
147- pmp_mmio. read32_relaxed ( off)
148- } else {
149- 0
150- }
151- }
152- fn patch_bootargs ( & self , patches : & [ ( u32 , u32 ) ] ) -> Result < ( ) > {
153- let offset = self . pmp_read32 ( BOOTARGS_OFFSET ) as usize ;
154- let size = self . pmp_read32 ( BOOTARGS_SIZE ) as usize ;
145+ fn patch_bootargs ( & self , dev : & platform:: Device < Core > , patches : & [ ( u32 , u32 ) ] ) -> Result < ( ) > {
146+ let io = self . pmp_mmio . access ( dev. as_ref ( ) ) ?;
147+ let offset = io. read32_relaxed ( BOOTARGS_OFFSET ) as usize ;
148+ let size = io. read32_relaxed ( BOOTARGS_SIZE ) as usize ;
155149 let mut arg_bytes = kvec ! [ 0u8 ; size] ?;
156- {
157- let pmp_mmio = self . pmp_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
158- pmp_mmio. try_memcpy_fromio ( & mut arg_bytes, offset) ?;
159- }
150+ io. try_memcpy_fromio ( & mut arg_bytes, offset) ?;
160151 let mut idx = 0 ;
161152 while idx < size {
162153 let key = u32:: from_le_bytes ( arg_bytes[ idx..idx + 4 ] . try_into ( ) . unwrap ( ) ) ;
@@ -171,10 +162,7 @@ impl PmpData {
171162 }
172163 idx += size;
173164 }
174- {
175- let pmp_mmio = self . pmp_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
176- pmp_mmio. try_memcpy_toio ( offset, & arg_bytes)
177- }
165+ io. try_memcpy_toio ( offset, & arg_bytes)
178166 }
179167 fn get_iova_table ( & self ) -> Result < u64 > {
180168 let mut state = self . state . lock ( ) ;
@@ -416,18 +404,22 @@ impl platform::Driver for PmpDriver {
416404 . required_by ( & dev) ?;
417405 let bdid = node. property_read ( c"apple,board-id" ) . required_by ( & dev) ?;
418406 match node. property_read ( c"apple,dram-capacity" ) . optional ( ) {
419- Some ( dcap) => data. patch_bootargs ( & [
420- ( from_fourcc ( b"BDID" ) , bdid) ,
421- ( from_fourcc ( b"DCAP" ) , dcap) ,
422- ( from_fourcc ( b"DVID" ) , dvid) ,
423- ] ) ?,
424- None => {
425- data. patch_bootargs ( & [ ( from_fourcc ( b"BDID" ) , bdid) , ( from_fourcc ( b"DVID" ) , dvid) ] ) ?
426- }
407+ Some ( dcap) => data. patch_bootargs (
408+ pdev,
409+ & [
410+ ( from_fourcc ( b"BDID" ) , bdid) ,
411+ ( from_fourcc ( b"DCAP" ) , dcap) ,
412+ ( from_fourcc ( b"DVID" ) , dvid) ,
413+ ] ,
414+ ) ?,
415+ None => data. patch_bootargs (
416+ pdev,
417+ & [ ( from_fourcc ( b"BDID" ) , bdid) , ( from_fourcc ( b"DVID" ) , dvid) ] ,
418+ ) ?,
427419 } ;
428420 let rtkit = rtkit:: RtKit :: < PmpData > :: new ( & dev, None , 0 , data. clone ( ) ) ?;
429421 * data. rtkit . lock ( ) = Some ( rtkit) ;
430- data. start_cpu ( ) ?;
422+ data. start_cpu ( pdev ) ?;
431423 data. start ( ) ?;
432424 Ok ( PmpDriver ( data) )
433425 }
0 commit comments