hdac0: Unexpected unsolicited response from address 0: 04a12020

From: Anton Shterenlikht <mexas_at_bristol.ac.uk>
Date: Wed, 18 Jul 2012 00:39:51 +0100
On amd64 r238558M
(M is John Baldwin's pci.c patch, see at the end).

I've
 hdac0: <ATI SB600 HDA Controller> mem 0xc0000000-0xc0003fff irq 16 at device 20.2 on pci0

which seems to work fine, e.g.
using /dev/dsp

I then run

X -configure

The sound still works fine.

However, as soon as I run
X -config /root/xorg.conf.new -retro

I see on the console:

hdac0: Unexpected unsolicited response from address 0: 04a12020
hdac0: Unexpected unsolicited response from address 0: 00001727
hdac0: Unexpected unsolicited response from address 0: 00000020
hdac0: Unexpected unsolicited response from address 0: 00400187
hdac0: Unexpected unsolicited response from address 0: 00000002
hdac0: Unexpected unsolicited response from address 0: 00000e03
hdac0: Unexpected unsolicited response from address 0: 0181302e
hdac0: Unexpected unsolicited response from address 0: 00001737
hdac0: Unexpected unsolicited response from address 0: 00000020
hdac0: Unexpected unsolicited response from address 0: 00400301
hdac0: Unexpected unsolicited response from address 0: 00000001
hdac0: Unexpected unsolicited response from address 0: 00000002
hdac0: Unexpected unsolicited response from address 0: 4145f0f0
hdac0: Unexpected unsolicited response from address 0: 00000010
hdac0: Unexpected unsolicited response from address 0: 00000040
hdac0: Unexpected unsolicited response from address 0: 00300101
hdac0: Unexpected unsolicited response from address 0: 00000006
hdac0: Unexpected unsolicited response from address 0: 0e090c03
hdac0: Unexpected unsolicited response from address 0: 00001805
hdac0: Unexpected unsolicited response from address 0: 00200101
hdac0: Unexpected unsolicited response from address 0: 00000002
hdac0: Unexpected unsolicited response from address 0: 00001f1e
hdac0: Unexpected unsolicited response from address 0: 0030010c

and another ~50 similar lines,
and the sound no longer works
until I reboot.

I cannot narrow the problem any further.

Please advise

Many thanks

****************************

John Baldwin's pci.c patch:

Index: pci.c
===================================================================
--- pci.c	(revision 235475)
+++ pci.c	(working copy)
_at__at_ -2815,13 +2815,36 _at__at_ pci_add_map(device_t bus, device_t dev, int reg, s
 	 */
 	res = resource_list_reserve(rl, bus, dev, type, &reg, start, end, count,
 	    prefetch ? RF_PREFETCHABLE : 0);
+	if (res == NULL && (start != 0 || end != ~0ul)) {
+		/*
+		 * If the allocation fails, try to allocate a resource for
+		 * this BAR using any available range.  The firmware felt
+		 * it was important enough to assign a resource, so don't
+		 * disable decoding if we can help it.
+		 */
+		resource_list_delete(rl, type, reg);
+		start = 0;
+		end = ~0ul;
+		resource_list_add(rl, type, reg, 0, ~0ul, count);
+		resource_list_add(rl, type, reg, start, end, count);
+		res = resource_list_reserve(rl, bus, dev, type, &reg, 0, ~0ul,
+		    count, prefetch ? RF_PREFETCHABLE : 0);
+	}
 	if (res == NULL) {
 		/*
 		 * If the allocation fails, delete the resource list entry
-		 * to force pci_alloc_resource() to allocate resources
-		 * from the parent.
+		 * and disable decoding for this device.
+		 *
+		 * If the driver requests this resource in the future,
+		 * pci_reserve_map() will try to allocate fresh resources.
 		 */
 		resource_list_delete(rl, type, reg);
+		pci_disable_io(dev, type);
+		start = 0;
+		device_printf(bus,
+		    "pci%d:%d:%d:%d bar %#x failed to allocate",
+		    pci_get_domain(dev), pci_get_bus(dev), pci_get_slot(dev),
+		    pci_get_function(dev), reg);
 	} else {
 		start = rman_get_start(res);
 		pci_write_bar(dev, pm, start);


-- 
Anton Shterenlikht
Room 2.6, Queen's Building
Mech Eng Dept
Bristol University
University Walk, Bristol BS8 1TR, UK
Tel: +44 (0)117 331 5944
Fax: +44 (0)117 929 4423
Received on Tue Jul 17 2012 - 21:39:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:29 UTC