Changes in / [96e01fbc:0d57c3e] in mainline
- Files:
-
- 17 deleted
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
r96e01fbc r0d57c3e 65 65 @ "testarm" GXEmul Testarm 66 66 @ "integratorcp" Integratorcp 67 @ "beagleboardxm" BeogleBoard-xM68 67 ! [PLATFORM=arm32] MACHINE (choice) 69 68 … … 87 86 ! [PLATFORM=sparc64&MACHINE=generic] PROCESSOR (choice) 88 87 89 % CPU type90 @ "armv4" ARMv491 ! [PLATFORM=arm32&(MACHINE=gta02|MACHINE=gxemul)] PROCESSOR (choice)92 93 % CPU type94 @ "armv5" ARMv595 ! [PLATFORM=arm32&MACHINE=integratorcp] PROCESSOR (choice)96 97 % CPU type98 @ "armv7_a" ARMv7-A99 ! [PLATFORM=arm32&MACHINE=beagleboardxm] PROCESSOR (choice)100 101 102 88 % RAM disk format 103 89 @ "tmpfs" TMPFS image … … 420 406 % Output device class 421 407 @ "generic" Monitor or serial line 422 ! [PLATFORM=arm32&(MACHINE=gta02|MACHINE=integratorcp |MACHINE=beagleboardxm)] CONFIG_HID_OUT (choice)408 ! [PLATFORM=arm32&(MACHINE=gta02|MACHINE=integratorcp)] CONFIG_HID_OUT (choice) 423 409 424 410 % Output device class … … 477 463 ! [PLATFORM=arm32&MACHINE=gta02] CONFIG_S3C24XX_IRQC (y) 478 464 479 % Support for TI AMDM37X on-chip UART480 ! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=arm32&MACHINE=beagleboardxm] CONFIG_AMDM37X_UART (y/n)481 482 465 % Support for i8042 controller 483 466 ! [CONFIG_PC_KBD=y] CONFIG_I8042 (y) … … 499 482 500 483 % Serial line input module 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)484 ! [CONFIG_DSRLNIN=y|(PLATFORM=arm32&MACHINE=gta02)|(PLATFORM=ia64&MACHINE=i460GX&CONFIG_NS16550=y)|(PLATFORM=ia64&MACHINE=ski)|(PLATFORM=sparc64&PROCESSOR=sun4v)] CONFIG_SRLN (y) 502 485 503 486 % EGA support … … 535 518 @ "1920x1080" 536 519 @ "1920x1200" 537 ! [(PLATFORM=ia32|PLATFORM=amd64 |MACHINE=beagleboardxm)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_BFB_MODE (choice)520 ! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_BFB_MODE (choice) 538 521 539 522 % Default framebuffer depth … … 541 524 @ "16" 542 525 @ "24" 543 ! [(PLATFORM=ia32|PLATFORM=amd64 |MACHINE=beagleboardxm)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_BFB_BPP (choice)526 ! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_BFB_BPP (choice) 544 527 545 528 % Start AP processors by the loader -
boot/Makefile.uboot
r96e01fbc r0d57c3e 40 40 41 41 $(POST_OUTPUT): $(BIN_OUTPUT) 42 $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr $(LADDR) -saddr $(SADDR)$< $@42 $(MKUIMAGE) -name "$(IMAGE_NAME)" -laddr 0x30008000 -saddr 0x30008000 $< $@ 43 43 44 44 clean: -
boot/arch/arm32/Makefile.inc
r96e01fbc r0d57c3e 30 30 BOOT_OUTPUT = image.boot 31 31 POST_OUTPUT = $(ROOT_PATH)/uImage.bin 32 LADDR = 0x3000800033 SADDR = 0x3000800034 POSTBUILD = Makefile.uboot35 endif36 37 ifeq ($(MACHINE), beagleboardxm)38 BOOT_OUTPUT = image.boot39 POST_OUTPUT = $(ROOT_PATH)/uImage.bin40 LADDR = 0x8000000041 SADDR = 0x8000000042 32 POSTBUILD = Makefile.uboot 43 33 endif … … 49 39 BITS = 32 50 40 ENDIANESS = LE 51 EXTRA_CFLAGS = -march= $(subst _,-,$(PROCESSOR))41 EXTRA_CFLAGS = -march=armv4 52 42 53 ifeq ($(MACHINE), gta02)54 43 RD_SRVS_ESSENTIAL += \ 55 44 $(USPACE_PATH)/srv/hid/s3c24xx_ts/s3c24xx_ts \ 56 45 $(USPACE_PATH)/srv/hw/char/s3c24xx_uart/s3c24xx_uart 57 endif58 46 59 ifeq ($(MACHINE), gxemul)60 47 RD_SRVS_NON_ESSENTIAL += \ 61 48 $(USPACE_PATH)/srv/bd/gxe_bd/gxe_bd 62 endif63 64 RD_DRVS += \65 infrastructure/rootamdm37x \66 bus/usb/ehci \67 bus/usb/ohci \68 bus/usb/usbflbk \69 bus/usb/usbhub \70 bus/usb/usbhid \71 bus/usb/usbmast \72 bus/usb/usbmid73 49 74 50 SOURCES = \ -
boot/arch/arm32/include/arch.h
r96e01fbc r0d57c3e 42 42 #ifdef MACHINE_gta02 43 43 #define BOOT_BASE 0x30008000 44 #elif defined MACHINE_beagleboardxm45 #define BOOT_BASE 0x8000000046 44 #else 47 45 #define BOOT_BASE 0x00000000 … … 50 48 #define BOOT_OFFSET (BOOT_BASE + 0xa00000) 51 49 52 #if def MACHINE_beagleboardxm53 #define PA _OFFSET 050 #ifndef __ASM__ 51 #define PA2KA(addr) (((uintptr_t) (addr)) + 0x80000000) 54 52 #else 55 #define PA _OFFSET 0x8000000053 #define PA2KA(addr) ((addr) + 0x80000000) 56 54 #endif 57 58 #ifndef __ASM__59 #define PA2KA(addr) (((uintptr_t) (addr)) + PA_OFFSET)60 #else61 #define PA2KA(addr) ((addr) + PA_OFFSET)62 #endif63 64 55 65 56 #endif -
boot/arch/arm32/include/main.h
r96e01fbc r0d57c3e 40 40 /** Address where characters to be printed are expected. */ 41 41 42 43 /** BeagleBoard-xM UART register address44 *45 * This is UART3 of AM/DM37x CPU46 */47 #define BBXM_SCONS_THR 0x4902000048 #define BBXM_SCONS_SSR 0x4902004449 50 /* Check this bit before writing (tx fifo full) */51 #define BBXM_THR_FULL 0x0000000152 53 54 42 /** GTA02 serial console UART register addresses. 55 43 * -
boot/arch/arm32/include/mm.h
r96e01fbc r0d57c3e 58 58 unsigned int bufferable : 1; 59 59 unsigned int cacheable : 1; 60 unsigned int xn: 1;60 unsigned int impl_specific : 1; 61 61 unsigned int domain : 4; 62 62 unsigned int should_be_zero_1 : 1; 63 unsigned int access_permission_0 : 2; 64 unsigned int tex : 3; 65 unsigned int access_permission_1 : 2; 66 unsigned int non_global : 1; 67 unsigned int should_be_zero_2 : 1; 68 unsigned int non_secure : 1; 63 unsigned int access_permission : 2; 64 unsigned int should_be_zero_2 : 8; 69 65 unsigned int section_base_addr : 12; 70 66 } __attribute__((packed)) pte_level0_section_t; -
boot/arch/arm32/src/mm.c
r96e01fbc r0d57c3e 54 54 { 55 55 pte->descriptor_type = PTE_DESCRIPTOR_SECTION; 56 pte->bufferable = 1;56 pte->bufferable = 0; 57 57 pte->cacheable = 0; 58 pte-> xn= 0;58 pte->impl_specific = 0; 59 59 pte->domain = 0; 60 60 pte->should_be_zero_1 = 0; 61 pte->access_permission_0 = PTE_AP_USER_NO_KERNEL_RW; 62 pte->tex = 0; 63 pte->access_permission_1 = 0; 64 pte->non_global = 0; 61 pte->access_permission = PTE_AP_USER_NO_KERNEL_RW; 65 62 pte->should_be_zero_2 = 0; 66 pte->non_secure = 0;67 63 pte->section_base_addr = frame; 68 64 } … … 71 67 static void init_boot_pt(void) 72 68 { 73 const pfn_t split_page = PTL0_ENTRIES; 69 pfn_t split_page = 0x800; 70 74 71 /* Create 1:1 virtual-physical mapping (in lower 2 GB). */ 75 72 pfn_t page; … … 81 78 * (upper 2 GB), physical addresses start from 0. 82 79 */ 83 /* BeagleBoard-xM (MD37x) memory starts at 2GB border,84 * thus mapping only lower 2GB is not not enough.85 * Map entire AS 1:1 instead and hope it works. */86 80 for (page = split_page; page < PTL0_ENTRIES; page++) 87 #ifndef MACHINE_beagleboardxm88 81 init_ptl0_section(&boot_pt[page], page - split_page); 89 #else90 init_ptl0_section(&boot_pt[page], page);91 #endif92 82 93 83 asm volatile ( … … 105 95 /* Behave as a client of domains */ 106 96 "ldr r0, =0x55555555\n" 107 "mcr p15, 0, r0, c3, c0, 0\n" 97 "mcr p15, 0, r0, c3, c0, 0\n" 108 98 109 #ifdef PROCESSOR_armv7_a110 /* Read Auxiliary control register */111 "mrc p15, 0, r0, c1, c0, 1\n"112 /* Mask to enable L2 cache */113 "ldr r1, =0x00000002\n"114 "orr r0, r0, r1\n"115 /* Store Auxiliary control register */116 "mrc p15, 0, r0, c1, c0, 1\n"117 #endif118 99 /* Current settings */ 119 100 "mrc p15, 0, r0, c1, c0, 0\n" 120 101 121 #ifdef PROCESSOR_armv7_a122 /* Mask to enable paging, caching */123 "ldr r1, =0x00000005\n"124 #else125 102 /* Mask to enable paging */ 126 103 "ldr r1, =0x00000001\n" 127 #endif128 104 "orr r0, r0, r1\n" 129 105 -
boot/arch/arm32/src/putchar.c
r96e01fbc r0d57c3e 40 40 #include <putchar.h> 41 41 #include <str.h> 42 43 #ifdef MACHINE_beagleboardxm44 45 /** Send a byte to the amdm37x serial console.46 *47 * @param byte Byte to send.48 */49 static void scons_sendb_bbxm(uint8_t byte)50 {51 volatile uint32_t *thr =52 (volatile uint32_t *)BBXM_SCONS_THR;53 volatile uint32_t *ssr =54 (volatile uint32_t *)BBXM_SCONS_SSR;55 56 /* Wait until transmitter is empty. */57 while ((*ssr & BBXM_THR_FULL) == 1) ;58 59 /* Transmit byte. */60 *thr = (uint32_t) byte;61 }62 63 #endif64 42 65 43 #ifdef MACHINE_gta02 … … 119 97 static void scons_sendb(uint8_t byte) 120 98 { 121 #ifdef MACHINE_beagleboardxm122 scons_sendb_bbxm(byte);123 #endif124 99 #ifdef MACHINE_gta02 125 100 scons_sendb_gta02(byte); -
kernel/arch/arm32/Makefile.inc
r96e01fbc r0d57c3e 33 33 ATSIGN = % 34 34 35 GCC_CFLAGS += -march= $(subst _,-,$(PROCESSOR))35 GCC_CFLAGS += -march=armv4 36 36 37 37 BITS = 32 … … 74 74 endif 75 75 76 ifeq ($(MACHINE),beagleboardxm)77 ARCH_SOURCES += arch/$(KARCH)/src/mach/beagleboardxm/beagleboardxm.c78 endif79 80 76 ifeq ($(CONFIG_PL050),y) 81 77 ARCH_SOURCES += genarch/src/drivers/pl050/pl050.c -
kernel/arch/arm32/_link.ld.in
r96e01fbc r0d57c3e 9 9 #ifdef MACHINE_gta02 10 10 #define KERNEL_LOAD_ADDRESS 0xb0a08000 11 #elif defined MACHINE_beagleboardxm12 #define KERNEL_LOAD_ADDRESS 0x80a0000013 11 #else 14 12 #define KERNEL_LOAD_ADDRESS 0x80a00000 -
kernel/arch/arm32/include/asm.h
r96e01fbc r0d57c3e 43 43 #include <trace.h> 44 44 45 /** No such instruction on old ARM to sleep CPU. 46 * 47 * ARMv7 introduced wait for event and wait for interrupt (wfe/wfi). 48 */ 45 /** No such instruction on ARM to sleep CPU. */ 49 46 NO_TRACE static inline void cpu_sleep(void) 50 47 { 51 #ifdef PROCESSOR_armv7_a52 asm volatile ( "wfe" :: );53 #endif54 48 } 55 49 -
kernel/arch/arm32/include/cpu.h
r96e01fbc r0d57c3e 41 41 42 42 43 /** Struct representing ARM CPU identifi cation. */43 /** Struct representing ARM CPU identifiaction. */ 44 44 typedef struct { 45 45 /** Implementator (vendor) number. */ -
kernel/arch/arm32/include/machine_func.h
r96e01fbc r0d57c3e 108 108 extern size_t machine_get_irq_count(void); 109 109 110 extern const char * machine_get_platform_name(void);111 112 110 #endif 113 111 -
kernel/arch/arm32/include/mm/frame.h
r96e01fbc r0d57c3e 48 48 #ifdef MACHINE_gta02 49 49 #define BOOT_PAGE_TABLE_ADDRESS 0x30010000 50 #elif defined MACHINE_beagleboardxm51 #define BOOT_PAGE_TABLE_ADDRESS 0x8000800052 50 #else 53 51 #define BOOT_PAGE_TABLE_ADDRESS 0x00008000 … … 59 57 #ifdef MACHINE_gta02 60 58 #define PHYSMEM_START_ADDR 0x30008000 61 #elif defined MACHINE_beagleboardxm62 #define PHYSMEM_START_ADDR 0x8000000063 59 #else 64 60 #define PHYSMEM_START_ADDR 0x00000000 -
kernel/arch/arm32/include/mm/page.h
r96e01fbc r0d57c3e 46 46 #define PAGE_SIZE FRAME_SIZE 47 47 48 #ifdef MACHINE_beagleboardxm49 #ifndef __ASM__50 # define KA2PA(x) ((uintptr_t) (x))51 # define PA2KA(x) ((uintptr_t) (x))52 #else53 # define KA2PA(x) (x)54 # define PA2KA(x) (x)55 #endif56 #else57 48 #ifndef __ASM__ 58 49 # define KA2PA(x) (((uintptr_t) (x)) - 0x80000000) … … 62 53 # define PA2KA(x) ((x) + 0x80000000) 63 54 #endif 64 #endif65 55 66 56 /* Number of entries in each level. */ 67 #define PTL0_ENTRIES_ARCH (1 << 12)/* 4096 */68 #define PTL1_ENTRIES_ARCH 69 #define PTL2_ENTRIES_ARCH 57 #define PTL0_ENTRIES_ARCH (1 << 12) /* 4096 */ 58 #define PTL1_ENTRIES_ARCH 0 59 #define PTL2_ENTRIES_ARCH 0 70 60 /* coarse page tables used (256 * 4 = 1KB per page) */ 71 #define PTL3_ENTRIES_ARCH (1 << 8)/* 256 */61 #define PTL3_ENTRIES_ARCH (1 << 8) /* 256 */ 72 62 73 63 /* Page table sizes for each level. */ 74 #define PTL0_SIZE_ARCH 75 #define PTL1_SIZE_ARCH 76 #define PTL2_SIZE_ARCH 77 #define PTL3_SIZE_ARCH 64 #define PTL0_SIZE_ARCH FOUR_FRAMES 65 #define PTL1_SIZE_ARCH 0 66 #define PTL2_SIZE_ARCH 0 67 #define PTL3_SIZE_ARCH ONE_FRAME 78 68 79 69 /* Macros calculating indices into page tables for each level. */ 80 #define PTL0_INDEX_ARCH(vaddr) 81 #define PTL1_INDEX_ARCH(vaddr) 82 #define PTL2_INDEX_ARCH(vaddr) 83 #define PTL3_INDEX_ARCH(vaddr) 70 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 20) & 0xfff) 71 #define PTL1_INDEX_ARCH(vaddr) 0 72 #define PTL2_INDEX_ARCH(vaddr) 0 73 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x0ff) 84 74 85 75 /* Get PTE address accessors for each level. */ 86 76 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) \ 87 77 ((pte_t *) ((((pte_t *)(ptl0))[(i)].l0).coarse_table_addr << 10)) 88 78 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) \ 89 79 (ptl1) 90 80 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) \ 91 81 (ptl2) 92 82 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) \ 93 83 ((uintptr_t) ((((pte_t *)(ptl3))[(i)].l1).frame_base_addr << 12)) 94 84 95 85 /* Set PTE address accessors for each level. */ 96 86 #define SET_PTL0_ADDRESS_ARCH(ptl0) \ 97 87 (set_ptl0_addr((pte_t *) (ptl0))) 98 88 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) \ 99 89 (((pte_t *) (ptl0))[(i)].l0.coarse_table_addr = (a) >> 10) 100 90 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 101 91 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 102 92 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) \ 103 93 (((pte_t *) (ptl3))[(i)].l1.frame_base_addr = (a) >> 12) 104 94 105 95 /* Get PTE flags accessors for each level. */ 106 96 #define GET_PTL1_FLAGS_ARCH(ptl0, i) \ 107 97 get_pt_level0_flags((pte_t *) (ptl0), (size_t) (i)) 108 98 #define GET_PTL2_FLAGS_ARCH(ptl1, i) \ 109 99 PAGE_PRESENT 110 100 #define GET_PTL3_FLAGS_ARCH(ptl2, i) \ 111 101 PAGE_PRESENT 112 102 #define GET_FRAME_FLAGS_ARCH(ptl3, i) \ 113 103 get_pt_level1_flags((pte_t *) (ptl3), (size_t) (i)) 114 104 115 105 /* Set PTE flags accessors for each level. */ 116 106 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \ 117 107 set_pt_level0_flags((pte_t *) (ptl0), (size_t) (i), (x)) 118 108 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 119 109 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) … … 129 119 set_pt_level1_present((pte_t *) (ptl3), (size_t) (i)) 130 120 131 #if defined(PROCESSOR_armv7_a) 132 #include "page_armv7.h" 133 #elif defined(PROCESSOR_armv4) | defined(PROCESSOR_armv5) 134 #include "page_armv4.h" 121 /* Macros for querying the last-level PTE entries. */ 122 #define PTE_VALID_ARCH(pte) \ 123 (*((uint32_t *) (pte)) != 0) 124 #define PTE_PRESENT_ARCH(pte) \ 125 (((pte_t *) (pte))->l0.descriptor_type != 0) 126 #define PTE_GET_FRAME_ARCH(pte) \ 127 (((pte_t *) (pte))->l1.frame_base_addr << FRAME_WIDTH) 128 #define PTE_WRITABLE_ARCH(pte) \ 129 (((pte_t *) (pte))->l1.access_permission_0 == PTE_AP_USER_RW_KERNEL_RW) 130 #define PTE_EXECUTABLE_ARCH(pte) \ 131 1 132 133 #ifndef __ASM__ 134 135 /** Level 0 page table entry. */ 136 typedef struct { 137 /* 0b01 for coarse tables, see below for details */ 138 unsigned descriptor_type : 2; 139 unsigned impl_specific : 3; 140 unsigned domain : 4; 141 unsigned should_be_zero : 1; 142 143 /* Pointer to the coarse 2nd level page table (holding entries for small 144 * (4KB) or large (64KB) pages. ARM also supports fine 2nd level page 145 * tables that may hold even tiny pages (1KB) but they are bigger (4KB 146 * per table in comparison with 1KB per the coarse table) 147 */ 148 unsigned coarse_table_addr : 22; 149 } ATTRIBUTE_PACKED pte_level0_t; 150 151 /** Level 1 page table entry (small (4KB) pages used). */ 152 typedef struct { 153 154 /* 0b10 for small pages */ 155 unsigned descriptor_type : 2; 156 unsigned bufferable : 1; 157 unsigned cacheable : 1; 158 159 /* access permissions for each of 4 subparts of a page 160 * (for each 1KB when small pages used */ 161 unsigned access_permission_0 : 2; 162 unsigned access_permission_1 : 2; 163 unsigned access_permission_2 : 2; 164 unsigned access_permission_3 : 2; 165 unsigned frame_base_addr : 20; 166 } ATTRIBUTE_PACKED pte_level1_t; 167 168 typedef union { 169 pte_level0_t l0; 170 pte_level1_t l1; 171 } pte_t; 172 173 /* Level 1 page tables access permissions */ 174 175 /** User mode: no access, privileged mode: no access. */ 176 #define PTE_AP_USER_NO_KERNEL_NO 0 177 178 /** User mode: no access, privileged mode: read/write. */ 179 #define PTE_AP_USER_NO_KERNEL_RW 1 180 181 /** User mode: read only, privileged mode: read/write. */ 182 #define PTE_AP_USER_RO_KERNEL_RW 2 183 184 /** User mode: read/write, privileged mode: read/write. */ 185 #define PTE_AP_USER_RW_KERNEL_RW 3 186 187 188 /* pte_level0_t and pte_level1_t descriptor_type flags */ 189 190 /** pte_level0_t and pte_level1_t "not present" flag (used in descriptor_type). */ 191 #define PTE_DESCRIPTOR_NOT_PRESENT 0 192 193 /** pte_level0_t coarse page table flag (used in descriptor_type). */ 194 #define PTE_DESCRIPTOR_COARSE_TABLE 1 195 196 /** pte_level1_t small page table flag (used in descriptor type). */ 197 #define PTE_DESCRIPTOR_SMALL_PAGE 2 198 199 200 /** Sets the address of level 0 page table. 201 * 202 * @param pt Pointer to the page table to set. 203 * 204 */ 205 NO_TRACE static inline void set_ptl0_addr(pte_t *pt) 206 { 207 asm volatile ( 208 "mcr p15, 0, %[pt], c2, c0, 0\n" 209 :: [pt] "r" (pt) 210 ); 211 } 212 213 214 /** Returns level 0 page table entry flags. 215 * 216 * @param pt Level 0 page table. 217 * @param i Index of the entry to return. 218 * 219 */ 220 NO_TRACE static inline int get_pt_level0_flags(pte_t *pt, size_t i) 221 { 222 pte_level0_t *p = &pt[i].l0; 223 int np = (p->descriptor_type == PTE_DESCRIPTOR_NOT_PRESENT); 224 225 return (np << PAGE_PRESENT_SHIFT) | (1 << PAGE_USER_SHIFT) | 226 (1 << PAGE_READ_SHIFT) | (1 << PAGE_WRITE_SHIFT) | 227 (1 << PAGE_EXEC_SHIFT) | (1 << PAGE_CACHEABLE_SHIFT); 228 } 229 230 /** Returns level 1 page table entry flags. 231 * 232 * @param pt Level 1 page table. 233 * @param i Index of the entry to return. 234 * 235 */ 236 NO_TRACE static inline int get_pt_level1_flags(pte_t *pt, size_t i) 237 { 238 pte_level1_t *p = &pt[i].l1; 239 240 int dt = p->descriptor_type; 241 int ap = p->access_permission_0; 242 243 return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_PRESENT_SHIFT) | 244 ((ap == PTE_AP_USER_RO_KERNEL_RW) << PAGE_READ_SHIFT) | 245 ((ap == PTE_AP_USER_RW_KERNEL_RW) << PAGE_READ_SHIFT) | 246 ((ap == PTE_AP_USER_RW_KERNEL_RW) << PAGE_WRITE_SHIFT) | 247 ((ap != PTE_AP_USER_NO_KERNEL_RW) << PAGE_USER_SHIFT) | 248 ((ap == PTE_AP_USER_NO_KERNEL_RW) << PAGE_READ_SHIFT) | 249 ((ap == PTE_AP_USER_NO_KERNEL_RW) << PAGE_WRITE_SHIFT) | 250 (1 << PAGE_EXEC_SHIFT) | 251 (p->bufferable << PAGE_CACHEABLE); 252 } 253 254 /** Sets flags of level 0 page table entry. 255 * 256 * @param pt level 0 page table 257 * @param i index of the entry to be changed 258 * @param flags new flags 259 * 260 */ 261 NO_TRACE static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 262 { 263 pte_level0_t *p = &pt[i].l0; 264 265 if (flags & PAGE_NOT_PRESENT) { 266 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; 267 /* 268 * Ensures that the entry will be recognized as valid when 269 * PTE_VALID_ARCH applied. 270 */ 271 p->should_be_zero = 1; 272 } else { 273 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 274 p->should_be_zero = 0; 275 } 276 } 277 278 NO_TRACE static inline void set_pt_level0_present(pte_t *pt, size_t i) 279 { 280 pte_level0_t *p = &pt[i].l0; 281 282 p->should_be_zero = 0; 283 write_barrier(); 284 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 285 } 286 287 /** Sets flags of level 1 page table entry. 288 * 289 * We use same access rights for the whole page. When page 290 * is not preset we store 1 in acess_rigts_3 so that at least 291 * one bit is 1 (to mark correct page entry, see #PAGE_VALID_ARCH). 292 * 293 * @param pt Level 1 page table. 294 * @param i Index of the entry to be changed. 295 * @param flags New flags. 296 * 297 */ 298 NO_TRACE static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 299 { 300 pte_level1_t *p = &pt[i].l1; 301 302 if (flags & PAGE_NOT_PRESENT) 303 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; 304 else 305 p->descriptor_type = PTE_DESCRIPTOR_SMALL_PAGE; 306 307 p->cacheable = p->bufferable = (flags & PAGE_CACHEABLE) != 0; 308 309 /* default access permission */ 310 p->access_permission_0 = p->access_permission_1 = 311 p->access_permission_2 = p->access_permission_3 = 312 PTE_AP_USER_NO_KERNEL_RW; 313 314 if (flags & PAGE_USER) { 315 if (flags & PAGE_READ) { 316 p->access_permission_0 = p->access_permission_1 = 317 p->access_permission_2 = p->access_permission_3 = 318 PTE_AP_USER_RO_KERNEL_RW; 319 } 320 if (flags & PAGE_WRITE) { 321 p->access_permission_0 = p->access_permission_1 = 322 p->access_permission_2 = p->access_permission_3 = 323 PTE_AP_USER_RW_KERNEL_RW; 324 } 325 } 326 } 327 328 NO_TRACE static inline void set_pt_level1_present(pte_t *pt, size_t i) 329 { 330 pte_level1_t *p = &pt[i].l1; 331 332 p->descriptor_type = PTE_DESCRIPTOR_SMALL_PAGE; 333 } 334 335 extern void page_arch_init(void); 336 337 #endif /* __ASM__ */ 338 135 339 #endif 136 340 137 #endif138 139 341 /** @} 140 342 */ -
kernel/arch/arm32/include/regutils.h
r96e01fbc r0d57c3e 41 41 #define STATUS_REG_MODE_MASK 0x1f 42 42 43 #define CP15_R1_MMU_ENABLE_BIT (1 << 0)44 #define CP15_R1_ALIGNMENT_ENABLE_BIT (1 << 1)45 #define CP15_R1_CACHE_ENABLE_BIT (1 << 2)46 #define CP15_R1_BRANCH_PREDICT_BIT (1 << 11)47 #define CP15_R1_INST_CACHE_BIT (1 << 12)48 43 #define CP15_R1_HIGH_VECTORS_BIT (1 << 13) 49 #define CP15_R1_ROUND_ROBIN_BIT (1 << 14)50 #define CP15_R1_HA_ENABLE_BIT (1 << 17)51 #define CP15_R1_WXN_BIT (1 << 19) /* Only if virt. supported */52 #define CP15_R1_UWXN_BIT (1 << 20) /* Only if virt. supported */53 #define CP15_R1_FI_BIT (1 << 21)54 #define CP15_R1_VE_BIT (1 << 24)55 #define CP15_R1_EE_BIT (1 << 25)56 #define CP15_R1_NMFI_BIT (1 << 27)57 #define CP15_R1_TRE_BIT (1 << 28)58 #define CP15_R1_AFE_BIT (1 << 29)59 44 60 45 /* ARM Processor Operation Modes */ -
kernel/arch/arm32/src/arm32.c
r96e01fbc r0d57c3e 49 49 #include <str.h> 50 50 #include <arch/ras.h> 51 #include <sysinfo/sysinfo.h>52 51 53 52 /** Performs arm32-specific initialization before main_bsp() is called. */ … … 117 116 { 118 117 machine_input_init(); 119 const char *platform = machine_get_platform_name();120 121 sysinfo_set_item_data("platform", NULL, (void *) platform,122 str_size(platform));123 118 } 124 119 -
kernel/arch/arm32/src/cpu/cpu.c
r96e01fbc r0d57c3e 44 44 /** Implementators (vendor) names */ 45 45 static const char *imp_data[] = { 46 "?", /* IMP_DATA_START_OFFSET */ 47 "ARM Limited", /* 0x41 */ 48 "", "", /* 0x42 - 0x43 */ 49 "Digital Equipment Corporation", /* 0x44 */ 50 "", "", "", "", "", "", "", "", /* 0x45 - 0x4c */ 51 "Motorola, Freescale Semicondutor Inc.", /* 0x4d */ 52 "", "", "", /* 0x4e - 0x50 */ 53 "Qualcomm Inc.", /* 0x51 */ 54 "", "", "", "", /* 0x52 - 0x55 */ 55 "Marvell Semiconductor", /* 0x56 */ 56 "", "", "", "", "", "", "", "", "", "", /* 0x57 - 0x60 */ 57 "", "", "", "", "", "", "", "", /* 0x61 - 0x68 */ 58 "Intel Corporation" /* 0x69 */ 46 "?", /* IMP_DATA_START_OFFSET */ 47 "ARM Ltd", /* 0x41 */ 48 "", /* 0x42 */ 49 "", /* 0x43 */ 50 "Digital Equipment Corporation", /* 0x44 */ 51 "", "", "", "", "", "", "", "", "", "", /* 0x45 - 0x4e */ 52 "", "", "", "", "", "", "", "", "", "", /* 0x4f - 0x58 */ 53 "", "", "", "", "", "", "", "", "", "", /* 0x59 - 0x62 */ 54 "", "", "", "", "", "", /* 0x63 - 0x68 */ 55 "Intel Corporation" /* 0x69 */ 59 56 }; 60 57 … … 100 97 void cpu_arch_init(void) 101 98 { 102 #if defined(PROCESSOR_armv7_a)103 uint32_t control_reg = 0;104 asm volatile (105 "mrc p15, 0, %[control_reg], c1, c0"106 : [control_reg] "=r" (control_reg)107 );108 109 /* Turn off tex remap */110 control_reg &= ~CP15_R1_TRE_BIT;111 /* Turn off accessed flag */112 control_reg &= ~(CP15_R1_AFE_BIT | CP15_R1_HA_ENABLE_BIT);113 /* Enable caching */114 control_reg |= CP15_R1_CACHE_ENABLE_BIT;115 116 asm volatile (117 "mcr p15, 0, %[control_reg], c1, c0"118 :: [control_reg] "r" (control_reg)119 );120 #endif121 99 } 122 100 … … 134 112 cpu_arch_t * cpu_arch = &m->arch; 135 113 136 const unsigned imp_offset = cpu_arch->imp_num - IMP_DATA_START_OFFSET; 137 138 if (imp_offset < imp_data_length) { 114 if ((cpu_arch->imp_num) > 0 && 115 (cpu_arch->imp_num < (imp_data_length + IMP_DATA_START_OFFSET))) { 139 116 vendor = imp_data[cpu_arch->imp_num - IMP_DATA_START_OFFSET]; 140 117 } 141 118 142 // TODO CPUs with arch_num == 0xf use CPUID scheme for identification143 if (cpu_arch->arch_num < arch_data_length) {119 if ((cpu_arch->arch_num) > 0 && 120 (cpu_arch->arch_num < arch_data_length)) { 144 121 architecture = arch_data[cpu_arch->arch_num]; 145 122 } -
kernel/arch/arm32/src/exception.c
r96e01fbc r0d57c3e 120 120 static void high_vectors(void) 121 121 { 122 uint32_t control_reg = 0;122 uint32_t control_reg; 123 123 124 #if defined(PROCESSOR_armv7_a)125 asm volatile (126 "mrc p15, 0, %[control_reg], c1, c0"127 : [control_reg] "=r" (control_reg)128 );129 #elif defined(PROCESSOR_armv4) | defined(PROCESSOR_armv5)130 124 asm volatile ( 131 125 "mrc p15, 0, %[control_reg], c1, c1" 132 126 : [control_reg] "=r" (control_reg) 133 127 ); 134 #endif135 128 136 129 /* switch on the high vectors bit */ 137 130 control_reg |= CP15_R1_HIGH_VECTORS_BIT; 138 131 139 #if defined(PROCESSOR_armv7_a)140 asm volatile (141 "mcr p15, 0, %[control_reg], c1, c0"142 :: [control_reg] "r" (control_reg)143 );144 #elif defined(PROCESSOR_armv4) | defined(PROCESSOR_armv5)145 132 asm volatile ( 146 133 "mcr p15, 0, %[control_reg], c1, c1" 147 134 :: [control_reg] "r" (control_reg) 148 135 ); 149 #endif150 136 } 151 137 #endif -
kernel/arch/arm32/src/machine_func.c
r96e01fbc r0d57c3e 42 42 #include <arch/mach/integratorcp/integratorcp.h> 43 43 #include <arch/mach/testarm/testarm.h> 44 #include <arch/mach/beagleboardxm/beagleboardxm.h>45 44 46 45 /** Pointer to machine_ops structure being used. */ … … 56 55 #elif defined(MACHINE_integratorcp) 57 56 machine_ops = &icp_machine_ops; 58 #elif defined(MACHINE_beagleboardxm)59 machine_ops = &bbxm_machine_ops;60 57 #else 61 58 #error Machine type not defined. … … 134 131 } 135 132 136 const char * machine_get_platform_name(void)137 {138 if (machine_ops->machine_get_platform_name)139 return machine_ops->machine_get_platform_name();140 return NULL;141 }142 133 /** @} 143 134 */ -
kernel/arch/arm32/src/mm/page.c
r96e01fbc r0d57c3e 52 52 void page_arch_init(void) 53 53 { 54 int flags = PAGE_CACHEABLE | PAGE_EXEC;54 int flags = PAGE_CACHEABLE; 55 55 page_mapping_operations = &pt_mapping_operations; 56 56 57 57 page_table_lock(AS_KERNEL, true); 58 58 59 uintptr_t cur; 60 59 61 /* Kernel identity mapping */ 60 //FIXME: We need to consider the possibility that 61 //identity_base > identity_size and physmem_end. 62 //This might lead to overflow if identity_size is too big. 63 for (uintptr_t cur = PHYSMEM_START_ADDR; 64 cur < min(KA2PA(config.identity_base) + 65 config.identity_size, config.physmem_end); 62 for (cur = PHYSMEM_START_ADDR; 63 cur < min(config.identity_size, config.physmem_end); 66 64 cur += FRAME_SIZE) 67 65 page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); -
kernel/arch/arm32/src/mm/page_fault.c
r96e01fbc r0d57c3e 142 142 panic("page_fault - instruction does not access memory " 143 143 "(instr_code: %#0" PRIx32 ", badvaddr:%p).", 144 *(uint32_t*)instr_union.instr, (void *) badvaddr);144 instr_union.pc, (void *) badvaddr); 145 145 return PF_ACCESS_EXEC; 146 146 } … … 162 162 panic("page_fault - instruction doesn't access memory " 163 163 "(instr_code: %#0" PRIx32 ", badvaddr:%p).", 164 *(uint32_t*)instr_union.instr, (void *) badvaddr);164 instr_union.pc, (void *) badvaddr); 165 165 166 166 return PF_ACCESS_EXEC; -
kernel/genarch/Makefile.inc
r96e01fbc r0d57c3e 101 101 endif 102 102 103 ifeq ($(CONFIG_AMDM37X_UART),y)104 GENARCH_SOURCES += \105 genarch/src/drivers/amdm37x_uart/amdm37x_uart.c106 endif107 108 103 ifeq ($(CONFIG_VIA_CUDA),y) 109 104 GENARCH_SOURCES += \ -
tools/mkuimage.py
r96e01fbc r0d57c3e 120 120 header.start_addr = start_addr # Address of entry point 121 121 header.data_crc = data_crc 122 header.os = 2 # NetBSD122 header.os = 5 # Linux 123 123 header.arch = 2 # ARM 124 124 header.img_type = 2 # Kernel -
uspace/Makefile
r96e01fbc r0d57c3e 188 188 endif 189 189 190 ifeq ($(UARCH),arm32)191 DIRS += \192 drv/infrastructure/rootamdm37x193 endif194 195 190 ## System libraries 196 191 # -
uspace/drv/bus/usb/ehci/ehci.ma
r96e01fbc r0d57c3e 1 20 usb/host=ehci2 1 10 pci/class=0c&subclass=03&progif=20 -
uspace/drv/bus/usb/ohci/ohci.ma
r96e01fbc r0d57c3e 1 20 usb/host=ohci2 1 10 pci/class=0c&subclass=03&progif=10 -
uspace/drv/bus/usb/ohci/ohci_regs.h
r96e01fbc r0d57c3e 245 245 #define RHPS_PRSC_FLAG (1 << 20) /* port reset status change WC */ 246 246 #define RHPS_CHANGE_WC_MASK (0x1f0000) 247 } ohci_regs_t;247 } __attribute__((packed)) ohci_regs_t; 248 248 #endif 249 249 /** -
uspace/lib/c/arch/arm32/Makefile.common
r96e01fbc r0d57c3e 28 28 # 29 29 30 GCC_CFLAGS += -ffixed-r9 -mtp=soft -fno-omit-frame-pointer -march= $(subst _,-,$(PROCESSOR))30 GCC_CFLAGS += -ffixed-r9 -mtp=soft -fno-omit-frame-pointer -march=armv4 31 31 32 32 ENDIANESS = LE -
uspace/lib/usbdev/include/usb/dev/request.h
r96e01fbc r0d57c3e 93 93 uint8_t request; 94 94 /** Main parameter to the request. */ 95 union __attribute__ ((packed)){95 union { 96 96 uint16_t value; 97 97 /* FIXME: add #ifdefs according to host endianness */ 98 struct __attribute__ ((packed)){98 struct { 99 99 uint8_t value_low; 100 100 uint8_t value_high; … … 108 108 uint16_t length; 109 109 } __attribute__ ((packed)) usb_device_request_setup_packet_t; 110 111 int assert[(sizeof(usb_device_request_setup_packet_t) == 8) ? 1: -1];112 110 113 111 int usb_control_request_set(usb_pipe_t *,
Note:
See TracChangeset
for help on using the changeset viewer.