Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2c48821 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'linux-4.6' of git://github.com/skeggsb/linux into drm-next

- GM20x secure boot support (hence, acceleration, finally \o/)
- GM200 support
- GM20B clock driver
- Support for power sensors on some GPUs
- Various other fixes all over the place

* 'linux-4.6' of git://github.com/skeggsb/linux: (95 commits)
  drm/nouveau/clk/gm20b: add basic driver
  drm/nouveau/clk/gk20a: share reusable structures/functions
  drm/nouveau/clk/gk20a: set lowest frequency during init()
  drm/nouveau/clk/gk20a: split gk20a_clk_new()
  drm/nouveau/clk/gk20a: abstract pl_to_div
  drm/nouveau/clk/gk20a: put mnp values into their own struct
  drm/nouveau/clk/gk20a: emit parent rate as debug message
  drm/nouveau/clk/gk20a: only restore divider to 1:1 if needed
  drm/nouveau/clk/gk20a: only compute n_lo if needed
  drm/nouveau/clk/gk20a: fix VCO bit mask
  drm/nouveau/clk/gk20a: rename enable/disable functions
  drm/nouveau/clk/gk20a: reorganize variables in gk20a_pllg_calc_mnp()
  drm/nouveau/clk/gk20a: convert parameters to Khz
  drm/nouveau/volt: add GM20B driver
  drm/nouveau/volt/gk20a: split constructor
  drm/nouveau/volt/gk20a: share reusable members & functions
  drm/nouveau/ce/gm107: expose MaxwellDmaCopyA
  drm/nouveau/fifo/gm107: KeplerChannelGpfifoB, and 2048 channels
  drm/nouveau/fifo/gk110: expose KeplerChannelGpfifoB
  drm/nouveau/fifo/gk104: submit NOP after all PBDMA_INTR_0, not just DEVICE
  ...
parents 67d1c0a2 52829d4f
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -3,19 +3,27 @@

struct kepler_channel_gpfifo_a_v0 {
	__u8  version;
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_GR                               0x01
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPDEC                           0x02
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPPP                            0x04
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSVLD                            0x08
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE0                              0x10
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE1                              0x20
#define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_ENC                              0x40
	__u8  engine;
	__u8  pad01[5];
	__u16 chid;
#define NVA06F_V0_ENGINE_SW                                          0x00000001
#define NVA06F_V0_ENGINE_GR                                          0x00000002
#define NVA06F_V0_ENGINE_SEC                                         0x00000004
#define NVA06F_V0_ENGINE_MSVLD                                       0x00000010
#define NVA06F_V0_ENGINE_MSPDEC                                      0x00000020
#define NVA06F_V0_ENGINE_MSPPP                                       0x00000040
#define NVA06F_V0_ENGINE_MSENC                                       0x00000080
#define NVA06F_V0_ENGINE_VIC                                         0x00000100
#define NVA06F_V0_ENGINE_NVDEC                                       0x00000200
#define NVA06F_V0_ENGINE_NVENC0                                      0x00000400
#define NVA06F_V0_ENGINE_NVENC1                                      0x00000800
#define NVA06F_V0_ENGINE_CE0                                         0x00010000
#define NVA06F_V0_ENGINE_CE1                                         0x00020000
#define NVA06F_V0_ENGINE_CE2                                         0x00040000
	__u32 engines;
	__u32 ilength;
	__u64 ioffset;
	__u64 vm;
};

#define KEPLER_CHANNEL_GPFIFO_A_V0_NTFY_UEVENT                             0x00
#define NVA06F_V0_NTFY_UEVENT                                              0x00
#endif
+3 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#define G82_CHANNEL_GPFIFO                            /* cl826f.h */ 0x0000826f
#define FERMI_CHANNEL_GPFIFO                          /* cl906f.h */ 0x0000906f
#define KEPLER_CHANNEL_GPFIFO_A                       /* cla06f.h */ 0x0000a06f
#define KEPLER_CHANNEL_GPFIFO_B                       /* cla06f.h */ 0x0000a16f
#define MAXWELL_CHANNEL_GPFIFO_A                      /* cla06f.h */ 0x0000b06f

#define NV50_DISP                                     /* cl5070.h */ 0x00005070
@@ -48,7 +49,7 @@
#define GK104_DISP                                    /* cl5070.h */ 0x00009170
#define GK110_DISP                                    /* cl5070.h */ 0x00009270
#define GM107_DISP                                    /* cl5070.h */ 0x00009470
#define GM204_DISP                                    /* cl5070.h */ 0x00009570
#define GM200_DISP                                    /* cl5070.h */ 0x00009570

#define NV31_MPEG                                                    0x00003174
#define G82_MPEG                                                     0x00008274
@@ -84,7 +85,7 @@
#define GK104_DISP_CORE_CHANNEL_DMA                   /* cl507d.h */ 0x0000917d
#define GK110_DISP_CORE_CHANNEL_DMA                   /* cl507d.h */ 0x0000927d
#define GM107_DISP_CORE_CHANNEL_DMA                   /* cl507d.h */ 0x0000947d
#define GM204_DISP_CORE_CHANNEL_DMA                   /* cl507d.h */ 0x0000957d
#define GM200_DISP_CORE_CHANNEL_DMA                   /* cl507d.h */ 0x0000957d

#define NV50_DISP_OVERLAY_CHANNEL_DMA                 /* cl507e.h */ 0x0000507e
#define G82_DISP_OVERLAY_CHANNEL_DMA                  /* cl507e.h */ 0x0000827e
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ u64 nvif_device_time(struct nvif_device *);
#define nvxx_gpio(a) nvxx_device(a)->gpio
#define nvxx_clk(a) nvxx_device(a)->clk
#define nvxx_i2c(a) nvxx_device(a)->i2c
#define nvxx_iccsense(a) nvxx_device(a)->iccsense
#define nvxx_therm(a) nvxx_device(a)->therm
#define nvxx_volt(a) nvxx_device(a)->volt

+73 −54
Original line number Diff line number Diff line
@@ -22,30 +22,41 @@ enum nvkm_devidx {
	NVKM_SUBDEV_BAR,
	NVKM_SUBDEV_PMU,
	NVKM_SUBDEV_VOLT,
	NVKM_SUBDEV_ICCSENSE,
	NVKM_SUBDEV_THERM,
	NVKM_SUBDEV_CLK,
	NVKM_SUBDEV_SECBOOT,

	NVKM_ENGINE_DMAOBJ,
	NVKM_ENGINE_IFB,
	NVKM_ENGINE_FIFO,
	NVKM_ENGINE_SW,
	NVKM_ENGINE_GR,
	NVKM_ENGINE_MPEG,
	NVKM_ENGINE_ME,
	NVKM_ENGINE_VP,
	NVKM_ENGINE_CIPHER,
	NVKM_ENGINE_BSP,
	NVKM_ENGINE_MSPPP,

	NVKM_ENGINE_CE0,
	NVKM_ENGINE_CE1,
	NVKM_ENGINE_CE2,
	NVKM_ENGINE_VIC,
	NVKM_ENGINE_MSENC,
	NVKM_ENGINE_CE_LAST = NVKM_ENGINE_CE2,

	NVKM_ENGINE_CIPHER,
	NVKM_ENGINE_DISP,
	NVKM_ENGINE_PM,
	NVKM_ENGINE_DMAOBJ,
	NVKM_ENGINE_FIFO,
	NVKM_ENGINE_GR,
	NVKM_ENGINE_IFB,
	NVKM_ENGINE_ME,
	NVKM_ENGINE_MPEG,
	NVKM_ENGINE_MSENC,
	NVKM_ENGINE_MSPDEC,
	NVKM_ENGINE_MSPPP,
	NVKM_ENGINE_MSVLD,

	NVKM_ENGINE_NVENC0,
	NVKM_ENGINE_NVENC1,
	NVKM_ENGINE_NVENC_LAST = NVKM_ENGINE_NVENC1,

	NVKM_ENGINE_NVDEC,
	NVKM_ENGINE_PM,
	NVKM_ENGINE_SEC,
	NVKM_ENGINE_MSPDEC,
	NVKM_ENGINE_SW,
	NVKM_ENGINE_VIC,
	NVKM_ENGINE_VP,

	NVKM_SUBDEV_NR
};
@@ -109,6 +120,7 @@ struct nvkm_device {
	struct nvkm_gpio *gpio;
	struct nvkm_i2c *i2c;
	struct nvkm_subdev *ibus;
	struct nvkm_iccsense *iccsense;
	struct nvkm_instmem *imem;
	struct nvkm_ltc *ltc;
	struct nvkm_mc *mc;
@@ -116,6 +128,7 @@ struct nvkm_device {
	struct nvkm_subdev *mxm;
	struct nvkm_pci *pci;
	struct nvkm_pmu *pmu;
	struct nvkm_secboot *secboot;
	struct nvkm_therm *therm;
	struct nvkm_timer *timer;
	struct nvkm_volt *volt;
@@ -134,6 +147,8 @@ struct nvkm_device {
	struct nvkm_engine *mspdec;
	struct nvkm_engine *msppp;
	struct nvkm_engine *msvld;
	struct nvkm_engine *nvenc[2];
	struct nvkm_engine *nvdec;
	struct nvkm_pm *pm;
	struct nvkm_engine *sec;
	struct nvkm_sw *sw;
@@ -174,6 +189,7 @@ struct nvkm_device_chip {
	int (*gpio    )(struct nvkm_device *, int idx, struct nvkm_gpio **);
	int (*i2c     )(struct nvkm_device *, int idx, struct nvkm_i2c **);
	int (*ibus    )(struct nvkm_device *, int idx, struct nvkm_subdev **);
	int (*iccsense)(struct nvkm_device *, int idx, struct nvkm_iccsense **);
	int (*imem    )(struct nvkm_device *, int idx, struct nvkm_instmem **);
	int (*ltc     )(struct nvkm_device *, int idx, struct nvkm_ltc **);
	int (*mc      )(struct nvkm_device *, int idx, struct nvkm_mc **);
@@ -181,6 +197,7 @@ struct nvkm_device_chip {
	int (*mxm     )(struct nvkm_device *, int idx, struct nvkm_subdev **);
	int (*pci     )(struct nvkm_device *, int idx, struct nvkm_pci **);
	int (*pmu     )(struct nvkm_device *, int idx, struct nvkm_pmu **);
	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 (*volt    )(struct nvkm_device *, int idx, struct nvkm_volt **);
@@ -199,6 +216,8 @@ struct nvkm_device_chip {
	int (*mspdec  )(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*msppp   )(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*msvld   )(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*nvenc[2])(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*nvdec   )(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*pm      )(struct nvkm_device *, int idx, struct nvkm_pm **);
	int (*sec     )(struct nvkm_device *, int idx, struct nvkm_engine **);
	int (*sw      )(struct nvkm_device *, int idx, struct nvkm_sw **);
+11 −0
Original line number Diff line number Diff line
#ifndef __NVKM_FIRMWARE_H__
#define __NVKM_FIRMWARE_H__

#include <core/device.h>

int nvkm_firmware_get(struct nvkm_device *device, const char *fwname,
		      const struct firmware **fw);

void nvkm_firmware_put(const struct firmware *fw);

#endif
Loading