mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 22:24:09 +08:00
Merge branch 'linux-4.7' of git://github.com/skeggsb/linux into drm-next
Nothing too exciting here, there's a larger chunk of work that still needs more testing but not likely to get that done today - so - here's the rest of it. Assuming nothing else goes horribly wrong, I should be able to send the rest Monday if it isn't too late.... Changes: - Improvements to power sensor support - Initial attempt at GM108 support - Minor fixes to GR init + ucode - Make use of topology information (provided by the GPU) in various places, should at least fix some fault recovery issues and engine/runlist mapping confusion on newer GPUs. * 'linux-4.7' of git://github.com/skeggsb/linux: (51 commits) drm/nouveau/gr/gf100-: fix race condition in fecs/gpccs ucode drm/nouveau/core: recognise GM108 chipsets drm/nouveau/gr/gm107-: fix touching non-existent ppcs in attrib cb setup drm/nouveau/gr/gk104-: share implementation of ppc exception init drm/nouveau/gr/gk104-: move rop_active_fbps init to nonctx drm/nouveau/bios/pll: check BIT table version before trying to parse it drm/nouveau/bios/pll: prevent oops when limits table can't be parsed drm/nouveau/volt/gk104: round up in gk104_volt_set drm/nouveau/fb/gm200: setup mmu debug buffer registers at init() drm/nouveau/fb/gk20a,gm20b: setup mmu debug buffer registers at init() drm/nouveau/fb/gf100-: allocate mmu debug buffers drm/nouveau/fb: allow chipset-specific actions for oneinit() drm/nouveau/gr/gm200-: fix bad hardcoding of a max-tpcs-per-gpc value drm/nouveau/gr/gm200-: rop count == ltc count drm/nouveau/gr/gm200: modify the mask when copying mmu settings from fb drm/nouveau/gr/gm200: move some code into init_gpc_mmu() hook drm/nouveau/gr/gm200: make generate_main() static drm/nouveau/gr/gf100-: abstract fetching rop count drm/nouveau/gr/gf100-: rename magic_not_rop_nr to screen_tile_row_offset drm/nouveau/gr/gf100-: remove hardcoded idle_timeout values ...
This commit is contained in:
commit
d5fa33f284
@ -23,7 +23,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "hw.h"
|
||||
|
||||
|
@ -28,8 +28,9 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_ttm.h"
|
||||
#include "nouveau_bo.h"
|
||||
#include "nouveau_gem.h"
|
||||
#include "nouveau_encoder.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_mode.h>
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_crtc.h"
|
||||
#include "hw.h"
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_connector.h"
|
||||
#include "nouveau_crtc.h"
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_connector.h"
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "hw.h"
|
||||
#include "nouveau_encoder.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#ifndef __NV04_DISPLAY_H__
|
||||
#define __NV04_DISPLAY_H__
|
||||
|
||||
#include <subdev/bios.h>
|
||||
#include <subdev/bios/pll.h>
|
||||
|
||||
#include "nouveau_display.h"
|
||||
|
@ -23,7 +23,7 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "hw.h"
|
||||
|
||||
#include <subdev/bios/pll.h>
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
#include "nouveau_bo.h"
|
||||
#include "nouveau_connector.h"
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_crtc.h"
|
||||
#include "hw.h"
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_connector.h"
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_connector.h"
|
||||
|
@ -7,6 +7,7 @@ enum nvkm_devidx {
|
||||
NVKM_SUBDEV_PCI,
|
||||
NVKM_SUBDEV_VBIOS,
|
||||
NVKM_SUBDEV_DEVINIT,
|
||||
NVKM_SUBDEV_TOP,
|
||||
NVKM_SUBDEV_IBUS,
|
||||
NVKM_SUBDEV_GPIO,
|
||||
NVKM_SUBDEV_I2C,
|
||||
@ -131,6 +132,7 @@ struct nvkm_device {
|
||||
struct nvkm_secboot *secboot;
|
||||
struct nvkm_therm *therm;
|
||||
struct nvkm_timer *timer;
|
||||
struct nvkm_top *top;
|
||||
struct nvkm_volt *volt;
|
||||
|
||||
struct nvkm_engine *bsp;
|
||||
@ -200,6 +202,7 @@ struct nvkm_device_chip {
|
||||
int (*secboot )(struct nvkm_device *, int idx, struct nvkm_secboot **);
|
||||
int (*therm )(struct nvkm_device *, int idx, struct nvkm_therm **);
|
||||
int (*timer )(struct nvkm_device *, int idx, struct nvkm_timer **);
|
||||
int (*top )(struct nvkm_device *, int idx, struct nvkm_top **);
|
||||
int (*volt )(struct nvkm_device *, int idx, struct nvkm_volt **);
|
||||
|
||||
int (*bsp )(struct nvkm_device *, int idx, struct nvkm_engine **);
|
||||
|
@ -38,11 +38,9 @@ struct nvkm_engine_func {
|
||||
};
|
||||
|
||||
int nvkm_engine_ctor(const struct nvkm_engine_func *, struct nvkm_device *,
|
||||
int index, u32 pmc_enable, bool enable,
|
||||
struct nvkm_engine *);
|
||||
int index, bool enable, struct nvkm_engine *);
|
||||
int nvkm_engine_new_(const struct nvkm_engine_func *, struct nvkm_device *,
|
||||
int index, u32 pmc_enable, bool enable,
|
||||
struct nvkm_engine **);
|
||||
int index, bool enable, struct nvkm_engine **);
|
||||
struct nvkm_engine *nvkm_engine_ref(struct nvkm_engine *);
|
||||
void nvkm_engine_unref(struct nvkm_engine **);
|
||||
void nvkm_engine_tile(struct nvkm_engine *, int region);
|
||||
|
@ -6,7 +6,6 @@ struct nvkm_subdev {
|
||||
const struct nvkm_subdev_func *func;
|
||||
struct nvkm_device *device;
|
||||
enum nvkm_devidx index;
|
||||
u32 pmc_enable;
|
||||
struct mutex mutex;
|
||||
u32 debug;
|
||||
|
||||
@ -24,7 +23,7 @@ struct nvkm_subdev_func {
|
||||
|
||||
extern const char *nvkm_subdev_name[NVKM_SUBDEV_NR];
|
||||
void nvkm_subdev_ctor(const struct nvkm_subdev_func *, struct nvkm_device *,
|
||||
int index, u32 pmc_enable, struct nvkm_subdev *);
|
||||
int index, struct nvkm_subdev *);
|
||||
void nvkm_subdev_del(struct nvkm_subdev **);
|
||||
int nvkm_subdev_preinit(struct nvkm_subdev *);
|
||||
int nvkm_subdev_init(struct nvkm_subdev *);
|
||||
|
@ -40,7 +40,6 @@ struct nvkm_falcon_func {
|
||||
u32 *data;
|
||||
u32 size;
|
||||
} data;
|
||||
u32 pmc_enable;
|
||||
void (*init)(struct nvkm_falcon *);
|
||||
void (*intr)(struct nvkm_falcon *, struct nvkm_fifo_chan *);
|
||||
struct nvkm_sclass sclass[];
|
||||
|
@ -15,7 +15,6 @@ int nvkm_xtensa_new_(const struct nvkm_xtensa_func *, struct nvkm_device *,
|
||||
int index, bool enable, u32 addr, struct nvkm_engine **);
|
||||
|
||||
struct nvkm_xtensa_func {
|
||||
u32 pmc_enable;
|
||||
u32 fifo_val;
|
||||
u32 unkd28;
|
||||
struct nvkm_sclass sclass[];
|
||||
|
@ -7,6 +7,7 @@ struct nvkm_devinit {
|
||||
const struct nvkm_devinit_func *func;
|
||||
struct nvkm_subdev subdev;
|
||||
bool post;
|
||||
bool force_post;
|
||||
};
|
||||
|
||||
u32 nvkm_devinit_mmio(struct nvkm_devinit *, u32 addr);
|
||||
|
@ -55,6 +55,9 @@ struct nvkm_fb {
|
||||
struct nvkm_fb_tile region[16];
|
||||
int regions;
|
||||
} tile;
|
||||
|
||||
struct nvkm_memory *mmu_rd;
|
||||
struct nvkm_memory *mmu_wr;
|
||||
};
|
||||
|
||||
bool nvkm_fb_memtype_valid(struct nvkm_fb *, u32 memtype);
|
||||
@ -87,6 +90,7 @@ int gf100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gm200_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
|
||||
#include <subdev/bios.h>
|
||||
#include <subdev/bios/ramcfg.h>
|
||||
|
@ -3,15 +3,13 @@
|
||||
|
||||
#include <core/subdev.h>
|
||||
|
||||
struct nkvm_iccsense_rail;
|
||||
struct nvkm_iccsense {
|
||||
struct nvkm_subdev subdev;
|
||||
u8 rail_count;
|
||||
bool data_valid;
|
||||
struct nvkm_iccsense_rail *rails;
|
||||
struct list_head sensors;
|
||||
struct list_head rails;
|
||||
};
|
||||
|
||||
int gf100_iccsense_new(struct nvkm_device *, int index, struct nvkm_iccsense **);
|
||||
int nvkm_iccsense_read(struct nvkm_iccsense *iccsense, u8 idx);
|
||||
int nvkm_iccsense_read_all(struct nvkm_iccsense *iccsense);
|
||||
#endif
|
||||
|
@ -10,12 +10,18 @@ struct nvkm_mc {
|
||||
void nvkm_mc_intr(struct nvkm_mc *, bool *handled);
|
||||
void nvkm_mc_intr_unarm(struct nvkm_mc *);
|
||||
void nvkm_mc_intr_rearm(struct nvkm_mc *);
|
||||
void nvkm_mc_reset(struct nvkm_mc *, enum nvkm_devidx);
|
||||
void nvkm_mc_unk260(struct nvkm_mc *, u32 data);
|
||||
|
||||
int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int nv11_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int nv17_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int nv44_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int nv50_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int g84_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int g98_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gt215_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gf100_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gk104_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gk20a_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
#endif
|
||||
|
17
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
Normal file
17
drivers/gpu/drm/nouveau/include/nvkm/subdev/top.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef __NVKM_TOP_H__
|
||||
#define __NVKM_TOP_H__
|
||||
#include <core/subdev.h>
|
||||
|
||||
struct nvkm_top {
|
||||
const struct nvkm_top_func *func;
|
||||
struct nvkm_subdev subdev;
|
||||
struct list_head device;
|
||||
};
|
||||
|
||||
u32 nvkm_top_reset(struct nvkm_top *, enum nvkm_devidx);
|
||||
u32 nvkm_top_intr(struct nvkm_top *, u32 intr, u64 *subdevs);
|
||||
enum nvkm_devidx nvkm_top_fault(struct nvkm_top *, int fault);
|
||||
enum nvkm_devidx nvkm_top_engine(struct nvkm_top *, int, int *runl, int *engn);
|
||||
|
||||
int gk104_top_new(struct nvkm_device *, int, struct nvkm_top **);
|
||||
#endif
|
@ -29,7 +29,7 @@
|
||||
#include <nvif/cla06f.h>
|
||||
#include <nvif/unpack.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_gem.h"
|
||||
#include "nouveau_chan.h"
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include <drm/drm_edid.h>
|
||||
#include <acpi/video.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_acpi.h"
|
||||
|
||||
#define NOUVEAU_DSM_LED 0x02
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
#include <linux/backlight.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_encoder.h"
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_reg.h"
|
||||
#include "dispnv04/hw.h"
|
||||
#include "nouveau_encoder.h"
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/swiotlb.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
/*XXX*/
|
||||
#include <core/client.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_bo.h"
|
||||
#include "nouveau_chan.h"
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
#include "nouveau_reg.h"
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "dispnv04/hw.h"
|
||||
#include "nouveau_acpi.h"
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <nvif/class.h>
|
||||
#include <nvif/if0001.h>
|
||||
#include "nouveau_debugfs.h"
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
static int
|
||||
nouveau_debugfs_vbios_image(struct seq_file *m, void *data)
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
struct nouveau_debugfs {
|
||||
struct nvif_object ctrl;
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include <subdev/mmu.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
struct nouveau_framebuffer {
|
||||
struct drm_framebuffer base;
|
||||
|
@ -24,7 +24,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
|
||||
void
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_dp_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_connector.h"
|
||||
#include "nouveau_encoder.h"
|
||||
#include "nouveau_crtc.h"
|
||||
|
@ -44,7 +44,7 @@
|
||||
#include <nvif/cla06f.h>
|
||||
#include <nvif/if0004.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_ttm.h"
|
||||
#include "nouveau_gem.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef __NOUVEAU_DRMCLI_H__
|
||||
#define __NOUVEAU_DRMCLI_H__
|
||||
#ifndef __NOUVEAU_DRV_H__
|
||||
#define __NOUVEAU_DRV_H__
|
||||
|
||||
#define DRIVER_AUTHOR "Nouveau Project"
|
||||
#define DRIVER_EMAIL "nouveau@lists.freedesktop.org"
|
@ -43,7 +43,7 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_gem.h"
|
||||
#include "nouveau_bo.h"
|
||||
#include "nouveau_fbcon.h"
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <nvif/notify.h>
|
||||
#include <nvif/event.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
#include "nouveau_abi16.h"
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_bo.h"
|
||||
|
||||
#define nouveau_bo_tile_layout(nvbo) \
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_hwmon.h"
|
||||
|
||||
#include <nvkm/subdev/iccsense.h>
|
||||
@ -689,7 +689,7 @@ nouveau_hwmon_init(struct drm_device *dev)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (iccsense && iccsense->data_valid && iccsense->rail_count) {
|
||||
if (iccsense && iccsense->data_valid && !list_empty(&iccsense->rails)) {
|
||||
ret = sysfs_create_group(&hwmon_dev->kobj,
|
||||
&hwmon_power_attrgroup);
|
||||
if (ret)
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include <nvif/event.h>
|
||||
#include <nvif/ioctl.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_usif.h"
|
||||
|
||||
static void
|
||||
|
@ -21,7 +21,7 @@
|
||||
*/
|
||||
#ifndef __NOUVEAU_PLATFORM_H__
|
||||
#define __NOUVEAU_PLATFORM_H__
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
|
||||
extern struct platform_driver nouveau_platform_driver;
|
||||
#endif
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <linux/dma-buf.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_gem.h"
|
||||
|
||||
struct sg_table *nouveau_gem_prime_get_sg_table(struct drm_gem_object *obj)
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_ttm.h"
|
||||
|
||||
struct nouveau_sgdma_be {
|
||||
|
@ -24,7 +24,7 @@
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_ttm.h"
|
||||
#include "nouveau_gem.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs <bskeggs@redhat.com>
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_usif.h"
|
||||
#include "nouveau_abi16.h"
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_acpi.h"
|
||||
#include "nouveau_fbcon.h"
|
||||
#include "nouveau_vga.h"
|
||||
|
@ -22,7 +22,7 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fbcon.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs <bskeggs@redhat.com>
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nv10_fence.h"
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <nvif/class.h>
|
||||
#include <nvif/cl0002.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nv10_fence.h"
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include <nvif/cl507d.h>
|
||||
#include <nvif/cl507e.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_gem.h"
|
||||
#include "nouveau_connector.h"
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fbcon.h"
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <nvif/class.h>
|
||||
#include <nvif/cl0002.h>
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nv10_fence.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fbcon.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
* Authors: Ben Skeggs
|
||||
*/
|
||||
|
||||
#include "nouveau_drm.h"
|
||||
#include "nouveau_drv.h"
|
||||
#include "nouveau_dma.h"
|
||||
#include "nouveau_fence.h"
|
||||
|
||||
|
@ -137,11 +137,10 @@ nvkm_engine_func = {
|
||||
|
||||
int
|
||||
nvkm_engine_ctor(const struct nvkm_engine_func *func,
|
||||
struct nvkm_device *device, int index, u32 pmc_enable,
|
||||
bool enable, struct nvkm_engine *engine)
|
||||
struct nvkm_device *device, int index, bool enable,
|
||||
struct nvkm_engine *engine)
|
||||
{
|
||||
nvkm_subdev_ctor(&nvkm_engine_func, device, index,
|
||||
pmc_enable, &engine->subdev);
|
||||
nvkm_subdev_ctor(&nvkm_engine_func, device, index, &engine->subdev);
|
||||
engine->func = func;
|
||||
|
||||
if (!nvkm_boolopt(device->cfgopt, nvkm_subdev_name[index], enable)) {
|
||||
@ -155,11 +154,10 @@ nvkm_engine_ctor(const struct nvkm_engine_func *func,
|
||||
|
||||
int
|
||||
nvkm_engine_new_(const struct nvkm_engine_func *func,
|
||||
struct nvkm_device *device, int index, u32 pmc_enable,
|
||||
bool enable, struct nvkm_engine **pengine)
|
||||
struct nvkm_device *device, int index, bool enable,
|
||||
struct nvkm_engine **pengine)
|
||||
{
|
||||
if (!(*pengine = kzalloc(sizeof(**pengine), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
return nvkm_engine_ctor(func, device, index, pmc_enable,
|
||||
enable, *pengine);
|
||||
return nvkm_engine_ctor(func, device, index, enable, *pengine);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <core/subdev.h>
|
||||
#include <core/device.h>
|
||||
#include <core/option.h>
|
||||
#include <subdev/mc.h>
|
||||
|
||||
static struct lock_class_key nvkm_subdev_lock_class[NVKM_SUBDEV_NR];
|
||||
|
||||
@ -50,6 +51,7 @@ nvkm_subdev_name[NVKM_SUBDEV_NR] = {
|
||||
[NVKM_SUBDEV_SECBOOT ] = "secboot",
|
||||
[NVKM_SUBDEV_THERM ] = "therm",
|
||||
[NVKM_SUBDEV_TIMER ] = "tmr",
|
||||
[NVKM_SUBDEV_TOP ] = "top",
|
||||
[NVKM_SUBDEV_VOLT ] = "volt",
|
||||
[NVKM_ENGINE_BSP ] = "bsp",
|
||||
[NVKM_ENGINE_CE0 ] = "ce0",
|
||||
@ -89,7 +91,6 @@ nvkm_subdev_fini(struct nvkm_subdev *subdev, bool suspend)
|
||||
{
|
||||
struct nvkm_device *device = subdev->device;
|
||||
const char *action = suspend ? "suspend" : "fini";
|
||||
u32 pmc_enable = subdev->pmc_enable;
|
||||
s64 time;
|
||||
|
||||
nvkm_trace(subdev, "%s running...\n", action);
|
||||
@ -104,11 +105,7 @@ nvkm_subdev_fini(struct nvkm_subdev *subdev, bool suspend)
|
||||
}
|
||||
}
|
||||
|
||||
if (pmc_enable) {
|
||||
nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
|
||||
nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);
|
||||
nvkm_rd32(device, 0x000200);
|
||||
}
|
||||
nvkm_mc_reset(device->mc, subdev->index);
|
||||
|
||||
time = ktime_to_us(ktime_get()) - time;
|
||||
nvkm_trace(subdev, "%s completed in %lldus\n", action, time);
|
||||
@ -193,14 +190,13 @@ nvkm_subdev_del(struct nvkm_subdev **psubdev)
|
||||
|
||||
void
|
||||
nvkm_subdev_ctor(const struct nvkm_subdev_func *func,
|
||||
struct nvkm_device *device, int index, u32 pmc_enable,
|
||||
struct nvkm_device *device, int index,
|
||||
struct nvkm_subdev *subdev)
|
||||
{
|
||||
const char *name = nvkm_subdev_name[index];
|
||||
subdev->func = func;
|
||||
subdev->device = device;
|
||||
subdev->index = index;
|
||||
subdev->pmc_enable = pmc_enable;
|
||||
|
||||
__mutex_init(&subdev->mutex, name, &nvkm_subdev_lock_class[index]);
|
||||
subdev->debug = nvkm_dbgopt(device->dbgopt, name);
|
||||
|
@ -27,7 +27,6 @@
|
||||
|
||||
static const struct nvkm_xtensa_func
|
||||
g84_bsp = {
|
||||
.pmc_enable = 0x04008000,
|
||||
.fifo_val = 0x1111,
|
||||
.unkd28 = 0x90044,
|
||||
.sclass = {
|
||||
|
@ -40,7 +40,6 @@ gf100_ce0 = {
|
||||
.code.size = sizeof(gf100_ce_code),
|
||||
.data.data = gf100_ce_data,
|
||||
.data.size = sizeof(gf100_ce_data),
|
||||
.pmc_enable = 0x00000040,
|
||||
.init = gf100_ce_init,
|
||||
.intr = gt215_ce_intr,
|
||||
.sclass = {
|
||||
@ -55,7 +54,6 @@ gf100_ce1 = {
|
||||
.code.size = sizeof(gf100_ce_code),
|
||||
.data.data = gf100_ce_data,
|
||||
.data.size = sizeof(gf100_ce_data),
|
||||
.pmc_enable = 0x00000080,
|
||||
.init = gf100_ce_init,
|
||||
.intr = gt215_ce_intr,
|
||||
.sclass = {
|
||||
|
@ -97,17 +97,5 @@ int
|
||||
gk104_ce_new(struct nvkm_device *device, int index,
|
||||
struct nvkm_engine **pengine)
|
||||
{
|
||||
if (index == NVKM_ENGINE_CE0) {
|
||||
return nvkm_engine_new_(&gk104_ce, device, index,
|
||||
0x00000040, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE1) {
|
||||
return nvkm_engine_new_(&gk104_ce, device, index,
|
||||
0x00000080, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE2) {
|
||||
return nvkm_engine_new_(&gk104_ce, device, index,
|
||||
0x00200000, true, pengine);
|
||||
}
|
||||
return -ENODEV;
|
||||
return nvkm_engine_new_(&gk104_ce, device, index, true, pengine);
|
||||
}
|
||||
|
@ -39,17 +39,5 @@ int
|
||||
gm107_ce_new(struct nvkm_device *device, int index,
|
||||
struct nvkm_engine **pengine)
|
||||
{
|
||||
if (index == NVKM_ENGINE_CE0) {
|
||||
return nvkm_engine_new_(&gm107_ce, device, index,
|
||||
0x00000040, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE1) {
|
||||
return nvkm_engine_new_(&gm107_ce, device, index,
|
||||
0x00000080, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE2) {
|
||||
return nvkm_engine_new_(&gm107_ce, device, index,
|
||||
0x00200000, true, pengine);
|
||||
}
|
||||
return -ENODEV;
|
||||
return nvkm_engine_new_(&gm107_ce, device, index, true, pengine);
|
||||
}
|
||||
|
@ -38,17 +38,5 @@ int
|
||||
gm200_ce_new(struct nvkm_device *device, int index,
|
||||
struct nvkm_engine **pengine)
|
||||
{
|
||||
if (index == NVKM_ENGINE_CE0) {
|
||||
return nvkm_engine_new_(&gm200_ce, device, index,
|
||||
0x00000040, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE1) {
|
||||
return nvkm_engine_new_(&gm200_ce, device, index,
|
||||
0x00000080, true, pengine);
|
||||
} else
|
||||
if (index == NVKM_ENGINE_CE2) {
|
||||
return nvkm_engine_new_(&gm200_ce, device, index,
|
||||
0x00200000, true, pengine);
|
||||
}
|
||||
return -ENODEV;
|
||||
return nvkm_engine_new_(&gm200_ce, device, index, true, pengine);
|
||||
}
|
||||
|
@ -67,7 +67,6 @@ gt215_ce = {
|
||||
.code.size = sizeof(gt215_ce_code),
|
||||
.data.data = gt215_ce_data,
|
||||
.data.size = sizeof(gt215_ce_data),
|
||||
.pmc_enable = 0x00802000,
|
||||
.intr = gt215_ce_intr,
|
||||
.sclass = {
|
||||
{ -1, -1, GT212_DMA },
|
||||
|
@ -130,6 +130,5 @@ int
|
||||
g84_cipher_new(struct nvkm_device *device, int index,
|
||||
struct nvkm_engine **pengine)
|
||||
{
|
||||
return nvkm_engine_new_(&g84_cipher, device, index,
|
||||
0x00004000, true, pengine);
|
||||
return nvkm_engine_new_(&g84_cipher, device, index, true, pengine);
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ nv11_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv11_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -190,7 +190,7 @@ nv17_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -212,7 +212,7 @@ nv18_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -256,7 +256,7 @@ nv1f_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -278,7 +278,7 @@ nv20_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -300,7 +300,7 @@ nv25_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -322,7 +322,7 @@ nv28_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -344,7 +344,7 @@ nv2a_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -366,7 +366,7 @@ nv30_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -388,7 +388,7 @@ nv31_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -411,7 +411,7 @@ nv34_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -434,7 +434,7 @@ nv35_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -456,7 +456,7 @@ nv36_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv04_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv04_pci_new,
|
||||
.timer = nv04_timer_new,
|
||||
@ -479,7 +479,7 @@ nv40_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -505,7 +505,7 @@ nv41_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -531,7 +531,7 @@ nv42_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -557,7 +557,7 @@ nv43_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -609,7 +609,7 @@ nv45_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv04_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -661,7 +661,7 @@ nv47_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -687,7 +687,7 @@ nv49_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -739,7 +739,7 @@ nv4b_chipset = {
|
||||
.gpio = nv10_gpio_new,
|
||||
.i2c = nv04_i2c_new,
|
||||
.imem = nv40_instmem_new,
|
||||
.mc = nv04_mc_new,
|
||||
.mc = nv17_mc_new,
|
||||
.mmu = nv41_mmu_new,
|
||||
.pci = nv40_pci_new,
|
||||
.therm = nv40_therm_new,
|
||||
@ -926,7 +926,7 @@ nv84_chipset = {
|
||||
.gpio = nv50_gpio_new,
|
||||
.i2c = nv50_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = nv50_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g84_pci_new,
|
||||
@ -958,7 +958,7 @@ nv86_chipset = {
|
||||
.gpio = nv50_gpio_new,
|
||||
.i2c = nv50_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = nv50_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g84_pci_new,
|
||||
@ -990,7 +990,7 @@ nv92_chipset = {
|
||||
.gpio = nv50_gpio_new,
|
||||
.i2c = nv50_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = nv50_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g84_pci_new,
|
||||
@ -1022,7 +1022,7 @@ nv94_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = nv50_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1054,7 +1054,7 @@ nv96_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = nv50_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1118,7 +1118,7 @@ nva0_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = nv50_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = g98_mc_new,
|
||||
.mc = g84_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1150,7 +1150,7 @@ nva3_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = g98_mc_new,
|
||||
.mc = gt215_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1184,7 +1184,7 @@ nva5_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = g98_mc_new,
|
||||
.mc = gt215_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1217,7 +1217,7 @@ nva8_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = g98_mc_new,
|
||||
.mc = gt215_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1314,7 +1314,7 @@ nvaf_chipset = {
|
||||
.gpio = g94_gpio_new,
|
||||
.i2c = g94_i2c_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = g98_mc_new,
|
||||
.mc = gt215_mc_new,
|
||||
.mmu = nv50_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = g94_pci_new,
|
||||
@ -1676,13 +1676,14 @@ nve4_chipset = {
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gk104_ltc_new,
|
||||
.mc = gf100_mc_new,
|
||||
.mc = gk104_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gk104_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1714,13 +1715,14 @@ nve6_chipset = {
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gk104_ltc_new,
|
||||
.mc = gf100_mc_new,
|
||||
.mc = gk104_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gk104_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1752,13 +1754,14 @@ nve7_chipset = {
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gk104_ltc_new,
|
||||
.mc = gf100_mc_new,
|
||||
.mc = gk104_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gk104_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1789,6 +1792,7 @@ nvea_chipset = {
|
||||
.mmu = gf100_mmu_new,
|
||||
.pmu = gk20a_pmu_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk20a_volt_new,
|
||||
.ce[2] = gk104_ce_new,
|
||||
.dma = gf119_dma_new,
|
||||
@ -1814,13 +1818,14 @@ nvf0_chipset = {
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gk104_ltc_new,
|
||||
.mc = gf100_mc_new,
|
||||
.mc = gk104_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gk110_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1851,13 +1856,14 @@ nvf1_chipset = {
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gk104_ltc_new,
|
||||
.mc = gf100_mc_new,
|
||||
.mc = gk104_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gk110_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1895,6 +1901,7 @@ nv106_chipset = {
|
||||
.pmu = gk208_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1932,6 +1939,7 @@ nv108_chipset = {
|
||||
.pmu = gk208_pmu_new,
|
||||
.therm = gf119_therm_new,
|
||||
.timer = nv41_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gk104_ce_new,
|
||||
.ce[1] = gk104_ce_new,
|
||||
@ -1969,6 +1977,41 @@ nv117_chipset = {
|
||||
.pmu = gm107_pmu_new,
|
||||
.therm = gm107_therm_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gm107_ce_new,
|
||||
.ce[2] = gm107_ce_new,
|
||||
.disp = gm107_disp_new,
|
||||
.dma = gf119_dma_new,
|
||||
.fifo = gm107_fifo_new,
|
||||
.gr = gm107_gr_new,
|
||||
.sw = gf100_sw_new,
|
||||
};
|
||||
|
||||
static const struct nvkm_device_chip
|
||||
nv118_chipset = {
|
||||
.name = "GM108",
|
||||
.bar = gf100_bar_new,
|
||||
.bios = nvkm_bios_new,
|
||||
.bus = gf100_bus_new,
|
||||
.clk = gk104_clk_new,
|
||||
.devinit = gm107_devinit_new,
|
||||
.fb = gm107_fb_new,
|
||||
.fuse = gm107_fuse_new,
|
||||
.gpio = gk104_gpio_new,
|
||||
.i2c = gf119_i2c_new,
|
||||
.ibus = gk104_ibus_new,
|
||||
.iccsense = gf100_iccsense_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.ltc = gm107_ltc_new,
|
||||
.mc = gk20a_mc_new,
|
||||
.mmu = gf100_mmu_new,
|
||||
.mxm = nv50_mxm_new,
|
||||
.pci = gk104_pci_new,
|
||||
.pmu = gm107_pmu_new,
|
||||
.therm = gm107_therm_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gm107_ce_new,
|
||||
.ce[2] = gm107_ce_new,
|
||||
@ -1986,7 +2029,7 @@ nv120_chipset = {
|
||||
.bios = nvkm_bios_new,
|
||||
.bus = gf100_bus_new,
|
||||
.devinit = gm200_devinit_new,
|
||||
.fb = gm107_fb_new,
|
||||
.fb = gm200_fb_new,
|
||||
.fuse = gm107_fuse_new,
|
||||
.gpio = gk104_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
@ -2001,6 +2044,7 @@ nv120_chipset = {
|
||||
.pmu = gm107_pmu_new,
|
||||
.secboot = gm200_secboot_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gm200_ce_new,
|
||||
.ce[1] = gm200_ce_new,
|
||||
@ -2019,7 +2063,7 @@ nv124_chipset = {
|
||||
.bios = nvkm_bios_new,
|
||||
.bus = gf100_bus_new,
|
||||
.devinit = gm200_devinit_new,
|
||||
.fb = gm107_fb_new,
|
||||
.fb = gm200_fb_new,
|
||||
.fuse = gm107_fuse_new,
|
||||
.gpio = gk104_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
@ -2034,6 +2078,7 @@ nv124_chipset = {
|
||||
.pmu = gm107_pmu_new,
|
||||
.secboot = gm200_secboot_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gm200_ce_new,
|
||||
.ce[1] = gm200_ce_new,
|
||||
@ -2052,7 +2097,7 @@ nv126_chipset = {
|
||||
.bios = nvkm_bios_new,
|
||||
.bus = gf100_bus_new,
|
||||
.devinit = gm200_devinit_new,
|
||||
.fb = gm107_fb_new,
|
||||
.fb = gm200_fb_new,
|
||||
.fuse = gm107_fuse_new,
|
||||
.gpio = gk104_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
@ -2067,6 +2112,7 @@ nv126_chipset = {
|
||||
.pmu = gm107_pmu_new,
|
||||
.secboot = gm200_secboot_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.volt = gk104_volt_new,
|
||||
.ce[0] = gm200_ce_new,
|
||||
.ce[1] = gm200_ce_new,
|
||||
@ -2093,6 +2139,7 @@ nv12b_chipset = {
|
||||
.mmu = gf100_mmu_new,
|
||||
.secboot = gm20b_secboot_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.top = gk104_top_new,
|
||||
.ce[2] = gm200_ce_new,
|
||||
.volt = gm20b_volt_new,
|
||||
.dma = gf119_dma_new,
|
||||
@ -2150,6 +2197,7 @@ nvkm_device_subdev(struct nvkm_device *device, int index)
|
||||
_(SECBOOT , device->secboot , &device->secboot->subdev);
|
||||
_(THERM , device->therm , &device->therm->subdev);
|
||||
_(TIMER , device->timer , &device->timer->subdev);
|
||||
_(TOP , device->top , &device->top->subdev);
|
||||
_(VOLT , device->volt , &device->volt->subdev);
|
||||
#undef _
|
||||
default:
|
||||
@ -2523,6 +2571,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
case 0x106: device->chip = &nv106_chipset; break;
|
||||
case 0x108: device->chip = &nv108_chipset; break;
|
||||
case 0x117: device->chip = &nv117_chipset; break;
|
||||
case 0x118: device->chip = &nv118_chipset; break;
|
||||
case 0x120: device->chip = &nv120_chipset; break;
|
||||
case 0x124: device->chip = &nv124_chipset; break;
|
||||
case 0x126: device->chip = &nv126_chipset; break;
|
||||
@ -2604,6 +2653,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
_(NVKM_SUBDEV_SECBOOT , secboot);
|
||||
_(NVKM_SUBDEV_THERM , therm);
|
||||
_(NVKM_SUBDEV_TIMER , timer);
|
||||
_(NVKM_SUBDEV_TOP , top);
|
||||
_(NVKM_SUBDEV_VOLT , volt);
|
||||
_(NVKM_ENGINE_BSP , bsp);
|
||||
_(NVKM_ENGINE_CE0 , ce[0]);
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <subdev/pmu.h>
|
||||
#include <subdev/therm.h>
|
||||
#include <subdev/timer.h>
|
||||
#include <subdev/top.h>
|
||||
#include <subdev/volt.h>
|
||||
#include <subdev/secboot.h>
|
||||
|
||||
|
@ -298,8 +298,7 @@ nvkm_disp_ctor(const struct nvkm_disp_func *func, struct nvkm_device *device,
|
||||
disp->func = func;
|
||||
disp->head.nr = heads;
|
||||
|
||||
ret = nvkm_engine_ctor(&nvkm_disp, device, index, 0,
|
||||
true, &disp->engine);
|
||||
ret = nvkm_engine_ctor(&nvkm_disp, device, index, true, &disp->engine);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -152,6 +152,5 @@ nvkm_dma_new_(const struct nvkm_dma_func *func, struct nvkm_device *device,
|
||||
return -ENOMEM;
|
||||
dma->func = func;
|
||||
|
||||
return nvkm_engine_ctor(&nvkm_dma, device, index,
|
||||
0, true, &dma->engine);
|
||||
return nvkm_engine_ctor(&nvkm_dma, device, index, true, &dma->engine);
|
||||
}
|
||||
|
@ -348,6 +348,6 @@ nvkm_falcon_new_(const struct nvkm_falcon_func *func,
|
||||
falcon->data.size = func->data.size;
|
||||
*pengine = &falcon->engine;
|
||||
|
||||
return nvkm_engine_ctor(&nvkm_falcon, device, index, func->pmc_enable,
|
||||
return nvkm_engine_ctor(&nvkm_falcon, device, index,
|
||||
enable, &falcon->engine);
|
||||
}
|
||||
|
@ -178,6 +178,17 @@ nvkm_fifo_class_get(struct nvkm_oclass *oclass, int index,
|
||||
const struct nvkm_fifo_chan_oclass *sclass;
|
||||
int c = 0;
|
||||
|
||||
if (fifo->func->class_get) {
|
||||
int ret = fifo->func->class_get(fifo, index, &sclass);
|
||||
if (ret == 0) {
|
||||
oclass->base = sclass->base;
|
||||
oclass->engn = sclass;
|
||||
*class = &nvkm_fifo_class;
|
||||
return 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
while ((sclass = fifo->func->chan[c])) {
|
||||
if (c++ == index) {
|
||||
oclass->base = sclass->base;
|
||||
@ -261,8 +272,7 @@ nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device,
|
||||
fifo->nr = nr;
|
||||
bitmap_clear(fifo->mask, 0, fifo->nr);
|
||||
|
||||
ret = nvkm_engine_ctor(&nvkm_fifo, device, index, 0x00000100,
|
||||
true, &fifo->engine);
|
||||
ret = nvkm_engine_ctor(&nvkm_fifo, device, index, true, &fifo->engine);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -25,21 +25,36 @@
|
||||
#include "changk104.h"
|
||||
|
||||
#include <core/client.h>
|
||||
#include <core/enum.h>
|
||||
#include <core/gpuobj.h>
|
||||
#include <subdev/bar.h>
|
||||
#include <subdev/top.h>
|
||||
#include <engine/sw.h>
|
||||
|
||||
#include <nvif/class.h>
|
||||
|
||||
void
|
||||
static int
|
||||
gk104_fifo_class_get(struct nvkm_fifo *base, int index,
|
||||
const struct nvkm_fifo_chan_oclass **psclass)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
int c = 0;
|
||||
|
||||
while ((*psclass = fifo->func->chan[c])) {
|
||||
if (c++ == index)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
static void
|
||||
gk104_fifo_uevent_fini(struct nvkm_fifo *fifo)
|
||||
{
|
||||
struct nvkm_device *device = fifo->engine.subdev.device;
|
||||
nvkm_mask(device, 0x002140, 0x80000000, 0x00000000);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
gk104_fifo_uevent_init(struct nvkm_fifo *fifo)
|
||||
{
|
||||
struct nvkm_device *device = fifo->engine.subdev.device;
|
||||
@ -267,111 +282,6 @@ gk104_fifo_intr_dropped_fault(struct gk104_fifo *fifo)
|
||||
nvkm_error(subdev, "DROPPED_MMU_FAULT %08x\n", stat);
|
||||
}
|
||||
|
||||
static const struct nvkm_enum
|
||||
gk104_fifo_fault_engine[] = {
|
||||
{ 0x00, "GR", NULL, NVKM_ENGINE_GR },
|
||||
{ 0x03, "IFB", NULL, NVKM_ENGINE_IFB },
|
||||
{ 0x04, "BAR1", NULL, NVKM_SUBDEV_BAR },
|
||||
{ 0x05, "BAR3", NULL, NVKM_SUBDEV_INSTMEM },
|
||||
{ 0x07, "PBDMA0", NULL, NVKM_ENGINE_FIFO },
|
||||
{ 0x08, "PBDMA1", NULL, NVKM_ENGINE_FIFO },
|
||||
{ 0x09, "PBDMA2", NULL, NVKM_ENGINE_FIFO },
|
||||
{ 0x10, "MSVLD", NULL, NVKM_ENGINE_MSVLD },
|
||||
{ 0x11, "MSPPP", NULL, NVKM_ENGINE_MSPPP },
|
||||
{ 0x13, "PERF" },
|
||||
{ 0x14, "MSPDEC", NULL, NVKM_ENGINE_MSPDEC },
|
||||
{ 0x15, "CE0", NULL, NVKM_ENGINE_CE0 },
|
||||
{ 0x16, "CE1", NULL, NVKM_ENGINE_CE1 },
|
||||
{ 0x17, "PMU" },
|
||||
{ 0x19, "MSENC", NULL, NVKM_ENGINE_MSENC },
|
||||
{ 0x1b, "CE2", NULL, NVKM_ENGINE_CE2 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_enum
|
||||
gk104_fifo_fault_reason[] = {
|
||||
{ 0x00, "PDE" },
|
||||
{ 0x01, "PDE_SIZE" },
|
||||
{ 0x02, "PTE" },
|
||||
{ 0x03, "VA_LIMIT_VIOLATION" },
|
||||
{ 0x04, "UNBOUND_INST_BLOCK" },
|
||||
{ 0x05, "PRIV_VIOLATION" },
|
||||
{ 0x06, "RO_VIOLATION" },
|
||||
{ 0x07, "WO_VIOLATION" },
|
||||
{ 0x08, "PITCH_MASK_VIOLATION" },
|
||||
{ 0x09, "WORK_CREATION" },
|
||||
{ 0x0a, "UNSUPPORTED_APERTURE" },
|
||||
{ 0x0b, "COMPRESSION_FAILURE" },
|
||||
{ 0x0c, "UNSUPPORTED_KIND" },
|
||||
{ 0x0d, "REGION_VIOLATION" },
|
||||
{ 0x0e, "BOTH_PTES_VALID" },
|
||||
{ 0x0f, "INFO_TYPE_POISONED" },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_enum
|
||||
gk104_fifo_fault_hubclient[] = {
|
||||
{ 0x00, "VIP" },
|
||||
{ 0x01, "CE0" },
|
||||
{ 0x02, "CE1" },
|
||||
{ 0x03, "DNISO" },
|
||||
{ 0x04, "FE" },
|
||||
{ 0x05, "FECS" },
|
||||
{ 0x06, "HOST" },
|
||||
{ 0x07, "HOST_CPU" },
|
||||
{ 0x08, "HOST_CPU_NB" },
|
||||
{ 0x09, "ISO" },
|
||||
{ 0x0a, "MMU" },
|
||||
{ 0x0b, "MSPDEC" },
|
||||
{ 0x0c, "MSPPP" },
|
||||
{ 0x0d, "MSVLD" },
|
||||
{ 0x0e, "NISO" },
|
||||
{ 0x0f, "P2P" },
|
||||
{ 0x10, "PD" },
|
||||
{ 0x11, "PERF" },
|
||||
{ 0x12, "PMU" },
|
||||
{ 0x13, "RASTERTWOD" },
|
||||
{ 0x14, "SCC" },
|
||||
{ 0x15, "SCC_NB" },
|
||||
{ 0x16, "SEC" },
|
||||
{ 0x17, "SSYNC" },
|
||||
{ 0x18, "GR_CE" },
|
||||
{ 0x19, "CE2" },
|
||||
{ 0x1a, "XV" },
|
||||
{ 0x1b, "MMU_NB" },
|
||||
{ 0x1c, "MSENC" },
|
||||
{ 0x1d, "DFALCON" },
|
||||
{ 0x1e, "SKED" },
|
||||
{ 0x1f, "AFALCON" },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_enum
|
||||
gk104_fifo_fault_gpcclient[] = {
|
||||
{ 0x00, "L1_0" }, { 0x01, "T1_0" }, { 0x02, "PE_0" },
|
||||
{ 0x03, "L1_1" }, { 0x04, "T1_1" }, { 0x05, "PE_1" },
|
||||
{ 0x06, "L1_2" }, { 0x07, "T1_2" }, { 0x08, "PE_2" },
|
||||
{ 0x09, "L1_3" }, { 0x0a, "T1_3" }, { 0x0b, "PE_3" },
|
||||
{ 0x0c, "RAST" },
|
||||
{ 0x0d, "GCC" },
|
||||
{ 0x0e, "GPCCS" },
|
||||
{ 0x0f, "PROP_0" },
|
||||
{ 0x10, "PROP_1" },
|
||||
{ 0x11, "PROP_2" },
|
||||
{ 0x12, "PROP_3" },
|
||||
{ 0x13, "L1_4" }, { 0x14, "T1_4" }, { 0x15, "PE_4" },
|
||||
{ 0x16, "L1_5" }, { 0x17, "T1_5" }, { 0x18, "PE_5" },
|
||||
{ 0x19, "L1_6" }, { 0x1a, "T1_6" }, { 0x1b, "PE_6" },
|
||||
{ 0x1c, "L1_7" }, { 0x1d, "T1_7" }, { 0x1e, "PE_7" },
|
||||
{ 0x1f, "GPM" },
|
||||
{ 0x20, "LTP_UTLB_0" },
|
||||
{ 0x21, "LTP_UTLB_1" },
|
||||
{ 0x22, "LTP_UTLB_2" },
|
||||
{ 0x23, "LTP_UTLB_3" },
|
||||
{ 0x24, "GPC_RGG_UTLB" },
|
||||
{}
|
||||
};
|
||||
|
||||
static void
|
||||
gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit)
|
||||
{
|
||||
@ -390,14 +300,14 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit)
|
||||
struct nvkm_engine *engine = NULL;
|
||||
struct nvkm_fifo_chan *chan;
|
||||
unsigned long flags;
|
||||
char gpcid[8] = "";
|
||||
char gpcid[8] = "", en[16] = "";
|
||||
|
||||
er = nvkm_enum_find(gk104_fifo_fault_reason, reason);
|
||||
eu = nvkm_enum_find(gk104_fifo_fault_engine, unit);
|
||||
er = nvkm_enum_find(fifo->func->fault.reason, reason);
|
||||
eu = nvkm_enum_find(fifo->func->fault.engine, unit);
|
||||
if (hub) {
|
||||
ec = nvkm_enum_find(gk104_fifo_fault_hubclient, client);
|
||||
ec = nvkm_enum_find(fifo->func->fault.hubclient, client);
|
||||
} else {
|
||||
ec = nvkm_enum_find(gk104_fifo_fault_gpcclient, client);
|
||||
ec = nvkm_enum_find(fifo->func->fault.gpcclient, client);
|
||||
snprintf(gpcid, sizeof(gpcid), "GPC%d/", gpc);
|
||||
}
|
||||
|
||||
@ -418,13 +328,27 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit)
|
||||
}
|
||||
}
|
||||
|
||||
if (eu == NULL) {
|
||||
enum nvkm_devidx engidx = nvkm_top_fault(device->top, unit);
|
||||
if (engidx < NVKM_SUBDEV_NR) {
|
||||
const char *src = nvkm_subdev_name[engidx];
|
||||
char *dst = en;
|
||||
do {
|
||||
*dst++ = toupper(*src++);
|
||||
} while(*src);
|
||||
engine = nvkm_device_engine(device, engidx);
|
||||
}
|
||||
} else {
|
||||
snprintf(en, sizeof(en), "%s", eu->name);
|
||||
}
|
||||
|
||||
chan = nvkm_fifo_chan_inst(&fifo->base, (u64)inst << 12, &flags);
|
||||
|
||||
nvkm_error(subdev,
|
||||
"%s fault at %010llx engine %02x [%s] client %02x [%s%s] "
|
||||
"reason %02x [%s] on channel %d [%010llx %s]\n",
|
||||
write ? "write" : "read", (u64)vahi << 32 | valo,
|
||||
unit, eu ? eu->name : "", client, gpcid, ec ? ec->name : "",
|
||||
unit, en, client, gpcid, ec ? ec->name : "",
|
||||
reason, er ? er->name : "", chan ? chan->chid : -1,
|
||||
(u64)inst << 12,
|
||||
chan ? chan->object.client->name : "unknown");
|
||||
@ -557,7 +481,7 @@ gk104_fifo_intr_engine(struct gk104_fifo *fifo)
|
||||
nvkm_fifo_uevent(&fifo->base);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
gk104_fifo_intr(struct nvkm_fifo *base)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
@ -649,7 +573,7 @@ gk104_fifo_intr(struct nvkm_fifo *base)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
gk104_fifo_fini(struct nvkm_fifo *base)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
@ -659,13 +583,15 @@ gk104_fifo_fini(struct nvkm_fifo *base)
|
||||
nvkm_mask(device, 0x002140, 0x10000000, 0x10000000);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
gk104_fifo_oneinit(struct nvkm_fifo *base)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
|
||||
struct nvkm_device *device = subdev->device;
|
||||
int ret, i;
|
||||
struct nvkm_top *top = device->top;
|
||||
int engn, runl, pbid, ret, i, j;
|
||||
enum nvkm_devidx engidx;
|
||||
u32 *map;
|
||||
|
||||
/* Determine number of PBDMAs by checking valid enable bits. */
|
||||
@ -680,86 +606,26 @@ gk104_fifo_oneinit(struct nvkm_fifo *base)
|
||||
for (i = 0; i < fifo->pbdma_nr; i++)
|
||||
map[i] = nvkm_rd32(device, 0x002390 + (i * 0x04));
|
||||
|
||||
/* Read device topology from HW. */
|
||||
for (i = 0; i < 64; i++) {
|
||||
int type = -1, pbid = -1, engidx = -1;
|
||||
int engn = -1, runl = -1, intr = -1, mcen = -1;
|
||||
int fault = -1, j;
|
||||
u32 data, addr = 0;
|
||||
|
||||
do {
|
||||
data = nvkm_rd32(device, 0x022700 + (i * 0x04));
|
||||
nvkm_trace(subdev, "%02x: %08x\n", i, data);
|
||||
switch (data & 0x00000003) {
|
||||
case 0x00000000: /* NOT_VALID */
|
||||
continue;
|
||||
case 0x00000001: /* DATA */
|
||||
addr = (data & 0x00fff000);
|
||||
fault = (data & 0x000000f8) >> 3;
|
||||
break;
|
||||
case 0x00000002: /* ENUM */
|
||||
if (data & 0x00000020)
|
||||
engn = (data & 0x3c000000) >> 26;
|
||||
if (data & 0x00000010)
|
||||
runl = (data & 0x01e00000) >> 21;
|
||||
if (data & 0x00000008)
|
||||
intr = (data & 0x000f8000) >> 15;
|
||||
if (data & 0x00000004)
|
||||
mcen = (data & 0x00003e00) >> 9;
|
||||
break;
|
||||
case 0x00000003: /* ENGINE_TYPE */
|
||||
type = (data & 0x7ffffffc) >> 2;
|
||||
break;
|
||||
}
|
||||
} while ((data & 0x80000000) && ++i < 64);
|
||||
|
||||
if (!data)
|
||||
continue;
|
||||
|
||||
/* Determine runlist configuration from topology device info. */
|
||||
i = 0;
|
||||
while ((int)(engidx = nvkm_top_engine(top, i++, &runl, &engn)) >= 0) {
|
||||
/* Determine which PBDMA handles requests for this engine. */
|
||||
for (j = 0; runl >= 0 && j < fifo->pbdma_nr; j++) {
|
||||
for (j = 0, pbid = -1; j < fifo->pbdma_nr; j++) {
|
||||
if (map[j] & (1 << runl)) {
|
||||
pbid = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Translate engine type to NVKM engine identifier. */
|
||||
switch (type) {
|
||||
case 0x00000000: engidx = NVKM_ENGINE_GR; break;
|
||||
case 0x00000001: engidx = NVKM_ENGINE_CE0; break;
|
||||
case 0x00000002: engidx = NVKM_ENGINE_CE1; break;
|
||||
case 0x00000003: engidx = NVKM_ENGINE_CE2; break;
|
||||
case 0x00000008: engidx = NVKM_ENGINE_MSPDEC; break;
|
||||
case 0x00000009: engidx = NVKM_ENGINE_MSPPP; break;
|
||||
case 0x0000000a: engidx = NVKM_ENGINE_MSVLD; break;
|
||||
case 0x0000000b: engidx = NVKM_ENGINE_MSENC; break;
|
||||
case 0x0000000c: engidx = NVKM_ENGINE_VIC; break;
|
||||
case 0x0000000d: engidx = NVKM_ENGINE_SEC; break;
|
||||
case 0x0000000e: engidx = NVKM_ENGINE_NVENC0; break;
|
||||
case 0x0000000f: engidx = NVKM_ENGINE_NVENC1; break;
|
||||
case 0x00000010: engidx = NVKM_ENGINE_NVDEC; break;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
nvkm_debug(subdev, "engine %2d: runlist %2d pbdma %2d\n",
|
||||
engn, runl, pbid);
|
||||
|
||||
nvkm_debug(subdev, "%02x (%8s): engine %2d runlist %2d "
|
||||
"pbdma %2d intr %2d reset %2d "
|
||||
"fault %2d addr %06x\n", type,
|
||||
engidx < 0 ? NULL : nvkm_subdev_name[engidx],
|
||||
engn, runl, pbid, intr, mcen, fault, addr);
|
||||
|
||||
/* Mark the engine as supported if everything checks out. */
|
||||
if (engn >= 0 && runl >= 0) {
|
||||
fifo->engine[engn].engine = engidx < 0 ? NULL :
|
||||
nvkm_device_engine(device, engidx);
|
||||
fifo->engine[engn].runl = runl;
|
||||
fifo->engine[engn].pbid = pbid;
|
||||
fifo->engine_nr = max(fifo->engine_nr, engn + 1);
|
||||
fifo->runlist[runl].engm |= 1 << engn;
|
||||
fifo->runlist_nr = max(fifo->runlist_nr, runl + 1);
|
||||
}
|
||||
fifo->engine[engn].engine = nvkm_device_engine(device, engidx);
|
||||
fifo->engine[engn].runl = runl;
|
||||
fifo->engine[engn].pbid = pbid;
|
||||
fifo->engine_nr = max(fifo->engine_nr, engn + 1);
|
||||
fifo->runlist[runl].engm |= 1 << engn;
|
||||
fifo->runlist_nr = max(fifo->runlist_nr, runl + 1);
|
||||
}
|
||||
|
||||
kfree(map);
|
||||
@ -796,7 +662,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
gk104_fifo_init(struct nvkm_fifo *base)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
@ -825,7 +691,7 @@ gk104_fifo_init(struct nvkm_fifo *base)
|
||||
nvkm_wr32(device, 0x002140, 0x7fffffff);
|
||||
}
|
||||
|
||||
void *
|
||||
static void *
|
||||
gk104_fifo_dtor(struct nvkm_fifo *base)
|
||||
{
|
||||
struct gk104_fifo *fifo = gk104_fifo(base);
|
||||
@ -842,22 +708,8 @@ gk104_fifo_dtor(struct nvkm_fifo *base)
|
||||
return fifo;
|
||||
}
|
||||
|
||||
int
|
||||
gk104_fifo_new_(const struct nvkm_fifo_func *func, struct nvkm_device *device,
|
||||
int index, int nr, struct nvkm_fifo **pfifo)
|
||||
{
|
||||
struct gk104_fifo *fifo;
|
||||
|
||||
if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
INIT_WORK(&fifo->recover.work, gk104_fifo_recover_work);
|
||||
*pfifo = &fifo->base;
|
||||
|
||||
return nvkm_fifo_ctor(func, device, index, nr, &fifo->base);
|
||||
}
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
gk104_fifo = {
|
||||
gk104_fifo_ = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
@ -865,6 +717,145 @@ gk104_fifo = {
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.class_get = gk104_fifo_class_get,
|
||||
};
|
||||
|
||||
int
|
||||
gk104_fifo_new_(const struct gk104_fifo_func *func, struct nvkm_device *device,
|
||||
int index, int nr, struct nvkm_fifo **pfifo)
|
||||
{
|
||||
struct gk104_fifo *fifo;
|
||||
|
||||
if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
fifo->func = func;
|
||||
INIT_WORK(&fifo->recover.work, gk104_fifo_recover_work);
|
||||
*pfifo = &fifo->base;
|
||||
|
||||
return nvkm_fifo_ctor(&gk104_fifo_, device, index, nr, &fifo->base);
|
||||
}
|
||||
|
||||
const struct nvkm_enum
|
||||
gk104_fifo_fault_engine[] = {
|
||||
{ 0x00, "GR", NULL, NVKM_ENGINE_GR },
|
||||
{ 0x01, "DISPLAY" },
|
||||
{ 0x02, "CAPTURE" },
|
||||
{ 0x03, "IFB", NULL, NVKM_ENGINE_IFB },
|
||||
{ 0x04, "BAR1", NULL, NVKM_SUBDEV_BAR },
|
||||
{ 0x05, "BAR2", NULL, NVKM_SUBDEV_INSTMEM },
|
||||
{ 0x06, "SCHED" },
|
||||
{ 0x07, "HOST0" },
|
||||
{ 0x08, "HOST1" },
|
||||
{ 0x09, "HOST2" },
|
||||
{ 0x0a, "HOST3" },
|
||||
{ 0x0b, "HOST4" },
|
||||
{ 0x0c, "HOST5" },
|
||||
{ 0x0d, "HOST6" },
|
||||
{ 0x0e, "HOST7" },
|
||||
{ 0x0f, "HOSTSR" },
|
||||
{ 0x10, "MSVLD", NULL, NVKM_ENGINE_MSVLD },
|
||||
{ 0x11, "MSPPP", NULL, NVKM_ENGINE_MSPPP },
|
||||
{ 0x13, "PERF" },
|
||||
{ 0x14, "MSPDEC", NULL, NVKM_ENGINE_MSPDEC },
|
||||
{ 0x15, "CE0", NULL, NVKM_ENGINE_CE0 },
|
||||
{ 0x16, "CE1", NULL, NVKM_ENGINE_CE1 },
|
||||
{ 0x17, "PMU" },
|
||||
{ 0x18, "PTP" },
|
||||
{ 0x19, "MSENC", NULL, NVKM_ENGINE_MSENC },
|
||||
{ 0x1b, "CE2", NULL, NVKM_ENGINE_CE2 },
|
||||
{}
|
||||
};
|
||||
|
||||
const struct nvkm_enum
|
||||
gk104_fifo_fault_reason[] = {
|
||||
{ 0x00, "PDE" },
|
||||
{ 0x01, "PDE_SIZE" },
|
||||
{ 0x02, "PTE" },
|
||||
{ 0x03, "VA_LIMIT_VIOLATION" },
|
||||
{ 0x04, "UNBOUND_INST_BLOCK" },
|
||||
{ 0x05, "PRIV_VIOLATION" },
|
||||
{ 0x06, "RO_VIOLATION" },
|
||||
{ 0x07, "WO_VIOLATION" },
|
||||
{ 0x08, "PITCH_MASK_VIOLATION" },
|
||||
{ 0x09, "WORK_CREATION" },
|
||||
{ 0x0a, "UNSUPPORTED_APERTURE" },
|
||||
{ 0x0b, "COMPRESSION_FAILURE" },
|
||||
{ 0x0c, "UNSUPPORTED_KIND" },
|
||||
{ 0x0d, "REGION_VIOLATION" },
|
||||
{ 0x0e, "BOTH_PTES_VALID" },
|
||||
{ 0x0f, "INFO_TYPE_POISONED" },
|
||||
{}
|
||||
};
|
||||
|
||||
const struct nvkm_enum
|
||||
gk104_fifo_fault_hubclient[] = {
|
||||
{ 0x00, "VIP" },
|
||||
{ 0x01, "CE0" },
|
||||
{ 0x02, "CE1" },
|
||||
{ 0x03, "DNISO" },
|
||||
{ 0x04, "FE" },
|
||||
{ 0x05, "FECS" },
|
||||
{ 0x06, "HOST" },
|
||||
{ 0x07, "HOST_CPU" },
|
||||
{ 0x08, "HOST_CPU_NB" },
|
||||
{ 0x09, "ISO" },
|
||||
{ 0x0a, "MMU" },
|
||||
{ 0x0b, "MSPDEC" },
|
||||
{ 0x0c, "MSPPP" },
|
||||
{ 0x0d, "MSVLD" },
|
||||
{ 0x0e, "NISO" },
|
||||
{ 0x0f, "P2P" },
|
||||
{ 0x10, "PD" },
|
||||
{ 0x11, "PERF" },
|
||||
{ 0x12, "PMU" },
|
||||
{ 0x13, "RASTERTWOD" },
|
||||
{ 0x14, "SCC" },
|
||||
{ 0x15, "SCC_NB" },
|
||||
{ 0x16, "SEC" },
|
||||
{ 0x17, "SSYNC" },
|
||||
{ 0x18, "GR_CE" },
|
||||
{ 0x19, "CE2" },
|
||||
{ 0x1a, "XV" },
|
||||
{ 0x1b, "MMU_NB" },
|
||||
{ 0x1c, "MSENC" },
|
||||
{ 0x1d, "DFALCON" },
|
||||
{ 0x1e, "SKED" },
|
||||
{ 0x1f, "AFALCON" },
|
||||
{}
|
||||
};
|
||||
|
||||
const struct nvkm_enum
|
||||
gk104_fifo_fault_gpcclient[] = {
|
||||
{ 0x00, "L1_0" }, { 0x01, "T1_0" }, { 0x02, "PE_0" },
|
||||
{ 0x03, "L1_1" }, { 0x04, "T1_1" }, { 0x05, "PE_1" },
|
||||
{ 0x06, "L1_2" }, { 0x07, "T1_2" }, { 0x08, "PE_2" },
|
||||
{ 0x09, "L1_3" }, { 0x0a, "T1_3" }, { 0x0b, "PE_3" },
|
||||
{ 0x0c, "RAST" },
|
||||
{ 0x0d, "GCC" },
|
||||
{ 0x0e, "GPCCS" },
|
||||
{ 0x0f, "PROP_0" },
|
||||
{ 0x10, "PROP_1" },
|
||||
{ 0x11, "PROP_2" },
|
||||
{ 0x12, "PROP_3" },
|
||||
{ 0x13, "L1_4" }, { 0x14, "T1_4" }, { 0x15, "PE_4" },
|
||||
{ 0x16, "L1_5" }, { 0x17, "T1_5" }, { 0x18, "PE_5" },
|
||||
{ 0x19, "L1_6" }, { 0x1a, "T1_6" }, { 0x1b, "PE_6" },
|
||||
{ 0x1c, "L1_7" }, { 0x1d, "T1_7" }, { 0x1e, "PE_7" },
|
||||
{ 0x1f, "GPM" },
|
||||
{ 0x20, "LTP_UTLB_0" },
|
||||
{ 0x21, "LTP_UTLB_1" },
|
||||
{ 0x22, "LTP_UTLB_2" },
|
||||
{ 0x23, "LTP_UTLB_3" },
|
||||
{ 0x24, "GPC_RGG_UTLB" },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct gk104_fifo_func
|
||||
gk104_fifo = {
|
||||
.fault.engine = gk104_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gk104_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -3,10 +3,12 @@
|
||||
#define gk104_fifo(p) container_of((p), struct gk104_fifo, base)
|
||||
#include "priv.h"
|
||||
|
||||
#include <core/enum.h>
|
||||
#include <subdev/mmu.h>
|
||||
|
||||
struct gk104_fifo_chan;
|
||||
struct gk104_fifo {
|
||||
const struct gk104_fifo_func *func;
|
||||
struct nvkm_fifo base;
|
||||
|
||||
struct {
|
||||
@ -39,15 +41,19 @@ struct gk104_fifo {
|
||||
} user;
|
||||
};
|
||||
|
||||
int gk104_fifo_new_(const struct nvkm_fifo_func *, struct nvkm_device *,
|
||||
struct gk104_fifo_func {
|
||||
struct {
|
||||
const struct nvkm_enum *engine;
|
||||
const struct nvkm_enum *reason;
|
||||
const struct nvkm_enum *hubclient;
|
||||
const struct nvkm_enum *gpcclient;
|
||||
} fault;
|
||||
|
||||
const struct nvkm_fifo_chan_oclass *chan[];
|
||||
};
|
||||
|
||||
int gk104_fifo_new_(const struct gk104_fifo_func *, struct nvkm_device *,
|
||||
int index, int nr, struct nvkm_fifo **);
|
||||
void *gk104_fifo_dtor(struct nvkm_fifo *);
|
||||
int gk104_fifo_oneinit(struct nvkm_fifo *);
|
||||
void gk104_fifo_init(struct nvkm_fifo *);
|
||||
void gk104_fifo_fini(struct nvkm_fifo *);
|
||||
void gk104_fifo_intr(struct nvkm_fifo *);
|
||||
void gk104_fifo_uevent_init(struct nvkm_fifo *);
|
||||
void gk104_fifo_uevent_fini(struct nvkm_fifo *);
|
||||
void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *);
|
||||
void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *);
|
||||
void gk104_fifo_runlist_commit(struct gk104_fifo *, int runl);
|
||||
@ -70,4 +76,11 @@ gk104_fifo_engine_subdev(int engine)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
extern const struct nvkm_enum gk104_fifo_fault_engine[];
|
||||
extern const struct nvkm_enum gk104_fifo_fault_reason[];
|
||||
extern const struct nvkm_enum gk104_fifo_fault_hubclient[];
|
||||
extern const struct nvkm_enum gk104_fifo_fault_gpcclient[];
|
||||
|
||||
extern const struct nvkm_enum gm107_fifo_fault_engine[];
|
||||
#endif
|
||||
|
@ -24,15 +24,12 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
static const struct gk104_fifo_func
|
||||
gk110_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gk104_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gk110_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -24,15 +24,12 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
static const struct gk104_fifo_func
|
||||
gk208_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gk104_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gk104_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -22,15 +22,12 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
static const struct gk104_fifo_func
|
||||
gk20a_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gk104_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gk104_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -24,15 +24,35 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
const struct nvkm_enum
|
||||
gm107_fifo_fault_engine[] = {
|
||||
{ 0x01, "DISPLAY" },
|
||||
{ 0x02, "CAPTURE" },
|
||||
{ 0x03, "IFB", NULL, NVKM_ENGINE_IFB },
|
||||
{ 0x04, "BAR1", NULL, NVKM_SUBDEV_BAR },
|
||||
{ 0x05, "BAR2", NULL, NVKM_SUBDEV_INSTMEM },
|
||||
{ 0x06, "SCHED" },
|
||||
{ 0x07, "HOST0" },
|
||||
{ 0x08, "HOST1" },
|
||||
{ 0x09, "HOST2" },
|
||||
{ 0x0a, "HOST3" },
|
||||
{ 0x0b, "HOST4" },
|
||||
{ 0x0c, "HOST5" },
|
||||
{ 0x0d, "HOST6" },
|
||||
{ 0x0e, "HOST7" },
|
||||
{ 0x0f, "HOSTSR" },
|
||||
{ 0x13, "PERF" },
|
||||
{ 0x17, "PMU" },
|
||||
{ 0x18, "PTP" },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct gk104_fifo_func
|
||||
gm107_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gm107_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gk110_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -24,15 +24,12 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
static const struct gk104_fifo_func
|
||||
gm200_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gm107_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gm200_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -22,15 +22,12 @@
|
||||
#include "gk104.h"
|
||||
#include "changk104.h"
|
||||
|
||||
static const struct nvkm_fifo_func
|
||||
static const struct gk104_fifo_func
|
||||
gm20b_fifo = {
|
||||
.dtor = gk104_fifo_dtor,
|
||||
.oneinit = gk104_fifo_oneinit,
|
||||
.init = gk104_fifo_init,
|
||||
.fini = gk104_fifo_fini,
|
||||
.intr = gk104_fifo_intr,
|
||||
.uevent_init = gk104_fifo_uevent_init,
|
||||
.uevent_fini = gk104_fifo_uevent_fini,
|
||||
.fault.engine = gm107_fifo_fault_engine,
|
||||
.fault.reason = gk104_fifo_fault_reason,
|
||||
.fault.hubclient = gk104_fifo_fault_hubclient,
|
||||
.fault.gpcclient = gk104_fifo_fault_gpcclient,
|
||||
.chan = {
|
||||
&gm200_fifo_gpfifo_oclass,
|
||||
NULL
|
||||
|
@ -7,6 +7,7 @@ int nvkm_fifo_ctor(const struct nvkm_fifo_func *, struct nvkm_device *,
|
||||
int index, int nr, struct nvkm_fifo *);
|
||||
void nvkm_fifo_uevent(struct nvkm_fifo *);
|
||||
|
||||
struct nvkm_fifo_chan_oclass;
|
||||
struct nvkm_fifo_func {
|
||||
void *(*dtor)(struct nvkm_fifo *);
|
||||
int (*oneinit)(struct nvkm_fifo *);
|
||||
@ -17,6 +18,8 @@ struct nvkm_fifo_func {
|
||||
void (*start)(struct nvkm_fifo *, unsigned long *);
|
||||
void (*uevent_init)(struct nvkm_fifo *);
|
||||
void (*uevent_fini)(struct nvkm_fifo *);
|
||||
int (*class_get)(struct nvkm_fifo *, int index,
|
||||
const struct nvkm_fifo_chan_oclass **);
|
||||
const struct nvkm_fifo_chan_oclass *chan[];
|
||||
};
|
||||
|
||||
|
@ -128,9 +128,8 @@ nvkm_gr = {
|
||||
|
||||
int
|
||||
nvkm_gr_ctor(const struct nvkm_gr_func *func, struct nvkm_device *device,
|
||||
int index, u32 pmc_enable, bool enable, struct nvkm_gr *gr)
|
||||
int index, bool enable, struct nvkm_gr *gr)
|
||||
{
|
||||
gr->func = func;
|
||||
return nvkm_engine_ctor(&nvkm_gr, device, index, pmc_enable,
|
||||
enable, &gr->engine);
|
||||
return nvkm_engine_ctor(&nvkm_gr, device, index, enable, &gr->engine);
|
||||
}
|
||||
|
@ -1181,20 +1181,20 @@ gf100_grctx_generate_r418bb8(struct gf100_gr *gr)
|
||||
|
||||
/* GPC_BROADCAST */
|
||||
nvkm_wr32(device, 0x418bb8, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr);
|
||||
gr->screen_tile_row_offset);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x418b08 + (i * 4), data[i]);
|
||||
|
||||
/* GPC_BROADCAST.TP_BROADCAST */
|
||||
nvkm_wr32(device, 0x419bd0, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr | data2[0]);
|
||||
gr->screen_tile_row_offset | data2[0]);
|
||||
nvkm_wr32(device, 0x419be4, data2[1]);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x419b00 + (i * 4), data[i]);
|
||||
|
||||
/* UNK78xx */
|
||||
nvkm_wr32(device, 0x4078bc, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr);
|
||||
gr->screen_tile_row_offset);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x40780c + (i * 4), data[i]);
|
||||
}
|
||||
@ -1238,6 +1238,7 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
u32 idle_timeout;
|
||||
|
||||
nvkm_mc_unk260(device->mc, 0);
|
||||
|
||||
@ -1247,7 +1248,7 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gf100_gr_mmio(gr, grctx->tpc);
|
||||
gf100_gr_mmio(gr, grctx->ppc);
|
||||
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->bundle(info);
|
||||
grctx->pagepool(info);
|
||||
@ -1261,7 +1262,7 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gf100_grctx_generate_r406800(gr);
|
||||
|
||||
gf100_gr_icmd(gr, grctx->icmd);
|
||||
nvkm_wr32(device, 0x404154, 0x00000400);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_mthd(gr, grctx->mthd);
|
||||
nvkm_mc_unk260(device->mc, 1);
|
||||
}
|
||||
|
@ -81,8 +81,6 @@ void gk104_grctx_generate_bundle(struct gf100_grctx *);
|
||||
void gk104_grctx_generate_pagepool(struct gf100_grctx *);
|
||||
void gk104_grctx_generate_unkn(struct gf100_gr *);
|
||||
void gk104_grctx_generate_r418bb8(struct gf100_gr *);
|
||||
void gk104_grctx_generate_rop_active_fbps(struct gf100_gr *);
|
||||
|
||||
|
||||
void gm107_grctx_generate_bundle(struct gf100_grctx *);
|
||||
void gm107_grctx_generate_pagepool(struct gf100_grctx *);
|
||||
@ -98,7 +96,6 @@ void gm107_grctx_generate_pagepool(struct gf100_grctx *);
|
||||
void gm107_grctx_generate_attrib(struct gf100_grctx *);
|
||||
|
||||
extern const struct gf100_grctx_func gm200_grctx;
|
||||
void gm200_grctx_generate_main(struct gf100_gr *, struct gf100_grctx *);
|
||||
void gm200_grctx_generate_tpcid(struct gf100_gr *);
|
||||
void gm200_grctx_generate_405b60(struct gf100_gr *);
|
||||
|
||||
|
@ -223,6 +223,7 @@ gf117_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
u32 idle_timeout;
|
||||
int i;
|
||||
|
||||
nvkm_mc_unk260(device->mc, 0);
|
||||
@ -233,7 +234,7 @@ gf117_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gf100_gr_mmio(gr, grctx->tpc);
|
||||
gf100_gr_mmio(gr, grctx->ppc);
|
||||
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->bundle(info);
|
||||
grctx->pagepool(info);
|
||||
@ -250,7 +251,7 @@ gf117_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
nvkm_wr32(device, 0x4064d0 + (i * 0x04), 0x00000000);
|
||||
|
||||
gf100_gr_icmd(gr, grctx->icmd);
|
||||
nvkm_wr32(device, 0x404154, 0x00000400);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_mthd(gr, grctx->mthd);
|
||||
nvkm_mc_unk260(device->mc, 1);
|
||||
}
|
||||
|
@ -924,38 +924,30 @@ gk104_grctx_generate_r418bb8(struct gf100_gr *gr)
|
||||
|
||||
/* GPC_BROADCAST */
|
||||
nvkm_wr32(device, 0x418bb8, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr);
|
||||
gr->screen_tile_row_offset);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x418b08 + (i * 4), data[i]);
|
||||
|
||||
/* GPC_BROADCAST.TP_BROADCAST */
|
||||
nvkm_wr32(device, 0x41bfd0, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr | data2[0]);
|
||||
gr->screen_tile_row_offset | data2[0]);
|
||||
nvkm_wr32(device, 0x41bfe4, data2[1]);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x41bf00 + (i * 4), data[i]);
|
||||
|
||||
/* UNK78xx */
|
||||
nvkm_wr32(device, 0x4078bc, (gr->tpc_total << 8) |
|
||||
gr->magic_not_rop_nr);
|
||||
gr->screen_tile_row_offset);
|
||||
for (i = 0; i < 6; i++)
|
||||
nvkm_wr32(device, 0x40780c + (i * 4), data[i]);
|
||||
}
|
||||
|
||||
void
|
||||
gk104_grctx_generate_rop_active_fbps(struct gf100_gr *gr)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const u32 fbp_count = nvkm_rd32(device, 0x120074);
|
||||
nvkm_mask(device, 0x408850, 0x0000000f, fbp_count); /* zrop */
|
||||
nvkm_mask(device, 0x408958, 0x0000000f, fbp_count); /* crop */
|
||||
}
|
||||
|
||||
void
|
||||
gk104_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
u32 idle_timeout;
|
||||
int i;
|
||||
|
||||
nvkm_mc_unk260(device->mc, 0);
|
||||
@ -966,7 +958,7 @@ gk104_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gf100_gr_mmio(gr, grctx->tpc);
|
||||
gf100_gr_mmio(gr, grctx->ppc);
|
||||
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->bundle(info);
|
||||
grctx->pagepool(info);
|
||||
@ -982,11 +974,10 @@ gk104_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
nvkm_wr32(device, 0x4064d0 + (i * 0x04), 0x00000000);
|
||||
|
||||
nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
|
||||
gk104_grctx_generate_rop_active_fbps(gr);
|
||||
nvkm_mask(device, 0x419f78, 0x00000001, 0x00000000);
|
||||
|
||||
gf100_gr_icmd(gr, grctx->icmd);
|
||||
nvkm_wr32(device, 0x404154, 0x00000400);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_mthd(gr, grctx->mthd);
|
||||
nvkm_mc_unk260(device->mc, 1);
|
||||
|
||||
|
@ -29,15 +29,14 @@ gk20a_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
int idle_timeout_save;
|
||||
u32 idle_timeout;
|
||||
int i;
|
||||
|
||||
gf100_gr_mmio(gr, gr->fuc_sw_ctx);
|
||||
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
idle_timeout_save = nvkm_rd32(device, 0x404154);
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->attrib(info);
|
||||
|
||||
@ -53,13 +52,11 @@ gk20a_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
|
||||
nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
|
||||
|
||||
gk104_grctx_generate_rop_active_fbps(gr);
|
||||
|
||||
nvkm_mask(device, 0x5044b0, 0x08000000, 0x08000000);
|
||||
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
nvkm_wr32(device, 0x404154, idle_timeout_save);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
gf100_gr_mthd(gr, gr->fuc_method);
|
||||
|
@ -920,13 +920,15 @@ gm107_grctx_generate_attrib(struct gf100_grctx *info)
|
||||
const u32 bs = attrib * gr->ppc_tpc_nr[gpc][ppc];
|
||||
const u32 u = 0x418ea0 + (n * 0x04);
|
||||
const u32 o = PPC_UNIT(gpc, ppc, 0);
|
||||
if (!(gr->ppc_mask[gpc] & (1 << ppc)))
|
||||
continue;
|
||||
mmio_wr32(info, o + 0xc0, bs);
|
||||
mmio_wr32(info, o + 0xf4, bo);
|
||||
bo += grctx->attrib_nr_max * gr->ppc_tpc_nr[gpc][ppc];
|
||||
mmio_wr32(info, o + 0xe4, as);
|
||||
mmio_wr32(info, o + 0xf8, ao);
|
||||
ao += grctx->alpha_nr_max * gr->ppc_tpc_nr[gpc][ppc];
|
||||
mmio_wr32(info, u, ((bs / 3 /*XXX*/) << 16) | bs);
|
||||
mmio_wr32(info, u, ((bs / 3) << 16) | bs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -957,6 +959,7 @@ gm107_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
u32 idle_timeout;
|
||||
int i;
|
||||
|
||||
gf100_gr_mmio(gr, grctx->hub);
|
||||
@ -965,7 +968,7 @@ gm107_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gf100_gr_mmio(gr, grctx->tpc);
|
||||
gf100_gr_mmio(gr, grctx->ppc);
|
||||
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->bundle(info);
|
||||
grctx->pagepool(info);
|
||||
@ -984,10 +987,8 @@ gm107_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
|
||||
nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
|
||||
|
||||
gk104_grctx_generate_rop_active_fbps(gr);
|
||||
|
||||
gf100_gr_icmd(gr, grctx->icmd);
|
||||
nvkm_wr32(device, 0x404154, 0x00000400);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_mthd(gr, grctx->mthd);
|
||||
|
||||
nvkm_mask(device, 0x419e00, 0x00808080, 0x00808080);
|
||||
|
@ -33,7 +33,7 @@ gm200_grctx_generate_tpcid(struct gf100_gr *gr)
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
int gpc, tpc, id;
|
||||
|
||||
for (tpc = 0, id = 0; tpc < 4; tpc++) {
|
||||
for (tpc = 0, id = 0; tpc < TPC_MAX_PER_GPC; tpc++) {
|
||||
for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
|
||||
if (tpc < gr->tpc_nr[gpc]) {
|
||||
nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), id);
|
||||
@ -45,15 +45,6 @@ gm200_grctx_generate_tpcid(struct gf100_gr *gr)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gm200_grctx_generate_rop_active_fbps(struct gf100_gr *gr)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const u32 fbp_count = nvkm_rd32(device, 0x12006c);
|
||||
nvkm_mask(device, 0x408850, 0x0000000f, fbp_count); /* zrop */
|
||||
nvkm_mask(device, 0x408958, 0x0000000f, fbp_count); /* crop */
|
||||
}
|
||||
|
||||
void
|
||||
gm200_grctx_generate_405b60(struct gf100_gr *gr)
|
||||
{
|
||||
@ -86,17 +77,17 @@ gm200_grctx_generate_405b60(struct gf100_gr *gr)
|
||||
nvkm_wr32(device, 0x405ba0 + (i * 4), gpcs[i]);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
gm200_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
u32 tmp;
|
||||
u32 idle_timeout, tmp;
|
||||
int i;
|
||||
|
||||
gf100_gr_mmio(gr, gr->fuc_sw_ctx);
|
||||
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->bundle(info);
|
||||
grctx->pagepool(info);
|
||||
@ -113,8 +104,6 @@ gm200_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
|
||||
nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
|
||||
|
||||
gm200_grctx_generate_rop_active_fbps(gr);
|
||||
|
||||
for (tmp = 0, i = 0; i < gr->gpc_nr; i++)
|
||||
tmp |= ((1 << gr->tpc_nr[i]) - 1) << (i * 4);
|
||||
nvkm_wr32(device, 0x4041c4, tmp);
|
||||
@ -122,7 +111,7 @@ gm200_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
gm200_grctx_generate_405b60(gr);
|
||||
|
||||
gf100_gr_icmd(gr, gr->fuc_bundle);
|
||||
nvkm_wr32(device, 0x404154, 0x00000800);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_mthd(gr, gr->fuc_method);
|
||||
|
||||
nvkm_mask(device, 0x418e94, 0xffffffff, 0xc4230000);
|
||||
|
@ -40,15 +40,14 @@ gm20b_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
{
|
||||
struct nvkm_device *device = gr->base.engine.subdev.device;
|
||||
const struct gf100_grctx_func *grctx = gr->func->grctx;
|
||||
int idle_timeout_save;
|
||||
u32 idle_timeout;
|
||||
int i, tmp;
|
||||
|
||||
gf100_gr_mmio(gr, gr->fuc_sw_ctx);
|
||||
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
idle_timeout_save = nvkm_rd32(device, 0x404154);
|
||||
nvkm_wr32(device, 0x404154, 0x00000000);
|
||||
idle_timeout = nvkm_mask(device, 0x404154, 0xffffffff, 0x00000000);
|
||||
|
||||
grctx->attrib(info);
|
||||
|
||||
@ -63,7 +62,6 @@ gm20b_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
|
||||
nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
|
||||
|
||||
gk104_grctx_generate_rop_active_fbps(gr);
|
||||
nvkm_wr32(device, 0x408908, nvkm_rd32(device, 0x410108) | 0x80000000);
|
||||
|
||||
for (tmp = 0, i = 0; i < gr->gpc_nr; i++)
|
||||
@ -74,7 +72,7 @@ gm20b_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
|
||||
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
nvkm_wr32(device, 0x404154, idle_timeout_save);
|
||||
nvkm_wr32(device, 0x404154, idle_timeout);
|
||||
gf100_gr_wait_idle(gr);
|
||||
|
||||
gf100_gr_mthd(gr, gr->fuc_method);
|
||||
|
@ -291,12 +291,13 @@ init:
|
||||
// Main program loop, very simple, sleeps until woken up by the interrupt
|
||||
// handler, pulls a command from the queue and executes its handler
|
||||
//
|
||||
main:
|
||||
bset $flags $p0
|
||||
wait:
|
||||
sleep $p0
|
||||
bset $flags $p0
|
||||
main:
|
||||
mov $r13 #cmd_queue
|
||||
call(queue_get)
|
||||
bra $p1 #main
|
||||
bra $p1 #wait
|
||||
|
||||
// 0x0000-0x0003 are all context transfers
|
||||
cmpu b32 $r14 0x04
|
||||
|
@ -370,9 +370,10 @@ uint32_t gf100_grgpc_code[] = {
|
||||
0xf11f29f0,
|
||||
0xf0080007,
|
||||
0x02d00203,
|
||||
/* 0x04bb: main */
|
||||
/* 0x04bb: wait */
|
||||
0xf404bd00,
|
||||
0x28f40031,
|
||||
0x31f40028,
|
||||
/* 0x04c1: main */
|
||||
0x1cd7f000,
|
||||
0xf43921f4,
|
||||
0xe4b0f401,
|
||||
@ -384,10 +385,10 @@ uint32_t gf100_grgpc_code[] = {
|
||||
0x0018fe05,
|
||||
0x05b421f5,
|
||||
/* 0x04eb: main_not_ctx_xfer */
|
||||
0x94d30ef4,
|
||||
0x94d90ef4,
|
||||
0xf5f010ef,
|
||||
0x7e21f501,
|
||||
0xc60ef403,
|
||||
0xcc0ef403,
|
||||
/* 0x04f8: ih */
|
||||
0x80f900f9,
|
||||
0xf90188fe,
|
||||
|
@ -397,9 +397,10 @@ uint32_t gf117_grgpc_code[] = {
|
||||
0x080007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0002,
|
||||
/* 0x0508: main */
|
||||
0xf40031f4,
|
||||
0xd7f00028,
|
||||
/* 0x0508: wait */
|
||||
0xf40028f4,
|
||||
/* 0x050e: main */
|
||||
0xd7f00031,
|
||||
0x3921f424,
|
||||
0xb0f401f4,
|
||||
0x18f404e4,
|
||||
@ -409,13 +410,13 @@ uint32_t gf117_grgpc_code[] = {
|
||||
0xfd01e4b6,
|
||||
0x18fe051e,
|
||||
0x0121f500,
|
||||
0xd30ef406,
|
||||
0xd90ef406,
|
||||
/* 0x0538: main_not_ctx_xfer */
|
||||
0xf010ef94,
|
||||
0x21f501f5,
|
||||
0x0ef4037e,
|
||||
/* 0x0545: ih */
|
||||
0xf900f9c6,
|
||||
0xf900f9cc,
|
||||
0x0188fe80,
|
||||
0x90f980f9,
|
||||
0xb0f9a0f9,
|
||||
|
@ -397,9 +397,10 @@ uint32_t gk104_grgpc_code[] = {
|
||||
0x080007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0002,
|
||||
/* 0x0508: main */
|
||||
0xf40031f4,
|
||||
0xd7f00028,
|
||||
/* 0x0508: wait */
|
||||
0xf40028f4,
|
||||
/* 0x050e: main */
|
||||
0xd7f00031,
|
||||
0x3921f424,
|
||||
0xb0f401f4,
|
||||
0x18f404e4,
|
||||
@ -409,13 +410,13 @@ uint32_t gk104_grgpc_code[] = {
|
||||
0xfd01e4b6,
|
||||
0x18fe051e,
|
||||
0x0121f500,
|
||||
0xd30ef406,
|
||||
0xd90ef406,
|
||||
/* 0x0538: main_not_ctx_xfer */
|
||||
0xf010ef94,
|
||||
0x21f501f5,
|
||||
0x0ef4037e,
|
||||
/* 0x0545: ih */
|
||||
0xf900f9c6,
|
||||
0xf900f9cc,
|
||||
0x0188fe80,
|
||||
0x90f980f9,
|
||||
0xb0f9a0f9,
|
||||
|
@ -397,9 +397,10 @@ uint32_t gk110_grgpc_code[] = {
|
||||
0x300007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0002,
|
||||
/* 0x0508: main */
|
||||
0xf40031f4,
|
||||
0xd7f00028,
|
||||
/* 0x0508: wait */
|
||||
0xf40028f4,
|
||||
/* 0x050e: main */
|
||||
0xd7f00031,
|
||||
0x3921f424,
|
||||
0xb0f401f4,
|
||||
0x18f404e4,
|
||||
@ -409,13 +410,13 @@ uint32_t gk110_grgpc_code[] = {
|
||||
0xfd01e4b6,
|
||||
0x18fe051e,
|
||||
0x0121f500,
|
||||
0xd30ef406,
|
||||
0xd90ef406,
|
||||
/* 0x0538: main_not_ctx_xfer */
|
||||
0xf010ef94,
|
||||
0x21f501f5,
|
||||
0x0ef4037e,
|
||||
/* 0x0545: ih */
|
||||
0xf900f9c6,
|
||||
0xf900f9cc,
|
||||
0x0188fe80,
|
||||
0x90f980f9,
|
||||
0xb0f9a0f9,
|
||||
|
@ -349,9 +349,10 @@ uint32_t gk208_grgpc_code[] = {
|
||||
0x801f29f0,
|
||||
0xf6023000,
|
||||
0x04bd0002,
|
||||
/* 0x0448: main */
|
||||
0xf40031f4,
|
||||
0x240d0028,
|
||||
/* 0x0448: wait */
|
||||
0xf40028f4,
|
||||
/* 0x044e: main */
|
||||
0x240d0031,
|
||||
0x0000377e,
|
||||
0xb0f401f4,
|
||||
0x18f404e4,
|
||||
@ -362,10 +363,10 @@ uint32_t gk208_grgpc_code[] = {
|
||||
0x0018fe05,
|
||||
0x00051f7e,
|
||||
/* 0x0477: main_not_ctx_xfer */
|
||||
0x94d40ef4,
|
||||
0x94da0ef4,
|
||||
0xf5f010ef,
|
||||
0x02f87e01,
|
||||
0xc70ef400,
|
||||
0xcd0ef400,
|
||||
/* 0x0484: ih */
|
||||
0x80f900f9,
|
||||
0xf90188fe,
|
||||
|
@ -427,9 +427,10 @@ uint32_t gm107_grgpc_code[] = {
|
||||
0x1f29f024,
|
||||
0x02300080,
|
||||
0xbd0002f6,
|
||||
/* 0x0571: main */
|
||||
0x0031f404,
|
||||
0x0d0028f4,
|
||||
/* 0x0571: wait */
|
||||
0x0028f404,
|
||||
/* 0x0577: main */
|
||||
0x0d0031f4,
|
||||
0x00377e24,
|
||||
0xf401f400,
|
||||
0xf404e4b0,
|
||||
@ -439,13 +440,13 @@ uint32_t gm107_grgpc_code[] = {
|
||||
0xfd01e4b6,
|
||||
0x18fe051e,
|
||||
0x06487e00,
|
||||
0xd40ef400,
|
||||
0xda0ef400,
|
||||
/* 0x05a0: main_not_ctx_xfer */
|
||||
0xf010ef94,
|
||||
0xf87e01f5,
|
||||
0x0ef40002,
|
||||
/* 0x05ad: ih */
|
||||
0xf900f9c7,
|
||||
0xf900f9cd,
|
||||
0x0188fe80,
|
||||
0x90f980f9,
|
||||
0xb0f9a0f9,
|
||||
|
@ -218,13 +218,14 @@ init:
|
||||
// Main program loop, very simple, sleeps until woken up by the interrupt
|
||||
// handler, pulls a command from the queue and executes its handler
|
||||
//
|
||||
main:
|
||||
wait:
|
||||
// sleep until we have something to do
|
||||
bset $flags $p0
|
||||
sleep $p0
|
||||
bset $flags $p0
|
||||
main:
|
||||
mov $r13 #cmd_queue
|
||||
call(queue_get)
|
||||
bra $p1 #main
|
||||
bra $p1 #wait
|
||||
|
||||
// context switch, requested by GPU?
|
||||
cmpu b32 $r14 0x4001
|
||||
|
@ -584,9 +584,10 @@ uint32_t gf100_grhub_code[] = {
|
||||
0x080007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0001,
|
||||
/* 0x0564: main */
|
||||
0xf40031f4,
|
||||
0xd7f00028,
|
||||
/* 0x0564: wait */
|
||||
0xf40028f4,
|
||||
/* 0x056a: main */
|
||||
0xd7f00031,
|
||||
0x3921f410,
|
||||
0xb1f401f4,
|
||||
0xf54001e4,
|
||||
@ -650,7 +651,7 @@ uint32_t gf100_grhub_code[] = {
|
||||
0x170007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0009,
|
||||
0xff080ef5,
|
||||
0xff0e0ef5,
|
||||
/* 0x0660: main_not_ctx_switch */
|
||||
0xf401e4b0,
|
||||
0xf2b90d1b,
|
||||
@ -675,12 +676,12 @@ uint32_t gf100_grhub_code[] = {
|
||||
0xf501f5f0,
|
||||
0xf5037e21,
|
||||
/* 0x06b3: main_done */
|
||||
0xbdfeb50e,
|
||||
0xbdfebb0e,
|
||||
0x1f29f024,
|
||||
0x080007f1,
|
||||
0xd00203f0,
|
||||
0x04bd0002,
|
||||
0xfea00ef5,
|
||||
0xfea60ef5,
|
||||
/* 0x06c8: ih */
|
||||
0x80f900f9,
|
||||
0xf90188fe,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user