Skip to content

Commit

Permalink
drm/ast: Set PCI config before accessing I/O registers
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Thomas Zimmermann committed Jun 27, 2023
1 parent 3bfe25b commit 48b6701
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
1 change: 0 additions & 1 deletion drivers/gpu/drm/ast/ast_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
#define PCI_CHIP_AST2000 0x2000
#define PCI_CHIP_AST2100 0x2010


enum ast_chip {
AST2000,
AST2100,
Expand Down
21 changes: 21 additions & 0 deletions drivers/gpu/drm/ast/ast_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 0 additions & 6 deletions drivers/gpu/drm/ast/ast_post.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,12 +361,6 @@ static void ast_init_dram_reg(struct drm_device *dev)
void ast_post_gpu(struct drm_device *dev)
{
struct ast_device *ast = to_ast_device(dev);
struct pci_dev *pdev = to_pci_dev(dev->dev);
u32 reg;

pci_read_config_dword(pdev, 0x04, &reg);
reg |= 0x3;
pci_write_config_dword(pdev, 0x04, reg);

ast_enable_vga(dev);
ast_open_key(ast);
Expand Down

0 comments on commit 48b6701

Please sign in to comment.