summaryrefslogtreecommitdiff
path: root/nvkm
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-11-26 08:51:10 +1000
committerBen Skeggs <bskeggs@redhat.com>2014-12-02 15:37:22 +1000
commit39d90a2194ddcc8e6114d84b81b84ba94ecc1930 (patch)
treeffd71865455ab8573fb8bf3cd97d8929825333ff /nvkm
parent5b9c4e1953f4f7f2fa21bae7164586cd33967bb6 (diff)
downloadnouveau-39d90a2194ddcc8e6114d84b81b84ba94ecc1930.tar.gz
devinit: bump priv ring timeouts before executing scripts
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'nvkm')
-rw-r--r--nvkm/include/core/device.h2
-rw-r--r--nvkm/subdev/devinit/nv50.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/nvkm/include/core/device.h b/nvkm/include/core/device.h
index 0e0ce4366..2ec2e50d3 100644
--- a/nvkm/include/core/device.h
+++ b/nvkm/include/core/device.h
@@ -16,6 +16,7 @@ enum nv_subdev_type {
* to during POST.
*/
NVDEV_SUBDEV_DEVINIT,
+ NVDEV_SUBDEV_IBUS,
NVDEV_SUBDEV_GPIO,
NVDEV_SUBDEV_I2C,
NVDEV_SUBDEV_DEVINIT_LAST = NVDEV_SUBDEV_I2C,
@@ -31,7 +32,6 @@ enum nv_subdev_type {
NVDEV_SUBDEV_TIMER,
NVDEV_SUBDEV_FB,
NVDEV_SUBDEV_LTC,
- NVDEV_SUBDEV_IBUS,
NVDEV_SUBDEV_INSTMEM,
NVDEV_SUBDEV_VM,
NVDEV_SUBDEV_BAR,
diff --git a/nvkm/subdev/devinit/nv50.c b/nvkm/subdev/devinit/nv50.c
index 0de7fa6e8..968334d1d 100644
--- a/nvkm/subdev/devinit/nv50.c
+++ b/nvkm/subdev/devinit/nv50.c
@@ -26,6 +26,7 @@
#include <subdev/bios/dcb.h>
#include <subdev/bios/disp.h>
#include <subdev/bios/init.h>
+#include <subdev/ibus.h>
#include <subdev/vga.h>
#include "nv50.h"
@@ -91,6 +92,7 @@ int
nv50_devinit_init(struct nouveau_object *object)
{
struct nouveau_bios *bios = nouveau_bios(object);
+ struct nouveau_ibus *ibus = nouveau_ibus(object);
struct nv50_devinit_priv *priv = (void *)object;
struct nvbios_outp info;
struct dcb_output outp;
@@ -105,6 +107,13 @@ nv50_devinit_init(struct nouveau_object *object)
}
}
+ /* some boards appear to require certain priv register timeouts
+ * to be bumped before runing devinit scripts. not a clue why
+ * the vbios engineers didn't make the scripts just work...
+ */
+ if (priv->base.post && ibus)
+ nv_ofuncs(ibus)->init(nv_object(ibus));
+
ret = nouveau_devinit_init(&priv->base);
if (ret)
return ret;