static int nvc0_bar_init(struct nouveau_object *object) { struct nvc0_bar_priv *priv = (void *)object; int ret; ret = nouveau_bar_init(&priv->base); if (ret) return ret; nv_mask(priv, 0x000200, 0x00000100, 0x00000000); nv_mask(priv, 0x000200, 0x00000100, 0x00000100); nv_mask(priv, 0x100c80, 0x00000001, 0x00000000); nv_wr32(priv, 0x001704, 0x80000000 | priv->bar[1].mem->addr >> 12); nv_wr32(priv, 0x001714, 0xc0000000 | priv->bar[0].mem->addr >> 12); return 0; }
static int nv50_bar_init(struct nouveau_object *object) { struct nv50_bar_priv *priv = (void *)object; int ret; ret = nouveau_bar_init(&priv->base); if (ret) return ret; nv_mask(priv, 0x000200, 0x00000100, 0x00000000); nv_mask(priv, 0x000200, 0x00000100, 0x00000100); nv_wr32(priv, 0x100c80, 0x00060001); if (!nv_wait(priv, 0x100c80, 0x00000001, 0x00000000)) { nv_error(priv, "vm flush timeout\n"); return -EBUSY; } nv_wr32(priv, 0x001704, 0x00000000 | priv->mem->addr >> 12); nv_wr32(priv, 0x001704, 0x40000000 | priv->mem->addr >> 12); nv_wr32(priv, 0x001708, 0x80000000 | priv->bar1->node->offset >> 4); nv_wr32(priv, 0x00170c, 0x80000000 | priv->bar3->node->offset >> 4); return 0; }