Bug 165561

Summary: [hang] K8N890M-M Boot Hang
Product: Base System Reporter: Byron Young <bkyoung74q9>
Component: i386Assignee: freebsd-i386 (Nobody) <i386>
Status: Open ---    
Severity: Affects Only Me    
Priority: Normal    
Version: 9.0-RELEASE   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.txt
none
out.txt none

Description Byron Young 2012-02-29 18:10:14 UTC
Internal boot hangs at

pcib1: failed to allocate initial prefetch window (0xd0000000-0xdfffffff,0x10000000)

Serial boot continues.

See attachement minicom1.txt for boot output.


User Manual Download:
http://download.ecsusa.com/dlfileecs/manual/mb/eng/k8/K8M890M-M%20_v1.0.zip

Visit http://www.ecs.com.tw and navigate Home > Products > Motherboard > Archives
The K8M890M-M is in the socket AM2 section.

Direct access via this link
http://www.ecs.com.tw/ECSWebSite/Product/Product_Detail.aspx?CategoryID=1&DetailID=667&DetailName=Feature&MenuID=24&LanID=0

Fix: My guess is that using an installed graphics card instead of the integrated DeltaChrome grapics would solve the problem.



Patch attached with submission follows:
How-To-Repeat: Create install CD using FreeBSD-9.0-RELEASE-i386-disc1.iso then boot from CD.
Comment 1 Byron Young 2012-03-02 22:13:05 UTC
The hang happens on the boot machine (console=vidconsole) at the instruction as indicated in the listing from the pci_cfgreg.c snippit and the VIDCONSOLE OUTPUT. If booting via console=comconsole only, the boot continues, as shown in BEGIN COMCONSOLE BOOT CONTINUE listing.

=====BEGIN VIDCONSOLE OUTPUT=======================
OK boot -d
KDB: debugger backends: ddb
KDB: current backend: ddb
KDB: enter: Boot flags requested debugger
[ thread pid 0 tid 0 ]
Stopped at      kdb_enter+0x3a: movl    $0,kdb_why
db> b pcib_alloc_window
db> cont
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
    The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-RELEASE #2: Thu Mar  1 11:11:06 PST 2012
    root@butler.bkyoung.com:/usr/obj/usr/src/sys/BUTLER i386
CPU: AMD Athlon(tm) 64 Processor 3800+ (2394.05-MHz 686-class CPU)
  Origin = "AuthenticAMD"  Id = 0x50ff2  Family = f  Model = 5f  Stepping = 2
  Features=0x78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2>
  Features2=0x2001<SSE3,CX16>
  AMD Features=0xea500800<SYSCALL,NX,MMX+,FFXSR,RDTSCP,LM,3DNow!+,3DNow!>
  AMD Features2=0x1d<LAHF,SVM,ExtAPIC,CR8>
real memory  = 2147483648 (2048 MB)
avail memory = 1822670848 (1738 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <A M I  OEMAPIC >
ioapic0 <Version 0.3> irqs 0-23 on motherboard
ioapic1 <Version 0.3> irqs 24-47 on motherboard
kbd1 at kbdmux0
acpi0: <A M I OEMRSDT> on motherboard
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, 7ff00000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
cpu0: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
pcib1: <ACPI PCI-PCI bridge> at device 1.0 on pci0
[ thread pid 0 tid 100000 ]
Breakpoint at   pcib_alloc_window:      pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pcib_alloc_window:      pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pcib_alloc_window:      pushl   %ebp
db> b pci_write_config_method
db> cont
pcib1: failed to allocate initial prefetch window: 0xd0000000-0xdfffffff
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
pci1: <ACPI PCI bus> on pcib1
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> 
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_write_config_method:        pushl   %ebp
db> b pci_cfgregwrite
db> cont
[ thread pid 0 tid 100000 ]
Breakpoint at   pci_cfgregwrite:        pushl   %ebp
db> s
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x1:    movl    %esp,%ebp
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x3:    subl    $0x30,%esp
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x6:    movl    %ebx,0xfffffff4(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x9:    movl    %esi,0xfffffff8(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xc:    movl    %edi,0xfffffffc(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xf:    movl    0x8(%ebp),%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x12:   movl    0x1c(%ebp),%edi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x15:   cmpl    $0x3,cfgmech
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x1c:   jnz     pci_cfgregwrite+0x1b0
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x22:   cmpl    %esi,pcie_minbus
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x28:   jnle    pci_cfgregwrite+0x1b0
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x2e:   cmpl    pcie_maxbus,%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x34:   jnle    pci_cfgregwrite+0x1b0
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x3a:   testl   %esi,%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x3c:   jnz     pci_cfgregwrite+0x55
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x55:   cmpl    $0x1f,0xc(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x59:   jnbe    pci_cfgregwrite+0x288
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x5f:   cmpl    $0x7,0x10(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x63:   jnbe    pci_cfgregwrite+0x288
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x69:   cmpl    $0xfff,0x14(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x70:   jnbe    pci_cfgregwrite+0x288
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x76:   call    critical_enter
db> 
[ thread pid 0 tid 100000 ]
Stopped at      critical_enter: pushl   %ebp
db> n
After 7 instructions (0 loads, 0 stores),
[ thread pid 0 tid 100000 ]
Stopped at      critical_enter+0x1a:    ret
db> s
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x7b:   movl    %esi,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x7d:   andl    $0xff,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x83:   shll    $0x14,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x86:   orl     pcie_base,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x8c:   movl    0xc(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x8f:   andl    $0x1f,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x92:   shll    $0xf,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x95:   orl     %eax,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x97:   movl    0x10(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x9a:   andl    $0x7,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x9d:   shll    $0xc,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xa0:   orl     %eax,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xa2:   movl    0x14(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xa5:   andl    $0xfff,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xaa:   orl     %eax,%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xac:   movl    %edx,0xffffffe4(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xaf:   movl    %edx,%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xb1:   andl    $0xfffff000,%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xb7:   movl    %fs:0x20,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xbd:   movl    %eax,0xffffffec(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xc0:   shll    $0x3,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xc3:   leal    pcie_list(%eax),%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xc9:   movl    %edx,0xffffffe8(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xcc:   movl    pcie_list(%eax),%ebx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xd2:   testl   %ebx,%ebx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xd4:   jz      pci_cfgregwrite+0xeb
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xd6:   cmpl    0xc(%ebx),%esi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xd9:   jnz     pci_cfgregwrite+0xe5
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0xdb:   jmp     pci_cfgregwrite+0x11f
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x11f:  movl    0xffffffe8(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x122:  cmpl    %ebx,0(%eax)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x124:  jz      pci_cfgregwrite+0x164
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x164:  movl    0x18(%ebp),%edx
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x167:  movl    0xffffffe4(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x16a:  andl    $0xfff,%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x16f:  orl     0x8(%ebx),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x172:  movl    %eax,0xfffffff0(%ebp)
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x175:  cmpl    $0x2,%edi
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x178:  jz      pci_cfgregwrite+0x192
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x192:  movl    0xfffffff0(%ebp),%eax
db> 
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x195:  movw    %dx,0(%eax)
db>
=====END VIDCONSOLE OUTPUT=======================

=====BEGIN COMCONSOLE BOOT CONTINUE==============
print %eax
c0d66855
db> x/wx 0xc0d66855
pci_cfgregwrite+0x195:  eb108966
db> s
[ thread pid 0 tid 100000 ]
Stopped at      pci_cfgregwrite+0x198:  jmp     pci_cfgregwrite+0x19f
db> pint %dx
No such command
db> print %dx
c0d66858
db> 
====END COMCONSOLE BOOT CONTINUE======================================

====BEGIN SNIPPIT FROM pci_cfgreg.c
00000380 <pci_cfgregwrite>:
/* 
 * Write configuration space register 
 */
void
pci_cfgregwrite(int bus, int slot, int func, int reg, u_int32_t data, int bytes)
{
 380:    55                       push   %ebp
 381:    89 e5                    mov    %esp,%ebp
 383:    83 ec 30                 sub    $0x30,%esp
 386:    89 5d f4                 mov    %ebx,-0xc(%ebp)
 389:    89 75 f8                 mov    %esi,-0x8(%ebp)
 38c:    89 7d fc                 mov    %edi,-0x4(%ebp)
 38f:    8b 75 08                 mov    0x8(%ebp),%esi
 392:    8b 7d 1c                 mov    0x1c(%ebp),%edi

    if (cfgmech == CFGMECH_PCIE &&
 395:    83 3d 34 01 00 00 03     cmpl   $0x3,0x134
 39c:    0f 85 8e 01 00 00        jne    530 <pci_cfgregwrite+0x1b0>
 3a2:    39 35 28 01 00 00        cmp    %esi,0x128
 3a8:    0f 8f 82 01 00 00        jg     530 <pci_cfgregwrite+0x1b0>
 3ae:    3b 35 2c 01 00 00        cmp    0x12c,%esi
 3b4:    0f 8f 76 01 00 00        jg     530 <pci_cfgregwrite+0x1b0>
 3ba:    85 f6                    test   %esi,%esi
 3bc:    75 17                    jne    3d5 <pci_cfgregwrite+0x55>
 3be:    b8 01 00 00 00           mov    $0x1,%eax
 3c3:    0f b6 4d 0c              movzbl 0xc(%ebp),%ecx
 3c7:    d3 e0                    shl    %cl,%eax
 3c9:    85 05 30 01 00 00        test   %eax,0x130
 3cf:    0f 85 5b 01 00 00        jne    530 <pci_cfgregwrite+0x1b0>
{
    struct pcie_cfg_elem *elem;
    volatile vm_offset_t va;
    vm_paddr_t pa, papage;

    if (bus < pcie_minbus || bus > pcie_maxbus || slot > PCI_SLOTMAX ||
 3d5:    83 7d 0c 1f              cmpl   $0x1f,0xc(%ebp)
 3d9:    0f 87 29 02 00 00        ja     608 <pci_cfgregwrite+0x288>
 3df:    83 7d 10 07              cmpl   $0x7,0x10(%ebp)
 3e3:    0f 87 1f 02 00 00        ja     608 <pci_cfgregwrite+0x288>
 3e9:    81 7d 14 ff 0f 00 00     cmpl   $0xfff,0x14(%ebp)
 3f0:    0f 87 12 02 00 00        ja     608 <pci_cfgregwrite+0x288>
        func > PCI_FUNCMAX || reg > PCIE_REGMAX)
        return;

    critical_enter();
 3f6:    e8 fc ff ff ff           call   3f7 <pci_cfgregwrite+0x77>
    pa = PCIE_PADDR(pcie_base, reg, bus, slot, func);
 3fb:    89 f2                    mov    %esi,%edx
 3fd:    81 e2 ff 00 00 00        and    $0xff,%edx
 403:    c1 e2 14                 shl    $0x14,%edx
 406:    0b 15 20 01 00 00        or     0x120,%edx
 40c:    8b 45 0c                 mov    0xc(%ebp),%eax
 40f:    83 e0 1f                 and    $0x1f,%eax
 412:    c1 e0 0f                 shl    $0xf,%eax
 415:    09 c2                    or     %eax,%edx
 417:    8b 45 10                 mov    0x10(%ebp),%eax
 41a:    83 e0 07                 and    $0x7,%eax
 41d:    c1 e0 0c                 shl    $0xc,%eax
 420:    09 c2                    or     %eax,%edx
 422:    8b 45 14                 mov    0x14(%ebp),%eax
 425:    25 ff 0f 00 00           and    $0xfff,%eax
 42a:    09 c2                    or     %eax,%edx
 42c:    89 55 e4                 mov    %edx,-0x1c(%ebp)
    papage = pa & ~PAGE_MASK;
 42f:    89 d6                    mov    %edx,%esi
 431:    81 e6 00 f0 ff ff        and    $0xfffff000,%esi
pciereg_findelem(vm_paddr_t papage)
{
    struct pcie_cfg_list *pcielist;
    struct pcie_cfg_elem *elem;

    pcielist = &pcie_list[PCPU_GET(cpuid)];
 437:    64 a1 20 00 00 00        mov    %fs:0x20,%eax
 43d:    89 45 ec                 mov    %eax,-0x14(%ebp)
 440:    c1 e0 03                 shl    $0x3,%eax
 443:    8d 90 20 00 00 00        lea    0x20(%eax),%edx
 449:    89 55 e8                 mov    %edx,-0x18(%ebp)
    TAILQ_FOREACH(elem, pcielist, elem) {
 44c:    8b 98 20 00 00 00        mov    0x20(%eax),%ebx
 452:    85 db                    test   %ebx,%ebx
 454:    74 15                    je     46b <pci_cfgregwrite+0xeb>
        if (elem->papage == papage)
 456:    3b 73 0c                 cmp    0xc(%ebx),%esi
 459:    75 0a                    jne    465 <pci_cfgregwrite+0xe5>
 45b:    eb 42                    jmp    49f <pci_cfgregwrite+0x11f>
 45d:    8d 76 00                 lea    0x0(%esi),%esi
 460:    3b 73 0c                 cmp    0xc(%ebx),%esi
 463:    74 3a                    je     49f <pci_cfgregwrite+0x11f>
{
    struct pcie_cfg_list *pcielist;
    struct pcie_cfg_elem *elem;

    pcielist = &pcie_list[PCPU_GET(cpuid)];
    TAILQ_FOREACH(elem, pcielist, elem) {
 465:    8b 1b                    mov    (%ebx),%ebx
 467:    85 db                    test   %ebx,%ebx
 469:    75 f5                    jne    460 <pci_cfgregwrite+0xe0>
        if (elem->papage == papage)
            break;
    }

    if (elem == NULL) {
        elem = TAILQ_LAST(pcielist, pcie_cfg_list);
 46b:    8b 4d e8                 mov    -0x18(%ebp),%ecx
 46e:    8b 41 04                 mov    0x4(%ecx),%eax
 471:    8b 40 04                 mov    0x4(%eax),%eax
 474:    8b 18                    mov    (%eax),%ebx
        if (elem->papage != 0) {
 476:    83 7b 0c 00              cmpl   $0x0,0xc(%ebx)
 47a:    74 11                    je     48d <pci_cfgregwrite+0x10d>
            pmap_kremove(elem->vapage);
 47c:    8b 43 08                 mov    0x8(%ebx),%eax
 47f:    89 04 24                 mov    %eax,(%esp)
 482:    e8 fc ff ff ff           call   483 <pci_cfgregwrite+0x103>
{

#ifdef XEN
    xen_invlpg(addr);
#else
    __asm __volatile("invlpg %0" : : "m" (*(char *)addr) : "memory");
 487:    8b 43 08                 mov    0x8(%ebx),%eax
 48a:    0f 01 38                 invlpg (%eax)
            invlpg(elem->vapage);
        }
        pmap_kenter(elem->vapage, papage);
 48d:    8b 43 08                 mov    0x8(%ebx),%eax
 490:    89 74 24 04              mov    %esi,0x4(%esp)
 494:    89 04 24                 mov    %eax,(%esp)
 497:    e8 fc ff ff ff           call   498 <pci_cfgregwrite+0x118>
        elem->papage = papage;
 49c:    89 73 0c                 mov    %esi,0xc(%ebx)
    }

    if (elem != TAILQ_FIRST(pcielist)) {
 49f:    8b 45 e8                 mov    -0x18(%ebp),%eax
 4a2:    39 18                    cmp    %ebx,(%eax)
 4a4:    74 3e                    je     4e4 <pci_cfgregwrite+0x164>
        TAILQ_REMOVE(pcielist, elem, elem);
 4a6:    8b 13                    mov    (%ebx),%edx
 4a8:    85 d2                    test   %edx,%edx
 4aa:    74 08                    je     4b4 <pci_cfgregwrite+0x134>
 4ac:    8b 43 04                 mov    0x4(%ebx),%eax
 4af:    89 42 04                 mov    %eax,0x4(%edx)
 4b2:    eb 09                    jmp    4bd <pci_cfgregwrite+0x13d>
 4b4:    8b 43 04                 mov    0x4(%ebx),%eax
 4b7:    8b 55 e8                 mov    -0x18(%ebp),%edx
 4ba:    89 42 04                 mov    %eax,0x4(%edx)
 4bd:    8b 43 04                 mov    0x4(%ebx),%eax
 4c0:    8b 13                    mov    (%ebx),%edx
 4c2:    89 10                    mov    %edx,(%eax)
        TAILQ_INSERT_HEAD(pcielist, elem, elem);
 4c4:    8b 4d e8                 mov    -0x18(%ebp),%ecx
 4c7:    8b 01                    mov    (%ecx),%eax
 4c9:    89 03                    mov    %eax,(%ebx)
 4cb:    85 c0                    test   %eax,%eax
 4cd:    74 07                    je     4d6 <pci_cfgregwrite+0x156>
 4cf:    8b 01                    mov    (%ecx),%eax
 4d1:    89 58 04                 mov    %ebx,0x4(%eax)
 4d4:    eb 06                    jmp    4dc <pci_cfgregwrite+0x15c>
 4d6:    8b 45 e8                 mov    -0x18(%ebp),%eax
 4d9:    89 58 04                 mov    %ebx,0x4(%eax)
 4dc:    8b 55 e8                 mov    -0x18(%ebp),%edx
 4df:    89 1a                    mov    %ebx,(%edx)
 4e1:    89 53 04                 mov    %edx,0x4(%ebx)
{

    if (cfgmech == CFGMECH_PCIE &&
        (bus >= pcie_minbus && bus <= pcie_maxbus) &&
        (bus != 0 || !(1 << slot & pcie_badslots)))
        pciereg_cfgwrite(bus, slot, func, reg, data, bytes);
 4e4:    8b 55 18                 mov    0x18(%ebp),%edx

    critical_enter();
    pa = PCIE_PADDR(pcie_base, reg, bus, slot, func);
    papage = pa & ~PAGE_MASK;
    elem = pciereg_findelem(papage);
    va = elem->vapage | (pa & PAGE_MASK);
 4e7:    8b 45 e4                 mov    -0x1c(%ebp),%eax
 4ea:    25 ff 0f 00 00           and    $0xfff,%eax
 4ef:    0b 43 08                 or     0x8(%ebx),%eax
 4f2:    89 45 f0                 mov    %eax,-0x10(%ebp)

    switch (bytes) {
 4f5:    83 ff 02                 cmp    $0x2,%edi
 4f8:    74 18                    je     512 <pci_cfgregwrite+0x192>
 4fa:    83 ff 04                 cmp    $0x4,%edi
 4fd:    74 07                    je     506 <pci_cfgregwrite+0x186>
 4ff:    83 ff 01                 cmp    $0x1,%edi
 502:    75 1b                    jne    51f <pci_cfgregwrite+0x19f>
 504:    eb 14                    jmp    51a <pci_cfgregwrite+0x19a>
    case 4:
        *(volatile uint32_t *)(va) = data;
 506:    8b 45 f0                 mov    -0x10(%ebp),%eax
 509:    8b 4d 18                 mov    0x18(%ebp),%ecx
 50c:    89 08                    mov    %ecx,(%eax)
 50e:    66 90                    xchg   %ax,%ax
 510:    eb 0d                    jmp    51f <pci_cfgregwrite+0x19f>
        break;
    case 2:
        *(volatile uint16_t *)(va) = data;
 512:    8b 45 f0                 mov    -0x10(%ebp),%eax
=====================================================================
== VIDCONSOLE BOOT HANGS HERE AT mov %dx,(%eax)
=====================================================================
 515:    66 89 10                 mov    %dx,(%eax)
 518:    eb 05                    jmp    51f <pci_cfgregwrite+0x19f>
        break;
    case 1:
        *(volatile uint8_t *)(va) = data;
 51a:    8b 45 f0                 mov    -0x10(%ebp),%eax
 51d:    88 10                    mov    %dl,(%eax)
        break;
    }

    critical_exit();
 51f:    e8 fc ff ff ff           call   520 <pci_cfgregwrite+0x1a0>
 524:    e9 df 00 00 00           jmp    608 <pci_cfgregwrite+0x288>
 529:    8d b4 26 00 00 00 00     lea    0x0(%esi),%esi
====END SNIPPIT FROM pci_cfgreg.c
Comment 2 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 07:59:04 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped