From Jérôme Duval <jerome.duval@xxxxxxxxx>:
Jérôme Duval has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/3681 ;)
Change subject: hda: disable 64bits dma addressing for some devices
......................................................................
hda: disable 64bits dma addressing for some devices
* creative, not supported
* amd/ati/nvidia, supports 40/48bits, disabled for simplicity
* should help with #16491
---
M src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
1 file changed, 17 insertions(+), 11 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/81/3681/1
diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
index 22212c1..3cabc15 100644
--- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
+++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
@@ -48,6 +48,10 @@
#define HDA_QUIRK_NO_MSI 0x0002
#define HDA_QUIRK_NO_CORBRP_RESET_ACK 0x0004
#define HDA_QUIRK_NOTCSEL 0x0008
+#define HDA_QUIRK_NO_64BITDMA 0x0010
+#define HDA_QUIRKS_AMD \
+ (HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL | HDA_QUIRK_NO_64BITDMA)
+
static const struct {
@@ -94,22 +98,23 @@
{ PCI_VENDOR_INTEL, 0xa2f0, HDA_QUIRK_SNOOP },
{ PCI_VENDOR_INTEL, 0xa348, HDA_QUIRK_SNOOP },
{ PCI_VENDOR_INTEL, 0xa3f0, HDA_QUIRK_SNOOP },
- { PCI_VENDOR_ATI, 0x437b, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_ATI, 0x4383, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_AMD, 0x780d, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_AMD, 0x1457, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_AMD, 0x1487, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
- { PCI_VENDOR_AMD, 0x15e3, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },
+ { PCI_VENDOR_ATI, 0x437b, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_ATI, 0x4383, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_AMD, 0x157a, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_AMD, 0x780d, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_AMD, 0x1457, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_AMD, 0x1487, HDA_QUIRKS_AMD },
+ { PCI_VENDOR_AMD, 0x15e3, HDA_QUIRKS_AMD },
// Enable snooping for Nvidia, right now for all their hda-devices,
// but only based on guessing.
{ PCI_VENDOR_NVIDIA, PCI_ALL_DEVICES, HDA_QUIRK_SNOOP | HDA_QUIRK_NO_MSI
- | HDA_QUIRK_NO_CORBRP_RESET_ACK },
+ | HDA_QUIRK_NO_CORBRP_RESET_ACK | HDA_QUIRK_NO_64BITDMA },
{ PCI_VENDOR_CMEDIA, 0x5011, HDA_QUIRK_NO_MSI },
- { PCI_VENDOR_CREATIVE, 0x0010, HDA_QUIRK_NO_MSI },
- { PCI_VENDOR_CREATIVE, 0x0012, HDA_QUIRK_NO_MSI },
+ { PCI_VENDOR_CREATIVE, 0x0010, HDA_QUIRK_NO_MSI | HDA_QUIRK_NO_64BITDMA
},
+ { PCI_VENDOR_CREATIVE, 0x0012, HDA_QUIRK_NO_MSI | HDA_QUIRK_NO_64BITDMA
},
{ PCI_VENDOR_VMWARE, PCI_ALL_DEVICES, HDA_QUIRK_NO_CORBRP_RESET_ACK },
{ PCI_VENDOR_SIS, 0x7502, HDA_QUIRK_NO_CORBRP_RESET_ACK },
+ { PCI_VENDOR_ATI, PCI_ALL_DEVICES, HDA_QUIRK_NO_64BITDMA },
};
@@ -1181,7 +1186,8 @@
controller->num_input_streams = GLOBAL_CAP_INPUT_STREAMS(capabilities);
controller->num_output_streams =
GLOBAL_CAP_OUTPUT_STREAMS(capabilities);
controller->num_bidir_streams = GLOBAL_CAP_BIDIR_STREAMS(capabilities);
- controller->is_64_bit = GLOBAL_CAP_64BIT(capabilities);
+ controller->is_64_bit = GLOBAL_CAP_64BIT(capabilities)
+ && (quirks & HDA_QUIRK_NO_64BITDMA) == 0;
// show some hw features
dprintf("hda: HDA v%d.%d, O:%" B_PRIu32 "/I:%" B_PRIu32 "/B:%" B_PRIu32
--
To view, visit https://review.haiku-os.org/c/haiku/+/3681
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I15eb77c176b2b9a3a1d90cf5765eb49539e972f9
Gerrit-Change-Number: 3681
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange