Commit 923e5e339f16d55109a75e3f99a2c668571cc58b
1 parent
72fb7daa
qemu ppc uic: Order IRQ bit number as described in the UIC documentation.
(Hollis Blanchard) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4273 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
24 additions
and
23 deletions
hw/ppc405_uc.c
| @@ -2587,13 +2587,13 @@ CPUState *ppc405cr_init (target_phys_addr_t ram_bases[4], | @@ -2587,13 +2587,13 @@ CPUState *ppc405cr_init (target_phys_addr_t ram_bases[4], | ||
| 2587 | ppc405_dma_init(env, dma_irqs); | 2587 | ppc405_dma_init(env, dma_irqs); |
| 2588 | /* Serial ports */ | 2588 | /* Serial ports */ |
| 2589 | if (serial_hds[0] != NULL) { | 2589 | if (serial_hds[0] != NULL) { |
| 2590 | - ppc405_serial_init(env, mmio, 0x300, pic[31], serial_hds[0]); | 2590 | + ppc405_serial_init(env, mmio, 0x300, pic[0], serial_hds[0]); |
| 2591 | } | 2591 | } |
| 2592 | if (serial_hds[1] != NULL) { | 2592 | if (serial_hds[1] != NULL) { |
| 2593 | - ppc405_serial_init(env, mmio, 0x400, pic[30], serial_hds[1]); | 2593 | + ppc405_serial_init(env, mmio, 0x400, pic[1], serial_hds[1]); |
| 2594 | } | 2594 | } |
| 2595 | /* IIC controller */ | 2595 | /* IIC controller */ |
| 2596 | - ppc405_i2c_init(env, mmio, 0x500, pic[29]); | 2596 | + ppc405_i2c_init(env, mmio, 0x500, pic[2]); |
| 2597 | /* GPIO */ | 2597 | /* GPIO */ |
| 2598 | ppc405_gpio_init(env, mmio, 0x700); | 2598 | ppc405_gpio_init(env, mmio, 0x700); |
| 2599 | /* CPU control */ | 2599 | /* CPU control */ |
| @@ -2930,49 +2930,50 @@ CPUState *ppc405ep_init (target_phys_addr_t ram_bases[2], | @@ -2930,49 +2930,50 @@ CPUState *ppc405ep_init (target_phys_addr_t ram_bases[2], | ||
| 2930 | pic = ppcuic_init(env, irqs, 0x0C0, 0, 1); | 2930 | pic = ppcuic_init(env, irqs, 0x0C0, 0, 1); |
| 2931 | *picp = pic; | 2931 | *picp = pic; |
| 2932 | /* SDRAM controller */ | 2932 | /* SDRAM controller */ |
| 2933 | - ppc405_sdram_init(env, pic[14], 2, ram_bases, ram_sizes, do_init); | 2933 | + /* XXX 405EP has no ECC interrupt */ |
| 2934 | + ppc405_sdram_init(env, pic[17], 2, ram_bases, ram_sizes, do_init); | ||
| 2934 | offset = 0; | 2935 | offset = 0; |
| 2935 | for (i = 0; i < 2; i++) | 2936 | for (i = 0; i < 2; i++) |
| 2936 | offset += ram_sizes[i]; | 2937 | offset += ram_sizes[i]; |
| 2937 | /* External bus controller */ | 2938 | /* External bus controller */ |
| 2938 | ppc405_ebc_init(env); | 2939 | ppc405_ebc_init(env); |
| 2939 | /* DMA controller */ | 2940 | /* DMA controller */ |
| 2940 | - dma_irqs[0] = pic[26]; | ||
| 2941 | - dma_irqs[1] = pic[25]; | ||
| 2942 | - dma_irqs[2] = pic[24]; | ||
| 2943 | - dma_irqs[3] = pic[23]; | 2941 | + dma_irqs[0] = pic[5]; |
| 2942 | + dma_irqs[1] = pic[6]; | ||
| 2943 | + dma_irqs[2] = pic[7]; | ||
| 2944 | + dma_irqs[3] = pic[8]; | ||
| 2944 | ppc405_dma_init(env, dma_irqs); | 2945 | ppc405_dma_init(env, dma_irqs); |
| 2945 | /* IIC controller */ | 2946 | /* IIC controller */ |
| 2946 | - ppc405_i2c_init(env, mmio, 0x500, pic[29]); | 2947 | + ppc405_i2c_init(env, mmio, 0x500, pic[2]); |
| 2947 | /* GPIO */ | 2948 | /* GPIO */ |
| 2948 | ppc405_gpio_init(env, mmio, 0x700); | 2949 | ppc405_gpio_init(env, mmio, 0x700); |
| 2949 | /* Serial ports */ | 2950 | /* Serial ports */ |
| 2950 | if (serial_hds[0] != NULL) { | 2951 | if (serial_hds[0] != NULL) { |
| 2951 | - ppc405_serial_init(env, mmio, 0x300, pic[31], serial_hds[0]); | 2952 | + ppc405_serial_init(env, mmio, 0x300, pic[0], serial_hds[0]); |
| 2952 | } | 2953 | } |
| 2953 | if (serial_hds[1] != NULL) { | 2954 | if (serial_hds[1] != NULL) { |
| 2954 | - ppc405_serial_init(env, mmio, 0x400, pic[30], serial_hds[1]); | 2955 | + ppc405_serial_init(env, mmio, 0x400, pic[1], serial_hds[1]); |
| 2955 | } | 2956 | } |
| 2956 | /* OCM */ | 2957 | /* OCM */ |
| 2957 | ppc405_ocm_init(env, ram_sizes[0] + ram_sizes[1]); | 2958 | ppc405_ocm_init(env, ram_sizes[0] + ram_sizes[1]); |
| 2958 | offset += 4096; | 2959 | offset += 4096; |
| 2959 | /* GPT */ | 2960 | /* GPT */ |
| 2960 | - gpt_irqs[0] = pic[12]; | ||
| 2961 | - gpt_irqs[1] = pic[11]; | ||
| 2962 | - gpt_irqs[2] = pic[10]; | ||
| 2963 | - gpt_irqs[3] = pic[9]; | ||
| 2964 | - gpt_irqs[4] = pic[8]; | 2961 | + gpt_irqs[0] = pic[19]; |
| 2962 | + gpt_irqs[1] = pic[20]; | ||
| 2963 | + gpt_irqs[2] = pic[21]; | ||
| 2964 | + gpt_irqs[3] = pic[22]; | ||
| 2965 | + gpt_irqs[4] = pic[23]; | ||
| 2965 | ppc4xx_gpt_init(env, mmio, 0x000, gpt_irqs); | 2966 | ppc4xx_gpt_init(env, mmio, 0x000, gpt_irqs); |
| 2966 | /* PCI */ | 2967 | /* PCI */ |
| 2967 | - /* Uses pic[28], pic[15], pic[13] */ | 2968 | + /* Uses pic[3], pic[16], pic[18] */ |
| 2968 | /* MAL */ | 2969 | /* MAL */ |
| 2969 | - mal_irqs[0] = pic[20]; | ||
| 2970 | - mal_irqs[1] = pic[19]; | ||
| 2971 | - mal_irqs[2] = pic[18]; | ||
| 2972 | - mal_irqs[3] = pic[17]; | 2970 | + mal_irqs[0] = pic[11]; |
| 2971 | + mal_irqs[1] = pic[12]; | ||
| 2972 | + mal_irqs[2] = pic[13]; | ||
| 2973 | + mal_irqs[3] = pic[14]; | ||
| 2973 | ppc405_mal_init(env, mal_irqs); | 2974 | ppc405_mal_init(env, mal_irqs); |
| 2974 | /* Ethernet */ | 2975 | /* Ethernet */ |
| 2975 | - /* Uses pic[22], pic[16], pic[14] */ | 2976 | + /* Uses pic[9], pic[15], pic[17] */ |
| 2976 | /* CPU control */ | 2977 | /* CPU control */ |
| 2977 | ppc405ep_cpc_init(env, clk_setup, sysclk); | 2978 | ppc405ep_cpc_init(env, clk_setup, sysclk); |
| 2978 | *offsetp = offset; | 2979 | *offsetp = offset; |
hw/ppc4xx_devs.c
| @@ -365,7 +365,7 @@ static void ppcuic_set_irq (void *opaque, int irq_num, int level) | @@ -365,7 +365,7 @@ static void ppcuic_set_irq (void *opaque, int irq_num, int level) | ||
| 365 | uint32_t mask, sr; | 365 | uint32_t mask, sr; |
| 366 | 366 | ||
| 367 | uic = opaque; | 367 | uic = opaque; |
| 368 | - mask = 1 << irq_num; | 368 | + mask = 1 << (31-irq_num); |
| 369 | #ifdef DEBUG_UIC | 369 | #ifdef DEBUG_UIC |
| 370 | if (loglevel & CPU_LOG_INT) { | 370 | if (loglevel & CPU_LOG_INT) { |
| 371 | fprintf(logfile, "%s: irq %d level %d uicsr %08" PRIx32 | 371 | fprintf(logfile, "%s: irq %d level %d uicsr %08" PRIx32 |