Changeset 613bc54 in mainline


Ignore:
Timestamp:
2006-04-22T20:11:23Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c118940
Parents:
c7c0b89b
Message:

ppc32: stub for Page Hash Table support

Location:
arch
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/Makefile.inc

    rc7c0b89b r613bc54  
    3131
    3232BFD_NAME = elf32-powerpc
    33 BFD_ARCH = powerpc
     33BFD_ARCH = powerpc:common
    3434BFD = binary
    3535TARGET = ppc-linux-gnu
     
    7979        arch/$(ARCH)/src/mm/frame.c \
    8080        arch/$(ARCH)/src/mm/memory_init.c \
    81         arch/$(ARCH)/src/mm/page.c
     81        arch/$(ARCH)/src/mm/page.c  \
     82        arch/$(ARCH)/src/mm/tlb.c
  • arch/ppc32/include/mm/asid.h

    rc7c0b89b r613bc54  
    2727 */
    2828
    29 #ifndef __ppc32_ASID_H__
    30 #define __ppc32_ASID_H__
     29/*
     30 * ia32 has no hardware support for address space identifiers.
     31 * This file is provided to do nop-implementation of mm/asid.h
     32 * interface.
     33 */
     34
     35#ifndef __ia32_ASID_H__
     36#define __ia32_ASID_H__
    3137
    3238typedef int asid_t;
    3339
    34 #define ASID_MAX_ARCH   3
     40#define ASID_MAX_ARCH           3
    3541
    36 #define asid_get()      (ASID_START+1)
     42#define asid_get()              (ASID_START+1)
    3743
    3844#endif
  • arch/ppc32/include/mm/frame.h

    rc7c0b89b r613bc54  
    3131
    3232#define FRAME_WIDTH             12      /* 4K */
    33 #define FRAME_SIZE              (1<<FRAME_WIDTH)
     33#define FRAME_SIZE              (1 << FRAME_WIDTH)
    3434
    3535#ifdef KERNEL
  • arch/ppc32/include/mm/page.h

    rc7c0b89b r613bc54  
    4545#endif
    4646
    47 #define PTL0_ENTRIES_ARCH               0
    48 #define PTL1_ENTRIES_ARCH               0
    49 #define PTL2_ENTRIES_ARCH               0
    50 #define PTL3_ENTRIES_ARCH               0
     47/*
     48 * Implementation of generic 4-level page table interface,
     49 * the hardware Page Hash Table is used as cache.
     50 *
     51 * Page table layout:
     52 * - 32-bit virtual addressess
     53 * - Offset is 12 bits => pages are 4K long
     54 * - PTL0 has 1024 entries (10 bits)
     55 * - PTL1 is not used
     56 * - PTL2 is not used
     57 * - PLT3 has 1024 entries (10 bits)
     58 */
    5159
    52 #define PTL0_INDEX_ARCH(vaddr)          0
    53 #define PTL1_INDEX_ARCH(vaddr)          0
    54 #define PTL2_INDEX_ARCH(vaddr)          0
    55 #define PTL3_INDEX_ARCH(vaddr)          0
     60#define PTL0_ENTRIES_ARCH       1024
     61#define PTL1_ENTRIES_ARCH       0
     62#define PTL2_ENTRIES_ARCH       0
     63#define PTL3_ENTRIES_ARCH       1024
     64
     65#define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 22) & 0x3ff)
     66#define PTL1_INDEX_ARCH(vaddr)  0
     67#define PTL2_INDEX_ARCH(vaddr)  0
     68#define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x3ff)
    5669
    5770#define SET_PTL0_ADDRESS_ARCH(ptl0)
    5871
    59 #define GET_PTL1_ADDRESS_ARCH(ptl0, i)          ((pte_t *) 0)
    60 #define GET_PTL2_ADDRESS_ARCH(ptl1, i)          ((pte_t *) 0)
    61 #define GET_PTL3_ADDRESS_ARCH(ptl2, i)          ((pte_t *) 0)
    62 #define GET_FRAME_ADDRESS_ARCH(ptl3, i)         ((pte_t *) 0)
     72#define GET_PTL1_ADDRESS_ARCH(ptl0, i)          (((pte_t *) (ptl0))[(i)].pfn << 12)
     73#define GET_PTL2_ADDRESS_ARCH(ptl1, i)          (ptl1)
     74#define GET_PTL3_ADDRESS_ARCH(ptl2, i)          (ptl2)
     75#define GET_FRAME_ADDRESS_ARCH(ptl3, i)         (((pte_t *) (ptl3))[(i)].pfn << 12)
    6376
    64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
     77#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)       (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12)
    6578#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    6679#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     80#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)      (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12)
    6881
    69 #define GET_PTL1_FLAGS_ARCH(ptl0, i)            0
    70 #define GET_PTL2_FLAGS_ARCH(ptl1, i)            0
    71 #define GET_PTL3_FLAGS_ARCH(ptl2, i)            0
    72 #define GET_FRAME_FLAGS_ARCH(ptl3, i)           0
     82#define GET_PTL1_FLAGS_ARCH(ptl0, i)            get_pt_flags((pte_t *) (ptl0), (index_t) (i))
     83#define GET_PTL2_FLAGS_ARCH(ptl1, i)            PAGE_PRESENT
     84#define GET_PTL3_FLAGS_ARCH(ptl2, i)            PAGE_PRESENT
     85#define GET_FRAME_FLAGS_ARCH(ptl3, i)           get_pt_flags((pte_t *) (ptl3), (index_t) (i))
    7386
    74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x)
     87#define SET_PTL1_FLAGS_ARCH(ptl0, i, x)         set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x))
    7588#define SET_PTL2_FLAGS_ARCH(ptl1, i, x)
    7689#define SET_PTL3_FLAGS_ARCH(ptl2, i, x)
    77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x)
     90#define SET_FRAME_FLAGS_ARCH(ptl3, i, x)        set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x))
    7891
    79 #define PTE_VALID_ARCH(p)               1
    80 #define PTE_PRESENT_ARCH(p)             1
    81 #define PTE_GET_FRAME_ARCH(p)           0
     92#define PTE_VALID_ARCH(pte)                     (*((__u32 *) (pte)) != 0)
     93#define PTE_PRESENT_ARCH(pte)           ((pte)->p != 0)
     94#define PTE_GET_FRAME_ARCH(pte)         ((pte)->pfn << 12)
    8295
    8396#ifndef __ASM__
     
    8699#include <arch/mm/frame.h>
    87100#include <arch/types.h>
     101
     102static inline int get_pt_flags(pte_t *pt, index_t i)
     103{
     104        pte_t *p = &pt[i];
     105       
     106        return (
     107                (1 << PAGE_CACHEABLE_SHIFT) |
     108                ((!p->p) << PAGE_PRESENT_SHIFT) |
     109                (1 << PAGE_USER_SHIFT) |
     110                (1 << PAGE_READ_SHIFT) |
     111                (1 << PAGE_WRITE_SHIFT) |
     112                (1 << PAGE_EXEC_SHIFT)
     113        );
     114}
     115
     116static inline void set_pt_flags(pte_t *pt, index_t i, int flags)
     117{
     118        pte_t *p = &pt[i];
     119       
     120        p->p = !(flags & PAGE_NOT_PRESENT);
     121        p->valid = 1;
     122}
    88123
    89124extern void page_arch_init(void);
  • arch/ppc32/include/mm/tlb.h

    rc7c0b89b r613bc54  
    11/*
    2  * Copyright (C) 2005 Jakub Jermar
     2 * Copyright (C) 2006 Martin Decky
    33 * All rights reserved.
    44 *
     
    3030#define __ppc32_TLB_H__
    3131
    32 #define tlb_arch_init()
    33 #define tlb_print()
     32#include <arch/exception.h>
     33#include <typedefs.h>
     34
     35extern void pht_refill(istate_t *istate);
    3436
    3537#endif
  • arch/ppc32/include/types.h

    rc7c0b89b r613bc54  
    4949typedef __u32 __native;
    5050
    51 typedef __u32 pte_t;
     51/** Page Table Entry. */
     52typedef struct {
     53        unsigned p : 1;       /**< Present bit. */
     54        unsigned a : 1;       /**< Accessed bit. */
     55        unsigned valid : 1;   /**< Valid content even if not present. */
     56        unsigned pfn : 20;    /**< Physical frame number. */
     57} pte_t;
    5258
    5359#endif
  • arch/ppc32/src/exception.S

    rc7c0b89b r613bc54  
    3232.section K_UNMAPPED_TEXT_START, "ax"
    3333
    34 .org 0x100
    35 .global exc_system_reset
    36 exc_system_reset:
    37         b exc_system_reset
    38 
    39 .org 0x200
    40 .global exc_machine_check
    41 exc_machine_check:
    42         b exc_machine_check
    43 
    44 .org 0x300
    45 .global exc_data_storage
    46 exc_data_storage:
    47         b exc_data_storage
    48 
    49 .org 0x380
    50 .global exc_data_segment
    51 exc_data_segment:
    52         b exc_data_segment
    53 
    54 .org 0x400
    55 .global exc_instruction_storage
    56 exc_instruction_storage:
    57         b exc_instruction_storage
    58 
    59 .org 0x480
    60 .global exc_instruction_segment
    61 exc_instruction_segment:
    62         b exc_instruction_segment
    63 
    64 .org 0x500
    65 .global exc_external
    66 exc_external:
    67         b exc_external
    68 
    69 .org 0x600
    70 .global exc_alignment
    71 exc_alignment:
    72         b exc_alignment
    73 
    74 .org 0x700
    75 .global exc_program
    76 exc_program:
    77         b exc_program
    78 
    79 .org 0x800
    80 .global exc_fp_unavailable
    81 exc_fp_unavailable:
    82         b exc_fp_unavailable
    83 
    84 .org 0x900
    85 .global exc_decrementer
    86 exc_decrementer:
     34.macro CONTEXT_STORE
    8735        mtspr sprg1, sp
    8836       
     
    13987        mfxer r3
    14088        stw r3, 144(sp)
     89.endm
     90
     91.org 0x100
     92.global exc_system_reset
     93exc_system_reset:
     94        b exc_system_reset
     95
     96.org 0x200
     97.global exc_machine_check
     98exc_machine_check:
     99        b exc_machine_check
     100
     101.org 0x300
     102.global exc_data_storage
     103exc_data_storage:
     104        CONTEXT_STORE
     105
     106        lis r3, pht_refill@ha
     107        addi r3, r3, pht_refill@l
     108        mtspr srr0, r3
     109       
     110        mfmsr r3
     111        ori r3, r3, (msr_ir | msr_dr)@l
     112        mtspr srr1, r3
     113       
     114        lis r3, iret@ha
     115        addi r3, r3, iret@l
     116        mtlr r3
     117       
     118        addis sp, sp, 0x8000
     119        rfi
     120
     121.org 0x400
     122.global exc_instruction_storage
     123exc_instruction_storage:
     124        b exc_instruction_storage
     125
     126.org 0x480
     127.global exc_instruction_segment
     128exc_instruction_segment:
     129        b exc_instruction_segment
     130
     131.org 0x500
     132.global exc_external
     133exc_external:
     134        b exc_external
     135
     136.org 0x600
     137.global exc_alignment
     138exc_alignment:
     139        b exc_alignment
     140
     141.org 0x700
     142.global exc_program
     143exc_program:
     144        b exc_program
     145
     146.org 0x800
     147.global exc_fp_unavailable
     148exc_fp_unavailable:
     149        b exc_fp_unavailable
     150
     151.org 0x900
     152.global exc_decrementer
     153exc_decrementer:
     154        CONTEXT_STORE   
    141155
    142156        lis r3, exc_dispatch@ha
  • arch/ppc64/Makefile.inc

    rc7c0b89b r613bc54  
    3131
    3232BFD_NAME = elf64-powerpc
    33 BFD_ARCH = powerpc
     33BFD_ARCH = powerpc:common64
    3434BFD = binary
    35 TARGET = ppc-linux-gnu
    36 TOOLCHAIN_DIR = /usr/local/ppc/bin
     35TARGET = ppc64-linux-gnu
     36TOOLCHAIN_DIR = /usr/local/ppc64/bin
    3737
    3838## Make some default assumptions
Note: See TracChangeset for help on using the changeset viewer.