Changeset 00aece0 in mainline for kernel/arch/ppc32/src


Ignore:
Timestamp:
2012-02-18T16:47:38Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
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.
Message:

Merge mainline changes.

Location:
kernel/arch/ppc32/src
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ppc32/src/drivers/pic.c

    rbd5f3b7 r00aece0  
    3434
    3535#include <arch/drivers/pic.h>
    36 #include <mm/page.h>
     36#include <mm/km.h>
    3737#include <byteorder.h>
    3838#include <bitops.h>
     
    4242void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg)
    4343{
    44         pic = (uint32_t *) hw_map(base, size);
     44        pic = (uint32_t *) km_map(base, size, PAGE_WRITE | PAGE_NOT_CACHEABLE);
    4545        *cir = pic_ack_interrupt;
    4646        *cir_arg = NULL;
  • kernel/arch/ppc32/src/mm/frame.c

    rbd5f3b7 r00aece0  
    4040#include <print.h>
    4141
    42 uintptr_t last_frame = 0;
    4342memmap_t memmap;
    4443
     
    5453}
    5554
    56 void frame_arch_init(void)
     55static void frame_common_arch_init(bool low)
    5756{
    5857        pfn_t minconf = 2;
     
    6160        for (i = 0; i < memmap.cnt; i++) {
    6261                /* 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,
    6463                    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);
    6766               
    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);
    7172                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                }
    8187        }
     88       
     89}
     90
     91void frame_low_arch_init(void)
     92{
     93        frame_common_arch_init(true);
    8294       
    8395        /* First is exception vector, second is 'implementation specific',
     
    92104}
    93105
     106void frame_high_arch_init(void)
     107{
     108        frame_common_arch_init(false);
     109}
     110
    94111/** @}
    95112 */
  • kernel/arch/ppc32/src/mm/page.c

    rbd5f3b7 r00aece0  
    4646}
    4747
    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 
    6848/** @}
    6949 */
  • kernel/arch/ppc32/src/ppc32.c

    rbd5f3b7 r00aece0  
    4646#include <userspace.h>
    4747#include <mm/page.h>
     48#include <mm/km.h>
    4849#include <abi/proc/uarg.h>
    4950#include <console/console.h>
     
    7172        size_t i;
    7273        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);
    7475                init.tasks[i].size = bootinfo->taskmap.tasks[i].size;
    7576                str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN,
     
    208209                size_t size = 2 * PAGE_SIZE;
    209210               
    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);
    212213               
    213214                /* Initialize I/O controller */
     
    231232                sysinfo_set_item_val("cuda.inr", NULL, IRQ_CUDA);
    232233                sysinfo_set_item_val("cuda.address.physical", NULL, pa);
    233                 sysinfo_set_item_val("cuda.address.kernel", NULL,
    234                     (uintptr_t) cuda);
    235234#endif
    236235        }
Note: See TracChangeset for help on using the changeset viewer.