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

Commit b485a700 authored by Emil Velikov's avatar Emil Velikov Committed by Ben Skeggs
Browse files

drm/nouveau/gpio: rename g92 class to g94



nv92 hardware has only 16 interrupt lines, while nv94 and later
has 32. Accessing 0xe0c{0,4} registers on nv92 can lead to incorrect
PDISP setup. This is a regression introduced with

commit 9d0f5ec9ee0fd5dc5fc1cc2cf559286431e406e3
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Mon May 12 15:22:42 2014 +1000

    gpio: split g92 class from nv50

Reported-by: estece on #nouveau
Cc: stable@vger.kernel.org # 3.16+
Signed-off-by: default avatarEmil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 6cc40615
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ nouveau-y += core/subdev/fuse/gm107.o
nouveau-y += core/subdev/gpio/base.o
nouveau-y += core/subdev/gpio/nv10.o
nouveau-y += core/subdev/gpio/nv50.o
nouveau-y += core/subdev/gpio/nv92.o
nouveau-y += core/subdev/gpio/nv94.o
nouveau-y += core/subdev/gpio/nvd0.o
nouveau-y += core/subdev/gpio/nve0.o
nouveau-y += core/subdev/i2c/base.o
+11 −11
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ nv50_identify(struct nouveau_device *device)
	case 0x92:
		device->cname = "G92";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
@@ -174,7 +174,7 @@ nv50_identify(struct nouveau_device *device)
	case 0x94:
		device->cname = "G94";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
@@ -203,7 +203,7 @@ nv50_identify(struct nouveau_device *device)
	case 0x96:
		device->cname = "G96";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
@@ -232,7 +232,7 @@ nv50_identify(struct nouveau_device *device)
	case 0x98:
		device->cname = "G98";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
@@ -261,7 +261,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xa0:
		device->cname = "G200";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
@@ -290,7 +290,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xaa:
		device->cname = "MCP77/MCP78";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nvaa_clock_oclass;
@@ -319,7 +319,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xac:
		device->cname = "MCP79/MCP7A";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nvaa_clock_oclass;
@@ -348,7 +348,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xa3:
		device->cname = "GT215";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
@@ -379,7 +379,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xa5:
		device->cname = "GT216";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
@@ -409,7 +409,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xa8:
		device->cname = "GT218";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
@@ -439,7 +439,7 @@ nv50_identify(struct nouveau_device *device)
	case 0xaf:
		device->cname = "MCP89";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
+7 −7
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xc0:
		device->cname = "GF100";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -94,7 +94,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xc4:
		device->cname = "GF104";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -127,7 +127,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xc3:
		device->cname = "GF106";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -159,7 +159,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xce:
		device->cname = "GF114";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -192,7 +192,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xcf:
		device->cname = "GF116";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -225,7 +225,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xc1:
		device->cname = "GF108";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
@@ -257,7 +257,7 @@ nvc0_identify(struct nouveau_device *device)
	case 0xc8:
		device->cname = "GF110";
		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv92_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
		device->oclass[NVDEV_SUBDEV_FUSE   ] = &gf100_fuse_oclass;
		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nvc0_clock_oclass;
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ nouveau_gpio(void *obj)

extern struct nouveau_oclass *nv10_gpio_oclass;
extern struct nouveau_oclass *nv50_gpio_oclass;
extern struct nouveau_oclass *nv92_gpio_oclass;
extern struct nouveau_oclass *nv94_gpio_oclass;
extern struct nouveau_oclass *nvd0_gpio_oclass;
extern struct nouveau_oclass *nve0_gpio_oclass;

+6 −6
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@
#include "priv.h"

void
nv92_gpio_intr_stat(struct nouveau_gpio *gpio, u32 *hi, u32 *lo)
nv94_gpio_intr_stat(struct nouveau_gpio *gpio, u32 *hi, u32 *lo)
{
	u32 intr0 = nv_rd32(gpio, 0x00e054);
	u32 intr1 = nv_rd32(gpio, 0x00e074);
@@ -38,7 +38,7 @@ nv92_gpio_intr_stat(struct nouveau_gpio *gpio, u32 *hi, u32 *lo)
}

void
nv92_gpio_intr_mask(struct nouveau_gpio *gpio, u32 type, u32 mask, u32 data)
nv94_gpio_intr_mask(struct nouveau_gpio *gpio, u32 type, u32 mask, u32 data)
{
	u32 inte0 = nv_rd32(gpio, 0x00e050);
	u32 inte1 = nv_rd32(gpio, 0x00e070);
@@ -57,8 +57,8 @@ nv92_gpio_intr_mask(struct nouveau_gpio *gpio, u32 type, u32 mask, u32 data)
}

struct nouveau_oclass *
nv92_gpio_oclass = &(struct nouveau_gpio_impl) {
	.base.handle = NV_SUBDEV(GPIO, 0x92),
nv94_gpio_oclass = &(struct nouveau_gpio_impl) {
	.base.handle = NV_SUBDEV(GPIO, 0x94),
	.base.ofuncs = &(struct nouveau_ofuncs) {
		.ctor = _nouveau_gpio_ctor,
		.dtor = _nouveau_gpio_dtor,
@@ -66,8 +66,8 @@ nv92_gpio_oclass = &(struct nouveau_gpio_impl) {
		.fini = _nouveau_gpio_fini,
	},
	.lines = 32,
	.intr_stat = nv92_gpio_intr_stat,
	.intr_mask = nv92_gpio_intr_mask,
	.intr_stat = nv94_gpio_intr_stat,
	.intr_mask = nv94_gpio_intr_mask,
	.drive = nv50_gpio_drive,
	.sense = nv50_gpio_sense,
	.reset = nv50_gpio_reset,
Loading