Thomas Zimmermann
fb18825fa0
drm/mgag200: Move G200SE's unique id into model-specific data
...
The unique revision id is only useful for G200SE devices. Store the
value in model-specific data within struct mga_device. While at it,
the patch also adds an init helper for the value.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-8-tzimmermann@suse.de
2020-08-03 09:42:52 +02:00
Thomas Zimmermann
9053cad2f0
drm/mgag200: Clear <page> field during MM init
...
The modesetting code initialized the memory-related register CRTCEXT4.
Move this code to MM initialization.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-7-tzimmermann@suse.de
2020-08-03 09:42:44 +02:00
Thomas Zimmermann
b9fa77ec1a
drm/mgag200: Set MISC memory flags in mm init code
...
The modesetting code initialized several memory-related flags in the
MISC register. Move this code to MM initialization.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-6-tzimmermann@suse.de
2020-08-03 09:42:35 +02:00
Thomas Zimmermann
78e5b5036a
drm/mgag200: Enable MGA mode during device register initialization
...
MGA cards can run in traditional VGA mode or an enhanced MGA mode; with
the latter being required for KMS. So far, MGA mode was enabled during
modesetting. As it's fundamental for device operation, the patch moves
it next to the device register setup.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-5-tzimmermann@suse.de
2020-08-03 09:42:27 +02:00
Thomas Zimmermann
2021708e0d
drm/mgag200: Initialize PCI registers early during device setup
...
So far, PCI option registers were initialized as part of modesetting,
which is late in the process. As these registers control fundamental
operation, they should be set early.
The patch moves the PCI option handling into device register setup,
before even the device MMIO memory is being mapped. No functional
changes made.
Moving the PCI code next to the device-register setup also allows to
remove the has_sdram field from struct mga_device. The state is now
local to the init helper.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-4-tzimmermann@suse.de
2020-08-03 09:42:19 +02:00
Thomas Zimmermann
42452165dc
drm/mgag200: Move register initialization into helper function
...
The mgag200 driver maps registers into the address space. Move the
code into a separate helper function. No functional changes.
One small difference is in the handling of SDRAM/SGRAM. MGA devices
can come with either SDRAM or SGRAM. So far, the driver checked for
SDRAM, which is the common case. The patch moves this code into a
separate helper and checks for SGRAM, which is the special case. The
test itself is the same as before.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-3-tzimmermann@suse.de
2020-08-03 09:42:11 +02:00
Thomas Zimmermann
0b34d58b6c
drm/mgag200: Enable caching for SHMEM pages
...
SHMEM pages use write-combine caching by default, but can also use the
platform's default page caching. Doing so may improve the performance
of I/O on the framebuffer.
Mgag200's hardware does not access framebuffer pages directly (i.e.,
via DMA), so enabling caching does not have an effect on consistency
of the framebuffer memory or the displayed data.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-2-tzimmermann@suse.de
2020-08-03 09:42:03 +02:00
Thomas Zimmermann
895a479039
drm/mgag200: Inline mga_crtc_{prepare, commit}() into enable function
...
There's only trivial code left in mga_crtc_{prepare,commit}(). Merge the
functions into the simple pipe's enable function.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-8-tzimmermann@suse.de
2020-07-14 09:14:06 +02:00
Thomas Zimmermann
904347fb5a
drm/mgag200: Rename G200WB prepare/commit function
...
The prepare and commit helpers for G200WB devices control the BMC.
Rename them accordingly. While at it, also change the passed value's
type to struct mga_device and remove some type upcasting.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-7-tzimmermann@suse.de
2020-07-14 09:14:06 +02:00
Thomas Zimmermann
70c3881eed
drm/mgag200: Set/clear <syncrst> field in display enable/disable helpers
...
Modifying the <syncrst> field in mgag200_{enable,disable}_display()
makes the code more readable. Also clear the <asyncrst> field to enable
the display. The other bits in SEQ0 are unused, so no functional changes
are made.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-6-tzimmermann@suse.de
2020-07-14 09:14:06 +02:00
Thomas Zimmermann
153fef4115
drm/mgag200: Split DPMS function into helpers
...
Of the DPMS code, only ON and OFF states are used. Simplify mode setting
by moving both into separate functions and removing the rest.
The original code busy waited in the middle of updating the screen state
in SEQ1. To simplify the procedure, the new code busy waits first and then
updates SEQ1 in one chunk.
The DPMS code also set the LUT before enabling the screen. The patch moves
this code into the simple-display pipe's enable function.
v2:
* comment on SEQ1 updates in commit message
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-5-tzimmermann@suse.de
2020-07-14 09:13:40 +02:00
Thomas Zimmermann
379ba8043d
drm/mgag200: Don't set or clear <scroff> field during modeset
...
The simple pipe's disable function disables the screen by calling
mgag200_disable_screen(). The simple pipe's enable function enables the
screen by calling mgag200_enable_display().
During modeset operations the screen is off and remains off. It's only
enabled after the modeset has been completed. Therefore remove all code
that sets or clears the <scroff> field while in modeset.
The related code also modifies the <syncrst> field in SEQ0. For now, keep
this code in place.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-4-tzimmermann@suse.de
2020-07-14 09:06:30 +02:00
Thomas Zimmermann
fc42e89fe5
drm/mgag200: Move PLL setup out of mode-setting function
...
Makes the code slightly more flexible. No functional changes.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-3-tzimmermann@suse.de
2020-07-14 09:06:27 +02:00
Thomas Zimmermann
da568d5e35
drm/mgag200: Don't write-protect CRTC 0-7 while in mga_crtc_prepare()
...
The prepare function write-protects several registers that it doesn't
even touch. Removed the related code.
The code for unprotecting registers also clears VINT interrupts. Both
is now done once during initialization.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Lyude Paul <lyude@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-2-tzimmermann@suse.de
2020-07-14 09:06:14 +02:00
Thomas Zimmermann
fb7ba0c7cf
drm/mgag200: Use managed device initialization
...
The mgag200 driver now uses managed functions for DRM devices. The
individual helpers for modesetting and memory managed are already
covered, so only device allocation and initialization is left for
conversion.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-15-tzimmermann@suse.de
2020-06-11 10:06:14 +02:00
Thomas Zimmermann
832eddf5d8
drm/mgag200: Embed instance of struct drm_device in struct mga_device
...
Following current best practice, the instance of struct drm_device is now
embedded in struct mga_device. The respective field has been renamed from
'dev' to 'base' to reflect the relationship. Conversion from DRM device is
done via upcast. Using dev_private is no longer possible.
The patch also open-codes drm_dev_alloc() and DRM device initialization
is now performed by a call to drm_device_init().
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-14-tzimmermann@suse.de
2020-06-11 10:06:10 +02:00
Thomas Zimmermann
3c8923c3f1
drm/mgag200: Allocate device structures in mgag200_driver_load()
...
Instances of struct drm_device and struct mga_device are now allocated
next to each other in mgag200_driver_load(). Yet another preparation
before embedding the DRM device instance in struct mga_device.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-13-tzimmermann@suse.de
2020-06-11 10:06:07 +02:00
Thomas Zimmermann
c714dd941d
drm/mgag200: Separate device initialization into allocation
...
Embedding the DRM device instance in struct mga_device will require
changes to device allocation. Moving the device initialization into
its own functions gets it out of the way.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-12-tzimmermann@suse.de
2020-06-11 10:06:03 +02:00
Thomas Zimmermann
ba5b90e883
drm/mgag200: Move device init and cleanup to mgag200_drv.c
...
Moving the initializer and cleanup functions for device instances
to mgag200_drv.c prepares for the conversion to managed code. No
functional changes are made. Remove mgag200_main.c, which is now
empty.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-11-tzimmermann@suse.de
2020-06-11 10:06:00 +02:00
Thomas Zimmermann
fdcb6b1906
drm/mgag200: Prefix symbol names in mgag200_drv.c with mgag200_
...
The naming of symbols in mgag200_drv.c is inconsistent. Fix that by
prefixing all names with mgag200_.
v2:
* clarify commit message
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-10-tzimmermann@suse.de
2020-06-11 10:05:54 +02:00
Thomas Zimmermann
0987062118
drm/mgag200: Separate DRM and PCI functionality from each other
...
Moving the DRM driver structures from the middle of the PCI code to
the top of the file makes it more readable. Also remove an obsolete
comment.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-9-tzimmermann@suse.de
2020-06-11 10:05:50 +02:00
Thomas Zimmermann
a71ff21e11
drm/mgag200: Switch to managed MM
...
The memory-management code now cleans up automatically as part of
device destruction.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-8-tzimmermann@suse.de
2020-06-11 10:05:47 +02:00
Thomas Zimmermann
e9f896b76c
drm/mgag200: Merge VRAM setup into MM initialization
...
The VRAM setup in mgag200_drv.c is part of memory management and
should be done in the same place. Merge the code into the memory
management's init function.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-7-tzimmermann@suse.de
2020-06-11 10:05:44 +02:00
Thomas Zimmermann
0956c329a4
drm/mgag200: Lookup VRAM PCI BAR start and length only once
...
The MM setup code on mgag200 reads PCI BAR 0's start and length
several times. Reusing these values makes the code more readable.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-6-tzimmermann@suse.de
2020-06-11 10:05:41 +02:00
Thomas Zimmermann
e7b9db6a14
drm/mgag200: Rename mgag200_ttm.c to mgag200_mm.c
...
The mgag200 driver does not use TTM any longer. Rename the related file
to mgag200_mm.c (as in 'memory management').
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-5-tzimmermann@suse.de
2020-06-11 10:05:38 +02:00
Thomas Zimmermann
044e093555
drm/mgag200: Use pcim_enable_device()
...
Using the managed function simplifies the error handling. After
unloading the driver, the PCI device should now get disabled as
well.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-4-tzimmermann@suse.de
2020-06-11 10:05:34 +02:00
Thomas Zimmermann
91c4dc5787
drm/mgag200: Remove mgag200_cursor.c
...
Support for HW cursors got remove by commit 5a77e2bfdd ("drm/mgag200:
Remove HW cursor") Apparently the source file was not deleted. Removed
it now.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Fixes: 5a77e2bfdd ("drm/mgag200: Remove HW cursor")
Cc: Sam Ravnborg <sam@ravnborg.org >
Cc: Emil Velikov <emil.velikov@collabora.com >
Cc: Dave Airlie <airlied@redhat.com >
Cc: "Noralf Trønnes" <noralf@tronnes.org >
Cc: Gerd Hoffmann <kraxel@redhat.com >
Cc: Daniel Vetter <daniel.vetter@ffwll.ch >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: Kate Stewart <kstewart@linuxfoundation.org >
Cc: Allison Randal <allison@lohutok.net >
Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com >
Cc: "José Roberto de Souza" <jose.souza@intel.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-3-tzimmermann@suse.de
2020-06-11 10:05:30 +02:00
Thomas Zimmermann
1d8d42ba36
drm/mgag200: Remove declaration of mgag200_mmap() from header file
...
Commit 94668ac796 ("drm/mgag200: Convert mgag200 driver to VRAM MM")
removed the implementation of mgag200_mmap(). Also remove the declaration.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Fixes: 94668ac796 ("drm/mgag200: Convert mgag200 driver to VRAM MM")
Cc: Gerd Hoffmann <kraxel@redhat.com >
Cc: Dave Airlie <airlied@redhat.com >
Cc: Krzysztof Kozlowski <krzk@kernel.org >
Cc: Daniel Vetter <daniel.vetter@ffwll.ch >
Cc: Sam Ravnborg <sam@ravnborg.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Thomas Gleixner <tglx@linutronix.de >
Cc: "Noralf Trønnes" <noralf@tronnes.org >
Cc: Armijn Hemel <armijn@tjaldur.nl >
Cc: Alex Deucher <alexander.deucher@amd.com >
Cc: Emil Velikov <emil.velikov@collabora.com >
Cc: <stable@vger.kernel.org > # v5.3+
Link: https://patchwork.freedesktop.org/patch/msgid/20200605135803.19811-2-tzimmermann@suse.de
2020-06-11 10:05:09 +02:00
Emil Velikov
c457b11aff
drm/mgag200: remove _unlocked suffix in drm_gem_object_put_unlocked
...
Spelling out _unlocked for each and every driver is a annoying.
Especially if we consider how many drivers, do not know (or need to)
about the horror stories involving struct_mutex.
Just drop the suffix. It makes the API cleaner.
Done via the following script:
__from=drm_gem_object_put_unlocked
__to=drm_gem_object_put
for __file in $(git grep --name-only $__from); do
sed -i "s/$__from/$__to/g" $__file;
done
Cc: Dave Airlie <airlied@redhat.com >
Cc: David Airlie <airlied@linux.ie >
Cc: Daniel Vetter <daniel@ffwll.ch >
Signed-off-by: Emil Velikov <emil.velikov@collabora.com >
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515095118.2743122-24-emil.l.velikov@gmail.com
2020-05-19 22:31:33 +01:00
Thomas Zimmermann
913ec479bb
drm/mgag200: Replace VRAM helpers with SHMEM helpers
...
The VRAM helpers managed the framebuffer memory for mgag200. This came
with several problems, as some MGA device require the scanout address
to be located at VRAM offset 0. It's incompatible with the page-flip
semantics of DRM's atomic modesettting. With atomic modesetting, old and
new framebuffers have to be located in VRAM at the same time. So at least
one of them has to reside at a non-0 offset.
This patch replaces VRAM helpers with SHMEM helpers. GEM SHMEM buffers
reside in system memory, and are shadow-copied into VRAM during page
flips. The shadow copy always starts at VRAM offset 0.
v2:
* revert dev->pdev changes
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-16-tzimmermann@suse.de
2020-05-19 09:41:34 +02:00
Thomas Zimmermann
88fabb75ea
drm/mgag200: Convert to simple KMS helper
...
The mgag200 supports a single pipeline with only a primary plane. It can
be converted to simple KMS helpers. This also adds support for atomic
modesetting. Wayland compositors, which use pageflip ioctls, can now be
used with mgag200.
v2:
* prepare encoder and CRTC in a separate patch
* remove suspend/resume code in a separate patch
* don't call set_format_regs() in pipe_update()
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-15-tzimmermann@suse.de
2020-05-19 09:41:34 +02:00
Thomas Zimmermann
f05c9e1309
drm/mgag200: Use simple-display data structures
...
The MGA CRTC data structure struct mga_crtc contains unused additional
fields; so it can removed. The standard DRM CRTC and encoder structures
are embedded now in struct drm_simple_display_pipe. Done in preparation
of converting mgag200 to simple KMS helpers.
v3:
* remove now-unused define MGAG200FB_CONN_LIMIT
* remove unused define MATROX_DPMS_CLEARED
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-14-tzimmermann@suse.de
2020-05-19 09:41:34 +02:00
Thomas Zimmermann
9413adc089
drm/mgag200: Remove out-commented suspend/resume helpers
...
The suspend/resume helpers are unused. Also remove associated state
from struct mga_device.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-13-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
4f710d7ce8
drm/mgag200: Move register initialization into separate function
...
Registers are initialized with constants. This is now done in
mgag200_init_regs(), mgag200_set_dac_regs() and mgag200_set_pci_regs().
Later patches should move these calls from mode setting to device
initialization.
v2:
* replace uint8_t with u8
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-12-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
7fc1ae567d
drm/mgag200: Move hiprilvl setting into separate functions
...
The hiprivlvl settings are now updated in mgag200_g200se_set_hiprilvl()
and mgag200_g200ev_set_hiprilvl().
v2:
* replace uint8_t with u8
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-11-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
2e5ccbbaea
drm/mgag200: Move TAGFIFO reset into separate function
...
The TAGFIFO state is now reset in mgag200_g200er_reset_tagfifo().
v2:
* define MGAREG_SEQ1_SCROFF
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-10-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
836d536881
drm/mgag200: Set primary plane's format in separate helper function
...
The primary plane's format registers are now updated in a
mgag200_set_format_regs().
v2:
* get bpp shift from helper function
* replace uint8_t with u8
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-9-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
72a03a358c
drm/mgag200: Set pitch in a separate helper function
...
The framebuffer's pitch is now set in mgag200_set_offset().
v2:
* move offset and bpp-shift calculation into helper functions
* use u8 instead of uint8_t
* add MGAREG_CRTCEXT0_OFFSET_MASK
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-8-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
ddb8d0520b
drm/mgag200: Update mode registers after plane registers
...
Setting the plane registers first and the mode registers afterwards
reproduces the sequence used by atomic helpers. Done in preparation
of switching to simple KMS helpers.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-7-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
db05f8d3dc
drm/mgag200: Split MISC register update into PLL selection, SYNC and I/O
...
Set different fields in MISC in their rsp location in the code. This
patch also fixes a bug in the original code where the mode's SYNC flags
were never written into the MISC register.
v2:
* use u8 instead of uint8_t
* define MGAREG_MISC_CLK_SEL_MASK
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-6-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
a6edae07fd
drm/mgag200: Move mode-setting code into separate helper function
...
The mode-setting code is now located in mgag200_set_mode_regs(), sans
a few flags that will be moved in a later patch for clarity.
v2:
* replace uint8_t with u8
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-5-tzimmermann@suse.de
2020-05-19 09:41:33 +02:00
Thomas Zimmermann
fb724f1e4b
drm/mgag200: Clean up mga_crtc_do_set_base()
...
The function now only takes the device structure, and the old and new
framebuffers.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-4-tzimmermann@suse.de
2020-05-19 09:41:32 +02:00
Thomas Zimmermann
d6237687e0
drm/mgag200: Clean up mga_set_start_address()
...
All register names and fields are now named according to the
MGA programming manuals. The function doesn't need the CRTC, so
callers pass in the device structure directly. The logging now
uses device-specific macros.
The original implementation busy-waited for the VSYNC flag to go
up, to synchronize the page flip with the display's vblank. This
code has been moved to mga_crtc_mode_set_base(). It's still present
in the non-atomic code paths, but won't be used in atomic commits.
With atomic, we should use interrupts to synchronize with vblanks.
v3:
* clarify commit message wrt. vblank busy-waiting
v2:
* use to_mga_device()
* use MiB instead of MB
* replace empty while loop with do-while, fixes checkpatch warning
* replace uint{8,32}_t with u{8,32}
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-3-tzimmermann@suse.de
2020-05-19 09:41:32 +02:00
Thomas Zimmermann
5a77e2bfdd
drm/mgag200: Remove HW cursor
...
The HW cursor of Matrox G200 cards only supports a 16-color palette
format. Univeral planes require at least ARGB or a similar component-
based format, so remove the HW cursor.
Alternatively, the driver could dither a cursor image from ARGB to
16 colors. But this does not produce pleasent-looking results in
general, so it's useless for modern compositors.
Without HW support, compositors will use software rendering.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Acked-by: Emil Velikov <emil.velikov@collabora.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200515083233.32036-2-tzimmermann@suse.de
2020-05-19 09:41:32 +02:00
Thomas Zimmermann
81a15b9a65
drm/mgag200: Embed connector instance in struct mga_device
...
Storing the connector instance in struct mga_device avoids some
dynamic memory allocation. On errors, the connector's initializer
function now destroys the i2c structure. Done in preparation of
converting mgag200 to simple-KMS helpers.
v2:
* improved commit message (Michael)
* fixed error message for mgag200_vga_connector_init() (Sam)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-7-tzimmermann@suse.de
2020-05-11 16:40:44 +02:00
Thomas Zimmermann
30b0c940f9
drm/mgag200: Remove unused fields from struct mga_device
...
The fields mode_info, num_crtcs and mode in struct mga_device serve
no purpose. Remove them.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-6-tzimmermann@suse.de
2020-05-11 16:40:35 +02:00
Thomas Zimmermann
5635b7cf86
drm/mgag200: Use managed mode-config initialization
...
Mode configuration is now cleanued up automatically. While at it,
move all mode-config code into mgag200_mode.c. Done in preparation
of switching mgag200 to simple-KMS helpers.
v2:
* improve commit message (Sam)
* rebased during cherry pick
* also move bpp_shift initialization
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Tested-by: John Donnelly <John.p.donnelly@oracle.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-5-tzimmermann@suse.de
2020-05-11 16:40:17 +02:00
Thomas Zimmermann
0858083781
drm/mgag200: Integrate init function into load function
...
Done to simplify initialization code before embedding the DRM device
instance in struct mga_device.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Acked-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-4-tzimmermann@suse.de
2020-05-11 16:40:03 +02:00
Thomas Zimmermann
ed5877b62e
drm/mgag200: Remove several references to struct mga_device.dev
...
Done in preparation of embedding the DRM device in struct mga_device.
This patch makes the patch for embedding more readable.
v2:
* improved commit message (Daniel)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Reviewed-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-3-tzimmermann@suse.de
2020-05-11 16:39:54 +02:00
Thomas Zimmermann
8d8ff2a957
drm/mgag200: Convert struct drm_device to struct mga_device with helper
...
Mgag200 uses dev_private to look up struct mga_device for instances
of struct drm_device. Use of dev_private is deprecated, so hide it in
the helper function to_mga_device().
v2:
* make to_mga_device() a function (Sam)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Reviewed-by: Sam Ravnborg <sam@ravnborg.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20200507090315.21274-2-tzimmermann@suse.de
2020-05-11 16:39:45 +02:00