All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Donnelly <john.p.donnelly@oracle.com>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: airlied@redhat.com, dri-devel@lists.freedesktop.org,
	sam@ravnborg.org, kraxel@redhat.com
Subject: Re: [PATCH 3/4] drm/mgag200: Add workaround for HW that does not support 'startadd'
Date: Tue, 3 Dec 2019 11:55:35 -0600	[thread overview]
Message-ID: <0FB4179F-B299-41A9-A75A-EF9294E0DD17@oracle.com> (raw)
In-Reply-To: <8099fad7-6b74-e769-9431-900a531c5d11@suse.de>

Hi ,

See below ,


> On Nov 26, 2019, at 3:50 AM, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> 
> Hi
> 
> Am 26.11.19 um 10:37 schrieb Daniel Vetter:
>> On Tue, Nov 26, 2019 at 08:25:44AM +0100, Thomas Zimmermann wrote:
>>> There's at least one system that does not interpret the value of
>>> the device's 'startadd' field correctly, which leads to incorrectly
>>> displayed scanout buffers. Always placing the active scanout buffer
>>> at offset 0 works around the problem.
>>> 
>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>> Reported-by: John Donnelly <john.p.donnelly@oracle.com>
>>> Link: https://gitlab.freedesktop.org/drm/misc/issues/7
>> 
>> Tested-by: John Donnelly <john.p.donnelly@oracle.com>
>> 
>> (Not quite this patch, but pretty much the logic, so counts).
>> 
>> Fixes: 81da87f63a1e ("drm: Replace drm_gem_vram_push_to_system() with kunmap + unpin")
>> Cc: <stable@vger.kernel.org> # v5.3+
>> 
>> Also you need the stable line on both prep patches too. For next time
>> around,
>> 
>> $ dim fixes 81da87f63a1e
>> 
>> will generate all the stuff you need, including a good set of suggested
>> Cc: you should have.
>> 
>> On the first 3 patches, with all that stuff added:
>> 
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> Thanks for the review.
> 
> Sorry for leaving out some of the tags. I wanted to wait for feedback
> before adding tested-by, fixes, stable. I'll split off patch 4 from the
> series and get 1 to 3 merged ASAP.
> 
> Best regards
> Thomas
> 
>> 
>> Please push these to drm-misc-next-fixes so they get backported as quickly
>> as possible.
>> -Daniel
>> 
>>> ---
>>> drivers/gpu/drm/mgag200/mgag200_drv.c | 36 ++++++++++++++++++++++++++-
>>> drivers/gpu/drm/mgag200/mgag200_drv.h |  3 +++
>>> 2 files changed, 38 insertions(+), 1 deletion(-)
>>> 
>>> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c
>>> index 397f8b0a9af8..d43951caeea0 100644
>>> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
>>> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
>>> @@ -30,6 +30,8 @@ module_param_named(modeset, mgag200_modeset, int, 0400);
>>> static struct drm_driver driver;
>>> 
>>> static const struct pci_device_id pciidlist[] = {
>>> +	{ PCI_VENDOR_ID_MATROX, 0x522, PCI_VENDOR_ID_SUN, 0x4852, 0, 0,
>>> +		G200_SE_A | MGAG200_FLAG_HW_BUG_NO_STARTADD},



I will have an additional list of vendor IDs (0x4852)  I will provide in a follow up patch shortly .  This fixes only 1 flavor  of server.


Thank you .






>>> 	{ PCI_VENDOR_ID_MATROX, 0x522, PCI_ANY_ID, PCI_ANY_ID, 0, 0, G200_SE_A },
>>> 	{ PCI_VENDOR_ID_MATROX, 0x524, PCI_ANY_ID, PCI_ANY_ID, 0, 0, G200_SE_B },
>>> 	{ PCI_VENDOR_ID_MATROX, 0x530, PCI_ANY_ID, PCI_ANY_ID, 0, 0, G200_EV },
>>> @@ -60,6 +62,35 @@ static void mga_pci_remove(struct pci_dev *pdev)
>>> 
>>> DEFINE_DRM_GEM_FOPS(mgag200_driver_fops);
>>> 
>>> +static bool mgag200_pin_bo_at_0(const struct mga_device *mdev)
>>> +{
>>> +	return mdev->flags & MGAG200_FLAG_HW_BUG_NO_STARTADD;
>>> +}
>>> +
>>> +int mgag200_driver_dumb_create(struct drm_file *file,
>>> +			       struct drm_device *dev,
>>> +			       struct drm_mode_create_dumb *args)
>>> +{
>>> +	struct mga_device *mdev = dev->dev_private;
>>> +	unsigned long pg_align;
>>> +
>>> +	if (WARN_ONCE(!dev->vram_mm, "VRAM MM not initialized"))
>>> +		return -EINVAL;
>>> +
>>> +	pg_align = 0ul;
>>> +
>>> +	/*
>>> +	 * Aligning scanout buffers to the size of the video ram forces
>>> +	 * placement at offset 0. Works around a bug where HW does not
>>> +	 * respect 'startadd' field.
>>> +	 */
>>> +	if (mgag200_pin_bo_at_0(mdev))
>>> +		pg_align = PFN_UP(mdev->mc.vram_size);
>>> +
>>> +	return drm_gem_vram_fill_create_dumb(file, dev, &dev->vram_mm->bdev,
>>> +					     pg_align, false, args);
>>> +}
>>> +
>>> static struct drm_driver driver = {
>>> 	.driver_features = DRIVER_GEM | DRIVER_MODESET,
>>> 	.load = mgag200_driver_load,
>>> @@ -71,7 +102,10 @@ static struct drm_driver driver = {
>>> 	.major = DRIVER_MAJOR,
>>> 	.minor = DRIVER_MINOR,
>>> 	.patchlevel = DRIVER_PATCHLEVEL,
>>> -	DRM_GEM_VRAM_DRIVER
>>> +	.debugfs_init = drm_vram_mm_debugfs_init,
>>> +	.dumb_create = mgag200_driver_dumb_create,
>>> +	.dumb_map_offset = drm_gem_vram_driver_dumb_mmap_offset,
>>> +	.gem_prime_mmap = drm_gem_prime_mmap,
>>> };
>>> 
>>> static struct pci_driver mgag200_pci_driver = {
>>> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
>>> index 4b4f9ce74a84..aa32aad222c2 100644
>>> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
>>> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
>>> @@ -150,6 +150,9 @@ enum mga_type {
>>> 	G200_EW3,
>>> };
>>> 
>>> +/* HW does not handle 'startadd' field correct. */
>>> +#define MGAG200_FLAG_HW_BUG_NO_STARTADD	(1ul << 8)
>>> +
>>> #define MGAG200_TYPE_MASK	(0x000000ff)
>>> #define MGAG200_FLAG_MASK	(0x00ffff00)
>>> 
>>> -- 
>>> 2.23.0
>>> 
>> 
> 
> -- 
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Felix Imendörffer
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2019-12-03 17:57 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-26  7:25 [PATCH 0/4] drm/mgag200: Workaround HW bug with non-0 offset Thomas Zimmermann
2019-11-26  7:25 ` [PATCH 1/4] drm/mgag200: Extract device type from flags Thomas Zimmermann
2019-11-26  7:25 ` [PATCH 2/4] drm/mgag200: Store flags from PCI driver data in device structure Thomas Zimmermann
2019-11-26  7:25 ` [PATCH 3/4] drm/mgag200: Add workaround for HW that does not support 'startadd' Thomas Zimmermann
2019-11-26  9:37   ` Daniel Vetter
2019-11-26  9:50     ` Thomas Zimmermann
2019-12-03 17:55       ` John Donnelly [this message]
2019-12-04  7:30         ` Thomas Zimmermann
2019-12-04  9:36           ` Dave Airlie
2019-12-06  6:14             ` Thomas Zimmermann
2019-12-06  6:50               ` David Airlie
2019-12-06  7:51                 ` Thomas Zimmermann
2019-11-26  7:25 ` [PATCH 4/4] drm/mgag200: Add module parameter to pin all buffers at offset 0 Thomas Zimmermann
2019-11-26  9:38   ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0FB4179F-B299-41A9-A75A-EF9294E0DD17@oracle.com \
    --to=john.p.donnelly@oracle.com \
    --cc=airlied@redhat.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kraxel@redhat.com \
    --cc=sam@ravnborg.org \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.