]> git.neil.brown.name Git - history.git/commitdiff
Initialize ar.k0 with physical I/O base not just on BP but also on
authorDavid Mosberger <davidm@wailua.hpl.hp.com>
Mon, 1 Apr 2002 08:12:58 +0000 (00:12 -0800)
committerDavid Mosberger <davidm@wailua.hpl.hp.com>
Mon, 1 Apr 2002 08:12:58 +0000 (00:12 -0800)
all APs (based on patch by Bjorn Helgaas).

arch/ia64/kernel/setup.c
arch/ia64/kernel/smpboot.c

index 1befaecbf33956d7b5aea7677a875846451c1504..bab82a54556c9ae9a52a5ed910612f5e7dadce0c 100644 (file)
@@ -282,6 +282,7 @@ void __init
 setup_arch (char **cmdline_p)
 {
        extern unsigned long ia64_iobase;
+       unsigned long phys_iobase;
 
        unw_init();
 
@@ -322,16 +323,16 @@ setup_arch (char **cmdline_p)
         *  clear in future SAL specs. We'll fall back to getting it out of
         *  AR.KR0 if no appropriate entry is found in the memory map.
         */
-       ia64_iobase = efi_get_iobase();
-       if (ia64_iobase)
+       phys_iobase = efi_get_iobase();
+       if (phys_iobase)
                /* set AR.KR0 since this is all we use it for anyway */
-               ia64_set_kr(IA64_KR_IO_BASE, ia64_iobase);
+               ia64_set_kr(IA64_KR_IO_BASE, phys_iobase);
        else {
-               ia64_iobase = ia64_get_kr(IA64_KR_IO_BASE);
+               phys_iobase = ia64_get_kr(IA64_KR_IO_BASE);
                printk("No I/O port range found in EFI memory map, falling back to AR.KR0\n");
-               printk("I/O port base = 0x%lx\n", ia64_iobase);
+               printk("I/O port base = 0x%lx\n", phys_iobase);
        }
-       ia64_iobase = __IA64_UNCACHED_OFFSET | (ia64_iobase & ~PAGE_OFFSET);
+       ia64_iobase = ioremap(phys_iobase);
 
 #ifdef CONFIG_SMP
        cpu_physical_id(0) = hard_smp_processor_id();
index c339635170d28d1ebd1770892960ed6b7ee026ef..3aea6cbae398642d1cf81f876af64900bd8fe3ca 100644 (file)
@@ -345,6 +345,11 @@ smp_callin (void)
         */
        ia64_init_itm();
 
+       /*
+        * Set I/O port base per CPU
+        */
+       ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase));
+
 #ifdef CONFIG_IA64_MCA
        ia64_mca_cmc_vector_setup();    /* Setup vector on AP & enable */
        ia64_mca_check_errors();        /* For post-failure MCA error logging */