99#include <linux/component.h>
1010#include <linux/clk.h>
1111#include <linux/dma-mapping.h>
12- #include <linux/dma-noncoherent.h>
13- #include <linux/io.h>
1412#include <linux/module.h>
1513#include <linux/of_device.h>
1614#include <linux/platform_device.h>
2119#include <drm/drm_bridge.h>
2220#include <drm/drm_crtc.h>
2321#include <drm/drm_crtc_helper.h>
24- #include <drm/drm_damage_helper.h>
2522#include <drm/drm_drv.h>
2623#include <drm/drm_gem_cma_helper.h>
2724#include <drm/drm_fb_cma_helper.h>
@@ -79,11 +76,6 @@ static const u32 ingenic_drm_primary_formats[] = {
7976 DRM_FORMAT_XRGB8888 ,
8077};
8178
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-
8779static bool ingenic_drm_writeable_reg (struct device * dev , unsigned int reg )
8880{
8981 switch (reg ) {
@@ -346,8 +338,6 @@ static int ingenic_drm_plane_atomic_check(struct drm_plane *plane,
346338 plane -> state -> fb -> format -> format != state -> fb -> format -> format ))
347339 crtc_state -> mode_changed = true;
348340
349- drm_atomic_helper_check_plane_damage (state -> state , state );
350-
351341 return 0 ;
352342}
353343
@@ -450,38 +440,6 @@ void ingenic_drm_plane_config(struct device *dev,
450440 }
451441}
452442
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-
485443static void ingenic_drm_plane_atomic_update (struct drm_plane * plane ,
486444 struct drm_plane_state * oldstate )
487445{
@@ -492,8 +450,6 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
492450 dma_addr_t addr ;
493451
494452 if (state && state -> fb ) {
495- ingenic_drm_sync_data (priv -> dev , oldstate , state );
496-
497453 addr = drm_fb_cma_get_gem_addr (state -> fb , state , 0 );
498454 width = state -> src_w >> 16 ;
499455 height = state -> src_h >> 16 ;
@@ -649,69 +605,7 @@ static void ingenic_drm_disable_vblank(struct drm_crtc *crtc)
649605 regmap_update_bits (priv -> map , JZ_REG_LCD_CTRL , JZ_LCD_CTRL_EOF_IRQ , 0 );
650606}
651607
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 );
715609
716610static struct drm_driver ingenic_drm_driver_data = {
717611 .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC ,
@@ -775,7 +669,7 @@ static const struct drm_encoder_helper_funcs ingenic_drm_encoder_helper_funcs =
775669};
776670
777671static 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 ,
779673 .output_poll_changed = drm_fb_helper_output_poll_changed ,
780674 .atomic_check = drm_atomic_helper_check ,
781675 .atomic_commit = drm_atomic_helper_commit ,
@@ -902,8 +796,6 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
902796 return ret ;
903797 }
904798
905- drm_plane_enable_fb_damage_clips (& priv -> f1 );
906-
907799 drm_crtc_helper_add (& priv -> crtc , & ingenic_drm_crtc_helper_funcs );
908800
909801 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)
929821 return ret ;
930822 }
931823
932- drm_plane_enable_fb_damage_clips (& priv -> f0 );
933-
934824 if (IS_ENABLED (CONFIG_DRM_INGENIC_IPU ) && has_components ) {
935825 ret = component_bind_all (dev , drm );
936826 if (ret ) {
0 commit comments