/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright ( C ) 2004 , 2007 - 2010 , 2011 - 2012 Synopsys , Inc . ( www . synopsys . com )
*/
#ifndef __ARC_ASM_CACHE_H
#define __ARC_ASM_CACHE_H
/* In case $$ not config, setup a dummy number for rest of kernel */
#ifndef CONFIG_ARC_CACHE_LINE_SHIFT
#define L1_CACHE_SHIFT 6
#else
#define L1_CACHE_SHIFT CONFIG_ARC_CACHE_LINE_SHIFT
#endif
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
#define CACHE_LINE_MASK (~(L1_CACHE_BYTES - 1 ))
/*
* ARC700 doesn ' t cache any access in top 1 G ( 0 xc000_0000 to 0 xFFFF_FFFF )
* Ideal for wiring memory mapped peripherals as we don ' t need to do
* explicit uncached accesses ( LD . di / ST . di ) hence more portable drivers
*/
#define ARC_UNCACHED_ADDR_SPACE 0 xc0000000
#ifndef __ASSEMBLER__
#include <linux/build_bug.h>
/* Uncached access macros */
#define arc_read_uncached_32(ptr) \
({ \
unsigned int __ret; \
__asm__ __volatile__( \
" ld.di %0, [%1] \n" \
: "=r" (__ret) \
: "r" (ptr)); \
__ret; \
})
#define arc_write_uncached_32(ptr, data)\
({ \
__asm__ __volatile__( \
" st.di %0, [%1] \n" \
: \
: "r" (data), "r" (ptr)); \
})
/* Largest line length for either L1 or L2 is 128 bytes */
#define SMP_CACHE_BYTES 128
#define cache_line_size() SMP_CACHE_BYTES
#define ARCH_DMA_MINALIGN SMP_CACHE_BYTES
/*
* Make sure slab - allocated buffers are 64 - bit aligned when atomic64_t uses
* ARCv2 64 - bit atomics ( LLOCKD / SCONDD ) . This guarantess runtime 64 - bit
* alignment for any atomic64_t embedded in buffer .
* Default ARCH_SLAB_MINALIGN is _ _ alignof__ ( long long ) which has a relaxed
* value of 4 ( and not 8 ) in ARC ABI .
*/
#if defined (CONFIG_ARC_HAS_LL64) && defined (CONFIG_ARC_HAS_LLSC)
#define ARCH_SLAB_MINALIGN 8
#endif
extern int ioc_enable;
extern unsigned long perip_base, perip_end;
#endif /* !__ASSEMBLER__ */
/* Instruction cache related Auxiliary registers */
#define ARC_REG_IC_BCR 0 x77 /* Build Config reg */
#define ARC_REG_IC_IVIC 0 x10
#define ARC_REG_IC_CTRL 0 x11
#define ARC_REG_IC_IVIR 0 x16
#define ARC_REG_IC_ENDR 0 x17
#define ARC_REG_IC_IVIL 0 x19
#define ARC_REG_IC_PTAG 0 x1E
#define ARC_REG_IC_PTAG_HI 0 x1F
/* Bit val in IC_CTRL */
#define IC_CTRL_DIS 0 x1
/* Data cache related Auxiliary registers */
#define ARC_REG_DC_BCR 0 x72 /* Build Config reg */
#define ARC_REG_DC_IVDC 0 x47
#define ARC_REG_DC_CTRL 0 x48
#define ARC_REG_DC_IVDL 0 x4A
#define ARC_REG_DC_FLSH 0 x4B
#define ARC_REG_DC_FLDL 0 x4C
#define ARC_REG_DC_STARTR 0 x4D
#define ARC_REG_DC_ENDR 0 x4E
#define ARC_REG_DC_PTAG 0 x5C
#define ARC_REG_DC_PTAG_HI 0 x5F
/* Bit val in DC_CTRL */
#define DC_CTRL_DIS 0 x001
#define DC_CTRL_INV_MODE_FLUSH 0 x040
#define DC_CTRL_FLUSH_STATUS 0 x100
#define DC_CTRL_RGN_OP_INV 0 x200
#define DC_CTRL_RGN_OP_MSK 0 x200
/*System-level cache (L2 cache) related Auxiliary registers */
#define ARC_REG_SLC_CFG 0 x901
#define ARC_REG_SLC_CTRL 0 x903
#define ARC_REG_SLC_FLUSH 0 x904
#define ARC_REG_SLC_INVALIDATE 0 x905
#define ARC_AUX_SLC_IVDL 0 x910
#define ARC_AUX_SLC_FLDL 0 x912
#define ARC_REG_SLC_RGN_START 0 x914
#define ARC_REG_SLC_RGN_START1 0 x915
#define ARC_REG_SLC_RGN_END 0 x916
#define ARC_REG_SLC_RGN_END1 0 x917
/* Bit val in SLC_CONTROL */
#define SLC_CTRL_DIS 0 x001
#define SLC_CTRL_IM 0 x040
#define SLC_CTRL_BUSY 0 x100
#define SLC_CTRL_RGN_OP_INV 0 x200
/* IO coherency related Auxiliary registers */
#define ARC_REG_IO_COH_ENABLE 0 x500
#define ARC_IO_COH_ENABLE_BIT BIT(0 )
#define ARC_REG_IO_COH_PARTIAL 0 x501
#define ARC_IO_COH_PARTIAL_BIT BIT(0 )
#define ARC_REG_IO_COH_AP0_BASE 0 x508
#define ARC_REG_IO_COH_AP0_SIZE 0 x509
#endif /* _ASM_CACHE_H */
Messung V0.5 in Prozent C=89 H=90 G=89
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland