@@ -12,7 +12,7 @@ use kernel::{
1212 devres:: Devres ,
1313 dma:: CoherentAllocation ,
1414 error:: from_err_ptr,
15- io_mem :: IoMem ,
15+ io :: mem :: IoMem ,
1616 module_platform_driver, new_condvar, new_mutex, of, platform,
1717 prelude:: * ,
1818 soc:: apple:: aop:: { from_fourcc, EPICService , FakehidListener , AOP } ,
@@ -557,8 +557,8 @@ unsafe impl Send for ListenerEntry {}
557557#[ pin_data]
558558struct AopData {
559559 dev : ARef < device:: Device > ,
560- aop_mmio : IoMem < AOP_MMIO_SIZE > ,
561- asc_mmio : IoMem < ASC_MMIO_SIZE > ,
560+ aop_mmio : Devres < IoMem < AOP_MMIO_SIZE > > ,
561+ asc_mmio : Devres < IoMem < ASC_MMIO_SIZE > > ,
562562 #[ pin]
563563 rtkit : Mutex < Option < rtkit:: RtKit < AopData > > > ,
564564 #[ pin]
@@ -637,13 +637,16 @@ impl WorkItem for AopServiceRegisterWork {
637637}
638638
639639impl AopData {
640- fn new ( pdev : & mut platform:: Device ) -> Result < Arc < AopData > > {
641- let aop_mmio = unsafe { pdev. ioremap_resource ( 0 ) ? } ;
642- let asc_mmio = unsafe { pdev. ioremap_resource ( 1 ) ? } ;
640+ fn new ( pdev : & platform:: Device ) -> Result < Arc < AopData > > {
641+ let dev = ARef :: < device:: Device > :: from ( pdev. as_ref ( ) ) ;
642+ let aop_res = pdev. resource ( 0 ) . ok_or ( EINVAL ) ?;
643+ let asc_res = pdev. resource ( 1 ) . ok_or ( EINVAL ) ?;
644+ let aop_mmio = pdev. ioremap_resource_sized :: < AOP_MMIO_SIZE > ( aop_res) ?;
645+ let asc_mmio = pdev. ioremap_resource_sized :: < ASC_MMIO_SIZE > ( asc_res) ?;
643646 Arc :: pin_init (
644647 pin_init ! (
645648 AopData {
646- dev: pdev . get_device ( ) ,
649+ dev,
647650 aop_mmio,
648651 asc_mmio,
649652 rtkit <- new_mutex!( None ) ,
@@ -733,7 +736,11 @@ impl AopData {
733736 }
734737
735738 fn aop_read32 ( & self , off : usize ) -> u32 {
736- self . aop_mmio . readl_relaxed ( off)
739+ if let Some ( aop_mmio) = self . aop_mmio . try_access ( ) {
740+ aop_mmio. readl_relaxed ( off)
741+ } else {
742+ 0
743+ }
737744 }
738745
739746 fn patch_bootargs ( & self , patches : & [ ( u32 , u32 ) ] ) -> Result < ( ) > {
@@ -743,7 +750,10 @@ impl AopData {
743750 for _ in 0 ..size {
744751 arg_bytes. push ( 0 , GFP_KERNEL ) . unwrap ( ) ;
745752 }
746- self . aop_mmio . try_memcpy_fromio ( & mut arg_bytes, offset) ?;
753+ {
754+ let aop_mmio = self . aop_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
755+ aop_mmio. try_memcpy_fromio ( & mut arg_bytes, offset) ?;
756+ }
747757 let mut idx = 0 ;
748758 while idx < size {
749759 let key = u32:: from_le_bytes ( arg_bytes[ idx..idx + 4 ] . try_into ( ) . unwrap ( ) ) ;
@@ -758,12 +768,17 @@ impl AopData {
758768 }
759769 idx += size;
760770 }
761- self . aop_mmio . try_memcpy_toio ( offset, & arg_bytes)
771+ {
772+ let aop_mmio = self . aop_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
773+ aop_mmio. try_memcpy_toio ( offset, & arg_bytes)
774+ }
762775 }
763776
764- fn start_cpu ( & self ) {
765- let val = self . asc_mmio . readl_relaxed ( CPU_CONTROL ) ;
766- self . asc_mmio . writel_relaxed ( val | CPU_RUN , CPU_CONTROL ) ;
777+ fn start_cpu ( & self ) -> Result < ( ) > {
778+ let asc_mmio = self . asc_mmio . try_access ( ) . ok_or ( ENXIO ) ?;
779+ let val = asc_mmio. readl_relaxed ( CPU_CONTROL ) ;
780+ asc_mmio. writel_relaxed ( val | CPU_RUN , CPU_CONTROL ) ;
781+ Ok ( ( ) )
767782 }
768783}
769784
@@ -868,7 +883,7 @@ impl platform::Driver for AopDriver {
868883 ] ) ?;
869884 let rtkit = rtkit:: RtKit :: < AopData > :: new ( & dev, None , 0 , data. clone ( ) ) ?;
870885 * data. rtkit . lock ( ) = Some ( rtkit) ;
871- data. start_cpu ( ) ;
886+ let _ = data. start_cpu ( ) ;
872887 data. start ( ) ?;
873888 let data = data as Arc < dyn AOP > ;
874889 Ok ( KBox :: pin ( AopDriver ( data) , GFP_KERNEL ) ?)
0 commit comments