⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blackfin_local.h

📁 最新版的u-boot,2008-10-18发布
💻 H
字号:
/* * U-boot - blackfin_local.h * * Copyright (c) 2005-2007 Analog Devices Inc. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, * MA 02110-1301 USA */#ifndef __BLACKFIN_LOCAL_H__#define __BLACKFIN_LOCAL_H__#define LO(con32) ((con32) & 0xFFFF)#define lo(con32) ((con32) & 0xFFFF)#define HI(con32) (((con32) >> 16) & 0xFFFF)#define hi(con32) (((con32) >> 16) & 0xFFFF)#define OFFSET_(x) (x & 0x0000FFFF)#define MK_BMSK_(x) (1 << x)/* Ideally this should be USEC not MSEC, but the USEC multiplication * likes to overflow 32bit quantities which is all our assembler * currently supports ;( */#define USEC_PER_MSEC 1000#define MSEC_PER_SEC 1000#define BFIN_SCLK (100000000)#define SCLK_TO_MSEC(sclk) ((MSEC_PER_SEC * ((sclk) / USEC_PER_MSEC)) / (BFIN_SCLK / USEC_PER_MSEC))#define MSEC_TO_SCLK(msec) ((((BFIN_SCLK / USEC_PER_MSEC) * (msec)) / MSEC_PER_SEC) * USEC_PER_MSEC)#include <asm/linkage.h>#ifndef __ASSEMBLY__# ifdef SHARED_RESOURCES#  include <asm/shared_resources.h># endif# include <linux/types.h>extern u_long get_sclk(void);# define bfin_revid() (*pCHIPID >> 28)extern void blackfin_icache_flush_range(const void *, const void *);extern void blackfin_dcache_flush_range(const void *, const void *);extern void blackfin_dcache_invalidate_range(const void *, const void *);/* Use DMA to move data from on chip to external memory.  While this is * required for only L1 instruction (it is not directly readable by the * core via data loads), it isn't a huge performance issue for other * regions (it's probably even faster than core load/stores).  However, * the DMA engine does not have access to the L1 scratchpad, and we * cannot use DMA inside of the MMR space. */# define addr_bfin_on_chip_mem(addr) \	(((unsigned long)(addr) >= 0xef000000 && (unsigned long)addr < SYSMMR_BASE) && \	 !((unsigned long)(addr) >= L1_SRAM_SCRATCH && \	   (unsigned long)(addr) < L1_SRAM_SCRATCH_END))# include <asm/system.h>#if ANOMALY_05000198# define NOP_PAD_ANOMALY_05000198 "nop;"#else# define NOP_PAD_ANOMALY_05000198#endif#define bfin_read8(addr) ({ \	uint8_t __v; \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"%0 = b[%1] (z);" \		: "=d" (__v) \		: "a" (addr) \	); \	__v; })#define bfin_read16(addr) ({ \	uint16_t __v; \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"%0 = w[%1] (z);" \		: "=d" (__v) \		: "a" (addr) \	); \	__v; })#define bfin_read32(addr) ({ \	uint32_t __v; \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"%0 = [%1];" \		: "=d" (__v) \		: "a" (addr) \	); \	__v; })#define bfin_readPTR(addr) bfin_read32(addr)#define bfin_write8(addr, val) \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"b[%0] = %1;" \		: \		: "a" (addr), "d" (val) \		: "memory" \	)#define bfin_write16(addr, val) \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"w[%0] = %1;" \		: \		: "a" (addr), "d" (val) \		: "memory" \	)#define bfin_write32(addr, val) \	__asm__ __volatile__( \		NOP_PAD_ANOMALY_05000198 \		"[%0] = %1;" \		: \		: "a" (addr), "d" (val) \		: "memory" \	)#define bfin_writePTR(addr, val) bfin_write32(addr, val)/* SSYNC implementation for C file */static inline void SSYNC(void){	int _tmp;	if (ANOMALY_05000312)		__asm__ __volatile__(			"cli %0;"			"nop;"			"nop;"			"ssync;"			"sti %0;"			: "=d" (_tmp)		);	else if (ANOMALY_05000244)		__asm__ __volatile__(			"nop;"			"nop;"			"nop;"			"ssync;"		);	else		__asm__ __volatile__("ssync;");}/* CSYNC implementation for C file */static inline void CSYNC(void){	int _tmp;	if (ANOMALY_05000312)		__asm__ __volatile__(			"cli %0;"			"nop;"			"nop;"			"csync;"			"sti %0;"			: "=d" (_tmp)		);	else if (ANOMALY_05000244)		__asm__ __volatile__(			"nop;"			"nop;"			"nop;"			"csync;"		);	else		__asm__ __volatile__("csync;");}#else  /* __ASSEMBLY__ *//* SSYNC & CSYNC implementations for assembly files */#define ssync(x) SSYNC(x)#define csync(x) CSYNC(x)#if ANOMALY_05000312#define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch;#define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch;#elif ANOMALY_05000244#define SSYNC(scratch) nop; nop; nop; SSYNC;#define CSYNC(scratch) nop; nop; nop; CSYNC;#else#define SSYNC(scratch) SSYNC;#define CSYNC(scratch) CSYNC;#endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */#endif /* __ASSEMBLY__ */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -