diff options
Diffstat (limited to 'arch/x86/kernel/io_apic_64.c')
-rw-r--r-- | arch/x86/kernel/io_apic_64.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index 6510cde36b35..64a46affd858 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <asm/proto.h> | 45 | #include <asm/proto.h> |
46 | #include <asm/acpi.h> | 46 | #include <asm/acpi.h> |
47 | #include <asm/dma.h> | 47 | #include <asm/dma.h> |
48 | #include <asm/i8259.h> | ||
48 | #include <asm/nmi.h> | 49 | #include <asm/nmi.h> |
49 | #include <asm/msidef.h> | 50 | #include <asm/msidef.h> |
50 | #include <asm/hypertransport.h> | 51 | #include <asm/hypertransport.h> |
@@ -1696,8 +1697,9 @@ static inline void __init check_timer(void) | |||
1696 | pin2 = ioapic_i8259.pin; | 1697 | pin2 = ioapic_i8259.pin; |
1697 | apic2 = ioapic_i8259.apic; | 1698 | apic2 = ioapic_i8259.apic; |
1698 | 1699 | ||
1699 | apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n", | 1700 | apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " |
1700 | cfg->vector, apic1, pin1, apic2, pin2); | 1701 | "apic1=%d pin1=%d apic2=%d pin2=%d\n", |
1702 | cfg->vector, apic1, pin1, apic2, pin2); | ||
1701 | 1703 | ||
1702 | /* | 1704 | /* |
1703 | * Some BIOS writers are clueless and report the ExtINTA | 1705 | * Some BIOS writers are clueless and report the ExtINTA |
@@ -1735,14 +1737,13 @@ static inline void __init check_timer(void) | |||
1735 | } | 1737 | } |
1736 | clear_IO_APIC_pin(apic1, pin1); | 1738 | clear_IO_APIC_pin(apic1, pin1); |
1737 | if (!no_pin1) | 1739 | if (!no_pin1) |
1738 | apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: " | 1740 | apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " |
1739 | "8254 timer not connected to IO-APIC\n"); | 1741 | "8254 timer not connected to IO-APIC\n"); |
1740 | 1742 | ||
1741 | apic_printk(APIC_VERBOSE,KERN_INFO | 1743 | apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " |
1742 | "...trying to set up timer (IRQ0) " | 1744 | "(IRQ0) through the 8259A ...\n"); |
1743 | "through the 8259A ... "); | 1745 | apic_printk(APIC_QUIET, KERN_INFO |
1744 | apic_printk(APIC_VERBOSE,"\n..... (found apic %d pin %d) ...", | 1746 | "..... (found apic %d pin %d) ...\n", apic2, pin2); |
1745 | apic2, pin2); | ||
1746 | /* | 1747 | /* |
1747 | * legacy devices should be connected to IO APIC #0 | 1748 | * legacy devices should be connected to IO APIC #0 |
1748 | */ | 1749 | */ |
@@ -1751,7 +1752,7 @@ static inline void __init check_timer(void) | |||
1751 | unmask_IO_APIC_irq(0); | 1752 | unmask_IO_APIC_irq(0); |
1752 | enable_8259A_irq(0); | 1753 | enable_8259A_irq(0); |
1753 | if (timer_irq_works()) { | 1754 | if (timer_irq_works()) { |
1754 | apic_printk(APIC_VERBOSE," works.\n"); | 1755 | apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); |
1755 | timer_through_8259 = 1; | 1756 | timer_through_8259 = 1; |
1756 | if (nmi_watchdog == NMI_IO_APIC) { | 1757 | if (nmi_watchdog == NMI_IO_APIC) { |
1757 | disable_8259A_irq(0); | 1758 | disable_8259A_irq(0); |
@@ -1765,29 +1766,32 @@ static inline void __init check_timer(void) | |||
1765 | */ | 1766 | */ |
1766 | disable_8259A_irq(0); | 1767 | disable_8259A_irq(0); |
1767 | clear_IO_APIC_pin(apic2, pin2); | 1768 | clear_IO_APIC_pin(apic2, pin2); |
1768 | apic_printk(APIC_VERBOSE," failed.\n"); | 1769 | apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); |
1769 | } | 1770 | } |
1770 | 1771 | ||
1771 | if (nmi_watchdog == NMI_IO_APIC) { | 1772 | if (nmi_watchdog == NMI_IO_APIC) { |
1772 | printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); | 1773 | apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " |
1774 | "through the IO-APIC - disabling NMI Watchdog!\n"); | ||
1773 | nmi_watchdog = NMI_NONE; | 1775 | nmi_watchdog = NMI_NONE; |
1774 | } | 1776 | } |
1775 | 1777 | ||
1776 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); | 1778 | apic_printk(APIC_QUIET, KERN_INFO |
1779 | "...trying to set up timer as Virtual Wire IRQ...\n"); | ||
1777 | 1780 | ||
1778 | lapic_register_intr(0); | 1781 | lapic_register_intr(0); |
1779 | apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ | 1782 | apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ |
1780 | enable_8259A_irq(0); | 1783 | enable_8259A_irq(0); |
1781 | 1784 | ||
1782 | if (timer_irq_works()) { | 1785 | if (timer_irq_works()) { |
1783 | apic_printk(APIC_VERBOSE," works.\n"); | 1786 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
1784 | goto out; | 1787 | goto out; |
1785 | } | 1788 | } |
1786 | disable_8259A_irq(0); | 1789 | disable_8259A_irq(0); |
1787 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); | 1790 | apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); |
1788 | apic_printk(APIC_VERBOSE," failed.\n"); | 1791 | apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); |
1789 | 1792 | ||
1790 | apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ..."); | 1793 | apic_printk(APIC_QUIET, KERN_INFO |
1794 | "...trying to set up timer as ExtINT IRQ...\n"); | ||
1791 | 1795 | ||
1792 | init_8259A(0); | 1796 | init_8259A(0); |
1793 | make_8259A_irq(0); | 1797 | make_8259A_irq(0); |
@@ -1796,11 +1800,12 @@ static inline void __init check_timer(void) | |||
1796 | unlock_ExtINT_logic(); | 1800 | unlock_ExtINT_logic(); |
1797 | 1801 | ||
1798 | if (timer_irq_works()) { | 1802 | if (timer_irq_works()) { |
1799 | apic_printk(APIC_VERBOSE," works.\n"); | 1803 | apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); |
1800 | goto out; | 1804 | goto out; |
1801 | } | 1805 | } |
1802 | apic_printk(APIC_VERBOSE," failed :(.\n"); | 1806 | apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); |
1803 | panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); | 1807 | panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " |
1808 | "report. Then try booting with the 'noapic' option.\n"); | ||
1804 | out: | 1809 | out: |
1805 | local_irq_restore(flags); | 1810 | local_irq_restore(flags); |
1806 | } | 1811 | } |