Changeset 00aece0 in mainline for kernel/arch/ppc32/src
- Timestamp:
- 2012-02-18T16:47:38Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4449c6c
- Parents:
- bd5f3b7 (diff), f943dd3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/arch/ppc32/src
- Files:
-
- 1 added
- 4 edited
-
drivers/pic.c (modified) (2 diffs)
-
mm/frame.c (modified) (4 diffs)
-
mm/km.c (added)
-
mm/page.c (modified) (1 diff)
-
ppc32.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/drivers/pic.c
rbd5f3b7 r00aece0 34 34 35 35 #include <arch/drivers/pic.h> 36 #include <mm/ page.h>36 #include <mm/km.h> 37 37 #include <byteorder.h> 38 38 #include <bitops.h> … … 42 42 void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg) 43 43 { 44 pic = (uint32_t *) hw_map(base, size);44 pic = (uint32_t *) km_map(base, size, PAGE_WRITE | PAGE_NOT_CACHEABLE); 45 45 *cir = pic_ack_interrupt; 46 46 *cir_arg = NULL; -
kernel/arch/ppc32/src/mm/frame.c
rbd5f3b7 r00aece0 40 40 #include <print.h> 41 41 42 uintptr_t last_frame = 0;43 42 memmap_t memmap; 44 43 … … 54 53 } 55 54 56 void frame_arch_init(void)55 static void frame_common_arch_init(bool low) 57 56 { 58 57 pfn_t minconf = 2; … … 61 60 for (i = 0; i < memmap.cnt; i++) { 62 61 /* To be safe, make the available zone possibly smaller */ 63 uintptr_t new_start= ALIGN_UP((uintptr_t) memmap.zones[i].start,62 uintptr_t base = ALIGN_UP((uintptr_t) memmap.zones[i].start, 64 63 FRAME_SIZE); 65 size_t new_size = ALIGN_DOWN(memmap.zones[i].size -66 ( new_start- ((uintptr_t) memmap.zones[i].start)), FRAME_SIZE);64 size_t size = ALIGN_DOWN(memmap.zones[i].size - 65 (base - ((uintptr_t) memmap.zones[i].start)), FRAME_SIZE); 67 66 68 pfn_t pfn = ADDR2PFN(new_start); 69 size_t count = SIZE2FRAMES(new_size); 70 67 if (!frame_adjust_zone_bounds(low, &base, &size)) 68 return; 69 70 pfn_t pfn = ADDR2PFN(base); 71 size_t count = SIZE2FRAMES(size); 71 72 pfn_t conf; 72 if ((minconf < pfn) || (minconf >= pfn + count)) 73 conf = pfn; 74 else 75 conf = minconf; 76 77 zone_create(pfn, count, conf, 0); 78 79 if (last_frame < ALIGN_UP(new_start + new_size, FRAME_SIZE)) 80 last_frame = ALIGN_UP(new_start + new_size, FRAME_SIZE); 73 74 if (low) { 75 if ((minconf < pfn) || (minconf >= pfn + count)) 76 conf = pfn; 77 else 78 conf = minconf; 79 zone_create(pfn, count, conf, 80 ZONE_AVAILABLE | ZONE_LOWMEM); 81 } else { 82 conf = zone_external_conf_alloc(count); 83 if (conf != 0) 84 zone_create(pfn, count, conf, 85 ZONE_AVAILABLE | ZONE_HIGHMEM); 86 } 81 87 } 88 89 } 90 91 void frame_low_arch_init(void) 92 { 93 frame_common_arch_init(true); 82 94 83 95 /* First is exception vector, second is 'implementation specific', … … 92 104 } 93 105 106 void frame_high_arch_init(void) 107 { 108 frame_common_arch_init(false); 109 } 110 94 111 /** @} 95 112 */ -
kernel/arch/ppc32/src/mm/page.c
rbd5f3b7 r00aece0 46 46 } 47 47 48 uintptr_t hw_map(uintptr_t physaddr, size_t size)49 {50 if (last_frame + ALIGN_UP(size, PAGE_SIZE) >51 KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH))52 panic("Unable to map physical memory %p (%zu bytes).",53 (void *) physaddr, size);54 55 uintptr_t virtaddr = PA2KA(last_frame);56 pfn_t i;57 page_table_lock(AS_KERNEL, true);58 for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++)59 page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i),60 physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE);61 page_table_unlock(AS_KERNEL, true);62 63 last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);64 65 return virtaddr;66 }67 68 48 /** @} 69 49 */ -
kernel/arch/ppc32/src/ppc32.c
rbd5f3b7 r00aece0 46 46 #include <userspace.h> 47 47 #include <mm/page.h> 48 #include <mm/km.h> 48 49 #include <abi/proc/uarg.h> 49 50 #include <console/console.h> … … 71 72 size_t i; 72 73 for (i = 0; i < init.cnt; i++) { 73 init.tasks[i]. addr = (uintptr_t) bootinfo->taskmap.tasks[i].addr;74 init.tasks[i].paddr = KA2PA(bootinfo->taskmap.tasks[i].addr); 74 75 init.tasks[i].size = bootinfo->taskmap.tasks[i].size; 75 76 str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, … … 208 209 size_t size = 2 * PAGE_SIZE; 209 210 210 cuda_t *cuda = (cuda_t *) 211 (hw_map(aligned_addr, offset + size) + offset);211 cuda_t *cuda = (cuda_t *) (km_map(aligned_addr, offset + size, 212 PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset); 212 213 213 214 /* Initialize I/O controller */ … … 231 232 sysinfo_set_item_val("cuda.inr", NULL, IRQ_CUDA); 232 233 sysinfo_set_item_val("cuda.address.physical", NULL, pa); 233 sysinfo_set_item_val("cuda.address.kernel", NULL,234 (uintptr_t) cuda);235 234 #endif 236 235 }
Note:
See TracChangeset
for help on using the changeset viewer.
