Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[MIPS] JAZZ fixes

- restructured irq handling
- switched vdma to use memory allocated via get_free_pages
- setup platform devices for serial, jazz_esp and jazzsonic
- fixed cmos rtc access

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Thomas Bogendoerfer and committed by
Ralf Baechle
ea202c63 1f21d2bd

+181 -187
+1
arch/mips/Kconfig
··· 93 93 select ARC32 94 94 select ARCH_MAY_HAVE_PC_FDC 95 95 select GENERIC_ISA_DMA 96 + select IRQ_CPU 96 97 select I8259 97 98 select ISA 98 99 select PCSPEAKER
+1 -1
arch/mips/jazz/Makefile
··· 2 2 # Makefile for the Jazz family specific parts of the kernel 3 3 # 4 4 5 - obj-y := irq.o jazzdma.o jazz-platform.o reset.o setup.o 5 + obj-y := irq.o jazzdma.o reset.o setup.o 6 6 7 7 EXTRA_CFLAGS += -Werror
+27 -67
arch/mips/jazz/irq.c
··· 11 11 #include <linux/kernel.h> 12 12 #include <linux/spinlock.h> 13 13 14 + #include <asm/irq_cpu.h> 14 15 #include <asm/i8259.h> 15 16 #include <asm/io.h> 16 17 #include <asm/jazz.h> 18 + #include <asm/pgtable.h> 17 19 18 20 static DEFINE_SPINLOCK(r4030_lock); 19 21 20 22 static void enable_r4030_irq(unsigned int irq) 21 23 { 22 - unsigned int mask = 1 << (irq - JAZZ_PARALLEL_IRQ); 24 + unsigned int mask = 1 << (irq - JAZZ_IRQ_START); 23 25 unsigned long flags; 24 26 25 27 spin_lock_irqsave(&r4030_lock, flags); ··· 32 30 33 31 void disable_r4030_irq(unsigned int irq) 34 32 { 35 - unsigned int mask = ~(1 << (irq - JAZZ_PARALLEL_IRQ)); 33 + unsigned int mask = ~(1 << (irq - JAZZ_IRQ_START)); 36 34 unsigned long flags; 37 35 38 36 spin_lock_irqsave(&r4030_lock, flags); ··· 53 51 { 54 52 int i; 55 53 56 - for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) 54 + for (i = JAZZ_IRQ_START; i <= JAZZ_IRQ_END; i++) 57 55 set_irq_chip_and_handler(i, &r4030_irq_type, handle_level_irq); 58 56 59 57 r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); ··· 68 66 */ 69 67 void __init arch_init_irq(void) 70 68 { 69 + /* 70 + * this is a hack to get back the still needed wired mapping 71 + * killed by init_mm() 72 + */ 73 + 74 + /* Map 0xe0000000 -> 0x0:800005C0, 0xe0010000 -> 0x1:30000580 */ 75 + add_wired_entry(0x02000017, 0x03c00017, 0xe0000000, PM_64K); 76 + /* Map 0xe2000000 -> 0x0:900005C0, 0xe3010000 -> 0x0:910005C0 */ 77 + add_wired_entry(0x02400017, 0x02440017, 0xe2000000, PM_16M); 78 + /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */ 79 + add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M); 80 + 71 81 init_i8259_irqs(); /* Integrated i8259 */ 82 + mips_cpu_irq_init(); 72 83 init_r4030_ints(); 73 84 74 - change_c0_status(ST0_IM, IE_IRQ4 | IE_IRQ3 | IE_IRQ2 | IE_IRQ1); 75 - } 76 - 77 - static void loc_call(unsigned int irq, unsigned int mask) 78 - { 79 - r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 80 - r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) & mask); 81 - do_IRQ(irq); 82 - r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 83 - r4030_read_reg16(JAZZ_IO_IRQ_ENABLE) | mask); 84 - } 85 - 86 - static void ll_local_dev(void) 87 - { 88 - switch (r4030_read_reg32(JAZZ_IO_IRQ_SOURCE)) { 89 - case 0: 90 - panic("Unimplemented loc_no_irq handler"); 91 - break; 92 - case 4: 93 - loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_PARALLEL); 94 - break; 95 - case 8: 96 - loc_call(JAZZ_PARALLEL_IRQ, JAZZ_IE_FLOPPY); 97 - break; 98 - case 12: 99 - panic("Unimplemented loc_sound handler"); 100 - break; 101 - case 16: 102 - panic("Unimplemented loc_video handler"); 103 - break; 104 - case 20: 105 - loc_call(JAZZ_ETHERNET_IRQ, JAZZ_IE_ETHERNET); 106 - break; 107 - case 24: 108 - loc_call(JAZZ_SCSI_IRQ, JAZZ_IE_SCSI); 109 - break; 110 - case 28: 111 - loc_call(JAZZ_KEYBOARD_IRQ, JAZZ_IE_KEYBOARD); 112 - break; 113 - case 32: 114 - loc_call(JAZZ_MOUSE_IRQ, JAZZ_IE_MOUSE); 115 - break; 116 - case 36: 117 - loc_call(JAZZ_SERIAL1_IRQ, JAZZ_IE_SERIAL1); 118 - break; 119 - case 40: 120 - loc_call(JAZZ_SERIAL2_IRQ, JAZZ_IE_SERIAL2); 121 - break; 122 - } 85 + change_c0_status(ST0_IM, IE_IRQ2 | IE_IRQ1); 123 86 } 124 87 125 88 asmlinkage void plat_irq_dispatch(void) 126 89 { 127 90 unsigned int pending = read_c0_cause() & read_c0_status(); 91 + unsigned int irq; 128 92 129 - if (pending & IE_IRQ5) 130 - write_c0_compare(0); 131 - else if (pending & IE_IRQ4) { 93 + if (pending & IE_IRQ4) { 132 94 r4030_read_reg32(JAZZ_TIMER_REGISTER); 133 95 do_IRQ(JAZZ_TIMER_IRQ); 134 - } else if (pending & IE_IRQ3) 135 - panic("Unimplemented ISA NMI handler"); 136 - else if (pending & IE_IRQ2) 96 + } else if (pending & IE_IRQ2) 137 97 do_IRQ(r4030_read_reg32(JAZZ_EISA_IRQ_ACK)); 138 98 else if (pending & IE_IRQ1) { 139 - ll_local_dev(); 140 - } else if (unlikely(pending & IE_IRQ0)) 141 - panic("Unimplemented local_dma handler"); 142 - else if (pending & IE_SW1) { 143 - clear_c0_cause(IE_SW1); 144 - panic("Unimplemented sw1 handler"); 145 - } else if (pending & IE_SW0) { 146 - clear_c0_cause(IE_SW0); 147 - panic("Unimplemented sw0 handler"); 99 + irq = *(volatile u8 *)JAZZ_IO_IRQ_SOURCE >> 2; 100 + if (likely(irq > 0)) 101 + do_IRQ(irq + JAZZ_IRQ_START - 1); 102 + else 103 + panic("Unimplemented loc_no_irq handler"); 148 104 } 149 105 }
-60
arch/mips/jazz/jazz-platform.c
··· 1 - /* 2 - * This file is subject to the terms and conditions of the GNU General Public 3 - * License. See the file "COPYING" in the main directory of this archive 4 - * for more details. 5 - * 6 - * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org) 7 - */ 8 - #include <linux/init.h> 9 - #include <linux/module.h> 10 - #include <linux/serial_8250.h> 11 - 12 - #include <asm/jazz.h> 13 - 14 - /* 15 - * Confusion ... It seems the original Microsoft Jazz machine used to have a 16 - * 4.096MHz clock for its UART while the MIPS Magnum and Millenium systems 17 - * had 8MHz. The Olivetti M700-10 and the Acer PICA have 1.8432MHz like PCs. 18 - */ 19 - #ifdef CONFIG_OLIVETTI_M700 20 - #define JAZZ_BASE_BAUD 1843200 21 - #else 22 - #define JAZZ_BASE_BAUD 8000000 /* 3072000 */ 23 - #endif 24 - 25 - #define JAZZ_UART_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP) 26 - 27 - #define JAZZ_PORT(base, int) \ 28 - { \ 29 - .mapbase = base, \ 30 - .irq = int, \ 31 - .uartclk = JAZZ_BASE_BAUD, \ 32 - .iotype = UPIO_MEM, \ 33 - .flags = JAZZ_UART_FLAGS, \ 34 - .regshift = 0, \ 35 - } 36 - 37 - static struct plat_serial8250_port uart8250_data[] = { 38 - JAZZ_PORT(JAZZ_SERIAL1_BASE, JAZZ_SERIAL1_IRQ), 39 - JAZZ_PORT(JAZZ_SERIAL2_BASE, JAZZ_SERIAL2_IRQ), 40 - { }, 41 - }; 42 - 43 - static struct platform_device uart8250_device = { 44 - .name = "serial8250", 45 - .id = PLAT8250_DEV_PLATFORM, 46 - .dev = { 47 - .platform_data = uart8250_data, 48 - }, 49 - }; 50 - 51 - static int __init uart8250_init(void) 52 - { 53 - return platform_device_register(&uart8250_device); 54 - } 55 - 56 - module_init(uart8250_init); 57 - 58 - MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>"); 59 - MODULE_LICENSE("GPL"); 60 - MODULE_DESCRIPTION("8250 UART probe driver for the Jazz family");
+20 -27
arch/mips/jazz/jazzdma.c
··· 27 27 */ 28 28 #define CONF_DEBUG_VDMA 0 29 29 30 - static unsigned long vdma_pagetable_start; 30 + static VDMA_PGTBL_ENTRY *pgtbl; 31 31 32 32 static DEFINE_SPINLOCK(vdma_lock); 33 33 ··· 46 46 */ 47 47 static inline void vdma_pgtbl_init(void) 48 48 { 49 - VDMA_PGTBL_ENTRY *pgtbl = (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 50 49 unsigned long paddr = 0; 51 50 int i; 52 51 ··· 59 60 /* 60 61 * Initialize the Jazz R4030 dma controller 61 62 */ 62 - void __init vdma_init(void) 63 + static int __init vdma_init(void) 63 64 { 64 65 /* 65 66 * Allocate 32k of memory for DMA page tables. This needs to be page 66 67 * aligned and should be uncached to avoid cache flushing after every 67 68 * update. 68 69 */ 69 - vdma_pagetable_start = 70 - (unsigned long) alloc_bootmem_low_pages(VDMA_PGTBL_SIZE); 71 - if (!vdma_pagetable_start) 70 + pgtbl = (VDMA_PGTBL_ENTRY *)__get_free_pages(GFP_KERNEL | GFP_DMA, 71 + get_order(VDMA_PGTBL_SIZE)); 72 + if (!pgtbl) 72 73 BUG(); 73 - dma_cache_wback_inv(vdma_pagetable_start, VDMA_PGTBL_SIZE); 74 - vdma_pagetable_start = KSEG1ADDR(vdma_pagetable_start); 74 + dma_cache_wback_inv((unsigned long)pgtbl, VDMA_PGTBL_SIZE); 75 + pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl); 75 76 76 77 /* 77 78 * Clear the R4030 translation table 78 79 */ 79 80 vdma_pgtbl_init(); 80 81 81 - r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE, 82 - CPHYSADDR(vdma_pagetable_start)); 82 + r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE, CPHYSADDR(pgtbl)); 83 83 r4030_write_reg32(JAZZ_R4030_TRSTBL_LIM, VDMA_PGTBL_SIZE); 84 84 r4030_write_reg32(JAZZ_R4030_TRSTBL_INV, 0); 85 85 86 - printk("VDMA: R4030 DMA pagetables initialized.\n"); 86 + printk(KERN_INFO "VDMA: R4030 DMA pagetables initialized.\n"); 87 + return 0; 87 88 } 88 89 89 90 /* ··· 91 92 */ 92 93 unsigned long vdma_alloc(unsigned long paddr, unsigned long size) 93 94 { 94 - VDMA_PGTBL_ENTRY *entry = (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 95 95 int first, last, pages, frame, i; 96 96 unsigned long laddr, flags; 97 97 ··· 112 114 /* 113 115 * Find free chunk 114 116 */ 115 - pages = (size + 4095) >> 12; /* no. of pages to allocate */ 117 + pages = VDMA_PAGE(paddr + size) - VDMA_PAGE(paddr) + 1; 116 118 first = 0; 117 119 while (1) { 118 - while (entry[first].owner != VDMA_PAGE_EMPTY && 120 + while (pgtbl[first].owner != VDMA_PAGE_EMPTY && 119 121 first < VDMA_PGTBL_ENTRIES) first++; 120 122 if (first + pages > VDMA_PGTBL_ENTRIES) { /* nothing free */ 121 123 spin_unlock_irqrestore(&vdma_lock, flags); ··· 123 125 } 124 126 125 127 last = first + 1; 126 - while (entry[last].owner == VDMA_PAGE_EMPTY 128 + while (pgtbl[last].owner == VDMA_PAGE_EMPTY 127 129 && last - first < pages) 128 130 last++; 129 131 130 132 if (last - first == pages) 131 133 break; /* found */ 134 + first = last + 1; 132 135 } 133 136 134 137 /* ··· 139 140 frame = paddr & ~(VDMA_PAGESIZE - 1); 140 141 141 142 for (i = first; i < last; i++) { 142 - entry[i].frame = frame; 143 - entry[i].owner = laddr; 143 + pgtbl[i].frame = frame; 144 + pgtbl[i].owner = laddr; 144 145 frame += VDMA_PAGESIZE; 145 146 } 146 147 ··· 159 160 printk("%08x ", i << 12); 160 161 printk("\nPADDR: "); 161 162 for (i = first; i < last; i++) 162 - printk("%08x ", entry[i].frame); 163 + printk("%08x ", pgtbl[i].frame); 163 164 printk("\nOWNER: "); 164 165 for (i = first; i < last; i++) 165 - printk("%08x ", entry[i].owner); 166 + printk("%08x ", pgtbl[i].owner); 166 167 printk("\n"); 167 168 } 168 169 ··· 180 181 */ 181 182 int vdma_free(unsigned long laddr) 182 183 { 183 - VDMA_PGTBL_ENTRY *pgtbl = (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 184 184 int i; 185 185 186 186 i = laddr >> 12; ··· 211 213 */ 212 214 int vdma_remap(unsigned long laddr, unsigned long paddr, unsigned long size) 213 215 { 214 - VDMA_PGTBL_ENTRY *pgtbl = 215 - (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 216 216 int first, pages, npages; 217 217 218 218 if (laddr > 0xffffff) { ··· 285 289 { 286 290 int i; 287 291 int frame; 288 - VDMA_PGTBL_ENTRY *pgtbl = 289 - (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 290 292 291 293 frame = paddr & ~(VDMA_PAGESIZE - 1); 292 294 ··· 306 312 */ 307 313 unsigned long vdma_log2phys(unsigned long laddr) 308 314 { 309 - VDMA_PGTBL_ENTRY *pgtbl = 310 - (VDMA_PGTBL_ENTRY *) vdma_pagetable_start; 311 - 312 315 return pgtbl[laddr >> 12].frame + (laddr & (VDMA_PAGESIZE - 1)); 313 316 } 314 317 ··· 555 564 556 565 return enable; 557 566 } 567 + 568 + arch_initcall(vdma_init);
+112 -3
arch/mips/jazz/setup.c
··· 7 7 * 8 8 * Copyright (C) 1996, 1997, 1998, 2001 by Ralf Baechle 9 9 * Copyright (C) 2001 MIPS Technologies, Inc. 10 + * Copyright (C) 2007 by Thomas Bogendoerfer 10 11 */ 11 12 #include <linux/eisa.h> 12 13 #include <linux/hdreg.h> ··· 21 20 #include <linux/ide.h> 22 21 #include <linux/pm.h> 23 22 #include <linux/screen_info.h> 23 + #include <linux/platform_device.h> 24 + #include <linux/serial_8250.h> 24 25 25 26 #include <asm/bootinfo.h> 26 27 #include <asm/irq.h> ··· 33 30 #include <asm/pgtable.h> 34 31 #include <asm/time.h> 35 32 #include <asm/traps.h> 33 + #include <asm/mc146818-time.h> 36 34 37 35 extern asmlinkage void jazz_handle_int(void); 38 36 ··· 76 72 77 73 /* Map 0xe0000000 -> 0x0:800005C0, 0xe0010000 -> 0x1:30000580 */ 78 74 add_wired_entry (0x02000017, 0x03c00017, 0xe0000000, PM_64K); 79 - 80 75 /* Map 0xe2000000 -> 0x0:900005C0, 0xe3010000 -> 0x0:910005C0 */ 81 76 add_wired_entry (0x02400017, 0x02440017, 0xe2000000, PM_16M); 82 - 83 77 /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */ 84 78 add_wired_entry (0x01800017, 0x01000017, 0xe4000000, PM_4M); 85 79 ··· 96 94 97 95 _machine_restart = jazz_machine_restart; 98 96 97 + #ifdef CONFIG_VT 99 98 screen_info = (struct screen_info) { 100 99 0, 0, /* orig-x, orig-y */ 101 100 0, /* unused */ ··· 108 105 0, /* orig_video_isVGA */ 109 106 16 /* orig_video_points */ 110 107 }; 108 + #endif 111 109 112 - vdma_init(); 110 + add_preferred_console("ttyS", 0, "9600"); 113 111 } 112 + 113 + #ifdef CONFIG_OLIVETTI_M700 114 + #define UART_CLK 1843200 115 + #else 116 + /* Some Jazz machines seem to have an 8MHz crystal clock but I don't know 117 + exactly which ones ... XXX */ 118 + #define UART_CLK (8000000 / 16) /* ( 3072000 / 16) */ 119 + #endif 120 + 121 + #define MEMPORT(_base, _irq) \ 122 + { \ 123 + .mapbase = (_base), \ 124 + .membase = (void *)(_base), \ 125 + .irq = (_irq), \ 126 + .uartclk = UART_CLK, \ 127 + .iotype = UPIO_MEM, \ 128 + .flags = UPF_BOOT_AUTOCONF, \ 129 + } 130 + 131 + static struct plat_serial8250_port jazz_serial_data[] = { 132 + MEMPORT(JAZZ_SERIAL1_BASE, JAZZ_SERIAL1_IRQ), 133 + MEMPORT(JAZZ_SERIAL2_BASE, JAZZ_SERIAL2_IRQ), 134 + { }, 135 + }; 136 + 137 + static struct platform_device jazz_serial8250_device = { 138 + .name = "serial8250", 139 + .id = PLAT8250_DEV_PLATFORM, 140 + .dev = { 141 + .platform_data = jazz_serial_data, 142 + }, 143 + }; 144 + 145 + static struct resource jazz_esp_rsrc[] = { 146 + { 147 + .start = JAZZ_SCSI_BASE, 148 + .end = JAZZ_SCSI_BASE + 31, 149 + .flags = IORESOURCE_MEM 150 + }, 151 + { 152 + .start = JAZZ_SCSI_DMA, 153 + .end = JAZZ_SCSI_DMA, 154 + .flags = IORESOURCE_MEM 155 + }, 156 + { 157 + .start = JAZZ_SCSI_IRQ, 158 + .end = JAZZ_SCSI_IRQ, 159 + .flags = IORESOURCE_IRQ 160 + } 161 + }; 162 + 163 + static struct platform_device jazz_esp_pdev = { 164 + .name = "jazz_esp", 165 + .num_resources = ARRAY_SIZE(jazz_esp_rsrc), 166 + .resource = jazz_esp_rsrc 167 + }; 168 + 169 + static struct resource jazz_sonic_rsrc[] = { 170 + { 171 + .start = JAZZ_ETHERNET_BASE, 172 + .end = JAZZ_ETHERNET_BASE + 0xff, 173 + .flags = IORESOURCE_MEM 174 + }, 175 + { 176 + .start = JAZZ_ETHERNET_IRQ, 177 + .end = JAZZ_ETHERNET_IRQ, 178 + .flags = IORESOURCE_IRQ 179 + } 180 + }; 181 + 182 + static struct platform_device jazz_sonic_pdev = { 183 + .name = "jazzsonic", 184 + .num_resources = ARRAY_SIZE(jazz_sonic_rsrc), 185 + .resource = jazz_sonic_rsrc 186 + }; 187 + 188 + static struct resource jazz_cmos_rsrc[] = { 189 + { 190 + .start = 0x70, 191 + .end = 0x71, 192 + .flags = IORESOURCE_IO 193 + }, 194 + { 195 + .start = 8, 196 + .end = 8, 197 + .flags = IORESOURCE_IRQ 198 + } 199 + }; 200 + 201 + static struct platform_device jazz_cmos_pdev = { 202 + .name = "rtc_cmos", 203 + .num_resources = ARRAY_SIZE(jazz_cmos_rsrc), 204 + .resource = jazz_cmos_rsrc 205 + }; 206 + 207 + static int __init jazz_setup_devinit(void) 208 + { 209 + platform_device_register(&jazz_serial8250_device); 210 + platform_device_register(&jazz_esp_pdev); 211 + platform_device_register(&jazz_sonic_pdev); 212 + platform_device_register(&jazz_cmos_pdev); 213 + return 0; 214 + } 215 + 216 + device_initcall(jazz_setup_devinit);
+13 -25
include/asm-mips/jazz.h
··· 185 185 #define JAZZ_IO_IRQ_ENABLE 0xe0010002 186 186 187 187 /* 188 - * JAZZ interrupt enable bits 189 - */ 190 - #define JAZZ_IE_PARALLEL (1 << 0) 191 - #define JAZZ_IE_FLOPPY (1 << 1) 192 - #define JAZZ_IE_SOUND (1 << 2) 193 - #define JAZZ_IE_VIDEO (1 << 3) 194 - #define JAZZ_IE_ETHERNET (1 << 4) 195 - #define JAZZ_IE_SCSI (1 << 5) 196 - #define JAZZ_IE_KEYBOARD (1 << 6) 197 - #define JAZZ_IE_MOUSE (1 << 7) 198 - #define JAZZ_IE_SERIAL1 (1 << 8) 199 - #define JAZZ_IE_SERIAL2 (1 << 9) 200 - 201 - /* 202 188 * JAZZ Interrupt Level definitions 203 189 * 204 190 * This is somewhat broken. For reasons which nobody can remember anymore 205 191 * we remap the Jazz interrupts to the usual ISA style interrupt numbers. 206 192 */ 207 - #define JAZZ_PARALLEL_IRQ 16 208 - #define JAZZ_FLOPPY_IRQ 17 209 - #define JAZZ_SOUND_IRQ 18 210 - #define JAZZ_VIDEO_IRQ 19 211 - #define JAZZ_ETHERNET_IRQ 20 212 - #define JAZZ_SCSI_IRQ 21 213 - #define JAZZ_KEYBOARD_IRQ 22 214 - #define JAZZ_MOUSE_IRQ 23 215 - #define JAZZ_SERIAL1_IRQ 24 216 - #define JAZZ_SERIAL2_IRQ 25 193 + #define JAZZ_IRQ_START 24 194 + #define JAZZ_IRQ_END (24 + 9) 195 + #define JAZZ_PARALLEL_IRQ (JAZZ_IRQ_START + 0) 196 + #define JAZZ_FLOPPY_IRQ (JAZZ_IRQ_START + 1) 197 + #define JAZZ_SOUND_IRQ (JAZZ_IRQ_START + 2) 198 + #define JAZZ_VIDEO_IRQ (JAZZ_IRQ_START + 3) 199 + #define JAZZ_ETHERNET_IRQ (JAZZ_IRQ_START + 4) 200 + #define JAZZ_SCSI_IRQ (JAZZ_IRQ_START + 5) 201 + #define JAZZ_KEYBOARD_IRQ (JAZZ_IRQ_START + 6) 202 + #define JAZZ_MOUSE_IRQ (JAZZ_IRQ_START + 7) 203 + #define JAZZ_SERIAL1_IRQ (JAZZ_IRQ_START + 8) 204 + #define JAZZ_SERIAL2_IRQ (JAZZ_IRQ_START + 9) 217 205 218 - #define JAZZ_TIMER_IRQ 31 206 + #define JAZZ_TIMER_IRQ (MIPS_CPU_IRQ_BASE+6) 219 207 220 208 221 209 /*
-1
include/asm-mips/jazzdma.h
··· 7 7 /* 8 8 * Prototypes and macros 9 9 */ 10 - extern void vdma_init(void); 11 10 extern unsigned long vdma_alloc(unsigned long paddr, unsigned long size); 12 11 extern int vdma_free(unsigned long laddr); 13 12 extern int vdma_remap(unsigned long laddr, unsigned long paddr,
+7 -3
include/asm-mips/mach-jazz/mc146818rtc.h
··· 4 4 * for more details. 5 5 * 6 6 * Copyright (C) 1998, 2001, 03 by Ralf Baechle 7 + * Copyright (C) 2007 Thomas Bogendoerfer 7 8 * 8 9 * RTC routines for Jazz style attached Dallas chip. 9 10 */ 10 11 #ifndef __ASM_MACH_JAZZ_MC146818RTC_H 11 12 #define __ASM_MACH_JAZZ_MC146818RTC_H 13 + 14 + #include <linux/delay.h> 12 15 13 16 #include <asm/io.h> 14 17 #include <asm/jazz.h> ··· 22 19 static inline unsigned char CMOS_READ(unsigned long addr) 23 20 { 24 21 outb_p(addr, RTC_PORT(0)); 25 - 26 - return *(char *)JAZZ_RTC_BASE; 22 + return *(volatile char *)JAZZ_RTC_BASE; 27 23 } 28 24 29 25 static inline void CMOS_WRITE(unsigned char data, unsigned long addr) 30 26 { 31 27 outb_p(addr, RTC_PORT(0)); 32 - *(char *)JAZZ_RTC_BASE = data; 28 + *(volatile char *)JAZZ_RTC_BASE = data; 33 29 } 34 30 35 31 #define RTC_ALWAYS_BCD 0 32 + 33 + #define mc146818_decode_year(year) ((year) + 1980) 36 34 37 35 #endif /* __ASM_MACH_JAZZ_MC146818RTC_H */