[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-commits
Subject:    [haiku-commits] Change in haiku[master]: hda: disable TCSEL on ATI/AMD for non-hmdi
From:       Gerrit <review () review ! haiku-os ! org>
Date:       2020-02-28 9:40:24
Message-ID: gerrit.1582882822000.I51e0b8f046df13a23a0b39998e4155a2ec40f5f2 () review ! haiku-os ! org
[Download RAW message or body]

From Jérôme Duval <jerome.duval@gmail.com>:

Jérôme Duval has uploaded this change for review. ( \
https://review.haiku-os.org/c/haiku/+/2290 )


Change subject: hda: disable TCSEL on ATI/AMD for non-hmdi
......................................................................

hda: disable TCSEL on ATI/AMD for non-hmdi

also disable MSI with C-MEDIA 0x5011 (reference alsa)
---
M src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
1 file changed, 14 insertions(+), 8 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/90/2290/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 f778a9e..c69fd31 \
                100644
--- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
+++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
@@ -37,6 +37,7 @@
 #define PCI_VENDOR_ATI			0x1002
 #define PCI_VENDOR_AMD			0x1022
 #define PCI_VENDOR_CREATIVE		0x1102
+#define PCI_VENDOR_CMEDIA		0x13f6
 #define PCI_VENDOR_INTEL		0x8086
 #define PCI_VENDOR_NVIDIA		0x10de
 #define PCI_VENDOR_VMWARE		0x15ad
@@ -46,6 +47,7 @@
 #define HDA_QUIRK_SNOOP					0x0001
 #define HDA_QUIRK_NO_MSI				0x0002
 #define HDA_QUIRK_NO_CORBRP_RESET_ACK	0x0004
+#define HDA_QUIRK_NOTCSEL				0x0008


 static const struct {
@@ -92,17 +94,18 @@
 	{ 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 },
-	{ PCI_VENDOR_ATI, 0x4383, HDA_QUIRK_SNOOP },
-	{ PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP },
-	{ PCI_VENDOR_AMD, 0x780d, HDA_QUIRK_SNOOP },
-	{ PCI_VENDOR_AMD, 0x1457, HDA_QUIRK_SNOOP },
-	{ PCI_VENDOR_AMD, 0x1487, HDA_QUIRK_SNOOP },
-	{ PCI_VENDOR_AMD, 0x15e3, 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 },
 	// 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 },
+	{ 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_VMWARE, PCI_ALL_DEVICES, HDA_QUIRK_NO_CORBRP_RESET_ACK },
@@ -1060,7 +1063,10 @@
 		goto no_irq;

 	// TCSEL is reset to TC0 (clear 0-2 bits)
-	update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0, 1);
+	if ((quirks & HDA_QUIRK_NOTCSEL) == 0) {
+		update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0,
+			1);
+	}

 	controller->dma_snooping = false;


--
To view, visit https://review.haiku-os.org/c/haiku/+/2290
To unsubscribe, or for help writing mail filters, visit \
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I51e0b8f046df13a23a0b39998e4155a2ec40f5f2
Gerrit-Change-Number: 2290
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@gmail.com>
Gerrit-MessageType: newchange


[Attachment #3 (text/html)]

<p>Jérôme Duval has uploaded this change for <strong>review</strong>.</p><p><a \
href="https://review.haiku-os.org/c/haiku/+/2290">View Change</a></p><pre \
style="font-family: monospace,monospace; white-space: pre-wrap;">hda: disable TCSEL \
on ATI/AMD for non-hmdi<br><br>also disable MSI with C-MEDIA 0x5011 (reference \
alsa)<br>---<br>M src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp<br>1 file \
changed, 14 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: \
monospace,monospace; white-space: pre-wrap;">git pull ssh://git.haiku-os.org:22/haiku \
refs/changes/90/2290/1</pre><pre style="font-family: monospace,monospace; \
white-space: pre-wrap;"><span>diff --git \
a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp \
b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp</span><br><span>index \
f778a9e..c69fd31 100644</span><br><span>--- \
a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp</span><br><span>+++ \
b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp</span><br><span>@@ -37,6 \
+37,7 @@</span><br><span> #define PCI_VENDOR_ATI			0x1002</span><br><span> #define \
PCI_VENDOR_AMD			0x1022</span><br><span> #define \
PCI_VENDOR_CREATIVE		0x1102</span><br><span style="color: hsl(120, 100%, \
40%);">+#define PCI_VENDOR_CMEDIA		0x13f6</span><br><span> #define \
PCI_VENDOR_INTEL		0x8086</span><br><span> #define \
PCI_VENDOR_NVIDIA		0x10de</span><br><span> #define \
PCI_VENDOR_VMWARE		0x15ad</span><br><span>@@ -46,6 +47,7 @@</span><br><span> #define \
HDA_QUIRK_SNOOP					0x0001</span><br><span> #define \
HDA_QUIRK_NO_MSI				0x0002</span><br><span> #define \
HDA_QUIRK_NO_CORBRP_RESET_ACK	0x0004</span><br><span style="color: hsl(120, 100%, \
40%);">+#define HDA_QUIRK_NOTCSEL				0x0008</span><br><span> </span><br><span> \
</span><br><span> static const struct {</span><br><span>@@ -92,17 +94,18 \
@@</span><br><span> 	{ PCI_VENDOR_INTEL, 0xa2f0, HDA_QUIRK_SNOOP },</span><br><span> \
{ PCI_VENDOR_INTEL, 0xa348, HDA_QUIRK_SNOOP },</span><br><span> 	{ PCI_VENDOR_INTEL, \
0xa3f0, HDA_QUIRK_SNOOP },</span><br><span style="color: hsl(0, 100%, 40%);">-	{ \
PCI_VENDOR_ATI, 0x437b, HDA_QUIRK_SNOOP },</span><br><span style="color: hsl(0, 100%, \
40%);">-	{ PCI_VENDOR_ATI, 0x4383, HDA_QUIRK_SNOOP },</span><br><span style="color: \
hsl(0, 100%, 40%);">-	{ PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP },</span><br><span \
style="color: hsl(0, 100%, 40%);">-	{ PCI_VENDOR_AMD, 0x780d, HDA_QUIRK_SNOOP \
},</span><br><span style="color: hsl(0, 100%, 40%);">-	{ PCI_VENDOR_AMD, 0x1457, \
HDA_QUIRK_SNOOP },</span><br><span style="color: hsl(0, 100%, 40%);">-	{ \
PCI_VENDOR_AMD, 0x1487, HDA_QUIRK_SNOOP },</span><br><span style="color: hsl(0, 100%, \
40%);">-	{ PCI_VENDOR_AMD, 0x15e3, HDA_QUIRK_SNOOP },</span><br><span style="color: \
hsl(120, 100%, 40%);">+	{ PCI_VENDOR_ATI, 0x437b, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL \
},</span><br><span style="color: hsl(120, 100%, 40%);">+	{ PCI_VENDOR_ATI, 0x4383, \
HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },</span><br><span style="color: hsl(120, 100%, \
40%);">+	{ PCI_VENDOR_AMD, 0x157a, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL \
},</span><br><span style="color: hsl(120, 100%, 40%);">+	{ PCI_VENDOR_AMD, 0x780d, \
HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },</span><br><span style="color: hsl(120, 100%, \
40%);">+	{ PCI_VENDOR_AMD, 0x1457, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL \
},</span><br><span style="color: hsl(120, 100%, 40%);">+	{ PCI_VENDOR_AMD, 0x1487, \
HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL },</span><br><span style="color: hsl(120, 100%, \
40%);">+	{ PCI_VENDOR_AMD, 0x15e3, HDA_QUIRK_SNOOP | HDA_QUIRK_NOTCSEL \
},</span><br><span> 	// Enable snooping for Nvidia, right now for all their \
hda-devices,</span><br><span> 	// but only based on guessing.</span><br><span> 	{ \
PCI_VENDOR_NVIDIA, PCI_ALL_DEVICES, HDA_QUIRK_SNOOP | \
HDA_QUIRK_NO_MSI</span><br><span> 		| HDA_QUIRK_NO_CORBRP_RESET_ACK \
},</span><br><span style="color: hsl(120, 100%, 40%);">+	{ PCI_VENDOR_CMEDIA, 0x5011, \
HDA_QUIRK_NO_MSI },</span><br><span> 	{ PCI_VENDOR_CREATIVE, 0x0010, HDA_QUIRK_NO_MSI \
},</span><br><span> 	{ PCI_VENDOR_CREATIVE, 0x0012, HDA_QUIRK_NO_MSI \
},</span><br><span> 	{ PCI_VENDOR_VMWARE, PCI_ALL_DEVICES, \
HDA_QUIRK_NO_CORBRP_RESET_ACK },</span><br><span>@@ -1060,7 +1063,10 \
@@</span><br><span> 		goto no_irq;</span><br><span> </span><br><span> 	// TCSEL is \
reset to TC0 (clear 0-2 bits)</span><br><span style="color: hsl(0, 100%, \
40%);">-	update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0, \
1);</span><br><span style="color: hsl(120, 100%, 40%);">+	if ((quirks &amp; \
HDA_QUIRK_NOTCSEL) == 0) {</span><br><span style="color: hsl(120, 100%, \
40%);">+		update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, \
0,</span><br><span style="color: hsl(120, 100%, 40%);">+			1);</span><br><span \
style="color: hsl(120, 100%, 40%);">+	}</span><br><span> </span><br><span> \
controller-&gt;dma_snooping = false;</span><br><span> \
</span><br><span></span><br></pre><p>To view, visit <a \
href="https://review.haiku-os.org/c/haiku/+/2290">change 2290</a>. To unsubscribe, or \
for help writing mail filters, visit <a \
href="https://review.haiku-os.org/settings">settings</a>.</p><div itemscope \
itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" \
itemtype="http://schema.org/ViewAction"><link itemprop="url" \
href="https://review.haiku-os.org/c/haiku/+/2290"/><meta itemprop="name" \
content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: haiku </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: \
I51e0b8f046df13a23a0b39998e4155a2ec40f5f2 </div> <div style="display:none"> \
Gerrit-Change-Number: 2290 </div> <div style="display:none"> Gerrit-PatchSet: 1 \
</div> <div style="display:none"> Gerrit-Owner: Jérôme Duval \
&lt;jerome.duval@gmail.com&gt; </div> <div style="display:none"> Gerrit-MessageType: \
newchange </div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic