Changes in kernel/arch/arm32/src/mach/gta02/gta02.c [a9b5b5f:24697c3] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/src/mach/gta02/gta02.c
ra9b5b5f r24697c3 43 43 #include <genarch/drivers/s3c24xx_irqc/s3c24xx_irqc.h> 44 44 #include <genarch/drivers/s3c24xx_timer/s3c24xx_timer.h> 45 #include <genarch/srln/srln.h>46 #include <sysinfo/sysinfo.h>47 45 #include <interrupt.h> 48 46 #include <ddi/ddi.h> … … 70 68 static void gta02_output_init(void); 71 69 static void gta02_input_init(void); 72 static size_t gta02_get_irq_count(void);73 70 74 71 static void gta02_timer_irq_init(void); … … 77 74 static void gta02_timer_irq_handler(irq_t *irq); 78 75 79 static outdev_t *gta02_scons_dev;80 static s3c24xx_irqc_t gta02_irqc;76 static void *gta02_scons_out; 77 static s3c24xx_irqc_t *gta02_irqc; 81 78 static s3c24xx_timer_t *gta02_timer; 82 79 … … 91 88 gta02_frame_init, 92 89 gta02_output_init, 93 gta02_input_init, 94 gta02_get_irq_count 90 gta02_input_init 95 91 }; 96 92 97 93 static void gta02_init(void) 98 94 { 99 s3c24xx_irqc_regs_t *irqc_regs;100 95 gta02_scons_out = (void *) hw_map(GTA02_SCONS_BASE, PAGE_SIZE); 96 gta02_irqc = (void *) hw_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE); 101 97 gta02_timer = (void *) hw_map(S3C24XX_TIMER_ADDRESS, PAGE_SIZE); 102 irqc_regs = (void *) hw_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE); 103 104 /* Initialize interrupt controller. */ 105 s3c24xx_irqc_init(>a02_irqc, irqc_regs); 98 99 /* Make all interrupt sources use IRQ mode (not FIQ). */ 100 pio_write_32(>a02_irqc->intmod, 0x00000000); 101 102 /* Disable all interrupt sources. */ 103 pio_write_32(>a02_irqc->intmsk, 0xffffffff); 104 105 /* Disable interrupts from all sub-sources. */ 106 pio_write_32(>a02_irqc->intsubmsk, 0xffffffff); 106 107 } 107 108 … … 131 132 uint32_t inum; 132 133 133 /* Determine IRQ number. */ 134 inum = s3c24xx_irqc_inum_get(>a02_irqc); 135 136 /* Clear interrupt condition in the interrupt controller. */ 137 s3c24xx_irqc_clear(>a02_irqc, inum); 134 inum = pio_read_32(>a02_irqc->intoffset); 138 135 139 136 irq_t *irq = irq_dispatch_and_lock(inum); … … 147 144 CPU->id, inum); 148 145 } 146 147 /* Clear interrupt condition in the interrupt controller. */ 148 pio_write_32(>a02_irqc->srcpnd, S3C24XX_INT_BIT(inum)); 149 pio_write_32(>a02_irqc->intpnd, S3C24XX_INT_BIT(inum)); 149 150 } 150 151 … … 175 176 } 176 177 #endif 177 178 /* Initialize serial port of the debugging console. */ 179 s3c24xx_uart_io_t *scons_io; 180 181 scons_io = (void *) hw_map(GTA02_SCONS_BASE, PAGE_SIZE); 182 gta02_scons_dev = s3c24xx_uart_init(scons_io, S3C24XX_INT_UART2); 183 184 if (gta02_scons_dev) { 185 /* Create output device. */ 186 stdout_wire(gta02_scons_dev); 187 } 188 189 /* 190 * This is the necessary evil until the userspace driver is entirely 191 * self-sufficient. 192 */ 193 sysinfo_set_item_val("s3c24xx_uart", NULL, true); 194 sysinfo_set_item_val("s3c24xx_uart.inr", NULL, S3C24XX_INT_UART2); 195 sysinfo_set_item_val("s3c24xx_uart.address.physical", NULL, 196 (uintptr_t) GTA02_SCONS_BASE); 197 178 outdev_t *scons_dev; 179 180 scons_dev = s3c24xx_uart_init((ioport8_t *) gta02_scons_out); 181 if (scons_dev) 182 stdout_wire(scons_dev); 198 183 } 199 184 200 185 static void gta02_input_init(void) 201 186 { 202 s3c24xx_uart_t *scons_inst;203 204 if (gta02_scons_dev) {205 /* Create input device. */206 scons_inst = (void *) gta02_scons_dev->data;207 208 srln_instance_t *srln_instance = srln_init();209 if (srln_instance) {210 indev_t *sink = stdin_wire();211 indev_t *srln = srln_wire(srln_instance, sink);212 s3c24xx_uart_input_wire(scons_inst, srln);213 214 /* Enable interrupts from UART2 */215 s3c24xx_irqc_src_enable(>a02_irqc,216 S3C24XX_INT_UART2);217 218 /* Enable interrupts from UART2 RXD */219 s3c24xx_irqc_subsrc_enable(>a02_irqc,220 S3C24XX_SUBINT_RXD2);221 }222 }223 }224 225 size_t gta02_get_irq_count(void)226 {227 return GTA02_IRQ_COUNT;228 187 } 229 188 … … 289 248 290 249 /* Enable interrupts from timer0 */ 291 s3c24xx_irqc_src_enable(>a02_irqc, S3C24XX_INT_TIMER0); 250 pio_write_32(>a02_irqc->intmsk, pio_read_32(>a02_irqc->intmsk) & 251 ~S3C24XX_INT_BIT(S3C24XX_INT_TIMER0)); 292 252 293 253 /* Load data from tcntb0/tcmpb0 into tcnt0/tcmp0. */
Note:
See TracChangeset
for help on using the changeset viewer.