drm/nvc0: starting point for GF100 support, everything stubbed
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
2d14e35c95
commit
4b223eefe4
|
@ -12,12 +12,12 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \
|
|||
nouveau_dp.o \
|
||||
nv04_timer.o \
|
||||
nv04_mc.o nv40_mc.o nv50_mc.o \
|
||||
nv04_fb.o nv10_fb.o nv30_fb.o nv40_fb.o nv50_fb.o \
|
||||
nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
|
||||
nv04_fb.o nv10_fb.o nv30_fb.o nv40_fb.o nv50_fb.o nvc0_fb.o \
|
||||
nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o nvc0_fifo.o \
|
||||
nv04_graph.o nv10_graph.o nv20_graph.o \
|
||||
nv40_graph.o nv50_graph.o \
|
||||
nv40_graph.o nv50_graph.o nvc0_graph.o \
|
||||
nv40_grctx.o nv50_grctx.o \
|
||||
nv04_instmem.o nv50_instmem.o \
|
||||
nv04_instmem.o nv50_instmem.o nvc0_instmem.o \
|
||||
nv50_crtc.o nv50_dac.o nv50_sor.o \
|
||||
nv50_cursor.o nv50_display.o nv50_fbcon.o \
|
||||
nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \
|
||||
|
|
|
@ -509,6 +509,7 @@ enum nouveau_card_type {
|
|||
NV_30 = 0x30,
|
||||
NV_40 = 0x40,
|
||||
NV_50 = 0x50,
|
||||
NV_C0 = 0xc0,
|
||||
};
|
||||
|
||||
struct drm_nouveau_private {
|
||||
|
@ -929,6 +930,10 @@ extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t,
|
|||
extern int nv50_fb_init(struct drm_device *);
|
||||
extern void nv50_fb_takedown(struct drm_device *);
|
||||
|
||||
/* nvc0_fb.c */
|
||||
extern int nvc0_fb_init(struct drm_device *);
|
||||
extern void nvc0_fb_takedown(struct drm_device *);
|
||||
|
||||
/* nv04_fifo.c */
|
||||
extern int nv04_fifo_init(struct drm_device *);
|
||||
extern void nv04_fifo_disable(struct drm_device *);
|
||||
|
@ -966,6 +971,20 @@ extern void nv50_fifo_destroy_context(struct nouveau_channel *);
|
|||
extern int nv50_fifo_load_context(struct nouveau_channel *);
|
||||
extern int nv50_fifo_unload_context(struct drm_device *);
|
||||
|
||||
/* nvc0_fifo.c */
|
||||
extern int nvc0_fifo_init(struct drm_device *);
|
||||
extern void nvc0_fifo_takedown(struct drm_device *);
|
||||
extern void nvc0_fifo_disable(struct drm_device *);
|
||||
extern void nvc0_fifo_enable(struct drm_device *);
|
||||
extern bool nvc0_fifo_reassign(struct drm_device *, bool);
|
||||
extern bool nvc0_fifo_cache_flush(struct drm_device *);
|
||||
extern bool nvc0_fifo_cache_pull(struct drm_device *, bool);
|
||||
extern int nvc0_fifo_channel_id(struct drm_device *);
|
||||
extern int nvc0_fifo_create_context(struct nouveau_channel *);
|
||||
extern void nvc0_fifo_destroy_context(struct nouveau_channel *);
|
||||
extern int nvc0_fifo_load_context(struct nouveau_channel *);
|
||||
extern int nvc0_fifo_unload_context(struct drm_device *);
|
||||
|
||||
/* nv04_graph.c */
|
||||
extern struct nouveau_pgraph_object_class nv04_graph_grclass[];
|
||||
extern int nv04_graph_init(struct drm_device *);
|
||||
|
@ -1030,6 +1049,16 @@ extern int nv50_graph_unload_context(struct drm_device *);
|
|||
extern void nv50_graph_context_switch(struct drm_device *);
|
||||
extern int nv50_grctx_init(struct nouveau_grctx *);
|
||||
|
||||
/* nvc0_graph.c */
|
||||
extern int nvc0_graph_init(struct drm_device *);
|
||||
extern void nvc0_graph_takedown(struct drm_device *);
|
||||
extern void nvc0_graph_fifo_access(struct drm_device *, bool);
|
||||
extern struct nouveau_channel *nvc0_graph_channel(struct drm_device *);
|
||||
extern int nvc0_graph_create_context(struct nouveau_channel *);
|
||||
extern void nvc0_graph_destroy_context(struct nouveau_channel *);
|
||||
extern int nvc0_graph_load_context(struct nouveau_channel *);
|
||||
extern int nvc0_graph_unload_context(struct drm_device *);
|
||||
|
||||
/* nv04_instmem.c */
|
||||
extern int nv04_instmem_init(struct drm_device *);
|
||||
extern void nv04_instmem_takedown(struct drm_device *);
|
||||
|
@ -1056,6 +1085,18 @@ extern void nv50_instmem_flush(struct drm_device *);
|
|||
extern void nv84_instmem_flush(struct drm_device *);
|
||||
extern void nv50_vm_flush(struct drm_device *, int engine);
|
||||
|
||||
/* nvc0_instmem.c */
|
||||
extern int nvc0_instmem_init(struct drm_device *);
|
||||
extern void nvc0_instmem_takedown(struct drm_device *);
|
||||
extern int nvc0_instmem_suspend(struct drm_device *);
|
||||
extern void nvc0_instmem_resume(struct drm_device *);
|
||||
extern int nvc0_instmem_populate(struct drm_device *, struct nouveau_gpuobj *,
|
||||
uint32_t *size);
|
||||
extern void nvc0_instmem_clear(struct drm_device *, struct nouveau_gpuobj *);
|
||||
extern int nvc0_instmem_bind(struct drm_device *, struct nouveau_gpuobj *);
|
||||
extern int nvc0_instmem_unbind(struct drm_device *, struct nouveau_gpuobj *);
|
||||
extern void nvc0_instmem_flush(struct drm_device *);
|
||||
|
||||
/* nv04_mc.c */
|
||||
extern int nv04_mc_init(struct drm_device *);
|
||||
extern void nv04_mc_takedown(struct drm_device *);
|
||||
|
|
|
@ -280,6 +280,8 @@ nouveau_fbcon_create(struct nouveau_fbdev *nfbdev,
|
|||
|
||||
if (dev_priv->channel && !nouveau_nofbaccel) {
|
||||
switch (dev_priv->card_type) {
|
||||
case NV_C0:
|
||||
break;
|
||||
case NV_50:
|
||||
nv50_fbcon_accel_init(info);
|
||||
info->fbops = &nv50_fbcon_ops;
|
||||
|
|
|
@ -163,7 +163,7 @@ nouveau_i2c_init(struct drm_device *dev, struct dcb_i2c_entry *entry, int index)
|
|||
if (entry->chan)
|
||||
return -EEXIST;
|
||||
|
||||
if (dev_priv->card_type == NV_50 && entry->read >= NV50_I2C_PORTS) {
|
||||
if (dev_priv->card_type == NV_C0 && entry->read >= NV50_I2C_PORTS) {
|
||||
NV_ERROR(dev, "unknown i2c port %d\n", entry->read);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ nouveau_irq_preinstall(struct drm_device *dev)
|
|||
/* Master disable */
|
||||
nv_wr32(dev, NV03_PMC_INTR_EN_0, 0);
|
||||
|
||||
if (dev_priv->card_type == NV_50) {
|
||||
if (dev_priv->card_type >= NV_50) {
|
||||
INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh);
|
||||
INIT_WORK(&dev_priv->hpd_work, nv50_display_irq_hotplug_bh);
|
||||
INIT_LIST_HEAD(&dev_priv->vbl_waiting);
|
||||
|
|
|
@ -359,6 +359,54 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|||
engine->gpio.set = nv50_gpio_set;
|
||||
engine->gpio.irq_enable = nv50_gpio_irq_enable;
|
||||
break;
|
||||
case 0xC0:
|
||||
engine->instmem.init = nvc0_instmem_init;
|
||||
engine->instmem.takedown = nvc0_instmem_takedown;
|
||||
engine->instmem.suspend = nvc0_instmem_suspend;
|
||||
engine->instmem.resume = nvc0_instmem_resume;
|
||||
engine->instmem.populate = nvc0_instmem_populate;
|
||||
engine->instmem.clear = nvc0_instmem_clear;
|
||||
engine->instmem.bind = nvc0_instmem_bind;
|
||||
engine->instmem.unbind = nvc0_instmem_unbind;
|
||||
engine->instmem.flush = nvc0_instmem_flush;
|
||||
engine->mc.init = nv50_mc_init;
|
||||
engine->mc.takedown = nv50_mc_takedown;
|
||||
engine->timer.init = nv04_timer_init;
|
||||
engine->timer.read = nv04_timer_read;
|
||||
engine->timer.takedown = nv04_timer_takedown;
|
||||
engine->fb.init = nvc0_fb_init;
|
||||
engine->fb.takedown = nvc0_fb_takedown;
|
||||
engine->graph.grclass = NULL; //nvc0_graph_grclass;
|
||||
engine->graph.init = nvc0_graph_init;
|
||||
engine->graph.takedown = nvc0_graph_takedown;
|
||||
engine->graph.fifo_access = nvc0_graph_fifo_access;
|
||||
engine->graph.channel = nvc0_graph_channel;
|
||||
engine->graph.create_context = nvc0_graph_create_context;
|
||||
engine->graph.destroy_context = nvc0_graph_destroy_context;
|
||||
engine->graph.load_context = nvc0_graph_load_context;
|
||||
engine->graph.unload_context = nvc0_graph_unload_context;
|
||||
engine->fifo.channels = 128;
|
||||
engine->fifo.init = nvc0_fifo_init;
|
||||
engine->fifo.takedown = nvc0_fifo_takedown;
|
||||
engine->fifo.disable = nvc0_fifo_disable;
|
||||
engine->fifo.enable = nvc0_fifo_enable;
|
||||
engine->fifo.reassign = nvc0_fifo_reassign;
|
||||
engine->fifo.channel_id = nvc0_fifo_channel_id;
|
||||
engine->fifo.create_context = nvc0_fifo_create_context;
|
||||
engine->fifo.destroy_context = nvc0_fifo_destroy_context;
|
||||
engine->fifo.load_context = nvc0_fifo_load_context;
|
||||
engine->fifo.unload_context = nvc0_fifo_unload_context;
|
||||
engine->display.early_init = nv50_display_early_init;
|
||||
engine->display.late_takedown = nv50_display_late_takedown;
|
||||
engine->display.create = nv50_display_create;
|
||||
engine->display.init = nv50_display_init;
|
||||
engine->display.destroy = nv50_display_destroy;
|
||||
engine->gpio.init = nv50_gpio_init;
|
||||
engine->gpio.takedown = nouveau_stub_takedown;
|
||||
engine->gpio.get = nv50_gpio_get;
|
||||
engine->gpio.set = nv50_gpio_set;
|
||||
engine->gpio.irq_enable = nv50_gpio_irq_enable;
|
||||
break;
|
||||
default:
|
||||
NV_ERROR(dev, "NV%02x unsupported\n", dev_priv->chipset);
|
||||
return 1;
|
||||
|
@ -815,6 +863,9 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
|
|||
case 0xa0:
|
||||
dev_priv->card_type = NV_50;
|
||||
break;
|
||||
case 0xc0:
|
||||
dev_priv->card_type = NV_C0;
|
||||
break;
|
||||
default:
|
||||
NV_INFO(dev, "Unsupported chipset 0x%08x\n", reg0);
|
||||
ret = -EINVAL;
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright 2010 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "drmP.h"
|
||||
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
int
|
||||
nvc0_fb_init(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_fb_takedown(struct drm_device *dev)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* Copyright 2010 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "drmP.h"
|
||||
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
void
|
||||
nvc0_fifo_disable(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_fifo_enable(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
bool
|
||||
nvc0_fifo_reassign(struct drm_device *dev, bool enable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
nvc0_fifo_cache_flush(struct drm_device *dev)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
nvc0_fifo_cache_pull(struct drm_device *dev, bool enable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_fifo_channel_id(struct drm_device *dev)
|
||||
{
|
||||
return 127;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_fifo_create_context(struct nouveau_channel *chan)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_fifo_destroy_context(struct nouveau_channel *chan)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_fifo_load_context(struct nouveau_channel *chan)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_fifo_unload_context(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_fifo_takedown(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_fifo_init(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* Copyright 2010 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "drmP.h"
|
||||
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
void
|
||||
nvc0_graph_fifo_access(struct drm_device *dev, bool enabled)
|
||||
{
|
||||
}
|
||||
|
||||
struct nouveau_channel *
|
||||
nvc0_graph_channel(struct drm_device *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_graph_create_context(struct nouveau_channel *chan)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_graph_destroy_context(struct nouveau_channel *chan)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_graph_load_context(struct nouveau_channel *chan)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_graph_unload_context(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_graph_takedown(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_graph_init(struct drm_device *dev)
|
||||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
dev_priv->engine.graph.accel_blocked = true;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright 2010 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "drmP.h"
|
||||
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
int
|
||||
nvc0_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
|
||||
uint32_t *size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_instmem_clear(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_instmem_bind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_instmem_unbind(struct drm_device *dev, struct nouveau_gpuobj *gpuobj)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_instmem_flush(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_instmem_suspend(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_instmem_resume(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
nvc0_instmem_init(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nvc0_instmem_takedown(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue