linux/arch/m68k/include/asm/mcfmmu.h
<<
>>
Prefs
   1/*
   2 *      mcfmmu.h -- definitions for the ColdFire v4e MMU
   3 *
   4 *      (C) Copyright 2011,  Greg Ungerer <gerg@uclinux.org>
   5 *
   6 * This file is subject to the terms and conditions of the GNU General Public
   7 * License.  See the file COPYING in the main directory of this archive
   8 * for more details.
   9 */
  10
  11#ifndef MCFMMU_H
  12#define MCFMMU_H
  13
  14/*
  15 *      The MMU support registers are mapped into the address space using
  16 *      the processor MMUBASE register. We used a fixed address for mapping,
  17 *      there doesn't seem any need to make this configurable yet.
  18 */
  19#define MMUBASE         0xfe000000
  20
  21/*
  22 *      The support registers of the MMU. Names are the sames as those
  23 *      used in the Freescale v4e documentation.
  24 */
  25#define MMUCR           (MMUBASE + 0x00)        /* Control register */
  26#define MMUOR           (MMUBASE + 0x04)        /* Operation register */
  27#define MMUSR           (MMUBASE + 0x08)        /* Status register */
  28#define MMUAR           (MMUBASE + 0x10)        /* TLB Address register */
  29#define MMUTR           (MMUBASE + 0x14)        /* TLB Tag register */
  30#define MMUDR           (MMUBASE + 0x18)        /* TLB Data register */
  31
  32/*
  33 *      MMU Control register bit flags
  34 */
  35#define MMUCR_EN        0x00000001              /* Virtual mode enable */
  36#define MMUCR_ASM       0x00000002              /* Address space mode */
  37
  38/*
  39 *      MMU Operation register.
  40 */
  41#define MMUOR_UAA       0x00000001              /* Update allocation address */
  42#define MMUOR_ACC       0x00000002              /* TLB access */
  43#define MMUOR_RD        0x00000004              /* TLB access read */
  44#define MMUOR_WR        0x00000000              /* TLB access write */
  45#define MMUOR_ADR       0x00000008              /* TLB address select */
  46#define MMUOR_ITLB      0x00000010              /* ITLB operation */
  47#define MMUOR_CAS       0x00000020              /* Clear non-locked ASID TLBs */
  48#define MMUOR_CNL       0x00000040              /* Clear non-locked TLBs */
  49#define MMUOR_CA        0x00000080              /* Clear all TLBs */
  50#define MMUOR_STLB      0x00000100              /* Search TLBs */
  51#define MMUOR_AAN       16                      /* TLB allocation address */
  52#define MMUOR_AAMASK    0xffff0000              /* AA mask */
  53
  54/*
  55 *      MMU Status register.
  56 */
  57#define MMUSR_HIT       0x00000002              /* Search TLB hit */
  58#define MMUSR_WF        0x00000008              /* Write access fault */
  59#define MMUSR_RF        0x00000010              /* Read access fault */
  60#define MMUSR_SPF       0x00000020              /* Supervisor protect fault */
  61
  62/*
  63 *      MMU Read/Write Tag register.
  64 */
  65#define MMUTR_V         0x00000001              /* Valid */
  66#define MMUTR_SG        0x00000002              /* Shared global */
  67#define MMUTR_IDN       2                       /* Address Space ID */
  68#define MMUTR_IDMASK    0x000003fc              /* ASID mask */
  69#define MMUTR_VAN       10                      /* Virtual Address */
  70#define MMUTR_VAMASK    0xfffffc00              /* VA mask */
  71
  72/*
  73 *      MMU Read/Write Data register.
  74 */
  75#define MMUDR_LK        0x00000002              /* Lock entry */
  76#define MMUDR_X         0x00000004              /* Execute access enable */
  77#define MMUDR_W         0x00000008              /* Write access enable */
  78#define MMUDR_R         0x00000010              /* Read access enable */
  79#define MMUDR_SP        0x00000020              /* Supervisor access enable */
  80#define MMUDR_CM_CWT    0x00000000              /* Cachable write thru */
  81#define MMUDR_CM_CCB    0x00000040              /* Cachable copy back */
  82#define MMUDR_CM_NCP    0x00000080              /* Non-cachable precise */
  83#define MMUDR_CM_NCI    0x000000c0              /* Non-cachable imprecise */
  84#define MMUDR_SZ_1MB    0x00000000              /* 1MB page size */
  85#define MMUDR_SZ_4KB    0x00000100              /* 4kB page size */
  86#define MMUDR_SZ_8KB    0x00000200              /* 8kB page size */
  87#define MMUDR_SZ_1KB    0x00000300              /* 1kB page size */
  88#define MMUDR_PAN       10                      /* Physical address */
  89#define MMUDR_PAMASK    0xfffffc00              /* PA mask */
  90
  91#ifndef __ASSEMBLY__
  92
  93/*
  94 *      Simple access functions for the MMU registers. Nothing fancy
  95 *      currently required, just simple 32bit access.
  96 */
  97static inline u32 mmu_read(u32 a)
  98{
  99        return *((volatile u32 *) a);
 100}
 101
 102static inline void mmu_write(u32 a, u32 v)
 103{
 104        *((volatile u32 *) a) = v;
 105        __asm__ __volatile__ ("nop");
 106}
 107
 108void cf_bootmem_alloc(void);
 109void cf_mmu_context_init(void);
 110int cf_tlb_miss(struct pt_regs *regs, int write, int dtlb, int extension_word);
 111
 112#endif
 113
 114#endif  /* MCFMMU_H */
 115