drm/nouveau/bios/therm: handle vbioses with duplicate entries (mostly nva5)
authorMartin Peres <martin.peres@labri.fr>
Fri, 30 Aug 2013 23:58:50 +0000 (01:58 +0200)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 4 Sep 2013 03:48:52 +0000 (13:48 +1000)
Some vbioses have extra useless entries after "the end" of the table. This is
problematic since all of the vbios I found with this issue redefine the
pwm freq divider to insane levels (52750 Hz instead of 2500), thus breaking
fan management.

The first solution to solve this mess would be to change the length of the
table. The solution I choose was simply to avoid setting the pwm freq twice
as the other redefinitions are harmless with our current parser.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Reported-by: Mariusz Bialonczyk <manio@skyboo.net>
Tested-by: Mariusz Bialonczyk <manio@skyboo.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/bios/therm.c

index 22a20573ed1b01d2220e5e6942ec2b06f5bf84f3..22ac6dbd6c8f7b2c249bcfb687974a3758b96c3e 100644 (file)
@@ -184,7 +184,8 @@ nvbios_therm_fan_parse(struct nouveau_bios *bios,
                        cur_trip->fan_duty = value;
                        break;
                case 0x26:
-                       fan->pwm_freq = value;
+                       if (!fan->pwm_freq)
+                               fan->pwm_freq = value;
                        break;
                case 0x3b:
                        fan->bump_period = value;