forked from Minki/linux
drm/nouveau/bios: check that fixed tvdac gpio data is valid before using it
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
da07e52cf1
commit
acac7bdba6
@ -100,13 +100,17 @@ dcb_gpio_parse(struct nouveau_bios *bios, int idx, u8 func, u8 line,
|
|||||||
/* DCB 2.2, fixed TVDAC GPIO data */
|
/* DCB 2.2, fixed TVDAC GPIO data */
|
||||||
if ((entry = dcb_table(bios, &ver, &hdr, &cnt, &len)) && ver >= 0x22) {
|
if ((entry = dcb_table(bios, &ver, &hdr, &cnt, &len)) && ver >= 0x22) {
|
||||||
if (func == DCB_GPIO_TVDAC0) {
|
if (func == DCB_GPIO_TVDAC0) {
|
||||||
*gpio = (struct dcb_gpio_func) {
|
u8 conf = nv_ro08(bios, entry - 5);
|
||||||
.func = DCB_GPIO_TVDAC0,
|
u8 addr = nv_ro08(bios, entry - 4);
|
||||||
.line = nv_ro08(bios, entry - 4) >> 4,
|
if (conf & 0x01) {
|
||||||
.log[0] = !!(nv_ro08(bios, entry - 5) & 2),
|
*gpio = (struct dcb_gpio_func) {
|
||||||
.log[1] = !(nv_ro08(bios, entry - 5) & 2),
|
.func = DCB_GPIO_TVDAC0,
|
||||||
};
|
.line = addr >> 4,
|
||||||
return 0;
|
.log[0] = !!(conf & 0x02),
|
||||||
|
.log[1] = !(conf & 0x02),
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user