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 | 2587 | ppc405_dma_init(env, dma_irqs); |
2588 | 2588 | /* Serial ports */ |
2589 | 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 | 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 | 2595 | /* IIC controller */ |
2596 | - ppc405_i2c_init(env, mmio, 0x500, pic[29]); | |
2596 | + ppc405_i2c_init(env, mmio, 0x500, pic[2]); | |
2597 | 2597 | /* GPIO */ |
2598 | 2598 | ppc405_gpio_init(env, mmio, 0x700); |
2599 | 2599 | /* CPU control */ |
... | ... | @@ -2930,49 +2930,50 @@ CPUState *ppc405ep_init (target_phys_addr_t ram_bases[2], |
2930 | 2930 | pic = ppcuic_init(env, irqs, 0x0C0, 0, 1); |
2931 | 2931 | *picp = pic; |
2932 | 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 | 2935 | offset = 0; |
2935 | 2936 | for (i = 0; i < 2; i++) |
2936 | 2937 | offset += ram_sizes[i]; |
2937 | 2938 | /* External bus controller */ |
2938 | 2939 | ppc405_ebc_init(env); |
2939 | 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 | 2945 | ppc405_dma_init(env, dma_irqs); |
2945 | 2946 | /* IIC controller */ |
2946 | - ppc405_i2c_init(env, mmio, 0x500, pic[29]); | |
2947 | + ppc405_i2c_init(env, mmio, 0x500, pic[2]); | |
2947 | 2948 | /* GPIO */ |
2948 | 2949 | ppc405_gpio_init(env, mmio, 0x700); |
2949 | 2950 | /* Serial ports */ |
2950 | 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 | 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 | 2957 | /* OCM */ |
2957 | 2958 | ppc405_ocm_init(env, ram_sizes[0] + ram_sizes[1]); |
2958 | 2959 | offset += 4096; |
2959 | 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 | 2966 | ppc4xx_gpt_init(env, mmio, 0x000, gpt_irqs); |
2966 | 2967 | /* PCI */ |
2967 | - /* Uses pic[28], pic[15], pic[13] */ | |
2968 | + /* Uses pic[3], pic[16], pic[18] */ | |
2968 | 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 | 2974 | ppc405_mal_init(env, mal_irqs); |
2974 | 2975 | /* Ethernet */ |
2975 | - /* Uses pic[22], pic[16], pic[14] */ | |
2976 | + /* Uses pic[9], pic[15], pic[17] */ | |
2976 | 2977 | /* CPU control */ |
2977 | 2978 | ppc405ep_cpc_init(env, clk_setup, sysclk); |
2978 | 2979 | *offsetp = offset; | ... | ... |
hw/ppc4xx_devs.c
... | ... | @@ -365,7 +365,7 @@ static void ppcuic_set_irq (void *opaque, int irq_num, int level) |
365 | 365 | uint32_t mask, sr; |
366 | 366 | |
367 | 367 | uic = opaque; |
368 | - mask = 1 << irq_num; | |
368 | + mask = 1 << (31-irq_num); | |
369 | 369 | #ifdef DEBUG_UIC |
370 | 370 | if (loglevel & CPU_LOG_INT) { |
371 | 371 | fprintf(logfile, "%s: irq %d level %d uicsr %08" PRIx32 | ... | ... |