Relaxed CORB read pointer reset checking for nVidia HDA
* At least some nVidia HDA controllers do not acknowledge the CORB read pointer reset, which is required by the spec (cf. HDA 1.0a ch. 3.3.21). For these controllers, do not fail when acknowledge is missing. * Makes hda driver work for nVidia HDA controllers again, thus fixing the regression pointed out in #10212.
This commit is contained in:
parent
1a23bff796
commit
7ef10f899a
@ -537,8 +537,14 @@ init_corb_rirb_pos(hda_controller* controller)
|
||||
break;
|
||||
}
|
||||
if ((corbReadPointer & CORB_READ_POS_RESET) == 0) {
|
||||
dprintf("hda: CORB read pointer reset failed\n");
|
||||
return B_BUSY;
|
||||
dprintf("hda: CORB read pointer reset not acknowledged\n");
|
||||
|
||||
// According to HDA spec v1.0a ch3.3.21, software must read the
|
||||
// bit as 1 to verify that the reset completed. However, at least
|
||||
// some nVidia HDA controllers do not update the bit after reset.
|
||||
// Thus don't fail here on nVidia controllers.
|
||||
if (controller->pci_info.vendor_id != PCI_VENDOR_NVIDIA)
|
||||
return B_BUSY;
|
||||
}
|
||||
|
||||
corbReadPointer &= ~CORB_READ_POS_RESET;
|
||||
|
Loading…
x
Reference in New Issue
Block a user