diff options
-rw-r--r-- | arch/sparc64/kernel/entry.S | 12 | ||||
-rw-r--r-- | arch/sparc64/kernel/irq.c | 26 | ||||
-rw-r--r-- | include/asm-sparc64/hypervisor.h | 6 |
3 files changed, 25 insertions, 19 deletions
diff --git a/arch/sparc64/kernel/entry.S b/arch/sparc64/kernel/entry.S index bf40b065bcc0..f5c8a293979f 100644 --- a/arch/sparc64/kernel/entry.S +++ b/arch/sparc64/kernel/entry.S | |||
@@ -1772,3 +1772,15 @@ sun4v_intr_settarget: | |||
1772 | retl | 1772 | retl |
1773 | nop | 1773 | nop |
1774 | 1774 | ||
1775 | /* %o0: type | ||
1776 | * %o1: queue paddr | ||
1777 | * %o2: num queue entries | ||
1778 | * | ||
1779 | * returns %o0: status | ||
1780 | */ | ||
1781 | .globl sun4v_cpu_qconf | ||
1782 | sun4v_cpu_qconf: | ||
1783 | mov HV_FAST_CPU_QCONF, %o5 | ||
1784 | ta HV_FAST_TRAP | ||
1785 | retl | ||
1786 | nop | ||
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index 4d9931d124ab..e1729e5189a3 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c | |||
@@ -939,25 +939,13 @@ void init_irqwork_curcpu(void) | |||
939 | 939 | ||
940 | static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type) | 940 | static void __cpuinit register_one_mondo(unsigned long paddr, unsigned long type) |
941 | { | 941 | { |
942 | register unsigned long func __asm__("%o5"); | 942 | unsigned long num_entries = 128; |
943 | register unsigned long arg0 __asm__("%o0"); | 943 | unsigned long status; |
944 | register unsigned long arg1 __asm__("%o1"); | 944 | |
945 | register unsigned long arg2 __asm__("%o2"); | 945 | status = sun4v_cpu_qconf(type, paddr, num_entries); |
946 | 946 | if (status != HV_EOK) { | |
947 | func = HV_FAST_CPU_QCONF; | 947 | prom_printf("SUN4V: sun4v_cpu_qconf(%lu:%lx:%lu) failed, " |
948 | arg0 = type; | 948 | "err %lu\n", type, paddr, num_entries, status); |
949 | arg1 = paddr; | ||
950 | arg2 = 128; /* XXX Implied by Niagara queue offsets. XXX */ | ||
951 | __asm__ __volatile__("ta %8" | ||
952 | : "=&r" (func), "=&r" (arg0), | ||
953 | "=&r" (arg1), "=&r" (arg2) | ||
954 | : "0" (func), "1" (arg0), | ||
955 | "2" (arg1), "3" (arg2), | ||
956 | "i" (HV_FAST_TRAP)); | ||
957 | |||
958 | if (arg0 != HV_EOK) { | ||
959 | prom_printf("SUN4V: cpu_qconf(%lu) failed with error %lu\n", | ||
960 | type, func); | ||
961 | prom_halt(); | 949 | prom_halt(); |
962 | } | 950 | } |
963 | } | 951 | } |
diff --git a/include/asm-sparc64/hypervisor.h b/include/asm-sparc64/hypervisor.h index f14992ab7fec..cd5fbcd9556e 100644 --- a/include/asm-sparc64/hypervisor.h +++ b/include/asm-sparc64/hypervisor.h | |||
@@ -301,6 +301,12 @@ | |||
301 | #define HV_CPU_QUEUE_RES_ERROR 0x3e | 301 | #define HV_CPU_QUEUE_RES_ERROR 0x3e |
302 | #define HV_CPU_QUEUE_NONRES_ERROR 0x3f | 302 | #define HV_CPU_QUEUE_NONRES_ERROR 0x3f |
303 | 303 | ||
304 | #ifndef __ASSEMBLY__ | ||
305 | extern unsigned long sun4v_cpu_qconf(unsigned long type, | ||
306 | unsigned long queue_paddr, | ||
307 | unsigned long num_queue_entries); | ||
308 | #endif | ||
309 | |||
304 | /* cpu_qinfo() | 310 | /* cpu_qinfo() |
305 | * TRAP: HV_FAST_TRAP | 311 | * TRAP: HV_FAST_TRAP |
306 | * FUNCTION: HV_FAST_CPU_QINFO | 312 | * FUNCTION: HV_FAST_CPU_QINFO |