/* SPDX-License-Identifier: GPL-2.0 */
/*
* Bit definitions for the MCF54xx ACR and CACR registers .
*/
#ifndef m54xxacr_h
#define m54xxacr_h
/*
* Define the Cache register flags .
*/
#define CACR_DEC 0 x80000000 /* Enable data cache */
#define CACR_DWP 0 x40000000 /* Data write protection */
#define CACR_DESB 0 x20000000 /* Enable data store buffer */
#define CACR_DDPI 0 x10000000 /* Disable invalidation by CPUSHL */
#define CACR_DHCLK 0 x08000000 /* Half data cache lock mode */
#define CACR_DDCM_WT 0 x00000000 /* Write through cache*/
#define CACR_DDCM_CP 0 x02000000 /* Copyback cache */
#define CACR_DDCM_P 0 x04000000 /* No cache, precise */
#define CACR_DDCM_IMP 0 x06000000 /* No cache, imprecise */
#define CACR_DCINVA 0 x01000000 /* Invalidate data cache */
#define CACR_BEC 0 x00080000 /* Enable branch cache */
#define CACR_BCINVA 0 x00040000 /* Invalidate branch cache */
#define CACR_IEC 0 x00008000 /* Enable instruction cache */
#define CACR_DNFB 0 x00002000 /* Inhibited fill buffer */
#define CACR_IDPI 0 x00001000 /* Disable CPUSHL */
#define CACR_IHLCK 0 x00000800 /* Instruction cache half lock */
#define CACR_IDCM 0 x00000400 /* Instruction cache inhibit */
#define CACR_ICINVA 0 x00000100 /* Invalidate instr cache */
#define CACR_EUSP 0 x00000020 /* Enable separate user a7 */
#define ACR_BASE_POS 24 /* Address Base */
#define ACR_MASK_POS 16 /* Address Mask */
#define ACR_ENABLE 0 x00008000 /* Enable address */
#define ACR_USER 0 x00000000 /* User mode access only */
#define ACR_SUPER 0 x00002000 /* Supervisor mode only */
#define ACR_ANY 0 x00004000 /* Match any access mode */
#define ACR_CM_WT 0 x00000000 /* Write through mode */
#define ACR_CM_CP 0 x00000020 /* Copyback mode */
#define ACR_CM_OFF_PRE 0 x00000040 /* No cache, precise */
#define ACR_CM_OFF_IMP 0 x00000060 /* No cache, imprecise */
#define ACR_CM 0 x00000060 /* Cache mode mask */
#define ACR_SP 0 x00000008 /* Supervisor protect */
#define ACR_WPROTECT 0 x00000004 /* Write protect */
#define ACR_BA(x) ((x) & 0 xff000000)
#define ACR_ADMSK(x) ((((x) - 1 ) & 0 xff000000) >> 8 )
#if defined (CONFIG_M5407)
#define ICACHE_SIZE 0 x4000 /* instruction - 16k */
#define DCACHE_SIZE 0 x2000 /* data - 8k */
#elif defined (CONFIG_M54xx)
#define ICACHE_SIZE 0 x8000 /* instruction - 32k */
#define DCACHE_SIZE 0 x8000 /* data - 32k */
#elif defined (CONFIG_M5441x)
#define ICACHE_SIZE 0 x2000 /* instruction - 8k */
#define DCACHE_SIZE 0 x2000 /* data - 8k */
#endif
#define CACHE_LINE_SIZE 0 x0010 /* 16 bytes */
#define CACHE_WAYS 4 /* 4 ways */
#define ICACHE_SET_MASK ((ICACHE_SIZE / 64 - 1 ) << CACHE_WAYS)
#define DCACHE_SET_MASK ((DCACHE_SIZE / 64 - 1 ) << CACHE_WAYS)
#define ICACHE_MAX_ADDR ICACHE_SET_MASK
#define DCACHE_MAX_ADDR DCACHE_SET_MASK
/*
* Version 4 cores have a true harvard style separate instruction
* and data cache . Enable data and instruction caches , also enable write
* buffers and branch accelerator .
*/
/* attention : enabling CACR_DESB requires a "nop" to flush the store buffer */
/* use '+' instead of '|' for assembler's sake */
/* Enable data cache */
/* Enable data store buffer */
/* outside ACRs : No cache, precise */
/* Enable instruction+branch caches */
#if defined (CONFIG_M5407)
#define CACHE_MODE (CACR_DEC+CACR_DESB+CACR_DDCM_P+CACR_BEC+CACR_IEC)
#else
#define CACHE_MODE (CACR_DEC+CACR_DESB+CACR_DDCM_P+CACR_BEC+CACR_IEC+CACR_EUSP)
#endif
#define CACHE_INIT (CACR_DCINVA+CACR_BCINVA+CACR_ICINVA)
#if defined (CONFIG_MMU)
/*
* If running with the MMU enabled then we need to map the internal
* register region as non - cacheable . And then we map all our RAM as
* cacheable and supervisor access only .
*/
#define ACR0_MODE (ACR_BA(IOMEMBASE)+ACR_ADMSK(IOMEMSIZE)+ \
ACR_ENABLE+ACR_SUPER+ACR_CM_OFF_PRE+ACR_SP)
#if defined (CONFIG_CACHE_COPYBACK)
#define ACR1_MODE (ACR_BA(CONFIG_RAMBASE)+ACR_ADMSK(CONFIG_RAMSIZE)+ \
ACR_ENABLE+ACR_SUPER+ACR_SP+ACR_CM_CP)
#else
#define ACR1_MODE (ACR_BA(CONFIG_RAMBASE)+ACR_ADMSK(CONFIG_RAMSIZE)+ \
ACR_ENABLE+ACR_SUPER+ACR_SP+ACR_CM_WT)
#endif
#define ACR2_MODE 0
#define ACR3_MODE (ACR_BA(CONFIG_RAMBASE)+ACR_ADMSK(CONFIG_RAMSIZE)+ \
ACR_ENABLE+ACR_SUPER+ACR_SP)
#else
/*
* For the non - MMU enabled case we map all of RAM as cacheable .
*/
#if defined (CONFIG_CACHE_COPYBACK)
#define DATA_CACHE_MODE (ACR_ENABLE+ACR_ANY+ACR_CM_CP)
#else
#define DATA_CACHE_MODE (ACR_ENABLE+ACR_ANY+ACR_CM_WT)
#endif
#define INSN_CACHE_MODE (ACR_ENABLE+ACR_ANY)
#define CACHE_INVALIDATE (CACHE_MODE+CACR_DCINVA+CACR_BCINVA+CACR_ICINVA)
#define CACHE_INVALIDATEI (CACHE_MODE+CACR_BCINVA+CACR_ICINVA)
#define CACHE_INVALIDATED (CACHE_MODE+CACR_DCINVA)
#define ACR0_MODE (0 x000f0000+DATA_CACHE_MODE)
#define ACR1_MODE 0
#define ACR2_MODE (0 x000f0000+INSN_CACHE_MODE)
#define ACR3_MODE 0
#if ((DATA_CACHE_MODE & ACR_CM) == ACR_CM_CP)
/* Copyback cache mode must push dirty cache lines first */
#define CACHE_PUSH
#endif
#endif /* CONFIG_MMU */
#endif /* m54xxacr_h */
Messung V0.5 in Prozent C=62 H=100 G=83
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland