Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/*-
 * Copyright 2000,2001,2002,2003 Broadcom Corporation.
 * All rights reserved.
 *
 * This file is derived from the sbmips32.h header distributed
 * by Broadcom with the CFE 1.4.2 sources.
 *
 * This software is furnished under license and may be used and
 * copied only in accordance with the following terms and
 * conditions.  Subject to these conditions, you may download,
 * copy, install, use, modify and distribute modified or unmodified
 * copies of this software in source and/or binary form.  No title
 * or ownership is transferred hereby.
 *
 * 1) Any source code used, modified or distributed must reproduce
 *    and retain this copyright notice and list of conditions
 *    as they appear in the source file.
 *
 * 2) No right is granted to use any trade name, trademark, or
 *    logo of Broadcom Corporation.  The "Broadcom Corporation"
 *    name may not be used to endorse or promote products derived
 *    from this software without the prior written permission of
 *    Broadcom Corporation.
 *
 * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
 *    IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
 *    WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 *    PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
 *    SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
 *    PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
 *    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *    GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 *    OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *    TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
 *    THE POSSIBILITY OF SUCH DAMAGE.
 *
 * $FreeBSD$
 */

/*  *********************************************************************
    *  Broadcom Common Firmware Environment (CFE)
    *  
    *  MIPS32 CPU definitions			File: sbmips32.h
    * 
    *  This module contains constants and macros specific to the
    *  Broadcom MIPS32 core.  In addition to generic MIPS32, it
    *  includes definitions for the MIP32-01 and MIPS3302 OCP cores
    *  for the Silicon Backplane.
    *
    *********************************************************************/

#ifndef _MIPS_BROADCOM_BCM_BMIPS_EXTS_H_
#define _MIPS_BROADCOM_BCM_BMIPS_EXTS_H_

#include <machine/cpufunc.h>

/*
 * The following Broadcom Custom CP0 Registers appear in the Broadcom
 * BMIPS330x MIPS32 core.
 */

#define	BMIPS_COP_0_BCMCFG	22

/*
 * Custom CP0 Accessors
 */

#define	BCM_BMIPS_RW32_COP0_SEL(n,r,s)				\
static __inline uint32_t					\
bcm_bmips_rd_ ## n(void)					\
{								\
	int v0;							\
	__asm __volatile ("mfc0 %[v0], $"__XSTRING(r)", "__XSTRING(s)";"	\
			  : [v0] "=&r"(v0));			\
	mips_barrier();						\
	return (v0);						\
}								\
static __inline void						\
bcm_bmips_wr_ ## n(uint32_t a0)					\
{								\
	__asm __volatile ("mtc0 %[a0], $"__XSTRING(r)", "__XSTRING(s)";"	\
			 __XSTRING(COP0_SYNC)";"		\
			 "nop;"					\
			 "nop;"					\
			 :					\
			 : [a0] "r"(a0));			\
	mips_barrier();						\
} struct __hack

BCM_BMIPS_RW32_COP0_SEL(pllcfg1,	MIPS_COP_0_CONFIG,	1);
BCM_BMIPS_RW32_COP0_SEL(pllcfg2,	MIPS_COP_0_CONFIG,	2);
BCM_BMIPS_RW32_COP0_SEL(clksync,	MIPS_COP_0_CONFIG,	3);
BCM_BMIPS_RW32_COP0_SEL(pllcfg3,	MIPS_COP_0_CONFIG,	4);
BCM_BMIPS_RW32_COP0_SEL(rstcfg,		MIPS_COP_0_CONFIG,	5);

/*
 * Broadcom PLLConfig1 Register (22, select 1)
 */

/* SoftMIPSPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG1_MC_SHIFT	10
#define	BMIPS_BCMCFG_PLLCFG1_MC_MASK	0xFFFFFC00

/* SoftISBPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG1_BC_SHIFT	5
#define	BMIPS_BCMCFG_PLLCFG1_BC_MASK	0x000003E0

/* SoftRefPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG1_PC_SHIFT	0
#define	BMIPS_BCMCFG_PLLCFG1_PC_MASK	0x0000001F

/*
 * Broadcom PLLConfig2 Register (22, select 2)
 */

/* Soft1to1ClkRatio */
#define	BMIPS_BCMCFG_PLLCFG2_CR		(1<<23)

/* SoftUSBxPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG2_UC_SHIFT	15
#define	BMIPS_BCMCFG_PLLCFG2_UC_MASK	0x007F8000

/* SoftIDExPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG2_IC_SHIFT	7
#define	BMIPS_BCMCFG_PLLCFG2_IC_MASK	0x00007F80

#define	BMIPS_BCMCFG_PLLCFG2_BE		(1<<6)	/* ISBxSoftCfgEnable */
#define	BMIPS_BCMCFG_PLLCFG2_UE		(1<<5)	/* USBxSoftCfgEnable */
#define	BMIPS_BCMCFG_PLLCFG2_IE		(1<<4)	/* IDExSoftCfgEnable */
#define	BMIPS_BCMCFG_PLLCFG2_CA		(1<<3)	/* CfgActive */
#define	BMIPS_BCMCFG_PLLCFG2_CF		(1<<2)	/* RefSoftCfgEnable */
#define	BMIPS_BCMCFG_PLLCFG2_CI		(1<<1)	/* ISBSoftCfgEnable */
#define	BMIPS_BCMCFG_PLLCFG2_CC		(1<<0)	/* MIPSSoftCfgEnable */

/*
 * Broadcom ClkSync Register (22, select 3)
 */
/* SoftClkCfgHigh */
#define	BMIPS_BCMCFG_CLKSYNC_CH_SHIFT	16
#define	BMIPS_BCMCFG_CLKSYNC_CH_MASK	0xFFFF0000

/* SoftClkCfgLow */
#define	BMIPS_BCMCFG_CLKSYNC_CL_SHIFT	0
#define	BMIPS_BCMCFG_CLKSYNC_CL_MASK	0x0000FFFF

/*
 * Broadcom ISBxPLLConfig3 Register (22, select 4)
 */

/* AsyncClkRatio */
#define	BMIPS_BCMCFG_PLLCFG3_AR_SHIFT	23
#define	BMIPS_BCMCFG_PLLCFG3_AR_MASK	0x01800000

#define	BMIPS_BCMCFG_PLLCFG3_SM		(1<<22)	/* SyncMode */

/* SoftISBxPLLCfg */
#define	BMIPS_BCMCFG_PLLCFG3_IC_SHIFT	0
#define	BMIPS_BCMCFG_PLLCFG3_IC_MASK	0x003FFFFF

/*
 * Broadcom BRCMRstConfig Register (22, select 5)
 */

#define	BMIPS_BCMCFG_RSTCFG_SR		(1<<18)	/* SSMR */
#define	BMIPS_BCMCFG_RSTCFG_DT		(1<<16)	/* BHTD */

/* RStSt */
#define	BMIPS_BCMCFG_RSTCFG_RS_SHIFT	8
#define	BMIPS_BCMCFG_RSTCFG_RS_MASK	0x00001F00
#define	  BMIPS_BCMCFG_RST_OTHER	0x00
#define	  BMIPS_BCMCFG_RST_SH		0x01
#define	  BMIPS_BCMCFG_RST_SS		0x02
#define	  BMIPS_BCMCFG_RST_EJTAG	0x04
#define	  BMIPS_BCMCFG_RST_WDOG		0x08
#define	  BMIPS_BCMCFG_RST_CRC		0x10

#define	BMIPS_BCMCFG_RSTCFG_CR		(1<<7)	/* RStCr */

/* WBMD */
#define	BMIPS_BCMCFG_RSTCFG_WD_SHIFT	3
#define	BMIPS_BCMCFG_RSTCFG_WD_MASK	0x00000078

#define	BMIPS_BCMCFG_RSTCFG_SS		(1<<2)	/* SSR */
#define	BMIPS_BCMCFG_RSTCFG_SH		(1<<1)	/* SHR */
#define	BMIPS_BCMCFG_RSTCFG_BR		(1<<0)	/* BdR */

#endif /* _MIPS_BROADCOM_BCM_BMIPS_EXTS_H_ */