Commit 0dd68309 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Dave Airlie

drm/ast: Try to use MMIO registers when PIO isn't supported

If the PIO resources haven't been assigned, then we have no choice
but try to use the MMIO version. This is the case for example on
POWER8 which doesn't support PIO at all.

Chips rev 0x20 or later have MMIO decoding enabled by default.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 98faa78c
...@@ -125,8 +125,9 @@ struct ast_gem_object; ...@@ -125,8 +125,9 @@ struct ast_gem_object;
#define AST_IO_AR_PORT_WRITE (0x40) #define AST_IO_AR_PORT_WRITE (0x40)
#define AST_IO_MISC_PORT_WRITE (0x42) #define AST_IO_MISC_PORT_WRITE (0x42)
#define AST_IO_VGA_ENABLE_PORT (0x43)
#define AST_IO_SEQ_PORT (0x44) #define AST_IO_SEQ_PORT (0x44)
#define AST_DAC_INDEX_READ (0x3c7) #define AST_IO_DAC_INDEX_READ (0x47)
#define AST_IO_DAC_INDEX_WRITE (0x48) #define AST_IO_DAC_INDEX_WRITE (0x48)
#define AST_IO_DAC_DATA (0x49) #define AST_IO_DAC_DATA (0x49)
#define AST_IO_GR_PORT (0x4E) #define AST_IO_GR_PORT (0x4E)
...@@ -134,6 +135,8 @@ struct ast_gem_object; ...@@ -134,6 +135,8 @@ struct ast_gem_object;
#define AST_IO_INPUT_STATUS1_READ (0x5A) #define AST_IO_INPUT_STATUS1_READ (0x5A)
#define AST_IO_MISC_PORT_READ (0x4C) #define AST_IO_MISC_PORT_READ (0x4C)
#define AST_IO_MM_OFFSET (0x380)
#define __ast_read(x) \ #define __ast_read(x) \
static inline u##x ast_read##x(struct ast_private *ast, u32 reg) { \ static inline u##x ast_read##x(struct ast_private *ast, u32 reg) { \
u##x val = 0;\ u##x val = 0;\
......
...@@ -359,11 +359,25 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags) ...@@ -359,11 +359,25 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
ret = -EIO; ret = -EIO;
goto out_free; goto out_free;
} }
/*
* If we don't have IO space at all, use MMIO now and
* assume the chip has MMIO enabled by default (rev 0x20
* and higher).
*/
if (!(pci_resource_flags(dev->pdev, 2) & IORESOURCE_IO)) {
DRM_INFO("platform has no IO space, trying MMIO\n");
ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
}
/* "map" IO regs if the above hasn't done so already */
if (!ast->ioregs) {
ast->ioregs = pci_iomap(dev->pdev, 2, 0); ast->ioregs = pci_iomap(dev->pdev, 2, 0);
if (!ast->ioregs) { if (!ast->ioregs) {
ret = -EIO; ret = -EIO;
goto out_free; goto out_free;
} }
}
ast_detect_chip(dev); ast_detect_chip(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment