91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
/* GRLIB Memory controller setup structures
 | 
						|
 *
 | 
						|
 * (C) Copyright 2010, 2015
 | 
						|
 * Daniel Hellstrom, Cobham Gaisler, daniel@gaisler.com.
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier:	GPL-2.0+
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __MEMCFG_H__
 | 
						|
#define __MEMCFG_H__
 | 
						|
 | 
						|
/*********** Low Level Memory Controller Initalization ***********/
 | 
						|
 | 
						|
#ifndef __ASSEMBLER__
 | 
						|
 | 
						|
struct grlib_mctrl_handler;
 | 
						|
 | 
						|
typedef void (*mctrl_handler_t)(
 | 
						|
	struct grlib_mctrl_handler *dev,
 | 
						|
	void *conf,
 | 
						|
	unsigned int ioarea
 | 
						|
	);
 | 
						|
 | 
						|
/* Memory Controller Handler Structure */
 | 
						|
struct grlib_mctrl_handler {
 | 
						|
	unsigned char	type;		/* 0x00. MASK: AHB MST&SLV, APB SLV */
 | 
						|
	char		index;		/* 0x01. Unit number, 0, 1, 2... */
 | 
						|
	char		unused[2];	/* 0x02 */
 | 
						|
	unsigned int	ven_dev;	/* 0x04. Device and Vendor */
 | 
						|
	mctrl_handler_t	func;		/* 0x08. Memory Controller Handler */
 | 
						|
	void		*priv;		/* 0x0c. Optional private data, ptr to
 | 
						|
					 * info how to set up controller */
 | 
						|
};
 | 
						|
 | 
						|
extern struct grlib_mctrl_handler grlib_mctrl_handlers[];
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#define MH_STRUCT_SIZE		(4*4)
 | 
						|
#define MH_TYPE			0x00
 | 
						|
#define MH_INDEX		0x01
 | 
						|
#define MH_VENDOR_DEVICE	0x04
 | 
						|
#define MH_FUNC			0x08
 | 
						|
#define MH_PRIV			0x0c
 | 
						|
 | 
						|
#define MH_TYPE_NONE	DEV_NONE
 | 
						|
#define MH_TYPE_AHB_MST	DEV_AHB_MST
 | 
						|
#define MH_TYPE_AHB_SLV	DEV_AHB_SLV
 | 
						|
#define MH_TYPE_APB_SLV	DEV_APB_SLV
 | 
						|
 | 
						|
#define MH_UNUSED	{0, 0}
 | 
						|
#define MH_END		{DEV_NONE, 0, MH_UNUSED, AMBA_PNP_ID(0, 0), 0, 0}
 | 
						|
 | 
						|
/*********** Low Level Memory Controller Initalization Handlers ***********/
 | 
						|
 | 
						|
#ifndef __ASSEMBLER__
 | 
						|
extern void _nomem_mctrl_init(
 | 
						|
	struct grlib_mctrl_handler *dev,
 | 
						|
	void *conf,
 | 
						|
	unsigned int ioarea_apbmst);
 | 
						|
 | 
						|
struct mctrl_setup {
 | 
						|
	unsigned int reg_mask;		/* Which registers to write */
 | 
						|
	struct {
 | 
						|
		unsigned int mask;	/* Mask used keep reg bits unchanged */
 | 
						|
		unsigned int value;	/* Value written to register */
 | 
						|
	} regs[8];
 | 
						|
};
 | 
						|
 | 
						|
extern void _nomem_ahbmctrl_init(
 | 
						|
	struct grlib_mctrl_handler *dev,
 | 
						|
	void *conf,
 | 
						|
	unsigned int ioarea_apbmst);
 | 
						|
 | 
						|
struct ahbmctrl_setup {
 | 
						|
	int ahb_mbar_no;		/* MBAR to get register address from */
 | 
						|
	unsigned int reg_mask;		/* Which registers to write */
 | 
						|
	struct {
 | 
						|
		unsigned int mask;	/* Mask used keep reg bits unchanged */
 | 
						|
		unsigned int value;	/* Value written to register */
 | 
						|
	} regs[8];
 | 
						|
};
 | 
						|
#endif
 | 
						|
 | 
						|
/* mctrl_setup data structure defines */
 | 
						|
#define NREGS_OFS 0
 | 
						|
#define REGS_OFS 0x4
 | 
						|
#define REGS_SIZE 8
 | 
						|
 | 
						|
#endif
 |