Commit 6bae70713cb2f87be60ef4f83105c2c928d8612e
1 parent
90f11f95
sparc fix (Blue Swirl)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1262 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
5 additions
and
5 deletions
hw/slavio_intctl.c
| @@ -113,7 +113,7 @@ static uint32_t slavio_intctlm_mem_readl(void *opaque, target_phys_addr_t addr) | @@ -113,7 +113,7 @@ static uint32_t slavio_intctlm_mem_readl(void *opaque, target_phys_addr_t addr) | ||
| 113 | saddr = (addr & INTCTLM_MAXADDR) >> 2; | 113 | saddr = (addr & INTCTLM_MAXADDR) >> 2; |
| 114 | switch (saddr) { | 114 | switch (saddr) { |
| 115 | case 0: | 115 | case 0: |
| 116 | - return s->intregm_pending; | 116 | + return s->intregm_pending & 0x7fffffff; |
| 117 | case 1: | 117 | case 1: |
| 118 | return s->intregm_disabled; | 118 | return s->intregm_disabled; |
| 119 | case 4: | 119 | case 4: |
| @@ -132,12 +132,12 @@ static void slavio_intctlm_mem_writel(void *opaque, target_phys_addr_t addr, uin | @@ -132,12 +132,12 @@ static void slavio_intctlm_mem_writel(void *opaque, target_phys_addr_t addr, uin | ||
| 132 | saddr = (addr & INTCTLM_MAXADDR) >> 2; | 132 | saddr = (addr & INTCTLM_MAXADDR) >> 2; |
| 133 | switch (saddr) { | 133 | switch (saddr) { |
| 134 | case 2: // clear (enable) | 134 | case 2: // clear (enable) |
| 135 | - // Force unused bits | ||
| 136 | - val |= 0x7fb2007f; | 135 | + // Force clear unused bits |
| 136 | + val &= ~0x7fb2007f; | ||
| 137 | s->intregm_disabled &= ~val; | 137 | s->intregm_disabled &= ~val; |
| 138 | break; | 138 | break; |
| 139 | case 3: // set (disable, clear pending) | 139 | case 3: // set (disable, clear pending) |
| 140 | - // Force unused bits | 140 | + // Force clear unused bits |
| 141 | val &= ~0x7fb2007f; | 141 | val &= ~0x7fb2007f; |
| 142 | s->intregm_disabled |= val; | 142 | s->intregm_disabled |= val; |
| 143 | s->intregm_pending &= ~val; | 143 | s->intregm_pending &= ~val; |
| @@ -269,7 +269,7 @@ static void slavio_intctl_reset(void *opaque) | @@ -269,7 +269,7 @@ static void slavio_intctl_reset(void *opaque) | ||
| 269 | for (i = 0; i < MAX_CPUS; i++) { | 269 | for (i = 0; i < MAX_CPUS; i++) { |
| 270 | s->intreg_pending[i] = 0; | 270 | s->intreg_pending[i] = 0; |
| 271 | } | 271 | } |
| 272 | - s->intregm_disabled = 0xffffffff; | 272 | + s->intregm_disabled = ~0xffb2007f; |
| 273 | s->intregm_pending = 0; | 273 | s->intregm_pending = 0; |
| 274 | s->target_cpu = 0; | 274 | s->target_cpu = 0; |
| 275 | } | 275 | } |