summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/ast/ast_main.c
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2023-06-21 15:53:40 +0300
committerThomas Zimmermann <tzimmermann@suse.de>2023-06-27 15:26:30 +0300
commit48b6701eded8a326566dbd9b01a473bc849f79c1 (patch)
treec3649b348f751010c7dcdecace94d516d3d62d7f /drivers/gpu/drm/ast/ast_main.c
parent3bfe25b5119d6d8f2c9105840d9b0282c69c48d8 (diff)
downloadlinux-48b6701eded8a326566dbd9b01a473bc849f79c1.tar.xz
drm/ast: Set PCI config before accessing I/O registers
Access to I/O registers is required to detect and set up the device. Enable the rsp PCI config bits before. While at it, convert the magic number to macro constants. Enabling the PCI config bits was done after trying to detect the device. It was probably too late at this point. v2: * use standard 16-bit PCI r/w access (Jingfeng) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com> Tested-by: Jocelyn Falempe <jfalempe@redhat.com> # AST2600 Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn> Link: https://patchwork.freedesktop.org/patch/msgid/20230621130032.3568-7-tzimmermann@suse.de
Diffstat (limited to 'drivers/gpu/drm/ast/ast_main.c')
-rw-r--r--drivers/gpu/drm/ast/ast_main.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index c6987e044661..01f938c2da28 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -35,6 +35,23 @@
#include "ast_drv.h"
+static int ast_init_pci_config(struct pci_dev *pdev)
+{
+ int err;
+ u16 pcis04;
+
+ err = pci_read_config_word(pdev, PCI_COMMAND, &pcis04);
+ if (err)
+ goto out;
+
+ pcis04 |= PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
+
+ err = pci_write_config_word(pdev, PCI_COMMAND, pcis04);
+
+out:
+ return pcibios_err_to_errno(err);
+}
+
static void ast_detect_config_mode(struct drm_device *dev, u32 *scu_rev)
{
struct device_node *np = dev->dev->of_node;
@@ -399,6 +416,10 @@ struct ast_device *ast_device_create(const struct drm_driver *drv,
return ERR_PTR(-EIO);
}
+ ret = ast_init_pci_config(pdev);
+ if (ret)
+ return ERR_PTR(ret);
+
if (!ast_is_vga_enabled(dev)) {
drm_info(dev, "VGA not enabled on entry, requesting chip POST\n");
need_post = true;