[haiku-commits] Change in haiku[master]: hda: disable 64bits dma addressing for some devices

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 25 Jan 2021 18:51:56 +0000

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

Other related posts: