• Lyude Paul's avatar
    drm/nouveau/i2c: Enable i2c pads & busses during preinit · 7cb95eee
    Lyude Paul authored
    It turns out that while disabling i2c bus access from software when the
    GPU is suspended was a step in the right direction with:
    
    commit 342406e4 ("drm/nouveau/i2c: Disable i2c bus access after
    ->fini()")
    
    We also ended up accidentally breaking the vbios init scripts on some
    older Tesla GPUs, as apparently said scripts can actually use the i2c
    bus. Since these scripts are executed before initializing any
    subdevices, we end up failing to acquire access to the i2c bus which has
    left a number of cards with their fan controllers uninitialized. Luckily
    this doesn't break hardware - it just means the fan gets stuck at 100%.
    
    This also means that we've always been using our i2c busses before
    initializing them during the init scripts for older GPUs, we just didn't
    notice it until we started preventing them from being used until init.
    It's pretty impressive this never caused us any issues before!
    
    So, fix this by initializing our i2c pad and busses during subdev
    pre-init. We skip initializing aux busses during pre-init, as those are
    guaranteed to only ever be used by nouveau for DP aux transactions.
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Tested-by: default avatarMarc Meledandri <m.meledandri@gmail.com>
    Fixes: 342406e4 ("drm/nouveau/i2c: Disable i2c bus access after ->fini()")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    7cb95eee
base.c 10.4 KB