Changeset a35b458 in mainline for boot/arch/mips32/src
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- Location:
- boot/arch/mips32/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/mips32/src/asm.S
r3061bc1 ra35b458 55 55 sw $a3, 0($a0) 56 56 #endif 57 57 58 58 /* 59 59 * Setup CPU map (on msim this code … … 62 62 */ 63 63 la $a0, PA2KA(CPUMAP_OFFSET) 64 64 65 65 sw $zero, 0($a0) 66 66 sw $zero, 4($a0) 67 67 sw $zero, 8($a0) 68 68 sw $zero, 12($a0) 69 69 70 70 sw $zero, 16($a0) 71 71 sw $zero, 20($a0) 72 72 sw $zero, 24($a0) 73 73 sw $zero, 28($a0) 74 74 75 75 sw $zero, 32($a0) 76 76 sw $zero, 36($a0) 77 77 sw $zero, 40($a0) 78 78 sw $zero, 44($a0) 79 79 80 80 sw $zero, 48($a0) 81 81 sw $zero, 52($a0) 82 82 sw $zero, 56($a0) 83 83 sw $zero, 60($a0) 84 84 85 85 sw $zero, 64($a0) 86 86 sw $zero, 68($a0) 87 87 sw $zero, 72($a0) 88 88 sw $zero, 76($a0) 89 89 90 90 sw $zero, 80($a0) 91 91 sw $zero, 84($a0) 92 92 sw $zero, 88($a0) 93 93 sw $zero, 92($a0) 94 94 95 95 sw $zero, 96($a0) 96 96 sw $zero, 100($a0) 97 97 sw $zero, 104($a0) 98 98 sw $zero, 108($a0) 99 99 100 100 sw $zero, 112($a0) 101 101 sw $zero, 116($a0) 102 102 sw $zero, 120($a0) 103 103 sw $zero, 124($a0) 104 104 105 105 lui $a1, 1 106 106 107 107 #ifdef MACHINE_msim 108 108 109 109 /* Read dorder value */ 110 110 la $k0, MSIM_DORDER_ADDRESS 111 111 lw $k1, ($k0) 112 112 113 113 /* 114 114 * If we are not running on BSP … … 117 117 beq $k1, $zero, bsp 118 118 nop 119 119 120 120 /* Record CPU presence */ 121 121 sll $a2, $k1, 2 122 122 addu $a2, $a2, $a0 123 123 sw $a1, ($a2) 124 124 125 125 loop: 126 126 j loop 127 127 nop 128 128 129 129 #endif 130 130 131 131 bsp: 132 132 /* Record CPU presence */ 133 133 sw $a1, ($a0) 134 134 135 135 /* Setup initial stack */ 136 136 la $sp, PA2KA(STACK_OFFSET) 137 137 138 138 j bootstrap 139 139 nop -
boot/arch/mips32/src/boot.S
r3061bc1 ra35b458 38 38 .global start 39 39 start: 40 40 41 41 /* Setup CPU map (on msim this code 42 42 is executed in parallel on all CPUs, 43 43 but it not an issue) */ 44 44 la $a0, CPUMAP 45 45 46 46 sw $zero, 0($a0) 47 47 sw $zero, 4($a0) 48 48 sw $zero, 8($a0) 49 49 sw $zero, 12($a0) 50 50 51 51 sw $zero, 16($a0) 52 52 sw $zero, 20($a0) 53 53 sw $zero, 24($a0) 54 54 sw $zero, 28($a0) 55 55 56 56 sw $zero, 32($a0) 57 57 sw $zero, 36($a0) 58 58 sw $zero, 40($a0) 59 59 sw $zero, 44($a0) 60 60 61 61 sw $zero, 48($a0) 62 62 sw $zero, 52($a0) 63 63 sw $zero, 56($a0) 64 64 sw $zero, 60($a0) 65 65 66 66 sw $zero, 64($a0) 67 67 sw $zero, 68($a0) 68 68 sw $zero, 72($a0) 69 69 sw $zero, 76($a0) 70 70 71 71 sw $zero, 80($a0) 72 72 sw $zero, 84($a0) 73 73 sw $zero, 88($a0) 74 74 sw $zero, 92($a0) 75 75 76 76 sw $zero, 96($a0) 77 77 sw $zero, 100($a0) 78 78 sw $zero, 104($a0) 79 79 sw $zero, 108($a0) 80 80 81 81 sw $zero, 112($a0) 82 82 sw $zero, 116($a0) 83 83 sw $zero, 120($a0) 84 84 sw $zero, 124($a0) 85 85 86 86 lui $a1, 1 87 87 88 88 #ifdef MACHINE_msim 89 89 90 90 /* Read dorder value */ 91 91 la $k0, MSIM_DORDER_ADDRESS 92 92 lw $k1, ($k0) 93 93 94 94 /* If we are not running on BSP 95 95 then end in an infinite loop */ 96 96 beq $k1, $zero, bsp 97 97 nop 98 98 99 99 /* Record CPU presence */ 100 100 sll $a2, $k1, 2 101 101 addu $a2, $a2, $a0 102 102 sw $a1, ($a2) 103 103 104 104 loop: 105 105 j loop 106 106 nop 107 107 108 108 #endif 109 109 110 110 bsp: 111 111 /* Record CPU presence */ 112 112 sw $a1, ($a0) 113 113 114 114 /* Setup initial stack */ 115 115 la $sp, INITIAL_STACK 116 116 117 117 j bootstrap 118 118 nop -
boot/arch/mips32/src/main.c
r3061bc1 ra35b458 49 49 { 50 50 version_print(); 51 51 52 52 printf("\nMemory statistics\n"); 53 53 printf(" %p|%p: CPU map\n", (void *) PA2KA(CPUMAP_OFFSET), … … 61 61 printf(" %p|%p: bootloader entry point\n", 62 62 (void *) PA2KA(LOADER_OFFSET), (void *) LOADER_OFFSET); 63 63 64 64 size_t i; 65 65 for (i = 0; i < COMPONENTS; i++) … … 70 70 components[i].name, components[i].inflated, 71 71 components[i].size); 72 72 73 73 void *dest[COMPONENTS]; 74 74 size_t top = 0; … … 77 77 for (i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) { 78 78 top = ALIGN_UP(top, PAGE_SIZE); 79 79 80 80 if (i > 0) { 81 81 bootinfo->tasks[bootinfo->cnt].addr = TOP2ADDR(top); 82 82 bootinfo->tasks[bootinfo->cnt].size = components[i].inflated; 83 83 84 84 str_cpy(bootinfo->tasks[bootinfo->cnt].name, 85 85 BOOTINFO_TASK_NAME_BUFLEN, components[i].name); 86 86 87 87 bootinfo->cnt++; 88 88 } 89 89 90 90 dest[i] = TOP2ADDR(top); 91 91 top += components[i].inflated; 92 92 cnt++; 93 93 } 94 94 95 95 printf("\nInflating components ... "); 96 96 97 97 for (i = cnt; i > 0; i--) { 98 98 #ifdef MACHINE_msim … … 104 104 } 105 105 #endif 106 106 107 107 printf("%s ", components[i - 1].name); 108 108 109 109 int err = inflate(components[i - 1].addr, components[i - 1].size, 110 110 dest[i - 1], components[i - 1].inflated); 111 111 112 112 if (err != EOK) { 113 113 printf("\n%s: Inflating error %d, halting.\n", … … 116 116 } 117 117 } 118 118 119 119 printf(".\n"); 120 120 121 121 printf("Copying CPU map ... \n"); 122 122 123 123 bootinfo->cpumap = 0; 124 124 for (i = 0; i < CPUMAP_MAX_RECORDS; i++) { … … 126 126 bootinfo->cpumap |= (1 << i); 127 127 } 128 128 129 129 printf("Booting the kernel ... \n"); 130 130 jump_to_kernel((void *) PA2KA(BOOT_OFFSET), bootinfo);
Note:
See TracChangeset
for help on using the changeset viewer.