mbox series

[v2,00/15] drm/mgag200: Convert to atomic modesetting

Message ID 20200512084258.12673-1-tzimmermann@suse.de (mailing list archive)
Headers show
Series drm/mgag200: Convert to atomic modesetting | expand

Message

Thomas Zimmermann May 12, 2020, 8:42 a.m. UTC
This patchset converts mgag200 to atomic modesetting. It uses simple
KMS helpers and SHMEM.

Patch 1 removes cursor support. The HW cursor is not usable with the
way universal planes work.

Patches 2 to 11 untangle the existing modesetting code into smaller
functions. Specifically, mode setting and plane updates are being
separated from each other.

Patch 12 to 14 convert mgag200 to simple KMS helpers and enables atomic
mode setting.

Atomically switching plane framebuffers, requires either source or target
buffer to be located at a non-0 offet. As some HW revisions seem to require
a framebuffer offset of 0 within the video memory, they do not work with
atomic modesetting. To resolve this problem, patch 15 converts mgag200
from VRAM helpers to SHMEM helpers. During plane updates, the content of
the SHMEM BO is memcpy'd to VRAM. From my observation, performance is not
nuch different from the original code.

The patchset has been tested on MGA G200EH hardware.

v2:
	* rebase patchset
	* replace uint{8,32}_t with u{8,32} through-out patchset
	* define additional register constants
	* use helper functions around bpp-shift computations
	* split conversion patch
	* cleanups

Thomas Zimmermann (15):
  drm/mgag200: Remove HW cursor
  drm/mgag200: Clean up mga_set_start_address()
  drm/mgag200: Clean up mga_crtc_do_set_base()
  drm/mgag200: Move mode-setting code into separate helper function
  drm/mgag200: Split MISC register update into PLL selection, SYNC and
    I/O
  drm/mgag200: Update mode registers after plane registers
  drm/mgag200: Set pitch in a separate helper function
  drm/mgag200: Set primary plane's format in separate helper function
  drm/mgag200: Move TAGFIFO reset into separate function
  drm/mgag200: Move hiprilvl setting into separate functions
  drm/mgag200: Move register initialization into separate function
  drm/mgag200: Remove out-commented suspend/resume helpers
  drm/mgag200: Use simple-display data structures
  drm/mgag200: Convert to simple KMS helper
  drm/mgag200: Replace VRAM helpers with SHMEM helpers

 drivers/gpu/drm/mgag200/Kconfig        |   4 +-
 drivers/gpu/drm/mgag200/Makefile       |   2 +-
 drivers/gpu/drm/mgag200/mgag200_drv.c  |  51 +-
 drivers/gpu/drm/mgag200/mgag200_drv.h  |  41 +-
 drivers/gpu/drm/mgag200/mgag200_main.c |   5 -
 drivers/gpu/drm/mgag200/mgag200_mode.c | 871 ++++++++++++++-----------
 drivers/gpu/drm/mgag200/mgag200_reg.h  |  11 +-
 drivers/gpu/drm/mgag200/mgag200_ttm.c  |  28 +-
 8 files changed, 528 insertions(+), 485 deletions(-)

--
2.26.2

Comments

Sam Ravnborg May 12, 2020, 6:56 p.m. UTC | #1
Hi Thomas.

On Tue, May 12, 2020 at 10:42:43AM +0200, Thomas Zimmermann wrote:
> This patchset converts mgag200 to atomic modesetting. It uses simple
> KMS helpers and SHMEM.
> 
> Patch 1 removes cursor support. The HW cursor is not usable with the
> way universal planes work.
> 
> Patches 2 to 11 untangle the existing modesetting code into smaller
> functions. Specifically, mode setting and plane updates are being
> separated from each other.
> 
> Patch 12 to 14 convert mgag200 to simple KMS helpers and enables atomic
> mode setting.
> 
> Atomically switching plane framebuffers, requires either source or target
> buffer to be located at a non-0 offet. As some HW revisions seem to require
> a framebuffer offset of 0 within the video memory, they do not work with
> atomic modesetting. To resolve this problem, patch 15 converts mgag200
> from VRAM helpers to SHMEM helpers. During plane updates, the content of
> the SHMEM BO is memcpy'd to VRAM. From my observation, performance is not
> nuch different from the original code.
> 
> The patchset has been tested on MGA G200EH hardware.
> 
> v2:
> 	* rebase patchset
> 	* replace uint{8,32}_t with u{8,32} through-out patchset
> 	* define additional register constants
> 	* use helper functions around bpp-shift computations
> 	* split conversion patch
> 	* cleanups
With the one comment addressed patch 1-14 are now all:
Acked-by: Sam Ravnborg <sam@ravnborg.org>

I did not look at the last patch - all the memory stuff is still beyond
me.

Nice to see this driver gettting so much love and care.
The end result is a much nicer driver implmentation.

	Sam

> 
> Thomas Zimmermann (15):
>   drm/mgag200: Remove HW cursor
>   drm/mgag200: Clean up mga_set_start_address()
>   drm/mgag200: Clean up mga_crtc_do_set_base()
>   drm/mgag200: Move mode-setting code into separate helper function
>   drm/mgag200: Split MISC register update into PLL selection, SYNC and
>     I/O
>   drm/mgag200: Update mode registers after plane registers
>   drm/mgag200: Set pitch in a separate helper function
>   drm/mgag200: Set primary plane's format in separate helper function
>   drm/mgag200: Move TAGFIFO reset into separate function
>   drm/mgag200: Move hiprilvl setting into separate functions
>   drm/mgag200: Move register initialization into separate function
>   drm/mgag200: Remove out-commented suspend/resume helpers
>   drm/mgag200: Use simple-display data structures
>   drm/mgag200: Convert to simple KMS helper
>   drm/mgag200: Replace VRAM helpers with SHMEM helpers
> 
>  drivers/gpu/drm/mgag200/Kconfig        |   4 +-
>  drivers/gpu/drm/mgag200/Makefile       |   2 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.c  |  51 +-
>  drivers/gpu/drm/mgag200/mgag200_drv.h  |  41 +-
>  drivers/gpu/drm/mgag200/mgag200_main.c |   5 -
>  drivers/gpu/drm/mgag200/mgag200_mode.c | 871 ++++++++++++++-----------
>  drivers/gpu/drm/mgag200/mgag200_reg.h  |  11 +-
>  drivers/gpu/drm/mgag200/mgag200_ttm.c  |  28 +-
>  8 files changed, 528 insertions(+), 485 deletions(-)
> 
> --
> 2.26.2
Thomas Zimmermann May 13, 2020, 11:06 a.m. UTC | #2
Hi

Am 12.05.20 um 20:56 schrieb Sam Ravnborg:
> Hi Thomas.
> 
> On Tue, May 12, 2020 at 10:42:43AM +0200, Thomas Zimmermann wrote:
>> This patchset converts mgag200 to atomic modesetting. It uses simple
>> KMS helpers and SHMEM.
>>
>> Patch 1 removes cursor support. The HW cursor is not usable with the
>> way universal planes work.
>>
>> Patches 2 to 11 untangle the existing modesetting code into smaller
>> functions. Specifically, mode setting and plane updates are being
>> separated from each other.
>>
>> Patch 12 to 14 convert mgag200 to simple KMS helpers and enables atomic
>> mode setting.
>>
>> Atomically switching plane framebuffers, requires either source or target
>> buffer to be located at a non-0 offet. As some HW revisions seem to require
>> a framebuffer offset of 0 within the video memory, they do not work with
>> atomic modesetting. To resolve this problem, patch 15 converts mgag200
>> from VRAM helpers to SHMEM helpers. During plane updates, the content of
>> the SHMEM BO is memcpy'd to VRAM. From my observation, performance is not
>> nuch different from the original code.
>>
>> The patchset has been tested on MGA G200EH hardware.
>>
>> v2:
>> 	* rebase patchset
>> 	* replace uint{8,32}_t with u{8,32} through-out patchset
>> 	* define additional register constants
>> 	* use helper functions around bpp-shift computations
>> 	* split conversion patch
>> 	* cleanups
> With the one comment addressed patch 1-14 are now all:
> Acked-by: Sam Ravnborg <sam@ravnborg.org>

Sure, I'll add that comment. Thanks for the timely reviews.

Best regards
Thomas

> 
> I did not look at the last patch - all the memory stuff is still beyond
> me.
> 
> Nice to see this driver gettting so much love and care.
> The end result is a much nicer driver implmentation.
> 
> 	Sam
> 
>>
>> Thomas Zimmermann (15):
>>   drm/mgag200: Remove HW cursor
>>   drm/mgag200: Clean up mga_set_start_address()
>>   drm/mgag200: Clean up mga_crtc_do_set_base()
>>   drm/mgag200: Move mode-setting code into separate helper function
>>   drm/mgag200: Split MISC register update into PLL selection, SYNC and
>>     I/O
>>   drm/mgag200: Update mode registers after plane registers
>>   drm/mgag200: Set pitch in a separate helper function
>>   drm/mgag200: Set primary plane's format in separate helper function
>>   drm/mgag200: Move TAGFIFO reset into separate function
>>   drm/mgag200: Move hiprilvl setting into separate functions
>>   drm/mgag200: Move register initialization into separate function
>>   drm/mgag200: Remove out-commented suspend/resume helpers
>>   drm/mgag200: Use simple-display data structures
>>   drm/mgag200: Convert to simple KMS helper
>>   drm/mgag200: Replace VRAM helpers with SHMEM helpers
>>
>>  drivers/gpu/drm/mgag200/Kconfig        |   4 +-
>>  drivers/gpu/drm/mgag200/Makefile       |   2 +-
>>  drivers/gpu/drm/mgag200/mgag200_drv.c  |  51 +-
>>  drivers/gpu/drm/mgag200/mgag200_drv.h  |  41 +-
>>  drivers/gpu/drm/mgag200/mgag200_main.c |   5 -
>>  drivers/gpu/drm/mgag200/mgag200_mode.c | 871 ++++++++++++++-----------
>>  drivers/gpu/drm/mgag200/mgag200_reg.h  |  11 +-
>>  drivers/gpu/drm/mgag200/mgag200_ttm.c  |  28 +-
>>  8 files changed, 528 insertions(+), 485 deletions(-)
>>
>> --
>> 2.26.2