Changeset 1433ecda in mainline for kernel/arch/sparc64/src
- Timestamp:
- 2018-04-04T15:42:37Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2c4e1cc
- Parents:
- 47b2d7e3
- Location:
- kernel/arch/sparc64/src
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/cpu/sun4u/cpu.c
r47b2d7e3 r1433ecda 99 99 int f; 100 100 f = find_cpu_frequency( 101 101 ofw_tree_find_child(node, "cpu@0")); 102 102 if (f != -1) 103 103 clock_frequency = (uint32_t) f; 104 104 f = find_cpu_frequency( 105 105 ofw_tree_find_child(node, "cpu@1")); 106 106 if (f != -1) 107 107 clock_frequency = (uint32_t) f; … … 140 140 break; 141 141 case MANUF_SUN: 142 142 manuf = "Sun"; 143 143 break; 144 144 default: … … 184 184 185 185 printf("cpu%d: manuf=%s, impl=%s, mask=%d (%d MHz)\n", m->id, manuf, 186 186 impl, m->arch.ver.mask, m->arch.clock_frequency / 1000000); 187 187 } 188 188 -
kernel/arch/sparc64/src/cpu/sun4v/cpu.c
r47b2d7e3 r1433ecda 66 66 uint64_t clock_frequency = 0; 67 67 md_get_integer_property(node, "clock-frequency", 68 68 &clock_frequency); 69 69 CPU->arch.clock_frequency = clock_frequency; 70 70 break; -
kernel/arch/sparc64/src/debug/stacktrace.c
r47b2d7e3 r1433ecda 98 98 } 99 99 100 bool uspace_return_address_get(stack_trace_context_t *ctx 100 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra) 101 101 { 102 102 return false; -
kernel/arch/sparc64/src/drivers/niagara.c
r47b2d7e3 r1433ecda 82 82 * buffer definition follows. 83 83 */ 84 static volatile niagara_output_buffer_t __attribute__ 84 static volatile niagara_output_buffer_t __attribute__((aligned(PAGE_SIZE))) 85 85 output_buffer; 86 86 … … 90 90 * Analogous to the output_buffer, see the previous definition. 91 91 */ 92 static volatile niagara_input_buffer_t __attribute__ 92 static volatile niagara_input_buffer_t __attribute__((aligned(PAGE_SIZE))) 93 93 input_buffer; 94 94 … … 96 96 97 97 /** Write a single character to the standard output. */ 98 static inline void do_putchar(const char c) { 98 static inline void do_putchar(const char c) 99 { 99 100 /* Repeat until the buffer is non-full */ 100 while (__hypercall_fast1(CONS_PUTCHAR, c) == HV_EWOULDBLOCK); 101 while (__hypercall_fast1(CONS_PUTCHAR, c) == HV_EWOULDBLOCK) 102 ; 101 103 } 102 104 … … 160 162 * 161 163 */ 162 static void kniagarapoll(void *arg) { 164 static void kniagarapoll(void *arg) 165 { 163 166 while (true) { 164 167 niagara_poll(); … … 213 216 PAGE_SIZE); 214 217 sysinfo_set_item_val("niagara.inbuf.datasize", NULL, 215 INPUT_BUFFER_SIZE);218 INPUT_BUFFER_SIZE); 216 219 217 220 outbuf_parea.pbase = (uintptr_t) (KA2PA(&output_buffer)); -
kernel/arch/sparc64/src/drivers/tick.c
r47b2d7e3 r1433ecda 54 54 compare.int_dis = false; 55 55 compare.tick_cmpr = tick_counter_read() + 56 56 CPU->arch.clock_frequency / HZ; 57 57 CPU->arch.next_tick_cmpr = compare.tick_cmpr; 58 58 tick_compare_write(compare.value); -
kernel/arch/sparc64/src/mm/sun4v/tlb.c
r47b2d7e3 r1433ecda 103 103 "unaligned access", 104 104 "invalid page size" 105 105 }; 106 106 107 107 /** Array of MMU fault status areas. */ … … 146 146 if (locked) { 147 147 __hypercall_fast4( 148 148 MMU_MAP_PERM_ADDR, page, 0, data.value, MMU_FLAG_DTLB); 149 149 } else { 150 150 __hypercall_hyperfast( 151 152 151 page, ASID_KERNEL, data.value, MMU_FLAG_DTLB, 0, 152 MMU_MAP_ADDR); 153 153 } 154 154 } … … 180 180 181 181 __hypercall_hyperfast( 182 182 t->page, t->as->asid, data.value, MMU_FLAG_DTLB, 0, MMU_MAP_ADDR); 183 183 } 184 184 … … 205 205 206 206 __hypercall_hyperfast( 207 207 t->page, t->as->asid, data.value, MMU_FLAG_ITLB, 0, MMU_MAP_ADDR); 208 208 } 209 209 … … 349 349 350 350 printf("condition which caused the fault: %s\n", 351 351 fault_types[mmu_fsas[myid].dft]); 352 352 } 353 353 … … 356 356 { 357 357 uint64_t errno = __hypercall_fast3(MMU_DEMAP_ALL, 0, 0, 358 358 MMU_FLAG_DTLB | MMU_FLAG_ITLB); 359 359 if (errno != HV_EOK) 360 360 panic("Error code = %" PRIu64 ".\n", errno); … … 372 372 373 373 __hypercall_fast4(MMU_DEMAP_CTX, 0, 0, asid, 374 374 MMU_FLAG_ITLB | MMU_FLAG_DTLB); 375 375 376 376 nucleus_leave(); -
kernel/arch/sparc64/src/proc/thread.c
r47b2d7e3 r1433ecda 64 64 void thread_create_arch(thread_t *t) 65 65 { 66 if ((t->uspace) && (!t->arch.uspace_window_buffer)) 67 { 66 if ((t->uspace) && (!t->arch.uspace_window_buffer)) { 68 67 /* 69 68 * The thread needs userspace window buffer and the object -
kernel/arch/sparc64/src/smp/sun4u/ipi.c
r47b2d7e3 r1433ecda 59 59 * @param func value the first data item of the vector will be set to 60 60 */ 61 static inline void set_intr_w_data(void (* 61 static inline void set_intr_w_data(void (*func)(void)) 62 62 { 63 63 #if defined (US) … … 87 87 * @param func Function to be invoked. 88 88 */ 89 static void cross_call(int mid, void (* 89 static void cross_call(int mid, void (*func)(void)) 90 90 { 91 91 uint64_t status; … … 148 148 unsigned int i; 149 149 150 void (* 150 void (*func)(void); 151 151 152 152 switch (ipi) { -
kernel/arch/sparc64/src/smp/sun4u/smp.c
r47b2d7e3 r1433ecda 121 121 node = ofw_tree_find_child_by_device_type(cpus_parent(), "cpu"); 122 122 for (i = 0; node; 123 123 node = ofw_tree_find_peer_by_device_type(node, "cpu"), i++) 124 124 wakeup_cpu(node); 125 125 } else if (is_us_iv()) { -
kernel/arch/sparc64/src/smp/sun4v/ipi.c
r47b2d7e3 r1433ecda 45 45 46 46 static uint64_t data[MAX_NUM_STRANDS][IPI_MESSAGE_SIZE] 47 __attribute__ ((aligned(64)));47 __attribute__((aligned(64))); 48 48 49 49 static uint16_t ipi_cpu_list[MAX_NUM_STRANDS][MAX_NUM_STRANDS]; … … 60 60 */ 61 61 uint64_t ipi_brodcast_to(void (*func)(void), uint16_t cpu_list[MAX_NUM_STRANDS], 62 uint64_t list_size) { 62 uint64_t list_size) 63 { 63 64 64 65 data[CPU->arch.id][0] = (uint64_t) func; … … 70 71 71 72 return __hypercall_fast3(CPU_MONDO_SEND, list_size, 72 73 KA2PA(ipi_cpu_list[CPU->arch.id]), KA2PA(data[CPU->arch.id])); 73 74 } 74 75 … … 81 82 * @return error code returned by the CPU_MONDO_SEND hypercall 82 83 */ 83 uint64_t ipi_unicast_to(void (*func)(void), uint16_t cpu_id) { 84 uint64_t ipi_unicast_to(void (*func)(void), uint16_t cpu_id) 85 { 84 86 ipi_cpu_list[CPU->arch.id][0] = cpu_id; 85 87 return ipi_brodcast_to(func, ipi_cpu_list[CPU->arch.id], 1); … … 95 97 void ipi_broadcast_arch(int ipi) 96 98 { 97 void (* 99 void (*func)(void); 98 100 99 101 switch (ipi) { -
kernel/arch/sparc64/src/smp/sun4v/smp.c
r47b2d7e3 r1433ecda 88 88 * stored to the proposed_nrdy variable of the cpu_arch_t struture. 89 89 */ 90 bool calculate_optimal_nrdy(exec_unit_t *exec_unit) { 90 bool calculate_optimal_nrdy(exec_unit_t *exec_unit) 91 { 91 92 92 93 /* calculate the number of threads the core will steal */ … … 103 104 for (k = 0; k < exec_unit->strand_count; k++) { 104 105 exec_units->cpus[k]->arch.proposed_nrdy = 105 106 atomic_get(&(exec_unit->cpus[k]->nrdy)); 106 107 } 107 108 … … 112 113 unsigned int least_busy = 0; 113 114 unsigned int least_busy_nrdy = 114 115 exec_unit->cpus[0]->arch.proposed_nrdy; 115 116 116 117 /* for each stolen thread, give it to the least busy CPU */ 117 118 for (k = 0; k < exec_unit->strand_count; k++) { 118 if (exec_unit->cpus[k]->arch.proposed_nrdy 119 < least_busy_nrdy) { 119 if (exec_unit->cpus[k]->arch.proposed_nrdy < least_busy_nrdy) { 120 120 least_busy = k; 121 121 least_busy_nrdy = 122 122 exec_unit->cpus[k]->arch.proposed_nrdy; 123 123 } 124 124 } … … 247 247 exec_units[i].strand_count++; 248 248 max_core_strands = 249 250 249 exec_units[i].strand_count > max_core_strands ? 250 exec_units[i].strand_count : max_core_strands; 251 251 252 252 /* detecting execution unit failed */ -
kernel/arch/sparc64/src/sun4u/sparc64.c
r47b2d7e3 r1433ecda 169 169 170 170 /* Not reached */ 171 while (1); 171 while (1) 172 ; 172 173 } 173 174 … … 175 176 { 176 177 // TODO 177 while (1); 178 while (1) 179 ; 178 180 } 179 181 -
kernel/arch/sparc64/src/sun4v/sparc64.c
r47b2d7e3 r1433ecda 167 167 168 168 /* Not reached */ 169 while (1); 169 while (1) 170 ; 170 171 } 171 172 … … 173 174 { 174 175 // TODO 175 while (1); 176 while (1) 177 ; 176 178 } 177 179 -
kernel/arch/sparc64/src/trap/sun4v/interrupt.c
r47b2d7e3 r1433ecda 74 74 */ 75 75 uint64_t cpu_mondo_queues[MAX_NUM_STRANDS][CPU_MONDO_QUEUE_SIZE] 76 __attribute__((aligned( 77 CPU_MONDO_QUEUE_SIZE * sizeof(uint64_t)))); 76 __attribute__((aligned(CPU_MONDO_QUEUE_SIZE * sizeof(uint64_t)))); 78 77 79 78 /** … … 83 82 { 84 83 if (__hypercall_fast3( 85 86 87 88 89 90 84 CPU_QCONF, 85 CPU_MONDO_QUEUE_ID, 86 KA2PA(cpu_mondo_queues[CPU->id]), 87 CPU_MONDO_NENTRIES) != HV_EOK) 88 panic("Initializing mondo queue failed on CPU %" PRIu64 ".\n", 89 CPU->arch.id); 91 90 } 92 91
Note:
See TracChangeset
for help on using the changeset viewer.