diff options
author | Thomas Zimmermann <tzimmermann@suse.de> | 2022-06-01 13:25:15 +0200 |
---|---|---|
committer | Thomas Zimmermann <tzimmermann@suse.de> | 2022-06-07 09:39:47 +0200 |
commit | ce19021fd99ab2c915f2b44b0df39bef75f11d18 (patch) | |
tree | 7ccc0b665e190dde7196c386d5e84646da6cf27b /drivers/gpu/drm/mgag200/mgag200_g200.c | |
parent | 85397f6bc4ff13a6bc5259facb8ebebb1986d666 (diff) |
drm/mgag200: Move PCI-option setup into model-specific code
Split the PCI code into a single call for each model. G200 and G200SE
each contain a dedicated helper with additional instructions. Noteably,
the G200ER has no code for PCI setup.
In a later patch, the magic numbers should be replaced by descriptive
constants.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Tested-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220601112522.5774-4-tzimmermann@suse.de
Diffstat (limited to 'drivers/gpu/drm/mgag200/mgag200_g200.c')
-rw-r--r-- | drivers/gpu/drm/mgag200/mgag200_g200.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/drm/mgag200/mgag200_g200.c b/drivers/gpu/drm/mgag200/mgag200_g200.c index ca9522daf6e1..b9ec6367719c 100644 --- a/drivers/gpu/drm/mgag200/mgag200_g200.c +++ b/drivers/gpu/drm/mgag200/mgag200_g200.c @@ -6,6 +6,29 @@ #include "mgag200_drv.h" +static int mgag200_g200_init_pci_options(struct pci_dev *pdev) +{ + struct device *dev = &pdev->dev; + bool has_sgram; + u32 option; + int err; + + err = pci_read_config_dword(pdev, PCI_MGA_OPTION, &option); + if (err != PCIBIOS_SUCCESSFUL) { + dev_err(dev, "pci_read_config_dword(PCI_MGA_OPTION) failed: %d\n", err); + return pcibios_err_to_errno(err); + } + + has_sgram = !!(option & PCI_MGA_OPTION_HARDPWMSK); + + if (has_sgram) + option = 0x4049cd21; + else + option = 0x40499121; + + return mgag200_init_pci_options(pdev, option, 0x00008000); +} + /* * DRM Device */ @@ -149,6 +172,10 @@ struct mga_device *mgag200_g200_device_create(struct pci_dev *pdev, const struct pci_set_drvdata(pdev, dev); + ret = mgag200_g200_init_pci_options(pdev); + if (ret) + return ERR_PTR(ret); + mdev->flags = flags; mdev->type = type; |