On Friday, June 10, 2011 11:00:15 am John wrote: > ----- John Baldwin's Original Message ----- > > On Thursday, June 09, 2011 2:11:16 am Andriy Gapon wrote: > > > on 09/06/2011 01:30 John said the following: > > > > Sorry John, here's the verbose dmesg output with your patch applied. > > > > > > > > This is at the tail of the console: > > > > > > > > pcib1: allocated memory range (0xf6000000-0xf6ffffff) for rid 10 of pci0:1:3:0 > > > > map[14]: type I/O Port, range 32, base 0x4400, size 8, enabled > > > > pcib1: failed to allocate initial I/O port window (0x4000-0x4fff,0x1000) > > > > map[18]: type Memory, range 32, base 0xf5ff0000, size 12, enabled > > > > > > > > > > > > Output ends with a single 'M', not MCA as earlier. > > > > > > > > > Just a wild guess - what happens if you revert r222537 (you might need to revert > > > r222804 first)? > > > > I think he's getting a MCA due to writing to a bad address and getting a > > PCI-e target abort equivalent and that the screen output is broken > > because the VGA device is what is probably getting hosed by the pcib driver. > > > > Given that, I doubt the printf changes are related. > > Just for grins, I decided to completely remove usb from the kernel > to see if it might help. Nolonger prints the MCA and/or M, just > hangs while printing out the no driver attached messages. Still > prints out the failed to allocate messages... Hmmm. Your case is a bit different. PCI-PCI bridges have to allocate I/O space on 4KB boundarys, so the smallest chunk it can allocate for the resources behind your bridge is 0x4000-0x4fff which is what keeps failing. Hmm, it's claiming that brgphy1 has some I/O ports that conflict allocated. That makes no sense. brgphy devices have no I/O port resources. I think the device_t got reused. Can you try this perhaps to get started relative to sys/x86/x86/nexus.c: Index: nexus.c =================================================================== --- nexus.c (revision 222932) +++ nexus.c (working copy) _at__at_ -388,6 +388,27 _at__at_ nexus_alloc_resource(device_t bus, device_t child, if (rm == NULL) return (NULL); + /* XXX: Hack */ + if (type == SYS_RES_IOPORT && start >= 0x4000 && start <= 0x4ffff) { + char *buf; + + device_printf(bus, "allocating range %#lx-%#lx for child", + start, end); + if (device_get_nameunit(child) != NULL) + printf(" %s", device_get_nameunit(child)); + printf(" of %s\n", device_get_nameunit( + device_get_parent(child))); + buf = malloc(1024, M_DEVBUF, M_WAITOK); + *buf = '\0'; + bus_child_pnpinfo_str(dev, buf, 1024); + if (*buf != '\0') + printf("\t%s\n", buf); + *buf = '\0'; + bus_child_location_str(dev, buf, 1024); + if (*buf != '\0') + printf("\tat %s\n", buf); + free(buf, M_DEVBUF); + } rv = rman_reserve_resource(rm, start, end, count, flags, child); if (rv == 0) return 0; -- John BaldwinReceived on Fri Jun 10 2011 - 14:00:53 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:14 UTC