Changeset 5ac2e61 in mainline


Ignore:
Timestamp:
2006-02-22T23:45:51Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ab46edb
Parents:
7d53ef4
Message:

Uaaaaaaa ;-) Itanium Paging !!!!!! ;-)

Files:
9 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/_link.ld.in

    r7d53ef4 r5ac2e61  
    1212
    1313SECTIONS {
    14         .image 0x0000000000100000: AT (0x0000000000100000) {
     14        .image 0xe000000000100000: AT (0x0000000000100000) {
    1515                ktext_start = .;
    1616                *(K_TEXT_START);
     
    3838        _hardcoded_ktext_size = ktext_end - ktext_start;
    3939        _hardcoded_kdata_size = kdata_end - kdata_start;
    40         _hardcoded_load_address = 0x0000000000100000;
     40        _hardcoded_load_address = 0xe000000000100000;
    4141
    4242}
  • arch/ia64/include/faddr.h

    r7d53ef4 r5ac2e61  
    4646       
    4747        __asm__(
     48                "nop 0;;"
     49                "nop 0;;"
     50                "nop 0;;"
     51                "nop 0;;"
     52                "nop 0;;"
     53                "nop 0;;"
     54                "nop 0;;"
     55                "nop 0;;"
    4856                "ld8 %0 = [%1]\n\t"
     57                "nop 0;;"
     58                "nop 0;;"
     59                "nop 0;;"
     60                "nop 0;;"
     61                "nop 0;;"
     62                "nop 0;;"
     63                "nop 0;;"
     64                "nop 0;;"
     65
    4966                : "=r" (faddr)
    5067                : "r" (fptr)
    5168        );
    5269       
     70
     71        /*faddr = *((__address *)(fptr));;*/
    5372        return faddr;
    5473}
  • arch/ia64/include/mm/asid.h

    r7d53ef4 r5ac2e61  
    3030#define __ia64_ASID_H__
    3131
     32#ifndef __ASM__
     33
    3234#include <arch/types.h>
    3335
     
    3941 * but those extra bits are not used by the kernel.
    4042 */
     43#endif
     44 
    4145#define RIDS_PER_ASID           7
    4246#define RID_MAX                 262143          /* 2^18 - 1 */
     
    4549#define RID2ASID(rid)           ((rid)/RIDS_PER_ASID)
    4650
     51#ifndef __ASM__
     52
     53
    4754typedef __u32 rid_t;
     55
     56#endif
    4857
    4958#define ASID_MAX_ARCH           (RID_MAX/RIDS_PER_ASID)
  • arch/ia64/include/mm/page.h

    r7d53ef4 r5ac2e61  
    3131#define __ia64_PAGE_H__
    3232
     33#ifndef __ASM__
     34
     35
    3336#include <arch/mm/frame.h>
     37#include <arch/barrier.h>
    3438#include <genarch/mm/page_ht.h>
    3539#include <arch/mm/asid.h>
     
    3842#include <debug.h>
    3943
     44#endif
     45
    4046#define PAGE_SIZE       FRAME_SIZE
    4147#define PAGE_WIDTH      FRAME_WIDTH
    42 
    43 #define KA2PA(x)        ((__address) (x))
    44 #define PA2KA(x)        ((__address) (x))
     48#define KERNEL_PAGE_WIDTH       26
     49
     50
    4551
    4652#define SET_PTL0_ADDRESS_ARCH(x)        /**< To be removed as situation permits. */
     
    5056#define VRN_SHIFT                       61
    5157#define VRN_MASK                        (7LL << VRN_SHIFT)
    52 #define VRN_KERNEL                      0
     58
     59#ifdef __ASM__
     60#define VRN_KERNEL                      7
     61#else
     62#define VRN_KERNEL                      7LL
     63#endif
     64
    5365#define REGION_REGISTERS                8
     66
     67#define KA2PA(x)        ((__address) (x-(VRN_KERNEL<<VRN_SHIFT)))
     68#define PA2KA(x)        ((__address) (x+(VRN_KERNEL<<VRN_SHIFT)))
     69
    5470
    5571#define VHPT_WIDTH                      20              /* 1M */
     
    7793#define VA_REGION(va) (va>>VA_REGION_INDEX)
    7894
    79 
     95#ifndef __ASM__
    8096
    8197struct vhpt_tag_info {
     
    264280extern void vhpt_set_record(vhpt_entry_t *v, __address page, asid_t asid, __address frame, int flags);
    265281
    266 #endif
     282
     283static inline void pokus(void)
     284{
     285        region_register rr;
     286        rr.word=rr_read(0);
     287        srlz_d();
     288        rr_write(0,rr.word);
     289        srlz_d();
     290
     291}
     292
     293#endif
     294
     295#endif
     296
     297
  • arch/ia64/include/register.h

    r7d53ef4 r5ac2e61  
    3838#define PSR_I_MASK      0x4000
    3939#define PSR_PK_MASK     0x8000
     40
     41#define PSR_DT_MASK     (1<<17)
     42#define PSR_RT_MASK     (1<<27)
     43#define PSR_IT_MASK     0x0000001000000000
     44
     45
    4046
    4147/** Application registers. */
  • arch/ia64/src/mm/page.c

    r7d53ef4 r5ac2e61  
    5656void set_environment(void)
    5757{
     58
     59//#ifdef NEVERDEFINED   
    5860        region_register rr;
    5961        pta_register pta;       
    6062        int i;
    61        
     63
    6264        /*
    6365         * First set up kernel region register.
     
    98100        srlz_i();
    99101        srlz_d();
     102       
     103//#endif
     104
     105        return ;       
     106       
    100107}
    101108
  • arch/ia64/src/start.S

    r7d53ef4 r5ac2e61  
    2727#
    2828
     29
    2930#include <arch/register.h>
     31#include <arch/mm/page.h>
     32#include <arch/mm/asid.h>
     33#include <mm/asid.h>
     34
     35
     36#define RR_MASK (0xFFFFFFFF00000002)
     37#define RID_SHIFT 8
     38#define PS_SHIFT 2
     39
     40
     41#define KERNEL_TRANSLATION_I 0x0010000000000661
     42#define KERNEL_TRANSLATION_D 0x0010000000000661
     43
    3044
    3145.section K_TEXT_START
     
    3751        .auto
    3852
     53        #Fill TR.i and TR.d and enable paging
     54
     55        mov r9=rr[r0]
     56        movl r10=(RR_MASK)
     57        and r9=r10,r9
     58        movl r10=((ASID2RID(ASID_KERNEL,VRN_KERNEL)<<RID_SHIFT)|(KERNEL_PAGE_WIDTH<<PS_SHIFT))
     59        or  r9=r10,r9
     60        mov rr[r0]=r9
     61
     62       
     63
     64        movl r8=(VRN_KERNEL<<VRN_SHIFT)
     65        mov r9=rr[r8]
     66        movl r10=(RR_MASK)
     67        and r9=r10,r9
     68        movl r10=((ASID2RID(ASID_KERNEL,VRN_KERNEL)<<RID_SHIFT)|(KERNEL_PAGE_WIDTH<<PS_SHIFT))
     69        or  r9=r10,r9
     70        mov rr[r8]=r9
     71
     72
     73        movl r8=(VRN_KERNEL<<VRN_SHIFT)
     74        mov cr.ifa=r8
     75        movl r10=(KERNEL_PAGE_WIDTH<<PS_SHIFT)
     76        mov cr.itir=r10
     77        movl r10=(KERNEL_TRANSLATION_I)
     78        itr.i itr[r0]=r10
     79
     80#       mov cr.ifa=r0
     81#       movl r10=(KERNEL_PAGE_WIDTH<<PS_SHIFT)
     82#       mov cr.itir=r10
     83        movl r10=(KERNEL_TRANSLATION_D)
     84        itr.d dtr[r0]=r10
     85
     86
     87
     88
     89
     90
     91
    3992        # initialize PSR
    4093        mov psr.l = r0
    4194        srlz.i
    4295        srlz.d
    43         ssm PSR_IC_MASK
     96        movl r10=(PSR_DT_MASK|PSR_RT_MASK|PSR_IT_MASK|PSR_IC_MASK)  /*Enable paging*/
     97        mov r9=psr
     98        or r10=r10,r9
     99        mov cr.ipsr=r10
     100        mov cr.ifs=r0
     101#       movl r8=(paging_start+VRN_KERNEL<<VRN_SHIFT)
     102        movl r8=paging_start
     103        mov cr.iip=r8
    44104        srlz.d
     105        srlz.i
     106.explicit
     107        {rfi;;}
     108        {nop 0;;}
     109        {nop 0;;}
     110        {nop 0;;}
     111        {nop 0;;}
     112        {nop 0;;}
     113        {nop 0;;}
     114        {nop 0;;}
     115        {nop 0;;}
     116        {nop 0;;}
     117        {nop 0;;}
     118        {nop 0;;}
     119        {nop 0;;}
     120        {nop 0;;}
     121        {nop 0;;}
     122        {nop 0;;}
     123        {nop 0;;}
     124
     125.global paging_start
     126paging_start:
     127
     128.auto
    45129       
    46130        # switch to register bank 1
     
    49133        # initialize register stack
    50134        mov ar.rsc = r0
    51         mov ar.bspstore = r0
     135        movl r8=(VRN_KERNEL<<VRN_SHIFT)
     136        mov ar.bspstore = r8
     137#       mov ar.bspstore = r0
    52138        loadrs
    53139
    54140        .explicit
    55141        # initialize memory stack to some sane value
    56         movl r12 = stack0       ;;
     142#       movl r12 = stack0       ;;
     143        movl r12 = stack0       + (VRN_KERNEL<<VRN_SHIFT);;
     144       
    57145        add r12 = - 16, r12     /* allocate a scratch area on the stack */
    58146
    59147        # initialize gp (Global Pointer) register
    60         movl r1 = _hardcoded_load_address
     148        movl r1 = _hardcoded_load_address       ;;
     149
     150#       movl r1 = _hardcoded_load_address + (VRN_KERNEL<<VRN_SHIFT) ;;
    61151       
    62         ;;
    63152
    64153        #
     
    72161        addl r19 = @gprel(hardcoded_load_address), gp
    73162        ;;
    74         st8 [r17] = r14
    75         st8 [r18] = r15
     163        st4 [r17] = r14
     164        st4 [r18] = r15
    76165        st8 [r19] = r16
     166
     167
     168.auto
    77169       
    78         br.call.sptk.many b0=main_bsp
     170        movl r18=main_bsp
     171        mov b1=r18
     172        br.call.sptk.many b0=b1
     173
     174#       br.call.sptk.many b0=main_bsp
    79175
    801760:
  • contrib/arch/ia64/vmaxlma.c

    r7d53ef4 r5ac2e61  
    3737}
    3838
    39 #define ELF_VMA (0x88/sizeof(unsigned long long))
    40 #define ELF_LMA (0x90/sizeof(unsigned long long))
     39#define ELF_VMA (0x50/sizeof(unsigned long long))
     40#define ELF_LMA (0x58/sizeof(unsigned long long))
     41#define ELF_ENTRY (0x18/sizeof(unsigned long long))
    4142
    4243#define LENGTH  0x98
     
    4546{
    4647        int fd;
    47         unsigned long long vma, lma;
     48        unsigned long long vma, lma,entry;
    4849        unsigned long long *elf;
    4950
     
    5960                error("map failed");
    6061               
    61         vma = elf[ELF_VMA];
     62        /*vma = elf[ELF_VMA];*/
    6263        lma = elf[ELF_LMA];
    6364        elf[ELF_VMA] = lma;
    64         elf[ELF_LMA] = vma;
     65        entry = elf[ELF_ENTRY];
     66        entry &= ((~0LL)>>3);
     67        elf[ELF_ENTRY] = entry;
     68        elf[ELF_ENTRY] = 0x100000;
     69        /*elf[ELF_LMA] = vma;*/
    6570       
    6671        if (munmap(elf, LENGTH) == -1)
  • generic/include/mm/asid.h

    r7d53ef4 r5ac2e61  
    3535#define __ASID_H__
    3636
     37#ifndef __ASM__
     38
    3739#include <arch/mm/asid.h>
    3840#include <typedefs.h>
     41
     42#endif
    3943
    4044#define ASID_KERNEL     0
     
    4347#define ASID_MAX        ASID_MAX_ARCH
    4448
     49#ifndef __ASM__
     50
     51
    4552#define ASIDS_ALLOCABLE ((ASID_MAX+1)-ASID_START)
    4653
    4754extern spinlock_t asidlock;
     55extern link_t as_with_asid_head;
    4856
    49 #ifndef asid_get
    5057extern asid_t asid_get(void);
    51 #endif /* !def asid_get */
    5258extern void asid_put(asid_t asid);
    5359
     
    6571
    6672#endif
     73
     74#endif
     75
Note: See TracChangeset for help on using the changeset viewer.