diff options
Diffstat (limited to 'arch/sparc64/kernel/sun4v_ivec.S')
-rw-r--r-- | arch/sparc64/kernel/sun4v_ivec.S | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/arch/sparc64/kernel/sun4v_ivec.S b/arch/sparc64/kernel/sun4v_ivec.S index b49a68bdda43..f70e4774649d 100644 --- a/arch/sparc64/kernel/sun4v_ivec.S +++ b/arch/sparc64/kernel/sun4v_ivec.S | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <asm/cpudata.h> | 6 | #include <asm/cpudata.h> |
7 | #include <asm/intr_queue.h> | 7 | #include <asm/intr_queue.h> |
8 | #include <asm/pil.h> | ||
8 | 9 | ||
9 | .text | 10 | .text |
10 | .align 32 | 11 | .align 32 |
@@ -106,19 +107,13 @@ sun4v_dev_mondo: | |||
106 | or %g4, %lo(ivector_table), %g4 | 107 | or %g4, %lo(ivector_table), %g4 |
107 | add %g4, %g3, %g4 | 108 | add %g4, %g3, %g4 |
108 | 109 | ||
109 | /* Load IRQ %pil into %g5. */ | ||
110 | ldub [%g4 + 0x04], %g5 | ||
111 | |||
112 | /* Insert ivector_table[] entry into __irq_work[] queue. */ | 110 | /* Insert ivector_table[] entry into __irq_work[] queue. */ |
113 | sllx %g5, 2, %g3 | 111 | lduw [%g1], %g2 /* g2 = irq_work(cpu) */ |
114 | lduw [%g1 + %g3], %g2 /* g2 = irq_work(cpu, pil) */ | ||
115 | stw %g2, [%g4 + 0x00] /* bucket->irq_chain = g2 */ | 112 | stw %g2, [%g4 + 0x00] /* bucket->irq_chain = g2 */ |
116 | stw %g4, [%g1 + %g3] /* irq_work(cpu, pil) = bucket */ | 113 | stw %g4, [%g1] /* irq_work(cpu) = bucket */ |
117 | 114 | ||
118 | /* Signal the interrupt by setting (1 << pil) in %softint. */ | 115 | /* Signal the interrupt by setting (1 << pil) in %softint. */ |
119 | mov 1, %g2 | 116 | wr %g0, 1 << PIL_DEVICE_IRQ, %set_softint |
120 | sllx %g2, %g5, %g2 | ||
121 | wr %g2, 0x0, %set_softint | ||
122 | 117 | ||
123 | sun4v_dev_mondo_queue_empty: | 118 | sun4v_dev_mondo_queue_empty: |
124 | retry | 119 | retry |