pagetable.hh revision 11800
16019Shines@cs.fsu.edu/*
210037SARM gem5 Developers * Copyright (c) 2010, 2012-2013 ARM Limited
37399SAli.Saidi@ARM.com * All rights reserved
47399SAli.Saidi@ARM.com *
57399SAli.Saidi@ARM.com * The license below extends only to copyright in the software and shall
67399SAli.Saidi@ARM.com * not be construed as granting a license to any other intellectual
77399SAli.Saidi@ARM.com * property including but not limited to intellectual property relating
87399SAli.Saidi@ARM.com * to a hardware implementation of the functionality of the software
97399SAli.Saidi@ARM.com * licensed hereunder.  You may use the software subject to the license
107399SAli.Saidi@ARM.com * terms below provided that you ensure that this notice is replicated
117399SAli.Saidi@ARM.com * unmodified and in its entirety in all distributions of the software,
127399SAli.Saidi@ARM.com * modified or unmodified, in source code or in binary form.
137399SAli.Saidi@ARM.com *
146019Shines@cs.fsu.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan
156019Shines@cs.fsu.edu * All rights reserved.
166019Shines@cs.fsu.edu *
176019Shines@cs.fsu.edu * Redistribution and use in source and binary forms, with or without
186019Shines@cs.fsu.edu * modification, are permitted provided that the following conditions are
196019Shines@cs.fsu.edu * met: redistributions of source code must retain the above copyright
206019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer;
216019Shines@cs.fsu.edu * redistributions in binary form must reproduce the above copyright
226019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer in the
236019Shines@cs.fsu.edu * documentation and/or other materials provided with the distribution;
246019Shines@cs.fsu.edu * neither the name of the copyright holders nor the names of its
256019Shines@cs.fsu.edu * contributors may be used to endorse or promote products derived from
266019Shines@cs.fsu.edu * this software without specific prior written permission.
276019Shines@cs.fsu.edu *
286019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
296019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
306019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
316019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
326019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
336019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
346019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
356019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
366019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
376019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
386019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
396019Shines@cs.fsu.edu *
407404SAli.Saidi@ARM.com * Authors: Ali Saidi
416019Shines@cs.fsu.edu */
426019Shines@cs.fsu.edu
436019Shines@cs.fsu.edu#ifndef __ARCH_ARM_PAGETABLE_H__
446019Shines@cs.fsu.edu#define __ARCH_ARM_PAGETABLE_H__
456019Shines@cs.fsu.edu
4610037SARM gem5 Developers#include <cstdint>
4710037SARM gem5 Developers
486019Shines@cs.fsu.edu#include "arch/arm/isa_traits.hh"
496019Shines@cs.fsu.edu#include "arch/arm/utility.hh"
506019Shines@cs.fsu.edu#include "arch/arm/vtophys.hh"
517733SAli.Saidi@ARM.com#include "sim/serialize.hh"
527733SAli.Saidi@ARM.com
536019Shines@cs.fsu.edunamespace ArmISA {
546019Shines@cs.fsu.edu
557399SAli.Saidi@ARM.comstruct VAddr
567399SAli.Saidi@ARM.com{
577399SAli.Saidi@ARM.com    VAddr(Addr a) { panic("not implemented yet."); }
587399SAli.Saidi@ARM.com};
597399SAli.Saidi@ARM.com
607399SAli.Saidi@ARM.com
617399SAli.Saidi@ARM.com// ITB/DTB page table entry
627399SAli.Saidi@ARM.comstruct PTE
637399SAli.Saidi@ARM.com{
6410905Sandreas.sandberg@arm.com    void serialize(CheckpointOut &cp) const
656019Shines@cs.fsu.edu    {
667399SAli.Saidi@ARM.com        panic("Need to implement PTE serialization\n");
677399SAli.Saidi@ARM.com    }
686019Shines@cs.fsu.edu
6910905Sandreas.sandberg@arm.com    void unserialize(CheckpointIn &cp)
707399SAli.Saidi@ARM.com    {
717399SAli.Saidi@ARM.com        panic("Need to implement PTE serialization\n");
727399SAli.Saidi@ARM.com    }
736019Shines@cs.fsu.edu
747399SAli.Saidi@ARM.com};
756019Shines@cs.fsu.edu
7610037SARM gem5 Developers// Lookup level
7710037SARM gem5 Developersenum LookupLevel {
7810037SARM gem5 Developers    L0 = 0,  // AArch64 only
7910037SARM gem5 Developers    L1,
8010037SARM gem5 Developers    L2,
8110037SARM gem5 Developers    L3,
8210037SARM gem5 Developers    MAX_LOOKUP_LEVELS
8310037SARM gem5 Developers};
8410037SARM gem5 Developers
857399SAli.Saidi@ARM.com// ITB/DTB table entry
8610905Sandreas.sandberg@arm.comstruct TlbEntry : public Serializable
877399SAli.Saidi@ARM.com{
887404SAli.Saidi@ARM.com  public:
8910037SARM gem5 Developers    enum class MemoryType : std::uint8_t {
907404SAli.Saidi@ARM.com        StronglyOrdered,
917404SAli.Saidi@ARM.com        Device,
927404SAli.Saidi@ARM.com        Normal
937404SAli.Saidi@ARM.com    };
9410037SARM gem5 Developers
9510037SARM gem5 Developers    enum class DomainType : std::uint8_t {
9610037SARM gem5 Developers        NoAccess = 0,
9710037SARM gem5 Developers        Client,
9810037SARM gem5 Developers        Reserved,
9910037SARM gem5 Developers        Manager
1007404SAli.Saidi@ARM.com    };
1016019Shines@cs.fsu.edu
1027404SAli.Saidi@ARM.com    // Matching variables
1037404SAli.Saidi@ARM.com    Addr pfn;
1047404SAli.Saidi@ARM.com    Addr size;              // Size of this entry, == Type of TLB Rec
1057404SAli.Saidi@ARM.com    Addr vpn;               // Virtual Page Number
10610037SARM gem5 Developers    uint64_t attributes;    // Memory attributes formatted for PAR
10710037SARM gem5 Developers
10810037SARM gem5 Developers    LookupLevel lookupLevel;    // Lookup level where the descriptor was fetched
10910037SARM gem5 Developers                                // from.  Used to set the FSR for faults
11010037SARM gem5 Developers                                // occurring while the long desc. format is in
11110037SARM gem5 Developers                                // use (AArch32 w/ LPAE and AArch64)
11210037SARM gem5 Developers
11310037SARM gem5 Developers    uint16_t asid;          // Address Space Identifier
11410037SARM gem5 Developers    uint8_t vmid;           // Virtual machine Identifier
1157404SAli.Saidi@ARM.com    uint8_t N;              // Number of bits in pagesize
11610037SARM gem5 Developers    uint8_t innerAttrs;
11710037SARM gem5 Developers    uint8_t outerAttrs;
11810037SARM gem5 Developers    uint8_t ap;             // Access permissions bits
11910037SARM gem5 Developers    uint8_t hap;            // Hyp access permissions bits
12010037SARM gem5 Developers    DomainType domain;         // Access Domain
12110037SARM gem5 Developers
12210037SARM gem5 Developers    MemoryType mtype;
12310037SARM gem5 Developers
12410037SARM gem5 Developers    // True if the long descriptor format is used for this entry (LPAE only)
12510037SARM gem5 Developers    bool longDescFormat; // @todo use this in the update attribute bethod
12610037SARM gem5 Developers
12710037SARM gem5 Developers    bool isHyp;
1287404SAli.Saidi@ARM.com    bool global;
1297404SAli.Saidi@ARM.com    bool valid;
1307399SAli.Saidi@ARM.com
13110037SARM gem5 Developers    // True if the entry targets the non-secure physical address space
13210037SARM gem5 Developers    bool ns;
13310037SARM gem5 Developers    // True if the entry was brought in from a non-secure page table
13410037SARM gem5 Developers    bool nstid;
13510037SARM gem5 Developers    // Exception level on insert, AARCH64 EL0&1, AARCH32 -> el=1
13610037SARM gem5 Developers    uint8_t el;
13710037SARM gem5 Developers
1387404SAli.Saidi@ARM.com    // Type of memory
1397404SAli.Saidi@ARM.com    bool nonCacheable;     // Can we wrap this in mtype?
1407404SAli.Saidi@ARM.com
1417436Sdam.sunwoo@arm.com    // Memory Attributes
1427436Sdam.sunwoo@arm.com    bool shareable;
14310037SARM gem5 Developers    bool outerShareable;
1447436Sdam.sunwoo@arm.com
1457404SAli.Saidi@ARM.com    // Access permissions
1467404SAli.Saidi@ARM.com    bool xn;                // Execute Never
14710037SARM gem5 Developers    bool pxn;               // Privileged Execute Never (LPAE only)
1487404SAli.Saidi@ARM.com
1497404SAli.Saidi@ARM.com    //Construct an entry that maps to physical address addr for SE mode
15010558Salexandru.dutu@amd.com    TlbEntry(Addr _asn, Addr _vaddr, Addr _paddr,
15110558Salexandru.dutu@amd.com             bool uncacheable, bool read_only) :
15210037SARM gem5 Developers         pfn(_paddr >> PageShift), size(PageBytes - 1), vpn(_vaddr >> PageShift),
15310037SARM gem5 Developers         attributes(0), lookupLevel(L1), asid(_asn), vmid(0), N(0),
15410558Salexandru.dutu@amd.com         innerAttrs(0), outerAttrs(0), ap(read_only ? 0x3 : 0), hap(0x3),
15510037SARM gem5 Developers         domain(DomainType::Client),  mtype(MemoryType::StronglyOrdered),
15610037SARM gem5 Developers         longDescFormat(false), isHyp(false), global(false), valid(true),
15710558Salexandru.dutu@amd.com         ns(true), nstid(true), el(0), nonCacheable(uncacheable),
15810558Salexandru.dutu@amd.com         shareable(false), outerShareable(false), xn(0), pxn(0)
1596019Shines@cs.fsu.edu    {
16010037SARM gem5 Developers        // no restrictions by default, hap = 0x3
1617404SAli.Saidi@ARM.com
16210037SARM gem5 Developers        // @todo Check the memory type
16310558Salexandru.dutu@amd.com        if (read_only)
16410558Salexandru.dutu@amd.com            warn("ARM TlbEntry does not support read-only mappings\n");
1657399SAli.Saidi@ARM.com    }
1666019Shines@cs.fsu.edu
16710037SARM gem5 Developers    TlbEntry() :
16810037SARM gem5 Developers         pfn(0), size(0), vpn(0), attributes(0), lookupLevel(L1), asid(0),
16910037SARM gem5 Developers         vmid(0), N(0), innerAttrs(0), outerAttrs(0), ap(0), hap(0x3),
17010037SARM gem5 Developers         domain(DomainType::Client), mtype(MemoryType::StronglyOrdered),
17111546Snikos.nikoleris@arm.com         longDescFormat(false), isHyp(false), global(false), valid(false),
17210037SARM gem5 Developers         ns(true), nstid(true), el(0), nonCacheable(false),
17310037SARM gem5 Developers         shareable(false), outerShareable(false), xn(0), pxn(0)
17410037SARM gem5 Developers    {
17510037SARM gem5 Developers        // no restrictions by default, hap = 0x3
17610037SARM gem5 Developers
17710037SARM gem5 Developers        // @todo Check the memory type
17810037SARM gem5 Developers    }
1796019Shines@cs.fsu.edu
1807399SAli.Saidi@ARM.com    void
1817399SAli.Saidi@ARM.com    updateVaddr(Addr new_vaddr)
1827399SAli.Saidi@ARM.com    {
1837404SAli.Saidi@ARM.com        vpn = new_vaddr >> PageShift;
1847399SAli.Saidi@ARM.com    }
1856019Shines@cs.fsu.edu
1867399SAli.Saidi@ARM.com    Addr
18710037SARM gem5 Developers    pageStart() const
1887399SAli.Saidi@ARM.com    {
1897404SAli.Saidi@ARM.com        return pfn << PageShift;
1907404SAli.Saidi@ARM.com    }
1917404SAli.Saidi@ARM.com
1927404SAli.Saidi@ARM.com    bool
19310037SARM gem5 Developers    match(Addr va, uint8_t _vmid, bool hypLookUp, bool secure_lookup,
19410037SARM gem5 Developers          uint8_t target_el) const
1957404SAli.Saidi@ARM.com    {
19610037SARM gem5 Developers        return match(va, 0, _vmid, hypLookUp, secure_lookup, true, target_el);
19710037SARM gem5 Developers    }
19810037SARM gem5 Developers
19910037SARM gem5 Developers    bool
20010037SARM gem5 Developers    match(Addr va, uint16_t asn, uint8_t _vmid, bool hypLookUp,
20110037SARM gem5 Developers          bool secure_lookup, bool ignore_asn, uint8_t target_el) const
20210037SARM gem5 Developers    {
20310037SARM gem5 Developers        bool match = false;
2047404SAli.Saidi@ARM.com        Addr v = vpn << N;
20510037SARM gem5 Developers
20610037SARM gem5 Developers        if (valid && va >= v && va <= v + size && (secure_lookup == !nstid) &&
20710037SARM gem5 Developers            (hypLookUp == isHyp))
20810037SARM gem5 Developers        {
20910037SARM gem5 Developers            if (target_el == 2 || target_el == 3)
21010037SARM gem5 Developers                match = (el == target_el);
21110037SARM gem5 Developers            else
21210037SARM gem5 Developers                match = (el == 0) || (el == 1);
21310037SARM gem5 Developers            if (match && !ignore_asn) {
21410037SARM gem5 Developers                match = global || (asn == asid);
21510037SARM gem5 Developers            }
21610037SARM gem5 Developers            if (match && nstid) {
21710037SARM gem5 Developers                match = isHyp || (_vmid == vmid);
21810037SARM gem5 Developers            }
21910037SARM gem5 Developers        }
22010037SARM gem5 Developers        return match;
2217404SAli.Saidi@ARM.com    }
2227404SAli.Saidi@ARM.com
2237404SAli.Saidi@ARM.com    Addr
22410037SARM gem5 Developers    pAddr(Addr va) const
2257404SAli.Saidi@ARM.com    {
2267404SAli.Saidi@ARM.com        return (pfn << N) | (va & size);
2277399SAli.Saidi@ARM.com    }
2286019Shines@cs.fsu.edu
2297733SAli.Saidi@ARM.com    void
23010037SARM gem5 Developers    updateAttributes()
23110037SARM gem5 Developers    {
23210037SARM gem5 Developers        uint64_t mask;
23310037SARM gem5 Developers        uint64_t newBits;
23410037SARM gem5 Developers
23510037SARM gem5 Developers        // chec bit 11 to determine if its currently LPAE or VMSA format.
23610037SARM gem5 Developers        if ( attributes & (1 << 11) ) {
23710037SARM gem5 Developers            newBits = ((outerShareable ? 0x2 :
23810037SARM gem5 Developers                      shareable         ? 0x3 : 0) << 7);
23910037SARM gem5 Developers            mask = 0x180;
24010037SARM gem5 Developers        } else {
24110037SARM gem5 Developers            /** Formatting for Physical Address Register (PAR)
24210037SARM gem5 Developers             *  Only including lower bits (TLB info here)
24310037SARM gem5 Developers             *  PAR (32-bit format):
24410037SARM gem5 Developers             *  PA   [31:12]
24510037SARM gem5 Developers             *  LPAE [11] (Large Physical Address Extension)
24610037SARM gem5 Developers             *  TLB info [10:1]
24710037SARM gem5 Developers             *      NOS  [10] (Not Outer Sharable)
24810037SARM gem5 Developers             *      NS   [9]  (Non-Secure)
24910037SARM gem5 Developers             *      --   [8]  (Implementation Defined)
25010037SARM gem5 Developers             *      SH   [7]  (Sharable)
25110037SARM gem5 Developers             *      Inner[6:4](Inner memory attributes)
25210037SARM gem5 Developers             *      Outer[3:2](Outer memory attributes)
25310037SARM gem5 Developers             *      SS   [1]  (SuperSection)
25410037SARM gem5 Developers             *      F    [0]  (Fault, Fault Status in [6:1] if faulted)
25510037SARM gem5 Developers            */
25610037SARM gem5 Developers            newBits = ((outerShareable ? 0:1) << 10) |
25710037SARM gem5 Developers                      ((shareable ? 1:0) << 7) |
25810037SARM gem5 Developers                      (innerAttrs << 4) |
25910037SARM gem5 Developers                      (outerAttrs << 2);
26010037SARM gem5 Developers                      // TODO: Supersection bit
26110037SARM gem5 Developers            mask = 0x4FC;
26210037SARM gem5 Developers        }
26310037SARM gem5 Developers        // common bits
26410037SARM gem5 Developers        newBits |= ns << 9;  // NS bit
26510037SARM gem5 Developers        mask    |= 1  << 9;
26610037SARM gem5 Developers        // add in the new bits
26710037SARM gem5 Developers        attributes &= ~mask;
26810037SARM gem5 Developers        attributes |= newBits;
26910037SARM gem5 Developers    }
27010037SARM gem5 Developers
27110037SARM gem5 Developers    void
27210037SARM gem5 Developers    setAttributes(bool lpae)
27310037SARM gem5 Developers    {
27410037SARM gem5 Developers        attributes = lpae ? (1 << 11) : 0;
27510037SARM gem5 Developers        updateAttributes();
27610037SARM gem5 Developers    }
27710037SARM gem5 Developers
27810037SARM gem5 Developers    std::string
27910037SARM gem5 Developers    print() const
28010037SARM gem5 Developers    {
28110037SARM gem5 Developers        return csprintf("%#x, asn %d vmn %d hyp %d ppn %#x size: %#x ap:%d "
28210037SARM gem5 Developers                        "ns:%d nstid:%d g:%d el:%d", vpn << N, asid, vmid,
28310037SARM gem5 Developers                        isHyp, pfn << N, size, ap, ns, nstid, global, el);
28410037SARM gem5 Developers    }
28510037SARM gem5 Developers
28610037SARM gem5 Developers    void
28711168Sandreas.hansson@arm.com    serialize(CheckpointOut &cp) const override
2887733SAli.Saidi@ARM.com    {
28910037SARM gem5 Developers        SERIALIZE_SCALAR(longDescFormat);
2907733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(pfn);
2917733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(size);
2927733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(vpn);
2937733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(asid);
29410037SARM gem5 Developers        SERIALIZE_SCALAR(vmid);
29510037SARM gem5 Developers        SERIALIZE_SCALAR(isHyp);
2967733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(N);
2977733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(global);
2987733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(valid);
29910037SARM gem5 Developers        SERIALIZE_SCALAR(ns);
30010037SARM gem5 Developers        SERIALIZE_SCALAR(nstid);
3017733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(nonCacheable);
30210037SARM gem5 Developers        SERIALIZE_ENUM(lookupLevel);
3037733SAli.Saidi@ARM.com        SERIALIZE_ENUM(mtype);
3047733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(innerAttrs);
3057733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(outerAttrs);
3067733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(shareable);
30710037SARM gem5 Developers        SERIALIZE_SCALAR(outerShareable);
3087733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(attributes);
3097733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(xn);
31010037SARM gem5 Developers        SERIALIZE_SCALAR(pxn);
3117733SAli.Saidi@ARM.com        SERIALIZE_SCALAR(ap);
31210037SARM gem5 Developers        SERIALIZE_SCALAR(hap);
31310037SARM gem5 Developers        uint8_t domain_ = static_cast<uint8_t>(domain);
31410905Sandreas.sandberg@arm.com        paramOut(cp, "domain", domain_);
3157733SAli.Saidi@ARM.com    }
3167733SAli.Saidi@ARM.com    void
31711168Sandreas.hansson@arm.com    unserialize(CheckpointIn &cp) override
3187733SAli.Saidi@ARM.com    {
31910037SARM gem5 Developers        UNSERIALIZE_SCALAR(longDescFormat);
3207733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(pfn);
3217733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(size);
3227733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(vpn);
3237733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(asid);
32410037SARM gem5 Developers        UNSERIALIZE_SCALAR(vmid);
32510037SARM gem5 Developers        UNSERIALIZE_SCALAR(isHyp);
3267733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(N);
3277733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(global);
3287733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(valid);
32910037SARM gem5 Developers        UNSERIALIZE_SCALAR(ns);
33010037SARM gem5 Developers        UNSERIALIZE_SCALAR(nstid);
3317733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(nonCacheable);
33210037SARM gem5 Developers        UNSERIALIZE_ENUM(lookupLevel);
3337733SAli.Saidi@ARM.com        UNSERIALIZE_ENUM(mtype);
3347733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(innerAttrs);
3357733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(outerAttrs);
3367733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(shareable);
33710037SARM gem5 Developers        UNSERIALIZE_SCALAR(outerShareable);
3387733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(attributes);
3397733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(xn);
34010037SARM gem5 Developers        UNSERIALIZE_SCALAR(pxn);
3417733SAli.Saidi@ARM.com        UNSERIALIZE_SCALAR(ap);
34210037SARM gem5 Developers        UNSERIALIZE_SCALAR(hap);
34310037SARM gem5 Developers        uint8_t domain_;
34410905Sandreas.sandberg@arm.com        paramIn(cp, "domain", domain_);
34510037SARM gem5 Developers        domain = static_cast<DomainType>(domain_);
3467733SAli.Saidi@ARM.com    }
3477733SAli.Saidi@ARM.com
3487399SAli.Saidi@ARM.com};
3496019Shines@cs.fsu.edu
3507399SAli.Saidi@ARM.com
3516019Shines@cs.fsu.edu
3528902Sandreas.hansson@arm.com}
3536019Shines@cs.fsu.edu#endif // __ARCH_ARM_PAGETABLE_H__
3546019Shines@cs.fsu.edu
355