9
9
#include <linux/component.h>
10
10
#include <linux/clk.h>
11
11
#include <linux/dma-mapping.h>
12
- #include <linux/dma-noncoherent.h>
13
- #include <linux/io.h>
14
12
#include <linux/module.h>
15
13
#include <linux/of_device.h>
16
14
#include <linux/platform_device.h>
21
19
#include <drm/drm_bridge.h>
22
20
#include <drm/drm_crtc.h>
23
21
#include <drm/drm_crtc_helper.h>
24
- #include <drm/drm_damage_helper.h>
25
22
#include <drm/drm_drv.h>
26
23
#include <drm/drm_gem_cma_helper.h>
27
24
#include <drm/drm_fb_cma_helper.h>
@@ -79,11 +76,6 @@ static const u32 ingenic_drm_primary_formats[] = {
79
76
DRM_FORMAT_XRGB8888 ,
80
77
};
81
78
82
- static bool ingenic_drm_cached_gem_buf ;
83
- module_param_named (cached_gem_buffers , ingenic_drm_cached_gem_buf , bool , 0400 );
84
- MODULE_PARM_DESC (cached_gem_buffers ,
85
- "Enable fully cached GEM buffers [default=false]" );
86
-
87
79
static bool ingenic_drm_writeable_reg (struct device * dev , unsigned int reg )
88
80
{
89
81
switch (reg ) {
@@ -346,8 +338,6 @@ static int ingenic_drm_plane_atomic_check(struct drm_plane *plane,
346
338
plane -> state -> fb -> format -> format != state -> fb -> format -> format ))
347
339
crtc_state -> mode_changed = true;
348
340
349
- drm_atomic_helper_check_plane_damage (state -> state , state );
350
-
351
341
return 0 ;
352
342
}
353
343
@@ -450,38 +440,6 @@ void ingenic_drm_plane_config(struct device *dev,
450
440
}
451
441
}
452
442
453
- void ingenic_drm_sync_data (struct device * dev ,
454
- struct drm_plane_state * old_state ,
455
- struct drm_plane_state * state )
456
- {
457
- const struct drm_format_info * finfo = state -> fb -> format ;
458
- struct ingenic_drm * priv = dev_get_drvdata (dev );
459
- struct drm_atomic_helper_damage_iter iter ;
460
- unsigned int offset , i ;
461
- struct drm_rect clip ;
462
- dma_addr_t paddr ;
463
- void * addr ;
464
-
465
- if (!ingenic_drm_cached_gem_buf )
466
- return ;
467
-
468
- drm_atomic_helper_damage_iter_init (& iter , old_state , state );
469
-
470
- drm_atomic_for_each_plane_damage (& iter , & clip ) {
471
- for (i = 0 ; i < finfo -> num_planes ; i ++ ) {
472
- paddr = drm_fb_cma_get_gem_addr (state -> fb , state , i );
473
- addr = phys_to_virt (paddr );
474
-
475
- /* Ignore x1/x2 values, invalidate complete lines */
476
- offset = clip .y1 * state -> fb -> pitches [i ];
477
-
478
- dma_cache_sync (priv -> dev , addr + offset ,
479
- (clip .y2 - clip .y1 ) * state -> fb -> pitches [i ],
480
- DMA_TO_DEVICE );
481
- }
482
- }
483
- }
484
-
485
443
static void ingenic_drm_plane_atomic_update (struct drm_plane * plane ,
486
444
struct drm_plane_state * oldstate )
487
445
{
@@ -492,8 +450,6 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
492
450
dma_addr_t addr ;
493
451
494
452
if (state && state -> fb ) {
495
- ingenic_drm_sync_data (priv -> dev , oldstate , state );
496
-
497
453
addr = drm_fb_cma_get_gem_addr (state -> fb , state , 0 );
498
454
width = state -> src_w >> 16 ;
499
455
height = state -> src_h >> 16 ;
@@ -649,69 +605,7 @@ static void ingenic_drm_disable_vblank(struct drm_crtc *crtc)
649
605
regmap_update_bits (priv -> map , JZ_REG_LCD_CTRL , JZ_LCD_CTRL_EOF_IRQ , 0 );
650
606
}
651
607
652
- static struct drm_framebuffer *
653
- ingenic_drm_gem_fb_create (struct drm_device * dev , struct drm_file * file ,
654
- const struct drm_mode_fb_cmd2 * mode_cmd )
655
- {
656
- if (ingenic_drm_cached_gem_buf )
657
- return drm_gem_fb_create_with_dirty (dev , file , mode_cmd );
658
-
659
- return drm_gem_fb_create (dev , file , mode_cmd );
660
- }
661
-
662
- static int ingenic_drm_gem_mmap (struct drm_gem_object * obj ,
663
- struct vm_area_struct * vma )
664
- {
665
- struct drm_gem_cma_object * cma_obj = to_drm_gem_cma_obj (obj );
666
- struct device * dev = cma_obj -> base .dev -> dev ;
667
- unsigned long attrs ;
668
- int ret ;
669
-
670
- if (ingenic_drm_cached_gem_buf )
671
- attrs = DMA_ATTR_NON_CONSISTENT ;
672
- else
673
- attrs = DMA_ATTR_WRITE_COMBINE ;
674
-
675
- /*
676
- * Clear the VM_PFNMAP flag that was set by drm_gem_mmap(), and set the
677
- * vm_pgoff (used as a fake buffer offset by DRM) to 0 as we want to map
678
- * the whole buffer.
679
- */
680
- vma -> vm_flags &= ~VM_PFNMAP ;
681
- vma -> vm_pgoff = 0 ;
682
- vma -> vm_page_prot = vm_get_page_prot (vma -> vm_flags );
683
-
684
- ret = dma_mmap_attrs (dev , vma , cma_obj -> vaddr , cma_obj -> paddr ,
685
- vma -> vm_end - vma -> vm_start , attrs );
686
- if (ret )
687
- drm_gem_vm_close (vma );
688
-
689
- return ret ;
690
- }
691
-
692
- static int ingenic_drm_gem_cma_mmap (struct file * filp ,
693
- struct vm_area_struct * vma )
694
- {
695
- int ret ;
696
-
697
- ret = drm_gem_mmap (filp , vma );
698
- if (ret )
699
- return ret ;
700
-
701
- return ingenic_drm_gem_mmap (vma -> vm_private_data , vma );
702
- }
703
-
704
- static const struct file_operations ingenic_drm_fops = {
705
- .owner = THIS_MODULE ,
706
- .open = drm_open ,
707
- .release = drm_release ,
708
- .unlocked_ioctl = drm_ioctl ,
709
- .compat_ioctl = drm_compat_ioctl ,
710
- .poll = drm_poll ,
711
- .read = drm_read ,
712
- .llseek = noop_llseek ,
713
- .mmap = ingenic_drm_gem_cma_mmap ,
714
- };
608
+ DEFINE_DRM_GEM_CMA_FOPS (ingenic_drm_fops );
715
609
716
610
static struct drm_driver ingenic_drm_driver_data = {
717
611
.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC ,
@@ -775,7 +669,7 @@ static const struct drm_encoder_helper_funcs ingenic_drm_encoder_helper_funcs =
775
669
};
776
670
777
671
static const struct drm_mode_config_funcs ingenic_drm_mode_config_funcs = {
778
- .fb_create = ingenic_drm_gem_fb_create ,
672
+ .fb_create = drm_gem_fb_create ,
779
673
.output_poll_changed = drm_fb_helper_output_poll_changed ,
780
674
.atomic_check = drm_atomic_helper_check ,
781
675
.atomic_commit = drm_atomic_helper_commit ,
@@ -902,8 +796,6 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
902
796
return ret ;
903
797
}
904
798
905
- drm_plane_enable_fb_damage_clips (& priv -> f1 );
906
-
907
799
drm_crtc_helper_add (& priv -> crtc , & ingenic_drm_crtc_helper_funcs );
908
800
909
801
ret = drm_crtc_init_with_planes (drm , & priv -> crtc , & priv -> f1 ,
@@ -929,8 +821,6 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
929
821
return ret ;
930
822
}
931
823
932
- drm_plane_enable_fb_damage_clips (& priv -> f0 );
933
-
934
824
if (IS_ENABLED (CONFIG_DRM_INGENIC_IPU ) && has_components ) {
935
825
ret = component_bind_all (dev , drm );
936
826
if (ret ) {
0 commit comments