Skip to contentSkip to conversation

set ar.k0 on APs

PATCH In review Bjorn Helgaas 2 participants 2 messages Apr 1, 2002 – Apr 2, 2002

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 set ar.k0 on APs

We currently set ar.k0 on the BP, but not on the APs. The following patch does it for APs as well.

Apparently Intel firmware sets ar.k0, but HP firmware doesn't. If the kernel doesn't set ar.k0, X won't start up on APs because it uses ar.k0 to access I/O port space.

Signature · 28 lines
Bjorn Helgaas - [email protected]
Linux Systems Operation R&D
Hewlett-Packard


diff -u -r linux-2.4.18-ia64-020226-orig/arch/ia64/kernel/smpboot.c linux-2.4.18-ia64-020226/arch/ia64/kernel/smpboot.c
--- linux-2.4.18-ia64-020226-orig/arch/ia64/kernel/smpboot.c	Mon Apr  1 16:43:58 2002
+++ linux-2.4.18-ia64-020226/arch/ia64/kernel/smpboot.c	Mon Apr  1 16:44:51 2002
@@ -68,6 +68,7 @@
 
 extern void __init calibrate_delay(void);
 extern void start_ap(void);
+extern unsigned long ia64_iobase;
 
 int cpucount;
 
@@ -343,6 +344,11 @@
 	 * Get our bogomips.
 	 */
 	ia64_init_itm();
+
+	/*
+	 * Set I/O port base per CPU
+	 */
+	ia64_set_kr(IA64_KR_IO_BASE, ia64_iobase & ~PAGE_OFFSET);
 
 #ifdef CONFIG_IA64_MCA
 	ia64_mca_cmc_vector_setup();	/* Setup vector on AP & enable */
#1 lore raw
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Bjorn Helgaas

Bjorn> We currently set ar.k0 on the BP, but not on the APs. The following Bjorn> patch does it for APs as well.

Bjorn> Apparently Intel firmware sets ar.k0, but HP firmware doesn't. Bjorn> If the kernel doesn't set ar.k0, X won't start up on APs because Bjorn> it uses ar.k0 to access I/O port space.

Sounds good.

  Bjorn> +	/*
  Bjorn> +	 * Set I/O port base per CPU
  Bjorn> +	 */
  Bjorn> +	ia64_set_kr(IA64_KR_IO_BASE, ia64_iobase & ~PAGE_OFFSET);

But you shouldn't mask anything with PAGE_OFFSET (it's a base-address, not a mask). __pa() can be used instead. I see that setup.c had the same problem, so I cleaned that up as well, plus I made it use ioremap(), instead of hardcoding the formation of an uncachable mapping).

Thanks,

	--david