mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 20:14:25 +08:00
drm/nouveau: Don't try to parse a GPIO table on early DCBv2.2 BIOSes.
Signed-off-by: Francisco Jerez <currojerez@riseup.net> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
bb338bb6f2
commit
5e6a74436e
@ -5809,7 +5809,7 @@ parse_dcb_gpio_table(struct nvbios *bios)
|
|||||||
entries = gpio[2];
|
entries = gpio[2];
|
||||||
recordlen = gpio[3];
|
recordlen = gpio[3];
|
||||||
} else
|
} else
|
||||||
if (dcb[0] >= 0x22) {
|
if (dcb[0] >= 0x22 && dcb[-1] >= 0x13) {
|
||||||
gpio = ROMPTR(bios, dcb[-15]);
|
gpio = ROMPTR(bios, dcb[-15]);
|
||||||
if (!gpio)
|
if (!gpio)
|
||||||
goto no_table;
|
goto no_table;
|
||||||
@ -5817,6 +5817,19 @@ parse_dcb_gpio_table(struct nvbios *bios)
|
|||||||
headerlen = 3;
|
headerlen = 3;
|
||||||
entries = gpio[2];
|
entries = gpio[2];
|
||||||
recordlen = gpio[1];
|
recordlen = gpio[1];
|
||||||
|
} else
|
||||||
|
if (dcb[0] >= 0x22) {
|
||||||
|
/* No GPIO table present, parse the TVDAC GPIO data. */
|
||||||
|
uint8_t *tvdac_gpio = &dcb[-5];
|
||||||
|
|
||||||
|
if (tvdac_gpio[0] & 1) {
|
||||||
|
e = new_gpio_entry(bios);
|
||||||
|
e->tag = DCB_GPIO_TVDAC0;
|
||||||
|
e->line = tvdac_gpio[1] >> 4;
|
||||||
|
e->invert = tvdac_gpio[0] & 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto no_table;
|
||||||
} else {
|
} else {
|
||||||
NV_DEBUG(dev, "no/unknown gpio table on DCB 0x%02x\n", dcb[0]);
|
NV_DEBUG(dev, "no/unknown gpio table on DCB 0x%02x\n", dcb[0]);
|
||||||
goto no_table;
|
goto no_table;
|
||||||
|
Loading…
Reference in New Issue
Block a user