Changes in / [2673b3b:a8ca607b] in mainline
- Files:
-
- 2 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
r2673b3b ra8ca607b 471 471 ! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=serial)&PLATFORM=ia64&MACHINE=i460GX] CONFIG_NS16550 (y/n) 472 472 473 % Support for ARM926 on-chip UART474 ! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=arm32&MACHINE=integratorcp] CONFIG_ARM926_UART (y/n)475 476 473 % Support for Samsung S3C24XX on-chip UART 477 474 ! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=arm32&MACHINE=gta02] CONFIG_S3C24XX_UART (y/n) … … 502 499 503 500 % Serial line input module 504 ! [CONFIG_DSRLNIN=y|(PLATFORM=arm32&MACHINE=gta02)|(PLATFORM=arm32&MACHINE= integratorcp&CONFIG_ARM926_UART=y)|(PLATFORM=arm32&MACHINE=beagleboardxm&CONFIG_AMDM37X_UART=y)|(PLATFORM=ia64&MACHINE=i460GX&CONFIG_NS16550=y)|(PLATFORM=ia64&MACHINE=ski)|(PLATFORM=sparc64&PROCESSOR=sun4v)] CONFIG_SRLN (y)501 ! [CONFIG_DSRLNIN=y|(PLATFORM=arm32&MACHINE=gta02)|(PLATFORM=arm32&MACHINE=beagleboardxm)|(PLATFORM=ia64&MACHINE=i460GX&CONFIG_NS16550=y)|(PLATFORM=ia64&MACHINE=ski)|(PLATFORM=sparc64&PROCESSOR=sun4v)] CONFIG_SRLN (y) 505 502 506 503 % EGA support -
boot/arch/arm32/include/main.h
r2673b3b ra8ca607b 64 64 65 65 /** GXemul testarm serial console output register */ 66 #define TESTARM_SCONS_ADDR 0x1000000066 #define TESTARM_SCONS_ADDR 0x10000000 67 67 68 68 /** IntegratorCP serial console output register */ 69 #define ICP_SCONS_ADDR 0x1600000069 #define ICP_SCONS_ADDR 0x16000000 70 70 71 71 extern void bootstrap(void); -
kernel/arch/arm32/src/mach/integratorcp/integratorcp.c
r2673b3b ra8ca607b 38 38 #include <console/chardev.h> 39 39 #include <genarch/drivers/pl050/pl050.h> 40 #include <genarch/drivers/arm926_uart/arm926_uart.h>41 40 #include <genarch/kbrd/kbrd.h> 42 #include <genarch/srln/srln.h>43 41 #include <console/console.h> 44 42 #include <sysinfo/sysinfo.h> … … 55 53 #include <print.h> 56 54 57 58 55 #define SDRAM_SIZE (sdram[((*(uint32_t *)(ICP_CMCR+ICP_SDRAMCR_OFFSET) & ICP_SDRAM_MASK) >> 2)]) 59 60 static struct { 61 icp_hw_map_t hw_map; 62 irq_t timer_irq; 63 arm926_uart_t uart; 64 } icp; 65 66 67 56 static icp_hw_map_t icp_hw_map; 57 static irq_t icp_timer_irq; 68 58 struct arm_machine_ops icp_machine_ops = { 69 59 icp_init, … … 80 70 81 71 static bool hw_map_init_called = false; 72 static bool vga_init = false; 82 73 uint32_t sdram[8] = { 83 74 16777216, /* 16mb */ … … 98 89 void icp_vga_init(void) 99 90 { 100 *(uint32_t*)((char *)(icp .hw_map.cmcr)+0x14) = 0xA05F0000;101 *(uint32_t*)((char *)(icp .hw_map.cmcr)+0x1C) = 0x12C11000;102 *(uint32_t*)icp .hw_map.vga = 0x3F1F3F9C;103 *(uint32_t*)((char *)(icp .hw_map.vga) + 0x4) = 0x080B61DF;104 *(uint32_t*)((char *)(icp .hw_map.vga) + 0x8) = 0x067F3800;105 *(uint32_t*)((char *)(icp .hw_map.vga) + 0x10) = ICP_FB;106 *(uint32_t *)((char *)(icp .hw_map.vga) + 0x1C) = 0x182B;107 *(uint32_t*)((char *)(icp .hw_map.cmcr)+0xC) = 0x33805000;91 *(uint32_t*)((char *)(icp_hw_map.cmcr)+0x14) = 0xA05F0000; 92 *(uint32_t*)((char *)(icp_hw_map.cmcr)+0x1C) = 0x12C11000; 93 *(uint32_t*)icp_hw_map.vga = 0x3F1F3F9C; 94 *(uint32_t*)((char *)(icp_hw_map.vga) + 0x4) = 0x080B61DF; 95 *(uint32_t*)((char *)(icp_hw_map.vga) + 0x8) = 0x067F3800; 96 *(uint32_t*)((char *)(icp_hw_map.vga) + 0x10) = ICP_FB; 97 *(uint32_t *)((char *)(icp_hw_map.vga) + 0x1C) = 0x182B; 98 *(uint32_t*)((char *)(icp_hw_map.cmcr)+0xC) = 0x33805000; 108 99 109 100 } … … 112 103 static inline uint32_t icp_irqc_get_sources(void) 113 104 { 114 return *((uint32_t *) icp .hw_map.irqc);105 return *((uint32_t *) icp_hw_map.irqc); 115 106 } 116 107 … … 122 113 static inline void icp_irqc_mask(uint32_t irq) 123 114 { 124 *((uint32_t *) icp .hw_map.irqc_mask) = (1 << irq);115 *((uint32_t *) icp_hw_map.irqc_mask) = (1 << irq); 125 116 } 126 117 … … 132 123 static inline void icp_irqc_unmask(uint32_t irq) 133 124 { 134 *((uint32_t *) icp .hw_map.irqc_unmask) |= (1 << irq);135 } 136 137 /** Initializes icp .hw_map. */125 *((uint32_t *) icp_hw_map.irqc_unmask) |= (1 << irq); 126 } 127 128 /** Initializes icp_hw_map. */ 138 129 void icp_init(void) 139 130 { 140 icp .hw_map.uart = km_map(ICP_UART, PAGE_SIZE,141 PAGE_WRITE | PAGE_NOT_CACHEABLE); 142 icp .hw_map.kbd_ctrl = km_map(ICP_KBD, PAGE_SIZE, PAGE_NOT_CACHEABLE);143 icp .hw_map.kbd_stat = icp.hw_map.kbd_ctrl + ICP_KBD_STAT;144 icp .hw_map.kbd_data = icp.hw_map.kbd_ctrl + ICP_KBD_DATA;145 icp .hw_map.kbd_intstat = icp.hw_map.kbd_ctrl + ICP_KBD_INTR_STAT;146 icp .hw_map.rtc = km_map(ICP_RTC, PAGE_SIZE,147 PAGE_WRITE | PAGE_NOT_CACHEABLE); 148 icp .hw_map.rtc1_load = icp.hw_map.rtc + ICP_RTC1_LOAD_OFFSET;149 icp .hw_map.rtc1_read = icp.hw_map.rtc + ICP_RTC1_READ_OFFSET;150 icp .hw_map.rtc1_ctl = icp.hw_map.rtc + ICP_RTC1_CTL_OFFSET;151 icp .hw_map.rtc1_intrclr = icp.hw_map.rtc + ICP_RTC1_INTRCLR_OFFSET;152 icp .hw_map.rtc1_bgload = icp.hw_map.rtc + ICP_RTC1_BGLOAD_OFFSET;153 icp .hw_map.rtc1_intrstat = icp.hw_map.rtc + ICP_RTC1_INTRSTAT_OFFSET;154 155 icp .hw_map.irqc = km_map(ICP_IRQC, PAGE_SIZE,156 PAGE_WRITE | PAGE_NOT_CACHEABLE); 157 icp .hw_map.irqc_mask = icp.hw_map.irqc + ICP_IRQC_MASK_OFFSET;158 icp .hw_map.irqc_unmask = icp.hw_map.irqc + ICP_IRQC_UNMASK_OFFSET;159 icp .hw_map.cmcr = km_map(ICP_CMCR, PAGE_SIZE,160 PAGE_WRITE | PAGE_NOT_CACHEABLE); 161 icp .hw_map.sdramcr = icp.hw_map.cmcr + ICP_SDRAMCR_OFFSET;162 icp .hw_map.vga = km_map(ICP_VGA, PAGE_SIZE,131 icp_hw_map.uart = km_map(ICP_UART, PAGE_SIZE, 132 PAGE_WRITE | PAGE_NOT_CACHEABLE); 133 icp_hw_map.kbd_ctrl = km_map(ICP_KBD, PAGE_SIZE, PAGE_NOT_CACHEABLE); 134 icp_hw_map.kbd_stat = icp_hw_map.kbd_ctrl + ICP_KBD_STAT; 135 icp_hw_map.kbd_data = icp_hw_map.kbd_ctrl + ICP_KBD_DATA; 136 icp_hw_map.kbd_intstat = icp_hw_map.kbd_ctrl + ICP_KBD_INTR_STAT; 137 icp_hw_map.rtc = km_map(ICP_RTC, PAGE_SIZE, 138 PAGE_WRITE | PAGE_NOT_CACHEABLE); 139 icp_hw_map.rtc1_load = icp_hw_map.rtc + ICP_RTC1_LOAD_OFFSET; 140 icp_hw_map.rtc1_read = icp_hw_map.rtc + ICP_RTC1_READ_OFFSET; 141 icp_hw_map.rtc1_ctl = icp_hw_map.rtc + ICP_RTC1_CTL_OFFSET; 142 icp_hw_map.rtc1_intrclr = icp_hw_map.rtc + ICP_RTC1_INTRCLR_OFFSET; 143 icp_hw_map.rtc1_bgload = icp_hw_map.rtc + ICP_RTC1_BGLOAD_OFFSET; 144 icp_hw_map.rtc1_intrstat = icp_hw_map.rtc + ICP_RTC1_INTRSTAT_OFFSET; 145 146 icp_hw_map.irqc = km_map(ICP_IRQC, PAGE_SIZE, 147 PAGE_WRITE | PAGE_NOT_CACHEABLE); 148 icp_hw_map.irqc_mask = icp_hw_map.irqc + ICP_IRQC_MASK_OFFSET; 149 icp_hw_map.irqc_unmask = icp_hw_map.irqc + ICP_IRQC_UNMASK_OFFSET; 150 icp_hw_map.cmcr = km_map(ICP_CMCR, PAGE_SIZE, 151 PAGE_WRITE | PAGE_NOT_CACHEABLE); 152 icp_hw_map.sdramcr = icp_hw_map.cmcr + ICP_SDRAMCR_OFFSET; 153 icp_hw_map.vga = km_map(ICP_VGA, PAGE_SIZE, 163 154 PAGE_WRITE | PAGE_NOT_CACHEABLE); 164 155 … … 173 164 { 174 165 icp_irqc_mask(ICP_TIMER_IRQ); 175 *((uint32_t*) icp .hw_map.rtc1_load) = frequency;176 *((uint32_t*) icp .hw_map.rtc1_bgload) = frequency;177 *((uint32_t*) icp .hw_map.rtc1_ctl) = ICP_RTC_CTL_VALUE;166 *((uint32_t*) icp_hw_map.rtc1_load) = frequency; 167 *((uint32_t*) icp_hw_map.rtc1_bgload) = frequency; 168 *((uint32_t*) icp_hw_map.rtc1_ctl) = ICP_RTC_CTL_VALUE; 178 169 icp_irqc_unmask(ICP_TIMER_IRQ); 179 170 } … … 181 172 static irq_ownership_t icp_timer_claim(irq_t *irq) 182 173 { 183 if (icp .hw_map.rtc1_intrstat) {184 *((uint32_t*) icp .hw_map.rtc1_intrclr) = 1;174 if (icp_hw_map.rtc1_intrstat) { 175 *((uint32_t*) icp_hw_map.rtc1_intrclr) = 1; 185 176 return IRQ_ACCEPT; 186 177 } else … … 209 200 static void icp_timer_irq_init(void) 210 201 { 211 irq_initialize(&icp .timer_irq);212 icp .timer_irq.devno = device_assign_devno();213 icp .timer_irq.inr = ICP_TIMER_IRQ;214 icp .timer_irq.claim = icp_timer_claim;215 icp .timer_irq.handler = icp_timer_irq_handler;216 217 irq_register(&icp .timer_irq);202 irq_initialize(&icp_timer_irq); 203 icp_timer_irq.devno = device_assign_devno(); 204 icp_timer_irq.inr = ICP_TIMER_IRQ; 205 icp_timer_irq.claim = icp_timer_claim; 206 icp_timer_irq.handler = icp_timer_irq_handler; 207 208 irq_register(&icp_timer_irq); 218 209 } 219 210 … … 240 231 241 232 if (hw_map_init_called) { 242 *size = (sdram[((*(uint32_t *)icp .hw_map.sdramcr &233 *size = (sdram[((*(uint32_t *)icp_hw_map.sdramcr & 243 234 ICP_SDRAM_MASK) >> 2)]); 244 235 } else { … … 295 286 { 296 287 #ifdef CONFIG_FB 297 static bool vga_init = false;298 288 if (!vga_init) { 299 289 icp_vga_init(); … … 314 304 stdout_wire(fbdev); 315 305 #endif 316 #ifdef CONFIG_ARM926_UART317 if (arm926_uart_init(&icp.uart, ARM926_UART0_IRQ,318 ARM926_UART0_BASE_ADDRESS, sizeof(arm926_uart_regs_t)))319 stdout_wire(&icp.uart.outdev);320 #endif321 306 } 322 307 … … 325 310 326 311 pl050_t *pl050 = malloc(sizeof(pl050_t), FRAME_ATOMIC); 327 pl050->status = (ioport8_t *)icp .hw_map.kbd_stat;328 pl050->data = (ioport8_t *)icp .hw_map.kbd_data;329 pl050->ctrl = (ioport8_t *)icp .hw_map.kbd_ctrl;312 pl050->status = (ioport8_t *)icp_hw_map.kbd_stat; 313 pl050->data = (ioport8_t *)icp_hw_map.kbd_data; 314 pl050->ctrl = (ioport8_t *)icp_hw_map.kbd_ctrl; 330 315 331 316 pl050_instance_t *pl050_instance = pl050_init(pl050, ICP_KBD_IRQ); … … 350 335 ICP_KBD); 351 336 352 #ifdef CONFIG_ARM926_UART353 srln_instance_t *srln_instance = srln_init();354 if (srln_instance) {355 indev_t *sink = stdin_wire();356 indev_t *srln = srln_wire(srln_instance, sink);357 arm926_uart_input_wire(&icp.uart, srln);358 icp_irqc_unmask(ARM926_UART0_IRQ);359 }360 #endif361 337 } 362 338 -
kernel/genarch/Makefile.inc
r2673b3b ra8ca607b 91 91 endif 92 92 93 ifeq ($(CONFIG_ARM926_UART),y)94 GENARCH_SOURCES += \95 genarch/src/drivers/arm926_uart/arm926_uart.c96 endif97 98 93 ifeq ($(CONFIG_S3C24XX_IRQC),y) 99 94 GENARCH_SOURCES += \
Note:
See TracChangeset
for help on using the changeset viewer.