diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-20 20:39:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-20 20:39:28 -0400 |
commit | be883da7594b0a2a02074e683673ae0e522566a4 (patch) | |
tree | b62f2a8a069fb4d389935c0b2de9bc78798f50c2 /arch/sparc64/kernel/sun4v_ivec.S | |
parent | 077e98945db7e54a9865b5f29a1f02f531eca414 (diff) | |
parent | 4c5eb38af2131d867842cdd09fa83a3ed77bfd26 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
[SPARC64]: Update defconfig.
[SPARC64]: Don't double-export synchronize_irq.
[SPARC64]: Move over to GENERIC_HARDIRQS.
[SPARC64]: Virtualize IRQ numbers.
[SPARC64]: Kill ino_bucket->pil
[SPARC]: Kill __irq_itoa().
[SPARC64]: bp->pil can never be zero
[SPARC64]: Send all device interrupts via one PIL.
[SPARC]: Fix iommu_flush_iotlb end address
[SPARC]: Mark smp init functions as cpuinit
[SPARC]: Add missing rw can_lock macros
[SPARC]: Setup cpu_possible_map
[SPARC]: Add topology_init()
Diffstat (limited to 'arch/sparc64/kernel/sun4v_ivec.S')
-rw-r--r-- | arch/sparc64/kernel/sun4v_ivec.S | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/arch/sparc64/kernel/sun4v_ivec.S b/arch/sparc64/kernel/sun4v_ivec.S index b49a68bdda43..49703c3c5769 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 |
@@ -102,23 +103,17 @@ sun4v_dev_mondo: | |||
102 | 103 | ||
103 | /* Get &ivector_table[IVEC] into %g4. */ | 104 | /* Get &ivector_table[IVEC] into %g4. */ |
104 | sethi %hi(ivector_table), %g4 | 105 | sethi %hi(ivector_table), %g4 |
105 | sllx %g3, 5, %g3 | 106 | sllx %g3, 3, %g3 |
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 |