@@ -750,6 +750,46 @@ void omap_gem_dma_sync_buffer(struct drm_gem_object *obj,
750
750
}
751
751
}
752
752
753
+ static int omap_gem_pin_tiler (struct drm_gem_object * obj )
754
+ {
755
+ struct omap_gem_object * omap_obj = to_omap_bo (obj );
756
+ u32 npages = obj -> size >> PAGE_SHIFT ;
757
+ enum tiler_fmt fmt = gem2fmt (omap_obj -> flags );
758
+ struct tiler_block * block ;
759
+ int ret ;
760
+
761
+ BUG_ON (omap_obj -> block );
762
+
763
+ if (omap_obj -> flags & OMAP_BO_TILED_MASK ) {
764
+ block = tiler_reserve_2d (fmt , omap_obj -> width , omap_obj -> height ,
765
+ PAGE_SIZE );
766
+ } else {
767
+ block = tiler_reserve_1d (obj -> size );
768
+ }
769
+
770
+ if (IS_ERR (block )) {
771
+ ret = PTR_ERR (block );
772
+ dev_err (obj -> dev -> dev , "could not remap: %d (%d)\n" , ret , fmt );
773
+ goto fail ;
774
+ }
775
+
776
+ /* TODO: enable async refill.. */
777
+ ret = tiler_pin (block , omap_obj -> pages , npages , omap_obj -> roll , true);
778
+ if (ret ) {
779
+ tiler_release (block );
780
+ dev_err (obj -> dev -> dev , "could not pin: %d\n" , ret );
781
+ goto fail ;
782
+ }
783
+
784
+ omap_obj -> dma_addr = tiler_ssptr (block );
785
+ omap_obj -> block = block ;
786
+
787
+ DBG ("got dma address: %pad" , & omap_obj -> dma_addr );
788
+
789
+ fail :
790
+ return ret ;
791
+ }
792
+
753
793
/**
754
794
* omap_gem_pin() - Pin a GEM object in memory
755
795
* @obj: the GEM object
@@ -774,47 +814,16 @@ int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr)
774
814
775
815
if (!omap_gem_is_contiguous (omap_obj ) && priv -> has_dmm ) {
776
816
if (refcount_read (& omap_obj -> dma_addr_cnt ) == 0 ) {
777
- u32 npages = obj -> size >> PAGE_SHIFT ;
778
- enum tiler_fmt fmt = gem2fmt (omap_obj -> flags );
779
- struct tiler_block * block ;
780
-
781
- BUG_ON (omap_obj -> block );
782
817
783
818
refcount_set (& omap_obj -> dma_addr_cnt , 1 );
784
819
785
820
ret = omap_gem_attach_pages (obj );
786
821
if (ret )
787
822
goto fail ;
788
823
789
- if (omap_obj -> flags & OMAP_BO_TILED_MASK ) {
790
- block = tiler_reserve_2d (fmt ,
791
- omap_obj -> width ,
792
- omap_obj -> height , PAGE_SIZE );
793
- } else {
794
- block = tiler_reserve_1d (obj -> size );
795
- }
796
-
797
- if (IS_ERR (block )) {
798
- ret = PTR_ERR (block );
799
- dev_err (obj -> dev -> dev ,
800
- "could not remap: %d (%d)\n" , ret , fmt );
801
- goto fail ;
802
- }
803
-
804
- /* TODO: enable async refill.. */
805
- ret = tiler_pin (block , omap_obj -> pages , npages ,
806
- omap_obj -> roll , true);
807
- if (ret ) {
808
- tiler_release (block );
809
- dev_err (obj -> dev -> dev ,
810
- "could not pin: %d\n" , ret );
824
+ ret = omap_gem_pin_tiler (obj );
825
+ if (ret )
811
826
goto fail ;
812
- }
813
-
814
- omap_obj -> dma_addr = tiler_ssptr (block );
815
- omap_obj -> block = block ;
816
-
817
- DBG ("got dma address: %pad" , & omap_obj -> dma_addr );
818
827
} else {
819
828
refcount_inc (& omap_obj -> dma_addr_cnt );
820
829
}
0 commit comments