@@ -603,42 +603,31 @@ static void mgag200_disable_display(struct mga_device *mdev)
603603 WREG_ECRT (0x01 , crtcext1 );
604604}
605605
606- /*
607- * Connector
608- */
609-
610- static int mgag200_vga_connector_helper_get_modes (struct drm_connector * connector )
606+ static void mgag200_handle_damage (struct mga_device * mdev , const struct iosys_map * vmap ,
607+ struct drm_framebuffer * fb , const struct drm_rect * clip )
611608{
612- struct mga_device * mdev = to_mga_device (connector -> dev );
613- int ret ;
614-
615- /*
616- * Protect access to I/O registers from concurrent modesetting
617- * by acquiring the I/O-register lock.
618- */
619- mutex_lock (& mdev -> rmmio_lock );
620- ret = drm_connector_helper_get_modes_from_ddc (connector );
621- mutex_unlock (& mdev -> rmmio_lock );
609+ void __iomem * dst = mdev -> vram ;
610+ void * vaddr = vmap [0 ].vaddr ; /* TODO: Use mapping abstraction properly */
622611
623- return ret ;
612+ dst += drm_fb_clip_offset (fb -> pitches [0 ], fb -> format , clip );
613+ drm_fb_memcpy_toio (dst , fb -> pitches [0 ], vaddr , fb , clip );
624614}
625615
626- static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
627- .get_modes = mgag200_vga_connector_helper_get_modes ,
628- };
629-
630- static const struct drm_connector_funcs mga_vga_connector_funcs = {
631- .reset = drm_atomic_helper_connector_reset ,
632- .fill_modes = drm_helper_probe_single_connector_modes ,
633- .destroy = drm_connector_cleanup ,
634- .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state ,
635- .atomic_destroy_state = drm_atomic_helper_connector_destroy_state ,
636- };
637-
638616/*
639617 * Simple Display Pipe
640618 */
641619
620+ static const uint32_t mgag200_simple_display_pipe_formats [] = {
621+ DRM_FORMAT_XRGB8888 ,
622+ DRM_FORMAT_RGB565 ,
623+ DRM_FORMAT_RGB888 ,
624+ };
625+
626+ static const uint64_t mgag200_simple_display_pipe_fmtmods [] = {
627+ DRM_FORMAT_MOD_LINEAR ,
628+ DRM_FORMAT_MOD_INVALID
629+ };
630+
642631static enum drm_mode_status
643632mgag200_simple_display_pipe_mode_valid (struct drm_simple_display_pipe * pipe ,
644633 const struct drm_display_mode * mode )
@@ -670,17 +659,6 @@ mgag200_simple_display_pipe_mode_valid(struct drm_simple_display_pipe *pipe,
670659 return MODE_OK ;
671660}
672661
673- static void
674- mgag200_handle_damage (struct mga_device * mdev , struct drm_framebuffer * fb ,
675- struct drm_rect * clip , const struct iosys_map * map )
676- {
677- void __iomem * dst = mdev -> vram ;
678- void * vmap = map -> vaddr ; /* TODO: Use mapping abstraction properly */
679-
680- dst += drm_fb_clip_offset (fb -> pitches [0 ], fb -> format , clip );
681- drm_fb_memcpy_toio (dst , fb -> pitches [0 ], vmap , fb , clip );
682- }
683-
684662static void
685663mgag200_simple_display_pipe_enable (struct drm_simple_display_pipe * pipe ,
686664 struct drm_crtc_state * crtc_state ,
@@ -728,7 +706,7 @@ mgag200_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
728706
729707 mgag200_enable_display (mdev );
730708
731- mgag200_handle_damage (mdev , fb , & fullscreen , & shadow_plane_state -> data [ 0 ] );
709+ mgag200_handle_damage (mdev , shadow_plane_state -> data , fb , & fullscreen );
732710
733711 /* Always scanout image at VRAM offset 0 */
734712 mgag200_set_startadd (mdev , (u32 )0 );
@@ -809,7 +787,7 @@ mgag200_simple_display_pipe_update(struct drm_simple_display_pipe *pipe,
809787
810788 drm_atomic_helper_damage_iter_init (& iter , old_state , state );
811789 drm_atomic_for_each_plane_damage (& iter , & damage ) {
812- mgag200_handle_damage (mdev , fb , & damage , & shadow_plane_state -> data [ 0 ] );
790+ mgag200_handle_damage (mdev , shadow_plane_state -> data , fb , & damage );
813791 }
814792 /* Always scanout image at VRAM offset 0 */
815793 mgag200_set_startadd (mdev , (u32 )0 );
@@ -877,15 +855,36 @@ mgag200_simple_display_pipe_funcs = {
877855 DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS ,
878856};
879857
880- static const uint32_t mgag200_simple_display_pipe_formats [] = {
881- DRM_FORMAT_XRGB8888 ,
882- DRM_FORMAT_RGB565 ,
883- DRM_FORMAT_RGB888 ,
858+ /*
859+ * Connector
860+ */
861+
862+ static int mgag200_vga_connector_helper_get_modes (struct drm_connector * connector )
863+ {
864+ struct mga_device * mdev = to_mga_device (connector -> dev );
865+ int ret ;
866+
867+ /*
868+ * Protect access to I/O registers from concurrent modesetting
869+ * by acquiring the I/O-register lock.
870+ */
871+ mutex_lock (& mdev -> rmmio_lock );
872+ ret = drm_connector_helper_get_modes_from_ddc (connector );
873+ mutex_unlock (& mdev -> rmmio_lock );
874+
875+ return ret ;
876+ }
877+
878+ static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
879+ .get_modes = mgag200_vga_connector_helper_get_modes ,
884880};
885881
886- static const uint64_t mgag200_simple_display_pipe_fmtmods [] = {
887- DRM_FORMAT_MOD_LINEAR ,
888- DRM_FORMAT_MOD_INVALID
882+ static const struct drm_connector_funcs mga_vga_connector_funcs = {
883+ .reset = drm_atomic_helper_connector_reset ,
884+ .fill_modes = drm_helper_probe_single_connector_modes ,
885+ .destroy = drm_connector_cleanup ,
886+ .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state ,
887+ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state ,
889888};
890889
891890/*
0 commit comments