[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#638863: "shpchp: Cannot reserve MMIO region" error during boot (linux 3.0)



Hi list,

each time I start up my laptop (Debian testing, Linux 3.0 as provided in the 
repositories), the following error (warning?) appears:

[    5.083819] shpchp 0000:00:01.0: Cannot reserve MMIO region

The system is working fine as far as I can tell. I observed that message for 
quite a while already, even back when I still used Kubuntu with the kernel 
version 2.6.38, then with 2.6.39 on Debian testing, and now with 3.0.

I reported this downstream at http://bugs.debian.org/cgi-
bin/bugreport.cgi?bug=638863 where you can also find the full dmesg and lspci 
output, the loaded kernel modules, and so on. Jonathan replied with a quick 
analysis and saying that I should report this upstream on this list. Here's 
what he wrote:

> The relevant code is in drivers/pci/hotplug/shpchp_hpc.c:
> 
> 	if (!request_mem_region(ctrl->mmio_base, ctrl->mmio_size, MY_NAME)) {
> 		ctrl_err(ctrl, "Cannot reserve MMIO region\n");
> 		rc = -1;
> 		goto abort;
> 	}
> 
> This comes after a message like
> 
> 	shpchp 0000:00:01.0: HPC vendor_id 1022 device_id 9602 ss_vid 1022 ss_did
> 9602
> 
> which means that a hotplug controller was detected.  Looking at "lspci -nn"
> output, I can see that this device is
> 
> 	00:01.0 PCI bridge: Advanced Micro Devices [AMD] RS780/RS880 PCI to PCI
> bridge (int gfx)
> 
> So the problem would seem to be that Linux thinks this PCI-PCI bridge
> supports the standard hotplug controller interface (because it assumes
> _anything_ with AMD's vendor id does), when it doesn't.
> 
> 	static int is_shpc_capable(struct pci_dev *dev)
> 	{
> 		if ((dev->vendor == PCI_VENDOR_ID_AMD) || (dev->device ==
> 							PCI_DEVICE_ID_AMD_GOLAM_7450))
> 			return 1;
> 		if (!pci_find_capability(dev, PCI_CAP_ID_SHPC))
> 			return 0;
> 		if (get_hp_hw_control_from_firmware(dev))
> 			return 0;
> 		return 1;
> 	}
> 
> The test has been that way ever since v2.6.15-rc1~731^2~22^2~13
> (shpchp: detect SHPC capability before doing a lot of work,
> 2006-10-13).  The false positive (if it actually is a false positive)
> is clearly harmless.  If someone wants to remove the "if (dev->vendor
> == PCI_VENDOR_ID_AMD)" exception, it would be necessary to research
> why it is there in the first place (are there AMD hotplug controllers
> that do not advertise the shpc capability for which that exception is
> needed?) and if so, what a more precise exception to solve the same
> problem would be.

Kind regards,
Ralf

(I am not subscribed to linux-pci, so please CC me in replies)



Reply to: