diff options
Diffstat (limited to 'roms/u-boot/arch/powerpc/include')
92 files changed, 25270 insertions, 0 deletions
diff --git a/roms/u-boot/arch/powerpc/include/asm/4xx_pci.h b/roms/u-boot/arch/powerpc/include/asm/4xx_pci.h new file mode 100644 index 00000000..f686e7cb --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/4xx_pci.h @@ -0,0 +1,60 @@ +#ifndef _405GP_PCI_H +#define _405GP_PCI_H + +#include <pci.h> + +/*----------------------------------------------------------------------------+ +| 405GP PCI core memory map defines. ++----------------------------------------------------------------------------*/ +#define MIN_PCI_MEMADDR1    0x80000000 +#define MIN_PCI_MEMADDR2    0x00000000 +#define MIN_PLB_PCI_IOADDR  0xE8000000  /* PLB side of PCI I/O address space */ +#define MIN_PCI_PCI_IOADDR  0x00000000  /* PCI side of PCI I/O address space */ +#define MAX_PCI_DEVICES     32 + +/*----------------------------------------------------------------------------+ +| Defines for the 405GP PCI Config address and data registers followed by +| defines for the standard PCI device configuration header. ++----------------------------------------------------------------------------*/ +#define PCICFGADR       0xEEC00000 +#define PCICFGDATA      0xEEC00004 + +#define PCIBUSNUM       0x40        /* 405GP specific parameters */ +#define PCISUBBUSNUM    0x41 +#define PCIDISCOUNT     0x42 +#define PCIBRDGOPT1     0x4A +#define PCIBRDGOPT2     0x60 + +/*----------------------------------------------------------------------------+ +| Defines for 405GP PCI Master local configuration regs. ++----------------------------------------------------------------------------*/ +#define PMM0LA          0xEF400000 +#define PMM0MA          0xEF400004 +#define PMM0PCILA       0xEF400008 +#define PMM0PCIHA       0xEF40000C +#define PMM1LA          0xEF400010 +#define PMM1MA          0xEF400014 +#define PMM1PCILA       0xEF400018 +#define PMM1PCIHA       0xEF40001C +#define PMM2LA          0xEF400020 +#define PMM2MA          0xEF400024 +#define PMM2PCILA       0xEF400028 +#define PMM2PCIHA       0xEF40002C + +/*----------------------------------------------------------------------------+ +| Defines for 405GP PCI Target local configuration regs. ++----------------------------------------------------------------------------*/ +#define PTM1MS          0xEF400030 +#define PTM1LA          0xEF400034 +#define PTM2MS          0xEF400038 +#define PTM2LA          0xEF40003C + +#define PCIDEVID_405GP	0x0 + +void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev); +int pci_arbiter_enabled(void); +int __pci_pre_init(struct pci_controller *hose); +void __pci_target_init(struct pci_controller *hose); +void __pci_master_init(struct pci_controller *hose); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/4xx_pcie.h b/roms/u-boot/arch/powerpc/include/asm/4xx_pcie.h new file mode 100644 index 00000000..26b532ad --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/4xx_pcie.h @@ -0,0 +1,406 @@ +/* + * Copyright (c) 2005 Cisco Systems.  All rights reserved. + * Roland Dreier <rolandd@cisco.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __4XX_PCIE_H +#define __4XX_PCIE_H + +#include <asm/ppc4xx.h> +#include <pci.h> + +#define DCRN_SDR0_CFGADDR	0x00e +#define DCRN_SDR0_CFGDATA	0x00f + +#if defined(CONFIG_440SPE) +#define CONFIG_SYS_PCIE_NR_PORTS	3 + +#define CONFIG_SYS_PCIE_ADDR_HIGH	0x0000000d + +#define DCRN_PCIE0_BASE		0x100 +#define DCRN_PCIE1_BASE		0x120 +#define DCRN_PCIE2_BASE		0x140 + +#define PCIE0_SDR		0x300 +#define PCIE1_SDR		0x340 +#define PCIE2_SDR		0x370 +#endif + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define CONFIG_SYS_PCIE_NR_PORTS	2 + +#define CONFIG_SYS_PCIE_ADDR_HIGH	0x0000000d + +#define DCRN_PCIE0_BASE		0x100 +#define DCRN_PCIE1_BASE		0x120 + +#define PCIE0_SDR		0x300 +#define PCIE1_SDR		0x340 +#endif + +#if defined(CONFIG_405EX) +#define CONFIG_SYS_PCIE_NR_PORTS	2 + +#define CONFIG_SYS_PCIE_ADDR_HIGH	0x00000000 + +#define	DCRN_PCIE0_BASE		0x040 +#define	DCRN_PCIE1_BASE		0x060 + +#define PCIE0_SDR		0x400 +#define PCIE1_SDR		0x440 +#endif + +#define PCIE0			DCRN_PCIE0_BASE +#define PCIE1			DCRN_PCIE1_BASE +#define PCIE2			DCRN_PCIE2_BASE + +#define DCRN_PEGPL_CFGBAH(base)		(base + 0x00) +#define DCRN_PEGPL_CFGBAL(base)		(base + 0x01) +#define DCRN_PEGPL_CFGMSK(base)		(base + 0x02) +#define DCRN_PEGPL_MSGBAH(base)		(base + 0x03) +#define DCRN_PEGPL_MSGBAL(base)		(base + 0x04) +#define DCRN_PEGPL_MSGMSK(base)		(base + 0x05) +#define DCRN_PEGPL_OMR1BAH(base)	(base + 0x06) +#define DCRN_PEGPL_OMR1BAL(base)	(base + 0x07) +#define DCRN_PEGPL_OMR1MSKH(base)	(base + 0x08) +#define DCRN_PEGPL_OMR1MSKL(base)	(base + 0x09) +#define DCRN_PEGPL_REGBAH(base)		(base + 0x12) +#define DCRN_PEGPL_REGBAL(base)		(base + 0x13) +#define DCRN_PEGPL_REGMSK(base)		(base + 0x14) +#define DCRN_PEGPL_SPECIAL(base)	(base + 0x15) +#define DCRN_PEGPL_CFG(base)		(base + 0x16) + +/* + * System DCRs (SDRs) + */ +#define PESDR0_PLLLCT1		0x03a0 +#define PESDR0_PLLLCT2		0x03a1 +#define PESDR0_PLLLCT3		0x03a2 + +/* common regs, at for all 4xx with PCIe core */ +#define SDRN_PESDR_UTLSET1(n)		(sdr_base(n) + 0x00) +#define SDRN_PESDR_UTLSET2(n)		(sdr_base(n) + 0x01) +#define SDRN_PESDR_DLPSET(n)		(sdr_base(n) + 0x02) +#define SDRN_PESDR_LOOP(n)		(sdr_base(n) + 0x03) +#define SDRN_PESDR_RCSSET(n)		(sdr_base(n) + 0x04) +#define SDRN_PESDR_RCSSTS(n)		(sdr_base(n) + 0x05) + +#if defined(CONFIG_440SPE) +#define SDRN_PESDR_HSSL0SET1(n)		(sdr_base(n) + 0x06) +#define SDRN_PESDR_HSSL0SET2(n)		(sdr_base(n) + 0x07) +#define SDRN_PESDR_HSSL0STS(n)		(sdr_base(n) + 0x08) +#define SDRN_PESDR_HSSL1SET1(n)		(sdr_base(n) + 0x09) +#define SDRN_PESDR_HSSL1SET2(n)		(sdr_base(n) + 0x0a) +#define SDRN_PESDR_HSSL1STS(n)		(sdr_base(n) + 0x0b) +#define SDRN_PESDR_HSSL2SET1(n)		(sdr_base(n) + 0x0c) +#define SDRN_PESDR_HSSL2SET2(n)		(sdr_base(n) + 0x0d) +#define SDRN_PESDR_HSSL2STS(n)		(sdr_base(n) + 0x0e) +#define SDRN_PESDR_HSSL3SET1(n)		(sdr_base(n) + 0x0f) +#define SDRN_PESDR_HSSL3SET2(n)		(sdr_base(n) + 0x10) +#define SDRN_PESDR_HSSL3STS(n)		(sdr_base(n) + 0x11) + +#define PESDR0_UTLSET1		0x0300 +#define PESDR0_UTLSET2		0x0301 +#define PESDR0_DLPSET		0x0302 +#define PESDR0_LOOP		0x0303 +#define PESDR0_RCSSET		0x0304 +#define PESDR0_RCSSTS		0x0305 +#define PESDR0_HSSL0SET1	0x0306 +#define PESDR0_HSSL0SET2	0x0307 +#define PESDR0_HSSL0STS		0x0308 +#define PESDR0_HSSL1SET1	0x0309 +#define PESDR0_HSSL1SET2	0x030a +#define PESDR0_HSSL1STS		0x030b +#define PESDR0_HSSL2SET1	0x030c +#define PESDR0_HSSL2SET2	0x030d +#define PESDR0_HSSL2STS		0x030e +#define PESDR0_HSSL3SET1	0x030f +#define PESDR0_HSSL3SET2	0x0310 +#define PESDR0_HSSL3STS		0x0311 +#define PESDR0_HSSL4SET1	0x0312 +#define PESDR0_HSSL4SET2	0x0313 +#define PESDR0_HSSL4STS		0x0314 +#define PESDR0_HSSL5SET1	0x0315 +#define PESDR0_HSSL5SET2	0x0316 +#define PESDR0_HSSL5STS		0x0317 +#define PESDR0_HSSL6SET1	0x0318 +#define PESDR0_HSSL6SET2	0x0319 +#define PESDR0_HSSL6STS		0x031a +#define PESDR0_HSSL7SET1	0x031b +#define PESDR0_HSSL7SET2	0x031c +#define PESDR0_HSSL7STS		0x031d +#define PESDR0_HSSCTLSET	0x031e +#define PESDR0_LANE_ABCD	0x031f +#define PESDR0_LANE_EFGH	0x0320 + +#define PESDR1_UTLSET1		0x0340 +#define PESDR1_UTLSET2		0x0341 +#define PESDR1_DLPSET		0x0342 +#define PESDR1_LOOP		0x0343 +#define PESDR1_RCSSET		0x0344 +#define PESDR1_RCSSTS		0x0345 +#define PESDR1_HSSL0SET1	0x0346 +#define PESDR1_HSSL0SET2	0x0347 +#define PESDR1_HSSL0STS		0x0348 +#define PESDR1_HSSL1SET1	0x0349 +#define PESDR1_HSSL1SET2	0x034a +#define PESDR1_HSSL1STS		0x034b +#define PESDR1_HSSL2SET1	0x034c +#define PESDR1_HSSL2SET2	0x034d +#define PESDR1_HSSL2STS		0x034e +#define PESDR1_HSSL3SET1	0x034f +#define PESDR1_HSSL3SET2	0x0350 +#define PESDR1_HSSL3STS		0x0351 +#define PESDR1_HSSCTLSET	0x0352 +#define PESDR1_LANE_ABCD	0x0353 + +#define PESDR2_UTLSET1		0x0370 +#define PESDR2_UTLSET2		0x0371 +#define PESDR2_DLPSET		0x0372 +#define PESDR2_LOOP		0x0373 +#define PESDR2_RCSSET		0x0374 +#define PESDR2_RCSSTS		0x0375 +#define PESDR2_HSSL0SET1	0x0376 +#define PESDR2_HSSL0SET2	0x0377 +#define PESDR2_HSSL0STS		0x0378 +#define PESDR2_HSSL1SET1	0x0379 +#define PESDR2_HSSL1SET2	0x037a +#define PESDR2_HSSL1STS		0x037b +#define PESDR2_HSSL2SET1	0x037c +#define PESDR2_HSSL2SET2	0x037d +#define PESDR2_HSSL2STS		0x037e +#define PESDR2_HSSL3SET1	0x037f +#define PESDR2_HSSL3SET2	0x0380 +#define PESDR2_HSSL3STS		0x0381 +#define PESDR2_HSSCTLSET	0x0382 +#define PESDR2_LANE_ABCD	0x0383 + +#elif defined(CONFIG_405EX) + +#define SDRN_PESDR_PHYSET1(n)		(sdr_base(n) + 0x06) +#define SDRN_PESDR_PHYSET2(n)		(sdr_base(n) + 0x07) +#define SDRN_PESDR_BIST(n)		(sdr_base(n) + 0x08) +#define SDRN_PESDR_LPB(n)		(sdr_base(n) + 0x0b) +#define SDRN_PESDR_PHYSTA(n)		(sdr_base(n) + 0x0c) + +#define PESDR0_UTLSET1		0x0400 +#define PESDR0_UTLSET2		0x0401 +#define PESDR0_DLPSET		0x0402 +#define PESDR0_LOOP		0x0403 +#define PESDR0_RCSSET		0x0404 +#define PESDR0_RCSSTS		0x0405 +#define PESDR0_PHYSET1		0x0406 +#define PESDR0_PHYSET2		0x0407 +#define PESDR0_BIST		0x0408 +#define PESDR0_LPB		0x040B +#define PESDR0_PHYSTA		0x040C + +#define PESDR1_UTLSET1		0x0440 +#define PESDR1_UTLSET2		0x0441 +#define PESDR1_DLPSET		0x0442 +#define PESDR1_LOOP		0x0443 +#define PESDR1_RCSSET		0x0444 +#define PESDR1_RCSSTS		0x0445 +#define PESDR1_PHYSET1		0x0446 +#define PESDR1_PHYSET2		0x0447 +#define PESDR1_BIST		0x0448 +#define PESDR1_LPB		0x044B +#define PESDR1_PHYSTA		0x044C + +#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) + +#define PESDR0_L0BIST		0x0308	/* PE0 L0 built in self test */ +#define PESDR0_L0BISTSTS	0x0309	/* PE0 L0 built in self test status */ +#define PESDR0_L0CDRCTL		0x030A	/* PE0 L0 CDR control */ +#define PESDR0_L0DRV		0x030B	/* PE0 L0 drive */ +#define PESDR0_L0REC		0x030C	/* PE0 L0 receiver */ +#define PESDR0_L0LPB		0x030D	/* PE0 L0 loopback */ +#define PESDR0_L0CLK		0x030E	/* PE0 L0 clocking */ +#define PESDR0_PHY_CTL_RST	0x030F	/* PE0 PHY control reset */ +#define PESDR0_RSTSTA		0x0310	/* PE0 reset status */ +#define PESDR0_OBS		0x0311	/* PE0 observation register */ +#define PESDR0_L0ERRC		0x0320	/* PE0 L0 error counter */ + +#define PESDR1_L0BIST		0x0348	/* PE1 L0 built in self test */ +#define PESDR1_L1BIST		0x0349	/* PE1 L1 built in self test */ +#define PESDR1_L2BIST		0x034A	/* PE1 L2 built in self test */ +#define PESDR1_L3BIST		0x034B	/* PE1 L3 built in self test */ +#define PESDR1_L0BISTSTS	0x034C	/* PE1 L0 built in self test status */ +#define PESDR1_L1BISTSTS	0x034D	/* PE1 L1 built in self test status */ +#define PESDR1_L2BISTSTS	0x034E	/* PE1 L2 built in self test status */ +#define PESDR1_L3BISTSTS	0x034F	/* PE1 L3 built in self test status */ +#define PESDR1_L0CDRCTL		0x0350	/* PE1 L0 CDR control */ +#define PESDR1_L1CDRCTL		0x0351	/* PE1 L1 CDR control */ +#define PESDR1_L2CDRCTL		0x0352	/* PE1 L2 CDR control */ +#define PESDR1_L3CDRCTL		0x0353	/* PE1 L3 CDR control */ +#define PESDR1_L0DRV		0x0354	/* PE1 L0 drive */ +#define PESDR1_L1DRV		0x0355	/* PE1 L1 drive */ +#define PESDR1_L2DRV		0x0356	/* PE1 L2 drive */ +#define PESDR1_L3DRV		0x0357	/* PE1 L3 drive */ +#define PESDR1_L0REC		0x0358	/* PE1 L0 receiver */ +#define PESDR1_L1REC		0x0359	/* PE1 L1 receiver */ +#define PESDR1_L2REC		0x035A	/* PE1 L2 receiver */ +#define PESDR1_L3REC		0x035B	/* PE1 L3 receiver */ +#define PESDR1_L0LPB		0x035C	/* PE1 L0 loopback */ +#define PESDR1_L1LPB		0x035D	/* PE1 L1 loopback */ +#define PESDR1_L2LPB		0x035E	/* PE1 L2 loopback */ +#define PESDR1_L3LPB		0x035F	/* PE1 L3 loopback */ +#define PESDR1_L0CLK		0x0360	/* PE1 L0 clocking */ +#define PESDR1_L1CLK		0x0361	/* PE1 L1 clocking */ +#define PESDR1_L2CLK		0x0362	/* PE1 L2 clocking */ +#define PESDR1_L3CLK		0x0363	/* PE1 L3 clocking */ +#define PESDR1_PHY_CTL_RST	0x0364	/* PE1 PHY control reset */ +#define PESDR1_RSTSTA		0x0365	/* PE1 reset status */ +#define PESDR1_OBS		0x0366	/* PE1 observation register */ +#define PESDR1_L0ERRC		0x0368	/* PE1 L0 error counter */ +#define PESDR1_L1ERRC		0x0369	/* PE1 L1 error counter */ +#define PESDR1_L2ERRC		0x036A	/* PE1 L2 error counter */ +#define PESDR1_L3ERRC		0x036B	/* PE1 L3 error counter */ +#define PESDR0_IHS1		0x036C	/* PE interrupt handler interfact setting 1 */ +#define PESDR0_IHS2		0x036D	/* PE interrupt handler interfact setting 2 */ + +#endif + +/* SDR Bit Mappings */ +#define PESDRx_RCSSET_HLDPLB	0x10000000 +#define PESDRx_RCSSET_RSTGU	0x01000000 +#define PESDRx_RCSSET_RDY       0x00100000 +#define PESDRx_RCSSET_RSTDL     0x00010000 +#define PESDRx_RCSSET_RSTPYN    0x00001000 + +#define PESDRx_RCSSTS_PLBIDL	0x10000000 +#define PESDRx_RCSSTS_HRSTRQ	0x01000000 +#define PESDRx_RCSSTS_PGRST	0x00100000 +#define PESDRx_RCSSTS_VC0ACT	0x00010000 +#define PESDRx_RCSSTS_BMEN	0x00000100 + +/* + * UTL register offsets + */ +#define	PEUTL_PBCTL		0x00 +#define PEUTL_PBBSZ		0x20 +#define PEUTL_OPDBSZ		0x68 +#define PEUTL_IPHBSZ		0x70 +#define PEUTL_IPDBSZ		0x78 +#define PEUTL_OUTTR		0x90 +#define PEUTL_INTR		0x98 +#define PEUTL_PCTL		0xa0 +#define	PEUTL_RCSTA		0xb0 +#define PEUTL_RCIRQEN		0xb8 + +/* + * Config space register offsets + */ +#define PECFG_BAR0LMPA		0x210 +#define PECFG_BAR0HMPA		0x214 +#define PECFG_BAR1MPA		0x218 +#define PECFG_BAR2LMPA		0x220 +#define PECFG_BAR2HMPA		0x224 + +#define PECFG_PIMEN		0x33c +#define PECFG_PIM0LAL		0x340 +#define PECFG_PIM0LAH		0x344 +#define PECFG_PIM1LAL		0x348 +#define PECFG_PIM1LAH		0x34c +#define PECFG_PIM01SAL		0x350 +#define PECFG_PIM01SAH		0x354 + +#define PECFG_POM0LAL		0x380 +#define PECFG_POM0LAH		0x384 + +#define SDR_READ(offset) ({\ +	mtdcr(DCRN_SDR0_CFGADDR, offset); \ +	mfdcr(DCRN_SDR0_CFGDATA);}) + +#define SDR_WRITE(offset, data) ({\ +	mtdcr(DCRN_SDR0_CFGADDR, offset); \ +	mtdcr(DCRN_SDR0_CFGDATA,data);}) + +#define GPL_DMER_MASK_DISA	0x02000000 + +#define U64_TO_U32_LOW(val)	((u32)((val) & 0x00000000ffffffffULL)) +#define U64_TO_U32_HIGH(val)	((u32)((val) >> 32)) + +/* + * Prototypes + */ +int ppc4xx_init_pcie(void); +int ppc4xx_init_pcie_rootport(int port); +int ppc4xx_init_pcie_endport(int port); +void ppc4xx_setup_pcie_rootpoint(struct pci_controller *hose, int port); +int ppc4xx_setup_pcie_endpoint(struct pci_controller *hose, int port); +int pcie_hose_scan(struct pci_controller *hose, int bus); + +/* + * Function to determine root port or endport from env variable. + */ +static inline int is_end_point(int port) +{ +	char s[10], *tk; +	char *pcie_mode = getenv("pcie_mode"); + +	if (pcie_mode == NULL) +		return 0; + +	strcpy(s, pcie_mode); +	tk = strtok(s, ":"); + +	switch (port) { +	case 0: +		if (tk != NULL) { +			if (!(strcmp(tk, "ep") && strcmp(tk, "EP"))) +				return 1; +			else +				return 0; +		} +		else +			return 0; + +	case 1: +		tk = strtok(NULL, ":"); +		if (tk != NULL) { +			if (!(strcmp(tk, "ep") && strcmp(tk, "EP"))) +				return 1; +			else +				return 0; +		} +		else +			return 0; + +	case 2: +		tk = strtok(NULL, ":"); +		if (tk != NULL) +			tk = strtok(NULL, ":"); +		if (tk != NULL) { +			if (!(strcmp(tk, "ep") && strcmp(tk, "EP"))) +				return 1; +			else +				return 0; +		} +		else +			return 0; +	} + +	return 0; +} + +#if defined(PCIE0_SDR) +static inline u32 sdr_base(int port) +{ +	switch (port) { +	default:	/* to satisfy compiler */ +	case 0: +		return PCIE0_SDR; +	case 1: +		return PCIE1_SDR; +#if CONFIG_SYS_PCIE_NR_PORTS > 2 +	case 2: +		return PCIE2_SDR; +#endif +	} +} +#endif /* defined(PCIE0_SDR) */ + +#endif /* __4XX_PCIE_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/5xx_immap.h b/roms/u-boot/arch/powerpc/include/asm/5xx_immap.h new file mode 100644 index 00000000..0a333c2a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/5xx_immap.h @@ -0,0 +1,424 @@ +/* + * (C) Copyright 2003 + * Martin Winistoerfer, martinwinistoerfer@gmx.ch. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +/* + * File:		5xx_immap.h + * + * Discription:		MPC555 Internal Memory Map + * + */ + +#ifndef __IMMAP_5XX__ +#define __IMMAP_5XX__ + +/* System Configuration Registers. +*/ +typedef	struct sys_conf { +	uint sc_siumcr; +	uint sc_sypcr; +	char res1[6]; +	ushort sc_swsr; +	uint sc_sipend; +	uint sc_simask; +	uint sc_siel; +	uint sc_sivec; +	uint sc_tesr; +	uint sc_sgpiodt1; +	uint sc_sgpiodt2; +	uint sc_sgpiocr; +	uint sc_emcr; +	uint sc_res1aa; +	uint sc_res1ab; +	uint sc_pdmcr; +	char res3[192]; +} sysconf5xx_t; + + +/* Memory Controller Registers. +*/ +typedef struct	mem_ctlr { +	uint memc_br0; +	uint memc_or0; +	uint memc_br1; +	uint memc_or1; +	uint memc_br2; +	uint memc_or2; +	uint memc_br3; +	uint memc_or3; +	char res1[32]; +	uint memc_dmbr; +	uint memc_dmor; +	char res2[48]; +	ushort memc_mstat; +	ushort memc_res4a; +	char res3[132]; +} memctl5xx_t; + +/* System Integration Timers. +*/ +typedef struct	sys_int_timers { +	ushort sit_tbscr; +	char res1[2]; +	uint sit_tbref0; +	uint sit_tbref1; +	char res2[20]; +	ushort sit_rtcsc; +	char res3[2]; +	uint sit_rtc; +	uint sit_rtsec; +	uint sit_rtcal; +	char res4[16]; +	ushort sit_piscr; +	char res5[2]; +	uint sit_pitc; +	uint sit_pitr; +	char res6[52]; +} sit5xx_t; + +/* Clocks and Reset +*/ +typedef struct clk_and_reset { +	uint car_sccr; +	uint car_plprcr; +	ushort car_rsr; +	ushort car_res7a; +	ushort car_colir; +	ushort car_res7b; +	ushort car_vsrmcr; +	ushort car_res7c; +	char res1[108]; + +} car5xx_t; + +#define TBSCR_TBE		((ushort)0x0001) + +/* System Integration Timer Keys +*/ +typedef struct sitk { +	uint sitk_tbscrk; +	uint sitk_tbref0k; +	uint sitk_tbref1k; +	uint sitk_tbk; +	char res1[16]; +	uint sitk_rtcsck; +	uint sitk_rtck; +	uint sitk_rtseck; +	uint sitk_rtcalk; +	char res2[16]; +	uint sitk_piscrk; +	uint sitk_pitck; +	char res3[56]; +} sitk5xx_t; + +/* Clocks and Reset Keys. +*/ +typedef struct cark { +	uint	cark_sccrk; +	uint	cark_plprcrk; +	uint	cark_rsrk; +	char	res1[1140]; +} cark8xx_t; + +/* The key to unlock registers maintained by keep-alive power. +*/ +#define KAPWR_KEY	((unsigned int)0x55ccaa33) + +/* Flash Configuration +*/ +typedef struct fl { +	uint fl_cmfmcr; +	uint fl_cmftst; +	uint fl_cmfctl; +	char res1[52]; +} fl5xx_t; + +/* Dpram Control +*/ +typedef struct dprc { +	ushort dprc_dptmcr; +	ushort dprc_ramtst; +	ushort dprc_rambar; +	ushort dprc_misrh; +	ushort dprc_misrl; +	ushort dprc_miscnt; +} dprc5xx_t; + +/* Time Processor Unit +*/ +typedef struct tpu { +	ushort tpu_tpumcr; +	ushort tpu_tcr; +	ushort tpu_dscr; +	ushort tpu_dssr; +	ushort tpu_ticr; +	ushort tpu_cier; +	ushort tpu_cfsr0; +	ushort tpu_cfsr1; +	ushort tpu_cfsr2; +	ushort tpu_cfsr3; +	ushort tpu_hsqr0; +	ushort tpu_hsqr1; +	ushort tpu_hsrr0; +	ushort tpu_hsrr1; +	ushort tpu_cpr0; +	ushort tpu_cpr1; +	ushort tpu_cisr; +	ushort tpu_lr; +	ushort tpu_sglr; +	ushort tpu_dcnr; +	ushort tpu_tpumcr2; +	ushort tpu_tpumcr3; +	ushort tpu_isdr; +	ushort tpu_iscr; +	char   res1[208]; +	char   tpu[16][16]; +	char   res2[512]; +} tpu5xx_t; + +/* QADC +*/ +typedef struct qadc { +	ushort qadc_64mcr; +	ushort qadc_64test; +	ushort qadc_64int; +	u_char  qadc_portqa; +	u_char  qadc_portqb; +	ushort qadc_ddrqa; +	ushort qadc_qacr0; +	ushort qadc_qacr1; +	ushort qadc_qacr2; +	ushort qadc_qasr0; +	ushort qadc_qasr1; +	char   res1[492]; +       /* command convertion word table */ +	ushort qadc_ccw[64]; +       /* result word table, unsigned right justified */ +	ushort qadc_rjurr[64]; +       /* result word table, signed left justified */ +	ushort qadc_ljsrr[64]; +       /* result word table, unsigned left justified */ +	ushort qadc_ljurr[64]; +} qadc5xx_t; + +/* QSMCM +*/ +typedef struct qsmcm { +	ushort qsmcm_qsmcr; +	ushort qsmcm_qtest; +	ushort qsmcm_qdsci_il; +	ushort qsmcm_qspi_il; +	ushort qsmcm_scc1r0; +	ushort qsmcm_scc1r1; +	ushort qsmcm_sc1sr; +	ushort qsmcm_sc1dr; +	char   res1[2]; +	char   res2[2]; +	ushort qsmcm_portqs; +	u_char qsmcm_pqspar; +	u_char qsmcm_ddrqs; +	ushort qsmcm_spcr0; +	ushort qsmcm_spcr1; +	ushort qsmcm_spcr2; +	u_char qsmcm_spcr3; +	u_char qsmcm_spsr; +	ushort qsmcm_scc2r0; +	ushort qsmcm_scc2r1; +	ushort qsmcm_sc2sr; +	ushort qsmcm_sc2dr; +	ushort qsmcm_qsci1cr; +	ushort qsmcm_qsci1sr; +	ushort qsmcm_sctq[16]; +	ushort qsmcm_scrq[16]; +	char   res3[212]; +	ushort qsmcm_recram[32]; +	ushort qsmcm_tranram[32]; +	u_char qsmcm_comdram[32]; +	char   res[3616]; +} qsmcm5xx_t; + + +/* MIOS +*/ + +typedef struct mios { +	ushort mios_mpwmsm0perr;                 /* mpwmsm0 */ +	ushort mios_mpwmsm0pulr; +	ushort mios_mpwmsm0cntr; +	ushort mios_mpwmsm0scr; +	ushort mios_mpwmsm1perr;                 /* mpwmsm1 */ +	ushort mios_mpwmsm1pulr; +	ushort mios_mpwmsm1cntr; +	ushort mios_mpwmsm1scr; +	ushort mios_mpwmsm2perr;                 /* mpwmsm2 */ +	ushort mios_mpwmsm2pulr; +	ushort mios_mpwmsm2cntr; +	ushort mios_mpwmsm2scr; +	ushort mios_mpwmsm3perr;                 /* mpwmsm3 */ +	ushort mios_mpwmsm3pulr; +	ushort mios_mpwmsm3cntr; +	ushort mios_mpwmsm3scr; +	char res1[16]; +	ushort mios_mmcsm6cnt;                   /* mmcsm6 */ +	ushort mios_mmcsm6mlr; +	ushort mios_mmcsm6scrd, mmcsm6scr; +	char res2[32]; +	ushort mios_mdasm11ar;                   /* mdasm11 */ +	ushort mios_mdasm11br; +	ushort mios_mdasm11scrd, mdasm11scr; +	ushort mios_mdasm12ar;                   /* mdasm12 */ +	ushort mios_mdasm12br; +	ushort mios_mdasm12scrd, mdasm12scr; +	ushort mios_mdasm13ar;                   /* mdasm13 */ +	ushort mios_mdasm13br; +	ushort mios_mdasm13scrd, mdasm13scr; +	ushort mios_mdasm14ar;                   /* mdasm14 */ +	ushort mios_mdasm14br; +	ushort mios_mdasm14scrd, mdasm14scr; +	ushort mios_mdasm15ar;                   /* mdasm15 */ +	ushort mios_mdasm15br; +	ushort mios_mdasm15scrd, mdasm15scr; +	ushort mios_mpwmsm16perr;                /* mpwmsm16 */ +	ushort mios_mpwmsm16pulr; +	ushort mios_mpwmsm16cntr; +	ushort mios_mpwmsm16scr; +	ushort mios_mpwmsm17perr;                /* mpwmsm17 */ +	ushort mios_mpwmsm17pulr; +	ushort mios_mpwmsm17cntr; +	ushort mios_mpwmsm17scr; +	ushort mios_mpwmsm18perr;                /* mpwmsm18 */ +	ushort mios_mpwmsm18pulr; +	ushort mios_mpwmsm18cntr; +	ushort mios_mpwmsm18scr; +	ushort mios_mpwmsm19perr;                /* mpwmsm19 */ +	ushort mios_mpwmsm19pulr; +	ushort mios_mpwmsm19cntr; +	ushort mios_mpwmsm19scr; +	char res3[16]; +	ushort mios_mmcsm22cnt;                  /* mmcsm22 */ +	ushort mios_mmcsm22mlr; +	ushort mios_mmcsm22scrd, mmcsm22scr; +	char res4[32]; +	ushort mios_mdasm27ar;                   /* mdasm27 */ +	ushort mios_mdasm27br; +	ushort mios_mdasm27scrd, mdasm27scr; +	ushort mios_mdasm28ar;                   /*mdasm28 */ +	ushort mios_mdasm28br; +	ushort mios_mdasm28scrd, mdasm28scr; +	ushort mios_mdasm29ar;                   /* mdasm29 */ +	ushort mios_mdasm29br; +	ushort mios_mdasm29scrd, mdasm29scr; +	ushort mios_mdasm30ar;                   /* mdasm30 */ +	ushort mios_mdasm30br; +	ushort mios_mdasm30scrd, mdasm30scr; +	ushort mios_mdasm31ar;                   /* mdasm31 */ +	ushort mios_mdasm31br; +	ushort mios_mdasm31scrd, mdasm31scr; +	ushort mios_mpiosm32dr; +	ushort mios_mpiosm32ddr; +	char res5[1788]; +	ushort mios_mios1tpcr; +	char mios_res13[2]; +	ushort mios_mios1vnr; +	ushort mios_mios1mcr; +	char res6[12]; +	ushort mios_res42z; +	ushort mios_mcpsmscr; +	char res7[1000]; +	ushort mios_mios1sr0; +	char res12[2]; +	ushort mios_mios1er0; +	ushort mios_mios1rpr0; +	char res8[40]; +	ushort mios_mios1lvl0; +	char res9[14]; +	ushort mios_mios1sr1; +	char res10[2]; +	ushort mios_mios1er1; +	ushort mios_mios1rpr1; +	char res11[40]; +	ushort mios_mios1lvl1; +	char res13[1038]; +} mios5xx_t; + +/* Toucan Module +*/ +typedef struct tcan { +	ushort tcan_tcnmcr; +	ushort tcan_cantcr; +	ushort tcan_canicr; +	u_char tcan_canctrl0; +	u_char tcan_canctrl1; +	u_char tcan_presdiv; +	u_char tcan_canctrl2; +	ushort tcan_timer; +	char res1[4]; +	ushort tcan_rxgmskhi; +	ushort tcan_rxgmsklo; +	ushort tcan_rx14mskhi; +	ushort tcan_rx14msklo; +	ushort tcan_rx15mskhi; +	ushort tcan_rx15msklo; +	char res2[4]; +	ushort tcan_estat; +	ushort tcan_imask; +	ushort tcan_iflag; +	u_char tcan_rxectr; +	u_char tcan_txectr; +	char res3[88]; +	struct { +	       ushort scr; +	       ushort id_high; +	       ushort id_low; +	       u_char data[8]; +		   char res4[2]; +	    } tcan_mbuff[16]; +	    char res5[640]; +} tcan5xx_t; + +/* UIMB +*/ +typedef struct uimb { +	uint uimb_umcr; +	char res1[12]; +	uint uimb_utstcreg; +	char res2[12]; +	uint uimb_uipend; +} uimb5xx_t; + + +/* Internal Memory Map MPC555 +*/ +typedef struct immap { +	char               res1[262144];	/* CMF Flash A 256 Kbytes */ +	char               res2[196608];	/* CMF Flash B 192 Kbytes */ +	char               res3[2670592];	/* Reserved for Flash */ +	sysconf5xx_t       im_siu_conf;		/* SIU Configuration */ +	memctl5xx_t	   im_memctl;		/* Memory Controller */ +	sit5xx_t           im_sit;		/* System Integration Timers */ +	car5xx_t	   im_clkrst;		/* Clocks and Reset */ +	sitk5xx_t          im_sitk;		/* System Integration Timer Keys*/ +	cark8xx_t          im_clkrstk;		/* Clocks and Resert Keys */ +	fl5xx_t	           im_fla;	        /* Flash Module A */ +	fl5xx_t	           im_flb;	        /* Flash Module B */ +	char               res4[14208];		/* Reserved for SIU */ +	dprc5xx_t	   im_dprc;		/* Dpram Control Register */ +	char               res5[8180];		/* Reserved */ +	char               dptram[6144];	/* Dptram */ +	char               res6[2048];		/* Reserved */ +	tpu5xx_t	   im_tpua;		/* Time Proessing Unit A */ +	tpu5xx_t	   im_tpub;		/* Time Processing Unit B */ +	qadc5xx_t	   im_qadca;		/* QADC A */ +	qadc5xx_t	   im_qadcb;		/* QADC B */ +	qsmcm5xx_t	   im_qsmcm;		/* SCI and SPI */ +	mios5xx_t	   im_mios;		/* MIOS */ +	tcan5xx_t          im_tcana;		/* Toucan A */ +	tcan5xx_t          im_tcanb;		/* Toucan B */ +	char               res7[1792];		/* Reserved */ +	uimb5xx_t          im_uimb;	        /* UIMB */ +} immap_t; + +#endif /* __IMMAP_5XX__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/8xx_immap.h b/roms/u-boot/arch/powerpc/include/asm/8xx_immap.h new file mode 100644 index 00000000..dfaddb6f --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/8xx_immap.h @@ -0,0 +1,515 @@ +/* + * MPC8xx Internal Memory Map + * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) + * + * The I/O on the MPC860 is comprised of blocks of special registers + * and the dual port ram for the Communication Processor Module. + * Within this space are functional units such as the SIU, memory + * controller, system timers, and other control functions.  It is + * a combination that I found difficult to separate into logical + * functional files.....but anyone else is welcome to try.  -- Dan + */ +#ifndef __IMMAP_8XX__ +#define __IMMAP_8XX__ + +/* System configuration registers. +*/ +typedef	struct sys_conf { +	uint	sc_siumcr; +	uint	sc_sypcr; +	uint	sc_swt; +	char	res1[2]; +	ushort	sc_swsr; +	uint	sc_sipend; +	uint	sc_simask; +	uint	sc_siel; +	uint	sc_sivec; +	uint	sc_tesr; +	char	res2[0xc]; +	uint	sc_sdcr; +	char	res3[0x4c]; +} sysconf8xx_t; + +/* PCMCIA configuration registers. +*/ +typedef struct pcmcia_conf { +	uint	pcmc_pbr0; +	uint	pcmc_por0; +	uint	pcmc_pbr1; +	uint	pcmc_por1; +	uint	pcmc_pbr2; +	uint	pcmc_por2; +	uint	pcmc_pbr3; +	uint	pcmc_por3; +	uint	pcmc_pbr4; +	uint	pcmc_por4; +	uint	pcmc_pbr5; +	uint	pcmc_por5; +	uint	pcmc_pbr6; +	uint	pcmc_por6; +	uint	pcmc_pbr7; +	uint	pcmc_por7; +	char	res1[0x20]; +	uint	pcmc_pgcra; +	uint	pcmc_pgcrb; +	uint	pcmc_pscr; +	char	res2[4]; +	uint	pcmc_pipr; +	char	res3[4]; +	uint	pcmc_per; +	char	res4[4]; +} pcmconf8xx_t; + +/* Memory controller registers. +*/ +typedef struct	mem_ctlr { +	uint	memc_br0; +	uint	memc_or0; +	uint	memc_br1; +	uint	memc_or1; +	uint	memc_br2; +	uint	memc_or2; +	uint	memc_br3; +	uint	memc_or3; +	uint	memc_br4; +	uint	memc_or4; +	uint	memc_br5; +	uint	memc_or5; +	uint	memc_br6; +	uint	memc_or6; +	uint	memc_br7; +	uint	memc_or7; +	char	res1[0x24]; +	uint	memc_mar; +	uint	memc_mcr; +	char	res2[4]; +	uint	memc_mamr; +	uint	memc_mbmr; +	ushort	memc_mstat; +	ushort	memc_mptpr; +	uint	memc_mdr; +	char	res3[0x80]; +} memctl8xx_t; + +/* System Integration Timers. +*/ +typedef struct	sys_int_timers { +	ushort	sit_tbscr; +	char	res0[0x02]; +	uint	sit_tbreff0; +	uint	sit_tbreff1; +	char	res1[0x14]; +	ushort	sit_rtcsc; +	char	res2[0x02]; +	uint	sit_rtc; +	uint	sit_rtsec; +	uint	sit_rtcal; +	char	res3[0x10]; +	ushort	sit_piscr; +	char	res4[2]; +	uint	sit_pitc; +	uint	sit_pitr; +	char	res5[0x34]; +} sit8xx_t; + +#define TBSCR_TBIRQ_MASK	((ushort)0xff00) +#define TBSCR_REFA		((ushort)0x0080) +#define TBSCR_REFB		((ushort)0x0040) +#define TBSCR_REFAE		((ushort)0x0008) +#define TBSCR_REFBE		((ushort)0x0004) +#define TBSCR_TBF		((ushort)0x0002) +#define TBSCR_TBE		((ushort)0x0001) + +#define RTCSC_RTCIRQ_MASK	((ushort)0xff00) +#define RTCSC_SEC		((ushort)0x0080) +#define RTCSC_ALR		((ushort)0x0040) +#define RTCSC_38K		((ushort)0x0010) +#define RTCSC_SIE		((ushort)0x0008) +#define RTCSC_ALE		((ushort)0x0004) +#define RTCSC_RTF		((ushort)0x0002) +#define RTCSC_RTE		((ushort)0x0001) + +#define PISCR_PIRQ_MASK		((ushort)0xff00) +#define PISCR_PS		((ushort)0x0080) +#define PISCR_PIE		((ushort)0x0004) +#define PISCR_PTF		((ushort)0x0002) +#define PISCR_PTE		((ushort)0x0001) + +/* Clocks and Reset. +*/ +typedef struct clk_and_reset { +	uint	car_sccr; +	uint	car_plprcr; +	uint	car_rsr; +	char	res[0x74];        /* Reserved area                  */ +} car8xx_t; + +/* System Integration Timers keys. +*/ +typedef struct sitk { +	uint	sitk_tbscrk; +	uint	sitk_tbreff0k; +	uint	sitk_tbreff1k; +	uint	sitk_tbk; +	char	res1[0x10]; +	uint	sitk_rtcsck; +	uint	sitk_rtck; +	uint	sitk_rtseck; +	uint	sitk_rtcalk; +	char	res2[0x10]; +	uint	sitk_piscrk; +	uint	sitk_pitck; +	char	res3[0x38]; +} sitk8xx_t; + +/* Clocks and reset keys. +*/ +typedef struct cark { +	uint	cark_sccrk; +	uint	cark_plprcrk; +	uint	cark_rsrk; +	char	res[0x474]; +} cark8xx_t; + +/* The key to unlock registers maintained by keep-alive power. +*/ +#define KAPWR_KEY	((unsigned int)0x55ccaa33) + +/* Video interface.  MPC823 Only. +*/ +typedef struct vid823 { +	ushort	vid_vccr; +	ushort	res1; +	u_char	vid_vsr; +	u_char	res2; +	u_char	vid_vcmr; +	u_char	res3; +	uint	vid_vbcb; +	uint	res4; +	uint	vid_vfcr0; +	uint	vid_vfaa0; +	uint	vid_vfba0; +	uint	vid_vfcr1; +	uint	vid_vfaa1; +	uint	vid_vfba1; +	u_char	res5[0x18]; +} vid823_t; + +/* LCD interface.  823 Only. +*/ +typedef struct lcd { +	uint	lcd_lccr; +	uint	lcd_lchcr; +	uint	lcd_lcvcr; +	char	res1[4]; +	uint	lcd_lcfaa; +	uint	lcd_lcfba; +	char	lcd_lcsr; +	char	res2[0x7]; +} lcd823_t; + +/* I2C +*/ +typedef struct i2c { +	u_char	i2c_i2mod; +	char	res1[3]; +	u_char	i2c_i2add; +	char	res2[3]; +	u_char	i2c_i2brg; +	char	res3[3]; +	u_char	i2c_i2com; +	char	res4[3]; +	u_char	i2c_i2cer; +	char	res5[3]; +	u_char	i2c_i2cmr; +	char	res6[0x8b]; +} i2c8xx_t; + +/* DMA control/status registers. +*/ +typedef struct sdma_csr { +	char	res1[4]; +	uint	sdma_sdar; +	u_char	sdma_sdsr; +	char	res3[3]; +	u_char	sdma_sdmr; +	char	res4[3]; +	u_char	sdma_idsr1; +	char	res5[3]; +	u_char	sdma_idmr1; +	char	res6[3]; +	u_char	sdma_idsr2; +	char	res7[3]; +	u_char	sdma_idmr2; +	char	res8[0x13]; +} sdma8xx_t; + +/* Communication Processor Module Interrupt Controller. +*/ +typedef struct cpm_ic { +	ushort	cpic_civr; +	char	res[0xe]; +	uint	cpic_cicr; +	uint	cpic_cipr; +	uint	cpic_cimr; +	uint	cpic_cisr; +} cpic8xx_t; + +/* Input/Output Port control/status registers. +*/ +typedef struct io_port { +	ushort	iop_padir; +	ushort	iop_papar; +	ushort	iop_paodr; +	ushort	iop_padat; +	char	res1[8]; +	ushort	iop_pcdir; +	ushort	iop_pcpar; +	ushort	iop_pcso; +	ushort	iop_pcdat; +	ushort	iop_pcint; +	char	res2[6]; +	ushort	iop_pddir; +	ushort	iop_pdpar; +	char	res3[2]; +	ushort	iop_pddat; +	uint	utmode; +	char	res4[4]; +} iop8xx_t; + +/* Communication Processor Module Timers +*/ +typedef struct cpm_timers { +	ushort	cpmt_tgcr; +	char	res1[0xe]; +	ushort	cpmt_tmr1; +	ushort	cpmt_tmr2; +	ushort	cpmt_trr1; +	ushort	cpmt_trr2; +	ushort	cpmt_tcr1; +	ushort	cpmt_tcr2; +	ushort	cpmt_tcn1; +	ushort	cpmt_tcn2; +	ushort	cpmt_tmr3; +	ushort	cpmt_tmr4; +	ushort	cpmt_trr3; +	ushort	cpmt_trr4; +	ushort	cpmt_tcr3; +	ushort	cpmt_tcr4; +	ushort	cpmt_tcn3; +	ushort	cpmt_tcn4; +	ushort	cpmt_ter1; +	ushort	cpmt_ter2; +	ushort	cpmt_ter3; +	ushort	cpmt_ter4; +	char	res2[8]; +} cpmtimer8xx_t; + +/* Finally, the Communication Processor stuff..... +*/ +typedef struct scc {		/* Serial communication channels */ +	uint	scc_gsmrl; +	uint	scc_gsmrh; +	ushort	scc_psmr; +	char	res1[2]; +	ushort	scc_todr; +	ushort	scc_dsr; +	ushort	scc_scce; +	char	res2[2]; +	ushort	scc_sccm; +	char	res3; +	u_char	scc_sccs; +	char	res4[8]; +} scc_t; + +typedef struct smc {		/* Serial management channels */ +	char	res1[2]; +	ushort	smc_smcmr; +	char	res2[2]; +	u_char	smc_smce; +	char	res3[3]; +	u_char	smc_smcm; +	char	res4[5]; +} smc_t; + +/* MPC860T Fast Ethernet Controller.  It isn't part of the CPM, but + * it fits within the address space. + */ + +typedef struct fec { +	uint	fec_addr_low;		/* lower 32 bits of station address	*/ +	ushort	fec_addr_high;		/* upper 16 bits of station address	*/ +	ushort	res1;			/* reserved				*/ +	uint	fec_hash_table_high;	/* upper 32-bits of hash table		*/ +	uint	fec_hash_table_low;	/* lower 32-bits of hash table		*/ +	uint	fec_r_des_start;	/* beginning of Rx descriptor ring	*/ +	uint	fec_x_des_start;	/* beginning of Tx descriptor ring	*/ +	uint	fec_r_buff_size;	/* Rx buffer size			*/ +	uint	res2[9];		/* reserved				*/ +	uint	fec_ecntrl;		/* ethernet control register		*/ +	uint	fec_ievent;		/* interrupt event register		*/ +	uint	fec_imask;		/* interrupt mask register		*/ +	uint	fec_ivec;		/* interrupt level and vector status	*/ +	uint	fec_r_des_active;	/* Rx ring updated flag			*/ +	uint	fec_x_des_active;	/* Tx ring updated flag			*/ +	uint	res3[10];		/* reserved				*/ +	uint	fec_mii_data;		/* MII data register			*/ +	uint	fec_mii_speed;		/* MII speed control register		*/ +	uint	res4[17];		/* reserved				*/ +	uint	fec_r_bound;		/* end of RAM (read-only)		*/ +	uint	fec_r_fstart;		/* Rx FIFO start address		*/ +	uint	res5[6];		/* reserved				*/ +	uint	fec_x_fstart;		/* Tx FIFO start address		*/ +	uint	res6[17];		/* reserved				*/ +	uint	fec_fun_code;		/* fec SDMA function code		*/ +	uint	res7[3];		/* reserved				*/ +	uint	fec_r_cntrl;		/* Rx control register			*/ +	uint	fec_r_hash;		/* Rx hash register			*/ +	uint	res8[14];		/* reserved				*/ +	uint	fec_x_cntrl;		/* Tx control register			*/ +	uint	res9[0x1e];		/* reserved				*/ +} fec_t; + +/* The FEC and LCD color map share the same address space.... + * I guess we will never see an 823T :-). + */ +union fec_lcd { +	fec_t	fl_un_fec; +	u_char	fl_un_cmap[0x200]; +}; + +typedef struct comm_proc { +	/* General control and status registers. +	*/ +	ushort	cp_cpcr; +	u_char	res1[2]; +	ushort	cp_rccr; +	u_char	res2; +	u_char	cp_rmds; +	u_char	res3[4]; +	ushort	cp_cpmcr1; +	ushort	cp_cpmcr2; +	ushort	cp_cpmcr3; +	ushort	cp_cpmcr4; +	u_char	res4[2]; +	ushort	cp_rter; +	u_char	res5[2]; +	ushort	cp_rtmr; +	u_char	res6[0x14]; + +	/* Baud rate generators. +	*/ +	uint	cp_brgc1; +	uint	cp_brgc2; +	uint	cp_brgc3; +	uint	cp_brgc4; + +	/* Serial Communication Channels. +	*/ +	scc_t	cp_scc[4]; + +	/* Serial Management Channels. +	*/ +	smc_t	cp_smc[2]; + +	/* Serial Peripheral Interface. +	*/ +	ushort	cp_spmode; +	u_char	res7[4]; +	u_char	cp_spie; +	u_char	res8[3]; +	u_char	cp_spim; +	u_char	res9[2]; +	u_char	cp_spcom; +	u_char	res10[2]; + +	/* Parallel Interface Port. +	*/ +	u_char	res11[2]; +	ushort	cp_pipc; +	u_char	res12[2]; +	ushort	cp_ptpr; +	uint	cp_pbdir; +	uint	cp_pbpar; +	u_char	res13[2]; +	ushort	cp_pbodr; +	uint	cp_pbdat; + +	/* Port E - MPC87x/88x only. +	 */ +	uint	cp_pedir; +	uint	cp_pepar; +	uint	cp_peso; +	uint	cp_peodr; +	uint	cp_pedat; + +	/* Communications Processor Timing Register - +	   Contains RMII Timing for the FECs on MPC87x/88x only. +	*/ +	uint	cp_cptr; + +	/* Serial Interface and Time Slot Assignment. +	*/ +	uint	cp_simode; +	u_char	cp_sigmr; +	u_char	res15; +	u_char	cp_sistr; +	u_char	cp_sicmr; +	u_char	res16[4]; +	uint	cp_sicr; +	uint	cp_sirp; +	u_char	res17[0xc]; + +	/* 256 bytes of MPC823 video controller RAM array. +	*/ +	u_char	cp_vcram[0x100]; +	u_char	cp_siram[0x200]; + +	/* The fast ethernet controller is not really part of the CPM, +	 * but it resides in the address space. +	 * The LCD color map is also here. +	 */ +	union	fec_lcd	fl_un; +#define cp_fec		fl_un.fl_un_fec +#define lcd_cmap	fl_un.fl_un_cmap +	char	res18[0xE00]; + +	/* The MPC885 family has a second FEC here */ +	fec_t	cp_fec2; +#define cp_fec1	cp_fec	/* consistency macro */ + +	/* Dual Ported RAM follows. +	 * There are many different formats for this memory area +	 * depending upon the devices used and options chosen. +	 * Some processors don't have all of it populated. +	 */ +	u_char	cp_dpmem[0x1C00];	/* BD / Data / ucode */ + +	/* Parameter RAM */ +	union { +		u_char	cp_dparam[0x400]; +		u16	cp_dparam16[0x200]; +	}; +} cpm8xx_t; + +/* Internal memory map. +*/ +typedef struct immap { +	sysconf8xx_t	im_siu_conf;	/* SIU Configuration */ +	pcmconf8xx_t	im_pcmcia;	/* PCMCIA Configuration */ +	memctl8xx_t	im_memctl;	/* Memory Controller */ +	sit8xx_t	im_sit;		/* System integration timers */ +	car8xx_t	im_clkrst;	/* Clocks and reset */ +	sitk8xx_t	im_sitk;	/* Sys int timer keys */ +	cark8xx_t	im_clkrstk;	/* Clocks and reset keys */ +	vid823_t	im_vid;		/* Video (823 only) */ +	lcd823_t	im_lcd;		/* LCD (823 only) */ +	i2c8xx_t	im_i2c;		/* I2C control/status */ +	sdma8xx_t	im_sdma;	/* SDMA control/status */ +	cpic8xx_t	im_cpic;	/* CPM Interrupt Controller */ +	iop8xx_t	im_ioport;	/* IO Port control/status */ +	cpmtimer8xx_t	im_cpmtimer;	/* CPM timers */ +	cpm8xx_t	im_cpm;		/* Communication processor */ +} immap_t; + +#endif /* __IMMAP_8XX__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/apm821xx.h b/roms/u-boot/arch/powerpc/include/asm/apm821xx.h new file mode 100644 index 00000000..d027866d --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/apm821xx.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2010, Applied Micro Circuits Corporation + * Author: Tirumala R Marri <tmarri@apm.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _APM821XX_H_ +#define _APM821XX_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +/* Memory mapped registers */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xEF600000 +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +#define SDR0_SRST0_DMC		0x00200000 +#define SDR0_SRST1_AHB		0x00000040      /* PLB4XAHB bridge */ + +/* AHB config. */ +#define AHB_TOP			0xA4 +#define AHB_BOT			0xA5 + +/* clk divisors */ +#define PLLSYS0_FWD_DIV_A_MASK	0x000000f0	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x0000000f	/* Fwd Div B */ +#define PLLSYS0_FB_DIV_MASK	0x0000ff00	/* Feedback divisor */ +#define PLLSYS0_OPB_DIV_MASK	0x0c000000	/* OPB Divisor */ +#define PLLSYS0_EPB_DIV_MASK	0x00000300      /* EPB divisor */ +#define PLLSYS0_EXTSL_MASK	0x00000080      /* PerClk feedback path */ +#define PLLSYS0_PLBEDV0_DIV_MASK	0xe0000000/* PLB Early Clk Div*/ +#define PLLSYS0_PERCLK_DIV_MASK	0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS0_SEL_MASK	0x18000000	/* 0 = PLL, 1 = PerClk */ + +/* +   + * Clocking Controller +   + */ +#define CPR0_CLKUPD	0x0020 +#define CPR0_PLLC	0x0040 +#define CPR0_PLLC_SEL(pllc)		(((pllc) & 0x01000000) >> 24) +#define CPR0_PLLD	0x0060 +#define CPR0_PLLD_FDV(plld)		(((plld) & 0xff000000) >> 24) +#define CPR0_PLLD_FWDVA(plld)		(((plld) & 0x000f0000) >> 16) +#define CPR0_CPUD	0x0080 +#define CPR0_CPUD_CPUDV(cpud)		(((cpud) & 0x07000000) >> 24) +#define CPR0_PLB2D	0x00a0 +#define CPR0_PLB2D_PLB2DV(plb2d)	(((plb2d) & 0x06000000) >> 25) +#define CPR0_OPBD	0x00c0 +#define CPR0_OPBD_OPBDV(opbd)		(((opbd) & 0x03000000) >> 24) +#define CPR0_PERD	0x00e0 +#define CPR0_PERD_PERDV(perd)		(((perd) & 0x03000000) >> 24) +#define CPR0_DDR2D	0x0100 +#define CPR0_DDR2D_DDR2DV(ddr2d) 	(((ddr2d) & 0x06000000) >> 25) +#define CLK_ICFG	0x0140 + +#endif /* _APM821XX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/arch-mpc83xx/gpio.h b/roms/u-boot/arch/powerpc/include/asm/arch-mpc83xx/gpio.h new file mode 100644 index 00000000..40ef2151 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/arch-mpc83xx/gpio.h @@ -0,0 +1,25 @@ +/* + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _MPC83XX_GPIO_H_ +#define _MPC83XX_GPIO_H_ + +/* + * The MCP83xx's 1-2 GPIO controllers each with 32 bits. + */ +#if defined(CONFIG_MPC8313) || defined(CONFIG_MPC8308) || \ +	defined(CONFIG_MPC8315) +#define MPC83XX_GPIO_CTRLRS 1 +#elif defined(CONFIG_MPC834x) || defined(CONFIG_MPC837x) +#define MPC83XX_GPIO_CTRLRS 2 +#else +#define MPC83XX_GPIO_CTRLRS 0 +#endif + +#define MAX_NUM_GPIOS (32 * MPC83XX_GPIO_CTRLRS) + +void mpc83xx_gpio_init_f(void); +void mpc83xx_gpio_init_r(void); + +#endif	/* MPC83XX_GPIO_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/atomic.h b/roms/u-boot/arch/powerpc/include/asm/atomic.h new file mode 100644 index 00000000..43a2bb2b --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/atomic.h @@ -0,0 +1,93 @@ +/* + * PowerPC atomic operations + */ + +#ifndef _ASM_PPC_ATOMIC_H_ +#define _ASM_PPC_ATOMIC_H_ + +#ifdef CONFIG_SMP +typedef struct { volatile int counter; } atomic_t; +#else +typedef struct { int counter; } atomic_t; +#endif + +#define ATOMIC_INIT(i)	{ (i) } + +#define atomic_read(v)		((v)->counter) +#define atomic_set(v,i)		(((v)->counter) = (i)) + +extern void atomic_clear_mask(unsigned long mask, unsigned long *addr); +extern void atomic_set_mask(unsigned long mask, unsigned long *addr); + +extern __inline__ int atomic_add_return(int a, atomic_t *v) +{ +	int t; + +	__asm__ __volatile__("\n\ +1:	lwarx	%0,0,%3\n\ +	add	%0,%2,%0\n\ +	stwcx.	%0,0,%3\n\ +	bne-	1b" +	: "=&r" (t), "=m" (*v) +	: "r" (a), "r" (v), "m" (*v) +	: "cc"); + +	return t; +} + +extern __inline__ int atomic_sub_return(int a, atomic_t *v) +{ +	int t; + +	__asm__ __volatile__("\n\ +1:	lwarx	%0,0,%3\n\ +	subf	%0,%2,%0\n\ +	stwcx.	%0,0,%3\n\ +	bne-	1b" +	: "=&r" (t), "=m" (*v) +	: "r" (a), "r" (v), "m" (*v) +	: "cc"); + +	return t; +} + +extern __inline__ int atomic_inc_return(atomic_t *v) +{ +	int t; + +	__asm__ __volatile__("\n\ +1:	lwarx	%0,0,%2\n\ +	addic	%0,%0,1\n\ +	stwcx.	%0,0,%2\n\ +	bne-	1b" +	: "=&r" (t), "=m" (*v) +	: "r" (v), "m" (*v) +	: "cc"); + +	return t; +} + +extern __inline__ int atomic_dec_return(atomic_t *v) +{ +	int t; + +	__asm__ __volatile__("\n\ +1:	lwarx	%0,0,%2\n\ +	addic	%0,%0,-1\n\ +	stwcx.	%0,0,%2\n\ +	bne	1b" +	: "=&r" (t), "=m" (*v) +	: "r" (v), "m" (*v) +	: "cc"); + +	return t; +} + +#define atomic_add(a, v)		((void) atomic_add_return((a), (v))) +#define atomic_sub(a, v)		((void) atomic_sub_return((a), (v))) +#define atomic_sub_and_test(a, v)	(atomic_sub_return((a), (v)) == 0) +#define atomic_inc(v)			((void) atomic_inc_return((v))) +#define atomic_dec(v)			((void) atomic_dec_return((v))) +#define atomic_dec_and_test(v)		(atomic_dec_return((v)) == 0) + +#endif /* _ASM_PPC_ATOMIC_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/bitops.h b/roms/u-boot/arch/powerpc/include/asm/bitops.h new file mode 100644 index 00000000..a6bcf3c3 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/bitops.h @@ -0,0 +1,386 @@ +/* + * bitops.h: Bit string operations on the ppc + */ + +#ifndef _PPC_BITOPS_H +#define _PPC_BITOPS_H + +#include <asm/byteorder.h> + +extern void set_bit(int nr, volatile void *addr); +extern void clear_bit(int nr, volatile void *addr); +extern void change_bit(int nr, volatile void *addr); +extern int test_and_set_bit(int nr, volatile void *addr); +extern int test_and_clear_bit(int nr, volatile void *addr); +extern int test_and_change_bit(int nr, volatile void *addr); + +/* + * Arguably these bit operations don't imply any memory barrier or + * SMP ordering, but in fact a lot of drivers expect them to imply + * both, since they do on x86 cpus. + */ +#ifdef CONFIG_SMP +#define SMP_WMB		"eieio\n" +#define SMP_MB		"\nsync" +#else +#define SMP_WMB +#define SMP_MB +#endif /* CONFIG_SMP */ + +#define __INLINE_BITOPS	1 + +#if __INLINE_BITOPS +/* + * These used to be if'd out here because using : "cc" as a constraint + * resulted in errors from egcs.  Things may be OK with gcc-2.95. + */ +extern __inline__ void set_bit(int nr, volatile void * addr) +{ +	unsigned long old; +	unsigned long mask = 1 << (nr & 0x1f); +	unsigned long *p = ((unsigned long *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%3\n\ +	or	%0,%0,%2\n\ +	stwcx.	%0,0,%3\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc" ); +} + +extern __inline__ void clear_bit(int nr, volatile void *addr) +{ +	unsigned long old; +	unsigned long mask = 1 << (nr & 0x1f); +	unsigned long *p = ((unsigned long *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%3\n\ +	andc	%0,%0,%2\n\ +	stwcx.	%0,0,%3\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc"); +} + +extern __inline__ void change_bit(int nr, volatile void *addr) +{ +	unsigned long old; +	unsigned long mask = 1 << (nr & 0x1f); +	unsigned long *p = ((unsigned long *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%3\n\ +	xor	%0,%0,%2\n\ +	stwcx.	%0,0,%3\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc"); +} + +extern __inline__ int test_and_set_bit(int nr, volatile void *addr) +{ +	unsigned int old, t; +	unsigned int mask = 1 << (nr & 0x1f); +	volatile unsigned int *p = ((volatile unsigned int *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%4\n\ +	or	%1,%0,%3\n\ +	stwcx.	%1,0,%4\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=&r" (t), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc"); + +	return (old & mask) != 0; +} + +extern __inline__ int test_and_clear_bit(int nr, volatile void *addr) +{ +	unsigned int old, t; +	unsigned int mask = 1 << (nr & 0x1f); +	volatile unsigned int *p = ((volatile unsigned int *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%4\n\ +	andc	%1,%0,%3\n\ +	stwcx.	%1,0,%4\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=&r" (t), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc"); + +	return (old & mask) != 0; +} + +extern __inline__ int test_and_change_bit(int nr, volatile void *addr) +{ +	unsigned int old, t; +	unsigned int mask = 1 << (nr & 0x1f); +	volatile unsigned int *p = ((volatile unsigned int *)addr) + (nr >> 5); + +	__asm__ __volatile__(SMP_WMB "\ +1:	lwarx	%0,0,%4\n\ +	xor	%1,%0,%3\n\ +	stwcx.	%1,0,%4\n\ +	bne	1b" +	SMP_MB +	: "=&r" (old), "=&r" (t), "=m" (*p) +	: "r" (mask), "r" (p), "m" (*p) +	: "cc"); + +	return (old & mask) != 0; +} +#endif /* __INLINE_BITOPS */ + +extern __inline__ int test_bit(int nr, __const__ volatile void *addr) +{ +	__const__ unsigned int *p = (__const__ unsigned int *) addr; + +	return ((p[nr >> 5] >> (nr & 0x1f)) & 1) != 0; +} + +/* Return the bit position of the most significant 1 bit in a word */ +/* - the result is undefined when x == 0 */ +extern __inline__ int __ilog2(unsigned int x) +{ +	int lz; + +	asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x)); +	return 31 - lz; +} + +extern __inline__ int ffz(unsigned int x) +{ +	if ((x = ~x) == 0) +		return 32; +	return __ilog2(x & -x); +} + +/* + * fls: find last (most-significant) bit set. + * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. + * + * On powerpc, __ilog2(0) returns -1, but this is not safe in general + */ +static __inline__ int fls(unsigned int x) +{ +	return __ilog2(x) + 1; +} +#define PLATFORM_FLS + +/** + * fls64 - find last set bit in a 64-bit word + * @x: the word to search + * + * This is defined in a similar way as the libc and compiler builtin + * ffsll, but returns the position of the most significant set bit. + * + * fls64(value) returns 0 if value is 0 or the position of the last + * set bit if value is nonzero. The last (most significant) bit is + * at position 64. + */ +#if BITS_PER_LONG == 32 +static inline int fls64(__u64 x) +{ +	__u32 h = x >> 32; +	if (h) +		return fls(h) + 32; +	return fls(x); +} +#elif BITS_PER_LONG == 64 +static inline int fls64(__u64 x) +{ +	if (x == 0) +		return 0; +	return __ilog2(x) + 1; +} +#else +#error BITS_PER_LONG not 32 or 64 +#endif + +static inline int __ilog2_u64(u64 n) +{ +	return fls64(n) - 1; +} + +static inline int ffs64(u64 x) +{ +	return __ilog2_u64(x & -x) + 1ull; +} + +#ifdef __KERNEL__ + +/* + * ffs: find first bit set. This is defined the same way as + * the libc and compiler builtin ffs routines, therefore + * differs in spirit from the above ffz (man ffs). + */ +extern __inline__ int ffs(int x) +{ +	return __ilog2(x & -x) + 1; +} +#define PLATFORM_FFS + +/* + * hweightN: returns the hamming weight (i.e. the number + * of bits set) of a N-bit word + */ + +#define hweight32(x) generic_hweight32(x) +#define hweight16(x) generic_hweight16(x) +#define hweight8(x) generic_hweight8(x) + +#endif /* __KERNEL__ */ + +/* + * This implementation of find_{first,next}_zero_bit was stolen from + * Linus' asm-alpha/bitops.h. + */ +#define find_first_zero_bit(addr, size) \ +	find_next_zero_bit((addr), (size), 0) + +extern __inline__ unsigned long find_next_zero_bit(void * addr, +	unsigned long size, unsigned long offset) +{ +	unsigned int * p = ((unsigned int *) addr) + (offset >> 5); +	unsigned int result = offset & ~31UL; +	unsigned int tmp; + +	if (offset >= size) +		return size; +	size -= result; +	offset &= 31UL; +	if (offset) { +		tmp = *p++; +		tmp |= ~0UL >> (32-offset); +		if (size < 32) +			goto found_first; +		if (tmp != ~0U) +			goto found_middle; +		size -= 32; +		result += 32; +	} +	while (size >= 32) { +		if ((tmp = *p++) != ~0U) +			goto found_middle; +		result += 32; +		size -= 32; +	} +	if (!size) +		return result; +	tmp = *p; +found_first: +	tmp |= ~0UL << size; +found_middle: +	return result + ffz(tmp); +} + + +#define _EXT2_HAVE_ASM_BITOPS_ + +#ifdef __KERNEL__ +/* + * test_and_{set,clear}_bit guarantee atomicity without + * disabling interrupts. + */ +#define ext2_set_bit(nr, addr)		test_and_set_bit((nr) ^ 0x18, addr) +#define ext2_clear_bit(nr, addr)	test_and_clear_bit((nr) ^ 0x18, addr) + +#else +extern __inline__ int ext2_set_bit(int nr, void * addr) +{ +	int		mask; +	unsigned char	*ADDR = (unsigned char *) addr; +	int oldbit; + +	ADDR += nr >> 3; +	mask = 1 << (nr & 0x07); +	oldbit = (*ADDR & mask) ? 1 : 0; +	*ADDR |= mask; +	return oldbit; +} + +extern __inline__ int ext2_clear_bit(int nr, void * addr) +{ +	int		mask; +	unsigned char	*ADDR = (unsigned char *) addr; +	int oldbit; + +	ADDR += nr >> 3; +	mask = 1 << (nr & 0x07); +	oldbit = (*ADDR & mask) ? 1 : 0; +	*ADDR = *ADDR & ~mask; +	return oldbit; +} +#endif	/* __KERNEL__ */ + +extern __inline__ int ext2_test_bit(int nr, __const__ void * addr) +{ +	__const__ unsigned char	*ADDR = (__const__ unsigned char *) addr; + +	return (ADDR[nr >> 3] >> (nr & 7)) & 1; +} + +/* + * This implementation of ext2_find_{first,next}_zero_bit was stolen from + * Linus' asm-alpha/bitops.h and modified for a big-endian machine. + */ + +#define ext2_find_first_zero_bit(addr, size) \ +	ext2_find_next_zero_bit((addr), (size), 0) + +static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, +	unsigned long size, unsigned long offset) +{ +	unsigned int *p = ((unsigned int *) addr) + (offset >> 5); +	unsigned int result = offset & ~31UL; +	unsigned int tmp; + +	if (offset >= size) +		return size; +	size -= result; +	offset &= 31UL; +	if (offset) { +		tmp = cpu_to_le32p(p++); +		tmp |= ~0UL >> (32-offset); +		if (size < 32) +			goto found_first; +		if (tmp != ~0U) +			goto found_middle; +		size -= 32; +		result += 32; +	} +	while (size >= 32) { +		if ((tmp = cpu_to_le32p(p++)) != ~0U) +			goto found_middle; +		result += 32; +		size -= 32; +	} +	if (!size) +		return result; +	tmp = cpu_to_le32p(p); +found_first: +	tmp |= ~0U << size; +found_middle: +	return result + ffz(tmp); +} + +/* Bitmap functions for the minix filesystem.  */ +#define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr) +#define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr)) +#define minix_test_and_clear_bit(nr,addr) ext2_clear_bit(nr,addr) +#define minix_test_bit(nr,addr) ext2_test_bit(nr,addr) +#define minix_find_first_zero_bit(addr,size) ext2_find_first_zero_bit(addr,size) + +#endif /* _PPC_BITOPS_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/byteorder.h b/roms/u-boot/arch/powerpc/include/asm/byteorder.h new file mode 100644 index 00000000..3f5bcf63 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/byteorder.h @@ -0,0 +1,84 @@ +#ifndef _PPC_BYTEORDER_H +#define _PPC_BYTEORDER_H + +#include <asm/types.h> + +#ifdef __GNUC__ + +extern __inline__ unsigned ld_le16(const volatile unsigned short *addr) +{ +	unsigned val; + +	__asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr)); +	return val; +} + +extern __inline__ void st_le16(volatile unsigned short *addr, const unsigned val) +{ +	__asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr)); +} + +extern __inline__ unsigned ld_le32(const volatile unsigned *addr) +{ +	unsigned val; + +	__asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr)); +	return val; +} + +extern __inline__ void st_le32(volatile unsigned *addr, const unsigned val) +{ +	__asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr)); +} + +/* alas, egcs sounds like it has a bug in this code that doesn't use the +   inline asm correctly, and can cause file corruption. Until I hear that +   it's fixed, I can live without the extra speed. I hope. */ +#if !(__GNUC__ >= 2 && __GNUC_MINOR__ >= 90) +#if 0 +#  define __arch_swab16(x) ld_le16(&x) +#  define __arch_swab32(x) ld_le32(&x) +#else +static __inline__ __attribute__((const)) __u16 ___arch__swab16(__u16 value) +{ +	__u16 result; + +	__asm__("rlwimi %0,%1,8,16,23" +	    : "=r" (result) +	    : "r" (value), "0" (value >> 8)); +	return result; +} + +static __inline__ __attribute__((const)) __u32 ___arch__swab32(__u32 value) +{ +	__u32 result; + +	__asm__("rlwimi %0,%1,24,16,23\n\t" +	    "rlwimi %0,%1,8,8,15\n\t" +	    "rlwimi %0,%1,24,0,7" +	    : "=r" (result) +	    : "r" (value), "0" (value >> 24)); +	return result; +} +#define __arch__swab32(x) ___arch__swab32(x) +#define __arch__swab16(x) ___arch__swab16(x) +#endif /* 0 */ + +#endif + +/* The same, but returns converted value from the location pointer by addr. */ +#define __arch__swab16p(addr) ld_le16(addr) +#define __arch__swab32p(addr) ld_le32(addr) + +/* The same, but do the conversion in situ, ie. put the value back to addr. */ +#define __arch__swab16s(addr) st_le16(addr,*addr) +#define __arch__swab32s(addr) st_le32(addr,*addr) + +#endif /* __GNUC__ */ + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +#define __BYTEORDER_HAS_U64__ +#endif +#include <linux/byteorder/big_endian.h> + +#endif /* _PPC_BYTEORDER_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/cache.h b/roms/u-boot/arch/powerpc/include/asm/cache.h new file mode 100644 index 00000000..cdc1f108 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/cache.h @@ -0,0 +1,106 @@ +/* + * include/asm-ppc/cache.h + */ +#ifndef __ARCH_PPC_CACHE_H +#define __ARCH_PPC_CACHE_H + +#include <asm/processor.h> + +/* bytes per L1 cache line */ +#if defined(CONFIG_8xx) +#define	L1_CACHE_SHIFT	4 +#elif defined(CONFIG_PPC64BRIDGE) +#define L1_CACHE_SHIFT	7 +#elif defined(CONFIG_E500MC) +#define L1_CACHE_SHIFT	6 +#else +#define	L1_CACHE_SHIFT	5 +#endif + +#define L1_CACHE_BYTES          (1 << L1_CACHE_SHIFT) + +/* + * Use the L1 data cache line size value for the minimum DMA buffer alignment + * on PowerPC. + */ +#define ARCH_DMA_MINALIGN	L1_CACHE_BYTES + +/* + * For compatibility reasons support the CONFIG_SYS_CACHELINE_SIZE too + */ +#ifndef CONFIG_SYS_CACHELINE_SIZE +#define CONFIG_SYS_CACHELINE_SIZE	L1_CACHE_BYTES +#endif + +#define	L1_CACHE_ALIGN(x)       (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) +#define	L1_CACHE_PAGES		8 + +#define	SMP_CACHE_BYTES L1_CACHE_BYTES + +#ifdef MODULE +#define __cacheline_aligned __attribute__((__aligned__(L1_CACHE_BYTES))) +#else +#define __cacheline_aligned					\ +  __attribute__((__aligned__(L1_CACHE_BYTES),			\ +		 __section__(".data.cacheline_aligned"))) +#endif + +#if defined(__KERNEL__) && !defined(__ASSEMBLY__) +extern void flush_dcache_range(unsigned long start, unsigned long stop); +extern void clean_dcache_range(unsigned long start, unsigned long stop); +extern void invalidate_dcache_range(unsigned long start, unsigned long stop); +extern void flush_dcache(void); +extern void invalidate_dcache(void); +extern void invalidate_icache(void); +#ifdef CONFIG_SYS_INIT_RAM_LOCK +extern void unlock_ram_in_cache(void); +#endif /* CONFIG_SYS_INIT_RAM_LOCK */ +#endif /* __ASSEMBLY__ */ + +/* prep registers for L2 */ +#define CACHECRBA       0x80000823      /* Cache configuration register address */ +#define L2CACHE_MASK	0x03	/* Mask for 2 L2 Cache bits */ +#define L2CACHE_512KB	0x00	/* 512KB */ +#define L2CACHE_256KB	0x01	/* 256KB */ +#define L2CACHE_1MB	0x02	/* 1MB */ +#define L2CACHE_NONE	0x03	/* NONE */ +#define L2CACHE_PARITY  0x08    /* Mask for L2 Cache Parity Protected bit */ + +#ifdef CONFIG_8xx +/* Cache control on the MPC8xx is provided through some additional + * special purpose registers. + */ +#define IC_CST		560	/* Instruction cache control/status */ +#define IC_ADR		561	/* Address needed for some commands */ +#define IC_DAT		562	/* Read-only data register */ +#define DC_CST		568	/* Data cache control/status */ +#define DC_ADR		569	/* Address needed for some commands */ +#define DC_DAT		570	/* Read-only data register */ + +/* Commands.  Only the first few are available to the instruction cache. +*/ +#define	IDC_ENABLE	0x02000000	/* Cache enable */ +#define IDC_DISABLE	0x04000000	/* Cache disable */ +#define IDC_LDLCK	0x06000000	/* Load and lock */ +#define IDC_UNLINE	0x08000000	/* Unlock line */ +#define IDC_UNALL	0x0a000000	/* Unlock all */ +#define IDC_INVALL	0x0c000000	/* Invalidate all */ + +#define DC_FLINE	0x0e000000	/* Flush data cache line */ +#define DC_SFWT		0x01000000	/* Set forced writethrough mode */ +#define DC_CFWT		0x03000000	/* Clear forced writethrough mode */ +#define DC_SLES		0x05000000	/* Set little endian swap mode */ +#define DC_CLES		0x07000000	/* Clear little endian swap mode */ + +/* Status. +*/ +#define IDC_ENABLED	0x80000000	/* Cache is enabled */ +#define IDC_CERR1	0x00200000	/* Cache error 1 */ +#define IDC_CERR2	0x00100000	/* Cache error 2 */ +#define IDC_CERR3	0x00080000	/* Cache error 3 */ + +#define DC_DFWT		0x40000000	/* Data cache is forced write through */ +#define DC_LES		0x20000000	/* Caches are little endian mode */ +#endif /* CONFIG_8xx */ + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/config.h b/roms/u-boot/arch/powerpc/include/asm/config.h new file mode 100644 index 00000000..423a6fb8 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/config.h @@ -0,0 +1,106 @@ +/* + * Copyright 2009-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_CONFIG_H_ +#define _ASM_CONFIG_H_ + +#ifdef CONFIG_MPC85xx +#include <asm/config_mpc85xx.h> +#define CONFIG_SYS_FSL_DDR +#endif + +#ifdef CONFIG_MPC86xx +#include <asm/config_mpc86xx.h> +#define CONFIG_SYS_FSL_DDR +#endif + +#ifdef CONFIG_MPC83xx +#define CONFIG_SYS_FSL_DDR +#endif + +#ifndef HWCONFIG_BUFFER_SIZE +  #define HWCONFIG_BUFFER_SIZE 256 +#endif + +/* CONFIG_HARD_SPI triggers SPI bus initialization in PowerPC */ +#if defined(CONFIG_MPC8XXX_SPI) || defined(CONFIG_FSL_ESPI) +# ifndef CONFIG_HARD_SPI +#  define CONFIG_HARD_SPI +# endif +#endif + +#define CONFIG_LMB +#define CONFIG_SYS_BOOT_RAMDISK_HIGH +#define CONFIG_SYS_BOOT_GET_CMDLINE +#define CONFIG_SYS_BOOT_GET_KBD + +#ifndef CONFIG_MAX_MEM_MAPPED +#if	defined(CONFIG_4xx)		|| \ +	defined(CONFIG_E500)		|| \ +	defined(CONFIG_MPC86xx)		|| \ +	defined(CONFIG_E300) +#define CONFIG_MAX_MEM_MAPPED	((phys_size_t)2 << 30) +#else +#define CONFIG_MAX_MEM_MAPPED	(256 << 20) +#endif +#endif + +/* Check if boards need to enable FSL DMA engine for SDRAM init */ +#if !defined(CONFIG_FSL_DMA) && defined(CONFIG_DDR_ECC) +#if (defined(CONFIG_MPC83xx) && defined(CONFIG_DDR_ECC_INIT_VIA_DMA)) || \ +	((defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)) && \ +	!defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)) +#define CONFIG_FSL_DMA +#endif +#endif + +#ifndef CONFIG_MAX_CPUS +#define CONFIG_MAX_CPUS		1 +#endif + +/* + * Provide a default boot page translation virtual address that lines up with + * Freescale's default e500 reset page. + */ +#if (defined(CONFIG_E500) && defined(CONFIG_MP)) +#ifndef CONFIG_BPTR_VIRT_ADDR +#define CONFIG_BPTR_VIRT_ADDR	0xfffff000 +#endif +#endif + +/* + * SEC (crypto unit) major compatible version determination + */ +#if defined(CONFIG_MPC83xx) +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#endif + +/* Since so many PPC SOCs have a semi-common LBC, define this here */ +#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) || \ +	defined(CONFIG_MPC83xx) +#if !defined(CONFIG_FSL_IFC) +#define CONFIG_FSL_LBC +#endif +#endif + +/* The TSEC driver uses the PHYLIB infrastructure */ +#ifndef CONFIG_PHYLIB +#if defined(CONFIG_TSEC_ENET) +#define CONFIG_PHYLIB + +#include <config_phylib_all_drivers.h> +#endif /* TSEC_ENET */ +#endif /* !CONFIG_PHYLIB */ + +/* The FMAN driver uses the PHYLIB infrastructure */ +#if defined(CONFIG_FMAN_ENET) +#define CONFIG_PHYLIB +#endif + +/* All PPC boards must swap IDE bytes */ +#define CONFIG_IDE_SWAP_IO + +#endif /* _ASM_CONFIG_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/config_mpc85xx.h b/roms/u-boot/arch/powerpc/include/asm/config_mpc85xx.h new file mode 100644 index 00000000..8a7d4d8a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/config_mpc85xx.h @@ -0,0 +1,852 @@ +/* + * Copyright 2011-2012 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_MPC85xx_CONFIG_H_ +#define _ASM_MPC85xx_CONFIG_H_ + +/* SoC specific defines for Freescale MPC85xx (PQ3) and QorIQ processors */ + +#ifdef CONFIG_SYS_CCSRBAR_DEFAULT +#error "Do not define CONFIG_SYS_CCSRBAR_DEFAULT in the board header file." +#endif + +/* + * This macro should be removed when we no longer care about backwards + * compatibility with older operating systems. + */ +#define CONFIG_PPC_SPINTABLE_COMPATIBLE + +#include <fsl_ddrc_version.h> +#define CONFIG_SYS_FSL_DDR_BE + +/* IP endianness */ +#define CONFIG_SYS_FSL_IFC_BE + +/* Number of TLB CAM entries we have on FSL Book-E chips */ +#if defined(CONFIG_E500MC) +#define CONFIG_SYS_NUM_TLBCAMS		64 +#elif defined(CONFIG_E500) +#define CONFIG_SYS_NUM_TLBCAMS		16 +#endif + +#if defined(CONFIG_MPC8536) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	1 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_MPC8540) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		8 +#define CONFIG_SYS_FSL_DDRC_GEN1 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 + +#elif defined(CONFIG_MPC8541) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		8 +#define CONFIG_SYS_FSL_DDRC_GEN1 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 + +#elif defined(CONFIG_MPC8544) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		10 +#define CONFIG_SYS_FSL_DDRC_GEN2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	0 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_MPC8548) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		10 +#define CONFIG_SYS_FSL_DDRC_GEN2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	0 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_NMG_DDR120 +#define CONFIG_SYS_FSL_ERRATUM_NMG_LBC103 +#define CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	1 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_RMU +#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x00 + +#elif defined(CONFIG_MPC8555) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		8 +#define CONFIG_SYS_FSL_DDRC_GEN1 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 + +#elif defined(CONFIG_MPC8560) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		8 +#define CONFIG_SYS_FSL_DDRC_GEN1 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 + +#elif defined(CONFIG_MPC8568) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		10 +#define CONFIG_SYS_FSL_DDRC_GEN2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define QE_MURAM_SIZE			0x10000UL +#define MAX_QE_RISC			2 +#define QE_NUM_OF_SNUM			28 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	1 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_RMU +#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 + +#elif defined(CONFIG_MPC8569) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		10 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define QE_MURAM_SIZE			0x20000UL +#define MAX_QE_RISC			4 +#define QE_NUM_OF_SNUM			46 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	1 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_RMU +#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_MPC8572) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_DDR_115 +#define CONFIG_SYS_FSL_ERRATUM_DDR111_DDR134 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_P1010) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	4 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_IFC_A002769 +#define CONFIG_SYS_FSL_ERRATUM_P1010_A003549 +#define CONFIG_SYS_FSL_ERRATUM_SEC_A003571 +#define CONFIG_SYS_FSL_ERRATUM_IFC_A003399 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_ERRATUM_A007075 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x10 +#define CONFIG_ESDHC_HC_BLK_ADDR + +/* P1011 is single core version of P1020 */ +#elif defined(CONFIG_P1011) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +/* P1012 is single core version of P1021 */ +#elif defined(CONFIG_P1012) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define QE_MURAM_SIZE			0x6000UL +#define MAX_QE_RISC			1 +#define QE_NUM_OF_SNUM			28 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +/* P1013 is single core version of P1022 */ +#elif defined(CONFIG_P1013) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_FSL_SATA_ERRATUM_A001 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_P1014) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_IFC_A002769 +#define CONFIG_SYS_FSL_ERRATUM_P1010_A003549 +#define CONFIG_SYS_FSL_ERRATUM_IFC_A003399 + +/* P1017 is single core version of P1023 */ +#elif defined(CONFIG_P1017) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	2 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_QMAN_NUM_PORTALS	3 +#define CONFIG_SYS_BMAN_NUM_PORTALS	3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x10000 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff600000 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_P1020) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 + +#elif defined(CONFIG_P1021) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define QE_MURAM_SIZE			0x6000UL +#define MAX_QE_RISC			1 +#define QE_NUM_OF_SNUM			28 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 + +#elif defined(CONFIG_P1022) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_FSL_SATA_ERRATUM_A001 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_P1023) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	2 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_QMAN_NUM_PORTALS	3 +#define CONFIG_SYS_BMAN_NUM_PORTALS	3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x10000 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff600000 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11 + +/* P1024 is lower end variant of P1020 */ +#elif defined(CONFIG_P1024) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +/* P1025 is lower end variant of P1021 */ +#elif defined(CONFIG_P1025) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_TSECV2 +#define CONFIG_FSL_PCIE_DISABLE_ASPM +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define QE_MURAM_SIZE			0x6000UL +#define MAX_QE_RISC			1 +#define QE_NUM_OF_SNUM			28 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +/* P2010 is single core version of P2020 */ +#elif defined(CONFIG_P2010) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_P2020) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	2 +#define CONFIG_SYS_FSL_SEC_COMPAT	2 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_RMU +#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#elif defined(CONFIG_PPC_P2041) /* also supports P2040 */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	5 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	32 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_USB1_PHY_ENABLE +#define CONFIG_SYS_FSL_USB2_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 +#define CONFIG_SYS_FSL_ERRATUM_USB14 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_ERRATUM_A004510 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11 +#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000 +#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034 +#define CONFIG_SYS_FSL_ERRATUM_A004849 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11 + +#elif defined(CONFIG_PPC_P3041) +#define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	5 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_5 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	32 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_USB1_PHY_ENABLE +#define CONFIG_SYS_FSL_USB2_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 +#define CONFIG_SYS_FSL_ERRATUM_USB14 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_ERRATUM_A004510 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2	0x11 +#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000 +#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034 +#define CONFIG_SYS_FSL_ERRATUM_A004849 +#define CONFIG_SYS_FSL_ERRATUM_A005812 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20 + +#elif defined(CONFIG_PPC_P4080) /* also supports P4040 */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_MAX_CPUS			8 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	4 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		2 +#define CONFIG_SYS_NUM_FM1_DTSEC	4 +#define CONFIG_SYS_NUM_FM2_DTSEC	4 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_SYS_NUM_FM2_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_4 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,p4080-pcie" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_ERRATUM_CPC_A002 +#define CONFIG_SYS_FSL_ERRATUM_CPC_A003 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_ELBC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC135 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC13 +#define CONFIG_SYS_P4080_ERRATUM_CPU22 +#define CONFIG_SYS_FSL_ERRATUM_NMG_CPU_A011 +#define CONFIG_SYS_P4080_ERRATUM_SERDES8 +#define CONFIG_SYS_P4080_ERRATUM_SERDES9 +#define CONFIG_SYS_P4080_ERRATUM_SERDES_A001 +#define CONFIG_SYS_P4080_ERRATUM_SERDES_A005 +#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_RMU +#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM	2 +#define CONFIG_SYS_FSL_ERRATUM_A004510 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x20 +#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xff000000 +#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034 +#define CONFIG_SYS_FSL_ERRATUM_A004849 +#define CONFIG_SYS_FSL_ERRATUM_A004580 +#define CONFIG_SYS_P4080_ERRATUM_PCIE_A003 +#define CONFIG_SYS_FSL_ERRATUM_A005812 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_ERRATUM_A007075 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20 + +#elif defined(CONFIG_PPC_P5020) /* also supports P5010 */ +#define CONFIG_SYS_PPC64		/* 64-bit core */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	5 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_4 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	32 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_USB1_PHY_ENABLE +#define CONFIG_SYS_FSL_USB2_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_USB14 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_ERRATUM_A004510 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10 +#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xc0000000 +#define CONFIG_SYS_FSL_ERRATUM_SRIO_A004034 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x20 + +#elif defined(CONFIG_PPC_P5040) +#define CONFIG_SYS_PPC64 +#define CONFIG_SYS_FSL_QORIQ_CHASSIS1 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	3 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		2 +#define CONFIG_SYS_NUM_FM1_DTSEC	5 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_SYS_NUM_FM2_DTSEC	5 +#define CONFIG_SYS_NUM_FM2_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_4 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.4" +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_USB1_PHY_ENABLE +#define CONFIG_SYS_FSL_USB2_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_USB14 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003 +#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 +#define CONFIG_SYS_FSL_ERRATUM_A004699 +#define CONFIG_SYS_FSL_ERRATUM_A004510 +#define CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV	0x10 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 0xf0000000 +#define CONFIG_SYS_FSL_ERRATUM_A005812 + +#elif defined(CONFIG_BSC9131) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_4 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_FSL_DSP_M2_RAM_ADDR	0xb0000000 +#define CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT	0xff600000 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	3 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_NAND_FSL_IFC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_ESDHC_HC_BLK_ADDR + +#elif defined(CONFIG_BSC9132) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_TSECV2 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_6 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_FSL_DSP_DDR_ADDR	0x40000000 +#define CONFIG_SYS_FSL_DSP_M2_RAM_ADDR	0xb0000000 +#define CONFIG_SYS_FSL_DSP_M3_RAM_ADDR	0xc0000000 +#define CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT	0xff600000 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	3 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_NAND_FSL_IFC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ESDHC_P1010_BROKEN_SDCLK +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.2" +#define CONFIG_SYS_FSL_ERRATUM_A005125 +#define CONFIG_SYS_FSL_ERRATUM_I2C_A004447 +#define CONFIG_SYS_FSL_A004447_SVR_REV	0x11 +#define CONFIG_ESDHC_HC_BLK_ADDR + +#elif defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160) || \ +	defined(CONFIG_PPC_T4080) +#define CONFIG_E6500 +#define CONFIG_SYS_PPC64		/* 64-bit core */ +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */ +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 4 +#define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */ +#ifdef CONFIG_PPC_T4240 +#define CONFIG_MAX_CPUS			12 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 4 } +#define CONFIG_SYS_NUM_FM1_DTSEC	8 +#define CONFIG_SYS_NUM_FM1_10GEC	2 +#define CONFIG_SYS_NUM_FM2_DTSEC	8 +#define CONFIG_SYS_NUM_FM2_10GEC	2 +#define CONFIG_NUM_DDR_CONTROLLERS	3 +#else +#define CONFIG_SYS_NUM_FM1_DTSEC	6 +#define CONFIG_SYS_NUM_FM1_10GEC	1 +#define CONFIG_SYS_NUM_FM2_DTSEC	8 +#define CONFIG_SYS_NUM_FM2_10GEC	1 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#if defined(CONFIG_PPC_T4160) +#define CONFIG_MAX_CPUS			8 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1, 1 } +#elif defined(CONFIG_PPC_T4080) +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1 } +#endif +#endif +#define CONFIG_SYS_FSL_NUM_CC_PLLS	5 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SRDS_2 +#define CONFIG_SYS_FSL_SRDS_3 +#define CONFIG_SYS_FSL_SRDS_4 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_SYS_PME_CLK		0 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_7 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_FMAN_V3 +#define CONFIG_SYS_FM1_CLK		3 +#define CONFIG_SYS_FM2_CLK		3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x60000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v3.0" +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_SRIO_LIODN +#define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_A004468 +#define CONFIG_SYS_FSL_ERRATUM_A_004934 +#define CONFIG_SYS_FSL_ERRATUM_A005871 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_ERRATUM_A006379 +#define CONFIG_SYS_FSL_ERRATUM_A006593 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_PCI_VER_3_X + +#elif defined(CONFIG_PPC_B4860) || defined(CONFIG_PPC_B4420) +#define CONFIG_E6500 +#define CONFIG_SYS_PPC64		/* 64-bit core */ +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */ +#define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */ +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SRDS_2 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_FM1_CLK		0 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_7 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	4 +#define CONFIG_SYS_FMAN_V3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x60000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.4" +#define CONFIG_SYS_FSL_USB1_PHY_ENABLE +#define CONFIG_SYS_FSL_ERRATUM_A_004934 +#define CONFIG_SYS_FSL_ERRATUM_A005871 +#define CONFIG_SYS_FSL_ERRATUM_A006379 +#define CONFIG_SYS_FSL_ERRATUM_A006593 +#define CONFIG_SYS_FSL_ERRATUM_A007075 +#define CONFIG_SYS_FSL_ERRATUM_A006475 +#define CONFIG_SYS_FSL_ERRATUM_A006384 +#define CONFIG_SYS_FSL_ERRATUM_A007212 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 + +#ifdef CONFIG_PPC_B4860 +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 4 +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_SRDS_NUM_PLLS	2 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	4 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1, 4, 4, 4 } +#define CONFIG_SYS_NUM_FM1_DTSEC	6 +#define CONFIG_SYS_NUM_FM1_10GEC	2 +#define CONFIG_NUM_DDR_CONTROLLERS	2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	1 +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#define CONFIG_SYS_FSL_SRIO_LIODN +#else +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_SRDS_NUM_PLLS	1 +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 2 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	4 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1, 4 } +#define CONFIG_SYS_NUM_FM1_DTSEC	4 +#define CONFIG_SYS_NUM_FM1_10GEC	0 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#endif + +#elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\ +defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022) +#define CONFIG_E5500 +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */ +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 1 +#define CONFIG_SYS_FSL_QMAN_V3		/* QMAN version 3 */ +#ifdef CONFIG_SYS_FSL_DDR4 +#define CONFIG_SYS_FSL_DDRC_GEN4 +#endif +#if defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) +#define CONFIG_MAX_CPUS			4 +#elif defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022) +#define CONFIG_MAX_CPUS			2 +#endif +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS   { 1, 1, 1, 1 } +#define CONFIG_SYS_SDHC_CLOCK		0 +#define CONFIG_SYS_FSL_NUM_LAWS		16 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SEC_COMPAT	5 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_NUM_FM1_DTSEC	5 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_USB_MAX_CONTROLLER_COUNT	2 +#define CONFIG_PME_PLAT_CLK_DIV		2 +#define CONFIG_SYS_PME_CLK		CONFIG_PME_PLAT_CLK_DIV +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_5_0 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_FMAN_V3 +#define CONFIG_FM_PLAT_CLK_DIV	1 +#define CONFIG_SYS_FM1_CLK		CONFIG_FM_PLAT_CLK_DIV +#define CONFIG_SYS_FM_MURAM_SIZE	0x30000 +#define CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v2.4" +#define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE +#define QE_MURAM_SIZE			0x6000UL +#define MAX_QE_RISC			1 +#define QE_NUM_OF_SNUM			28 + +#elif defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define CONFIG_E6500 +#define CONFIG_SYS_PPC64		/* 64-bit core */ +#define CONFIG_FSL_CORENET		/* Freescale CoreNet platform */ +#define CONFIG_SYS_FSL_QORIQ_CHASSIS2	/* Freescale Chassis generation 2 */ +#define CONFIG_SYS_FSL_CORES_PER_CLUSTER 4 +#define CONFIG_SYS_FSL_NUM_CC_PLLS	2 +#define CONFIG_SYS_FSL_QMAN_V3 +#define CONFIG_MAX_CPUS			4 +#define CONFIG_SYS_FSL_NUM_LAWS		32 +#define CONFIG_SYS_FSL_SEC_COMPAT	4 +#define CONFIG_SYS_NUM_FMAN		1 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS	{ 1, 4, 4, 4 } +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_PCI_VER_3_X +#if defined(CONFIG_PPC_T2080) +#define CONFIG_SYS_NUM_FM1_DTSEC	8 +#define CONFIG_SYS_NUM_FM1_10GEC	4 +#define CONFIG_SYS_FSL_SRDS_2 +#define CONFIG_SYS_FSL_SRIO_LIODN +#define CONFIG_SYS_FSL_SRIO_MAX_PORTS	2 +#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM	9 +#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM	5 +#elif defined(CONFIG_PPC_T2081) +#define CONFIG_SYS_NUM_FM1_DTSEC	6 +#define CONFIG_SYS_NUM_FM1_10GEC	2 +#endif +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_PME_PLAT_CLK_DIV		1 +#define CONFIG_SYS_PME_CLK		CONFIG_PME_PLAT_CLK_DIV +#define CONFIG_SYS_FM1_CLK		0 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_7 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_FMAN_V3 +#define CONFIG_SYS_FM_MURAM_SIZE	0x28000 +#define CONFIG_SYS_FSL_TBCLK_DIV	16 +#define CONFIG_SYS_FSL_PCIE_COMPAT	"fsl,qoriq-pcie-v3.0" +#define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE +#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_ERRATUM_A007212 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xfe000000 +#define CONFIG_SYS_FSL_SFP_VER_3_0 +#define CONFIG_SYS_FSL_ISBC_VER		2 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_A006261 +#define CONFIG_SYS_FSL_ERRATUM_A006593 +#define CONFIG_SYS_FSL_ERRATUM_A006379 +#define ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE + + +#elif defined(CONFIG_PPC_C29X) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_FSL_SDHC_V2_3 +#define CONFIG_SYS_FSL_NUM_LAWS		12 +#define CONFIG_SYS_PPC_E500_DEBUG_TLB	3 +#define CONFIG_TSECV2_1 +#define CONFIG_SYS_FSL_SEC_COMPAT	6 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_NUM_DDR_CONTROLLERS	1 +#define CONFIG_SYS_FSL_DDR_VER		FSL_DDR_VER_4_6 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT	8 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_A005125 + +#elif defined(CONFIG_QEMU_E500) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_CCSRBAR_DEFAULT	0xe0000000 + +#else +#error Processor type not defined for this platform +#endif + +#ifndef CONFIG_SYS_CCSRBAR_DEFAULT +#error "CONFIG_SYS_CCSRBAR_DEFAULT is not defined for this platform." +#endif + +#ifdef CONFIG_E6500 +#define CONFIG_SYS_FSL_THREADS_PER_CORE 2 +#else +#define CONFIG_SYS_FSL_THREADS_PER_CORE 1 +#endif + +#if !defined(CONFIG_SYS_FSL_DDRC_GEN1) && \ +	!defined(CONFIG_SYS_FSL_DDRC_GEN2) && \ +	!defined(CONFIG_SYS_FSL_DDRC_GEN3) && \ +	!defined(CONFIG_SYS_FSL_DDRC_GEN4) +#define CONFIG_SYS_FSL_DDRC_GEN3 +#endif + +#endif /* _ASM_MPC85xx_CONFIG_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/config_mpc86xx.h b/roms/u-boot/arch/powerpc/include/asm/config_mpc86xx.h new file mode 100644 index 00000000..4f9b2252 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/config_mpc86xx.h @@ -0,0 +1,26 @@ +/* + * Copyright 2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_MPC86xx_CONFIG_H_ +#define _ASM_MPC86xx_CONFIG_H_ + +#define CONFIG_SYS_FSL_DDR_86XX + +/* SoC specific defines for Freescale MPC86xx processors */ + +#if defined(CONFIG_MPC8610) +#define CONFIG_MAX_CPUS			1 +#define CONFIG_SYS_FSL_NUM_LAWS		10 + +#elif defined(CONFIG_MPC8641) +#define CONFIG_MAX_CPUS			2 +#define CONFIG_SYS_FSL_NUM_LAWS		10 + +#else +#error Processor type not defined for this platform +#endif + +#endif /* _ASM_MPC85xx_CONFIG_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/cpm_8260.h b/roms/u-boot/arch/powerpc/include/asm/cpm_8260.h new file mode 100644 index 00000000..4f78186d --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/cpm_8260.h @@ -0,0 +1,795 @@ +/* + * MPC8260 Communication Processor Module. + * Copyright (c) 1999 Dan Malek (dmalek@jlc.net) + * + * This file contains structures and information for the communication + * processor channels found in the dual port RAM or parameter RAM. + * All CPM control and status is available through the MPC8260 internal + * memory map.  See immap.h for details. + */ +#ifndef __CPM_82XX__ +#define __CPM_82XX__ + +#include <asm/immap_8260.h> + +/* CPM Command register. +*/ +#define CPM_CR_RST	((uint)0x80000000) +#define CPM_CR_PAGE	((uint)0x7c000000) +#define CPM_CR_SBLOCK	((uint)0x03e00000) +#define CPM_CR_FLG	((uint)0x00010000) +#define CPM_CR_MCN	((uint)0x00003fc0) +#define CPM_CR_OPCODE	((uint)0x0000000f) + +/* Device sub-block and page codes. +*/ +#define CPM_CR_SCC1_SBLOCK	(0x04) +#define CPM_CR_SCC2_SBLOCK	(0x05) +#define CPM_CR_SCC3_SBLOCK	(0x06) +#define CPM_CR_SCC4_SBLOCK	(0x07) +#define CPM_CR_SMC1_SBLOCK	(0x08) +#define CPM_CR_SMC2_SBLOCK	(0x09) +#define CPM_CR_SPI_SBLOCK	(0x0a) +#define CPM_CR_I2C_SBLOCK	(0x0b) +#define CPM_CR_TIMER_SBLOCK	(0x0f) +#define CPM_CR_RAND_SBLOCK	(0x0e) +#define CPM_CR_FCC1_SBLOCK	(0x10) +#define CPM_CR_FCC2_SBLOCK	(0x11) +#define CPM_CR_FCC3_SBLOCK	(0x12) +#define CPM_CR_IDMA1_SBLOCK	(0x14) +#define CPM_CR_IDMA2_SBLOCK	(0x15) +#define CPM_CR_IDMA3_SBLOCK	(0x16) +#define CPM_CR_IDMA4_SBLOCK	(0x17) +#define CPM_CR_MCC1_SBLOCK	(0x1c) + +#define CPM_CR_SCC1_PAGE	(0x00) +#define CPM_CR_SCC2_PAGE	(0x01) +#define CPM_CR_SCC3_PAGE	(0x02) +#define CPM_CR_SCC4_PAGE	(0x03) +#define CPM_CR_SMC1_PAGE	(0x07) +#define CPM_CR_SMC2_PAGE	(0x08) +#define CPM_CR_SPI_PAGE		(0x09) +#define CPM_CR_I2C_PAGE		(0x0a) +#define CPM_CR_TIMER_PAGE	(0x0a) +#define CPM_CR_RAND_PAGE	(0x0a) +#define CPM_CR_FCC1_PAGE	(0x04) +#define CPM_CR_FCC2_PAGE	(0x05) +#define CPM_CR_FCC3_PAGE	(0x06) +#define CPM_CR_IDMA1_PAGE	(0x07) +#define CPM_CR_IDMA2_PAGE	(0x08) +#define CPM_CR_IDMA3_PAGE	(0x09) +#define CPM_CR_IDMA4_PAGE	(0x0a) +#define CPM_CR_MCC1_PAGE	(0x07) +#define CPM_CR_MCC2_PAGE	(0x08) + +/* Some opcodes (there are more...later) +*/ +#define CPM_CR_INIT_TRX		((ushort)0x0000) +#define CPM_CR_INIT_RX		((ushort)0x0001) +#define CPM_CR_INIT_TX		((ushort)0x0002) +#define CPM_CR_HUNT_MODE	((ushort)0x0003) +#define CPM_CR_STOP_TX		((ushort)0x0004) +#define CPM_CR_RESTART_TX	((ushort)0x0006) +#define CPM_CR_SET_GADDR	((ushort)0x0008) + +#define mk_cr_cmd(PG, SBC, MCN, OP) \ +	((PG << 26) | (SBC << 21) | (MCN << 6) | OP) + +/* Dual Port RAM addresses.  The first 16K is available for almost + * any CPM use, so we put the BDs there.  The first 128 bytes are + * used for SMC1 and SMC2 parameter RAM, so we start allocating + * BDs above that.  All of this must change when we start + * downloading RAM microcode. + */ +#define CPM_DATAONLY_BASE	((uint)128) +#define CPM_DP_NOSPACE		((uint)0x7fffffff) +#ifndef CONFIG_MPC8272_FAMILY +#define CPM_DATAONLY_SIZE	((uint)(8 * 1024) - CPM_DATAONLY_BASE) +#define CPM_FCC_SPECIAL_BASE	((uint)0x0000b000) +#else  /* 8247/48/71/72 */ +#define CPM_DATAONLY_SIZE	((uint)(4 * 1024) - CPM_DATAONLY_BASE) +#define CPM_FCC_SPECIAL_BASE	((uint)0x00009000) +#endif /* !CONFIG_MPC8272_FAMILY */ + +/* The number of pages of host memory we allocate for CPM.  This is + * done early in kernel initialization to get physically contiguous + * pages. + */ +#define NUM_CPM_HOST_PAGES	2 + + +/* Export the base address of the communication processor registers + * and dual port ram. + */ +extern	cpm8260_t	*cpmp;		/* Pointer to comm processor */ +uint		m8260_cpm_dpalloc(uint size, uint align); +uint		m8260_cpm_hostalloc(uint size, uint align); +void		m8260_cpm_setbrg(uint brg, uint rate); +void		m8260_cpm_fastbrg(uint brg, uint rate, int div16); +void		m8260_cpm_extcbrg(uint brg, uint rate, uint extclk, int pinsel); + +/* Buffer descriptors used by many of the CPM protocols. +*/ +typedef struct cpm_buf_desc { +	ushort	cbd_sc;		/* Status and Control */ +	ushort	cbd_datlen;	/* Data length in buffer */ +	uint	cbd_bufaddr;	/* Buffer address in host memory */ +} cbd_t; + +#define BD_SC_EMPTY	((ushort)0x8000)	/* Receive is empty */ +#define BD_SC_READY	((ushort)0x8000)	/* Transmit is ready */ +#define BD_SC_WRAP	((ushort)0x2000)	/* Last buffer descriptor */ +#define BD_SC_INTRPT	((ushort)0x1000)	/* Interrupt on change */ +#define BD_SC_LAST	((ushort)0x0800)	/* Last buffer in frame */ +#define BD_SC_CM	((ushort)0x0200)	/* Continous mode */ +#define BD_SC_ID	((ushort)0x0100)	/* Rec'd too many idles */ +#define BD_SC_P		((ushort)0x0100)	/* xmt preamble */ +#define BD_SC_BR	((ushort)0x0020)	/* Break received */ +#define BD_SC_FR	((ushort)0x0010)	/* Framing error */ +#define BD_SC_PR	((ushort)0x0008)	/* Parity error */ +#define BD_SC_OV	((ushort)0x0002)	/* Overrun */ +#define BD_SC_CD	((ushort)0x0001)	/* ?? */ + +/* Function code bits, usually generic to devices. +*/ +#define CPMFCR_GBL	((u_char)0x20)	/* Set memory snooping */ +#define CPMFCR_EB	((u_char)0x10)	/* Set big endian byte order */ +#define CPMFCR_TC2	((u_char)0x04)	/* Transfer code 2 value */ +#define CPMFCR_DTB	((u_char)0x02)	/* Use local bus for data when set */ +#define CPMFCR_BDB	((u_char)0x01)	/* Use local bus for BD when set */ + +/* Parameter RAM offsets from the base. +*/ +#ifndef CONFIG_SYS_CPM_POST_WORD_ADDR +#define CPM_POST_WORD_ADDR      0x80FC	/* steal a long at the end of SCC1 */ +#else +#define CPM_POST_WORD_ADDR	CONFIG_SYS_CPM_POST_WORD_ADDR +#endif + +#ifndef CONFIG_SYS_CPM_BOOTCOUNT_ADDR +#define CPM_BOOTCOUNT_ADDR	(CPM_POST_WORD_ADDR - 2*sizeof(ulong)) +#else +#define CPM_BOOTCOUNT_ADDR	CONFIG_SYS_CPM_BOOTCOUNT_ADDR +#endif + +#define PROFF_SCC1		((uint)0x8000) +#define PROFF_SCC2		((uint)0x8100) +#define PROFF_SCC3		((uint)0x8200) +#define PROFF_SCC4		((uint)0x8300) +#define PROFF_FCC1		((uint)0x8400) +#define PROFF_FCC2		((uint)0x8500) +#define PROFF_FCC3		((uint)0x8600) +#define PROFF_MCC1		((uint)0x8700) +#define PROFF_SMC1_BASE		((uint)0x87fc) +#define PROFF_IDMA1_BASE	((uint)0x87fe) +#define PROFF_MCC2		((uint)0x8800) +#define PROFF_SMC2_BASE		((uint)0x88fc) +#define PROFF_IDMA2_BASE	((uint)0x88fe) +#define PROFF_SPI_BASE		((uint)0x89fc) +#define PROFF_IDMA3_BASE	((uint)0x89fe) +#define PROFF_TIMERS		((uint)0x8ae0) +#define PROFF_REVNUM		((uint)0x8af0) +#define PROFF_RAND		((uint)0x8af8) +#define PROFF_I2C_BASE		((uint)0x8afc) +#define PROFF_IDMA4_BASE	((uint)0x8afe) + +/* The SMCs are relocated to any of the first eight DPRAM pages. + * We will fix these at the first locations of DPRAM, until we + * get some microcode patches :-). + * The parameter ram space for the SMCs is fifty-some bytes, and + * they are required to start on a 64 byte boundary. + */ +#define PROFF_SMC1	(0) +#define PROFF_SMC2	(64) +#define PROFF_SPI	((16*1024) - 128) + +/* Define enough so I can at least use the serial port as a UART. + */ +typedef struct smc_uart { +	ushort	smc_rbase;	/* Rx Buffer descriptor base address */ +	ushort	smc_tbase;	/* Tx Buffer descriptor base address */ +	u_char	smc_rfcr;	/* Rx function code */ +	u_char	smc_tfcr;	/* Tx function code */ +	ushort	smc_mrblr;	/* Max receive buffer length */ +	uint	smc_rstate;	/* Internal */ +	uint	smc_idp;	/* Internal */ +	ushort	smc_rbptr;	/* Internal */ +	ushort	smc_ibc;	/* Internal */ +	uint	smc_rxtmp;	/* Internal */ +	uint	smc_tstate;	/* Internal */ +	uint	smc_tdp;	/* Internal */ +	ushort	smc_tbptr;	/* Internal */ +	ushort	smc_tbc;	/* Internal */ +	uint	smc_txtmp;	/* Internal */ +	ushort	smc_maxidl;	/* Maximum idle characters */ +	ushort	smc_tmpidl;	/* Temporary idle counter */ +	ushort	smc_brklen;	/* Last received break length */ +	ushort	smc_brkec;	/* rcv'd break condition counter */ +	ushort	smc_brkcr;	/* xmt break count register */ +	ushort	smc_rmask;	/* Temporary bit mask */ +	uint	smc_stmp;	/* SDMA Temp */ +} smc_uart_t; + +/* SMC uart mode register (Internal memory map). +*/ +#define	SMCMR_REN	((ushort)0x0001) +#define SMCMR_TEN	((ushort)0x0002) +#define SMCMR_DM	((ushort)0x000c) +#define SMCMR_SM_GCI	((ushort)0x0000) +#define SMCMR_SM_UART	((ushort)0x0020) +#define SMCMR_SM_TRANS	((ushort)0x0030) +#define SMCMR_SM_MASK	((ushort)0x0030) +#define SMCMR_PM_EVEN	((ushort)0x0100)	/* Even parity, else odd */ +#define SMCMR_REVD	SMCMR_PM_EVEN +#define SMCMR_PEN	((ushort)0x0200)	/* Parity enable */ +#define SMCMR_BS	SMCMR_PEN +#define SMCMR_SL	((ushort)0x0400)	/* Two stops, else one */ +#define SMCR_CLEN_MASK	((ushort)0x7800)	/* Character length */ +#define smcr_mk_clen(C)	(((C) << 11) & SMCR_CLEN_MASK) + +/* SMC Event and Mask register. +*/ +#define	SMCM_TXE	((unsigned char)0x10) +#define	SMCM_BSY	((unsigned char)0x04) +#define	SMCM_TX		((unsigned char)0x02) +#define	SMCM_RX		((unsigned char)0x01) + +/* Baud rate generators. +*/ +#define CPM_BRG_RST		((uint)0x00020000) +#define CPM_BRG_EN		((uint)0x00010000) +#define CPM_BRG_EXTC_INT	((uint)0x00000000) +#define CPM_BRG_EXTC_CLK3_9	((uint)0x00004000) +#define CPM_BRG_EXTC_CLK5_15	((uint)0x00008000) +#define CPM_BRG_ATB		((uint)0x00002000) +#define CPM_BRG_CD_MASK		((uint)0x00001ffe) +#define CPM_BRG_DIV16		((uint)0x00000001) + +/* SCCs. +*/ +#define SCC_GSMRH_IRP		((uint)0x00040000) +#define SCC_GSMRH_GDE		((uint)0x00010000) +#define SCC_GSMRH_TCRC_CCITT	((uint)0x00008000) +#define SCC_GSMRH_TCRC_BISYNC	((uint)0x00004000) +#define SCC_GSMRH_TCRC_HDLC	((uint)0x00000000) +#define SCC_GSMRH_REVD		((uint)0x00002000) +#define SCC_GSMRH_TRX		((uint)0x00001000) +#define SCC_GSMRH_TTX		((uint)0x00000800) +#define SCC_GSMRH_CDP		((uint)0x00000400) +#define SCC_GSMRH_CTSP		((uint)0x00000200) +#define SCC_GSMRH_CDS		((uint)0x00000100) +#define SCC_GSMRH_CTSS		((uint)0x00000080) +#define SCC_GSMRH_TFL		((uint)0x00000040) +#define SCC_GSMRH_RFW		((uint)0x00000020) +#define SCC_GSMRH_TXSY		((uint)0x00000010) +#define SCC_GSMRH_SYNL16	((uint)0x0000000c) +#define SCC_GSMRH_SYNL8		((uint)0x00000008) +#define SCC_GSMRH_SYNL4		((uint)0x00000004) +#define SCC_GSMRH_RTSM		((uint)0x00000002) +#define SCC_GSMRH_RSYN		((uint)0x00000001) + +#define SCC_GSMRL_SIR		((uint)0x80000000)	/* SCC2 only */ +#define SCC_GSMRL_EDGE_NONE	((uint)0x60000000) +#define SCC_GSMRL_EDGE_NEG	((uint)0x40000000) +#define SCC_GSMRL_EDGE_POS	((uint)0x20000000) +#define SCC_GSMRL_EDGE_BOTH	((uint)0x00000000) +#define SCC_GSMRL_TCI		((uint)0x10000000) +#define SCC_GSMRL_TSNC_3	((uint)0x0c000000) +#define SCC_GSMRL_TSNC_4	((uint)0x08000000) +#define SCC_GSMRL_TSNC_14	((uint)0x04000000) +#define SCC_GSMRL_TSNC_INF	((uint)0x00000000) +#define SCC_GSMRL_RINV		((uint)0x02000000) +#define SCC_GSMRL_TINV		((uint)0x01000000) +#define SCC_GSMRL_TPL_128	((uint)0x00c00000) +#define SCC_GSMRL_TPL_64	((uint)0x00a00000) +#define SCC_GSMRL_TPL_48	((uint)0x00800000) +#define SCC_GSMRL_TPL_32	((uint)0x00600000) +#define SCC_GSMRL_TPL_16	((uint)0x00400000) +#define SCC_GSMRL_TPL_8		((uint)0x00200000) +#define SCC_GSMRL_TPL_NONE	((uint)0x00000000) +#define SCC_GSMRL_TPP_ALL1	((uint)0x00180000) +#define SCC_GSMRL_TPP_01	((uint)0x00100000) +#define SCC_GSMRL_TPP_10	((uint)0x00080000) +#define SCC_GSMRL_TPP_ZEROS	((uint)0x00000000) +#define SCC_GSMRL_TEND		((uint)0x00040000) +#define SCC_GSMRL_TDCR_32	((uint)0x00030000) +#define SCC_GSMRL_TDCR_16	((uint)0x00020000) +#define SCC_GSMRL_TDCR_8	((uint)0x00010000) +#define SCC_GSMRL_TDCR_1	((uint)0x00000000) +#define SCC_GSMRL_RDCR_32	((uint)0x0000c000) +#define SCC_GSMRL_RDCR_16	((uint)0x00008000) +#define SCC_GSMRL_RDCR_8	((uint)0x00004000) +#define SCC_GSMRL_RDCR_1	((uint)0x00000000) +#define SCC_GSMRL_RENC_DFMAN	((uint)0x00003000) +#define SCC_GSMRL_RENC_MANCH	((uint)0x00002000) +#define SCC_GSMRL_RENC_FM0	((uint)0x00001000) +#define SCC_GSMRL_RENC_NRZI	((uint)0x00000800) +#define SCC_GSMRL_RENC_NRZ	((uint)0x00000000) +#define SCC_GSMRL_TENC_DFMAN	((uint)0x00000600) +#define SCC_GSMRL_TENC_MANCH	((uint)0x00000400) +#define SCC_GSMRL_TENC_FM0	((uint)0x00000200) +#define SCC_GSMRL_TENC_NRZI	((uint)0x00000100) +#define SCC_GSMRL_TENC_NRZ	((uint)0x00000000) +#define SCC_GSMRL_DIAG_LE	((uint)0x000000c0)	/* Loop and echo */ +#define SCC_GSMRL_DIAG_ECHO	((uint)0x00000080) +#define SCC_GSMRL_DIAG_LOOP	((uint)0x00000040) +#define SCC_GSMRL_DIAG_NORM	((uint)0x00000000) +#define SCC_GSMRL_ENR		((uint)0x00000020) +#define SCC_GSMRL_ENT		((uint)0x00000010) +#define SCC_GSMRL_MODE_ENET	((uint)0x0000000c) +#define SCC_GSMRL_MODE_DDCMP	((uint)0x00000009) +#define SCC_GSMRL_MODE_BISYNC	((uint)0x00000008) +#define SCC_GSMRL_MODE_V14	((uint)0x00000007) +#define SCC_GSMRL_MODE_AHDLC	((uint)0x00000006) +#define SCC_GSMRL_MODE_PROFIBUS	((uint)0x00000005) +#define SCC_GSMRL_MODE_UART	((uint)0x00000004) +#define SCC_GSMRL_MODE_SS7	((uint)0x00000003) +#define SCC_GSMRL_MODE_ATALK	((uint)0x00000002) +#define SCC_GSMRL_MODE_HDLC	((uint)0x00000000) + +#define SCC_TODR_TOD		((ushort)0x8000) + +/* SCC Event and Mask register. +*/ +#define	SCCM_TXE	((unsigned char)0x10) +#define	SCCM_BSY	((unsigned char)0x04) +#define	SCCM_TX		((unsigned char)0x02) +#define	SCCM_RX		((unsigned char)0x01) + +typedef struct scc_param { +	ushort	scc_rbase;	/* Rx Buffer descriptor base address */ +	ushort	scc_tbase;	/* Tx Buffer descriptor base address */ +	u_char	scc_rfcr;	/* Rx function code */ +	u_char	scc_tfcr;	/* Tx function code */ +	ushort	scc_mrblr;	/* Max receive buffer length */ +	uint	scc_rstate;	/* Internal */ +	uint	scc_idp;	/* Internal */ +	ushort	scc_rbptr;	/* Internal */ +	ushort	scc_ibc;	/* Internal */ +	uint	scc_rxtmp;	/* Internal */ +	uint	scc_tstate;	/* Internal */ +	uint	scc_tdp;	/* Internal */ +	ushort	scc_tbptr;	/* Internal */ +	ushort	scc_tbc;	/* Internal */ +	uint	scc_txtmp;	/* Internal */ +	uint	scc_rcrc;	/* Internal */ +	uint	scc_tcrc;	/* Internal */ +} sccp_t; + +/* CPM Ethernet through SCC1. + */ +typedef struct scc_enet { +	sccp_t	sen_genscc; +	uint	sen_cpres;	/* Preset CRC */ +	uint	sen_cmask;	/* Constant mask for CRC */ +	uint	sen_crcec;	/* CRC Error counter */ +	uint	sen_alec;	/* alignment error counter */ +	uint	sen_disfc;	/* discard frame counter */ +	ushort	sen_pads;	/* Tx short frame pad character */ +	ushort	sen_retlim;	/* Retry limit threshold */ +	ushort	sen_retcnt;	/* Retry limit counter */ +	ushort	sen_maxflr;	/* maximum frame length register */ +	ushort	sen_minflr;	/* minimum frame length register */ +	ushort	sen_maxd1;	/* maximum DMA1 length */ +	ushort	sen_maxd2;	/* maximum DMA2 length */ +	ushort	sen_maxd;	/* Rx max DMA */ +	ushort	sen_dmacnt;	/* Rx DMA counter */ +	ushort	sen_maxb;	/* Max BD byte count */ +	ushort	sen_gaddr1;	/* Group address filter */ +	ushort	sen_gaddr2; +	ushort	sen_gaddr3; +	ushort	sen_gaddr4; +	uint	sen_tbuf0data0;	/* Save area 0 - current frame */ +	uint	sen_tbuf0data1;	/* Save area 1 - current frame */ +	uint	sen_tbuf0rba;	/* Internal */ +	uint	sen_tbuf0crc;	/* Internal */ +	ushort	sen_tbuf0bcnt;	/* Internal */ +	ushort	sen_paddrh;	/* physical address (MSB) */ +	ushort	sen_paddrm; +	ushort	sen_paddrl;	/* physical address (LSB) */ +	ushort	sen_pper;	/* persistence */ +	ushort	sen_rfbdptr;	/* Rx first BD pointer */ +	ushort	sen_tfbdptr;	/* Tx first BD pointer */ +	ushort	sen_tlbdptr;	/* Tx last BD pointer */ +	uint	sen_tbuf1data0;	/* Save area 0 - current frame */ +	uint	sen_tbuf1data1;	/* Save area 1 - current frame */ +	uint	sen_tbuf1rba;	/* Internal */ +	uint	sen_tbuf1crc;	/* Internal */ +	ushort	sen_tbuf1bcnt;	/* Internal */ +	ushort	sen_txlen;	/* Tx Frame length counter */ +	ushort	sen_iaddr1;	/* Individual address filter */ +	ushort	sen_iaddr2; +	ushort	sen_iaddr3; +	ushort	sen_iaddr4; +	ushort	sen_boffcnt;	/* Backoff counter */ + +	/* NOTE: Some versions of the manual have the following items +	 * incorrectly documented.  Below is the proper order. +	 */ +	ushort	sen_taddrh;	/* temp address (MSB) */ +	ushort	sen_taddrm; +	ushort	sen_taddrl;	/* temp address (LSB) */ +} scc_enet_t; + + +/* SCC Event register as used by Ethernet. +*/ +#define SCCE_ENET_GRA	((ushort)0x0080)	/* Graceful stop complete */ +#define SCCE_ENET_TXE	((ushort)0x0010)	/* Transmit Error */ +#define SCCE_ENET_RXF	((ushort)0x0008)	/* Full frame received */ +#define SCCE_ENET_BSY	((ushort)0x0004)	/* All incoming buffers full */ +#define SCCE_ENET_TXB	((ushort)0x0002)	/* A buffer was transmitted */ +#define SCCE_ENET_RXB	((ushort)0x0001)	/* A buffer was received */ + +/* SCC Mode Register (PSMR) as used by Ethernet. +*/ +#define SCC_PSMR_HBC	((ushort)0x8000)	/* Enable heartbeat */ +#define SCC_PSMR_FC	((ushort)0x4000)	/* Force collision */ +#define SCC_PSMR_RSH	((ushort)0x2000)	/* Receive short frames */ +#define SCC_PSMR_IAM	((ushort)0x1000)	/* Check individual hash */ +#define SCC_PSMR_ENCRC	((ushort)0x0800)	/* Ethernet CRC mode */ +#define SCC_PSMR_PRO	((ushort)0x0200)	/* Promiscuous mode */ +#define SCC_PSMR_BRO	((ushort)0x0100)	/* Catch broadcast pkts */ +#define SCC_PSMR_SBT	((ushort)0x0080)	/* Special backoff timer */ +#define SCC_PSMR_LPB	((ushort)0x0040)	/* Set Loopback mode */ +#define SCC_PSMR_SIP	((ushort)0x0020)	/* Sample Input Pins */ +#define SCC_PSMR_LCW	((ushort)0x0010)	/* Late collision window */ +#define SCC_PSMR_NIB22	((ushort)0x000a)	/* Start frame search */ +#define SCC_PSMR_FDE	((ushort)0x0001)	/* Full duplex enable */ + +/* Buffer descriptor control/status used by Ethernet receive. + * Common to SCC and FCC. + */ +#define BD_ENET_RX_EMPTY	((ushort)0x8000) +#define BD_ENET_RX_WRAP		((ushort)0x2000) +#define BD_ENET_RX_INTR		((ushort)0x1000) +#define BD_ENET_RX_LAST		((ushort)0x0800) +#define BD_ENET_RX_FIRST	((ushort)0x0400) +#define BD_ENET_RX_MISS		((ushort)0x0100) +#define BD_ENET_RX_BC		((ushort)0x0080)	/* FCC Only */ +#define BD_ENET_RX_MC		((ushort)0x0040)	/* FCC Only */ +#define BD_ENET_RX_LG		((ushort)0x0020) +#define BD_ENET_RX_NO		((ushort)0x0010) +#define BD_ENET_RX_SH		((ushort)0x0008) +#define BD_ENET_RX_CR		((ushort)0x0004) +#define BD_ENET_RX_OV		((ushort)0x0002) +#define BD_ENET_RX_CL		((ushort)0x0001) +#define BD_ENET_RX_STATS	((ushort)0x01ff)	/* All status bits */ + +/* Buffer descriptor control/status used by Ethernet transmit. + * Common to SCC and FCC. + */ +#define BD_ENET_TX_READY	((ushort)0x8000) +#define BD_ENET_TX_PAD		((ushort)0x4000) +#define BD_ENET_TX_WRAP		((ushort)0x2000) +#define BD_ENET_TX_INTR		((ushort)0x1000) +#define BD_ENET_TX_LAST		((ushort)0x0800) +#define BD_ENET_TX_TC		((ushort)0x0400) +#define BD_ENET_TX_DEF		((ushort)0x0200) +#define BD_ENET_TX_HB		((ushort)0x0100) +#define BD_ENET_TX_LC		((ushort)0x0080) +#define BD_ENET_TX_RL		((ushort)0x0040) +#define BD_ENET_TX_RCMASK	((ushort)0x003c) +#define BD_ENET_TX_UN		((ushort)0x0002) +#define BD_ENET_TX_CSL		((ushort)0x0001) +#define BD_ENET_TX_STATS	((ushort)0x03ff)	/* All status bits */ + +/* SCC as UART +*/ +typedef struct scc_uart { +	sccp_t	scc_genscc; +	uint	scc_res1;	/* Reserved */ +	uint	scc_res2;	/* Reserved */ +	ushort	scc_maxidl;	/* Maximum idle chars */ +	ushort	scc_idlc;	/* temp idle counter */ +	ushort	scc_brkcr;	/* Break count register */ +	ushort	scc_parec;	/* receive parity error counter */ +	ushort	scc_frmec;	/* receive framing error counter */ +	ushort	scc_nosec;	/* receive noise counter */ +	ushort	scc_brkec;	/* receive break condition counter */ +	ushort	scc_brkln;	/* last received break length */ +	ushort	scc_uaddr1;	/* UART address character 1 */ +	ushort	scc_uaddr2;	/* UART address character 2 */ +	ushort	scc_rtemp;	/* Temp storage */ +	ushort	scc_toseq;	/* Transmit out of sequence char */ +	ushort	scc_char1;	/* control character 1 */ +	ushort	scc_char2;	/* control character 2 */ +	ushort	scc_char3;	/* control character 3 */ +	ushort	scc_char4;	/* control character 4 */ +	ushort	scc_char5;	/* control character 5 */ +	ushort	scc_char6;	/* control character 6 */ +	ushort	scc_char7;	/* control character 7 */ +	ushort	scc_char8;	/* control character 8 */ +	ushort	scc_rccm;	/* receive control character mask */ +	ushort	scc_rccr;	/* receive control character register */ +	ushort	scc_rlbc;	/* receive last break character */ +} scc_uart_t; + +/* SCC Event and Mask registers when it is used as a UART. +*/ +#define UART_SCCM_GLR		((ushort)0x1000) +#define UART_SCCM_GLT		((ushort)0x0800) +#define UART_SCCM_AB		((ushort)0x0200) +#define UART_SCCM_IDL		((ushort)0x0100) +#define UART_SCCM_GRA		((ushort)0x0080) +#define UART_SCCM_BRKE		((ushort)0x0040) +#define UART_SCCM_BRKS		((ushort)0x0020) +#define UART_SCCM_CCR		((ushort)0x0008) +#define UART_SCCM_BSY		((ushort)0x0004) +#define UART_SCCM_TX		((ushort)0x0002) +#define UART_SCCM_RX		((ushort)0x0001) + +/* The SCC PSMR when used as a UART. +*/ +#define SCU_PSMR_FLC		((ushort)0x8000) +#define SCU_PSMR_SL		((ushort)0x4000) +#define SCU_PSMR_CL		((ushort)0x3000) +#define SCU_PSMR_UM		((ushort)0x0c00) +#define SCU_PSMR_FRZ		((ushort)0x0200) +#define SCU_PSMR_RZS		((ushort)0x0100) +#define SCU_PSMR_SYN		((ushort)0x0080) +#define SCU_PSMR_DRT		((ushort)0x0040) +#define SCU_PSMR_PEN		((ushort)0x0010) +#define SCU_PSMR_RPM		((ushort)0x000c) +#define SCU_PSMR_REVP		((ushort)0x0008) +#define SCU_PSMR_TPM		((ushort)0x0003) +#define SCU_PSMR_TEVP		((ushort)0x0003) + +/* CPM Transparent mode SCC. + */ +typedef struct scc_trans { +	sccp_t	st_genscc; +	uint	st_cpres;	/* Preset CRC */ +	uint	st_cmask;	/* Constant mask for CRC */ +} scc_trans_t; + +#define BD_SCC_TX_LAST		((ushort)0x0800) + +/*  SCC as HDLC controller - taken from commproc.h + */ +typedef struct scc_hdlc { +	sccp_t  sh_genscc; +	/* +	* HDLC specific parameter RAM +	*/ +	uchar   res[4];         /* reserved */ +	ulong   sh_cmask;       /* CRC constant */ +	ulong   sh_cpres;       /* CRC preset */ +	ushort  sh_disfc;       /* discarded frame counter */ +	ushort  sh_crcec;       /* CRC error counter */ +	ushort  sh_abtsc;       /* abort sequence counter */ +	ushort  sh_nmarc;       /* nonmatching address rx cnt */ +	ushort  sh_retrc;       /* frame retransmission cnt */ +	ushort  sh_mflr;        /* maximum frame length reg */ +	ushort  sh_maxcnt;      /* maximum length counter */ +	ushort  sh_rfthr;       /* received frames threshold */ +	ushort  sh_rfcnt;       /* received frames count */ +	ushort  sh_hmask;       /* user defined frm addr mask */ +	ushort  sh_haddr1;      /* user defined frm address 1 */ +	ushort  sh_haddr2;      /* user defined frm address 2 */ +	ushort  sh_haddr3;      /* user defined frm address 3 */ +	ushort  sh_haddr4;      /* user defined frm address 4 */ +	ushort  tmp;            /* temp */ +	ushort  tmp_mb;         /* temp */ +} scc_hdlc_t; + +/* How about some FCCs..... +*/ +#define FCC_GFMR_DIAG_NORM	((uint)0x00000000) +#define FCC_GFMR_DIAG_LE	((uint)0x40000000) +#define FCC_GFMR_DIAG_AE	((uint)0x80000000) +#define FCC_GFMR_DIAG_ALE	((uint)0xc0000000) +#define FCC_GFMR_TCI		((uint)0x20000000) +#define FCC_GFMR_TRX		((uint)0x10000000) +#define FCC_GFMR_TTX		((uint)0x08000000) +#define FCC_GFMR_TTX		((uint)0x08000000) +#define FCC_GFMR_CDP		((uint)0x04000000) +#define FCC_GFMR_CTSP		((uint)0x02000000) +#define FCC_GFMR_CDS		((uint)0x01000000) +#define FCC_GFMR_CTSS		((uint)0x00800000) +#define FCC_GFMR_SYNL_NONE	((uint)0x00000000) +#define FCC_GFMR_SYNL_AUTO	((uint)0x00004000) +#define FCC_GFMR_SYNL_8		((uint)0x00008000) +#define FCC_GFMR_SYNL_16	((uint)0x0000c000) +#define FCC_GFMR_RTSM		((uint)0x00002000) +#define FCC_GFMR_RENC_NRZ	((uint)0x00000000) +#define FCC_GFMR_RENC_NRZI	((uint)0x00000800) +#define FCC_GFMR_REVD		((uint)0x00000400) +#define FCC_GFMR_TENC_NRZ	((uint)0x00000000) +#define FCC_GFMR_TENC_NRZI	((uint)0x00000100) +#define FCC_GFMR_TCRC_16	((uint)0x00000000) +#define FCC_GFMR_TCRC_32	((uint)0x00000080) +#define FCC_GFMR_ENR		((uint)0x00000020) +#define FCC_GFMR_ENT		((uint)0x00000010) +#define FCC_GFMR_MODE_ENET	((uint)0x0000000c) +#define FCC_GFMR_MODE_ATM	((uint)0x0000000a) +#define FCC_GFMR_MODE_HDLC	((uint)0x00000000) + +/* Generic FCC parameter ram. +*/ +typedef struct fcc_param { +	ushort	fcc_riptr;	/* Rx Internal temp pointer */ +	ushort	fcc_tiptr;	/* Tx Internal temp pointer */ +	ushort	fcc_res1; +	ushort	fcc_mrblr;	/* Max receive buffer length, mod 32 bytes */ +	uint	fcc_rstate;	/* Upper byte is Func code, must be set */ +	uint	fcc_rbase;	/* Receive BD base */ +	ushort	fcc_rbdstat;	/* RxBD status */ +	ushort	fcc_rbdlen;	/* RxBD down counter */ +	uint	fcc_rdptr;	/* RxBD internal data pointer */ +	uint	fcc_tstate;	/* Upper byte is Func code, must be set */ +	uint	fcc_tbase;	/* Transmit BD base */ +	ushort	fcc_tbdstat;	/* TxBD status */ +	ushort	fcc_tbdlen;	/* TxBD down counter */ +	uint	fcc_tdptr;	/* TxBD internal data pointer */ +	uint	fcc_rbptr;	/* Rx BD Internal buf pointer */ +	uint	fcc_tbptr;	/* Tx BD Internal buf pointer */ +	uint	fcc_rcrc;	/* Rx temp CRC */ +	uint	fcc_res2; +	uint	fcc_tcrc;	/* Tx temp CRC */ +} fccp_t; + + +/* Ethernet controller through FCC. +*/ +typedef struct fcc_enet { +	fccp_t	fen_genfcc; +	uint	fen_statbuf;	/* Internal status buffer */ +	uint	fen_camptr;	/* CAM address */ +	uint	fen_cmask;	/* Constant mask for CRC */ +	uint	fen_cpres;	/* Preset CRC */ +	uint	fen_crcec;	/* CRC Error counter */ +	uint	fen_alec;	/* alignment error counter */ +	uint	fen_disfc;	/* discard frame counter */ +	ushort	fen_retlim;	/* Retry limit */ +	ushort	fen_retcnt;	/* Retry counter */ +	ushort	fen_pper;	/* Persistence */ +	ushort	fen_boffcnt;	/* backoff counter */ +	uint	fen_gaddrh;	/* Group address filter, high 32-bits */ +	uint	fen_gaddrl;	/* Group address filter, low 32-bits */ +	ushort	fen_tfcstat;	/* out of sequence TxBD */ +	ushort	fen_tfclen; +	uint	fen_tfcptr; +	ushort	fen_mflr;	/* Maximum frame length (1518) */ +	ushort	fen_paddrh;	/* MAC address */ +	ushort	fen_paddrm; +	ushort	fen_paddrl; +	ushort	fen_ibdcount;	/* Internal BD counter */ +	ushort	fen_idbstart;	/* Internal BD start pointer */ +	ushort	fen_ibdend;	/* Internal BD end pointer */ +	ushort	fen_txlen;	/* Internal Tx frame length counter */ +	uint	fen_ibdbase[8]; /* Internal use */ +	uint	fen_iaddrh;	/* Individual address filter */ +	uint	fen_iaddrl; +	ushort	fen_minflr;	/* Minimum frame length (64) */ +	ushort	fen_taddrh;	/* Filter transfer MAC address */ +	ushort	fen_taddrm; +	ushort	fen_taddrl; +	ushort	fen_padptr;	/* Pointer to pad byte buffer */ +	ushort	fen_cftype;	/* control frame type */ +	ushort	fen_cfrange;	/* control frame range */ +	ushort	fen_maxb;	/* maximum BD count */ +	ushort	fen_maxd1;	/* Max DMA1 length (1520) */ +	ushort	fen_maxd2;	/* Max DMA2 length (1520) */ +	ushort	fen_maxd;	/* internal max DMA count */ +	ushort	fen_dmacnt;	/* internal DMA counter */ +	uint	fen_octc;	/* Total octect counter */ +	uint	fen_colc;	/* Total collision counter */ +	uint	fen_broc;	/* Total broadcast packet counter */ +	uint	fen_mulc;	/* Total multicast packet count */ +	uint	fen_uspc;	/* Total packets < 64 bytes */ +	uint	fen_frgc;	/* Total packets < 64 bytes with errors */ +	uint	fen_ospc;	/* Total packets > 1518 */ +	uint	fen_jbrc;	/* Total packets > 1518 with errors */ +	uint	fen_p64c;	/* Total packets == 64 bytes */ +	uint	fen_p65c;	/* Total packets 64 < bytes <= 127 */ +	uint	fen_p128c;	/* Total packets 127 < bytes <= 255 */ +	uint	fen_p256c;	/* Total packets 256 < bytes <= 511 */ +	uint	fen_p512c;	/* Total packets 512 < bytes <= 1023 */ +	uint	fen_p1024c;	/* Total packets 1024 < bytes <= 1518 */ +	uint	fen_cambuf;	/* Internal CAM buffer poiner */ +	ushort	fen_rfthr;	/* Received frames threshold */ +	ushort	fen_rfcnt;	/* Received frames count */ +} fcc_enet_t; + +/* FCC Event/Mask register as used by Ethernet. +*/ +#define FCC_ENET_GRA	((ushort)0x0080)	/* Graceful stop complete */ +#define FCC_ENET_RXC	((ushort)0x0040)	/* Control Frame Received */ +#define FCC_ENET_TXC	((ushort)0x0020)	/* Out of seq. Tx sent */ +#define FCC_ENET_TXE	((ushort)0x0010)	/* Transmit Error */ +#define FCC_ENET_RXF	((ushort)0x0008)	/* Full frame received */ +#define FCC_ENET_BSY	((ushort)0x0004)	/* Busy.  Rx Frame dropped */ +#define FCC_ENET_TXB	((ushort)0x0002)	/* A buffer was transmitted */ +#define FCC_ENET_RXB	((ushort)0x0001)	/* A buffer was received */ + +/* FCC Mode Register (FPSMR) as used by Ethernet. +*/ +#define FCC_PSMR_HBC	((uint)0x80000000)	/* Enable heartbeat */ +#define FCC_PSMR_FC	((uint)0x40000000)	/* Force Collision */ +#define FCC_PSMR_SBT	((uint)0x20000000)	/* Stop backoff timer */ +#define FCC_PSMR_LPB	((uint)0x10000000)	/* Local protect. 1 = FDX */ +#define FCC_PSMR_LCW	((uint)0x08000000)	/* Late collision select */ +#define FCC_PSMR_FDE	((uint)0x04000000)	/* Full Duplex Enable */ +#define FCC_PSMR_MON	((uint)0x02000000)	/* RMON Enable */ +#define FCC_PSMR_PRO	((uint)0x00400000)	/* Promiscuous Enable */ +#define FCC_PSMR_FCE	((uint)0x00200000)	/* Flow Control Enable */ +#define FCC_PSMR_RSH	((uint)0x00100000)	/* Receive Short Frames */ +#define FCC_PSMR_RMII	((uint)0x00020000)	/* Use RMII interface */ +#define FCC_PSMR_CAM	((uint)0x00000400)	/* CAM enable */ +#define FCC_PSMR_BRO	((uint)0x00000200)	/* Broadcast pkt discard */ +#define FCC_PSMR_ENCRC	((uint)0x00000080)	/* Use 32-bit CRC */ + +/* IIC parameter RAM. +*/ +typedef struct iic { +	ushort	iic_rbase;	/* Rx Buffer descriptor base address */ +	ushort	iic_tbase;	/* Tx Buffer descriptor base address */ +	u_char	iic_rfcr;	/* Rx function code */ +	u_char	iic_tfcr;	/* Tx function code */ +	ushort	iic_mrblr;	/* Max receive buffer length */ +	uint	iic_rstate;	/* Internal */ +	uint	iic_rdp;	/* Internal */ +	ushort	iic_rbptr;	/* Internal */ +	ushort	iic_rbc;	/* Internal */ +	uint	iic_rxtmp;	/* Internal */ +	uint	iic_tstate;	/* Internal */ +	uint	iic_tdp;	/* Internal */ +	ushort	iic_tbptr;	/* Internal */ +	ushort	iic_tbc;	/* Internal */ +	uint	iic_txtmp;	/* Internal */ +} iic_t; + +/* SPI parameter RAM. +*/ +typedef struct spi { +	ushort	spi_rbase;	/* Rx Buffer descriptor base address */ +	ushort	spi_tbase;	/* Tx Buffer descriptor base address */ +	u_char	spi_rfcr;	/* Rx function code */ +	u_char	spi_tfcr;	/* Tx function code */ +	ushort	spi_mrblr;	/* Max receive buffer length */ +	uint	spi_rstate;	/* Internal */ +	uint	spi_rdp;	/* Internal */ +	ushort	spi_rbptr;	/* Internal */ +	ushort	spi_rbc;	/* Internal */ +	uint	spi_rxtmp;	/* Internal */ +	uint	spi_tstate;	/* Internal */ +	uint	spi_tdp;	/* Internal */ +	ushort	spi_tbptr;	/* Internal */ +	ushort	spi_tbc;	/* Internal */ +	uint	spi_txtmp;	/* Internal */ +	uint	spi_res;	/* Tx temp. */ +	uint	spi_res1[4];	/* SDMA temp. */ +} spi_t; + +/* SPI Mode register. +*/ +#define SPMODE_LOOP	((ushort)0x4000)	/* Loopback */ +#define SPMODE_CI	((ushort)0x2000)	/* Clock Invert */ +#define SPMODE_CP	((ushort)0x1000)	/* Clock Phase */ +#define SPMODE_DIV16	((ushort)0x0800)	/* BRG/16 mode */ +#define SPMODE_REV	((ushort)0x0400)	/* Reversed Data */ +#define SPMODE_MSTR	((ushort)0x0200)	/* SPI Master */ +#define SPMODE_EN	((ushort)0x0100)	/* Enable */ +#define SPMODE_LENMSK	((ushort)0x00f0)	/* character length */ +#define SPMODE_PMMSK	((ushort)0x000f)	/* prescale modulus */ + +#define SPMODE_LEN(x)	((((x)-1)&0xF)<<4) +#define SPMODE_PM(x)	((x) &0xF) + +/* SPI Event/Mask register. +*/ +#define SPI_EMASK		0x37	/* Event Mask				*/ +#define SPI_MME			0x20	/* Multi-Master Error			*/ +#define SPI_TXE			0x10	/* Transmit Error			*/ +#define SPI_BSY			0x04	/* Busy					*/ +#define SPI_TXB			0x02	/* Tx Buffer Empty			*/ +#define SPI_RXB			0x01	/* RX Buffer full/closed		*/ + +#define SPI_STR			0x80	/* SPCOM: Start transmit		*/ + +#define SPI_EB		((u_char)0x10)		/* big endian byte order */ + +#define BD_IIC_START		((ushort)0x0400) + +#endif /* __CPM_82XX__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/cpm_85xx.h b/roms/u-boot/arch/powerpc/include/asm/cpm_85xx.h new file mode 100644 index 00000000..b137a714 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/cpm_85xx.h @@ -0,0 +1,829 @@ +/* + * MPC85xx Communication Processor Module + * Copyright (c) 2003,Motorola Inc. + * Xianghua Xiao (X.Xiao@motorola.com) + * + * MPC8260 Communication Processor Module. + * Copyright (c) 1999 Dan Malek (dmalek@jlc.net) + * + * This file contains structures and information for the communication + * processor channels found in the dual port RAM or parameter RAM. + * All CPM control and status is available through the MPC8260 internal + * memory map.  See immap.h for details. + */ +#ifndef __CPM_85XX__ +#define __CPM_85XX__ + +#include <asm/immap_85xx.h> + +/* CPM Command register. +*/ +#define CPM_CR_RST	((uint)0x80000000) +#define CPM_CR_PAGE	((uint)0x7c000000) +#define CPM_CR_SBLOCK	((uint)0x03e00000) +#define CPM_CR_FLG	((uint)0x00010000) +#define CPM_CR_MCN	((uint)0x00003fc0) +#define CPM_CR_OPCODE	((uint)0x0000000f) + +/* Device sub-block and page codes. +*/ +#define CPM_CR_SCC1_SBLOCK	(0x04) +#define CPM_CR_SCC2_SBLOCK	(0x05) +#define CPM_CR_SCC3_SBLOCK	(0x06) +#define CPM_CR_SCC4_SBLOCK	(0x07) +#define CPM_CR_SMC1_SBLOCK	(0x08) +#define CPM_CR_SMC2_SBLOCK	(0x09) +#define CPM_CR_SPI_SBLOCK	(0x0a) +#define CPM_CR_I2C_SBLOCK	(0x0b) +#define CPM_CR_TIMER_SBLOCK	(0x0f) +#define CPM_CR_RAND_SBLOCK	(0x0e) +#define CPM_CR_FCC1_SBLOCK	(0x10) +#define CPM_CR_FCC2_SBLOCK	(0x11) +#define CPM_CR_FCC3_SBLOCK	(0x12) +#define CPM_CR_MCC1_SBLOCK	(0x1c) + +#define CPM_CR_SCC1_PAGE	(0x00) +#define CPM_CR_SCC2_PAGE	(0x01) +#define CPM_CR_SCC3_PAGE	(0x02) +#define CPM_CR_SCC4_PAGE	(0x03) +#define CPM_CR_SPI_PAGE		(0x09) +#define CPM_CR_I2C_PAGE		(0x0a) +#define CPM_CR_TIMER_PAGE	(0x0a) +#define CPM_CR_RAND_PAGE	(0x0a) +#define CPM_CR_FCC1_PAGE	(0x04) +#define CPM_CR_FCC2_PAGE	(0x05) +#define CPM_CR_FCC3_PAGE	(0x06) +#define CPM_CR_MCC1_PAGE	(0x07) +#define CPM_CR_MCC2_PAGE	(0x08) + +/* Some opcodes (there are more...later) +*/ +#define CPM_CR_INIT_TRX		((ushort)0x0000) +#define CPM_CR_INIT_RX		((ushort)0x0001) +#define CPM_CR_INIT_TX		((ushort)0x0002) +#define CPM_CR_HUNT_MODE	((ushort)0x0003) +#define CPM_CR_STOP_TX		((ushort)0x0004) +#define CPM_CR_RESTART_TX	((ushort)0x0006) +#define CPM_CR_SET_GADDR	((ushort)0x0008) + +#define mk_cr_cmd(PG, SBC, MCN, OP) \ +	((PG << 26) | (SBC << 21) | (MCN << 6) | OP) + +/* Dual Port RAM addresses.  The first 16K is available for almost + * any CPM use, so we put the BDs there.  The first 128 bytes are + * used for SMC1 and SMC2 parameter RAM, so we start allocating + * BDs above that.  All of this must change when we start + * downloading RAM microcode. + */ +#define CPM_DATAONLY_BASE	((uint)128) +#define CPM_DP_NOSPACE		((uint)0x7FFFFFFF) +#if defined(CONFIG_MPC8541) || defined(CONFIG_MPC8555) +#define CPM_FCC_SPECIAL_BASE	((uint)0x00009000) +#define CPM_DATAONLY_SIZE	((uint)(8 * 1024) - CPM_DATAONLY_BASE) +#else	/* MPC8540, MPC8560 */ +#define CPM_FCC_SPECIAL_BASE	((uint)0x0000B000) +#define CPM_DATAONLY_SIZE	((uint)(16 * 1024) - CPM_DATAONLY_BASE) +#endif + +/* The number of pages of host memory we allocate for CPM.  This is + * done early in kernel initialization to get physically contiguous + * pages. + */ +#define NUM_CPM_HOST_PAGES	2 + +/* Export the base address of the communication processor registers + * and dual port ram. + */ +/*extern	cpm8560_t	*cpmp;	 Pointer to comm processor */ +uint		m8560_cpm_dpalloc(uint size, uint align); +uint		m8560_cpm_hostalloc(uint size, uint align); +void		m8560_cpm_setbrg(uint brg, uint rate); +void		m8560_cpm_fastbrg(uint brg, uint rate, int div16); +void		m8560_cpm_extcbrg(uint brg, uint rate, uint extclk, int pinsel); + +/* Buffer descriptors used by many of the CPM protocols. +*/ +typedef struct cpm_buf_desc { +	ushort	cbd_sc;		/* Status and Control */ +	ushort	cbd_datlen;	/* Data length in buffer */ +	uint	cbd_bufaddr;	/* Buffer address in host memory */ +} cbd_t; + +#define BD_SC_EMPTY	((ushort)0x8000)	/* Receive is empty */ +#define BD_SC_READY	((ushort)0x8000)	/* Transmit is ready */ +#define BD_SC_WRAP	((ushort)0x2000)	/* Last buffer descriptor */ +#define BD_SC_INTRPT	((ushort)0x1000)	/* Interrupt on change */ +#define BD_SC_LAST	((ushort)0x0800)	/* Last buffer in frame */ +#define BD_SC_CM	((ushort)0x0200)	/* Continous mode */ +#define BD_SC_ID	((ushort)0x0100)	/* Rec'd too many idles */ +#define BD_SC_P		((ushort)0x0100)	/* xmt preamble */ +#define BD_SC_BR	((ushort)0x0020)	/* Break received */ +#define BD_SC_FR	((ushort)0x0010)	/* Framing error */ +#define BD_SC_PR	((ushort)0x0008)	/* Parity error */ +#define BD_SC_OV	((ushort)0x0002)	/* Overrun */ +#define BD_SC_CD	((ushort)0x0001)	/* ?? */ + +/* Function code bits, usually generic to devices. +*/ +#define CPMFCR_GBL	((u_char)0x20)	/* Set memory snooping */ +#define CPMFCR_EB	((u_char)0x10)	/* Set big endian byte order */ +#define CPMFCR_TC2	((u_char)0x04)	/* Transfer code 2 value */ +#define CPMFCR_DTB	((u_char)0x02)	/* Use local bus for data when set */ +#define CPMFCR_BDB	((u_char)0x01)	/* Use local bus for BD when set */ + +/* Parameter RAM offsets from the base. +*/ +#define CPM_POST_WORD_ADDR      0x80FC	/* steal a long at the end of SCC1 */ +#define PROFF_SCC1		((uint)0x8000) +#define PROFF_SCC2		((uint)0x8100) +#define PROFF_SCC3		((uint)0x8200) +#define PROFF_SCC4		((uint)0x8300) +#define PROFF_FCC1		((uint)0x8400) +#define PROFF_FCC2		((uint)0x8500) +#define PROFF_FCC3		((uint)0x8600) +#define PROFF_MCC1		((uint)0x8700) +#define PROFF_MCC2		((uint)0x8800) +#define PROFF_SPI_BASE		((uint)0x89fc) +#define PROFF_TIMERS		((uint)0x8ae0) +#define PROFF_REVNUM		((uint)0x8af0) +#define PROFF_RAND		((uint)0x8af8) +#define PROFF_I2C_BASE		((uint)0x8afc) + +/* Baud rate generators. +*/ +#define CPM_BRG_RST		((uint)0x00020000) +#define CPM_BRG_EN		((uint)0x00010000) +#define CPM_BRG_EXTC_INT	((uint)0x00000000) +#define CPM_BRG_EXTC_CLK3_9	((uint)0x00004000) +#define CPM_BRG_EXTC_CLK5_15	((uint)0x00008000) +#define CPM_BRG_ATB		((uint)0x00002000) +#define CPM_BRG_CD_MASK		((uint)0x00001ffe) +#define CPM_BRG_DIV16		((uint)0x00000001) + +/* SCCs. +*/ +#define SCC_GSMRH_IRP		((uint)0x00040000) +#define SCC_GSMRH_GDE		((uint)0x00010000) +#define SCC_GSMRH_TCRC_CCITT	((uint)0x00008000) +#define SCC_GSMRH_TCRC_BISYNC	((uint)0x00004000) +#define SCC_GSMRH_TCRC_HDLC	((uint)0x00000000) +#define SCC_GSMRH_REVD		((uint)0x00002000) +#define SCC_GSMRH_TRX		((uint)0x00001000) +#define SCC_GSMRH_TTX		((uint)0x00000800) +#define SCC_GSMRH_CDP		((uint)0x00000400) +#define SCC_GSMRH_CTSP		((uint)0x00000200) +#define SCC_GSMRH_CDS		((uint)0x00000100) +#define SCC_GSMRH_CTSS		((uint)0x00000080) +#define SCC_GSMRH_TFL		((uint)0x00000040) +#define SCC_GSMRH_RFW		((uint)0x00000020) +#define SCC_GSMRH_TXSY		((uint)0x00000010) +#define SCC_GSMRH_SYNL16	((uint)0x0000000c) +#define SCC_GSMRH_SYNL8		((uint)0x00000008) +#define SCC_GSMRH_SYNL4		((uint)0x00000004) +#define SCC_GSMRH_RTSM		((uint)0x00000002) +#define SCC_GSMRH_RSYN		((uint)0x00000001) + +#define SCC_GSMRL_SIR		((uint)0x80000000)	/* SCC2 only */ +#define SCC_GSMRL_EDGE_NONE	((uint)0x60000000) +#define SCC_GSMRL_EDGE_NEG	((uint)0x40000000) +#define SCC_GSMRL_EDGE_POS	((uint)0x20000000) +#define SCC_GSMRL_EDGE_BOTH	((uint)0x00000000) +#define SCC_GSMRL_TCI		((uint)0x10000000) +#define SCC_GSMRL_TSNC_3	((uint)0x0c000000) +#define SCC_GSMRL_TSNC_4	((uint)0x08000000) +#define SCC_GSMRL_TSNC_14	((uint)0x04000000) +#define SCC_GSMRL_TSNC_INF	((uint)0x00000000) +#define SCC_GSMRL_RINV		((uint)0x02000000) +#define SCC_GSMRL_TINV		((uint)0x01000000) +#define SCC_GSMRL_TPL_128	((uint)0x00c00000) +#define SCC_GSMRL_TPL_64	((uint)0x00a00000) +#define SCC_GSMRL_TPL_48	((uint)0x00800000) +#define SCC_GSMRL_TPL_32	((uint)0x00600000) +#define SCC_GSMRL_TPL_16	((uint)0x00400000) +#define SCC_GSMRL_TPL_8		((uint)0x00200000) +#define SCC_GSMRL_TPL_NONE	((uint)0x00000000) +#define SCC_GSMRL_TPP_ALL1	((uint)0x00180000) +#define SCC_GSMRL_TPP_01	((uint)0x00100000) +#define SCC_GSMRL_TPP_10	((uint)0x00080000) +#define SCC_GSMRL_TPP_ZEROS	((uint)0x00000000) +#define SCC_GSMRL_TEND		((uint)0x00040000) +#define SCC_GSMRL_TDCR_32	((uint)0x00030000) +#define SCC_GSMRL_TDCR_16	((uint)0x00020000) +#define SCC_GSMRL_TDCR_8	((uint)0x00010000) +#define SCC_GSMRL_TDCR_1	((uint)0x00000000) +#define SCC_GSMRL_RDCR_32	((uint)0x0000c000) +#define SCC_GSMRL_RDCR_16	((uint)0x00008000) +#define SCC_GSMRL_RDCR_8	((uint)0x00004000) +#define SCC_GSMRL_RDCR_1	((uint)0x00000000) +#define SCC_GSMRL_RENC_DFMAN	((uint)0x00003000) +#define SCC_GSMRL_RENC_MANCH	((uint)0x00002000) +#define SCC_GSMRL_RENC_FM0	((uint)0x00001000) +#define SCC_GSMRL_RENC_NRZI	((uint)0x00000800) +#define SCC_GSMRL_RENC_NRZ	((uint)0x00000000) +#define SCC_GSMRL_TENC_DFMAN	((uint)0x00000600) +#define SCC_GSMRL_TENC_MANCH	((uint)0x00000400) +#define SCC_GSMRL_TENC_FM0	((uint)0x00000200) +#define SCC_GSMRL_TENC_NRZI	((uint)0x00000100) +#define SCC_GSMRL_TENC_NRZ	((uint)0x00000000) +#define SCC_GSMRL_DIAG_LE	((uint)0x000000c0)	/* Loop and echo */ +#define SCC_GSMRL_DIAG_ECHO	((uint)0x00000080) +#define SCC_GSMRL_DIAG_LOOP	((uint)0x00000040) +#define SCC_GSMRL_DIAG_NORM	((uint)0x00000000) +#define SCC_GSMRL_ENR		((uint)0x00000020) +#define SCC_GSMRL_ENT		((uint)0x00000010) +#define SCC_GSMRL_MODE_ENET	((uint)0x0000000c) +#define SCC_GSMRL_MODE_DDCMP	((uint)0x00000009) +#define SCC_GSMRL_MODE_BISYNC	((uint)0x00000008) +#define SCC_GSMRL_MODE_V14	((uint)0x00000007) +#define SCC_GSMRL_MODE_AHDLC	((uint)0x00000006) +#define SCC_GSMRL_MODE_PROFIBUS	((uint)0x00000005) +#define SCC_GSMRL_MODE_UART	((uint)0x00000004) +#define SCC_GSMRL_MODE_SS7	((uint)0x00000003) +#define SCC_GSMRL_MODE_ATALK	((uint)0x00000002) +#define SCC_GSMRL_MODE_HDLC	((uint)0x00000000) + +#define SCC_TODR_TOD		((ushort)0x8000) + +/* SCC Event and Mask register. +*/ +#define	SCCM_TXE	((unsigned char)0x10) +#define	SCCM_BSY	((unsigned char)0x04) +#define	SCCM_TX		((unsigned char)0x02) +#define	SCCM_RX		((unsigned char)0x01) + +typedef struct scc_param { +	ushort	scc_rbase;	/* Rx Buffer descriptor base address */ +	ushort	scc_tbase;	/* Tx Buffer descriptor base address */ +	u_char	scc_rfcr;	/* Rx function code */ +	u_char	scc_tfcr;	/* Tx function code */ +	ushort	scc_mrblr;	/* Max receive buffer length */ +	uint	scc_rstate;	/* Internal */ +	uint	scc_idp;	/* Internal */ +	ushort	scc_rbptr;	/* Internal */ +	ushort	scc_ibc;	/* Internal */ +	uint	scc_rxtmp;	/* Internal */ +	uint	scc_tstate;	/* Internal */ +	uint	scc_tdp;	/* Internal */ +	ushort	scc_tbptr;	/* Internal */ +	ushort	scc_tbc;	/* Internal */ +	uint	scc_txtmp;	/* Internal */ +	uint	scc_rcrc;	/* Internal */ +	uint	scc_tcrc;	/* Internal */ +} sccp_t; + +/* CPM Ethernet through SCC1. + */ +typedef struct scc_enet { +	sccp_t	sen_genscc; +	uint	sen_cpres;	/* Preset CRC */ +	uint	sen_cmask;	/* Constant mask for CRC */ +	uint	sen_crcec;	/* CRC Error counter */ +	uint	sen_alec;	/* alignment error counter */ +	uint	sen_disfc;	/* discard frame counter */ +	ushort	sen_pads;	/* Tx short frame pad character */ +	ushort	sen_retlim;	/* Retry limit threshold */ +	ushort	sen_retcnt;	/* Retry limit counter */ +	ushort	sen_maxflr;	/* maximum frame length register */ +	ushort	sen_minflr;	/* minimum frame length register */ +	ushort	sen_maxd1;	/* maximum DMA1 length */ +	ushort	sen_maxd2;	/* maximum DMA2 length */ +	ushort	sen_maxd;	/* Rx max DMA */ +	ushort	sen_dmacnt;	/* Rx DMA counter */ +	ushort	sen_maxb;	/* Max BD byte count */ +	ushort	sen_gaddr1;	/* Group address filter */ +	ushort	sen_gaddr2; +	ushort	sen_gaddr3; +	ushort	sen_gaddr4; +	uint	sen_tbuf0data0;	/* Save area 0 - current frame */ +	uint	sen_tbuf0data1;	/* Save area 1 - current frame */ +	uint	sen_tbuf0rba;	/* Internal */ +	uint	sen_tbuf0crc;	/* Internal */ +	ushort	sen_tbuf0bcnt;	/* Internal */ +	ushort	sen_paddrh;	/* physical address (MSB) */ +	ushort	sen_paddrm; +	ushort	sen_paddrl;	/* physical address (LSB) */ +	ushort	sen_pper;	/* persistence */ +	ushort	sen_rfbdptr;	/* Rx first BD pointer */ +	ushort	sen_tfbdptr;	/* Tx first BD pointer */ +	ushort	sen_tlbdptr;	/* Tx last BD pointer */ +	uint	sen_tbuf1data0;	/* Save area 0 - current frame */ +	uint	sen_tbuf1data1;	/* Save area 1 - current frame */ +	uint	sen_tbuf1rba;	/* Internal */ +	uint	sen_tbuf1crc;	/* Internal */ +	ushort	sen_tbuf1bcnt;	/* Internal */ +	ushort	sen_txlen;	/* Tx Frame length counter */ +	ushort	sen_iaddr1;	/* Individual address filter */ +	ushort	sen_iaddr2; +	ushort	sen_iaddr3; +	ushort	sen_iaddr4; +	ushort	sen_boffcnt;	/* Backoff counter */ + +	/* NOTE: Some versions of the manual have the following items +	 * incorrectly documented.  Below is the proper order. +	 */ +	ushort	sen_taddrh;	/* temp address (MSB) */ +	ushort	sen_taddrm; +	ushort	sen_taddrl;	/* temp address (LSB) */ +} scc_enet_t; + + +/* SCC Event register as used by Ethernet. +*/ +#define SCCE_ENET_GRA	((ushort)0x0080)	/* Graceful stop complete */ +#define SCCE_ENET_TXE	((ushort)0x0010)	/* Transmit Error */ +#define SCCE_ENET_RXF	((ushort)0x0008)	/* Full frame received */ +#define SCCE_ENET_BSY	((ushort)0x0004)	/* All incoming buffers full */ +#define SCCE_ENET_TXB	((ushort)0x0002)	/* A buffer was transmitted */ +#define SCCE_ENET_RXB	((ushort)0x0001)	/* A buffer was received */ + +/* SCC Mode Register (PSMR) as used by Ethernet. +*/ +#define SCC_PSMR_HBC	((ushort)0x8000)	/* Enable heartbeat */ +#define SCC_PSMR_FC	((ushort)0x4000)	/* Force collision */ +#define SCC_PSMR_RSH	((ushort)0x2000)	/* Receive short frames */ +#define SCC_PSMR_IAM	((ushort)0x1000)	/* Check individual hash */ +#define SCC_PSMR_ENCRC	((ushort)0x0800)	/* Ethernet CRC mode */ +#define SCC_PSMR_PRO	((ushort)0x0200)	/* Promiscuous mode */ +#define SCC_PSMR_BRO	((ushort)0x0100)	/* Catch broadcast pkts */ +#define SCC_PSMR_SBT	((ushort)0x0080)	/* Special backoff timer */ +#define SCC_PSMR_LPB	((ushort)0x0040)	/* Set Loopback mode */ +#define SCC_PSMR_SIP	((ushort)0x0020)	/* Sample Input Pins */ +#define SCC_PSMR_LCW	((ushort)0x0010)	/* Late collision window */ +#define SCC_PSMR_NIB22	((ushort)0x000a)	/* Start frame search */ +#define SCC_PSMR_FDE	((ushort)0x0001)	/* Full duplex enable */ + +/* Buffer descriptor control/status used by Ethernet receive. + * Common to SCC and FCC. + */ +#define BD_ENET_RX_EMPTY	((ushort)0x8000) +#define BD_ENET_RX_WRAP		((ushort)0x2000) +#define BD_ENET_RX_INTR		((ushort)0x1000) +#define BD_ENET_RX_LAST		((ushort)0x0800) +#define BD_ENET_RX_FIRST	((ushort)0x0400) +#define BD_ENET_RX_MISS		((ushort)0x0100) +#define BD_ENET_RX_BC		((ushort)0x0080)	/* FCC Only */ +#define BD_ENET_RX_MC		((ushort)0x0040)	/* FCC Only */ +#define BD_ENET_RX_LG		((ushort)0x0020) +#define BD_ENET_RX_NO		((ushort)0x0010) +#define BD_ENET_RX_SH		((ushort)0x0008) +#define BD_ENET_RX_CR		((ushort)0x0004) +#define BD_ENET_RX_OV		((ushort)0x0002) +#define BD_ENET_RX_CL		((ushort)0x0001) +#define BD_ENET_RX_STATS	((ushort)0x01ff)	/* All status bits */ + +/* Buffer descriptor control/status used by Ethernet transmit. + * Common to SCC and FCC. + */ +#define BD_ENET_TX_READY	((ushort)0x8000) +#define BD_ENET_TX_PAD		((ushort)0x4000) +#define BD_ENET_TX_WRAP		((ushort)0x2000) +#define BD_ENET_TX_INTR		((ushort)0x1000) +#define BD_ENET_TX_LAST		((ushort)0x0800) +#define BD_ENET_TX_TC		((ushort)0x0400) +#define BD_ENET_TX_DEF		((ushort)0x0200) +#define BD_ENET_TX_HB		((ushort)0x0100) +#define BD_ENET_TX_LC		((ushort)0x0080) +#define BD_ENET_TX_RL		((ushort)0x0040) +#define BD_ENET_TX_RCMASK	((ushort)0x003c) +#define BD_ENET_TX_UN		((ushort)0x0002) +#define BD_ENET_TX_CSL		((ushort)0x0001) +#define BD_ENET_TX_STATS	((ushort)0x03ff)	/* All status bits */ + +/* SCC as UART +*/ +typedef struct scc_uart { +	sccp_t	scc_genscc; +	uint	scc_res1;	/* Reserved */ +	uint	scc_res2;	/* Reserved */ +	ushort	scc_maxidl;	/* Maximum idle chars */ +	ushort	scc_idlc;	/* temp idle counter */ +	ushort	scc_brkcr;	/* Break count register */ +	ushort	scc_parec;	/* receive parity error counter */ +	ushort	scc_frmec;	/* receive framing error counter */ +	ushort	scc_nosec;	/* receive noise counter */ +	ushort	scc_brkec;	/* receive break condition counter */ +	ushort	scc_brkln;	/* last received break length */ +	ushort	scc_uaddr1;	/* UART address character 1 */ +	ushort	scc_uaddr2;	/* UART address character 2 */ +	ushort	scc_rtemp;	/* Temp storage */ +	ushort	scc_toseq;	/* Transmit out of sequence char */ +	ushort	scc_char1;	/* control character 1 */ +	ushort	scc_char2;	/* control character 2 */ +	ushort	scc_char3;	/* control character 3 */ +	ushort	scc_char4;	/* control character 4 */ +	ushort	scc_char5;	/* control character 5 */ +	ushort	scc_char6;	/* control character 6 */ +	ushort	scc_char7;	/* control character 7 */ +	ushort	scc_char8;	/* control character 8 */ +	ushort	scc_rccm;	/* receive control character mask */ +	ushort	scc_rccr;	/* receive control character register */ +	ushort	scc_rlbc;	/* receive last break character */ +} scc_uart_t; + +/* SCC Event and Mask registers when it is used as a UART. +*/ +#define UART_SCCM_GLR		((ushort)0x1000) +#define UART_SCCM_GLT		((ushort)0x0800) +#define UART_SCCM_AB		((ushort)0x0200) +#define UART_SCCM_IDL		((ushort)0x0100) +#define UART_SCCM_GRA		((ushort)0x0080) +#define UART_SCCM_BRKE		((ushort)0x0040) +#define UART_SCCM_BRKS		((ushort)0x0020) +#define UART_SCCM_CCR		((ushort)0x0008) +#define UART_SCCM_BSY		((ushort)0x0004) +#define UART_SCCM_TX		((ushort)0x0002) +#define UART_SCCM_RX		((ushort)0x0001) + +/* The SCC PSMR when used as a UART. +*/ +#define SCU_PSMR_FLC		((ushort)0x8000) +#define SCU_PSMR_SL		((ushort)0x4000) +#define SCU_PSMR_CL		((ushort)0x3000) +#define SCU_PSMR_UM		((ushort)0x0c00) +#define SCU_PSMR_FRZ		((ushort)0x0200) +#define SCU_PSMR_RZS		((ushort)0x0100) +#define SCU_PSMR_SYN		((ushort)0x0080) +#define SCU_PSMR_DRT		((ushort)0x0040) +#define SCU_PSMR_PEN		((ushort)0x0010) +#define SCU_PSMR_RPM		((ushort)0x000c) +#define SCU_PSMR_REVP		((ushort)0x0008) +#define SCU_PSMR_TPM		((ushort)0x0003) +#define SCU_PSMR_TEVP		((ushort)0x0003) + +/* CPM Transparent mode SCC. + */ +typedef struct scc_trans { +	sccp_t	st_genscc; +	uint	st_cpres;	/* Preset CRC */ +	uint	st_cmask;	/* Constant mask for CRC */ +} scc_trans_t; + +#define BD_SCC_TX_LAST		((ushort)0x0800) + +/* How about some FCCs..... +*/ +#define FCC_GFMR_DIAG_NORM	((uint)0x00000000) +#define FCC_GFMR_DIAG_LE	((uint)0x40000000) +#define FCC_GFMR_DIAG_AE	((uint)0x80000000) +#define FCC_GFMR_DIAG_ALE	((uint)0xc0000000) +#define FCC_GFMR_TCI		((uint)0x20000000) +#define FCC_GFMR_TRX		((uint)0x10000000) +#define FCC_GFMR_TTX		((uint)0x08000000) +#define FCC_GFMR_TTX		((uint)0x08000000) +#define FCC_GFMR_CDP		((uint)0x04000000) +#define FCC_GFMR_CTSP		((uint)0x02000000) +#define FCC_GFMR_CDS		((uint)0x01000000) +#define FCC_GFMR_CTSS		((uint)0x00800000) +#define FCC_GFMR_SYNL_NONE	((uint)0x00000000) +#define FCC_GFMR_SYNL_AUTO	((uint)0x00004000) +#define FCC_GFMR_SYNL_8		((uint)0x00008000) +#define FCC_GFMR_SYNL_16	((uint)0x0000c000) +#define FCC_GFMR_RTSM		((uint)0x00002000) +#define FCC_GFMR_RENC_NRZ	((uint)0x00000000) +#define FCC_GFMR_RENC_NRZI	((uint)0x00000800) +#define FCC_GFMR_REVD		((uint)0x00000400) +#define FCC_GFMR_TENC_NRZ	((uint)0x00000000) +#define FCC_GFMR_TENC_NRZI	((uint)0x00000100) +#define FCC_GFMR_TCRC_16	((uint)0x00000000) +#define FCC_GFMR_TCRC_32	((uint)0x00000080) +#define FCC_GFMR_ENR		((uint)0x00000020) +#define FCC_GFMR_ENT		((uint)0x00000010) +#define FCC_GFMR_MODE_ENET	((uint)0x0000000c) +#define FCC_GFMR_MODE_ATM	((uint)0x0000000a) +#define FCC_GFMR_MODE_HDLC	((uint)0x00000000) + +/* Generic FCC parameter ram. +*/ +typedef struct fcc_param { +	ushort	fcc_riptr;	/* Rx Internal temp pointer */ +	ushort	fcc_tiptr;	/* Tx Internal temp pointer */ +	ushort	fcc_res1; +	ushort	fcc_mrblr;	/* Max receive buffer length, mod 32 bytes */ +	uint	fcc_rstate;	/* Upper byte is Func code, must be set */ +	uint	fcc_rbase;	/* Receive BD base */ +	ushort	fcc_rbdstat;	/* RxBD status */ +	ushort	fcc_rbdlen;	/* RxBD down counter */ +	uint	fcc_rdptr;	/* RxBD internal data pointer */ +	uint	fcc_tstate;	/* Upper byte is Func code, must be set */ +	uint	fcc_tbase;	/* Transmit BD base */ +	ushort	fcc_tbdstat;	/* TxBD status */ +	ushort	fcc_tbdlen;	/* TxBD down counter */ +	uint	fcc_tdptr;	/* TxBD internal data pointer */ +	uint	fcc_rbptr;	/* Rx BD Internal buf pointer */ +	uint	fcc_tbptr;	/* Tx BD Internal buf pointer */ +	uint	fcc_rcrc;	/* Rx temp CRC */ +	uint	fcc_res2; +	uint	fcc_tcrc;	/* Tx temp CRC */ +} fccp_t; + + +/* Ethernet controller through FCC. +*/ +typedef struct fcc_enet { +	fccp_t	fen_genfcc; +	uint	fen_statbuf;	/* Internal status buffer */ +	uint	fen_camptr;	/* CAM address */ +	uint	fen_cmask;	/* Constant mask for CRC */ +	uint	fen_cpres;	/* Preset CRC */ +	uint	fen_crcec;	/* CRC Error counter */ +	uint	fen_alec;	/* alignment error counter */ +	uint	fen_disfc;	/* discard frame counter */ +	ushort	fen_retlim;	/* Retry limit */ +	ushort	fen_retcnt;	/* Retry counter */ +	ushort	fen_pper;	/* Persistence */ +	ushort	fen_boffcnt;	/* backoff counter */ +	uint	fen_gaddrh;	/* Group address filter, high 32-bits */ +	uint	fen_gaddrl;	/* Group address filter, low 32-bits */ +	ushort	fen_tfcstat;	/* out of sequence TxBD */ +	ushort	fen_tfclen; +	uint	fen_tfcptr; +	ushort	fen_mflr;	/* Maximum frame length (1518) */ +	ushort	fen_paddrh;	/* MAC address */ +	ushort	fen_paddrm; +	ushort	fen_paddrl; +	ushort	fen_ibdcount;	/* Internal BD counter */ +	ushort	fen_ibdstart;	/* Internal BD start pointer */ +	ushort	fen_ibdend;	/* Internal BD end pointer */ +	ushort	fen_txlen;	/* Internal Tx frame length counter */ +	uint	fen_ibdbase[8]; /* Internal use */ +	uint	fen_iaddrh;	/* Individual address filter */ +	uint	fen_iaddrl; +	ushort	fen_minflr;	/* Minimum frame length (64) */ +	ushort	fen_taddrh;	/* Filter transfer MAC address */ +	ushort	fen_taddrm; +	ushort	fen_taddrl; +	ushort	fen_padptr;	/* Pointer to pad byte buffer */ +	ushort	fen_cftype;	/* control frame type */ +	ushort	fen_cfrange;	/* control frame range */ +	ushort	fen_maxb;	/* maximum BD count */ +	ushort	fen_maxd1;	/* Max DMA1 length (1520) */ +	ushort	fen_maxd2;	/* Max DMA2 length (1520) */ +	ushort	fen_maxd;	/* internal max DMA count */ +	ushort	fen_dmacnt;	/* internal DMA counter */ +	uint	fen_octc;	/* Total octect counter */ +	uint	fen_colc;	/* Total collision counter */ +	uint	fen_broc;	/* Total broadcast packet counter */ +	uint	fen_mulc;	/* Total multicast packet count */ +	uint	fen_uspc;	/* Total packets < 64 bytes */ +	uint	fen_frgc;	/* Total packets < 64 bytes with errors */ +	uint	fen_ospc;	/* Total packets > 1518 */ +	uint	fen_jbrc;	/* Total packets > 1518 with errors */ +	uint	fen_p64c;	/* Total packets == 64 bytes */ +	uint	fen_p65c;	/* Total packets 64 < bytes <= 127 */ +	uint	fen_p128c;	/* Total packets 127 < bytes <= 255 */ +	uint	fen_p256c;	/* Total packets 256 < bytes <= 511 */ +	uint	fen_p512c;	/* Total packets 512 < bytes <= 1023 */ +	uint	fen_p1024c;	/* Total packets 1024 < bytes <= 1518 */ +	uint	fen_cambuf;	/* Internal CAM buffer poiner */ +	ushort	fen_rfthr;	/* Received frames threshold */ +	ushort	fen_rfcnt;	/* Received frames count */ +} fcc_enet_t; + +/* FCC Event/Mask register as used by Ethernet. +*/ +#define FCC_ENET_GRA	((ushort)0x0080)	/* Graceful stop complete */ +#define FCC_ENET_RXC	((ushort)0x0040)	/* Control Frame Received */ +#define FCC_ENET_TXC	((ushort)0x0020)	/* Out of seq. Tx sent */ +#define FCC_ENET_TXE	((ushort)0x0010)	/* Transmit Error */ +#define FCC_ENET_RXF	((ushort)0x0008)	/* Full frame received */ +#define FCC_ENET_BSY	((ushort)0x0004)	/* Busy.  Rx Frame dropped */ +#define FCC_ENET_TXB	((ushort)0x0002)	/* A buffer was transmitted */ +#define FCC_ENET_RXB	((ushort)0x0001)	/* A buffer was received */ + +/* FCC Mode Register (FPSMR) as used by Ethernet. +*/ +#define FCC_PSMR_HBC	((uint)0x80000000)	/* Enable heartbeat */ +#define FCC_PSMR_FC	((uint)0x40000000)	/* Force Collision */ +#define FCC_PSMR_SBT	((uint)0x20000000)	/* Stop backoff timer */ +#define FCC_PSMR_LPB	((uint)0x10000000)	/* Local protect. 1 = FDX */ +#define FCC_PSMR_LCW	((uint)0x08000000)	/* Late collision select */ +#define FCC_PSMR_FDE	((uint)0x04000000)	/* Full Duplex Enable */ +#define FCC_PSMR_MON	((uint)0x02000000)	/* RMON Enable */ +#define FCC_PSMR_PRO	((uint)0x00400000)	/* Promiscuous Enable */ +#define FCC_PSMR_FCE	((uint)0x00200000)	/* Flow Control Enable */ +#define FCC_PSMR_RSH	((uint)0x00100000)	/* Receive Short Frames */ +#define FCC_PSMR_CAM	((uint)0x00000400)	/* CAM enable */ +#define FCC_PSMR_BRO	((uint)0x00000200)	/* Broadcast pkt discard */ +#define FCC_PSMR_ENCRC	((uint)0x00000080)	/* Use 32-bit CRC */ + +/* IIC parameter RAM. +*/ +typedef struct iic { +	ushort	iic_rbase;	/* Rx Buffer descriptor base address */ +	ushort	iic_tbase;	/* Tx Buffer descriptor base address */ +	u_char	iic_rfcr;	/* Rx function code */ +	u_char	iic_tfcr;	/* Tx function code */ +	ushort	iic_mrblr;	/* Max receive buffer length */ +	uint	iic_rstate;	/* Internal */ +	uint	iic_rdp;	/* Internal */ +	ushort	iic_rbptr;	/* Internal */ +	ushort	iic_rbc;	/* Internal */ +	uint	iic_rxtmp;	/* Internal */ +	uint	iic_tstate;	/* Internal */ +	uint	iic_tdp;	/* Internal */ +	ushort	iic_tbptr;	/* Internal */ +	ushort	iic_tbc;	/* Internal */ +	uint	iic_txtmp;	/* Internal */ +} iic_t; + +/* SPI parameter RAM. +*/ +typedef struct spi { +	ushort	spi_rbase;	/* Rx Buffer descriptor base address */ +	ushort	spi_tbase;	/* Tx Buffer descriptor base address */ +	u_char	spi_rfcr;	/* Rx function code */ +	u_char	spi_tfcr;	/* Tx function code */ +	ushort	spi_mrblr;	/* Max receive buffer length */ +	uint	spi_rstate;	/* Internal */ +	uint	spi_rdp;	/* Internal */ +	ushort	spi_rbptr;	/* Internal */ +	ushort	spi_rbc;	/* Internal */ +	uint	spi_rxtmp;	/* Internal */ +	uint	spi_tstate;	/* Internal */ +	uint	spi_tdp;	/* Internal */ +	ushort	spi_tbptr;	/* Internal */ +	ushort	spi_tbc;	/* Internal */ +	uint	spi_txtmp;	/* Internal */ +	uint	spi_res;	/* Tx temp. */ +	uint	spi_res1[4];	/* SDMA temp. */ +} spi_t; + +/* SPI Mode register. +*/ +#define SPMODE_LOOP	((ushort)0x4000)	/* Loopback */ +#define SPMODE_CI	((ushort)0x2000)	/* Clock Invert */ +#define SPMODE_CP	((ushort)0x1000)	/* Clock Phase */ +#define SPMODE_DIV16	((ushort)0x0800)	/* BRG/16 mode */ +#define SPMODE_REV	((ushort)0x0400)	/* Reversed Data */ +#define SPMODE_MSTR	((ushort)0x0200)	/* SPI Master */ +#define SPMODE_EN	((ushort)0x0100)	/* Enable */ +#define SPMODE_LENMSK	((ushort)0x00f0)	/* character length */ +#define SPMODE_PMMSK	((ushort)0x000f)	/* prescale modulus */ + +#define SPMODE_LEN(x)	((((x)-1)&0xF)<<4) +#define SPMODE_PM(x)	((x) &0xF) + +#define SPI_EB		((u_char)0x10)		/* big endian byte order */ + +#define BD_IIC_START	((ushort)0x0400) + +/*----------------------------------------------------------------------- + * CMXFCR - CMX FCC Clock Route Register                                15-12 + */ +#define CMXFCR_FC1         0x40000000   /* FCC1 connection              */ +#define CMXFCR_RF1CS_MSK   0x38000000   /* Receive FCC1 Clock Source Mask */ +#define CMXFCR_TF1CS_MSK   0x07000000   /* Transmit FCC1 Clock Source Mask */ +#define CMXFCR_FC2         0x00400000   /* FCC2 connection              */ +#define CMXFCR_RF2CS_MSK   0x00380000   /* Receive FCC2 Clock Source Mask */ +#define CMXFCR_TF2CS_MSK   0x00070000   /* Transmit FCC2 Clock Source Mask */ +#define CMXFCR_FC3         0x00004000   /* FCC3 connection              */ +#define CMXFCR_RF3CS_MSK   0x00003800   /* Receive FCC3 Clock Source Mask */ +#define CMXFCR_TF3CS_MSK   0x00000700   /* Transmit FCC3 Clock Source Mask */ + +#define CMXFCR_RF1CS_BRG5  0x00000000   /* Receive FCC1 Clock Source is BRG5 */ +#define CMXFCR_RF1CS_BRG6  0x08000000   /* Receive FCC1 Clock Source is BRG6 */ +#define CMXFCR_RF1CS_BRG7  0x10000000   /* Receive FCC1 Clock Source is BRG7 */ +#define CMXFCR_RF1CS_BRG8  0x18000000   /* Receive FCC1 Clock Source is BRG8 */ +#define CMXFCR_RF1CS_CLK9  0x20000000   /* Receive FCC1 Clock Source is CLK9 */ +#define CMXFCR_RF1CS_CLK10 0x28000000   /* Receive FCC1 Clock Source is CLK10 */ +#define CMXFCR_RF1CS_CLK11 0x30000000   /* Receive FCC1 Clock Source is CLK11 */ +#define CMXFCR_RF1CS_CLK12 0x38000000   /* Receive FCC1 Clock Source is CLK12 */ + +#define CMXFCR_TF1CS_BRG5  0x00000000   /* Transmit FCC1 Clock Source is BRG5 */ +#define CMXFCR_TF1CS_BRG6  0x01000000   /* Transmit FCC1 Clock Source is BRG6 */ +#define CMXFCR_TF1CS_BRG7  0x02000000   /* Transmit FCC1 Clock Source is BRG7 */ +#define CMXFCR_TF1CS_BRG8  0x03000000   /* Transmit FCC1 Clock Source is BRG8 */ +#define CMXFCR_TF1CS_CLK9  0x04000000   /* Transmit FCC1 Clock Source is CLK9 */ +#define CMXFCR_TF1CS_CLK10 0x05000000   /* Transmit FCC1 Clock Source is CLK10 */ +#define CMXFCR_TF1CS_CLK11 0x06000000   /* Transmit FCC1 Clock Source is CLK11 */ +#define CMXFCR_TF1CS_CLK12 0x07000000   /* Transmit FCC1 Clock Source is CLK12 */ + +#define CMXFCR_RF2CS_BRG5  0x00000000   /* Receive FCC2 Clock Source is BRG5 */ +#define CMXFCR_RF2CS_BRG6  0x00080000   /* Receive FCC2 Clock Source is BRG6 */ +#define CMXFCR_RF2CS_BRG7  0x00100000   /* Receive FCC2 Clock Source is BRG7 */ +#define CMXFCR_RF2CS_BRG8  0x00180000   /* Receive FCC2 Clock Source is BRG8 */ +#define CMXFCR_RF2CS_CLK13 0x00200000   /* Receive FCC2 Clock Source is CLK13 */ +#define CMXFCR_RF2CS_CLK14 0x00280000   /* Receive FCC2 Clock Source is CLK14 */ +#define CMXFCR_RF2CS_CLK15 0x00300000   /* Receive FCC2 Clock Source is CLK15 */ +#define CMXFCR_RF2CS_CLK16 0x00380000   /* Receive FCC2 Clock Source is CLK16 */ + +#define CMXFCR_TF2CS_BRG5  0x00000000   /* Transmit FCC2 Clock Source is BRG5 */ +#define CMXFCR_TF2CS_BRG6  0x00010000   /* Transmit FCC2 Clock Source is BRG6 */ +#define CMXFCR_TF2CS_BRG7  0x00020000   /* Transmit FCC2 Clock Source is BRG7 */ +#define CMXFCR_TF2CS_BRG8  0x00030000   /* Transmit FCC2 Clock Source is BRG8 */ +#define CMXFCR_TF2CS_CLK13 0x00040000   /* Transmit FCC2 Clock Source is CLK13 */ +#define CMXFCR_TF2CS_CLK14 0x00050000   /* Transmit FCC2 Clock Source is CLK14 */ +#define CMXFCR_TF2CS_CLK15 0x00060000   /* Transmit FCC2 Clock Source is CLK15 */ +#define CMXFCR_TF2CS_CLK16 0x00070000   /* Transmit FCC2 Clock Source is CLK16 */ + +#define CMXFCR_RF3CS_BRG5  0x00000000   /* Receive FCC3 Clock Source is BRG5 */ +#define CMXFCR_RF3CS_BRG6  0x00000800   /* Receive FCC3 Clock Source is BRG6 */ +#define CMXFCR_RF3CS_BRG7  0x00001000   /* Receive FCC3 Clock Source is BRG7 */ +#define CMXFCR_RF3CS_BRG8  0x00001800   /* Receive FCC3 Clock Source is BRG8 */ +#define CMXFCR_RF3CS_CLK13 0x00002000   /* Receive FCC3 Clock Source is CLK13 */ +#define CMXFCR_RF3CS_CLK14 0x00002800   /* Receive FCC3 Clock Source is CLK14 */ +#define CMXFCR_RF3CS_CLK15 0x00003000   /* Receive FCC3 Clock Source is CLK15 */ +#define CMXFCR_RF3CS_CLK16 0x00003800   /* Receive FCC3 Clock Source is CLK16 */ + +#define CMXFCR_TF3CS_BRG5  0x00000000   /* Transmit FCC3 Clock Source is BRG5 */ +#define CMXFCR_TF3CS_BRG6  0x00000100   /* Transmit FCC3 Clock Source is BRG6 */ +#define CMXFCR_TF3CS_BRG7  0x00000200   /* Transmit FCC3 Clock Source is BRG7 */ +#define CMXFCR_TF3CS_BRG8  0x00000300   /* Transmit FCC3 Clock Source is BRG8 */ +#define CMXFCR_TF3CS_CLK13 0x00000400   /* Transmit FCC3 Clock Source is CLK13 */ +#define CMXFCR_TF3CS_CLK14 0x00000500   /* Transmit FCC3 Clock Source is CLK14 */ +#define CMXFCR_TF3CS_CLK15 0x00000600   /* Transmit FCC3 Clock Source is CLK15 */ +#define CMXFCR_TF3CS_CLK16 0x00000700   /* Transmit FCC3 Clock Source is CLK16 */ + +/*----------------------------------------------------------------------- + * CMXSCR - CMX SCC Clock Route Register                                15-14 + */ +#define CMXSCR_GR1         0x80000000   /* Grant Support of SCC1        */ +#define CMXSCR_SC1         0x40000000   /* SCC1 connection              */ +#define CMXSCR_RS1CS_MSK   0x38000000   /* Receive SCC1 Clock Source Mask */ +#define CMXSCR_TS1CS_MSK   0x07000000   /* Transmit SCC1 Clock Source Mask */ +#define CMXSCR_GR2         0x00800000   /* Grant Support of SCC2        */ +#define CMXSCR_SC2         0x00400000   /* SCC2 connection              */ +#define CMXSCR_RS2CS_MSK   0x00380000   /* Receive SCC2 Clock Source Mask */ +#define CMXSCR_TS2CS_MSK   0x00070000   /* Transmit SCC2 Clock Source Mask */ +#define CMXSCR_GR3         0x00008000   /* Grant Support of SCC3        */ +#define CMXSCR_SC3         0x00004000   /* SCC3 connection              */ +#define CMXSCR_RS3CS_MSK   0x00003800   /* Receive SCC3 Clock Source Mask */ +#define CMXSCR_TS3CS_MSK   0x00000700   /* Transmit SCC3 Clock Source Mask */ +#define CMXSCR_GR4         0x00000080   /* Grant Support of SCC4        */ +#define CMXSCR_SC4         0x00000040   /* SCC4 connection              */ +#define CMXSCR_RS4CS_MSK   0x00000038   /* Receive SCC4 Clock Source Mask */ +#define CMXSCR_TS4CS_MSK   0x00000007   /* Transmit SCC4 Clock Source Mask */ + +#define CMXSCR_RS1CS_BRG1  0x00000000   /* SCC1 Rx Clock Source is BRG1 */ +#define CMXSCR_RS1CS_BRG2  0x08000000   /* SCC1 Rx Clock Source is BRG2 */ +#define CMXSCR_RS1CS_BRG3  0x10000000   /* SCC1 Rx Clock Source is BRG3 */ +#define CMXSCR_RS1CS_BRG4  0x18000000   /* SCC1 Rx Clock Source is BRG4 */ +#define CMXSCR_RS1CS_CLK11 0x20000000   /* SCC1 Rx Clock Source is CLK11 */ +#define CMXSCR_RS1CS_CLK12 0x28000000   /* SCC1 Rx Clock Source is CLK12 */ +#define CMXSCR_RS1CS_CLK3  0x30000000   /* SCC1 Rx Clock Source is CLK3 */ +#define CMXSCR_RS1CS_CLK4  0x38000000   /* SCC1 Rx Clock Source is CLK4 */ + +#define CMXSCR_TS1CS_BRG1  0x00000000   /* SCC1 Tx Clock Source is BRG1 */ +#define CMXSCR_TS1CS_BRG2  0x01000000   /* SCC1 Tx Clock Source is BRG2 */ +#define CMXSCR_TS1CS_BRG3  0x02000000   /* SCC1 Tx Clock Source is BRG3 */ +#define CMXSCR_TS1CS_BRG4  0x03000000   /* SCC1 Tx Clock Source is BRG4 */ +#define CMXSCR_TS1CS_CLK11 0x04000000   /* SCC1 Tx Clock Source is CLK11 */ +#define CMXSCR_TS1CS_CLK12 0x05000000   /* SCC1 Tx Clock Source is CLK12 */ +#define CMXSCR_TS1CS_CLK3  0x06000000   /* SCC1 Tx Clock Source is CLK3 */ +#define CMXSCR_TS1CS_CLK4  0x07000000   /* SCC1 Tx Clock Source is CLK4 */ + +#define CMXSCR_RS2CS_BRG1  0x00000000   /* SCC2 Rx Clock Source is BRG1 */ +#define CMXSCR_RS2CS_BRG2  0x00080000   /* SCC2 Rx Clock Source is BRG2 */ +#define CMXSCR_RS2CS_BRG3  0x00100000   /* SCC2 Rx Clock Source is BRG3 */ +#define CMXSCR_RS2CS_BRG4  0x00180000   /* SCC2 Rx Clock Source is BRG4 */ +#define CMXSCR_RS2CS_CLK11 0x00200000   /* SCC2 Rx Clock Source is CLK11 */ +#define CMXSCR_RS2CS_CLK12 0x00280000   /* SCC2 Rx Clock Source is CLK12 */ +#define CMXSCR_RS2CS_CLK3  0x00300000   /* SCC2 Rx Clock Source is CLK3 */ +#define CMXSCR_RS2CS_CLK4  0x00380000   /* SCC2 Rx Clock Source is CLK4 */ + +#define CMXSCR_TS2CS_BRG1  0x00000000   /* SCC2 Tx Clock Source is BRG1 */ +#define CMXSCR_TS2CS_BRG2  0x00010000   /* SCC2 Tx Clock Source is BRG2 */ +#define CMXSCR_TS2CS_BRG3  0x00020000   /* SCC2 Tx Clock Source is BRG3 */ +#define CMXSCR_TS2CS_BRG4  0x00030000   /* SCC2 Tx Clock Source is BRG4 */ +#define CMXSCR_TS2CS_CLK11 0x00040000   /* SCC2 Tx Clock Source is CLK11 */ +#define CMXSCR_TS2CS_CLK12 0x00050000   /* SCC2 Tx Clock Source is CLK12 */ +#define CMXSCR_TS2CS_CLK3  0x00060000   /* SCC2 Tx Clock Source is CLK3 */ +#define CMXSCR_TS2CS_CLK4  0x00070000   /* SCC2 Tx Clock Source is CLK4 */ + +#define CMXSCR_RS3CS_BRG1  0x00000000   /* SCC3 Rx Clock Source is BRG1 */ +#define CMXSCR_RS3CS_BRG2  0x00000800   /* SCC3 Rx Clock Source is BRG2 */ +#define CMXSCR_RS3CS_BRG3  0x00001000   /* SCC3 Rx Clock Source is BRG3 */ +#define CMXSCR_RS3CS_BRG4  0x00001800   /* SCC3 Rx Clock Source is BRG4 */ +#define CMXSCR_RS3CS_CLK5  0x00002000   /* SCC3 Rx Clock Source is CLK5 */ +#define CMXSCR_RS3CS_CLK6  0x00002800   /* SCC3 Rx Clock Source is CLK6 */ +#define CMXSCR_RS3CS_CLK7  0x00003000   /* SCC3 Rx Clock Source is CLK7 */ +#define CMXSCR_RS3CS_CLK8  0x00003800   /* SCC3 Rx Clock Source is CLK8 */ + +#define CMXSCR_TS3CS_BRG1  0x00000000   /* SCC3 Tx Clock Source is BRG1 */ +#define CMXSCR_TS3CS_BRG2  0x00000100   /* SCC3 Tx Clock Source is BRG2 */ +#define CMXSCR_TS3CS_BRG3  0x00000200   /* SCC3 Tx Clock Source is BRG3 */ +#define CMXSCR_TS3CS_BRG4  0x00000300   /* SCC3 Tx Clock Source is BRG4 */ +#define CMXSCR_TS3CS_CLK5  0x00000400   /* SCC3 Tx Clock Source is CLK5 */ +#define CMXSCR_TS3CS_CLK6  0x00000500   /* SCC3 Tx Clock Source is CLK6 */ +#define CMXSCR_TS3CS_CLK7  0x00000600   /* SCC3 Tx Clock Source is CLK7 */ +#define CMXSCR_TS3CS_CLK8  0x00000700   /* SCC3 Tx Clock Source is CLK8 */ + +#define CMXSCR_RS4CS_BRG1  0x00000000   /* SCC4 Rx Clock Source is BRG1 */ +#define CMXSCR_RS4CS_BRG2  0x00000008   /* SCC4 Rx Clock Source is BRG2 */ +#define CMXSCR_RS4CS_BRG3  0x00000010   /* SCC4 Rx Clock Source is BRG3 */ +#define CMXSCR_RS4CS_BRG4  0x00000018   /* SCC4 Rx Clock Source is BRG4 */ +#define CMXSCR_RS4CS_CLK5  0x00000020   /* SCC4 Rx Clock Source is CLK5 */ +#define CMXSCR_RS4CS_CLK6  0x00000028   /* SCC4 Rx Clock Source is CLK6 */ +#define CMXSCR_RS4CS_CLK7  0x00000030   /* SCC4 Rx Clock Source is CLK7 */ +#define CMXSCR_RS4CS_CLK8  0x00000038   /* SCC4 Rx Clock Source is CLK8 */ + +#define CMXSCR_TS4CS_BRG1  0x00000000   /* SCC4 Tx Clock Source is BRG1 */ +#define CMXSCR_TS4CS_BRG2  0x00000001   /* SCC4 Tx Clock Source is BRG2 */ +#define CMXSCR_TS4CS_BRG3  0x00000002   /* SCC4 Tx Clock Source is BRG3 */ +#define CMXSCR_TS4CS_BRG4  0x00000003   /* SCC4 Tx Clock Source is BRG4 */ +#define CMXSCR_TS4CS_CLK5  0x00000004   /* SCC4 Tx Clock Source is CLK5 */ +#define CMXSCR_TS4CS_CLK6  0x00000005   /* SCC4 Tx Clock Source is CLK6 */ +#define CMXSCR_TS4CS_CLK7  0x00000006   /* SCC4 Tx Clock Source is CLK7 */ +#define CMXSCR_TS4CS_CLK8  0x00000007   /* SCC4 Tx Clock Source is CLK8 */ + +#endif /* __CPM_85XX__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/e300.h b/roms/u-boot/arch/powerpc/include/asm/e300.h new file mode 100644 index 00000000..bfef4dfd --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/e300.h @@ -0,0 +1,91 @@ +/* + * Copyright 2004 Freescale Semiconductor, Inc. + * Liberty Eran (liberty@freescale.com) + */ + +#ifndef	__E300_H__ +#define __E300_H__ + +#define PVR_E300C1	0x80830000 +#define PVR_E300C2	0x80840000 +#define PVR_E300C3	0x80850000 +#define PVR_E300C4	0x80860000 + +/* + * Hardware Implementation-Dependent Register 0 (HID0) + */ + +/* #define HID0 1008 already defined in processor.h */ +#define HID0_MASK_MACHINE_CHECK		     0x00000000 +#define HID0_ENABLE_MACHINE_CHECK	     0x80000000 + +#define HID0_DISABLE_CACHE_PARITY	     0x00000000 +#define HID0_ENABLE_CACHE_PARITY	     0x40000000 + +#define HID0_DISABLE_ADDRESS_PARITY	     0x00000000 /* on mpc8349ads must be disabled */ +#define HID0_ENABLE_ADDRESS_PARITY	     0x20000000 + +#define HID0_DISABLE_DATA_PARITY	     0x00000000 /* on mpc8349ads must be disabled */ +#define HID0_ENABLE_DATE_PARITY		     0x10000000 + +#define HID0_CORE_CLK_OUT		     0x00000000 +#define HID0_CORE_CLK_OUT_DIV_2		     0x08000000 + +#define HID0_ENABLE_ARTRY_OUT_PRECHARGE      0x00000000 /* on mpc8349ads must be enabled */ +#define HID0_DISABLE_ARTRY_OUT_PRECHARGE     0x01000000 + +#define HID0_DISABLE_DOSE_MODE		     0x00000000 +#define HID0_ENABLE_DOSE_MODE		     0x00800000 + +#define HID0_DISABLE_NAP_MODE		     0x00000000 +#define HID0_ENABLE_NAP_MODE		     0x00400000 + +#define HID0_DISABLE_SLEEP_MODE		     0x00000000 +#define HID0_ENABLE_SLEEP_MODE		     0x00200000 + +#define HID0_DISABLE_DYNAMIC_POWER_MANAGMENT 0x00000000 +#define HID0_ENABLE_DYNAMIC_POWER_MANAGMENT  0x00100000 + +#define HID0_SOFT_RESET			     0x00010000 + +#define HID0_DISABLE_INSTRUCTION_CACHE	     0x00000000 +#define HID0_ENABLE_INSTRUCTION_CACHE	     0x00008000 + +#define HID0_DISABLE_DATA_CACHE		     0x00000000 +#define HID0_ENABLE_DATA_CACHE		     0x00004000 + +#define HID0_LOCK_INSTRUCTION_CACHE	     0x00002000 + +#define HID0_LOCK_DATA_CACHE		     0x00001000 + +#define HID0_INVALIDATE_INSTRUCTION_CACHE    0x00000800 + +#define HID0_INVALIDATE_DATA_CACHE	     0x00000400 + +#define HID0_DISABLE_M_BIT		     0x00000000 +#define HID0_ENABLE_M_BIT		     0x00000080 + +#define HID0_FBIOB			     0x00000010 + +#define HID0_DISABLE_ADDRESS_BROADCAST	     0x00000000 +#define HID0_ENABLE_ADDRESS_BROADCAST	     0x00000008 + +#define HID0_ENABLE_NOOP_DCACHE_INSTRUCTION  0x00000000 +#define HID0_DISABLE_NOOP_DCACHE_INSTRUCTION 0x00000001 + +/* + * Hardware Implementation-Dependent Register 2 (HID2) + */ +#define HID2		1011 + +#define HID2_LET       0x08000000 +#define HID2_HBE       0x00040000 +#define HID2_IWLCK_000 0x00000000 /* no ways locked */ +#define HID2_IWLCK_001 0x00002000 /* way 0 locked */ +#define HID2_IWLCK_010 0x00004000 /* way 0 through way 1 locked */ +#define HID2_IWLCK_011 0x00006000 /* way 0 through way 2 locked */ +#define HID2_IWLCK_100 0x00008000 /* way 0 through way 3 locked */ +#define HID2_IWLCK_101 0x0000A000 /* way 0 through way 4 locked */ +#define HID2_IWLCK_110 0x0000C000 /* way 0 through way 5 locked */ + +#endif	/* __E300_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/errno.h b/roms/u-boot/arch/powerpc/include/asm/errno.h new file mode 100644 index 00000000..4c82b503 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/errno.h @@ -0,0 +1 @@ +#include <asm-generic/errno.h> diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_dma.h b/roms/u-boot/arch/powerpc/include/asm/fsl_dma.h new file mode 100644 index 00000000..11641912 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_dma.h @@ -0,0 +1,141 @@ +/* + * Freescale DMA Controller + * + * Copyright 2006 Freescale Semiconductor, Inc. + * + * This software may be used and distributed according to the + * terms of the GNU Public License, Version 2, incorporated + * herein by reference. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * Version 2 as published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef _ASM_FSL_DMA_H_ +#define _ASM_FSL_DMA_H_ + +#include <asm/types.h> + +#ifdef CONFIG_MPC83xx +typedef struct fsl_dma { +	uint	mr;		/* DMA mode register */ +#define FSL_DMA_MR_CS		0x00000001	/* Channel start */ +#define FSL_DMA_MR_CC		0x00000002	/* Channel continue */ +#define FSL_DMA_MR_CTM		0x00000004	/* Channel xfer mode */ +#define FSL_DMA_MR_CTM_DIRECT	0x00000004	/* Direct channel xfer mode */ +#define FSL_DMA_MR_EOTIE	0x00000080	/* End-of-transfer interrupt en */ +#define FSL_DMA_MR_PRC_MASK	0x00000c00	/* PCI read command */ +#define FSL_DMA_MR_SAHE		0x00001000	/* Source addr hold enable */ +#define FSL_DMA_MR_DAHE		0x00002000	/* Dest addr hold enable */ +#define FSL_DMA_MR_SAHTS_MASK	0x0000c000	/* Source addr hold xfer size */ +#define FSL_DMA_MR_DAHTS_MASK	0x00030000	/* Dest addr hold xfer size */ +#define FSL_DMA_MR_EMS_EN	0x00040000	/* Ext master start en */ +#define FSL_DMA_MR_IRQS		0x00080000	/* Interrupt steer */ +#define FSL_DMA_MR_DMSEN	0x00100000	/* Direct mode snooping en */ +#define FSL_DMA_MR_BWC_MASK	0x00e00000	/* Bandwidth/pause ctl */ +#define FSL_DMA_MR_DRCNT	0x0f000000	/* DMA request count */ +	uint	sr;		/* DMA status register */ +#define FSL_DMA_SR_EOCDI	0x00000001	/* End-of-chain/direct interrupt */ +#define FSL_DMA_SR_EOSI		0x00000002	/* End-of-segment interrupt */ +#define FSL_DMA_SR_CB		0x00000004	/* Channel busy */ +#define FSL_DMA_SR_TE		0x00000080	/* Transfer error */ +	uint	cdar;		/* DMA current descriptor address register */ +	char	res0[4]; +	uint	sar;		/* DMA source address register */ +	char	res1[4]; +	uint	dar;		/* DMA destination address register */ +	char	res2[4]; +	uint	bcr;		/* DMA byte count register */ +	uint	ndar;		/* DMA next descriptor address register */ +	uint	gsr;		/* DMA general status register (DMA3 ONLY!) */ +	char	res3[84]; +} fsl_dma_t; +#else +typedef struct fsl_dma { +	uint	mr;		/* DMA mode register */ +#define FSL_DMA_MR_CS		0x00000001	/* Channel start */ +#define FSL_DMA_MR_CC		0x00000002	/* Channel continue */ +#define FSL_DMA_MR_CTM		0x00000004	/* Channel xfer mode */ +#define FSL_DMA_MR_CTM_DIRECT	0x00000004	/* Direct channel xfer mode */ +#define FSL_DMA_MR_CA		0x00000008	/* Channel abort */ +#define FSL_DMA_MR_CDSM		0x00000010 +#define FSL_DMA_MR_XFE		0x00000020	/* Extended features en */ +#define FSL_DMA_MR_EIE		0x00000040	/* Error interrupt en */ +#define FSL_DMA_MR_EOLSIE	0x00000080	/* End-of-lists interrupt en */ +#define FSL_DMA_MR_EOLNIE	0x00000100	/* End-of-links interrupt en */ +#define FSL_DMA_MR_EOSIE	0x00000200	/* End-of-seg interrupt en */ +#define FSL_DMA_MR_SRW		0x00000400	/* Single register write */ +#define FSL_DMA_MR_SAHE		0x00001000	/* Source addr hold enable */ +#define FSL_DMA_MR_DAHE		0x00002000	/* Dest addr hold enable */ +#define FSL_DMA_MR_SAHTS_MASK	0x0000c000	/* Source addr hold xfer size */ +#define FSL_DMA_MR_DAHTS_MASK	0x00030000	/* Dest addr hold xfer size */ +#define FSL_DMA_MR_EMS_EN	0x00040000	/* Ext master start en */ +#define FSL_DMA_MR_EMP_EN	0x00200000	/* Ext master pause en */ +#define FSL_DMA_MR_BWC_MASK	0x0f000000	/* Bandwidth/pause ctl */ +#define FSL_DMA_MR_BWC_DIS	0x0f000000	/* Bandwidth/pause ctl disable */ +	uint	sr;		/* DMA status register */ +#define FSL_DMA_SR_EOLSI	0x00000001	/* End-of-list interrupt */ +#define FSL_DMA_SR_EOSI		0x00000002	/* End-of-segment interrupt */ +#define FSL_DMA_SR_CB		0x00000004	/* Channel busy */ +#define FSL_DMA_SR_EOLNI	0x00000008	/* End-of-links interrupt */ +#define FSL_DMA_SR_PE		0x00000010	/* Programming error */ +#define FSL_DMA_SR_CH		0x00000020	/* Channel halted */ +#define FSL_DMA_SR_TE		0x00000080	/* Transfer error */ +	char	res0[4]; +	uint	clndar;		/* DMA current link descriptor address register */ +	uint	satr;		/* DMA source attributes register */ +#define FSL_DMA_SATR_ESAD_MASK		0x000001ff	/* Extended source addr */ +#define FSL_DMA_SATR_SREAD_NO_SNOOP	0x00040000	/* Read, don't snoop */ +#define FSL_DMA_SATR_SREAD_SNOOP	0x00050000	/* Read, snoop */ +#define FSL_DMA_SATR_SREAD_UNLOCK	0x00070000	/* Read, unlock l2 */ +#define FSL_DMA_SATR_STRAN_MASK		0x00f00000	/* Source interface  */ +#define FSL_DMA_SATR_SSME		0x01000000	/* Source stride en */ +#define FSL_DMA_SATR_SPCIORDER		0x02000000	/* PCI transaction order */ +#define FSL_DMA_SATR_STFLOWLVL_MASK	0x0c000000	/* RIO flow level */ +#define FSL_DMA_SATR_SBPATRMU		0x20000000	/* Bypass ATMU */ +	uint	sar;		/* DMA source address register */ +	uint	datr;		/* DMA destination attributes register */ +#define FSL_DMA_DATR_EDAD_MASK		0x000001ff	/* Extended dest addr */ +#define FSL_DMA_DATR_DWRITE_NO_SNOOP	0x00040000	/* Write, don't snoop */ +#define FSL_DMA_DATR_DWRITE_SNOOP	0x00050000	/* Write, snoop */ +#define FSL_DMA_DATR_DWRITE_ALLOC	0x00060000	/* Write, alloc l2 */ +#define FSL_DMA_DATR_DWRITE_LOCK	0x00070000	/* Write, lock l2 */ +#define FSL_DMA_DATR_DTRAN_MASK		0x00f00000	/* Dest interface  */ +#define FSL_DMA_DATR_DSME		0x01000000	/* Dest stride en */ +#define FSL_DMA_DATR_DPCIORDER		0x02000000	/* PCI transaction order */ +#define FSL_DMA_DATR_DTFLOWLVL_MASK	0x0c000000	/* RIO flow level */ +#define FSL_DMA_DATR_DBPATRMU		0x20000000	/* Bypass ATMU */ +	uint	dar;		/* DMA destination address register */ +	uint	bcr;		/* DMA byte count register */ +	char	res1[4]; +	uint	nlndar;		/* DMA next link descriptor address register */ +	char	res2[8]; +	uint	clabdar;	/* DMA current List - alternate base descriptor address Register */ +	char	res3[4]; +	uint	nlsdar;		/* DMA next list descriptor address register */ +	uint	ssr;		/* DMA source stride register */ +	uint	dsr;		/* DMA destination stride register */ +	char	res4[56]; +} fsl_dma_t; +#endif /* !CONFIG_MPC83xx */ + +#ifdef CONFIG_FSL_DMA +void dma_init(void); +int dmacpy(phys_addr_t dest, phys_addr_t src, phys_size_t n); +#if (defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)) +void dma_meminit(uint val, uint size); +#endif +#endif + +#endif	/* _ASM_DMA_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_dtsec.h b/roms/u-boot/arch/powerpc/include/asm/fsl_dtsec.h new file mode 100644 index 00000000..41b8398e --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_dtsec.h @@ -0,0 +1,231 @@ +/* + * Copyright 2009-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __DTSEC_H__ +#define __DTSEC_H__ + +#include <asm/types.h> + +struct dtsec { +	u32	tsec_id;	/* controller ID and version */ +	u32	tsec_id2;	/* controller ID and configuration */ +	u32	ievent;		/* interrupt event */ +	u32	imask;		/* interrupt mask */ +	u32	res0; +	u32	ecntrl;		/* ethernet control and configuration */ +	u32	ptv;		/* pause time value */ +	u32	tbipa;		/* TBI PHY address */ +	u32	res1[8]; +	u32	tctrl;		/* Transmit control register */ +	u32	res2[3]; +	u32	rctrl;		/* Receive control register */ +	u32	res3[11]; +	u32	igaddr[8];	/* Individual group address */ +	u32	gaddr[8];	/* group address */ +	u32	res4[16]; +	u32	maccfg1;	/* MAC configuration register 1 */ +	u32	maccfg2;	/* MAC configuration register 2 */ +	u32	ipgifg;		/* inter-packet/inter-frame gap */ +	u32	hafdup;		/* half-duplex control */ +	u32	maxfrm;		/* Maximum frame size */ +	u32	res5[3]; +	u32	miimcfg;	/* MII management configuration */ +	u32	miimcom;	/* MII management command */ +	u32	miimadd;	/* MII management address */ +	u32	miimcon;	/* MII management control */ +	u32	miimstat;	/* MII management status */ +	u32	miimind;	/* MII management indicator */ +	u32	res6; +	u32	ifstat;		/* Interface status */ +	u32	macstnaddr1;	/* MAC station address 1 */ +	u32	macstnaddr2;	/* MAC station address 2 */ +	u32	res7[46]; +	/* transmit and receive counter */ +	u32	tr64;		/* Tx and Rx 64 bytes frame */ +	u32	tr127;		/* Tx and Rx 65 to 127 bytes frame */ +	u32	tr255;		/* Tx and Rx 128 to 255 bytes frame */ +	u32	tr511;		/* Tx and Rx 256 to 511 bytes frame */ +	u32	tr1k;		/* Tx and Rx 512 to 1023 bytes frame */ +	u32	trmax;		/* Tx and Rx 1024 to 1518 bytes frame */ +	u32	trmgv;		/* Tx and Rx 1519 to 1522 good VLAN frame */ +	/* receive counters */ +	u32	rbyt;		/* Receive byte counter */ +	u32	rpkt;		/* Receive packet counter */ +	u32	rfcs;		/* Receive FCS error */ +	u32	rmca;		/* Receive multicast packet */ +	u32	rbca;		/* Receive broadcast packet */ +	u32	rxcf;		/* Receive control frame */ +	u32	rxpf;		/* Receive pause frame */ +	u32	rxuo;		/* Receive unknown OP code */ +	u32	raln;		/* Receive alignment error */ +	u32	rflr;		/* Receive frame length error */ +	u32	rcde;		/* Receive code error */ +	u32	rcse;		/* Receive carrier sense error */ +	u32	rund;		/* Receive undersize packet */ +	u32	rovr;		/* Receive oversize packet */ +	u32	rfrg;		/* Receive fragments counter */ +	u32	rjbr;		/* Receive jabber counter */ +	u32	rdrp;		/* Receive drop counter */ +	/* transmit counters */ +	u32	tbyt;		/* Transmit byte counter */ +	u32	tpkt;		/* Transmit packet */ +	u32	tmca;		/* Transmit multicast packet */ +	u32	tbca;		/* Transmit broadcast packet */ +	u32	txpf;		/* Transmit pause control frame */ +	u32	tdfr;		/* Transmit deferral packet */ +	u32	tedf;		/* Transmit excessive deferral pkt */ +	u32	tscl;		/* Transmit single collision pkt */ +	u32	tmcl;		/* Transmit multiple collision pkt */ +	u32	tlcl;		/* Transmit late collision pkt */ +	u32	txcl;		/* Transmit excessive collision */ +	u32	tncl;		/* Transmit total collision */ +	u32	res8; +	u32	tdrp;		/* Transmit drop frame */ +	u32	tjbr;		/* Transmit jabber frame */ +	u32	tfcs;		/* Transmit FCS error */ +	u32	txcf;		/* Transmit control frame */ +	u32	tovr;		/* Transmit oversize frame */ +	u32	tund;		/* Transmit undersize frame */ +	u32	tfrg;		/* Transmit fragments frame */ +	/* counter controls */ +	u32	car1;		/* carry register 1 */ +	u32	car2;		/* carry register 2 */ +	u32	cam1;		/* carry register 1 mask */ +	u32	cam2;		/* carry register 2 mask */ +	u32	res9[80]; +}; + + +/* TBI register addresses */ +#define TBI_CR			0x00 +#define TBI_SR			0x01 +#define TBI_ANA			0x04 +#define TBI_ANLPBPA		0x05 +#define TBI_ANEX		0x06 +#define TBI_TBICON		0x11 + +/* TBI MDIO register bit fields*/ +#define TBICON_CLK_SELECT	0x0020 +#define TBIANA_ASYMMETRIC_PAUSE 0x0100 +#define TBIANA_SYMMETRIC_PAUSE  0x0080 +#define TBIANA_HALF_DUPLEX	0x0040 +#define TBIANA_FULL_DUPLEX	0x0020 +#define TBICR_PHY_RESET		0x8000 +#define TBICR_ANEG_ENABLE	0x1000 +#define TBICR_RESTART_ANEG	0x0200 +#define TBICR_FULL_DUPLEX	0x0100 +#define TBICR_SPEED1_SET	0x0040 + +/* IEVENT - interrupt events register */ +#define IEVENT_BABR	0x80000000 /* Babbling receive error */ +#define IEVENT_RXC	0x40000000 /* pause control frame received */ +#define IEVENT_MSRO	0x04000000 /* MIB counter overflow */ +#define IEVENT_GTSC	0x02000000 /* Graceful transmit stop complete */ +#define IEVENT_BABT	0x01000000 /* Babbling transmit error */ +#define IEVENT_TXC	0x00800000 /* control frame transmitted */ +#define IEVENT_TXE	0x00400000 /* Transmit channel error */ +#define IEVENT_LC	0x00040000 /* Late collision occurred */ +#define IEVENT_CRL	0x00020000 /* Collision retry exceed limit */ +#define IEVENT_XFUN	0x00010000 /* Transmit FIFO underrun */ +#define IEVENT_ABRT	0x00008000 /* Transmit packet abort */ +#define IEVENT_MMRD	0x00000400 /* MII management read complete */ +#define IEVENT_MMWR	0x00000200 /* MII management write complete */ +#define IEVENT_GRSC	0x00000100 /* Graceful stop complete */ +#define IEVENT_TDPE	0x00000002 /* Internal data parity error on Tx */ +#define IEVENT_RDPE	0x00000001 /* Internal data parity error on Rx */ + +#define IEVENT_CLEAR_ALL	0xffffffff + +/* IMASK - interrupt mask register */ +#define IMASK_BREN	0x80000000 /* Babbling receive enable */ +#define IMASK_RXCEN	0x40000000 /* receive control enable */ +#define IMASK_MSROEN	0x04000000 /* MIB counter overflow enable */ +#define IMASK_GTSCEN	0x02000000 /* Graceful Tx stop complete enable */ +#define IMASK_BTEN	0x01000000 /* Babbling transmit error enable */ +#define IMASK_TXCEN	0x00800000 /* control frame transmitted enable */ +#define IMASK_TXEEN	0x00400000 /* Transmit channel error enable */ +#define IMASK_LCEN	0x00040000 /* Late collision interrupt enable */ +#define IMASK_CRLEN	0x00020000 /* Collision retry exceed limit */ +#define IMASK_XFUNEN	0x00010000 /* Transmit FIFO underrun enable */ +#define IMASK_ABRTEN	0x00008000 /* Transmit packet abort enable */ +#define IMASK_MMRDEN	0x00000400 /* MII management read complete enable */ +#define IMASK_MMWREN	0x00000200 /* MII management write complete enable */ +#define IMASK_GRSCEN	0x00000100 /* Graceful stop complete interrupt enable */ +#define IMASK_TDPEEN	0x00000002 /* Internal data parity error on Tx enable */ +#define IMASK_RDPEEN	0x00000001 /* Internal data parity error on Rx enable */ + +#define IMASK_MASK_ALL	0x00000000 + +/* ECNTRL - ethernet control register */ +#define ECNTRL_CFG_RO	0x80000000 /* GMIIM, RPM, R100M, SGMIIM bits are RO */ +#define ECNTRL_CLRCNT	0x00004000 /* clear all statistics */ +#define ECNTRL_AUTOZ	0x00002000 /* auto zero MIB counter */ +#define ECNTRL_STEN	0x00001000 /* enable internal counters to update */ +#define ECNTRL_GMIIM	0x00000040 /* 1- GMII or RGMII interface mode */ +#define ECNTRL_TBIM	0x00000020 /* 1- Ten-bit interface mode */ +#define ECNTRL_RPM	0x00000010 /* 1- RGMII reduced-pin mode */ +#define ECNTRL_R100M	0x00000008 /* 1- RGMII 100 Mbps, SGMII 100 Mbps +				      0- RGMII 10 Mbps, SGMII 10 Mbps */ +#define ECNTRL_SGMIIM	0x00000002 /* 1- SGMII interface mode */ +#define ECNTRL_TBIM	0x00000020 /* 1- TBI Interface mode (for SGMII) */ + +#define ECNTRL_DEFAULT	(ECNTRL_TBIM | ECNTRL_R100M | ECNTRL_SGMIIM) + +/* TCTRL - Transmit control register */ +#define TCTRL_THDF	0x00000800 /* Transmit half-duplex flow control */ +#define TCTRL_TTSE	0x00000040 /* Transmit time-stamp enable */ +#define TCTRL_GTS	0x00000020 /* Graceful transmit stop */ +#define TCTRL_RFC_PAUSE	0x00000010 /* Receive flow control pause frame */ + +/* RCTRL - Receive control register */ +#define RCTRL_PAL_MASK	0x001f0000 /* packet alignment padding length */ +#define RCTRL_PAL_SHIFT	16 +#define RCTRL_CFA	0x00008000 /* control frame accept enable */ +#define RCTRL_GHTX	0x00000800 /* group address hash table extend */ +#define RCTRL_RTSE	0x00000040 /* receive 1588 time-stamp enable */ +#define RCTRL_GRS	0x00000020 /* graceful receive stop */ +#define RCTRL_BC_REJ	0x00000010 /* broadcast frame reject */ +#define RCTRL_BC_MPROM	0x00000008 /* all multicast/broadcast frames received */ +#define RCTRL_RSF	0x00000004 /* receive short frame(17~63 bytes) enable */ +#define RCTRL_EMEN	0x00000002 /* Exact match MAC address enable */ +#define RCTRL_UPROM	0x00000001 /* all unicast frame received */ + +/* MACCFG1 - MAC configuration 1 register */ +#define MACCFG1_SOFT_RST	0x80000000 /* place the MAC in reset */ +#define MACCFG1_RST_RXMAC	0x00080000 /* reset receive MAC control block */ +#define MACCFG1_RST_TXMAC	0x00040000 /* reet transmit MAC control block */ +#define MACCFG1_RST_RXFUN	0x00020000 /* reset receive function block */ +#define MACCFG1_RST_TXFUN	0x00010000 /* reset transmit function block */ +#define MACCFG1_LOOPBACK	0x00000100 /* MAC loopback */ +#define MACCFG1_RX_FLOW		0x00000020 /* Receive flow */ +#define MACCFG1_TX_FLOW		0x00000010 /* Transmit flow */ +#define MACCFG1_SYNC_RXEN	0x00000008 /* Frame reception enabled */ +#define MACCFG1_RX_EN		0x00000004 /* Rx enable */ +#define MACCFG1_SYNC_TXEN	0x00000002 /* Frame transmission is enabled */ +#define MACCFG1_TX_EN		0x00000001 /* Tx enable */ +#define MACCFG1_RXTX_EN		(MACCFG1_RX_EN | MACCFG1_TX_EN) + +/* MACCFG2 - MAC configuration 2 register */ +#define MACCFG2_PRE_LEN_MASK	0x0000f000 /* preamble length */ +#define MACCFG2_PRE_LEN(x)	((x << 12) & MACCFG2_PRE_LEN_MASK) +#define MACCFG2_IF_MODE_MASK	0x00000300 +#define MACCFG2_IF_MODE_NIBBLE	0x00000100 /* MII, 10/100 Mbps MII/RMII */ +#define MACCFG2_IF_MODE_BYTE	0x00000200 /* GMII/TBI, 1000 GMII/TBI */ +#define MACCFG2_PRE_RX_EN	0x00000080 /* receive preamble enable */ +#define MACCFG2_PRE_TX_EN	0x00000040 /* tx preable enable */ +#define MACCFG2_HUGE_FRAME	0x00000020 /* >= max frame len enable */ +#define MACCFG2_LEN_CHECK	0x00000010 /* MAC check frame's length Rx */ +#define MACCFG2_MAG_EN		0x00000008 /* magic packet enable */ +#define MACCFG2_PAD_CRC		0x00000004 /* pad and append CRC */ +#define MACCFG2_CRC_EN		0x00000002 /* MAC appends a CRC on all frames */ +#define MACCFG2_FULL_DUPLEX	0x00000001 /* Full deplex mode */ + +struct fsl_enet_mac; + +void init_dtsec(struct fsl_enet_mac *mac, void *base, void *phyregs, +		int max_rx_len); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_enet.h b/roms/u-boot/arch/powerpc/include/asm/fsl_enet.h new file mode 100644 index 00000000..96146b6e --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_enet.h @@ -0,0 +1,24 @@ +/* + * Copyright 2010 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_PPC_FSL_ENET_H +#define __ASM_PPC_FSL_ENET_H + +#include <phy.h> + +struct tsec_mii_mng { +	u32 miimcfg;		/* MII management configuration reg */ +	u32 miimcom;		/* MII management command reg */ +	u32 miimadd;		/* MII management address reg */ +	u32 miimcon;		/* MII management control reg */ +	u32 miimstat;		/* MII management status reg  */ +	u32 miimind;		/* MII management indication reg */ +	u32 ifstat;		/* Interface Status Register */ +} __attribute__ ((packed)); + +int fdt_fixup_phy_connection(void *blob, int offset, phy_interface_t phyc); + +#endif /* __ASM_PPC_FSL_ENET_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_errata.h b/roms/u-boot/arch/powerpc/include/asm/fsl_errata.h new file mode 100644 index 00000000..64da4bb3 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_errata.h @@ -0,0 +1,84 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:    GPL-2.0+ + */ + +#ifndef _ASM_FSL_ERRATA_H +#define _ASM_FSL_ERRATA_H + +#include <common.h> +#include <asm/processor.h> + +#ifdef CONFIG_SYS_FSL_ERRATUM_A006379 +static inline bool has_erratum_a006379(void) +{ +	u32 svr = get_svr(); +	if (((SVR_SOC_VER(svr) == SVR_T4240) && SVR_MAJ(svr) <= 1) || +	    ((SVR_SOC_VER(svr) == SVR_T4160) && SVR_MAJ(svr) <= 1) || +	    ((SVR_SOC_VER(svr) == SVR_T4080) && SVR_MAJ(svr) <= 1) || +	    ((SVR_SOC_VER(svr) == SVR_B4860) && SVR_MAJ(svr) <= 2) || +	    ((SVR_SOC_VER(svr) == SVR_B4420) && SVR_MAJ(svr) <= 2) || +	    ((SVR_SOC_VER(svr) == SVR_T2080) && SVR_MAJ(svr) <= 1) || +	    ((SVR_SOC_VER(svr) == SVR_T2081) && SVR_MAJ(svr) <= 1)) +		return true; + +	return false; +} +#endif + +#ifdef CONFIG_SYS_FSL_ERRATUM_A006261 +static inline bool has_erratum_a006261(void) +{ +	u32 svr = get_svr(); +	u32 soc = SVR_SOC_VER(svr); + +	switch (soc) { +	case SVR_P1010: +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); +	case SVR_P2041: +	case SVR_P2040: +		return IS_SVR_REV(svr, 1, 0) || +			IS_SVR_REV(svr, 1, 1) || IS_SVR_REV(svr, 2, 1); +	case SVR_P3041: +		return IS_SVR_REV(svr, 1, 0) || +			IS_SVR_REV(svr, 1, 1) || +			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1); +	case SVR_P5010: +	case SVR_P5020: +	case SVR_P5021: +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); +	case SVR_T4240: +	case SVR_T4160: +	case SVR_T4080: +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); +	case SVR_T1040: +		return IS_SVR_REV(svr, 1, 0); +	case SVR_T2080: +	case SVR_T2081: +		return IS_SVR_REV(svr, 1, 0); +	case SVR_P5040: +		return IS_SVR_REV(svr, 1, 0); +	} + +	return false; +} +#endif + +static inline bool has_erratum_a007075(void) +{ +	u32 svr = get_svr(); +	u32 soc = SVR_SOC_VER(svr); + +	switch (soc) { +	case SVR_B4860: +	case SVR_B4420: +		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); +	case SVR_P1010: +		return IS_SVR_REV(svr, 1, 0); +	case SVR_P4080: +		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); +	} +	return false; +} +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_fman.h b/roms/u-boot/arch/powerpc/include/asm/fsl_fman.h new file mode 100644 index 00000000..4d04415b --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_fman.h @@ -0,0 +1,463 @@ +/* + * MPC85xx Internal Memory Map + * + * Copyright 2010-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __FSL_FMAN_H__ +#define __FSL_FMAN_H__ + +#include <asm/types.h> + +typedef struct fm_bmi_common { +	u32	fmbm_init;	/* BMI initialization */ +	u32	fmbm_cfg1;	/* BMI configuration1 */ +	u32	fmbm_cfg2;	/* BMI configuration2 */ +	u32	res0[0x5]; +	u32	fmbm_ievr;	/* interrupt event register */ +	u32	fmbm_ier;	/* interrupt enable register */ +	u32	fmbm_ifr;	/* interrupt force register */ +	u32	res1[0x5]; +	u32	fmbm_arb[0x8];	/* BMI arbitration */ +	u32	res2[0x28]; +	u32	fmbm_gde;	/* global debug enable */ +	u32	fmbm_pp[0x3f];	/* BMI port parameters */ +	u32	res3; +	u32	fmbm_pfs[0x3f];	/* BMI port FIFO size */ +	u32	res4; +	u32	fmbm_ppid[0x3f];/* port partition ID */ +} fm_bmi_common_t; + +typedef struct fm_qmi_common { +	u32	fmqm_gc;	/* general configuration register */ +	u32	res0; +	u32	fmqm_eie;	/* error interrupt event register */ +	u32	fmqm_eien;	/* error interrupt enable register */ +	u32	fmqm_eif;	/* error interrupt force register */ +	u32	fmqm_ie;	/* interrupt event register */ +	u32	fmqm_ien;	/* interrupt enable register */ +	u32	fmqm_if;	/* interrupt force register */ +	u32	fmqm_gs;	/* global status register */ +	u32	fmqm_ts;	/* task status register */ +	u32	fmqm_etfc;	/* enqueue total frame counter */ +	u32	fmqm_dtfc;	/* dequeue total frame counter */ +	u32	fmqm_dc0;	/* dequeue counter 0 */ +	u32	fmqm_dc1;	/* dequeue counter 1 */ +	u32	fmqm_dc2;	/* dequeue counter 2 */ +	u32	fmqm_dc3;	/* dequeue counter 3 */ +	u32	fmqm_dfnoc;	/* dequeue FQID not override counter */ +	u32	fmqm_dfcc;	/* dequeue FQID from context counter */ +	u32	fmqm_dffc;	/* dequeue FQID from FD counter */ +	u32	fmqm_dcc;	/* dequeue confirm counter */ +	u32	res1[0xc]; +	u32	fmqm_dtrc;	/* debug trap configuration register */ +	u32	fmqm_efddd;	/* enqueue frame descriptor dynamic debug */ +	u32	res3[0x2]; +	u32	res4[0xdc];	/* missing debug regs */ +} fm_qmi_common_t; + +typedef struct fm_bmi { +	u8	res[1024]; +} fm_bmi_t; + +typedef struct fm_qmi { +	u8	res[1024]; +} fm_qmi_t; + +struct fm_bmi_rx_port { +	u32 fmbm_rcfg;	/* Rx configuration */ +	u32 fmbm_rst;	/* Rx status */ +	u32 fmbm_rda;	/* Rx DMA attributes */ +	u32 fmbm_rfp;	/* Rx FIFO parameters */ +	u32 fmbm_rfed;	/* Rx frame end data */ +	u32 fmbm_ricp;	/* Rx internal context parameters */ +	u32 fmbm_rim;	/* Rx internal margins */ +	u32 fmbm_rebm;	/* Rx external buffer margins */ +	u32 fmbm_rfne;	/* Rx frame next engine */ +	u32 fmbm_rfca;	/* Rx frame command attributes */ +	u32 fmbm_rfpne;	/* Rx frame parser next engine */ +	u32 fmbm_rpso;	/* Rx parse start offset */ +	u32 fmbm_rpp;	/* Rx policer profile */ +	u32 fmbm_rccb;	/* Rx coarse classification base */ +	u32 res1[0x2]; +	u32 fmbm_rprai[0x8];	/* Rx parse results array Initialization */ +	u32 fmbm_rfqid;		/* Rx frame queue ID */ +	u32 fmbm_refqid;	/* Rx error frame queue ID */ +	u32 fmbm_rfsdm;		/* Rx frame status discard mask */ +	u32 fmbm_rfsem;		/* Rx frame status error mask */ +	u32 fmbm_rfene;		/* Rx frame enqueue next engine */ +	u32 res2[0x23]; +	u32 fmbm_ebmpi[0x8];	/* buffer manager pool information */ +	u32 fmbm_acnt[0x8];	/* allocate counter */ +	u32 res3[0x8]; +	u32 fmbm_cgm[0x8];	/* congestion group map */ +	u32 fmbm_mpd;		/* BMan pool depletion */ +	u32 res4[0x1F]; +	u32 fmbm_rstc;		/* Rx statistics counters */ +	u32 fmbm_rfrc;		/* Rx frame counters */ +	u32 fmbm_rfbc;		/* Rx bad frames counter */ +	u32 fmbm_rlfc;		/* Rx large frames counter */ +	u32 fmbm_rffc;		/* Rx filter frames counter */ +	u32 fmbm_rfdc;		/* Rx frame discard counter */ +	u32 fmbm_rfldec;	/* Rx frames list DMA error counter */ +	u32 fmbm_rodc;		/* Rx out of buffers discard counter */ +	u32 fmbm_rbdc;		/* Rx buffers deallocate counter */ +	u32 res5[0x17]; +	u32 fmbm_rpc;		/* Rx performance counters */ +	u32 fmbm_rpcp;		/* Rx performance count parameters */ +	u32 fmbm_rccn;		/* Rx cycle counter */ +	u32 fmbm_rtuc;		/* Rx tasks utilization counter */ +	u32 fmbm_rrquc;		/* Rx receive queue utilization counter */ +	u32 fmbm_rduc;		/* Rx DMA utilization counter */ +	u32 fmbm_rfuc;		/* Rx FIFO utilization counter */ +	u32 fmbm_rpac;		/* Rx pause activation counter */ +	u32 res6[0x18]; +	u32 fmbm_rdbg;		/* Rx debug configuration */ +}; + +/* FMBM_RCFG - Rx configuration */ +#define FMBM_RCFG_EN		0x80000000 /* port is enabled to receive data */ +#define FMBM_RCFG_FDOVR		0x02000000 /* frame discard override */ +#define FMBM_RCFG_IM		0x01000000 /* independent mode */ + +/* FMBM_RST - Rx status */ +#define FMBM_RST_BSY		0x80000000 /* Rx port is busy */ + +/* FMBM_RFCA - Rx frame command attributes */ +#define FMBM_RFCA_ORDER		0x80000000 +#define FMBM_RFCA_MR_MASK	0x003f0000 +#define FMBM_RFCA_MR(x)		((x << 16) & FMBM_RFCA_MR_MASK) + +/* FMBM_RSTC - Rx statistics */ +#define FMBM_RSTC_EN		0x80000000 /* statistics counters enable */ + +struct fm_bmi_tx_port { +	u32 fmbm_tcfg;	/* Tx configuration */ +	u32 fmbm_tst;	/* Tx status */ +	u32 fmbm_tda;	/* Tx DMA attributes */ +	u32 fmbm_tfp;	/* Tx FIFO parameters */ +	u32 fmbm_tfed;	/* Tx frame end data */ +	u32 fmbm_ticp;	/* Tx internal context parameters */ +	u32 fmbm_tfne;	/* Tx frame next engine */ +	u32 fmbm_tfca;	/* Tx frame command attributes */ +	u32 fmbm_tcfqid;/* Tx confirmation frame queue ID */ +	u32 fmbm_tfeqid;/* Tx error frame queue ID */ +	u32 fmbm_tfene;	/* Tx frame enqueue next engine */ +	u32 fmbm_trlmts;/* Tx rate limiter scale */ +	u32 fmbm_trlmt;	/* Tx rate limiter */ +	u32 res0[0x73]; +	u32 fmbm_tstc;	/* Tx statistics counters */ +	u32 fmbm_tfrc;	/* Tx frame counter */ +	u32 fmbm_tfdc;	/* Tx frames discard counter */ +	u32 fmbm_tfledc;/* Tx frame length error discard counter */ +	u32 fmbm_tfufdc;/* Tx frame unsupported format discard counter */ +	u32 fmbm_tbdc;	/* Tx buffers deallocate counter */ +	u32 res1[0x1a]; +	u32 fmbm_tpc;	/* Tx performance counters */ +	u32 fmbm_tpcp;	/* Tx performance count parameters */ +	u32 fmbm_tccn;	/* Tx cycle counter */ +	u32 fmbm_ttuc;	/* Tx tasks utilization counter */ +	u32 fmbm_ttcquc;/* Tx transmit confirm queue utilization counter */ +	u32 fmbm_tduc;	/* Tx DMA utilization counter */ +	u32 fmbm_tfuc;	/* Tx FIFO utilization counter */ +	u32 res2[0x19]; +	u32 fmbm_tdcfg;	/* Tx debug configuration */ +}; + +/* FMBM_TCFG - Tx configuration */ +#define FMBM_TCFG_EN	0x80000000 /* port is enabled to transmit data */ +#define FMBM_TCFG_IM	0x01000000 /* independent mode enable */ + +/* FMBM_TST - Tx status */ +#define FMBM_TST_BSY		0x80000000 /* Tx port is busy */ + +/* FMBM_TFCA - Tx frame command attributes */ +#define FMBM_TFCA_ORDER		0x80000000 +#define FMBM_TFCA_MR_MASK	0x003f0000 +#define FMBM_TFCA_MR(x)		((x << 16) & FMBM_TFCA_MR_MASK) + +/* FMBM_TSTC - Tx statistics counters */ +#define FMBM_TSTC_EN		0x80000000 + +/* FMBM_INIT - BMI initialization register */ +#define FMBM_INIT_START		0x80000000 /* init internal buffers */ + +/* FMBM_CFG1 - BMI configuration 1 */ +#define FMBM_CFG1_FBPS_MASK	0x03ff0000 /* Free buffer pool size */ +#define FMBM_CFG1_FBPS_SHIFT	16 +#define FMBM_CFG1_FBPO_MASK	0x000003ff /* Free buffer pool offset */ + +/* FMBM_IEVR - interrupt event */ +#define FMBM_IEVR_PEC		0x80000000 /* pipeline table ECC err detected */ +#define FMBM_IEVR_LEC		0x40000000 /* linked list RAM ECC error */ +#define FMBM_IEVR_SEC		0x20000000 /* statistics count RAM ECC error */ +#define FMBM_IEVR_CLEAR_ALL	(FMBM_IEVR_PEC | FMBM_IEVR_LEC | FMBM_IEVR_SEC) + +/* FMBM_IER - interrupt enable */ +#define FMBM_IER_PECE		0x80000000 /* PEC interrupt enable */ +#define FMBM_IER_LECE		0x40000000 /* LEC interrupt enable */ +#define FMBM_IER_SECE		0x20000000 /* SEC interrupt enable */ + +#define FMBM_IER_DISABLE_ALL	0x00000000 + +/* FMBM_PP - BMI Port Parameters */ +#define FMBM_PP_MXT_MASK	0x3f000000 /* Max # tasks */ +#define FMBM_PP_MXT(x)		(((x-1) << 24) & FMBM_PP_MXT_MASK) +#define FMBM_PP_MXD_MASK	0x00000f00 /* Max DMA */ +#define FMBM_PP_MXD(x)		(((x-1) << 8) & FMBM_PP_MXD_MASK) + +/* FMBM_PFS - BMI Port FIFO Size */ +#define FMBM_PFS_IFSZ_MASK	0x000003ff /* Internal Fifo Size */ +#define FMBM_PFS_IFSZ(x)	(x & FMBM_PFS_IFSZ_MASK) + +/* FMQM_GC - global configuration */ +#define FMQM_GC_ENQ_EN		0x80000000 /* enqueue enable */ +#define FMQM_GC_DEQ_EN		0x40000000 /* dequeue enable */ +#define FMQM_GC_STEN		0x10000000 /* enable global stat counters */ +#define FMQM_GC_ENQ_THR_MASK	0x00003f00 /* max number of enqueue Tnum */ +#define FMQM_GC_ENQ(x)		((x << 8) &  FMQM_GC_ENQ_THR_MAS) +#define FMQM_GC_DEQ_THR_MASK	0x0000003f /* max number of dequeue Tnum */ +#define FMQM_GC_DEQ(x)		(x & FMQM_GC_DEQ_THR_MASK) + +/* FMQM_EIE - error interrupt event register */ +#define FMQM_EIE_DEE		0x80000000 /* double-bit ECC error */ +#define FMQM_EIE_DFUPE		0x40000000 /* dequeue from unknown PortID */ +#define FMQM_EIE_CLEAR_ALL	(FMQM_EIE_DEE | FMQM_EIE_DFUPE) + +/* FMQM_EIEN - error interrupt enable register */ +#define FMQM_EIEN_DEEN		0x80000000 /* double-bit ECC error */ +#define FMQM_EIEN_DFUPEN	0x40000000 /* dequeue from unknown PortID */ +#define FMQM_EIEN_DISABLE_ALL	0x00000000 + +/* FMQM_IE - interrupt event register */ +#define FMQM_IE_SEE		0x80000000 /* single-bit ECC error detected */ +#define FMQM_IE_CLEAR_ALL	FMQM_IE_SEE + +/* FMQM_IEN - interrupt enable register */ +#define FMQM_IEN_SEE		0x80000000 /* single-bit ECC err IRQ enable */ +#define FMQM_IEN_DISABLE_ALL	0x00000000 + +/* NIA - next invoked action */ +#define NIA_ENG_RISC		0x00000000 +#define NIA_ENG_MASK		0x007c0000 + +/* action code */ +#define NIA_RISC_AC_CC		0x00000006 +#define NIA_RISC_AC_IM_TX	0x00000008 /* independent mode Tx */ +#define NIA_RISC_AC_IM_RX	0x0000000a /* independent mode Rx */ +#define NIA_RISC_AC_HC		0x0000000c + +typedef struct fm_parser { +	u8	res[1024]; +} fm_parser_t; + +typedef struct fm_policer { +	u8	res[4*1024]; +} fm_policer_t; + +typedef struct fm_keygen { +	u8	res[4*1024]; +} fm_keygen_t; + +typedef struct fm_dma { +	u32	fmdmsr;		/* status register */ +	u32	fmdmmr;		/* mode register */ +	u32	fmdmtr;		/* bus threshold register */ +	u32	fmdmhy;		/* bus hysteresis register */ +	u32	fmdmsetr;	/* SOS emergency threshold register */ +	u32	fmdmtah;	/* transfer bus address high register */ +	u32	fmdmtal;	/* transfer bus address low register */ +	u32	fmdmtcid;	/* transfer bus communication ID register */ +	u32	fmdmra;		/* DMA bus internal ram address register */ +	u32	fmdmrd;		/* DMA bus internal ram data register */ +	u32	res0[0xb]; +	u32	fmdmdcr;	/* debug counter */ +	u32	fmdmemsr;	/* emrgency smoother register */ +	u32	res1; +	u32	fmdmplr[32];	/* FM DMA PID-LIODN # register */ +	u32	res[0x3c8]; +} fm_dma_t; + +/* FMDMSR - Fman DMA status register */ +#define FMDMSR_CMDQNE		0x10000000 /* command queue not empty */ +#define FMDMSR_BER		0x08000000 /* bus err event occurred on bus */ +#define FMDMSR_RDB_ECC		0x04000000 /* read buffer ECC error */ +#define FMDMSR_WRB_SECC		0x02000000 /* write buf ECC err sys side */ +#define FMDMSR_WRB_FECC		0x01000000 /* write buf ECC err Fman side */ +#define FMDMSR_DPEXT_SECC	0x00800000 /* DP external ECC err sys side */ +#define FMDMSR_DPEXT_FECC	0x00400000 /* DP external ECC err Fman side */ +#define FMDMSR_DPDAT_SECC	0x00200000 /* DP data ECC err on sys side */ +#define FMDMSR_DPDAT_FECC	0x00100000 /* DP data ECC err on Fman side */ +#define FMDMSR_SPDAT_FECC	0x00080000 /* SP data ECC error Fman side */ + +#define FMDMSR_CLEAR_ALL	(FMDMSR_BER | FMDMSR_RDB_ECC \ +				| FMDMSR_WRB_SECC | FMDMSR_WRB_FECC \ +				| FMDMSR_DPEXT_SECC | FMDMSR_DPEXT_FECC \ +				| FMDMSR_DPDAT_SECC | FMDMSR_DPDAT_FECC \ +				| FMDMSR_SPDAT_FECC) + +/* FMDMMR - FMan DMA mode register */ +#define FMDMMR_SBER		0x10000000 /* stop the DMA if a bus error */ + +typedef struct fm_fpm { +	u32	fpmtnc;		/* TNUM control */ +	u32	fpmprc;		/* Port_ID control */ +	u32	res0; +	u32	fpmflc;		/* flush control */ +	u32	fpmdis1;	/* dispatch thresholds1 */ +	u32	fpmdis2;	/* dispatch thresholds2 */ +	u32	fmepi;		/* error pending interrupts */ +	u32	fmrie;		/* rams interrupt enable */ +	u32	fpmfcevent[0x4];/* FMan controller event 0-3 */ +	u32	res1[0x4]; +	u32	fpmfcmask[0x4];	/* FMan controller mask 0-3 */ +	u32	res2[0x4]; +	u32	fpmtsc1;	/* timestamp control1 */ +	u32	fpmtsc2;	/* timestamp control2 */ +	u32	fpmtsp;		/* time stamp */ +	u32	fpmtsf;		/* time stamp fraction */ +	u32	fpmrcr;		/* rams control and event */ +	u32	res3[0x3]; +	u32	fpmdrd[0x4];	/* data_ram data 0-3 */ +	u32	res4[0xc]; +	u32	fpmdra;		/* data ram access */ +	u32	fm_ip_rev_1;	/* IP block revision 1 */ +	u32	fm_ip_rev_2;	/* IP block revision 2 */ +	u32	fmrstc;		/* reset command */ +	u32	fmcld;		/* classifier debug control */ +	u32	fmnpi;		/* normal pending interrupts */ +	u32	res5; +	u32	fmfpee;		/* event and enable */ +	u32	fpmcev[0x4];	/* CPU event 0-3 */ +	u32	res6[0x4]; +	u32	fmfp_ps[0x40];	/* port status */ +	u32	res7[0x260]; +	u32	fpmts[0x80];	/* task status */ +	u32	res8[0xa0]; +} fm_fpm_t; + +/* FMFP_PRC - FPM Port_ID Control Register */ +#define FMFPPRC_PORTID_MASK	0x3f000000 +#define FMFPPRC_PORTID_SHIFT	24 +#define FMFPPRC_ORA_SHIFT	16 +#define FMFPPRC_RISC1		0x00000001 +#define FMFPPRC_RISC2		0x00000002 +#define FMFPPRC_RISC_ALL	(FMFPPRC_RISC1 | FMFPPRC_RSIC2) + +/* FPM Flush Control Register */ +#define FMFP_FLC_DISP_LIM_NONE	0x00000000 /* no dispatch limitation */ + +/* FMFP_EE - FPM event and enable register */ +#define FMFPEE_DECC		0x80000000 /* double ECC err on FPM ram */ +#define FMFPEE_STL		0x40000000 /* stall of task ... */ +#define FMFPEE_SECC		0x20000000 /* single ECC error */ +#define FMFPEE_RFM		0x00010000 /* release FMan */ +#define FMFPEE_DECC_EN		0x00008000 /* double ECC interrupt enable */ +#define FMFPEE_STL_EN		0x00004000 /* stall of task interrupt enable */ +#define FMFPEE_SECC_EN		0x00002000 /* single ECC err interrupt enable */ +#define FMFPEE_EHM		0x00000008 /* external halt enable */ +#define FMFPEE_UEC		0x00000004 /* FMan is not halted */ +#define FMFPEE_CER		0x00000002 /* only errornous task stalled */ +#define FMFPEE_DER		0x00000001 /* DMA error is just reported */ + +#define FMFPEE_CLEAR_EVENT	(FMFPEE_DECC | FMFPEE_STL | FMFPEE_SECC | \ +				 FMFPEE_EHM | FMFPEE_UEC | FMFPEE_CER | \ +				 FMFPEE_DER | FMFPEE_RFM) + +/* FMFP_RCR - FMan Rams Control and Event */ +#define FMFP_RCR_MDEC		0x00008000 /* double ECC error in muram */ +#define FMFP_RCR_IDEC		0x00004000 /* double ECC error in iram */ + +typedef struct fm_imem { +	u32	iadd;		/* instruction address register */ +	u32	idata;		/* instruction data register */ +	u32	itcfg;		/* timing config register */ +	u32	iready;		/* ready register */ +	u8	res[0xff0]; +} fm_imem_t; +#define IRAM_IADD_AIE		0x80000000 /* address auto increase enable */ +#define IRAM_READY		0x80000000 /* ready to use */ + +typedef struct fm_soft_parser { +	u8	res[4*1024]; +} fm_soft_parser_t; + +typedef struct fm_dtesc { +	u8	res[4*1024]; +} fm_dtsec_t; + +typedef struct fm_mdio { +	u8	res0[0x120]; +	u32	miimcfg;	/* MII management configuration reg */ +	u32	miimcom;	/* MII management command reg */ +	u32	miimadd;	/* MII management address reg */ +	u32	miimcon;	/* MII management control reg */ +	u32	miimstat;	/* MII management status reg  */ +	u32	miimind;	/* MII management indication reg */ +	u8	res1[0x1000 - 0x138]; +} fm_mdio_t; + +typedef struct fm_10gec { +	u8	res[4*1024]; +} fm_10gec_t; + +typedef struct fm_10gec_mdio { +	u8	res[4*1024]; +} fm_10gec_mdio_t; + +typedef struct fm_memac { +	u8	res[4*1024]; +} fm_memac_t; + +typedef struct fm_memac_mdio { +	u8	res[4*1024]; +} fm_memac_mdio_t; + +typedef struct fm_1588 { +	u8	res[4*1024]; +} fm_1588_t; + +typedef struct ccsr_fman { +	u8			muram[0x80000]; +	fm_bmi_common_t		fm_bmi_common; +	fm_qmi_common_t		fm_qmi_common; +	u8			res0[2048]; +	struct { +		fm_bmi_t	fm_bmi; +		fm_qmi_t	fm_qmi; +		fm_parser_t	fm_parser; +		u8		res[1024]; +	} port[63]; +	fm_policer_t		fm_policer; +	fm_keygen_t		fm_keygen; +	fm_dma_t		fm_dma; +	fm_fpm_t		fm_fpm; +	fm_imem_t		fm_imem; +	u8			res1[8*1024]; +	fm_soft_parser_t	fm_soft_parser; +	u8			res2[96*1024]; +#ifdef CONFIG_SYS_FMAN_V3 +	struct { +		fm_memac_t		fm_memac; +		fm_memac_mdio_t		fm_memac_mdio; +	} memac[10]; +	u8			res4[32*1024]; +	fm_memac_mdio_t		fm_dedicated_mdio[2]; +#else +	struct { +		fm_dtsec_t	fm_dtesc; +		fm_mdio_t	fm_mdio; +	} mac_1g[8];		/* support up to 8 1g controllers */ +	struct { +		fm_10gec_t		fm_10gec; +		fm_10gec_mdio_t		fm_10gec_mdio; +	} mac_10g[1]; +	u8			res4[48*1024]; +#endif +	fm_1588_t		fm_1588; +	u8			res5[4*1024]; +} ccsr_fman_t; + +#endif /*__FSL_FMAN_H__*/ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_i2c.h b/roms/u-boot/arch/powerpc/include/asm/fsl_i2c.h new file mode 100644 index 00000000..d6537fd6 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_i2c.h @@ -0,0 +1,87 @@ +/* + * Freescale I2C Controller + * + * Copyright 2006 Freescale Semiconductor, Inc. + * + * Based on earlier versions by Gleb Natapov <gnatapov@mrv.com>, + * Xianghua Xiao <x.xiao@motorola.com>, Eran Liberty (liberty@freescale.com), + * and Jeff Brown. + * Some bits are taken from linux driver writen by adrian@humboldt.co.uk. + * + * This software may be used and distributed according to the + * terms of the GNU Public License, Version 2, incorporated + * herein by reference. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * Version 2 as published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef _ASM_FSL_I2C_H_ +#define _ASM_FSL_I2C_H_ + +#include <asm/types.h> + +typedef struct fsl_i2c { + +	u8 adr;		/* I2C slave address */ +	u8 res0[3]; +#define I2C_ADR		0xFE +#define I2C_ADR_SHIFT	1 +#define I2C_ADR_RES	~(I2C_ADR) + +	u8 fdr;		/* I2C frequency divider register */ +	u8 res1[3]; +#define IC2_FDR		0x3F +#define IC2_FDR_SHIFT	0 +#define IC2_FDR_RES	~(IC2_FDR) + +	u8 cr;		/* I2C control redister	*/ +	u8 res2[3]; +#define I2C_CR_MEN	0x80 +#define I2C_CR_MIEN	0x40 +#define I2C_CR_MSTA	0x20 +#define I2C_CR_MTX	0x10 +#define I2C_CR_TXAK	0x08 +#define I2C_CR_RSTA	0x04 +#define I2C_CR_BIT6	0x02	/* required for workaround A004447 */ +#define I2C_CR_BCST	0x01 + +	u8 sr;		/* I2C status register */ +	u8 res3[3]; +#define I2C_SR_MCF	0x80 +#define I2C_SR_MAAS	0x40 +#define I2C_SR_MBB	0x20 +#define I2C_SR_MAL	0x10 +#define I2C_SR_BCSTM	0x08 +#define I2C_SR_SRW	0x04 +#define I2C_SR_MIF	0x02 +#define I2C_SR_RXAK	0x01 + +	u8 dr;		/* I2C data register */ +	u8 res4[3]; +#define I2C_DR		0xFF +#define I2C_DR_SHIFT	0 +#define I2C_DR_RES	~(I2C_DR) + +	u8 dfsrr;	/* I2C digital filter sampling rate register */ +	u8 res5[3]; +#define I2C_DFSRR	0x3F +#define I2C_DFSRR_SHIFT	0 +#define I2C_DFSRR_RES	~(I2C_DR) + +	/* Fill out the reserved block */ +	u8 res6[0xE8]; +} fsl_i2c_t; + +#endif	/* _ASM_I2C_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_law.h b/roms/u-boot/arch/powerpc/include/asm/fsl_law.h new file mode 100644 index 00000000..37d3a224 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_law.h @@ -0,0 +1,148 @@ +/* + * Copyright 2008-2011 Freescale Semiconductor, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * Version 2 as published by the Free Software Foundation. + */ + +#ifndef _FSL_LAW_H_ +#define _FSL_LAW_H_ + +#include <asm/io.h> + +#define LAW_EN	0x80000000 + +#define SET_LAW_ENTRY(idx, a, sz, trgt) \ +	{ .index = idx, .addr = a, .size = sz, .trgt_id = trgt } + +#define SET_LAW(a, sz, trgt) \ +	{ .index = -1, .addr = a, .size = sz, .trgt_id = trgt } + +enum law_size { +	LAW_SIZE_4K = 0xb, +	LAW_SIZE_8K, +	LAW_SIZE_16K, +	LAW_SIZE_32K, +	LAW_SIZE_64K, +	LAW_SIZE_128K, +	LAW_SIZE_256K, +	LAW_SIZE_512K, +	LAW_SIZE_1M, +	LAW_SIZE_2M, +	LAW_SIZE_4M, +	LAW_SIZE_8M, +	LAW_SIZE_16M, +	LAW_SIZE_32M, +	LAW_SIZE_64M, +	LAW_SIZE_128M, +	LAW_SIZE_256M, +	LAW_SIZE_512M, +	LAW_SIZE_1G, +	LAW_SIZE_2G, +	LAW_SIZE_4G, +	LAW_SIZE_8G, +	LAW_SIZE_16G, +	LAW_SIZE_32G, +}; + +#define law_size_bits(sz)	(__ilog2_u64(sz) - 1) +#define lawar_size(x)	(1ULL << ((x & 0x3f) + 1)) + +#ifdef CONFIG_FSL_CORENET +enum law_trgt_if { +	LAW_TRGT_IF_PCIE_1 = 0x00, +	LAW_TRGT_IF_PCIE_2 = 0x01, +	LAW_TRGT_IF_PCIE_3 = 0x02, +	LAW_TRGT_IF_PCIE_4 = 0x03, +	LAW_TRGT_IF_RIO_1 = 0x08, +	LAW_TRGT_IF_RIO_2 = 0x09, + +	LAW_TRGT_IF_DDR_1 = 0x10, +	LAW_TRGT_IF_DDR_2 = 0x11,	/* 2nd controller */ +	LAW_TRGT_IF_DDR_3 = 0x12, +	LAW_TRGT_IF_DDR_4 = 0x13, +	LAW_TRGT_IF_DDR_INTRLV = 0x14, +	LAW_TRGT_IF_DDR_INTLV_34 = 0x15, +	LAW_TRGT_IF_DDR_INTLV_123 = 0x17, +	LAW_TRGT_IF_DDR_INTLV_1234 = 0x16, +	LAW_TRGT_IF_BMAN = 0x18, +	LAW_TRGT_IF_DCSR = 0x1d, +	LAW_TRGT_IF_LBC = 0x1f, +	LAW_TRGT_IF_QMAN = 0x3c, + +	LAW_TRGT_IF_MAPLE = 0x50, +}; +#define LAW_TRGT_IF_DDR		LAW_TRGT_IF_DDR_1 +#define LAW_TRGT_IF_IFC		LAW_TRGT_IF_LBC +#else +enum law_trgt_if { +	LAW_TRGT_IF_PCI = 0x00, +	LAW_TRGT_IF_PCI_2 = 0x01, +#ifndef CONFIG_MPC8641 +	LAW_TRGT_IF_PCIE_1 = 0x02, +#endif +#if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132) +	LAW_TRGT_IF_OCN_DSP = 0x03, +#else +#if !defined(CONFIG_MPC8572) && !defined(CONFIG_P2020) +	LAW_TRGT_IF_PCIE_3 = 0x03, +#endif +#endif +	LAW_TRGT_IF_LBC = 0x04, +	LAW_TRGT_IF_CCSR = 0x08, +	LAW_TRGT_IF_DSP_CCSR = 0x09, +	LAW_TRGT_IF_PLATFORM_SRAM = 0x0a, +	LAW_TRGT_IF_DDR_INTRLV = 0x0b, +	LAW_TRGT_IF_RIO = 0x0c, +#if defined(CONFIG_BSC9132) +	LAW_TRGT_IF_CLASS_DSP = 0x0d, +#else +	LAW_TRGT_IF_RIO_2 = 0x0d, +#endif +	LAW_TRGT_IF_DPAA_SWP_SRAM = 0x0e, +	LAW_TRGT_IF_DDR = 0x0f, +	LAW_TRGT_IF_DDR_2 = 0x16,	/* 2nd controller */ +	/* place holder for 3-way and 4-way interleaving */ +	LAW_TRGT_IF_DDR_3, +	LAW_TRGT_IF_DDR_4, +	LAW_TRGT_IF_DDR_INTLV_34, +	LAW_TRGT_IF_DDR_INTLV_123, +	LAW_TRGT_IF_DDR_INTLV_1234, +}; +#define LAW_TRGT_IF_DDR_1	LAW_TRGT_IF_DDR +#define LAW_TRGT_IF_PCI_1	LAW_TRGT_IF_PCI +#define LAW_TRGT_IF_PCIX	LAW_TRGT_IF_PCI +#define LAW_TRGT_IF_PCIE_2	LAW_TRGT_IF_PCI_2 +#define LAW_TRGT_IF_RIO_1	LAW_TRGT_IF_RIO +#define LAW_TRGT_IF_IFC		LAW_TRGT_IF_LBC + +#ifdef CONFIG_MPC8641 +#define LAW_TRGT_IF_PCIE_1	LAW_TRGT_IF_PCI +#endif + +#if defined(CONFIG_MPC8572) || defined(CONFIG_P2020) +#define LAW_TRGT_IF_PCIE_3	LAW_TRGT_IF_PCI +#endif +#endif /* CONFIG_FSL_CORENET */ + +struct law_entry { +	int index; +	phys_addr_t addr; +	enum law_size size; +	enum law_trgt_if trgt_id; +}; + +extern void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id); +extern int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); +extern int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); +extern int set_ddr_laws(u64 start, u64 sz, enum law_trgt_if id); +extern struct law_entry find_law(phys_addr_t addr); +extern void disable_law(u8 idx); +extern void init_laws(void); +extern void print_laws(void); + +/* define in board code */ +extern struct law_entry law_table[]; +extern int num_law_entries; +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_lbc.h b/roms/u-boot/arch/powerpc/include/asm/fsl_lbc.h new file mode 100644 index 00000000..402edd7a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_lbc.h @@ -0,0 +1,533 @@ +/* + * Copyright (C) 2004-2008,2010-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_PPC_FSL_LBC_H +#define __ASM_PPC_FSL_LBC_H + +#include <config.h> +#include <common.h> + +#ifdef CONFIG_MPC85xx +void lbc_sdram_init(void); +#endif + +/* BR - Base Registers + */ +#define BR0				0x5000		/* Register offset to immr */ +#define BR1				0x5008 +#define BR2				0x5010 +#define BR3				0x5018 +#define BR4				0x5020 +#define BR5				0x5028 +#define BR6				0x5030 +#define BR7				0x5038 + +#define BR_BA				0xFFFF8000 +#define BR_BA_SHIFT			15 +#define BR_XBA				0x00006000 +#define BR_XBA_SHIFT			13 +#define BR_PS				0x00001800 +#define BR_PS_SHIFT			11 +#define BR_PS_8				0x00000800	/* Port Size 8 bit */ +#define BR_PS_16			0x00001000	/* Port Size 16 bit */ +#define BR_PS_32			0x00001800	/* Port Size 32 bit */ +#define BR_DECC				0x00000600 +#define BR_DECC_SHIFT			9 +#define BR_DECC_OFF			0x00000000 +#define BR_DECC_CHK			0x00000200 +#define BR_DECC_CHK_GEN			0x00000400 +#define BR_WP				0x00000100 +#define BR_WP_SHIFT			8 +#define BR_MSEL				0x000000E0 +#define BR_MSEL_SHIFT			5 +#define BR_MS_GPCM			0x00000000	/* GPCM */ +#if !defined(CONFIG_MPC834x) && !defined(CONFIG_MPC8360) +#define BR_MS_FCM			0x00000020	/* FCM */ +#endif +#if defined(CONFIG_MPC834x) || defined(CONFIG_MPC8360) +#define BR_MS_SDRAM			0x00000060	/* SDRAM */ +#elif defined(CONFIG_MPC85xx) +#define BR_MS_SDRAM			0x00000000	/* SDRAM */ +#endif +#define BR_MS_UPMA			0x00000080	/* UPMA */ +#define BR_MS_UPMB			0x000000A0	/* UPMB */ +#define BR_MS_UPMC			0x000000C0	/* UPMC */ +#if !defined(CONFIG_MPC834x) +#define BR_ATOM				0x0000000C +#define BR_ATOM_SHIFT			2 +#endif +#define BR_V				0x00000001 +#define BR_V_SHIFT			0 + +#define BR_UPMx_TO_MSEL(x)		((x + 4) << BR_MSEL_SHIFT) + +#define UPMA			0 +#define UPMB			1 +#define UPMC			2 + +#if defined(CONFIG_MPC834x) +#define BR_RES				~(BR_BA | BR_PS | BR_DECC | BR_WP | BR_MSEL | BR_V) +#else +#define BR_RES				~(BR_BA | BR_PS | BR_DECC | BR_WP | BR_MSEL | BR_ATOM | BR_V) +#endif + +/* Convert an address into the right format for the BR registers */ +#if defined(CONFIG_PHYS_64BIT) && !defined(CONFIG_FSL_ELBC) +#define BR_PHYS_ADDR(x)	\ +	((u32)(((x) & 0x0ffff8000ULL) | (((x) & 0x300000000ULL) >> 19))) +#else +#define BR_PHYS_ADDR(x) ((u32)(x) & 0xffff8000) +#endif + +/* OR - Option Registers + */ +#define OR0				0x5004		/* Register offset to immr */ +#define OR1				0x500C +#define OR2				0x5014 +#define OR3				0x501C +#define OR4				0x5024 +#define OR5				0x502C +#define OR6				0x5034 +#define OR7				0x503C + +#define OR_GPCM_AM			0xFFFF8000 +#define OR_GPCM_AM_SHIFT		15 +#define OR_GPCM_XAM			0x00006000 +#define OR_GPCM_XAM_SHIFT		13 +#define OR_GPCM_BCTLD			0x00001000 +#define OR_GPCM_BCTLD_SHIFT		12 +#define OR_GPCM_CSNT			0x00000800 +#define OR_GPCM_CSNT_SHIFT		11 +#define OR_GPCM_ACS			0x00000600 +#define OR_GPCM_ACS_SHIFT		9 +#define OR_GPCM_ACS_DIV2		0x00000600 +#define OR_GPCM_ACS_DIV4		0x00000400 +#define OR_GPCM_XACS			0x00000100 +#define OR_GPCM_XACS_SHIFT		8 +#define OR_GPCM_SCY			0x000000F0 +#define OR_GPCM_SCY_SHIFT		4 +#define OR_GPCM_SCY_1			0x00000010 +#define OR_GPCM_SCY_2			0x00000020 +#define OR_GPCM_SCY_3			0x00000030 +#define OR_GPCM_SCY_4			0x00000040 +#define OR_GPCM_SCY_5			0x00000050 +#define OR_GPCM_SCY_6			0x00000060 +#define OR_GPCM_SCY_7			0x00000070 +#define OR_GPCM_SCY_8			0x00000080 +#define OR_GPCM_SCY_9			0x00000090 +#define OR_GPCM_SCY_10			0x000000a0 +#define OR_GPCM_SCY_11			0x000000b0 +#define OR_GPCM_SCY_12			0x000000c0 +#define OR_GPCM_SCY_13			0x000000d0 +#define OR_GPCM_SCY_14			0x000000e0 +#define OR_GPCM_SCY_15			0x000000f0 +#define OR_GPCM_SETA			0x00000008 +#define OR_GPCM_SETA_SHIFT		3 +#define OR_GPCM_TRLX			0x00000004 +#define OR_GPCM_TRLX_SHIFT		2 +#define OR_GPCM_TRLX_CLEAR		0x00000000 +#define OR_GPCM_TRLX_SET		0x00000004 +#define OR_GPCM_EHTR			0x00000002 +#define OR_GPCM_EHTR_SHIFT		1 +#define OR_GPCM_EHTR_CLEAR		0x00000000 +#define OR_GPCM_EHTR_SET		0x00000002 +#if !defined(CONFIG_MPC8308) +#define OR_GPCM_EAD			0x00000001 +#define OR_GPCM_EAD_SHIFT		0 +#endif + +/* helpers to convert values into an OR address mask (GPCM mode) */ +#define P2SZ_TO_AM(s)	((~((s) - 1)) & 0xffff8000)	/* must be pow of 2 */ +#define MEG_TO_AM(m)	P2SZ_TO_AM((m) << 20) + +#define OR_FCM_AM			0xFFFF8000 +#define OR_FCM_AM_SHIFT				15 +#define OR_FCM_XAM			0x00006000 +#define OR_FCM_XAM_SHIFT		13 +#define OR_FCM_BCTLD			0x00001000 +#define OR_FCM_BCTLD_SHIFT			12 +#define OR_FCM_PGS			0x00000400 +#define OR_FCM_PGS_SHIFT			10 +#define OR_FCM_CSCT			0x00000200 +#define OR_FCM_CSCT_SHIFT			 9 +#define OR_FCM_CST			0x00000100 +#define OR_FCM_CST_SHIFT			 8 +#define OR_FCM_CHT			0x00000080 +#define OR_FCM_CHT_SHIFT			 7 +#define OR_FCM_SCY			0x00000070 +#define OR_FCM_SCY_SHIFT			 4 +#define OR_FCM_SCY_1			0x00000010 +#define OR_FCM_SCY_2			0x00000020 +#define OR_FCM_SCY_3			0x00000030 +#define OR_FCM_SCY_4			0x00000040 +#define OR_FCM_SCY_5			0x00000050 +#define OR_FCM_SCY_6			0x00000060 +#define OR_FCM_SCY_7			0x00000070 +#define OR_FCM_RST			0x00000008 +#define OR_FCM_RST_SHIFT			 3 +#define OR_FCM_TRLX			0x00000004 +#define OR_FCM_TRLX_SHIFT			 2 +#define OR_FCM_EHTR			0x00000002 +#define OR_FCM_EHTR_SHIFT			 1 + +#define OR_UPM_AM			0xFFFF8000 +#define OR_UPM_AM_SHIFT			15 +#define OR_UPM_XAM			0x00006000 +#define OR_UPM_XAM_SHIFT		13 +#define OR_UPM_BCTLD			0x00001000 +#define OR_UPM_BCTLD_SHIFT		12 +#define OR_UPM_BI			0x00000100 +#define OR_UPM_BI_SHIFT			8 +#define OR_UPM_TRLX			0x00000004 +#define OR_UPM_TRLX_SHIFT		2 +#define OR_UPM_EHTR			0x00000002 +#define OR_UPM_EHTR_SHIFT		1 +#define OR_UPM_EAD			0x00000001 +#define OR_UPM_EAD_SHIFT		0 + +#define OR_SDRAM_AM			0xFFFF8000 +#define OR_SDRAM_AM_SHIFT		15 +#define OR_SDRAM_XAM			0x00006000 +#define OR_SDRAM_XAM_SHIFT		13 +#define OR_SDRAM_COLS			0x00001C00 +#define OR_SDRAM_COLS_SHIFT		10 +#define OR_SDRAM_MIN_COLS		7 +#define OR_SDRAM_ROWS			0x000001C0 +#define OR_SDRAM_ROWS_SHIFT		6 +#define OR_SDRAM_MIN_ROWS		9 +#define OR_SDRAM_PMSEL			0x00000020 +#define OR_SDRAM_PMSEL_SHIFT		5 +#define OR_SDRAM_EAD			0x00000001 +#define OR_SDRAM_EAD_SHIFT		0 + +#define OR_AM_32KB			0xFFFF8000 +#define OR_AM_64KB			0xFFFF0000 +#define OR_AM_128KB			0xFFFE0000 +#define OR_AM_256KB			0xFFFC0000 +#define OR_AM_512KB			0xFFF80000 +#define OR_AM_1MB			0xFFF00000 +#define OR_AM_2MB			0xFFE00000 +#define OR_AM_4MB			0xFFC00000 +#define OR_AM_8MB			0xFF800000 +#define OR_AM_16MB			0xFF000000 +#define OR_AM_32MB			0xFE000000 +#define OR_AM_64MB			0xFC000000 +#define OR_AM_128MB			0xF8000000 +#define OR_AM_256MB			0xF0000000 +#define OR_AM_512MB			0xE0000000 +#define OR_AM_1GB			0xC0000000 +#define OR_AM_2GB			0x80000000 +#define OR_AM_4GB			0x00000000 + +/* MxMR - UPM Machine A/B/C Mode Registers + */ +#define MxMR_MAD_MSK		0x0000003f /* Machine Address Mask	   */ +#define MxMR_TLFx_MSK		0x000003c0 /* Refresh Loop Field Mask	   */ +#define MxMR_WLFx_MSK		0x00003c00 /* Write Loop Field Mask	   */ +#define MxMR_WLFx_1X		0x00000400 /*	executed 1 time		   */ +#define MxMR_WLFx_2X		0x00000800 /*	executed 2 times	   */ +#define MxMR_WLFx_3X		0x00000c00 /*	executed 3 times	   */ +#define MxMR_WLFx_4X		0x00001000 /*	executed 4 times	   */ +#define MxMR_WLFx_5X		0x00001400 /*	executed 5 times	   */ +#define MxMR_WLFx_6X		0x00001800 /*	executed 6 times	   */ +#define MxMR_WLFx_7X		0x00001c00 /*	executed 7 times	   */ +#define MxMR_WLFx_8X		0x00002000 /*	executed 8 times	   */ +#define MxMR_WLFx_9X		0x00002400 /*	executed 9 times	   */ +#define MxMR_WLFx_10X		0x00002800 /*	executed 10 times	   */ +#define MxMR_WLFx_11X		0x00002c00 /*	executed 11 times	   */ +#define MxMR_WLFx_12X		0x00003000 /*	executed 12 times	   */ +#define MxMR_WLFx_13X		0x00003400 /*	executed 13 times	   */ +#define MxMR_WLFx_14X		0x00003800 /*	executed 14 times	   */ +#define MxMR_WLFx_15X		0x00003c00 /*	executed 15 times	   */ +#define MxMR_WLFx_16X		0x00000000 /*	executed 16 times	   */ +#define MxMR_RLFx_MSK		0x0003c000 /* Read Loop Field Mask	   */ +#define MxMR_GPL_x4DIS		0x00040000 /* GPL_A4 Ouput Line Disable	   */ +#define MxMR_G0CLx_MSK		0x00380000 /* General Line 0 Control Mask  */ +#define MxMR_DSx_1_CYCL		0x00000000 /* 1 cycle Disable Period	   */ +#define MxMR_DSx_2_CYCL		0x00400000 /* 2 cycle Disable Period	   */ +#define MxMR_DSx_3_CYCL		0x00800000 /* 3 cycle Disable Period	   */ +#define MxMR_DSx_4_CYCL		0x00c00000 /* 4 cycle Disable Period	   */ +#define MxMR_DSx_MSK		0x00c00000 /* Disable Timer Period Mask	   */ +#define MxMR_AMx_MSK		0x07000000 /* Addess Multiplex Size Mask   */ +#define MxMR_UWPL		0x08000000 /* LUPWAIT Polarity Mask	   */ +#define MxMR_OP_NORM		0x00000000 /* Normal Operation		   */ +#define MxMR_OP_WARR		0x10000000 /* Write to Array		   */ +#define MxMR_OP_RARR		0x20000000 /* Read from Array		   */ +#define MxMR_OP_RUNP		0x30000000 /* Run Pattern		   */ +#define MxMR_OP_MSK		0x30000000 /* Command Opcode Mask	   */ +#define MxMR_RFEN		0x40000000 /* Refresh Enable		   */ +#define MxMR_BSEL		0x80000000 /* Bus Select		   */ + +#define LBLAWAR_EN			0x80000000 +#define LBLAWAR_4KB			0x0000000B +#define LBLAWAR_8KB			0x0000000C +#define LBLAWAR_16KB			0x0000000D +#define LBLAWAR_32KB			0x0000000E +#define LBLAWAR_64KB			0x0000000F +#define LBLAWAR_128KB			0x00000010 +#define LBLAWAR_256KB			0x00000011 +#define LBLAWAR_512KB			0x00000012 +#define LBLAWAR_1MB			0x00000013 +#define LBLAWAR_2MB			0x00000014 +#define LBLAWAR_4MB			0x00000015 +#define LBLAWAR_8MB			0x00000016 +#define LBLAWAR_16MB			0x00000017 +#define LBLAWAR_32MB			0x00000018 +#define LBLAWAR_64MB			0x00000019 +#define LBLAWAR_128MB			0x0000001A +#define LBLAWAR_256MB			0x0000001B +#define LBLAWAR_512MB			0x0000001C +#define LBLAWAR_1GB			0x0000001D +#define LBLAWAR_2GB			0x0000001E + +/* LBCR - Local Bus Configuration Register + */ +#define LBCR_LDIS			0x80000000 +#define LBCR_LDIS_SHIFT			31 +#define LBCR_BCTLC			0x00C00000 +#define LBCR_BCTLC_SHIFT		22 +#define LBCR_LPBSE			0x00020000 +#define LBCR_LPBSE_SHIFT		17 +#define LBCR_EPAR			0x00010000 +#define LBCR_EPAR_SHIFT			16 +#define LBCR_BMT			0x0000FF00 +#define LBCR_BMT_SHIFT			8 +#define LBCR_BMTPS	 		0x0000000F +#define LBCR_BMTPS_SHIFT 		0 + +/* LCRR - Clock Ratio Register + */ +#define LCRR_DBYP			0x80000000 +#define LCRR_DBYP_SHIFT			31 +#define LCRR_BUFCMDC			0x30000000 +#define LCRR_BUFCMDC_SHIFT		28 +#define LCRR_BUFCMDC_1			0x10000000 +#define LCRR_BUFCMDC_2			0x20000000 +#define LCRR_BUFCMDC_3			0x30000000 +#define LCRR_BUFCMDC_4			0x00000000 +#define LCRR_ECL			0x03000000 +#define LCRR_ECL_SHIFT			24 +#define LCRR_ECL_4			0x00000000 +#define LCRR_ECL_5			0x01000000 +#define LCRR_ECL_6			0x02000000 +#define LCRR_ECL_7			0x03000000 +#define LCRR_EADC			0x00030000 +#define LCRR_EADC_SHIFT			16 +#define LCRR_EADC_1			0x00010000 +#define LCRR_EADC_2			0x00020000 +#define LCRR_EADC_3			0x00030000 +#define LCRR_EADC_4			0x00000000 +/* CLKDIV is five bits only on 8536, 8572, and 8610, so far, but the fifth bit + * should always be zero on older parts that have a four bit CLKDIV. + */ +#define LCRR_CLKDIV			0x0000001F +#define LCRR_CLKDIV_SHIFT		0 +#if defined(CONFIG_MPC83xx) || defined (CONFIG_MPC8540) || \ +    defined(CONFIG_MPC8541) || defined (CONFIG_MPC8555) || \ +    defined(CONFIG_MPC8560) +#define LCRR_CLKDIV_2			0x00000002 +#define LCRR_CLKDIV_4			0x00000004 +#define LCRR_CLKDIV_8			0x00000008 +#elif defined(CONFIG_FSL_CORENET) +#define LCRR_CLKDIV_8			0x00000002 +#define LCRR_CLKDIV_16			0x00000004 +#define LCRR_CLKDIV_32			0x00000008 +#else +#define LCRR_CLKDIV_4			0x00000002 +#define LCRR_CLKDIV_8			0x00000004 +#define LCRR_CLKDIV_16			0x00000008 +#endif + +/* LTEDR - Transfer Error Check Disable Register + */ +#define LTEDR_BMD	0x80000000 /* Bus monitor disable				*/ +#define LTEDR_PARD	0x20000000 /* Parity error checking disabled			*/ +#define LTEDR_WPD	0x04000000 /* Write protect error checking diable		*/ +#define LTEDR_WARA	0x00800000 /* Write-after-read-atomic error checking diable	*/ +#define LTEDR_RAWA	0x00400000 /* Read-after-write-atomic error checking disable	*/ +#define LTEDR_CSD	0x00080000 /* Chip select error checking disable		*/ + +/* FMR - Flash Mode Register + */ +#define FMR_CWTO               0x0000F000 +#define FMR_CWTO_SHIFT         12 +#define FMR_BOOT               0x00000800 +#define FMR_ECCM               0x00000100 +#define FMR_AL                 0x00000030 +#define FMR_AL_SHIFT           4 +#define FMR_OP                 0x00000003 +#define FMR_OP_SHIFT           0 + +/* FIR - Flash Instruction Register + */ +#define FIR_OP0                        0xF0000000 +#define FIR_OP0_SHIFT          28 +#define FIR_OP1                        0x0F000000 +#define FIR_OP1_SHIFT          24 +#define FIR_OP2                        0x00F00000 +#define FIR_OP2_SHIFT          20 +#define FIR_OP3                        0x000F0000 +#define FIR_OP3_SHIFT          16 +#define FIR_OP4                        0x0000F000 +#define FIR_OP4_SHIFT          12 +#define FIR_OP5                        0x00000F00 +#define FIR_OP5_SHIFT          8 +#define FIR_OP6                        0x000000F0 +#define FIR_OP6_SHIFT          4 +#define FIR_OP7                        0x0000000F +#define FIR_OP7_SHIFT          0 +#define FIR_OP_NOP             0x0 /* No operation and end of sequence */ +#define FIR_OP_CA              0x1 /* Issue current column address */ +#define FIR_OP_PA              0x2 /* Issue current block+page address */ +#define FIR_OP_UA              0x3 /* Issue user defined address */ +#define FIR_OP_CM0             0x4 /* Issue command from FCR[CMD0] */ +#define FIR_OP_CM1             0x5 /* Issue command from FCR[CMD1] */ +#define FIR_OP_CM2             0x6 /* Issue command from FCR[CMD2] */ +#define FIR_OP_CM3             0x7 /* Issue command from FCR[CMD3] */ +#define FIR_OP_WB              0x8 /* Write FBCR bytes from FCM buffer */ +#define FIR_OP_WS              0x9 /* Write 1 or 2 bytes from MDR[AS] */ +#define FIR_OP_RB              0xA /* Read FBCR bytes to FCM buffer */ +#define FIR_OP_RS              0xB /* Read 1 or 2 bytes to MDR[AS] */ +#define FIR_OP_CW0             0xC /* Wait then issue FCR[CMD0] */ +#define FIR_OP_CW1             0xD /* Wait then issue FCR[CMD1] */ +#define FIR_OP_RBW             0xE /* Wait then read FBCR bytes */ +#define FIR_OP_RSW             0xF /* Wait then read 1 or 2 bytes */ + +/* FCR - Flash Command Register + */ +#define FCR_CMD0               0xFF000000 +#define FCR_CMD0_SHIFT         24 +#define FCR_CMD1               0x00FF0000 +#define FCR_CMD1_SHIFT         16 +#define FCR_CMD2               0x0000FF00 +#define FCR_CMD2_SHIFT         8 +#define FCR_CMD3               0x000000FF +#define FCR_CMD3_SHIFT         0 +/* FBAR - Flash Block Address Register + */ +#define FBAR_BLK               0x00FFFFFF + +/* FPAR - Flash Page Address Register + */ +#define FPAR_SP_PI             0x00007C00 +#define FPAR_SP_PI_SHIFT       10 +#define FPAR_SP_MS             0x00000200 +#define FPAR_SP_CI             0x000001FF +#define FPAR_SP_CI_SHIFT       0 +#define FPAR_LP_PI             0x0003F000 +#define FPAR_LP_PI_SHIFT       12 +#define FPAR_LP_MS             0x00000800 +#define FPAR_LP_CI             0x000007FF +#define FPAR_LP_CI_SHIFT       0 + +/* LSDMR - SDRAM Machine Mode Register + */ +#define LSDMR_RFEN	(1 << (31 -  1)) +#define LSDMR_BSMA1516	(3 << (31 - 10)) +#define LSDMR_BSMA1617	(4 << (31 - 10)) +#define LSDMR_RFCR5	(3 << (31 - 16)) +#define LSDMR_RFCR16	(7 << (31 - 16)) +#define LSDMR_PRETOACT3 (3 << (31 - 19)) +#define LSDMR_PRETOACT7	(7 << (31 - 19)) +#define LSDMR_ACTTORW3	(3 << (31 - 22)) +#define LSDMR_ACTTORW7	(7 << (31 - 22)) +#define LSDMR_ACTTORW6	(6 << (31 - 22)) +#define LSDMR_BL8	(1 << (31 - 23)) +#define LSDMR_WRC2	(2 << (31 - 27)) +#define LSDMR_WRC4	(0 << (31 - 27)) +#define LSDMR_BUFCMD	(1 << (31 - 29)) +#define LSDMR_CL3	(3 << (31 - 31)) + +#define LSDMR_OP_NORMAL	(0 << (31 - 4)) +#define LSDMR_OP_ARFRSH	(1 << (31 - 4)) +#define LSDMR_OP_SRFRSH	(2 << (31 - 4)) +#define LSDMR_OP_MRW	(3 << (31 - 4)) +#define LSDMR_OP_PRECH	(4 << (31 - 4)) +#define LSDMR_OP_PCHALL	(5 << (31 - 4)) +#define LSDMR_OP_ACTBNK	(6 << (31 - 4)) +#define LSDMR_OP_RWINV	(7 << (31 - 4)) + +/* LTESR - Transfer Error Status Register + */ +#define LTESR_BM               0x80000000 +#define LTESR_FCT              0x40000000 +#define LTESR_PAR              0x20000000 +#define LTESR_WP               0x04000000 +#define LTESR_ATMW             0x00800000 +#define LTESR_ATMR             0x00400000 +#define LTESR_CS               0x00080000 +#define LTESR_CC               0x00000001 + +#ifndef __ASSEMBLY__ +#include <asm/io.h> + +extern void print_lbc_regs(void); +extern void init_early_memctl_regs(void); +extern void upmconfig(uint upm, uint *table, uint size); + +#define LBC_BASE_ADDR ((fsl_lbc_t *)CONFIG_SYS_LBC_ADDR) +#define get_lbc_lcrr() (in_be32(&(LBC_BASE_ADDR)->lcrr)) +#define get_lbc_lbcr() (in_be32(&(LBC_BASE_ADDR)->lbcr)) +#define get_lbc_br(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].br)) +#define get_lbc_or(i) (in_be32(&(LBC_BASE_ADDR)->bank[i].or)) +#define set_lbc_br(i, v) (out_be32(&(LBC_BASE_ADDR)->bank[i].br, v)) +#define set_lbc_or(i, v) (out_be32(&(LBC_BASE_ADDR)->bank[i].or, v)) + +typedef struct lbc_bank { +	u32     br; +	u32     or; +} lbc_bank_t; + +/* Local Bus Controller Registers */ +typedef struct fsl_lbc { +	lbc_bank_t      bank[8]; +	u8	res1[40]; +	u32     mar;            /* LBC UPM Addr */ +	u8      res2[4]; +	u32     mamr;           /* LBC UPMA Mode */ +	u32     mbmr;           /* LBC UPMB Mode */ +	u32     mcmr;           /* LBC UPMC Mode */ +	u8      res3[8]; +	u32     mrtpr;          /* LBC Memory Refresh Timer Prescaler */ +	u32     mdr;            /* LBC UPM Data */ +#ifdef CONFIG_FSL_ELBC +	u8      res4[4]; +	u32     lsor; +	u8      res5[12]; +	u32     lurt;           /* LBC UPM Refresh Timer */ +	u8	res6[4]; +#else +	u8	res4[8]; +	u32     lsdmr;          /* LBC SDRAM Mode */ +	u8	res5[8]; +	u32     lurt;           /* LBC UPM Refresh Timer */ +	u32     lsrt;           /* LBC SDRAM Refresh Timer */ +#endif +	u8      res7[8]; +	u32     ltesr;          /* LBC Transfer Error Status */ +	u32     ltedr;          /* LBC Transfer Error Disable */ +	u32     lteir;          /* LBC Transfer Error IRQ */ +	u32     lteatr;         /* LBC Transfer Error Attrs */ +	u32     ltear;          /* LBC Transfer Error Addr */ +	u8      res8[12]; +	u32     lbcr;           /* LBC Configuration */ +	u32     lcrr;           /* LBC Clock Ratio */ +#ifdef CONFIG_NAND_FSL_ELBC +	u8	res9[0x8]; +	u32     fmr;            /* Flash Mode Register */ +	u32     fir;            /* Flash Instruction Register */ +	u32     fcr;            /* Flash Command Register */ +	u32     fbar;           /* Flash Block Addr Register */ +	u32     fpar;           /* Flash Page Addr Register */ +	u32     fbcr;           /* Flash Byte Count Register */ +	u8      res10[0xF08]; +#else +	u8      res9[0xF28]; +#endif +} fsl_lbc_t; + +#endif /* __ASSEMBLY__ */ +#endif /* __ASM_PPC_FSL_LBC_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_liodn.h b/roms/u-boot/arch/powerpc/include/asm/fsl_liodn.h new file mode 100644 index 00000000..f658bcbc --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_liodn.h @@ -0,0 +1,202 @@ +/* + * Copyright 2009-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _FSL_LIODN_H_ +#define _FSL_LIODN_H_ + +#include <asm/types.h> + +struct srio_liodn_id_table { +	u32 id[2]; +	unsigned long reg_offset[2]; +	u8 num_ids; +	u8 portid; +}; +#define SET_SRIO_LIODN_1(port, idA) \ +	{ .id = { idA }, .num_ids = 1, .portid = port, \ +	  .reg_offset[0] = offsetof(ccsr_gur_t, rio##port##liodnr) \ +		+ CONFIG_SYS_MPC85xx_GUTS_OFFSET + CONFIG_SYS_CCSRBAR, \ +	} + +#define SET_SRIO_LIODN_2(port, idA, idB) \ +	{ .id = { idA, idB }, .num_ids = 2, .portid = port, \ +	  .reg_offset[0] = offsetof(ccsr_gur_t, rio##port##liodnr) \ +		+ CONFIG_SYS_MPC85xx_GUTS_OFFSET + CONFIG_SYS_CCSRBAR, \ +	  .reg_offset[1] = offsetof(ccsr_gur_t, rio##port##maintliodnr) \ +		+ CONFIG_SYS_MPC85xx_GUTS_OFFSET + CONFIG_SYS_CCSRBAR, \ +	} + +#define SET_SRIO_LIODN_BASE(port, id_a) \ +	{ .id = { id_a }, .num_ids = 1, .portid = port, \ +	  .reg_offset[0] = offsetof(struct ccsr_rio, liodn) \ +		+ (port - 1) * 0x200 \ +		+ CONFIG_SYS_FSL_SRIO_ADDR, \ +	} + +struct liodn_id_table { +	const char * compat; +	u32 id[2]; +	u8 num_ids; +	phys_addr_t compat_offset; +	unsigned long reg_offset; +}; + +extern u32 get_ppid_liodn(int ppid_tbl_idx, int ppid); +extern void set_liodns(void); +extern void fdt_fixup_liodn(void *blob); + +#define SET_LIODN_BASE_1(idA) \ +	{ .id = { idA }, .num_ids = 1, } + +#define SET_LIODN_BASE_2(idA, idB) \ +	{ .id = { idA, idB }, .num_ids = 2 } + +#define SET_LIODN_ENTRY_1(name, idA, off, compatoff) \ +	{ .compat = name, \ +	  .id = { idA }, .num_ids = 1, \ +	  .reg_offset = off + CONFIG_SYS_CCSRBAR, \ +	  .compat_offset = compatoff + CONFIG_SYS_CCSRBAR_PHYS, \ +	} + +#define SET_LIODN_ENTRY_2(name, idA, idB, off, compatoff) \ +	{ .compat = name, \ +	  .id = { idA, idB }, .num_ids = 2, \ +	  .reg_offset = off + CONFIG_SYS_CCSRBAR, \ +	  .compat_offset = compatoff + CONFIG_SYS_CCSRBAR_PHYS, \ +	} + +#define SET_GUTS_LIODN(compat, liodn, name, compatoff) \ +	SET_LIODN_ENTRY_1(compat, liodn, \ +		offsetof(ccsr_gur_t, name) + CONFIG_SYS_MPC85xx_GUTS_OFFSET, \ +		compatoff) + +#define SET_USB_LIODN(usbNum, compat, liodn) \ +	SET_GUTS_LIODN(compat, liodn, usb##usbNum##liodnr,\ +		CONFIG_SYS_MPC85xx_USB##usbNum##_OFFSET) + +#define SET_SATA_LIODN(sataNum, liodn) \ +	SET_GUTS_LIODN("fsl,pq-sata-v2", liodn, sata##sataNum##liodnr,\ +		CONFIG_SYS_MPC85xx_SATA##sataNum##_OFFSET) + +#define SET_PCI_LIODN(compat, pciNum, liodn) \ +	SET_GUTS_LIODN(compat, liodn, pex##pciNum##liodnr,\ +		CONFIG_SYS_MPC85xx_PCIE##pciNum##_OFFSET) + +#define SET_PCI_LIODN_BASE(compat, pciNum, liodn) \ +	SET_LIODN_ENTRY_1(compat, liodn,\ +		offsetof(ccsr_pcix_t, liodn_base) + CONFIG_SYS_MPC85xx_PCIE##pciNum##_OFFSET,\ +		CONFIG_SYS_MPC85xx_PCIE##pciNum##_OFFSET) + +/* reg nodes for DMA start @ 0x300 */ +#define SET_DMA_LIODN(dmaNum, liodn) \ +	SET_GUTS_LIODN("fsl,eloplus-dma", liodn, dma##dmaNum##liodnr,\ +		CONFIG_SYS_MPC85xx_DMA##dmaNum##_OFFSET + 0x300) + +#define SET_SDHC_LIODN(sdhcNum, liodn) \ +	SET_GUTS_LIODN("fsl,esdhc", liodn, sdmmc##sdhcNum##liodnr,\ +		CONFIG_SYS_MPC85xx_ESDHC_OFFSET) + +#define SET_QE_LIODN(liodn) \ +	SET_GUTS_LIODN("fsl,qe", liodn, qeliodnr,\ +		CONFIG_SYS_MPC85xx_QE_OFFSET) + +#define SET_QMAN_LIODN(liodn) \ +	SET_LIODN_ENTRY_1("fsl,qman", liodn, offsetof(ccsr_qman_t, liodnr) + \ +		CONFIG_SYS_FSL_QMAN_OFFSET, \ +		CONFIG_SYS_FSL_QMAN_OFFSET) + +#define SET_BMAN_LIODN(liodn) \ +	SET_LIODN_ENTRY_1("fsl,bman", liodn, offsetof(ccsr_bman_t, liodnr) + \ +		CONFIG_SYS_FSL_BMAN_OFFSET, \ +		CONFIG_SYS_FSL_BMAN_OFFSET) + +#define SET_PME_LIODN(liodn) \ +	SET_LIODN_ENTRY_1("fsl,pme", liodn, offsetof(ccsr_pme_t, liodnr) + \ +		CONFIG_SYS_FSL_CORENET_PME_OFFSET, \ +		CONFIG_SYS_FSL_CORENET_PME_OFFSET) + +#define SET_PMAN_LIODN(num, liodn) \ +	SET_LIODN_ENTRY_2("fsl,pman", liodn, 0, \ +		offsetof(struct ccsr_pman, ppa1) + \ +		CONFIG_SYS_FSL_CORENET_PMAN##num##_OFFSET, \ +		CONFIG_SYS_FSL_CORENET_PMAN##num##_OFFSET) + +/* -1 from portID due to how immap has the registers */ +#define FM_PPID_RX_PORT_OFFSET(fmNum, portID) \ +	CONFIG_SYS_FSL_FM##fmNum##_OFFSET + \ +	offsetof(struct ccsr_fman, fm_bmi_common.fmbm_ppid[portID - 1]) + +/* enetNum is 0, 1, 2... so we + 8 for 1g to get to HW Port ID */ +#define SET_FMAN_RX_1G_LIODN(fmNum, enetNum, liodn) \ +	SET_LIODN_ENTRY_1("fsl,fman-port-1g-rx", liodn, \ +		FM_PPID_RX_PORT_OFFSET(fmNum, enetNum + 8), \ +		CONFIG_SYS_FSL_FM##fmNum##_RX##enetNum##_1G_OFFSET) \ + +/* enetNum is 0, 1, 2... so we + 16 for 10g to get to HW Port ID */ +#define SET_FMAN_RX_10G_LIODN(fmNum, enetNum, liodn) \ +	SET_LIODN_ENTRY_1("fsl,fman-port-10g-rx", liodn, \ +		FM_PPID_RX_PORT_OFFSET(fmNum, enetNum + 16), \ +		CONFIG_SYS_FSL_FM##fmNum##_RX##enetNum##_10G_OFFSET) \ + +/* + * handle both old and new versioned SEC properties: + * "fsl,secX.Y" became "fsl,sec-vX.Y" during development + */ +#define SET_SEC_JR_LIODN_ENTRY(jrNum, liodnA, liodnB) \ +	SET_LIODN_ENTRY_2("fsl,sec4.0-job-ring", liodnA, liodnB,\ +		offsetof(ccsr_sec_t, jrliodnr[jrNum].ls) + \ +		CONFIG_SYS_FSL_SEC_OFFSET, \ +		CONFIG_SYS_FSL_SEC_OFFSET + 0x1000 + 0x1000 * jrNum), \ +	SET_LIODN_ENTRY_2("fsl,sec-v4.0-job-ring", liodnA, liodnB,\ +		offsetof(ccsr_sec_t, jrliodnr[jrNum].ls) + \ +		CONFIG_SYS_FSL_SEC_OFFSET, \ +		CONFIG_SYS_FSL_SEC_OFFSET + 0x1000 + 0x1000 * jrNum) + +/* This is a bit evil since we treat rtic param as both a string & hex value */ +#define SET_SEC_RTIC_LIODN_ENTRY(rtic, liodnA) \ +	SET_LIODN_ENTRY_1("fsl,sec4.0-rtic-memory", \ +		liodnA,	\ +		offsetof(ccsr_sec_t, rticliodnr[0x##rtic-0xa].ls) + \ +		CONFIG_SYS_FSL_SEC_OFFSET, \ +		CONFIG_SYS_FSL_SEC_OFFSET + 0x6100 + 0x20 * (0x##rtic-0xa)), \ +	SET_LIODN_ENTRY_1("fsl,sec-v4.0-rtic-memory", \ +		liodnA,	\ +		offsetof(ccsr_sec_t, rticliodnr[0x##rtic-0xa].ls) + \ +		CONFIG_SYS_FSL_SEC_OFFSET, \ +		CONFIG_SYS_FSL_SEC_OFFSET + 0x6100 + 0x20 * (0x##rtic-0xa)) + +#define SET_SEC_DECO_LIODN_ENTRY(num, liodnA, liodnB) \ +	SET_LIODN_ENTRY_2(NULL, liodnA, liodnB, \ +		offsetof(ccsr_sec_t, decoliodnr[num].ls) + \ +		CONFIG_SYS_FSL_SEC_OFFSET, 0) + +#define SET_RAID_ENGINE_JQ_LIODN_ENTRY(jqNum, rNum, liodnA) \ +	SET_LIODN_ENTRY_1("fsl,raideng-v1.0-job-ring", \ +	liodnA, \ +	offsetof(struct ccsr_raide, jq[jqNum].ring[rNum].cfg1) + \ +	CONFIG_SYS_FSL_RAID_ENGINE_OFFSET, \ +	offsetof(struct ccsr_raide, jq[jqNum].ring[rNum].cfg0) + \ +	CONFIG_SYS_FSL_RAID_ENGINE_OFFSET) + +#define SET_RMAN_LIODN(ibNum, liodn) \ +	SET_LIODN_ENTRY_1("fsl,rman-inbound-block", liodn, \ +		offsetof(struct ccsr_rman, mmitdr) + \ +		CONFIG_SYS_FSL_CORENET_RMAN_OFFSET, \ +		CONFIG_SYS_FSL_CORENET_RMAN_OFFSET + ibNum * 0x1000) + +extern struct liodn_id_table liodn_tbl[], liodn_bases[], sec_liodn_tbl[]; +extern struct liodn_id_table raide_liodn_tbl[]; +extern struct liodn_id_table fman1_liodn_tbl[], fman2_liodn_tbl[]; +#ifdef CONFIG_SYS_SRIO +extern struct srio_liodn_id_table srio_liodn_tbl[]; +extern int srio_liodn_tbl_sz; +#endif +extern struct liodn_id_table rman_liodn_tbl[]; +extern int liodn_tbl_sz, sec_liodn_tbl_sz, raide_liodn_tbl_sz; +extern int fman1_liodn_tbl_sz, fman2_liodn_tbl_sz; +extern int rman_liodn_tbl_sz; + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_memac.h b/roms/u-boot/arch/powerpc/include/asm/fsl_memac.h new file mode 100644 index 00000000..4640e33a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_memac.h @@ -0,0 +1,262 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + *	Roy Zang <tie-fei.zang@freescale.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __MEMAC_H__ +#define __MEMAC_H__ + +#include <phy.h> + +struct memac { +	/* memac general control and status registers */ +	u32	res_0[2]; +	u32	command_config;	/* Control and configuration register */ +	u32	mac_addr_0;	/* Lower 32 bits of 48-bit MAC address */ +	u32	mac_addr_1;	/* Upper 16 bits of 48-bit MAC address */ +	u32	maxfrm;		/* Maximum frame length register */ +	u32	res_18[5]; +	u32	hashtable_ctrl;	/* Hash table control register */ +	u32	res_30[4]; +	u32	ievent;		/* Interrupt event register */ +	u32	tx_ipg_length;	/* Transmitter inter-packet-gap register */ +	u32	res_48; +	u32	imask;		/* interrupt mask register */ +	u32	res_50; +	u32	cl_pause_quanta[4]; /* CL01-CL67 pause quanta register */ +	u32	cl_pause_thresh[4]; /* CL01-CL67 pause thresh register */ +	u32	rx_pause_status;	/* Receive pause status register */ +	u32	res_78[2]; +	u32	mac_addr[14];	/* MAC address */ +	u32	lpwake_timer;	/* EEE low power wakeup timer register */ +	u32	sleep_timer;	/* Transmit EEE Low Power Timer register */ +	u32	res_c0[8]; +	u32	statn_config;	/* Statistics configuration register */ +	u32	res_e4[7]; + +	/* memac statistics counter registers */ +	u32	rx_eoct_l;	/* Rx ethernet octests lower */ +	u32	rx_eoct_u;	/* Rx ethernet octests upper */ +	u32	rx_oct_l;	/* Rx octests lower */ +	u32	rx_oct_u;	/* Rx octests upper */ +	u32	rx_align_err_l;	/* Rx alignment error lower */ +	u32	rx_align_err_u;	/* Rx alignment error upper */ +	u32	rx_pause_frame_l; /* Rx valid pause frame upper */ +	u32	rx_pause_frame_u; /* Rx valid pause frame upper */ +	u32	rx_frame_l;	/* Rx frame counter lower */ +	u32	rx_frame_u;	/* Rx frame counter upper */ +	u32	rx_frame_crc_err_l; /* Rx frame check sequence error lower */ +	u32	rx_frame_crc_err_u; /* Rx frame check sequence error upper */ +	u32	rx_vlan_l;	/* Rx VLAN frame lower */ +	u32	rx_vlan_u;	/* Rx VLAN frame upper */ +	u32	rx_err_l;	/* Rx frame error lower */ +	u32	rx_err_u;	/* Rx frame error upper */ +	u32	rx_uni_l;	/* Rx unicast frame lower */ +	u32	rx_uni_u;	/* Rx unicast frame upper */ +	u32	rx_multi_l;	/* Rx multicast frame lower */ +	u32	rx_multi_u;	/* Rx multicast frame upper */ +	u32	rx_brd_l;	/* Rx broadcast frame lower */ +	u32	rx_brd_u;	/* Rx broadcast frame upper */ +	u32	rx_drop_l;	/* Rx dropped packets lower */ +	u32	rx_drop_u;	/* Rx dropped packets upper */ +	u32	rx_pkt_l;	/* Rx packets lower */ +	u32	rx_pkt_u;	/* Rx packets upper */ +	u32	rx_undsz_l;	/* Rx undersized packet lower */ +	u32	rx_undsz_u;	/* Rx undersized packet upper */ +	u32	rx_64_l;	/* Rx 64 oct packet lower */ +	u32	rx_64_u;	/* Rx 64 oct packet upper */ +	u32	rx_127_l;	/* Rx 65 to 127 oct packet lower */ +	u32	rx_127_u;	/* Rx 65 to 127 oct packet upper */ +	u32	rx_255_l;	/* Rx 128 to 255 oct packet lower */ +	u32	rx_255_u;	/* Rx 128 to 255 oct packet upper */ +	u32	rx_511_l;	/* Rx 256 to 511 oct packet lower */ +	u32	rx_511_u;	/* Rx 256 to 511 oct packet upper */ +	u32	rx_1023_l;	/* Rx 512 to 1023 oct packet lower */ +	u32	rx_1023_u;	/* Rx 512 to 1023 oct packet upper */ +	u32	rx_1518_l;	/* Rx 1024 to 1518 oct packet lower */ +	u32	rx_1518_u;	/* Rx 1024 to 1518 oct packet upper */ +	u32	rx_1519_l;	/* Rx 1519 to max oct packet lower */ +	u32	rx_1519_u;	/* Rx 1519 to max oct packet upper */ +	u32	rx_oversz_l;	/* Rx oversized packet lower */ +	u32	rx_oversz_u;	/* Rx oversized packet upper */ +	u32	rx_jabber_l;	/* Rx Jabber packet lower */ +	u32	rx_jabber_u;	/* Rx Jabber packet upper */ +	u32	rx_frag_l;	/* Rx Fragment packet lower */ +	u32	rx_frag_u;	/* Rx Fragment packet upper */ +	u32	rx_cnp_l;	/* Rx control packet lower */ +	u32	rx_cnp_u;	/* Rx control packet upper */ +	u32	rx_drntp_l;	/* Rx dripped not truncated packet lower */ +	u32	rx_drntp_u;	/* Rx dripped not truncated packet upper */ +	u32	res_1d0[0xc]; + +	u32	tx_eoct_l;	/* Tx ethernet octests lower */ +	u32	tx_eoct_u;	/* Tx ethernet octests upper */ +	u32	tx_oct_l;	/* Tx octests lower */ +	u32	tx_oct_u;	/* Tx octests upper */ +	u32	res_210[0x2]; +	u32	tx_pause_frame_l; /* Tx valid pause frame lower */ +	u32	tx_pause_frame_u; /* Tx valid pause frame upper */ +	u32	tx_frame_l;	/* Tx frame counter lower */ +	u32	tx_frame_u;	/* Tx frame counter upper */ +	u32	tx_frame_crc_err_l; /* Tx frame check sequence error lower */ +	u32	tx_frame_crc_err_u; /* Tx frame check sequence error upper */ +	u32	tx_vlan_l;	/* Tx VLAN frame lower */ +	u32	tx_vlan_u;	/* Tx VLAN frame upper */ +	u32	tx_frame_err_l;	/* Tx frame error lower */ +	u32	tx_frame_err_u;	/* Tx frame error upper */ +	u32	tx_uni_l;	/* Tx unicast frame lower */ +	u32	tx_uni_u;	/* Tx unicast frame upper */ +	u32	tx_multi_l;	/* Tx multicast frame lower */ +	u32	tx_multi_u;	/* Tx multicast frame upper */ +	u32	tx_brd_l;	/* Tx broadcast frame lower */ +	u32	tx_brd_u;	/* Tx broadcast frame upper */ +	u32	res_258[0x2]; +	u32	tx_pkt_l;	/* Tx packets lower */ +	u32	tx_pkt_u;	/* Tx packets upper */ +	u32	tx_undsz_l;	/* Tx undersized packet lower */ +	u32	tx_undsz_u;	/* Tx undersized packet upper */ +	u32	tx_64_l;	/* Tx 64 oct packet lower */ +	u32	tx_64_u;	/* Tx 64 oct packet upper */ +	u32	tx_127_l;	/* Tx 65 to 127 oct packet lower */ +	u32	tx_127_u;	/* Tx 65 to 127 oct packet upper */ +	u32	tx_255_l;	/* Tx 128 to 255 oct packet lower */ +	u32	tx_255_u;	/* Tx 128 to 255 oct packet upper */ +	u32	tx_511_l;	/* Tx 256 to 511 oct packet lower */ +	u32	tx_511_u;	/* Tx 256 to 511 oct packet upper */ +	u32	tx_1023_l;	/* Tx 512 to 1023 oct packet lower */ +	u32	tx_1023_u;	/* Tx 512 to 1023 oct packet upper */ +	u32	tx_1518_l;	/* Tx 1024 to 1518 oct packet lower */ +	u32	tx_1518_u;	/* Tx 1024 to 1518 oct packet upper */ +	u32	tx_1519_l;	/* Tx 1519 to max oct packet lower */ +	u32	tx_1519_u;	/* Tx 1519 to max oct packet upper */ +	u32	res_2a8[0x6]; +	u32	tx_cnp_l;	/* Tx control packet lower */ +	u32	tx_cnp_u;	/* Tx control packet upper */ +	u32	res_2c8[0xe]; + +	/* Line interface control register */ +	u32 if_mode;		/* interface mode control */ +	u32 if_status;		/* interface status */ +	u32 res_308[0xe]; + +	/* HiGig/2 Register */ +	u32 hg_config;	/* HiGig2 control and configuration */ +	u32 res_344[0x3]; +	u32 hg_pause_quanta;	/* HiGig2 pause quanta */ +	u32 res_354[0x3]; +	u32 hg_pause_thresh;	/* HiGig2 pause quanta threshold */ +	u32 res_364[0x3]; +	u32 hgrx_pause_status;	/* HiGig2 rx pause quanta status */ +	u32 hg_fifos_status;	/* HiGig2 fifos status */ +	u32 rhm;	/* Rx HiGig2 message counter register */ +	u32 thm;/* Tx HiGig2 message counter register */ +	u32 res_380[0x320]; +}; + +/* COMMAND_CONFIG - command and configuration register */ +#define MEMAC_CMD_CFG_RX_EN		0x00000002 /* MAC Rx path enable */ +#define MEMAC_CMD_CFG_TX_EN		0x00000001 /* MAC Tx path enable */ +#define MEMAC_CMD_CFG_RXTX_EN	(MEMAC_CMD_CFG_RX_EN | MEMAC_CMD_CFG_TX_EN) + +/* HASHTABLE_CTRL - Hashtable control register */ +#define HASHTABLE_CTRL_MCAST_EN	0x00000200 /* enable mulitcast Rx hash */ +#define HASHTABLE_CTRL_ADDR_MASK	0x000001ff + +/* TX_IPG_LENGTH - Transmit inter-packet gap length register */ +#define TX_IPG_LENGTH_IPG_LEN_MASK	0x000003ff + +/* IMASK - interrupt mask register */ +#define IMASK_MDIO_SCAN_EVENT	0x00010000 /* MDIO scan event mask */ +#define IMASK_MDIO_CMD_CMPL	0x00008000 /* MDIO cmd completion mask */ +#define IMASK_REM_FAULT		0x00004000 /* remote fault mask */ +#define IMASK_LOC_FAULT		0x00002000 /* local fault mask */ +#define IMASK_TX_ECC_ER		0x00001000 /* Tx frame ECC error mask */ +#define IMASK_TX_FIFO_UNFL	0x00000800 /* Tx FIFO underflow mask */ +#define IMASK_TX_ER		0x00000200 /* Tx frame error mask */ +#define IMASK_RX_FIFO_OVFL	0x00000100 /* Rx FIFO overflow mask */ +#define IMASK_RX_ECC_ER		0x00000080 /* Rx frame ECC error mask */ +#define IMASK_RX_JAB_FRM	0x00000040 /* Rx jabber frame mask */ +#define IMASK_RX_OVRSZ_FRM	0x00000020 /* Rx oversized frame mask */ +#define IMASK_RX_RUNT_FRM	0x00000010 /* Rx runt frame mask */ +#define IMASK_RX_FRAG_FRM	0x00000008 /* Rx fragment frame mask */ +#define IMASK_RX_LEN_ER		0x00000004 /* Rx payload length error mask */ +#define IMASK_RX_CRC_ER		0x00000002 /* Rx CRC error mask */ +#define IMASK_RX_ALIGN_ER	0x00000001 /* Rx alignment error mask */ + +#define IMASK_MASK_ALL		0x00000000 + +/* IEVENT - interrupt event register */ +#define IEVENT_MDIO_SCAN_EVENT	0x00010000 /* MDIO scan event */ +#define IEVENT_MDIO_CMD_CMPL	0x00008000 /* MDIO cmd completion */ +#define IEVENT_REM_FAULT	0x00004000 /* remote fault */ +#define IEVENT_LOC_FAULT	0x00002000 /* local fault */ +#define IEVENT_TX_ECC_ER	0x00001000 /* Tx frame ECC error */ +#define IEVENT_TX_FIFO_UNFL	0x00000800 /* Tx FIFO underflow */ +#define IEVENT_TX_ER		0x00000200 /* Tx frame error */ +#define IEVENT_RX_FIFO_OVFL	0x00000100 /* Rx FIFO overflow */ +#define IEVENT_RX_ECC_ER	0x00000080 /* Rx frame ECC error */ +#define IEVENT_RX_JAB_FRM	0x00000040 /* Rx jabber frame */ +#define IEVENT_RX_OVRSZ_FRM	0x00000020 /* Rx oversized frame */ +#define IEVENT_RX_RUNT_FRM	0x00000010 /* Rx runt frame */ +#define IEVENT_RX_FRAG_FRM	0x00000008 /* Rx fragment frame */ +#define IEVENT_RX_LEN_ER	0x00000004 /* Rx payload length error */ +#define IEVENT_RX_CRC_ER	0x00000002 /* Rx CRC error */ +#define IEVENT_RX_ALIGN_ER	0x00000001 /* Rx alignment error */ + +#define IEVENT_CLEAR_ALL	0xffffffff + +/* IF_MODE - Interface Mode Register */ +#define IF_MODE_EN_AUTO	0x00008000 /* 1 - Enable automatic speed selection */ +#define IF_MODE_SETSP_100M	0x00000000 /* 00 - 100Mbps RGMII */ +#define IF_MODE_SETSP_10M	0x00002000 /* 01 - 10Mbps RGMII */ +#define IF_MODE_SETSP_1000M	0x00004000 /* 10 - 1000Mbps RGMII */ +#define IF_MODE_SETSP_MASK	0x00006000 /* setsp mask bits */ +#define IF_MODE_XGMII	0x00000000 /* 00- XGMII(10) interface mode */ +#define IF_MODE_GMII		0x00000002 /* 10- GMII interface mode */ +#define IF_MODE_MASK	0x00000003 /* mask for mode interface mode */ +#define IF_MODE_RG		0x00000004 /* 1- RGMII */ +#define IF_MODE_RM		0x00000008 /* 1- RGMII */ + +#define IF_DEFAULT	(IF_GMII) + +/* Internal PHY Registers - SGMII */ +#define PHY_SGMII_CR_PHY_RESET      0x8000 +#define PHY_SGMII_CR_RESET_AN       0x0200 +#define PHY_SGMII_CR_DEF_VAL        0x1140 +#define PHY_SGMII_DEV_ABILITY_SGMII 0x4001 +#define PHY_SGMII_IF_MODE_AN        0x0002 +#define PHY_SGMII_IF_MODE_SGMII     0x0001 + +struct memac_mdio_controller { +	u32	res0[0xc]; +	u32	mdio_stat;	/* MDIO configuration and status */ +	u32	mdio_ctl;	/* MDIO control */ +	u32	mdio_data;	/* MDIO data */ +	u32	mdio_addr;	/* MDIO address */ +}; + +#define MDIO_STAT_CLKDIV(x)	(((x>>1) & 0xff) << 8) +#define MDIO_STAT_BSY		(1 << 0) +#define MDIO_STAT_RD_ER		(1 << 1) +#define MDIO_STAT_PRE		(1 << 5) +#define MDIO_STAT_ENC		(1 << 6) +#define MDIO_STAT_HOLD_15_CLK	(7 << 2) + +#define MDIO_CTL_DEV_ADDR(x)	(x & 0x1f) +#define MDIO_CTL_PORT_ADDR(x)	((x & 0x1f) << 5) +#define MDIO_CTL_PRE_DIS	(1 << 10) +#define MDIO_CTL_SCAN_EN	(1 << 11) +#define MDIO_CTL_POST_INC	(1 << 14) +#define MDIO_CTL_READ		(1 << 15) + +#define MDIO_DATA(x)		(x & 0xffff) +#define MDIO_DATA_BSY		(1 << 31) + +struct fsl_enet_mac; + +void init_memac(struct fsl_enet_mac *mac, void *base, void *phyregs, +		int max_rx_len); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_mpc83xx_serdes.h b/roms/u-boot/arch/powerpc/include/asm/fsl_mpc83xx_serdes.h new file mode 100644 index 00000000..5a06a095 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_mpc83xx_serdes.h @@ -0,0 +1,23 @@ +/* + * Copyright 2010 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __FSL_MPC83XX_SERDES_H +#define __FSL_MPC83XX_SERDES_H + +#include <config.h> + +#define FSL_SERDES_CLK_100		(0 << 28) +#define FSL_SERDES_CLK_125		(1 << 28) +#define FSL_SERDES_CLK_150		(3 << 28) +#define FSL_SERDES_PROTO_SATA		0 +#define FSL_SERDES_PROTO_PEX		1 +#define FSL_SERDES_PROTO_PEX_X2		2 +#define FSL_SERDES_PROTO_SGMII		3 +#define FSL_SERDES_VDD_1V		1 + +extern void fsl_setup_serdes(u32 offset, char proto, u32 rfcks, char vdd); + +#endif /* __FSL_MPC83XX_SERDES_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_pci.h b/roms/u-boot/arch/powerpc/include/asm/fsl_pci.h new file mode 100644 index 00000000..5be718b1 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_pci.h @@ -0,0 +1,271 @@ +/* + * Copyright 2007,2009-2012 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __FSL_PCI_H_ +#define __FSL_PCI_H_ + +#include <asm/fsl_law.h> +#include <asm/fsl_serdes.h> +#include <pci.h> + +#define PEX_IP_BLK_REV_2_2	0x02080202 +#define PEX_IP_BLK_REV_2_3	0x02080203 +#define PEX_IP_BLK_REV_3_0	0x02080300 + +/* Freescale-specific PCI config registers */ +#define FSL_PCI_PBFR		0x44 + +#define FSL_PCIE_CFG_RDY	0x4b0 +#define FSL_PROG_IF_AGENT	0x1 + +#define PCI_LTSSM	0x404   /* PCIe Link Training, Status State Machine */ +#define  PCI_LTSSM_L0	0x16    /* L0 state */ + +int fsl_setup_hose(struct pci_controller *hose, unsigned long addr); +int fsl_is_pci_agent(struct pci_controller *hose); +void fsl_pci_config_unlock(struct pci_controller *hose); +void ft_fsl_pci_setup(void *blob, const char *compat, unsigned long ctrl_addr); + +/* + * Common PCI/PCIE Register structure for mpc85xx and mpc86xx + */ + +/* + * PCI Translation Registers + */ +typedef struct pci_outbound_window { +	u32	potar;		/* 0x00 - Address */ +	u32	potear;		/* 0x04 - Address Extended */ +	u32	powbar;		/* 0x08 - Window Base Address */ +	u32	res1; +	u32	powar;		/* 0x10 - Window Attributes */ +#define POWAR_EN	0x80000000 +#define POWAR_IO_READ	0x00080000 +#define POWAR_MEM_READ	0x00040000 +#define POWAR_IO_WRITE	0x00008000 +#define POWAR_MEM_WRITE	0x00004000 +	u32	res2[3]; +} pot_t; + +typedef struct pci_inbound_window { +	u32	pitar;		/* 0x00 - Address */ +	u32	res1; +	u32	piwbar;		/* 0x08 - Window Base Address */ +	u32	piwbear;	/* 0x0c - Window Base Address Extended */ +	u32	piwar;		/* 0x10 - Window Attributes */ +#define PIWAR_EN		0x80000000 +#define PIWAR_PF		0x20000000 +#define PIWAR_LOCAL		0x00f00000 +#define PIWAR_READ_SNOOP	0x00050000 +#define PIWAR_WRITE_SNOOP	0x00005000 +	u32	res2[3]; +} pit_t; + +/* PCI/PCI Express Registers */ +typedef struct ccsr_pci { +	u32	cfg_addr;	/* 0x000 - PCI Configuration Address Register */ +	u32	cfg_data;	/* 0x004 - PCI Configuration Data Register */ +	u32	int_ack;	/* 0x008 - PCI Interrupt Acknowledge Register */ +	u32	out_comp_to;	/* 0x00C - PCI Outbound Completion Timeout Register */ +	u32	out_conf_to;	/* 0x010 - PCI Configuration Timeout Register */ +	u32	config;		/* 0x014 - PCIE CONFIG Register */ +	u32	int_status;	/* 0x018 - PCIE interrupt status register */ +	char	res2[4]; +	u32	pme_msg_det;	/* 0x020 - PCIE PME & message detect register */ +	u32	pme_msg_dis;	/* 0x024 - PCIE PME & message disable register */ +	u32	pme_msg_int_en;	/* 0x028 - PCIE PME & message interrupt enable register */ +	u32	pm_command;	/* 0x02c - PCIE PM Command register */ +	char	res4[3016];	/*     (- #xbf8	 #x30)3016 */ +	u32	block_rev1;	/* 0xbf8 - PCIE Block Revision register 1 */ +	u32	block_rev2;	/* 0xbfc - PCIE Block Revision register 2 */ + +	pot_t	pot[5];		/* 0xc00 - 0xc9f Outbound ATMU's 0, 1, 2, 3, and 4 */ +	u32	res5[24]; +	pit_t	pmit;		/* 0xd00 - 0xd9c Inbound ATMU's MSI */ +	u32	res6[24]; +	pit_t	pit[4];		/* 0xd80 - 0xdff Inbound ATMU's 3, 2, 1 and 0 */ + +#define PIT3 0 +#define PIT2 1 +#define PIT1 2 + +#if 0 +	u32	potar0;		/* 0xc00 - PCI Outbound Transaction Address Register 0 */ +	u32	potear0;	/* 0xc04 - PCI Outbound Translation Extended Address Register 0 */ +	char	res5[8]; +	u32	powar0;		/* 0xc10 - PCI Outbound Window Attributes Register 0 */ +	char	res6[12]; +	u32	potar1;		/* 0xc20 - PCI Outbound Transaction Address Register 1 */ +	u32	potear1;	/* 0xc24 - PCI Outbound Translation Extended Address Register 1 */ +	u32	powbar1;	/* 0xc28 - PCI Outbound Window Base Address Register 1 */ +	char	res7[4]; +	u32	powar1;		/* 0xc30 - PCI Outbound Window Attributes Register 1 */ +	char	res8[12]; +	u32	potar2;		/* 0xc40 - PCI Outbound Transaction Address Register 2 */ +	u32	potear2;	/* 0xc44 - PCI Outbound Translation Extended Address Register 2 */ +	u32	powbar2;	/* 0xc48 - PCI Outbound Window Base Address Register 2 */ +	char	res9[4]; +	u32	powar2;		/* 0xc50 - PCI Outbound Window Attributes Register 2 */ +	char	res10[12]; +	u32	potar3;		/* 0xc60 - PCI Outbound Transaction Address Register 3 */ +	u32	potear3;	/* 0xc64 - PCI Outbound Translation Extended Address Register 3 */ +	u32	powbar3;	/* 0xc68 - PCI Outbound Window Base Address Register 3 */ +	char	res11[4]; +	u32	powar3;		/* 0xc70 - PCI Outbound Window Attributes Register 3 */ +	char	res12[12]; +	u32	potar4;		/* 0xc80 - PCI Outbound Transaction Address Register 4 */ +	u32	potear4;	/* 0xc84 - PCI Outbound Translation Extended Address Register 4 */ +	u32	powbar4;	/* 0xc88 - PCI Outbound Window Base Address Register 4 */ +	char	res13[4]; +	u32	powar4;		/* 0xc90 - PCI Outbound Window Attributes Register 4 */ +	char	res14[268]; +	u32	pitar3;		/* 0xda0 - PCI Inbound Translation Address Register 3 */ +	char	res15[4]; +	u32	piwbar3;	/* 0xda8 - PCI Inbound Window Base Address Register 3 */ +	u32	piwbear3;	/* 0xdac - PCI Inbound Window Base Extended Address Register 3 */ +	u32	piwar3;		/* 0xdb0 - PCI Inbound Window Attributes Register 3 */ +	char	res16[12]; +	u32	pitar2;		/* 0xdc0 - PCI Inbound Translation Address Register 2 */ +	char	res17[4]; +	u32	piwbar2;	/* 0xdc8 - PCI Inbound Window Base Address Register 2 */ +	u32	piwbear2;	/* 0xdcc - PCI Inbound Window Base Extended Address Register 2 */ +	u32	piwar2;		/* 0xdd0 - PCI Inbound Window Attributes Register 2 */ +	char	res18[12]; +	u32	pitar1;		/* 0xde0 - PCI Inbound Translation Address Register 1 */ +	char	res19[4]; +	u32	piwbar1;	/* 0xde8 - PCI Inbound Window Base Address Register 1 */ +	char	res20[4]; +	u32	piwar1;		/* 0xdf0 - PCI Inbound Window Attributes Register 1 */ +	char	res21[12]; +#endif +	u32	pedr;		/* 0xe00 - PCI Error Detect Register */ +	u32	pecdr;		/* 0xe04 - PCI Error Capture Disable Register */ +	u32	peer;		/* 0xe08 - PCI Error Interrupt Enable Register */ +	u32	peattrcr;	/* 0xe0c - PCI Error Attributes Capture Register */ +	u32	peaddrcr;	/* 0xe10 - PCI Error Address Capture Register */ +/*	u32	perr_disr	 * 0xe10 - PCIE Erorr Disable Register */ +	u32	peextaddrcr;	/* 0xe14 - PCI	Error Extended Address Capture Register */ +	u32	pedlcr;		/* 0xe18 - PCI Error Data Low Capture Register */ +	u32	pedhcr;		/* 0xe1c - PCI Error Error Data High Capture Register */ +	u32	gas_timr;	/* 0xe20 - PCI Gasket Timer Register */ +/*	u32	perr_cap_stat;	 * 0xe20 - PCIE Error Capture Status Register */ +	char	res22[4]; +	u32	perr_cap0;	/* 0xe28 - PCIE Error Capture Register 0 */ +	u32	perr_cap1;	/* 0xe2c - PCIE Error Capture Register 1 */ +	u32	perr_cap2;	/* 0xe30 - PCIE Error Capture Register 2 */ +	u32	perr_cap3;	/* 0xe34 - PCIE Error Capture Register 3 */ +	char	res23[200]; +	u32	pdb_stat;	/* 0xf00 - PCIE Debug Status */ +	char	res24[16]; +	u32	pex_csr0;	/* 0xf14 - PEX Control/Status register 0*/ +	u32	pex_csr1;	/* 0xf18 - PEX Control/Status register 1*/ +	char	res25[228]; +} ccsr_fsl_pci_t; +#define PCIE_CONFIG_PC	0x00020000 +#define PCIE_CONFIG_OB_CK	0x00002000 +#define PCIE_CONFIG_SAC	0x00000010 +#define PCIE_CONFIG_SP	0x80000002 +#define PCIE_CONFIG_SCC	0x80000001 + +struct fsl_pci_info { +	unsigned long regs; +	pci_addr_t mem_bus; +	phys_size_t mem_phys; +	pci_size_t mem_size; +	pci_addr_t io_bus; +	phys_size_t io_phys; +	pci_size_t io_size; +	enum law_trgt_if law; +	int pci_num; +}; + +void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info); +int fsl_pci_init_port(struct fsl_pci_info *pci_info, +				struct pci_controller *hose, int busno); +int fsl_pcie_init_ctrl(int busno, u32 devdisr, enum srds_prtcl dev, +			struct fsl_pci_info *pci_info); +int fsl_pcie_init_board(int busno); + +#define SET_STD_PCI_INFO(x, num) \ +{			\ +	x.regs = CONFIG_SYS_PCI##num##_ADDR;	\ +	x.mem_bus = CONFIG_SYS_PCI##num##_MEM_BUS; \ +	x.mem_phys = CONFIG_SYS_PCI##num##_MEM_PHYS; \ +	x.mem_size = CONFIG_SYS_PCI##num##_MEM_SIZE; \ +	x.io_bus = CONFIG_SYS_PCI##num##_IO_BUS; \ +	x.io_phys = CONFIG_SYS_PCI##num##_IO_PHYS; \ +	x.io_size = CONFIG_SYS_PCI##num##_IO_SIZE; \ +	x.law = LAW_TRGT_IF_PCI_##num; \ +	x.pci_num = num; \ +} + +#define SET_STD_PCIE_INFO(x, num) \ +{			\ +	x.regs = CONFIG_SYS_PCIE##num##_ADDR;	\ +	x.mem_bus = CONFIG_SYS_PCIE##num##_MEM_BUS; \ +	x.mem_phys = CONFIG_SYS_PCIE##num##_MEM_PHYS; \ +	x.mem_size = CONFIG_SYS_PCIE##num##_MEM_SIZE; \ +	x.io_bus = CONFIG_SYS_PCIE##num##_IO_BUS; \ +	x.io_phys = CONFIG_SYS_PCIE##num##_IO_PHYS; \ +	x.io_size = CONFIG_SYS_PCIE##num##_IO_SIZE; \ +	x.law = LAW_TRGT_IF_PCIE_##num; \ +	x.pci_num = num; \ +} + +#define __FT_FSL_PCI_SETUP(blob, compat, num) \ +	ft_fsl_pci_setup(blob, compat, CONFIG_SYS_PCI##num##_ADDR) + +#define __FT_FSL_PCIE_SETUP(blob, compat, num) \ +	ft_fsl_pci_setup(blob, compat, CONFIG_SYS_PCIE##num##_ADDR) + +#define FT_FSL_PCI1_SETUP __FT_FSL_PCI_SETUP(blob, FSL_PCI_COMPAT, 1) +#define FT_FSL_PCI2_SETUP __FT_FSL_PCI_SETUP(blob, FSL_PCI_COMPAT, 2) + +#define FT_FSL_PCIE1_SETUP __FT_FSL_PCIE_SETUP(blob, FSL_PCIE_COMPAT, 1) +#define FT_FSL_PCIE2_SETUP __FT_FSL_PCIE_SETUP(blob, FSL_PCIE_COMPAT, 2) +#define FT_FSL_PCIE3_SETUP __FT_FSL_PCIE_SETUP(blob, FSL_PCIE_COMPAT, 3) +#define FT_FSL_PCIE4_SETUP __FT_FSL_PCIE_SETUP(blob, FSL_PCIE_COMPAT, 4) + +#if !defined(CONFIG_PCI) +#define FT_FSL_PCI_SETUP +#elif defined(CONFIG_FSL_CORENET) +#define FSL_PCIE_COMPAT	CONFIG_SYS_FSL_PCIE_COMPAT +#define FT_FSL_PCI_SETUP \ +	FT_FSL_PCIE1_SETUP; \ +	FT_FSL_PCIE2_SETUP; \ +	FT_FSL_PCIE3_SETUP; \ +	FT_FSL_PCIE4_SETUP; +#define FT_FSL_PCIE_SETUP FT_FSL_PCI_SETUP +#elif defined(CONFIG_MPC85xx) +#define FSL_PCI_COMPAT	"fsl,mpc8540-pci" +#ifdef CONFIG_SYS_FSL_PCIE_COMPAT +#define FSL_PCIE_COMPAT	CONFIG_SYS_FSL_PCIE_COMPAT +#else +#define FSL_PCIE_COMPAT	"fsl,mpc8548-pcie" +#endif +#define FT_FSL_PCI_SETUP \ +	FT_FSL_PCI1_SETUP; \ +	FT_FSL_PCI2_SETUP; \ +	FT_FSL_PCIE1_SETUP; \ +	FT_FSL_PCIE2_SETUP; \ +	FT_FSL_PCIE3_SETUP; +#define FT_FSL_PCIE_SETUP \ +	FT_FSL_PCIE1_SETUP; \ +	FT_FSL_PCIE2_SETUP; \ +	FT_FSL_PCIE3_SETUP; +#elif defined(CONFIG_MPC86xx) +#define FSL_PCI_COMPAT	"fsl,mpc8610-pci" +#define FSL_PCIE_COMPAT	"fsl,mpc8641-pcie" +#define FT_FSL_PCI_SETUP \ +	FT_FSL_PCI1_SETUP; \ +	FT_FSL_PCIE1_SETUP; \ +	FT_FSL_PCIE2_SETUP; +#else +#error FT_FSL_PCI_SETUP not defined +#endif + + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_portals.h b/roms/u-boot/arch/powerpc/include/asm/fsl_portals.h new file mode 100644 index 00000000..f13ba145 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_portals.h @@ -0,0 +1,52 @@ +/* + * Copyright 2009-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _FSL_PORTALS_H_ +#define _FSL_PORTALS_H_ + +/* entries must be in order and contiguous */ +enum fsl_dpaa_dev { +	FSL_HW_PORTAL_SEC, +#ifdef CONFIG_SYS_DPAA_FMAN +	FSL_HW_PORTAL_FMAN1, +#if (CONFIG_SYS_NUM_FMAN == 2) +	FSL_HW_PORTAL_FMAN2, +#endif +#endif +	FSL_HW_PORTAL_PME, +#ifdef CONFIG_SYS_FSL_RAID_ENGINE +	FSL_HW_PORTAL_RAID_ENGINE, +#endif +#ifdef CONFIG_SYS_DPAA_RMAN +	FSL_HW_PORTAL_RMAN, +#endif +#ifdef CONFIG_SYS_DPAA_DCE +	FSL_HW_PORTAL_DCE, +#endif + +}; + +struct qportal_info { +	u16	dliodn;	/* DQRR LIODN */ +	u16	fliodn;	/* frame data LIODN */ +	u16	liodn_offset; +	u8	sdest; +}; + +#define SET_QP_INFO(dqrr, fdata, off, dest) \ +	{ .dliodn = dqrr, .fliodn = fdata, .liodn_offset = off, .sdest = dest } + +extern int get_dpaa_liodn(enum fsl_dpaa_dev dpaa_dev, +			  u32 *liodns, int liodn_offset); +extern void setup_portals(void); +extern void fdt_fixup_qportals(void *blob); +extern void fdt_fixup_bportals(void *blob); + +extern struct qportal_info qp_info[]; +extern void fdt_portal(void *blob, const char *compat, const char *container, +			u64 addr, u32 size); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_secure_boot.h b/roms/u-boot/arch/powerpc/include/asm/fsl_secure_boot.h new file mode 100644 index 00000000..74c5d8f2 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_secure_boot.h @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2011 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __FSL_SECURE_BOOT_H +#define __FSL_SECURE_BOOT_H + +#ifdef CONFIG_SECURE_BOOT +#if defined(CONFIG_FSL_CORENET) +#define CONFIG_SYS_PBI_FLASH_BASE		0xc0000000 +#elif defined(CONFIG_BSC9132QDS) +#define CONFIG_SYS_PBI_FLASH_BASE		0xc8000000 +#else +#define CONFIG_SYS_PBI_FLASH_BASE		0xce000000 +#endif +#define CONFIG_SYS_PBI_FLASH_WINDOW		0xcff80000 + +#if defined(CONFIG_B4860QDS) || \ +	defined(CONFIG_T4240QDS) || \ +	defined(CONFIG_T2080QDS) || \ +	defined(CONFIG_T2080RDB) || \ +	defined(CONFIG_T1040QDS) || \ +	defined(CONFIG_T104xRDB) +#define CONFIG_SYS_CPC_REINIT_F +#undef CONFIG_SYS_INIT_L3_ADDR +#define CONFIG_SYS_INIT_L3_ADDR			0xbff00000 +#endif + +#endif +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_serdes.h b/roms/u-boot/arch/powerpc/include/asm/fsl_serdes.h new file mode 100644 index 00000000..f60cb0a6 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_serdes.h @@ -0,0 +1,99 @@ +/* + * Copyright 2010 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __FSL_SERDES_H +#define __FSL_SERDES_H + +#include <config.h> + +enum srds_prtcl { +	NONE = 0, +	PCIE1, +	PCIE2, +	PCIE3, +	PCIE4, +	SATA1, +	SATA2, +	SRIO1, +	SRIO2, +	SGMII_FM1_DTSEC1, +	SGMII_FM1_DTSEC2, +	SGMII_FM1_DTSEC3, +	SGMII_FM1_DTSEC4, +	SGMII_FM1_DTSEC5, +	SGMII_FM1_DTSEC6, +	SGMII_FM1_DTSEC9, +	SGMII_FM1_DTSEC10, +	SGMII_FM2_DTSEC1, +	SGMII_FM2_DTSEC2, +	SGMII_FM2_DTSEC3, +	SGMII_FM2_DTSEC4, +	SGMII_FM2_DTSEC5, +	SGMII_FM2_DTSEC6, +	SGMII_FM2_DTSEC9, +	SGMII_FM2_DTSEC10, +	SGMII_TSEC1, +	SGMII_TSEC2, +	SGMII_TSEC3, +	SGMII_TSEC4, +	XAUI_FM1, +	XAUI_FM2, +	AURORA, +	CPRI1, +	CPRI2, +	CPRI3, +	CPRI4, +	CPRI5, +	CPRI6, +	CPRI7, +	CPRI8, +	XAUI_FM1_MAC9, +	XAUI_FM1_MAC10, +	XAUI_FM2_MAC9, +	XAUI_FM2_MAC10, +	HIGIG_FM1_MAC9, +	HIGIG_FM1_MAC10, +	HIGIG_FM2_MAC9, +	HIGIG_FM2_MAC10, +	QSGMII_FM1_A,		/* A indicates MACs 1-4 */ +	QSGMII_FM1_B,		/* B indicates MACs 5,6,9,10 */ +	QSGMII_FM2_A, +	QSGMII_FM2_B, +	XFI_FM1_MAC1, +	XFI_FM1_MAC2, +	XFI_FM1_MAC9, +	XFI_FM1_MAC10, +	XFI_FM2_MAC9, +	XFI_FM2_MAC10, +	INTERLAKEN, +	QSGMII_SW1_A,		/* Indicates ports on L2 Switch */ +	QSGMII_SW1_B, +}; + +enum srds { +	FSL_SRDS_1  = 0, +	FSL_SRDS_2  = 1, +	FSL_SRDS_3  = 2, +	FSL_SRDS_4  = 3, +}; + +int is_serdes_configured(enum srds_prtcl device); +void fsl_serdes_init(void); +const char *serdes_clock_to_string(u32 clock); + +#ifdef CONFIG_FSL_CORENET +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +int serdes_get_first_lane(u32 sd, enum srds_prtcl device); +enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane); +#else +int serdes_get_first_lane(enum srds_prtcl device); +#endif +#ifdef CONFIG_SYS_P4080_ERRATUM_SERDES9 +void serdes_reset_rx(enum srds_prtcl device); +#endif +#endif + +#endif /* __FSL_SERDES_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_srio.h b/roms/u-boot/arch/powerpc/include/asm/fsl_srio.h new file mode 100644 index 00000000..e5aab2a7 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_srio.h @@ -0,0 +1,46 @@ +/* + * Copyright 2011-2012 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _FSL_SRIO_H_ +#define _FSL_SRIO_H_ + +enum atmu_size { +	ATMU_SIZE_4K = 0xb, +	ATMU_SIZE_8K, +	ATMU_SIZE_16K, +	ATMU_SIZE_32K, +	ATMU_SIZE_64K, +	ATMU_SIZE_128K, +	ATMU_SIZE_256K, +	ATMU_SIZE_512K, +	ATMU_SIZE_1M, +	ATMU_SIZE_2M, +	ATMU_SIZE_4M, +	ATMU_SIZE_8M, +	ATMU_SIZE_16M, +	ATMU_SIZE_32M, +	ATMU_SIZE_64M, +	ATMU_SIZE_128M, +	ATMU_SIZE_256M, +	ATMU_SIZE_512M, +	ATMU_SIZE_1G, +	ATMU_SIZE_2G, +	ATMU_SIZE_4G, +	ATMU_SIZE_8G, +	ATMU_SIZE_16G, +	ATMU_SIZE_32G, +	ATMU_SIZE_64G, +}; + +#define atmu_size_mask(sz)	(__ilog2_u64(sz) - 1) +#define atmu_size_bytes(x)	(1ULL << ((x & 0x3f) + 1)) + +extern void srio_init(void); +#ifdef CONFIG_FSL_CORENET +extern void srio_boot_master(int port); +extern void srio_boot_master_release_slave(int port); +#endif +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/fsl_tgec.h b/roms/u-boot/arch/powerpc/include/asm/fsl_tgec.h new file mode 100644 index 00000000..92fb777c --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/fsl_tgec.h @@ -0,0 +1,202 @@ +/* + * Copyright 2009-2011 Freescale Semiconductor, Inc. + *	Dave Liu <daveliu@freescale.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __TGEC_H__ +#define __TGEC_H__ + +#include <phy.h> + +struct tgec { +	/* 10GEC general control and status registers */ +	u32	tgec_id;	/* Controller ID register */ +	u32	res0; +	u32	command_config;	/* Control and configuration register */ +	u32	mac_addr_0;	/* Lower 32 bits of 48-bit MAC address */ +	u32	mac_addr_1;	/* Upper 16 bits of 48-bit MAC address */ +	u32	maxfrm;		/* Maximum frame length register */ +	u32	pause_quant;	/* Pause quanta register */ +	u32	res1[4]; +	u32	hashtable_ctrl;	/* Hash table control register */ +	u32	res2[4]; +	u32	status;		/* MAC status register */ +	u32	tx_ipg_length;	/* Transmitter inter-packet-gap register */ +	u32	mac_addr_2;	/* Lower 32 bits of the 2nd 48-bit MAC addr */ +	u32	mac_addr_3;	/* Upper 16 bits of the 2nd 48-bit MAC addr */ +	u32	res3[4]; +	u32	imask;		/* Interrupt mask register */ +	u32	ievent;		/* Interrupt event register */ +	u32	res4[6]; +	/* 10GEC statistics counter registers */ +	u32	tx_frame_u;	/* Tx frame counter upper */ +	u32	tx_frame_l;	/* Tx frame counter lower */ +	u32	rx_frame_u;	/* Rx frame counter upper */ +	u32	rx_frame_l;	/* Rx frame counter lower */ +	u32	rx_frame_crc_err_u; /* Rx frame check sequence error upper */ +	u32	rx_frame_crc_err_l; /* Rx frame check sequence error lower */ +	u32	rx_align_err_u;	/* Rx alignment error upper */ +	u32	rx_align_err_l;	/* Rx alignment error lower */ +	u32	tx_pause_frame_u; /* Tx valid pause frame upper */ +	u32	tx_pause_frame_l; /* Tx valid pause frame lower */ +	u32	rx_pause_frame_u; /* Rx valid pause frame upper */ +	u32	rx_pause_frame_l; /* Rx valid pause frame upper */ +	u32	rx_long_err_u;	/* Rx too long frame error upper */ +	u32	rx_long_err_l;	/* Rx too long frame error lower */ +	u32	rx_frame_err_u;	/* Rx frame length error upper */ +	u32	rx_frame_err_l;	/* Rx frame length error lower */ +	u32	tx_vlan_u;	/* Tx VLAN frame upper */ +	u32	tx_vlan_l;	/* Tx VLAN frame lower */ +	u32	rx_vlan_u;	/* Rx VLAN frame upper */ +	u32	rx_vlan_l;	/* Rx VLAN frame lower */ +	u32	tx_oct_u;	/* Tx octets upper */ +	u32	tx_oct_l;	/* Tx octets lower */ +	u32	rx_oct_u;	/* Rx octets upper */ +	u32	rx_oct_l;	/* Rx octets lower */ +	u32	rx_uni_u;	/* Rx unicast frame upper */ +	u32	rx_uni_l;	/* Rx unicast frame lower */ +	u32	rx_multi_u;	/* Rx multicast frame upper */ +	u32	rx_multi_l;	/* Rx multicast frame lower */ +	u32	rx_brd_u;	/* Rx broadcast frame upper */ +	u32	rx_brd_l;	/* Rx broadcast frame lower */ +	u32	tx_frame_err_u;	/* Tx frame error upper */ +	u32	tx_frame_err_l;	/* Tx frame error lower */ +	u32	tx_uni_u;	/* Tx unicast frame upper */ +	u32	tx_uni_l;	/* Tx unicast frame lower */ +	u32	tx_multi_u;	/* Tx multicast frame upper */ +	u32	tx_multi_l;	/* Tx multicast frame lower */ +	u32	tx_brd_u;	/* Tx broadcast frame upper */ +	u32	tx_brd_l;	/* Tx broadcast frame lower */ +	u32	rx_drop_u;	/* Rx dropped packets upper */ +	u32	rx_drop_l;	/* Rx dropped packets lower */ +	u32	rx_eoct_u;	/* Rx ethernet octets upper */ +	u32	rx_eoct_l;	/* Rx ethernet octets lower */ +	u32	rx_pkt_u;	/* Rx packets upper */ +	u32	rx_pkt_l;	/* Rx packets lower */ +	u32	tx_undsz_u;	/* Undersized packet upper */ +	u32	tx_undsz_l;	/* Undersized packet lower */ +	u32	rx_64_u;	/* Rx 64 oct packet upper */ +	u32	rx_64_l;	/* Rx 64 oct packet lower */ +	u32	rx_127_u;	/* Rx 65 to 127 oct packet upper */ +	u32	rx_127_l;	/* Rx 65 to 127 oct packet lower */ +	u32	rx_255_u;	/* Rx 128 to 255 oct packet upper */ +	u32	rx_255_l;	/* Rx 128 to 255 oct packet lower */ +	u32	rx_511_u;	/* Rx 256 to 511 oct packet upper */ +	u32	rx_511_l;	/* Rx 256 to 511 oct packet lower */ +	u32	rx_1023_u;	/* Rx 512 to 1023 oct packet upper */ +	u32	rx_1023_l;	/* Rx 512 to 1023 oct packet lower */ +	u32	rx_1518_u;	/* Rx 1024 to 1518 oct packet upper */ +	u32	rx_1518_l;	/* Rx 1024 to 1518 oct packet lower */ +	u32	rx_1519_u;	/* Rx 1519 to max oct packet upper */ +	u32	rx_1519_l;	/* Rx 1519 to max oct packet lower */ +	u32	tx_oversz_u;	/* oversized packet upper */ +	u32	tx_oversz_l;	/* oversized packet lower */ +	u32	tx_jabber_u;	/* Jabber packet upper */ +	u32	tx_jabber_l;	/* Jabber packet lower */ +	u32	tx_frag_u;	/* Fragment packet upper */ +	u32	tx_frag_l;	/* Fragment packet lower */ +	u32	rx_err_u;	/* Rx frame error upper */ +	u32	rx_err_l;	/* Rx frame error lower */ +	u32	res5[0x39a]; +}; + +/* EC10G_ID - 10-gigabit ethernet MAC controller ID */ +#define EC10G_ID_VER_MASK	0x0000ff00 +#define EC10G_ID_VER_SHIFT	8 +#define EC10G_ID_REV_MASK	0x000000ff + +/* COMMAND_CONFIG - command and configuration register */ +#define TGEC_CMD_CFG_EN_TIMESTAMP	0x00100000 /* enable IEEE1588 */ +#define TGEC_CMD_CFG_TX_ADDR_INS_SEL	0x00080000 /* Tx mac addr w/ second */ +#define TGEC_CMD_CFG_NO_LEN_CHK		0x00020000 /* payload len chk disable */ +#define TGEC_CMD_CFG_SEND_IDLE		0x00010000 /* send XGMII idle seqs */ +#define TGEC_CMD_CFG_RX_ER_DISC		0x00004000 /* Rx err frm discard enb */ +#define TGEC_CMD_CFG_CMD_FRM_EN		0x00002000 /* CMD frame RX enable */ +#define TGEC_CMD_CFG_STAT_CLR		0x00001000 /* clear stats */ +#define TGEC_CMD_CFG_TX_ADDR_INS	0x00000200 /* overwrite src MAC addr */ +#define TGEC_CMD_CFG_PAUSE_IGNORE	0x00000100 /* ignore pause frames */ +#define TGEC_CMD_CFG_PAUSE_FWD		0x00000080 /* fwd pause frames */ +#define TGEC_CMD_CFG_CRC_FWD		0x00000040 /* fwd Rx CRC frames */ +#define TGEC_CMD_CFG_PAD_EN		0x00000020 /* MAC remove Rx padding */ +#define TGEC_CMD_CFG_PROM_EN		0x00000010 /* promiscuous mode enable */ +#define TGEC_CMD_CFG_WAN_MODE		0x00000008 /* WAN mode enable */ +#define TGEC_CMD_CFG_RX_EN		0x00000002 /* MAC Rx path enable */ +#define TGEC_CMD_CFG_TX_EN		0x00000001 /* MAC Tx path enable */ +#define TGEC_CMD_CFG_RXTX_EN	(TGEC_CMD_CFG_RX_EN | TGEC_CMD_CFG_TX_EN) + +/* HASHTABLE_CTRL - Hashtable control register */ +#define HASHTABLE_CTRL_MCAST_EN	0x00000200 /* enable mulitcast Rx hash */ +#define HASHTABLE_CTRL_ADDR_MASK	0x000001ff + +/* TX_IPG_LENGTH - Transmit inter-packet gap length register */ +#define TX_IPG_LENGTH_IPG_LEN_MASK	0x000003ff + +/* IMASK - interrupt mask register */ +#define IMASK_MDIO_SCAN_EVENT	0x00010000 /* MDIO scan event mask */ +#define IMASK_MDIO_CMD_CMPL	0x00008000 /* MDIO cmd completion mask */ +#define IMASK_REM_FAULT		0x00004000 /* remote fault mask */ +#define IMASK_LOC_FAULT		0x00002000 /* local fault mask */ +#define IMASK_TX_ECC_ER		0x00001000 /* Tx frame ECC error mask */ +#define IMASK_TX_FIFO_UNFL	0x00000800 /* Tx FIFO underflow mask */ +#define IMASK_TX_ER		0x00000200 /* Tx frame error mask */ +#define IMASK_RX_FIFO_OVFL	0x00000100 /* Rx FIFO overflow mask */ +#define IMASK_RX_ECC_ER		0x00000080 /* Rx frame ECC error mask */ +#define IMASK_RX_JAB_FRM	0x00000040 /* Rx jabber frame mask */ +#define IMASK_RX_OVRSZ_FRM	0x00000020 /* Rx oversized frame mask */ +#define IMASK_RX_RUNT_FRM	0x00000010 /* Rx runt frame mask */ +#define IMASK_RX_FRAG_FRM	0x00000008 /* Rx fragment frame mask */ +#define IMASK_RX_LEN_ER		0x00000004 /* Rx payload length error mask */ +#define IMASK_RX_CRC_ER		0x00000002 /* Rx CRC error mask */ +#define IMASK_RX_ALIGN_ER	0x00000001 /* Rx alignment error mask */ + +#define IMASK_MASK_ALL		0x00000000 + +/* IEVENT - interrupt event register */ +#define IEVENT_MDIO_SCAN_EVENT	0x00010000 /* MDIO scan event */ +#define IEVENT_MDIO_CMD_CMPL	0x00008000 /* MDIO cmd completion */ +#define IEVENT_REM_FAULT	0x00004000 /* remote fault */ +#define IEVENT_LOC_FAULT	0x00002000 /* local fault */ +#define IEVENT_TX_ECC_ER	0x00001000 /* Tx frame ECC error */ +#define IEVENT_TX_FIFO_UNFL	0x00000800 /* Tx FIFO underflow */ +#define IEVENT_TX_ER		0x00000200 /* Tx frame error */ +#define IEVENT_RX_FIFO_OVFL	0x00000100 /* Rx FIFO overflow */ +#define IEVENT_RX_ECC_ER	0x00000080 /* Rx frame ECC error */ +#define IEVENT_RX_JAB_FRM	0x00000040 /* Rx jabber frame */ +#define IEVENT_RX_OVRSZ_FRM	0x00000020 /* Rx oversized frame */ +#define IEVENT_RX_RUNT_FRM	0x00000010 /* Rx runt frame */ +#define IEVENT_RX_FRAG_FRM	0x00000008 /* Rx fragment frame */ +#define IEVENT_RX_LEN_ER	0x00000004 /* Rx payload length error */ +#define IEVENT_RX_CRC_ER	0x00000002 /* Rx CRC error */ +#define IEVENT_RX_ALIGN_ER	0x00000001 /* Rx alignment error */ + +#define IEVENT_CLEAR_ALL	0xffffffff + +struct tgec_mdio_controller { +	u32	res0[0xc]; +	u32	mdio_stat;	/* MDIO configuration and status */ +	u32	mdio_ctl;	/* MDIO control */ +	u32	mdio_data;	/* MDIO data */ +	u32	mdio_addr;	/* MDIO address */ +}; + +#define MDIO_STAT_CLKDIV(x)	(((x>>1) & 0xff) << 8) +#define MDIO_STAT_BSY		(1 << 0) +#define MDIO_STAT_RD_ER		(1 << 1) +#define MDIO_CTL_DEV_ADDR(x)	(x & 0x1f) +#define MDIO_CTL_PORT_ADDR(x)	((x & 0x1f) << 5) +#define MDIO_CTL_PRE_DIS	(1 << 10) +#define MDIO_CTL_SCAN_EN	(1 << 11) +#define MDIO_CTL_POST_INC	(1 << 14) +#define MDIO_CTL_READ		(1 << 15) + +#define MDIO_DATA(x)		(x & 0xffff) +#define MDIO_DATA_BSY		(1 << 31) + +struct fsl_enet_mac; + +void init_tgec(struct fsl_enet_mac *mac, void *base, void *phyregs, +		int max_rx_len); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/global_data.h b/roms/u-boot/arch/powerpc/include/asm/global_data.h new file mode 100644 index 00000000..8e59e8ba --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/global_data.h @@ -0,0 +1,127 @@ +/* + * (C) Copyright 2002-2010 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef	__ASM_GBL_DATA_H +#define __ASM_GBL_DATA_H + +#include "config.h" +#include "asm/types.h" + +/* Architecture-specific global data */ +struct arch_global_data { +#if defined(CONFIG_FSL_ESDHC) +	u32 sdhc_clk; +#endif +#if defined(CONFIG_8xx) +	unsigned long brg_clk; +#endif +#if defined(CONFIG_CPM2) +	/* There are many clocks on the MPC8260 - see page 9-5 */ +	unsigned long vco_out; +	unsigned long cpm_clk; +	unsigned long scc_clk; +	unsigned long brg_clk; +#endif +	/* TODO: sjg@chromium.org: Should these be unslgned long? */ +#if defined(CONFIG_MPC83xx) +	/* There are other clocks in the MPC83XX */ +	u32 csb_clk; +# if defined(CONFIG_MPC8308) || defined(CONFIG_MPC831x) || \ +	defined(CONFIG_MPC834x) || defined(CONFIG_MPC837x) +	u32 tsec1_clk; +	u32 tsec2_clk; +	u32 usbdr_clk; +# elif defined(CONFIG_MPC8309) +	u32 usbdr_clk; +# endif +# if defined(CONFIG_MPC834x) +	u32 usbmph_clk; +# endif /* CONFIG_MPC834x */ +# if defined(CONFIG_MPC8315) +	u32 tdm_clk; +# endif +	u32 core_clk; +	u32 enc_clk; +	u32 lbiu_clk; +	u32 lclk_clk; +# if defined(CONFIG_MPC8308) || defined(CONFIG_MPC831x) || \ +	defined(CONFIG_MPC837x) +	u32 pciexp1_clk; +	u32 pciexp2_clk; +# endif +# if defined(CONFIG_MPC837x) || defined(CONFIG_MPC8315) +	u32 sata_clk; +# endif +# if defined(CONFIG_MPC8360) +	u32 mem_sec_clk; +# endif /* CONFIG_MPC8360 */ +#endif +#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) +	u32 lbc_clk; +	void *cpu; +#endif /* CONFIG_MPC85xx || CONFIG_MPC86xx */ +#if defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || \ +		defined(CONFIG_MPC86xx) +	u32 i2c1_clk; +	u32 i2c2_clk; +#endif +#if defined(CONFIG_QE) +	u32 qe_clk; +	u32 brg_clk; +	uint mp_alloc_base; +	uint mp_alloc_top; +#endif /* CONFIG_QE */ +#if defined(CONFIG_FSL_LAW) +	u32 used_laws; +#endif +#if defined(CONFIG_E500) +	u32 used_tlb_cams[(CONFIG_SYS_NUM_TLBCAMS+31)/32]; +#endif +#if defined(CONFIG_MPC5xxx) +	unsigned long ipb_clk; +#endif +#if defined(CONFIG_MPC512X) +	u32 ips_clk; +	u32 csb_clk; +#endif /* CONFIG_MPC512X */ +	unsigned long reset_status;	/* reset status register at boot */ +#if defined(CONFIG_MPC83xx) +	unsigned long arbiter_event_attributes; +	unsigned long arbiter_event_address; +#endif +#if defined(CONFIG_SYS_ALLOC_DPRAM) || defined(CONFIG_CPM2) +	unsigned int dp_alloc_base; +	unsigned int dp_alloc_top; +#endif +#if defined(CONFIG_4xx) +	u32 uart_clk; +#endif /* CONFIG_4xx */ +#if defined(CONFIG_SYS_GT_6426x) +	unsigned int mirror_hack[16]; +#endif +#ifdef CONFIG_SYS_FPGA_COUNT +	unsigned fpga_state[CONFIG_SYS_FPGA_COUNT]; +#endif +#if defined(CONFIG_WD_MAX_RATE) +	unsigned long long wdt_last;	/* trace watch-dog triggering rate */ +#endif +#if defined(CONFIG_LWMON) || defined(CONFIG_LWMON5) +	unsigned long kbd_status; +#endif +}; + +#include <asm-generic/global_data.h> + +#if 1 +#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r2") +#else /* We could use plain global data, but the resulting code is bigger */ +#define XTRN_DECLARE_GLOBAL_DATA_PTR	extern +#define DECLARE_GLOBAL_DATA_PTR     XTRN_DECLARE_GLOBAL_DATA_PTR \ +				    gd_t *gd +#endif + +#endif /* __ASM_GBL_DATA_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/gpio.h b/roms/u-boot/arch/powerpc/include/asm/gpio.h new file mode 100644 index 00000000..d49ad080 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/gpio.h @@ -0,0 +1,2 @@ +#include <asm/arch/gpio.h> +#include <asm-generic/gpio.h> diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_512x.h b/roms/u-boot/arch/powerpc/include/asm/immap_512x.h new file mode 100644 index 00000000..6086a73b --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_512x.h @@ -0,0 +1,1263 @@ +/* + * (C) Copyright 2007-2009 DENX Software Engineering + * + * MPC512x Internal Memory Map + * + * SPDX-License-Identifier:	GPL-2.0+ + * + * Based on the MPC83xx header. + */ + +#ifndef __IMMAP_512x__ +#define __IMMAP_512x__ + +#include <asm/types.h> +#if defined(CONFIG_E300) +#include <asm/e300.h> +#endif + +/* + * System reset offset (PowerPC standard) + */ +#define EXC_OFF_SYS_RESET	0x0100 +#define	_START_OFFSET		EXC_OFF_SYS_RESET + +#define SPR_5121E		0x80180000 + +/* + * IMMRBAR - Internal Memory Register Base Address + */ +#define CONFIG_DEFAULT_IMMR	0xFF400000	/* Default IMMR base address */ +#define IMMRBAR			0x0000		/* Register offset to immr */ +#define IMMRBAR_BASE_ADDR	0xFFF00000	/* Base address mask */ +#define IMMRBAR_RES		~(IMMRBAR_BASE_ADDR) + + +#ifndef __ASSEMBLY__ +typedef struct law512x { +	u32 bar;	/* Base Addr Register */ +	u32 ar;		/* Attributes Register */ +} law512x_t; + +/* + * System configuration registers + */ +typedef struct sysconf512x { +	u32 immrbar;		/* Internal memory map base address register */ +	u8 res0[0x1c]; +	u32 lpbaw;		/* LP Boot Access Window */ +	u32 lpcs0aw;		/* LP CS0 Access Window */ +	u32 lpcs1aw;		/* LP CS1 Access Window */ +	u32 lpcs2aw;		/* LP CS2 Access Window */ +	u32 lpcs3aw;		/* LP CS3 Access Window */ +	u32 lpcs4aw;		/* LP CS4 Access Window */ +	u32 lpcs5aw;		/* LP CS5 Access Window */ +	u32 lpcs6aw;		/* LP CS6 Access Window */ +	u32 lpcs7aw;		/* LP CS7 Access Window */ +	u8 res1[0x1c]; +	law512x_t pcilaw[3];	/* PCI Local Access Window 0-2 Registers */ +	u8 res2[0x28]; +	law512x_t ddrlaw;	/* DDR Local Access Window */ +	u8 res3[0x18]; +	u32 srambar;		/* SRAM Base Address */ +	u32 nfcbar;		/* NFC Base Address */ +	u8 res4[0x34]; +	u32 spridr;		/* System Part and Revision ID Register */ +	u32 spcr;		/* System Priority Configuration Register */ +	u8 res5[0xf8]; +} sysconf512x_t; + +#define LAWBAR_BAR	0xFFFFF000	/* Base address mask */ + +/* + * Watch Dog Timer (WDT) Registers + */ +typedef struct wdt512x { +	u8 res0[4]; +	u32 swcrr;		/* System watchdog control register */ +	u32 swcnr;		/* System watchdog count register */ +	u8 res1[2]; +	u16 swsrr;		/* System watchdog service register */ +	u8 res2[0xF0]; +} wdt512x_t; + +/* + * RTC Module Registers + */ +typedef struct rtclk512x { +	u8 fixme[0x100]; +} rtclk512x_t; + +/* + * General Purpose Timer + */ +typedef struct gpt512x { +	u8 fixme[0x100]; +} gpt512x_t; + +/* + * Integrated Programmable Interrupt Controller + */ +typedef struct ipic512x { +	u8 fixme[0x100]; +} ipic512x_t; + +/* + * System Arbiter Registers + */ +typedef struct arbiter512x { +	u32 acr;		/* Arbiter Configuration Register */ +	u32 atr;		/* Arbiter Timers Register */ +	u32 ater;		/* Arbiter Transfer Error Register */ +	u32 aer;		/* Arbiter Event Register */ +	u32 aidr;		/* Arbiter Interrupt Definition Register */ +	u32 amr;		/* Arbiter Mask Register */ +	u32 aeatr;		/* Arbiter Event Attributes Register */ +	u32 aeadr;		/* Arbiter Event Address Register */ +	u32 aerr;		/* Arbiter Event Response Register */ +	u8 res1[0xDC]; +} arbiter512x_t; + +/* + * Reset Module + */ +typedef struct reset512x { +	u32 rcwl;		/* Reset Configuration Word Low Register */ +	u32 rcwh;		/* Reset Configuration Word High Register */ +	u8 res0[8]; +	u32 rsr;		/* Reset Status Register */ +	u32 rmr;		/* Reset Mode Register */ +	u32 rpr;		/* Reset protection Register */ +	u32 rcr;		/* Reset Control Register */ +	u32 rcer;		/* Reset Control Enable Register */ +	u8 res1[0xDC]; +} reset512x_t; + +/* RSR - Reset Status Register */ +#define RSR_SWSR	0x00002000	/* software soft reset */ +#define RSR_SWHR	0x00001000	/* software hard reset */ +#define RSR_JHRS	0x00000200	/* jtag hreset */ +#define RSR_JSRS	0x00000100	/* jtag sreset status */ +#define RSR_CSHR	0x00000010	/* checkstop reset status */ +#define RSR_SWRS	0x00000008	/* software watchdog reset status */ +#define RSR_BMRS	0x00000004	/* bus monitop reset status */ +#define RSR_SRS		0x00000002	/* soft reset status */ +#define RSR_HRS		0x00000001	/* hard reset status */ +#define RSR_RES		~(RSR_SWSR | RSR_SWHR |\ +			 RSR_JHRS | RSR_JSRS | RSR_CSHR | RSR_SWRS |\ +			 RSR_BMRS | RSR_SRS | RSR_HRS) + +/* RMR - Reset Mode Register */ +#define RMR_CSRE	0x00000001	/* checkstop reset enable */ +#define RMR_CSRE_SHIFT	0 +#define RMR_RES		(~(RMR_CSRE)) + +/* RCR - Reset Control Register */ +#define RCR_SWHR	0x00000002	/* software hard reset */ +#define RCR_SWSR	0x00000001	/* software soft reset */ +#define RCR_RES		(~(RCR_SWHR | RCR_SWSR)) + +/* RCER - Reset Control Enable Register */ +#define RCER_CRE	0x00000001	/* software hard reset */ +#define RCER_RES	(~(RCER_CRE)) + +/* + * Clock Module + */ +typedef struct clk512x { +	u32 spmr;		/* System PLL Mode Register */ +	u32 sccr[2];		/* System Clock Control Registers */ +	u32 scfr[2];		/* System Clock Frequency Registers */ +	u8 res0[4]; +	u32 bcr;		/* Bread Crumb Register */ +	u32 pscccr[12];		/* PSC0-11 Clock Control Registers */ +	u32 spccr;		/* SPDIF Clock Control Register */ +	u32 cccr;		/* CFM Clock Control Register */ +	u32 dccr;		/* DIU Clock Control Register */ +	u32 msccr[4];		/* MSCAN1-4 Clock Control Registers */ +	u8 res1[0x98]; +} clk512x_t; + +/* SPMR - System PLL Mode Register */ +#define SPMR_SPMF		0x0F000000 +#define SPMR_SPMF_SHIFT		24 +#define SPMR_CPMF		0x000F0000 +#define SPMR_CPMF_SHIFT		16 + +/* System Clock Control Register 1 commands */ +#define CLOCK_SCCR1_CFG_EN		0x80000000 +#define CLOCK_SCCR1_LPC_EN		0x40000000 +#define CLOCK_SCCR1_NFC_EN		0x20000000 +#define CLOCK_SCCR1_PATA_EN		0x10000000 +#define CLOCK_SCCR1_PSC_EN(cn)		(0x08000000 >> (cn)) +#define CLOCK_SCCR1_PSCFIFO_EN		0x00008000 +#define CLOCK_SCCR1_SATA_EN		0x00004000 +#define CLOCK_SCCR1_FEC_EN		0x00002000 +#define CLOCK_SCCR1_TPR_EN		0x00001000 +#define CLOCK_SCCR1_PCI_EN		0x00000800 +#define CLOCK_SCCR1_DDR_EN		0x00000400 + +/* System Clock Control Register 2 commands */ +#define CLOCK_SCCR2_DIU_EN		0x80000000 +#define CLOCK_SCCR2_AXE_EN		0x40000000 +#define CLOCK_SCCR2_MEM_EN		0x20000000 +#define CLOCK_SCCR2_USB1_EN		0x10000000 +#define CLOCK_SCCR2_USB2_EN		0x08000000 +#define CLOCK_SCCR2_I2C_EN		0x04000000 +#define CLOCK_SCCR2_BDLC_EN		0x02000000 +#define CLOCK_SCCR2_SDHC_EN		0x01000000 +#define CLOCK_SCCR2_SPDIF_EN		0x00800000 +#define CLOCK_SCCR2_MBX_BUS_EN		0x00400000 +#define CLOCK_SCCR2_MBX_EN		0x00200000 +#define CLOCK_SCCR2_MBX_3D_EN		0x00100000 +#define CLOCK_SCCR2_IIM_EN		0x00080000 + +/* SCFR1 System Clock Frequency Register 1 */ +#ifndef SCFR1_IPS_DIV +#define SCFR1_IPS_DIV		0x3 +#endif +#define SCFR1_IPS_DIV_MASK	0x03800000 +#define SCFR1_IPS_DIV_SHIFT	23 + +#define SCFR1_PCI_DIV		0x6 +#define SCFR1_PCI_DIV_MASK	0x00700000 +#define SCFR1_PCI_DIV_SHIFT	20 + +#define SCFR1_LPC_DIV_MASK	0x00003800 +#define SCFR1_LPC_DIV_SHIFT	11 + +#define SCFR1_NFC_DIV_MASK	0x00000700 +#define SCFR1_NFC_DIV_SHIFT	8 + +#define SCFR1_DIU_DIV_MASK	0x000000FF +#define SCFR1_DIU_DIV_SHIFT	0 + +/* SCFR2 System Clock Frequency Register 2 */ +#define SCFR2_SYS_DIV		0xFC000000 +#define SCFR2_SYS_DIV_SHIFT	26 + +/* SPCR - System Priority Configuration Register */ +#define SPCR_TBEN	0x00400000	/* E300 core time base unit enable */ + +/* + * Power Management Control Module + */ +typedef struct pmc512x { +	u8 fixme[0x100]; +} pmc512x_t; + +/* + * General purpose I/O module + */ +typedef struct gpio512x { +	u32 gpdir; +	u32 gpodr; +	u32 gpdat; +	u32 gpier; +	u32 gpimr; +	u32 gpicr1; +	u32 gpicr2; +	u8 res0[0xE4]; +} gpio512x_t; + +/* + * DDR Memory Controller Memory Map + */ +typedef struct ddr512x { +	u32 ddr_sys_config;	/* System Configuration Register */ +	u32 ddr_time_config0;	/* Timing Configuration Register */ +	u32 ddr_time_config1;	/* Timing Configuration Register */ +	u32 ddr_time_config2;	/* Timing Configuration Register */ +	u32 ddr_command;	/* Command Register */ +	u32 ddr_compact_command;	/* Compact Command Register */ +	u32 self_refresh_cmd_0;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_1;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_2;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_3;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_4;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_5;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_6;	/* Enter/Exit Self Refresh Registers */ +	u32 self_refresh_cmd_7;	/* Enter/Exit Self Refresh Registers */ +	u32 dqs_config_offset_count;	/* DQS Config Offset Count */ +	u32 dqs_config_offset_time;	/* DQS Config Offset Time */ +	u32 DQS_delay_status;	/* DQS Delay Status */ +	u32 res0[0xF]; +	u32 prioman_config1;	/* Priority Manager Configuration */ +	u32 prioman_config2;	/* Priority Manager Configuration */ +	u32 hiprio_config;	/* High Priority Configuration */ +	u32 lut_table0_main_upper;	/* LUT0 Main Upper */ +	u32 lut_table1_main_upper;	/* LUT1 Main Upper */ +	u32 lut_table2_main_upper;	/* LUT2 Main Upper */ +	u32 lut_table3_main_upper;	/* LUT3 Main Upper */ +	u32 lut_table4_main_upper;	/* LUT4 Main Upper */ +	u32 lut_table0_main_lower;	/* LUT0 Main Lower */ +	u32 lut_table1_main_lower;	/* LUT1 Main Lower */ +	u32 lut_table2_main_lower;	/* LUT2 Main Lower */ +	u32 lut_table3_main_lower;	/* LUT3 Main Lower */ +	u32 lut_table4_main_lower;	/* LUT4 Main Lower */ +	u32 lut_table0_alternate_upper;	/* LUT0 Alternate Upper */ +	u32 lut_table1_alternate_upper; /* LUT1 Alternate Upper */ +	u32 lut_table2_alternate_upper; /* LUT2 Alternate Upper */ +	u32 lut_table3_alternate_upper; /* LUT3 Alternate Upper */ +	u32 lut_table4_alternate_upper; /* LUT4 Alternate Upper */ +	u32 lut_table0_alternate_lower; /* LUT0 Alternate Lower */ +	u32 lut_table1_alternate_lower; /* LUT1 Alternate Lower */ +	u32 lut_table2_alternate_lower; /* LUT2 Alternate Lower */ +	u32 lut_table3_alternate_lower; /* LUT3 Alternate Lower */ +	u32 lut_table4_alternate_lower; /* LUT4 Alternate Lower */ +	u32 performance_monitor_config; +	u32 event_time_counter; +	u32 event_time_preset; +	u32 performance_monitor1_address_low; +	u32 performance_monitor2_address_low; +	u32 performance_monitor1_address_hi; +	u32 performance_monitor2_address_hi; +	u32 res1[2]; +	u32 performance_monitor1_read_counter; +	u32 performance_monitor2_read_counter; +	u32 performance_monitor1_write_counter; +	u32 performance_monitor2_write_counter; +	u32 granted_ack_counter0; +	u32 granted_ack_counter1; +	u32 granted_ack_counter2; +	u32 granted_ack_counter3; +	u32 granted_ack_counter4; +	u32 cumulative_wait_counter0; +	u32 cumulative_wait_counter1; +	u32 cumulative_wait_counter2; +	u32 cumulative_wait_counter3; +	u32 cumulative_wait_counter4; +	u32 summed_priority_counter0; +	u32 summed_priority_counter1; +	u32 summed_priority_counter2; +	u32 summed_priority_counter3; +	u32 summed_priority_counter4; +	u32 res2[0x3AD]; +} ddr512x_t; + +/* MDDRC SYS CFG and Timing CFG0 Registers */ +#define MDDRC_SYS_CFG_EN	0xF0000000 +#define MDDRC_SYS_CFG_CKE_MASK	0x40000000 +#define MDDRC_SYS_CFG_CMD_MASK	0x10000000 +#define MDDRC_REFRESH_ZERO_MASK	0x0000FFFF + +/* + * DDR Memory Controller Configuration settings + */ +typedef struct ddr512x_config { +	u32 ddr_sys_config;	/* System Configuration Register */ +	u32 ddr_time_config0;	/* Timing Configuration Register */ +	u32 ddr_time_config1;	/* Timing Configuration Register */ +	u32 ddr_time_config2;	/* Timing Configuration Register */ +} ddr512x_config_t; + +typedef struct sdram_conf_s { +	unsigned long size; +	ddr512x_config_t cfg; +} sdram_conf_t; + +/* + * DMA/Messaging Unit + */ +typedef struct dma512x { +	u8 fixme[0x1800]; +} dma512x_t; + +/* + * PCI Software Configuration Registers + */ +typedef struct pciconf512x { +	u32 config_address; +	u32 config_data; +	u32 int_ack; +	u8 res[116]; +} pciconf512x_t; + +/* + * PCI Outbound Translation Register + */ +typedef struct pci_outbound_window { +	u32 potar; +	u8 res0[4]; +	u32 pobar; +	u8 res1[4]; +	u32 pocmr; +	u8 res2[4]; +} pot512x_t; + +/* POTAR - PCI Outbound Translation Address Register */ +#define POTAR_TA_MASK	0x000fffff + +/* POBAR - PCI Outbound Base Address Register */ +#define POBAR_BA_MASK	0x000fffff + +/* POCMR - PCI Outbound Comparision Mask Register */ +#define POCMR_EN	0x80000000 +#define POCMR_IO	0x40000000	/* 0-memory space 1-I/O space */ +#define POCMR_PRE	0x20000000	/* prefetch enable */ +#define POCMR_SBS	0x00100000	/* special byte swap enable */ +#define POCMR_CM_MASK	0x000fffff +#define POCMR_CM_4G	0x00000000 +#define POCMR_CM_2G	0x00080000 +#define POCMR_CM_1G	0x000C0000 +#define POCMR_CM_512M	0x000E0000 +#define POCMR_CM_256M	0x000F0000 +#define POCMR_CM_128M	0x000F8000 +#define POCMR_CM_64M	0x000FC000 +#define POCMR_CM_32M	0x000FE000 +#define POCMR_CM_16M	0x000FF000 +#define POCMR_CM_8M	0x000FF800 +#define POCMR_CM_4M	0x000FFC00 +#define POCMR_CM_2M	0x000FFE00 +#define POCMR_CM_1M	0x000FFF00 +#define POCMR_CM_512K	0x000FFF80 +#define POCMR_CM_256K	0x000FFFC0 +#define POCMR_CM_128K	0x000FFFE0 +#define POCMR_CM_64K	0x000FFFF0 +#define POCMR_CM_32K	0x000FFFF8 +#define POCMR_CM_16K	0x000FFFFC +#define POCMR_CM_8K	0x000FFFFE +#define POCMR_CM_4K	0x000FFFFF + +/* + * Sequencer + */ +typedef struct ios512x { +	pot512x_t pot[6]; +	u8 res0[0x60]; +	u32 pmcr; +	u8 res1[4]; +	u32 dtcr; +	u8 res2[4]; +} ios512x_t; + +/* + * PCI Controller + */ +typedef struct pcictrl512x { +	u32 esr; +	u32 ecdr; +	u32 eer; +	u32 eatcr; +	u32 eacr; +	u32 eeacr; +	u32 edlcr; +	u32 edhcr; +	u32 gcr; +	u32 ecr; +	u32 gsr; +	u8 res0[12]; +	u32 pitar2; +	u8 res1[4]; +	u32 pibar2; +	u32 piebar2; +	u32 piwar2; +	u8 res2[4]; +	u32 pitar1; +	u8 res3[4]; +	u32 pibar1; +	u32 piebar1; +	u32 piwar1; +	u8 res4[4]; +	u32 pitar0; +	u8 res5[4]; +	u32 pibar0; +	u8 res6[4]; +	u32 piwar0; +	u8 res7[132]; +} pcictrl512x_t; + + +/* PITAR - PCI Inbound Translation Address Register + */ +#define PITAR_TA_MASK	0x000fffff + +/* PIBAR - PCI Inbound Base/Extended Address Register + */ +#define PIBAR_MASK	0xffffffff +#define PIEBAR_EBA_MASK	0x000fffff + +/* PIWAR - PCI Inbound Windows Attributes Register + */ +#define PIWAR_EN	0x80000000 +#define PIWAR_SBS	0x40000000 +#define PIWAR_PF	0x20000000 +#define PIWAR_RTT_MASK	0x000f0000 +#define PIWAR_RTT_NO_SNOOP 0x00040000 +#define PIWAR_RTT_SNOOP	0x00050000 +#define PIWAR_WTT_MASK	0x0000f000 +#define PIWAR_WTT_NO_SNOOP 0x00004000 +#define PIWAR_WTT_SNOOP	0x00005000 + +/* + * MSCAN + */ +typedef struct mscan512x { +	u8 fixme[0x100]; +} mscan512x_t; + +/* + * BDLC + */ +typedef struct bdlc512x { +	u8 fixme[0x100]; +} bdlc512x_t; + +/* + * SDHC + */ +typedef struct sdhc512x { +	u8 fixme[0x100]; +} sdhc512x_t; + +/* + * SPDIF + */ +typedef struct spdif512x { +	u8 fixme[0x100]; +} spdif512x_t; + +/* + * I2C + */ +typedef struct i2c512x_dev { +	volatile u32 madr;		/* I2Cn + 0x00 */ +	volatile u32 mfdr;		/* I2Cn + 0x04 */ +	volatile u32 mcr;		/* I2Cn + 0x08 */ +	volatile u32 msr;		/* I2Cn + 0x0C */ +	volatile u32 mdr;		/* I2Cn + 0x10 */ +	u8 res0[0x0C]; +} i2c512x_dev_t; + +/* Number of I2C buses */ +#define I2C_BUS_CNT	3 + +typedef struct i2c512x { +	i2c512x_dev_t dev[I2C_BUS_CNT]; +	volatile u32 icr; +	volatile u32 mifr; +	u8 res0[0x98]; +} i2c512x_t; + +/* I2Cn control register bits */ +#define I2C_EN		0x80 +#define I2C_IEN		0x40 +#define I2C_STA		0x20 +#define I2C_TX		0x10 +#define I2C_TXAK	0x08 +#define I2C_RSTA	0x04 +#define I2C_INIT_MASK	(I2C_EN | I2C_STA | I2C_TX | I2C_RSTA) + +/* I2Cn status register bits */ +#define I2C_CF		0x80 +#define I2C_AAS		0x40 +#define I2C_BB		0x20 +#define I2C_AL		0x10 +#define I2C_SRW		0x04 +#define I2C_IF		0x02 +#define I2C_RXAK	0x01 + +/* + * AXE + */ +typedef struct axe512x { +	u8 fixme[0x100]; +} axe512x_t; + +/* + * DIU + */ +typedef struct diu512x { +	u8 fixme[0x100]; +} diu512x_t; + +/* + * CFM + */ +typedef struct cfm512x { +	u8 fixme[0x100]; +} cfm512x_t; + +/* + * FEC + */ +typedef struct fec512x { +	u32	fec_id;		/* FEC_ID register */ +	u32	ievent;		/* Interrupt event register */ +	u32	imask;		/* Interrupt mask register */ +	u32	reserved_01; +	u32	r_des_active;	/* Receive ring updated flag */ +	u32	x_des_active;	/* Transmit ring updated flag */ +	u32	reserved_02[3]; +	u32	ecntrl;		/* Ethernet control register */ +	u32	reserved_03[6]; +	u32	mii_data;	/* MII data register */ +	u32	mii_speed;	/* MII speed register */ +	u32	reserved_04[7]; +	u32	mib_control;	/* MIB control/status register */ +	u32	reserved_05[7]; +	u32	r_cntrl;	/* Receive control register */ +	u32	r_hash;		/* Receive hash */ +	u32	reserved_06[14]; +	u32	x_cntrl;	/* Transmit control register */ +	u32	reserved_07[7]; +	u32	paddr1;		/* Physical address low */ +	u32	paddr2;		/* Physical address high + type field */ +	u32	op_pause;	/* Opcode + pause duration */ +	u32	reserved_08[10]; +	u32	iaddr1;		/* Upper 32 bits of individual hash table */ +	u32	iaddr2;		/* Lower 32 bits of individual hash table */ +	u32	gaddr1;		/* Upper 32 bits of group hash table */ +	u32	gaddr2;		/* Lower 32 bits of group hash table */ +	u32	reserved_09[7]; +	u32	x_wmrk;		/* Transmit FIFO watermark */ +	u32	reserved_10; +	u32	r_bound;	/* End of RAM */ +	u32	r_fstart;	/* Receive FIFO start address */ +	u32	reserved_11[11]; +	u32	r_des_start;	/* Beginning of receive descriptor ring */ +	u32	x_des_start;	/* Pointer to beginning of transmit descriptor ring */ +	u32	r_buff_size;	/* Receive buffer size */ +	u32	reserved_12[26]; +	u32	dma_control;	/* DMA control for IP bus, AMBA IF + DMA revision */ +	u32	reserved_13[2]; + +	u32	mib[128];	/* MIB Block Counters */ + +	u32	fifo[256];	/*  used by FEC, can only be accessed by DMA */ +} fec512x_t; + +/* + * ULPI + */ +typedef struct ulpi512x { +	u8 fixme[0x600]; +} ulpi512x_t; + +/* + * UTMI + */ +typedef struct utmi512x { +	u8 fixme[0x3000]; +} utmi512x_t; + +/* + * PCI DMA + */ +typedef struct pcidma512x { +	u8 fixme[0x300]; +} pcidma512x_t; + +/* + * IO Control + */ +typedef struct ioctrl512x { +	u32	io_control_mem;			/* MEM pad ctrl reg */ +	u32	io_control_gp;			/* GP pad ctrl reg */ +	u32	io_control_lpc_clk;		/* LPC_CLK pad ctrl reg */ +	u32	io_control_lpc_oe;		/* LPC_OE pad ctrl reg */ +	u32	io_control_lpc_rw;		/* LPC_R/W pad ctrl reg */ +	u32	io_control_lpc_ack;		/* LPC_ACK pad ctrl reg */ +	u32	io_control_lpc_cs0;		/* LPC_CS0 pad ctrl reg */ +	u32	io_control_nfc_ce0;		/* NFC_CE0 pad ctrl reg */ +	u32	io_control_lpc_cs1;		/* LPC_CS1 pad ctrl reg */ +	u32	io_control_lpc_cs2;		/* LPC_CS2 pad ctrl reg */ +	u32	io_control_lpc_ax03;		/* LPC_AX03 pad ctrl reg */ +	u32	io_control_emb_ax02;		/* EMB_AX02 pad ctrl reg */ +	u32	io_control_emb_ax01;		/* EMB_AX01 pad ctrl reg */ +	u32	io_control_emb_ax00;		/* EMB_AX00 pad ctrl reg */ +	u32	io_control_emb_ad31;		/* EMB_AD31 pad ctrl reg */ +	u32	io_control_emb_ad30;		/* EMB_AD30 pad ctrl reg */ +	u32	io_control_emb_ad29;		/* EMB_AD29 pad ctrl reg */ +	u32	io_control_emb_ad28;		/* EMB_AD28 pad ctrl reg */ +	u32	io_control_emb_ad27;		/* EMB_AD27 pad ctrl reg */ +	u32	io_control_emb_ad26;		/* EMB_AD26 pad ctrl reg */ +	u32	io_control_emb_ad25;		/* EMB_AD25 pad ctrl reg */ +	u32	io_control_emb_ad24;		/* EMB_AD24 pad ctrl reg */ +	u32	io_control_emb_ad23;		/* EMB_AD23 pad ctrl reg */ +	u32	io_control_emb_ad22;		/* EMB_AD22 pad ctrl reg */ +	u32	io_control_emb_ad21;		/* EMB_AD21 pad ctrl reg */ +	u32	io_control_emb_ad20;		/* EMB_AD20 pad ctrl reg */ +	u32	io_control_emb_ad19;		/* EMB_AD19 pad ctrl reg */ +	u32	io_control_emb_ad18;		/* EMB_AD18 pad ctrl reg */ +	u32	io_control_emb_ad17;		/* EMB_AD17 pad ctrl reg */ +	u32	io_control_emb_ad16;		/* EMB_AD16 pad ctrl reg */ +	u32	io_control_emb_ad15;		/* EMB_AD15 pad ctrl reg */ +	u32	io_control_emb_ad14;		/* EMB_AD14 pad ctrl reg */ +	u32	io_control_emb_ad13;		/* EMB_AD13 pad ctrl reg */ +	u32	io_control_emb_ad12;		/* EMB_AD12 pad ctrl reg */ +	u32	io_control_emb_ad11;		/* EMB_AD11 pad ctrl reg */ +	u32	io_control_emb_ad10;		/* EMB_AD10 pad ctrl reg */ +	u32	io_control_emb_ad09;		/* EMB_AD09 pad ctrl reg */ +	u32	io_control_emb_ad08;		/* EMB_AD08 pad ctrl reg */ +	u32	io_control_emb_ad07;		/* EMB_AD07 pad ctrl reg */ +	u32	io_control_emb_ad06;		/* EMB_AD06 pad ctrl reg */ +	u32	io_control_emb_ad05;		/* EMB_AD05 pad ctrl reg */ +	u32	io_control_emb_ad04;		/* EMB_AD04 pad ctrl reg */ +	u32	io_control_emb_ad03;		/* EMB_AD03 pad ctrl reg */ +	u32	io_control_emb_ad02;		/* EMB_AD02 pad ctrl reg */ +	u32	io_control_emb_ad01;		/* EMB_AD01 pad ctrl reg */ +	u32	io_control_emb_ad00;		/* EMB_AD00 pad ctrl reg */ +	u32	io_control_pata_ce1;		/* PATA_CE1 pad ctrl reg */ +	u32	io_control_pata_ce2;		/* PATA_CE2 pad ctrl reg */ +	u32	io_control_pata_isolate;	/* PATA_ISOLATE pad ctrl reg */ +	u32	io_control_pata_ior;		/* PATA_IOR pad ctrl reg */ +	u32	io_control_pata_iow;		/* PATA_IOW pad ctrl reg */ +	u32	io_control_pata_iochrdy;	/* PATA_IOCHRDY pad ctrl reg */ +	u32	io_control_pata_intrq;		/* PATA_INTRQ pad ctrl reg */ +	u32	io_control_pata_drq;		/* PATA_DRQ pad ctrl reg */ +	u32	io_control_pata_dack;		/* PATA_DACK pad ctrl reg */ +	u32	io_control_nfc_wp;		/* NFC_WP pad ctrl reg */ +	u32	io_control_nfc_rb;		/* NFC_RB pad ctrl reg */ +	u32	io_control_nfc_ale;		/* NFC_ALE pad ctrl reg */ +	u32	io_control_nfc_cle;		/* NFC_CLE pad ctrl reg */ +	u32	io_control_nfc_we;		/* NFC_WE pad ctrl reg */ +	u32	io_control_nfc_re;		/* NFC_RE pad ctrl reg */ +	u32	io_control_pci_ad31;		/* PCI_AD31 pad ctrl reg */ +	u32	io_control_pci_ad30;		/* PCI_AD30 pad ctrl reg */ +	u32	io_control_pci_ad29;		/* PCI_AD29 pad ctrl reg */ +	u32	io_control_pci_ad28;		/* PCI_AD28 pad ctrl reg */ +	u32	io_control_pci_ad27;		/* PCI_AD27 pad ctrl reg */ +	u32	io_control_pci_ad26;		/* PCI_AD26 pad ctrl reg */ +	u32	io_control_pci_ad25;		/* PCI_AD25 pad ctrl reg */ +	u32	io_control_pci_ad24;		/* PCI_AD24 pad ctrl reg */ +	u32	io_control_pci_ad23;		/* PCI_AD23 pad ctrl reg */ +	u32	io_control_pci_ad22;		/* PCI_AD22 pad ctrl reg */ +	u32	io_control_pci_ad21;		/* PCI_AD21 pad ctrl reg */ +	u32	io_control_pci_ad20;		/* PCI_AD20 pad ctrl reg */ +	u32	io_control_pci_ad19;		/* PCI_AD19 pad ctrl reg */ +	u32	io_control_pci_ad18;		/* PCI_AD18 pad ctrl reg */ +	u32	io_control_pci_ad17;		/* PCI_AD17 pad ctrl reg */ +	u32	io_control_pci_ad16;		/* PCI_AD16 pad ctrl reg */ +	u32	io_control_pci_ad15;		/* PCI_AD15 pad ctrl reg */ +	u32	io_control_pci_ad14;		/* PCI_AD14 pad ctrl reg */ +	u32	io_control_pci_ad13;		/* PCI_AD13 pad ctrl reg */ +	u32	io_control_pci_ad12;		/* PCI_AD12 pad ctrl reg */ +	u32	io_control_pci_ad11;		/* PCI_AD11 pad ctrl reg */ +	u32	io_control_pci_ad10;		/* PCI_AD10 pad ctrl reg */ +	u32	io_control_pci_ad09;		/* PCI_AD09 pad ctrl reg */ +	u32	io_control_pci_ad08;		/* PCI_AD08 pad ctrl reg */ +	u32	io_control_pci_ad07;		/* PCI_AD07 pad ctrl reg */ +	u32	io_control_pci_ad06;		/* PCI_AD06 pad ctrl reg */ +	u32	io_control_pci_ad05;		/* PCI_AD05 pad ctrl reg */ +	u32	io_control_pci_ad04;		/* PCI_AD04 pad ctrl reg */ +	u32	io_control_pci_ad03;		/* PCI_AD03 pad ctrl reg */ +	u32	io_control_pci_ad02;		/* PCI_AD02 pad ctrl reg */ +	u32	io_control_pci_ad01;		/* PCI_AD01 pad ctrl reg */ +	u32	io_control_pci_ad00;		/* PCI_AD00 pad ctrl reg */ +	u32	io_control_pci_cbe0;		/* PCI_CBE0 pad ctrl reg */ +	u32	io_control_pci_cbe1;		/* PCI_CBE1 pad ctrl reg */ +	u32	io_control_pci_cbe2;		/* PCI_CBE2 pad ctrl reg */ +	u32	io_control_pci_cbe3;		/* PCI_CBE3 pad ctrl reg */ +	u32	io_control_pci_grant2;		/* PCI_GRANT2 pad ctrl reg */ +	u32	io_control_pci_req2;		/* PCI_REQ2 pad ctrl reg */ +	u32	io_control_pci_grant1;		/* PCI_GRANT1 pad ctrl reg */ +	u32	io_control_pci_req1;		/* PCI_REQ1 pad ctrl reg */ +	u32	io_control_pci_grant0;		/* PCI_GRANT0 pad ctrl reg */ +	u32	io_control_pci_req0;		/* PCI_REQ0 pad ctrl reg */ +	u32	io_control_pci_inta;		/* PCI_INTA pad ctrl reg */ +	u32	io_control_pci_clk;		/* PCI_CLK pad ctrl reg */ +	u32	io_control_pci_rst;		/* PCI_RST- pad ctrl reg */ +	u32	io_control_pci_frame;		/* PCI_FRAME pad ctrl reg */ +	u32	io_control_pci_idsel;		/* PCI_IDSEL pad ctrl reg */ +	u32	io_control_pci_devsel;		/* PCI_DEVSEL pad ctrl reg */ +	u32	io_control_pci_irdy;		/* PCI_IRDY pad ctrl reg */ +	u32	io_control_pci_trdy;		/* PCI_TRDY pad ctrl reg */ +	u32	io_control_pci_stop;		/* PCI_STOP pad ctrl reg */ +	u32	io_control_pci_par;		/* PCI_PAR pad ctrl reg */ +	u32	io_control_pci_perr;		/* PCI_PERR pad ctrl reg */ +	u32	io_control_pci_serr;		/* PCI_SERR pad ctrl reg */ +	u32	io_control_spdif_txclk;		/* SPDIF_TXCLK pad ctrl reg */ +	u32	io_control_spdif_tx;		/* SPDIF_TX pad ctrl reg */ +	u32	io_control_spdif_rx;		/* SPDIF_RX pad ctrl reg */ +	u32	io_control_i2c0_scl;		/* I2C0_SCL pad ctrl reg */ +	u32	io_control_i2c0_sda;		/* I2C0_SDA pad ctrl reg */ +	u32	io_control_i2c1_scl;		/* I2C1_SCL pad ctrl reg */ +	u32	io_control_i2c1_sda;		/* I2C1_SDA pad ctrl reg */ +	u32	io_control_i2c2_scl;		/* I2C2_SCL pad ctrl reg */ +	u32	io_control_i2c2_sda;		/* I2C2_SDA pad ctrl reg */ +	u32	io_control_irq0;		/* IRQ0 pad ctrl reg */ +	u32	io_control_irq1;		/* IRQ1 pad ctrl reg */ +	u32	io_control_can1_tx;		/* CAN1_TX pad ctrl reg */ +	u32	io_control_can2_tx;		/* CAN2_TX pad ctrl reg */ +	u32	io_control_j1850_tx;		/* J1850_TX pad ctrl reg */ +	u32	io_control_j1850_rx;		/* J1850_RX pad ctrl reg */ +	u32	io_control_psc_mclk_in;		/* PSC_MCLK_IN pad ctrl reg */ +	u32	io_control_psc0_0;		/* PSC0_0 pad ctrl reg */ +	u32	io_control_psc0_1;		/* PSC0_1 pad ctrl reg */ +	u32	io_control_psc0_2;		/* PSC0_2 pad ctrl reg */ +	u32	io_control_psc0_3;		/* PSC0_3 pad ctrl reg */ +	u32	io_control_psc0_4;		/* PSC0_4 pad ctrl reg */ +	u32	io_control_psc1_0;		/* PSC1_0 pad ctrl reg */ +	u32	io_control_psc1_1;		/* PSC1_1 pad ctrl reg */ +	u32	io_control_psc1_2;		/* PSC1_2 pad ctrl reg */ +	u32	io_control_psc1_3;		/* PSC1_3 pad ctrl reg */ +	u32	io_control_psc1_4;		/* PSC1_4 pad ctrl reg */ +	u32	io_control_psc2_0;		/* PSC2_0 pad ctrl reg */ +	u32	io_control_psc2_1;		/* PSC2_1 pad ctrl reg */ +	u32	io_control_psc2_2;		/* PSC2_2 pad ctrl reg */ +	u32	io_control_psc2_3;		/* PSC2_3 pad ctrl reg */ +	u32	io_control_psc2_4;		/* PSC2_4 pad ctrl reg */ +	u32	io_control_psc3_0;		/* PSC3_0 pad ctrl reg */ +	u32	io_control_psc3_1;		/* PSC3_1 pad ctrl reg */ +	u32	io_control_psc3_2;		/* PSC3_2 pad ctrl reg */ +	u32	io_control_psc3_3;		/* PSC3_3 pad ctrl reg */ +	u32	io_control_psc3_4;		/* PSC3_4 pad ctrl reg */ +	u32	io_control_psc4_0;		/* PSC4_0 pad ctrl reg */ +	u32	io_control_psc4_1;		/* PSC4_1 pad ctrl reg */ +	u32	io_control_psc4_2;		/* PSC4_2 pad ctrl reg */ +	u32	io_control_psc4_3;		/* PSC4_3 pad ctrl reg */ +	u32	io_control_psc4_4;		/* PSC4_4 pad ctrl reg */ +	u32	io_control_psc5_0;		/* PSC5_0 pad ctrl reg */ +	u32	io_control_psc5_1;		/* PSC5_1 pad ctrl reg */ +	u32	io_control_psc5_2;		/* PSC5_2 pad ctrl reg */ +	u32	io_control_psc5_3;		/* PSC5_3 pad ctrl reg */ +	u32	io_control_psc5_4;		/* PSC5_4 pad ctrl reg */ +	u32	io_control_psc6_0;		/* PSC6_0 pad ctrl reg */ +	u32	io_control_psc6_1;		/* PSC6_1 pad ctrl reg */ +	u32	io_control_psc6_2;		/* PSC6_2 pad ctrl reg */ +	u32	io_control_psc6_3;		/* PSC6_3 pad ctrl reg */ +	u32	io_control_psc6_4;		/* PSC6_4 pad ctrl reg */ +	u32	io_control_psc7_0;		/* PSC7_0 pad ctrl reg */ +	u32	io_control_psc7_1;		/* PSC7_1 pad ctrl reg */ +	u32	io_control_psc7_2;		/* PSC7_2 pad ctrl reg */ +	u32	io_control_psc7_3;		/* PSC7_3 pad ctrl reg */ +	u32	io_control_psc7_4;		/* PSC7_4 pad ctrl reg */ +	u32	io_control_psc8_0;		/* PSC8_0 pad ctrl reg */ +	u32	io_control_psc8_1;		/* PSC8_1 pad ctrl reg */ +	u32	io_control_psc8_2;		/* PSC8_2 pad ctrl reg */ +	u32	io_control_psc8_3;		/* PSC8_3 pad ctrl reg */ +	u32	io_control_psc8_4;		/* PSC8_4 pad ctrl reg */ +	u32	io_control_psc9_0;		/* PSC9_0 pad ctrl reg */ +	u32	io_control_psc9_1;		/* PSC9_1 pad ctrl reg */ +	u32	io_control_psc9_2;		/* PSC9_2 pad ctrl reg */ +	u32	io_control_psc9_3;		/* PSC9_3 pad ctrl reg */ +	u32	io_control_psc9_4;		/* PSC9_4 pad ctrl reg */ +	u32	io_control_psc10_0;		/* PSC10_0 pad ctrl reg */ +	u32	io_control_psc10_1;		/* PSC10_1 pad ctrl reg */ +	u32	io_control_psc10_2;		/* PSC10_2 pad ctrl reg */ +	u32	io_control_psc10_3;		/* PSC10_3 pad ctrl reg */ +	u32	io_control_psc10_4;		/* PSC10_4 pad ctrl reg */ +	u32	io_control_psc11_0;		/* PSC11_0 pad ctrl reg */ +	u32	io_control_psc11_1;		/* PSC11_1 pad ctrl reg */ +	u32	io_control_psc11_2;		/* PSC11_2 pad ctrl reg */ +	u32	io_control_psc11_3;		/* PSC11_3 pad ctrl reg */ +	u32	io_control_psc11_4;		/* PSC11_4 pad ctrl reg */ +	u32	io_control_ckstp_out;		/* CKSTP_OUT pad ctrl reg */ +	u32	io_control_usb_phy_drvvbus;	/* USB2_DRVVBUS pad ctrl reg */ +	u8	reserved[0x0cfc];		/* fill to 4096 bytes size */ +} ioctrl512x_t; + +/* IO pin fields */ +#define IO_PIN_FMUX(v)	((v) << 7)	/* pin function */ +#define IO_PIN_HOLD(v)	((v) << 5)	/* hold time, pci only */ +#define IO_PIN_PUD(v)	((v) << 4)	/* if PUE, 0=pull-down, 1=pull-up */ +#define IO_PIN_PUE(v)	((v) << 3)	/* pull up/down enable */ +#define IO_PIN_ST(v)	((v) << 2)	/* schmitt trigger */ +#define IO_PIN_DS(v)	((v))		/* slew rate */ + +typedef struct iopin_t { +	int p_offset;		/* offset from IOCTL_MEM_OFFSET */ +	int nr_pins;		/* number of pins to set this way */ +	int bit_or;		/* or in the value instead of overwrite */ +	u_long val;		/* value to write or or */ +}iopin_t; + +void iopin_initialize(iopin_t *,int); + +/* + * support to adjust individual parts of the IO pin setup + */ + +#define IO_PIN_OVER_EACH	(1 << 0) /* for compatibility */ +#define IO_PIN_OVER_FMUX	(1 << 1) +#define IO_PIN_OVER_HOLD	(1 << 2) +#define IO_PIN_OVER_PULL	(1 << 3) +#define IO_PIN_OVER_STRIG	(1 << 4) +#define IO_PIN_OVER_DRVSTR	(1 << 5) + +void iopin_initialize_bits(iopin_t *, int); + +/* + * IIM + */ +typedef struct iim512x { +	u32 stat;		/* IIM status register */ +	u32 statm;		/* IIM status IRQ mask */ +	u32 err;		/* IIM errors register */ +	u32 emask;		/* IIM error IRQ mask  */ +	u32 fctl;		/* IIM fuse control register */ +	u32 ua;			/* IIM upper address register */ +	u32 la;			/* IIM lower address register */ +	u32 sdat;		/* IIM explicit sense data */ +	u8 res0[0x08]; +	u32 prg_p;		/* IIM program protection register */ +	u8 res1[0x10]; +	u32 divide;		/* IIM divide factor register */ +	u8 res2[0x7c0]; +	u32 fbac0;		/* IIM fuse bank 0 prot (for Freescale use) */ +	u32 fb0w0[0x1f];	/* IIM fuse bank 0 data (for Freescale use) */ +	u8 res3[0x380]; +	u32 fbac1;		/* IIM fuse bank 1 protection */ +	u32 fb1w1[0x01f];	/* IIM fuse bank 1 data */ +	u8 res4[0x380]; +} iim512x_t; + +/* + * LPC + */ +typedef struct lpc512x { +	u32	cs_cfg[8];	/* Chip Select N Configuration Registers +				   No dedicated entry for CS Boot as == CS0 */ +	u32	cs_cr;		/* Chip Select Control Register */ +	u32	cs_sr;		/* Chip Select Status Register */ +	u32	cs_bcr;		/* Chip Select Burst Control Register */ +	u32	cs_dccr;	/* Chip Select Deadcycle Control Register */ +	u32	cs_hccr;	/* Chip Select Holdcycle Control Register */ +	u32	altr;		/* Address Latch Timing Register */ +	u8	res0[0xc8]; +	u32	sclpc_psr;	/* SCLPC Packet Size Register */ +	u32	sclpc_sar;	/* SCLPC Start Address Register */ +	u32	sclpc_cr;	/* SCLPC Control Register */ +	u32	sclpc_er;	/* SCLPC Enable Register */ +	u32	sclpc_nar;	/* SCLPC NextAddress Register */ +	u32	sclpc_sr;	/* SCLPC Status Register */ +	u32	sclpc_bdr;	/* SCLPC Bytes Done Register */ +	u32	emb_scr;	/* EMB Share Counter Register */ +	u32	emb_pcr;	/* EMB Pause Control Register */ +	u8	res1[0x1c]; +	u32	lpc_fdwr;	/* LPC RX/TX FIFO Data Word Register */ +	u32	lpc_fsr;	/* LPC RX/TX FIFO Status Register */ +	u32	lpc_cr;		/* LPC RX/TX FIFO Control Register */ +	u32	lpc_ar;		/* LPC RX/TX FIFO Alarm Register */ +	u8	res2[0xb0]; +} lpc512x_t; + +/* + * PATA + */ +typedef struct pata512x { +	/* LOCAL Registers */ +	u32 pata_time1;		/* Time register 1: PIO and tx timing parameter */ +	u32 pata_time2;		/* Time register 2: PIO timing parameter */ +	u32 pata_time3;		/* Time register 3: PIO and MDMA timing parameter */ +	u32 pata_time4;		/* Time register 4: MDMA and UDMA timing parameter */ +	u32 pata_time5;		/* Time register 5: UDMA timing parameter */ +	u32 pata_time6;		/* Time register 6: UDMA timing parameter */ +	u32 pata_fifo_data32;   /* 32bit wide dataport to/from FIFO */ +	u32 pata_fifo_data16;   /* 16bit wide dataport to/from FIFO */ +	u32 pata_fifo_fill;	/* FIFO filling in halfwords (READONLY)*/ +	u32 pata_ata_control;   /* ATA Interface control register */ +	u32 pata_irq_pending;   /* Interrupt pending register (READONLY) */ +	u32 pata_irq_enable;	/* Interrupt enable register */ +	u32 pata_irq_clear;	/* Interrupt clear register (WRITEONLY)*/ +	u32 pata_fifo_alarm;	/* fifo alarm threshold */ +	u32 res1[0x1A]; +	/* DRIVE Registers */ +	u32 pata_drive_data;	/* drive data register*/ +	u32 pata_drive_features;/* drive features register */ +	u32 pata_drive_sectcnt; /* drive sector count register */ +	u32 pata_drive_sectnum; /* drive sector number register */ +	u32 pata_drive_cyllow;  /* drive cylinder low register */ +	u32 pata_drive_cylhigh; /* drive cylinder high register */ +	u32 pata_drive_dev_head;/* drive device head register */ +	u32 pata_drive_command; /* write = drive command, read = drive status reg */ +	u32 res2[0x06]; +	u32 pata_drive_alt_stat;/* write = drive control, read = drive alt status reg */ +	u32 res3[0x09]; +} pata512x_t; + +/* + * PSC + */ +typedef struct psc512x { +	volatile u8	mode;		/* PSC + 0x00 */ +	volatile u8	res0[3]; +	union {				/* PSC + 0x04 */ +		volatile u16	status; +		volatile u16	clock_select; +	} sr_csr; +#define psc_status	sr_csr.status +#define psc_clock_select sr_csr.clock_select +	volatile u16	res1; +	volatile u8	command;	/* PSC + 0x08 */ +	volatile u8	res2[3]; +	union {				/* PSC + 0x0c */ +		volatile u8	buffer_8; +		volatile u16	buffer_16; +		volatile u32	buffer_32; +	} buffer; +#define psc_buffer_8	buffer.buffer_8 +#define psc_buffer_16	buffer.buffer_16 +#define psc_buffer_32	buffer.buffer_32 +	union {				/* PSC + 0x10 */ +		volatile u8	ipcr; +		volatile u8	acr; +	} ipcr_acr; +#define psc_ipcr	ipcr_acr.ipcr +#define psc_acr		ipcr_acr.acr +	volatile u8	res3[3]; +	union {				/* PSC + 0x14 */ +		volatile u16	isr; +		volatile u16	imr; +	} isr_imr; +#define psc_isr		isr_imr.isr +#define psc_imr		isr_imr.imr +	volatile u16	res4; +	volatile u8	ctur;		/* PSC + 0x18 */ +	volatile u8	res5[3]; +	volatile u8	ctlr;		/* PSC + 0x1c */ +	volatile u8	res6[3]; +	volatile u32	ccr;		/* PSC + 0x20 */ +	volatile u8	res7[12]; +	volatile u8	ivr;		/* PSC + 0x30 */ +	volatile u8	res8[3]; +	volatile u8	ip;		/* PSC + 0x34 */ +	volatile u8	res9[3]; +	volatile u8	op1;		/* PSC + 0x38 */ +	volatile u8	res10[3]; +	volatile u8	op0;		/* PSC + 0x3c */ +	volatile u8	res11[3]; +	volatile u32	sicr;		/* PSC + 0x40 */ +	volatile u8	res12[60]; +	volatile u32	tfcmd;		/* PSC + 0x80 */ +	volatile u32	tfalarm;	/* PSC + 0x84 */ +	volatile u32	tfstat;		/* PSC + 0x88 */ +	volatile u32	tfintstat;	/* PSC + 0x8C */ +	volatile u32	tfintmask;	/* PSC + 0x90 */ +	volatile u32	tfcount;	/* PSC + 0x94 */ +	volatile u16	tfwptr;		/* PSC + 0x98 */ +	volatile u16	tfrptr;		/* PSC + 0x9A */ +	volatile u32	tfsize;		/* PSC + 0x9C */ +	volatile u8	res13[28]; +	union {				/* PSC + 0xBC */ +		volatile u8	buffer_8; +		volatile u16	buffer_16; +		volatile u32	buffer_32; +	} tfdata_buffer; +#define tfdata_8	tfdata_buffer.buffer_8 +#define tfdata_16	tfdata_buffer.buffer_16 +#define tfdata_32	tfdata_buffer.buffer_32 + +	volatile u32	rfcmd;		/* PSC + 0xC0 */ +	volatile u32	rfalarm;	/* PSC + 0xC4 */ +	volatile u32	rfstat;		/* PSC + 0xC8 */ +	volatile u32	rfintstat;	/* PSC + 0xCC */ +	volatile u32	rfintmask;	/* PSC + 0xD0 */ +	volatile u32	rfcount;	/* PSC + 0xD4 */ +	volatile u16	rfwptr;		/* PSC + 0xD8 */ +	volatile u16	rfrptr;		/* PSC + 0xDA */ +	volatile u32	rfsize;		/* PSC + 0xDC */ +	volatile u8	res18[28]; +	union {				/* PSC + 0xFC */ +		volatile u8	buffer_8; +		volatile u16	buffer_16; +		volatile u32	buffer_32; +	} rfdata_buffer; +#define rfdata_8	rfdata_buffer.buffer_8 +#define rfdata_16	rfdata_buffer.buffer_16 +#define rfdata_32	rfdata_buffer.buffer_32 +} psc512x_t; + +/* PSC FIFO Command values */ +#define PSC_FIFO_RESET_SLICE		0x80 +#define PSC_FIFO_ENABLE_SLICE		0x01 + +/* PSC FIFO Controller Command values */ +#define FIFOC_ENABLE_CLOCK_GATE		0x01 +#define FIFOC_DISABLE_CLOCK_GATE	0x00 + +/* PSC FIFO status */ +#define PSC_FIFO_EMPTY			0x01 + +/* PSC Command values */ +#define PSC_RX_ENABLE		0x01 +#define PSC_RX_DISABLE		0x02 +#define PSC_TX_ENABLE		0x04 +#define PSC_TX_DISABLE		0x08 +#define PSC_SEL_MODE_REG_1	0x10 +#define PSC_RST_RX		0x20 +#define PSC_RST_TX		0x30 +#define PSC_RST_ERR_STAT	0x40 +#define PSC_RST_BRK_CHG_INT	0x50 +#define PSC_START_BRK		0x60 +#define PSC_STOP_BRK		0x70 + +/* PSC status register bits */ +#define PSC_SR_CDE		0x0080 +#define PSC_SR_TXEMP		0x0800 +#define PSC_SR_OE		0x1000 +#define PSC_SR_PE		0x2000 +#define PSC_SR_FE		0x4000 +#define PSC_SR_RB		0x8000 + +/* PSC mode fields */ +#define PSC_MODE_5_BITS		0x00 +#define PSC_MODE_6_BITS		0x01 +#define PSC_MODE_7_BITS		0x02 +#define PSC_MODE_8_BITS		0x03 +#define PSC_MODE_PAREVEN	0x00 +#define PSC_MODE_PARODD		0x04 +#define PSC_MODE_PARFORCE	0x08 +#define PSC_MODE_PARNONE	0x10 +#define PSC_MODE_ENTIMEOUT	0x20 +#define PSC_MODE_RXRTS		0x80 +#define PSC_MODE_1_STOPBIT	0x07 + +/* + * FIFOC + */ +typedef struct fifoc512x { +	u32 fifoc_cmd; +	u32 fifoc_int; +	u32 fifoc_dma; +	u32 fifoc_axe; +	u32 fifoc_debug; +	u8 fixme[0xEC]; +} fifoc512x_t; + +/* + * Centralized FIFO Controller has internal memory for all 12 PSCs FIFOs + * + * NOTE: individual PSC units are free to use whatever area (and size) of the + * FIFOC internal memory, so make sure memory areas for FIFO slices used by + * different PSCs do not overlap! + * + * Overall size of FIFOC memory is not documented in the MPC5121e RM, but + * tests indicate that it is 1024 words total. + * + * *_TX_SIZE and *_RX_SIZE is the number of 4-byte words for FIFO slice. + */ +#define FIFOC_PSC0_TX_SIZE	0x04 +#define FIFOC_PSC0_TX_ADDR	0x0 +#define FIFOC_PSC0_RX_SIZE	0x04 +#define FIFOC_PSC0_RX_ADDR	0x10 + +#define FIFOC_PSC1_TX_SIZE	0x04 +#define FIFOC_PSC1_TX_ADDR	0x20 +#define FIFOC_PSC1_RX_SIZE	0x04 +#define FIFOC_PSC1_RX_ADDR	0x30 + +#define FIFOC_PSC2_TX_SIZE	0x04 +#define FIFOC_PSC2_TX_ADDR	0x40 +#define FIFOC_PSC2_RX_SIZE	0x04 +#define FIFOC_PSC2_RX_ADDR	0x50 + +#define FIFOC_PSC3_TX_SIZE	0x04 +#define FIFOC_PSC3_TX_ADDR	0x60 +#define FIFOC_PSC3_RX_SIZE	0x04 +#define FIFOC_PSC3_RX_ADDR	0x70 + +#define FIFOC_PSC4_TX_SIZE	0x04 +#define FIFOC_PSC4_TX_ADDR	0x80 +#define FIFOC_PSC4_RX_SIZE	0x04 +#define FIFOC_PSC4_RX_ADDR	0x90 + +#define FIFOC_PSC5_TX_SIZE	0x04 +#define FIFOC_PSC5_TX_ADDR	0xa0 +#define FIFOC_PSC5_RX_SIZE	0x04 +#define FIFOC_PSC5_RX_ADDR	0xb0 + +#define FIFOC_PSC6_TX_SIZE	0x04 +#define FIFOC_PSC6_TX_ADDR	0xc0 +#define FIFOC_PSC6_RX_SIZE	0x04 +#define FIFOC_PSC6_RX_ADDR	0xd0 + +#define FIFOC_PSC7_TX_SIZE	0x04 +#define FIFOC_PSC7_TX_ADDR	0xe0 +#define FIFOC_PSC7_RX_SIZE	0x04 +#define FIFOC_PSC7_RX_ADDR	0xf0 + +#define FIFOC_PSC8_TX_SIZE	0x04 +#define FIFOC_PSC8_TX_ADDR	0x100 +#define FIFOC_PSC8_RX_SIZE	0x04 +#define FIFOC_PSC8_RX_ADDR	0x110 + +#define FIFOC_PSC9_TX_SIZE	0x04 +#define FIFOC_PSC9_TX_ADDR	0x120 +#define FIFOC_PSC9_RX_SIZE	0x04 +#define FIFOC_PSC9_RX_ADDR	0x130 + +#define FIFOC_PSC10_TX_SIZE	0x04 +#define FIFOC_PSC10_TX_ADDR	0x140 +#define FIFOC_PSC10_RX_SIZE	0x04 +#define FIFOC_PSC10_RX_ADDR	0x150 + +#define FIFOC_PSC11_TX_SIZE	0x04 +#define FIFOC_PSC11_TX_ADDR	0x160 +#define FIFOC_PSC11_RX_SIZE	0x04 +#define FIFOC_PSC11_RX_ADDR	0x170 + +/* + * SATA + */ +typedef struct sata512x { +	u8 fixme[0x2000]; +} sata512x_t; + +typedef struct immap { +	sysconf512x_t		sysconf;	/* System configuration */ +	u8			res0[0x700]; +	wdt512x_t		wdt;		/* Watch Dog Timer (WDT) */ +	rtclk512x_t		rtc;		/* Real Time Clock Module */ +	gpt512x_t		gpt;		/* General Purpose Timer */ +	ipic512x_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter512x_t		arbiter;	/* CSB Arbiter */ +	reset512x_t		reset;		/* Reset Module */ +	clk512x_t		clk;		/* Clock Module */ +	pmc512x_t		pmc;		/* Power Management Control Module */ +	gpio512x_t		gpio;		/* General purpose I/O module */ +	u8			res1[0x100]; +	mscan512x_t		mscan;		/* MSCAN */ +	bdlc512x_t		bdlc;		/* BDLC */ +	sdhc512x_t		sdhc;		/* SDHC */ +	spdif512x_t		spdif;		/* SPDIF */ +	i2c512x_t		i2c;		/* I2C Controllers */ +	u8			res2[0x800]; +	axe512x_t		axe;		/* AXE */ +	diu512x_t		diu;		/* Display Interface Unit */ +	cfm512x_t		cfm;		/* Clock Frequency Measurement */ +	u8			res3[0x500]; +	fec512x_t		fec;		/* Fast Ethernet Controller */ +	ulpi512x_t		ulpi;		/* USB ULPI */ +	u8			res4[0xa00]; +	utmi512x_t		utmi;		/* USB UTMI */ +	u8			res5[0x1000]; +	pcidma512x_t		pci_dma;	/* PCI DMA */ +	pciconf512x_t		pci_conf;	/* PCI Configuration */ +	u8			res6[0x80]; +	ios512x_t		ios;		/* PCI Sequencer */ +	pcictrl512x_t		pci_ctrl;	/* PCI Controller Control and Status */ +	u8			res7[0xa00]; +	ddr512x_t		mddrc;		/* Multi-port DDR Memory Controller */ +	ioctrl512x_t		io_ctrl;	/* IO Control */ +	iim512x_t		iim;		/* IC Identification module */ +	u8			res8[0x4000]; +	lpc512x_t		lpc;		/* LocalPlus Controller */ +	pata512x_t		pata;		/* Parallel ATA */ +	u8			res9[0xd00]; +	psc512x_t		psc[12];	/* PSCs */ +	u8			res10[0x300]; +	fifoc512x_t		fifoc;		/* FIFO Controller */ +	u8			res11[0x2000]; +	dma512x_t		dma;		/* DMA */ +	u8			res12[0xa800]; +	sata512x_t		sata;		/* Serial ATA */ +	u8			res13[0xde000]; +} immap_t; + +/* provide interface to get PATA base address */ +static inline u32 get_pata_base (void) +{ +	volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR; +	return (u32)(&im->pata); +} +#endif	/* __ASSEMBLY__ */ + +#define CONFIG_SYS_MPC512x_USB1_OFFSET   0x4000 +#define CONFIG_SYS_MPC512x_USB1_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC512x_USB1_OFFSET) + +#define IIM_BASE_ADDR	(CONFIG_SYS_IMMR + offsetof(immap_t, iim)) + +#endif /* __IMMAP_512x__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_8260.h b/roms/u-boot/arch/powerpc/include/asm/immap_8260.h new file mode 100644 index 00000000..c7021a70 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_8260.h @@ -0,0 +1,604 @@ +/* + * MPC8260 Internal Memory Map + * Copyright (c) 1999 Dan Malek (dmalek@jlc.net) + * + * The Internal Memory Map of the 8260.	 I don't know how generic + * this will be, as I don't have any knowledge of the subsequent + * parts at this time.	I copied this from the 8xx_immap.h. + */ +#ifndef __IMMAP_82XX__ +#define __IMMAP_82XX__ + +/* System configuration registers. +*/ +typedef struct sys_conf { +	uint	sc_siumcr; +	uint	sc_sypcr; +	char	res1[6]; +	ushort	sc_swsr; +	char	res2[20]; +	uint	sc_bcr; +	u_char	sc_ppc_acr; +	char	res3[3]; +	uint	sc_ppc_alrh; +	uint	sc_ppc_alrl; +	u_char	sc_lcl_acr; +	char	res4[3]; +	uint	sc_lcl_alrh; +	uint	sc_lcl_alrl; +	uint	sc_tescr1; +	uint	sc_tescr2; +	uint	sc_ltescr1; +	uint	sc_ltescr2; +	uint	sc_pdtea; +	u_char	sc_pdtem; +	char	res5[3]; +	uint	sc_ldtea; +	u_char	sc_ldtem; +	char	res6[163]; +} sysconf8260_t; + + +/* Memory controller registers. +*/ +typedef struct	mem_ctlr { +	uint	memc_br0; +	uint	memc_or0; +	uint	memc_br1; +	uint	memc_or1; +	uint	memc_br2; +	uint	memc_or2; +	uint	memc_br3; +	uint	memc_or3; +	uint	memc_br4; +	uint	memc_or4; +	uint	memc_br5; +	uint	memc_or5; +	uint	memc_br6; +	uint	memc_or6; +	uint	memc_br7; +	uint	memc_or7; +	uint	memc_br8; +	uint	memc_or8; +	uint	memc_br9; +	uint	memc_or9; +	uint	memc_br10; +	uint	memc_or10; +	uint	memc_br11; +	uint	memc_or11; +	char	res1[8]; +	uint	memc_mar; +	char	res2[4]; +	uint	memc_mamr; +	uint	memc_mbmr; +	uint	memc_mcmr; +	char	res3[8]; +	ushort	memc_mptpr; +	char	res4[2]; +	uint	memc_mdr; +	char	res5[4]; +	uint	memc_psdmr; +	uint	memc_lsdmr; +	u_char	memc_purt; +	char	res6[3]; +	u_char	memc_psrt; +	char	res7[3]; +	u_char	memc_lurt; +	char	res8[3]; +	u_char	memc_lsrt; +	char	res9[3]; +	uint	memc_immr; +	uint	memc_pcibr0; +	uint	memc_pcibr1; +	char	res10[16]; +	uint	memc_pcimsk0; +	uint	memc_pcimsk1; +	char	res11[52]; +} memctl8260_t; + +/* System Integration Timers. +*/ +typedef struct	sys_int_timers { +	char	res1[32]; +	ushort	sit_tmcntsc; +	char	res2[2]; +	uint	sit_tmcnt; +	char	res3[4]; +	uint	sit_tmcntal; +	char	res4[16]; +	ushort	sit_piscr; +	char	res5[2]; +	uint	sit_pitc; +	uint	sit_pitr; +	char	res6[94]; +	char	res7[390]; +} sit8260_t; + +/* PCI + */ +typedef struct pci_config { +	uint	pci_omisr; +	uint	pci_ominr; +	char	res1[8]; +	uint	pci_ifqpr; +	uint	pci_ofqpr; +	char	res2[8]; +	uint	pci_imr0; +	uint	pci_imr1; +	uint	pci_omr0; +	uint	pci_omr1; +	uint	pci_odr; +	char	res3[4]; +	uint	pci_idr; +	char	res4[20]; +	uint	pci_imisr; +	uint	pci_imimr; +	char	res5[24]; +	uint	pci_ifhpr; +	char	res5_2[4]; +	uint	pci_iftpr; +	char	res6[4]; +	uint	pci_iphpr; +	char	res6_2[4]; +	uint	pci_iptpr; +	char	res7[4]; +	uint	pci_ofhpr; +	char	res7_2[4]; +	uint	pci_oftpr; +	char	res8[4]; +	uint	pci_ophpr; +	char	res8_2[4]; +	uint	pci_optpr; +	char	res9[8]; +	uint	pci_mucr; +	char	res10[8]; +	uint	pci_qbar; +	char	res11[12]; +	uint	pci_dmamr0; +	uint	pci_dmasr0; +	uint	pci_dmacdar0; +	char	res12[4]; +	uint	pci_dmasar0; +	char	res13[4]; +	uint	pci_dmadar0; +	char	res14[4]; +	uint	pci_dmabcr0; +	uint	pci_dmandar0; +	char	res15[88]; +	uint	pci_dmamr1; +	uint	pci_dmasr1; +	uint	pci_dmacdar1; +	char	res16[4]; +	uint	pci_dmasar1; +	char	res17[4]; +	uint	pci_dmadar1; +	char	res18[4]; +	uint	pci_dmabcr1; +	uint	pci_dmandar1; +	char	res19[88]; +	uint	pci_dmamr2; +	uint	pci_dmasr2; +	uint	pci_dmacdar2; +	char	res20[4]; +	uint	pci_dmasar2; +	char	res21[4]; +	uint	pci_dmadar2; +	char	res22[4]; +	uint	pci_dmabcr2; +	uint	pci_dmandar2; +	char	res23[88]; +	uint	pci_dmamr3; +	uint	pci_dmasr3; +	uint	pci_dmacdar3; +	char	res24[4]; +	uint	pci_dmasar3; +	char	res25[4]; +	uint	pci_dmadar3; +	char	res26[4]; +	uint	pci_dmabcr3; +	uint	pci_dmandar3; +	char	res27[344]; +	uint	pci_potar0; +	char	res28[4]; +	uint	pci_pobar0; +	char	res29[4]; +	uint	pci_pocmr0; +	char	res30[4]; +	uint	pci_potar1; +	char	res31[4]; +	uint	pci_pobar1; +	char	res32[4]; +	uint	pci_pocmr1; +	char	res33[4]; +	uint	pci_potar2; +	char	res34[4]; +	uint	pci_pobar2; +	char	res35[4]; +	uint	pci_pocmr2; +	char	res36[52]; +	uint	pci_ptcr; +	uint	pci_gpcr; +	uint	pci_gcr; +	uint	pci_esr; +	uint	pci_emr; +	uint	pci_ecr; +	uint	pci_eacr; +	char	res37[4]; +	uint	pci_edcr; +	char	res38[4]; +	uint	pci_eccr; +	char	res39[44]; +	uint	pci_pitar1; +	char	res40[4]; +	uint	pci_pibar1; +	char	res41[4]; +	uint	pci_picmr1; +	char	res42[4]; +	uint	pci_pitar0; +	char	res43[4]; +	uint	pci_pibar0; +	char	res44[4]; +	uint	pci_picmr0; +	char	res45[4]; +	uint	pci_cfg_addr; +	uint	pci_cfg_data; +	uint	pci_int_ack; +	char	res46[756]; +}pci8260_t; +#define PISCR_PIRQ_MASK		((ushort)0xff00) +#define PISCR_PS		((ushort)0x0080) +#define PISCR_PIE		((ushort)0x0004) +#define PISCR_PTF		((ushort)0x0002) +#define PISCR_PTE		((ushort)0x0001) + +/* Interrupt Controller. +*/ +typedef struct interrupt_controller { +	ushort	ic_sicr; +	char	res1[2]; +	uint	ic_sivec; +	uint	ic_sipnrh; +	uint	ic_sipnrl; +	uint	ic_siprr; +	uint	ic_scprrh; +	uint	ic_scprrl; +	uint	ic_simrh; +	uint	ic_simrl; +	uint	ic_siexr; +	char	res2[88]; +} intctl8260_t; + +/* Clocks and Reset. +*/ +typedef struct clk_and_reset { +	uint	car_sccr; +	char	res1[4]; +	uint	car_scmr; +	char	res2[4]; +	uint	car_rsr; +	uint	car_rmr; +	char	res[104]; +} car8260_t; + +/* Input/Output Port control/status registers. + * Names consistent with processor manual, although they are different + * from the original 8xx names....... + */ +typedef struct io_port { +	uint	iop_pdira; +	uint	iop_ppara; +	uint	iop_psora; +	uint	iop_podra; +	uint	iop_pdata; +	char	res1[12]; +	uint	iop_pdirb; +	uint	iop_pparb; +	uint	iop_psorb; +	uint	iop_podrb; +	uint	iop_pdatb; +	char	res2[12]; +	uint	iop_pdirc; +	uint	iop_pparc; +	uint	iop_psorc; +	uint	iop_podrc; +	uint	iop_pdatc; +	char	res3[12]; +	uint	iop_pdird; +	uint	iop_ppard; +	uint	iop_psord; +	uint	iop_podrd; +	uint	iop_pdatd; +	char	res4[12]; +} iop8260_t; + +/* Communication Processor Module Timers +*/ +typedef struct cpm_timers { +	u_char	cpmt_tgcr1; +	char	res1[3]; +	u_char	cpmt_tgcr2; +	char	res2[11]; +	ushort	cpmt_tmr1; +	ushort	cpmt_tmr2; +	ushort	cpmt_trr1; +	ushort	cpmt_trr2; +	ushort	cpmt_tcr1; +	ushort	cpmt_tcr2; +	ushort	cpmt_tcn1; +	ushort	cpmt_tcn2; +	ushort	cpmt_tmr3; +	ushort	cpmt_tmr4; +	ushort	cpmt_trr3; +	ushort	cpmt_trr4; +	ushort	cpmt_tcr3; +	ushort	cpmt_tcr4; +	ushort	cpmt_tcn3; +	ushort	cpmt_tcn4; +	ushort	cpmt_ter1; +	ushort	cpmt_ter2; +	ushort	cpmt_ter3; +	ushort	cpmt_ter4; +	char	res3[584]; +} cpmtimer8260_t; + +/* DMA control/status registers. +*/ +typedef struct sdma_csr { +	char	res0[24]; +	u_char	sdma_sdsr; +	char	res1[3]; +	u_char	sdma_sdmr; +	char	res2[3]; +	u_char	sdma_idsr1; +	char	res3[3]; +	u_char	sdma_idmr1; +	char	res4[3]; +	u_char	sdma_idsr2; +	char	res5[3]; +	u_char	sdma_idmr2; +	char	res6[3]; +	u_char	sdma_idsr3; +	char	res7[3]; +	u_char	sdma_idmr3; +	char	res8[3]; +	u_char	sdma_idsr4; +	char	res9[3]; +	u_char	sdma_idmr4; +	char	res10[707]; +} sdma8260_t; + +/* Fast controllers +*/ +typedef struct fcc { +	uint	fcc_gfmr; +	uint	fcc_fpsmr; +	ushort	fcc_ftodr; +	char	res1[2]; +	ushort	fcc_fdsr; +	char	res2[2]; +	ushort	fcc_fcce; +	char	res3[2]; +	ushort	fcc_fccm; +	char	res4[2]; +	u_char	fcc_fccs; +	char	res5[3]; +	u_char	fcc_ftirr_phy[4]; +} fcc_t; + +/* Fast controllers continued + */ +typedef struct fcc_c { +	uint	fcc_firper; +	uint	fcc_firer; +	uint	fcc_firsr_hi; +	uint	fcc_firsr_lo; +	u_char	fcc_gfemr; +	char	res1[15]; +} fcc_c_t; + +/* TC Layer + */ +typedef struct tclayer { +	ushort	tc_tcmode; +	ushort	tc_cdsmr; +	ushort	tc_tcer; +	ushort	tc_rcc; +	ushort	tc_tcmr; +	ushort	tc_fcc; +	ushort	tc_ccc; +	ushort	tc_icc; +	ushort	tc_tcc; +	ushort	tc_ecc; +	char	res1[12]; +} tclayer_t; + +/* I2C +*/ +typedef struct i2c { +	u_char	i2c_i2mod; +	char	res1[3]; +	u_char	i2c_i2add; +	char	res2[3]; +	u_char	i2c_i2brg; +	char	res3[3]; +	u_char	i2c_i2com; +	char	res4[3]; +	u_char	i2c_i2cer; +	char	res5[3]; +	u_char	i2c_i2cmr; +	char	res6[331]; +} i2c8260_t; + +typedef struct scc {		/* Serial communication channels */ +	uint	scc_gsmrl; +	uint	scc_gsmrh; +	ushort	scc_psmr; +	char	res1[2]; +	ushort	scc_todr; +	ushort	scc_dsr; +	ushort	scc_scce; +	char	res2[2]; +	ushort	scc_sccm; +	char	res3; +	u_char	scc_sccs; +	char	res4[8]; +} scc_t; + +typedef struct smc {		/* Serial management channels */ +	char	res1[2]; +	ushort	smc_smcmr; +	char	res2[2]; +	u_char	smc_smce; +	char	res3[3]; +	u_char	smc_smcm; +	char	res4[5]; +} smc_t; + +/* Serial Peripheral Interface. +*/ +typedef struct im_spi { +	ushort	spi_spmode; +	char	res1[4]; +	u_char	spi_spie; +	char	res2[3]; +	u_char	spi_spim; +	char	res3[2]; +	u_char	spi_spcom; +	char	res4[82]; +} im_spi_t; + +/* CPM Mux. +*/ +typedef struct cpmux { +	u_char	cmx_si1cr; +	char	res1; +	u_char	cmx_si2cr; +	char	res2; +	uint	cmx_fcr; +	uint	cmx_scr; +	u_char	cmx_smr; +	char	res3; +	ushort	cmx_uar; +	char	res4[16]; +} cpmux_t; + +/* SIRAM control +*/ +typedef struct siram { +	ushort	si_amr; +	ushort	si_bmr; +	ushort	si_cmr; +	ushort	si_dmr; +	u_char	si_gmr; +	char	res1; +	u_char	si_cmdr; +	char	res2; +	u_char	si_str; +	char	res3; +	ushort	si_rsr; +} siramctl_t; + +typedef struct mcc { +	ushort	mcc_mcce; +	char	res1[2]; +	ushort	mcc_mccm; +	char	res2[2]; +	u_char	mcc_mccf; +	char	res3[7]; +} mcc_t; + +typedef struct comm_proc { +	uint	cp_cpcr; +	uint	cp_rccr; +	char	res1[14]; +	ushort	cp_rter; +	char	res2[2]; +	ushort	cp_rtmr; +	ushort	cp_rtscr; +	char	res3[2]; +	uint	cp_rtsr; +	char	res4[12]; +} cpm8260_t; + +/* ...and the whole thing wrapped up.... +*/ +typedef struct immap { +	/* Some references are into the unique and known dpram spaces, +	 * others are from the generic base. +	 */ +	union { +		struct { +			u_char		im_dpram1[16 * 1024]; +			char		res1[16 * 1024]; +			u_char		im_dpram2[4 * 1024]; +			char		res2[8 * 1024]; +			u_char		im_dpram3[4 * 1024]; +			char		res3[16 * 1024]; +		}; +		u8	im_dprambase[64 * 1024]; +		u16	im_dprambase16[32 * 1024]; +	}; + +	sysconf8260_t	im_siu_conf;	/* SIU Configuration */ +	memctl8260_t	im_memctl;	/* Memory Controller */ +	sit8260_t	im_sit;		/* System Integration Timers */ +	pci8260_t	im_pci;		/* PCI Configuration */ +	intctl8260_t	im_intctl;	/* Interrupt Controller */ +	car8260_t	im_clkrst;	/* Clocks and reset */ +	iop8260_t	im_ioport;	/* IO Port control/status */ +	cpmtimer8260_t	im_cpmtimer;	/* CPM timers */ +	sdma8260_t	im_sdma;	/* SDMA control/status */ + +	fcc_t		im_fcc[3];	/* Three FCCs */ + +	char		res4[32]; +	fcc_c_t		im_fcc_c[3];	/* Continued FCCs */ +	char		res4a[32]; + +	tclayer_t	im_tclayer[8];	/* Eight TCLayers */ +	ushort		tc_tcgsr; +	ushort		tc_tcger; + +	/* First set of baud rate generators. +	*/ +	char		res4b[236]; +	uint		im_brgc5; +	uint		im_brgc6; +	uint		im_brgc7; +	uint		im_brgc8; + +	char		res5[608]; + +	i2c8260_t	im_i2c;		/* I2C control/status */ +	cpm8260_t	im_cpm;		/* Communication processor */ + +	/* Second set of baud rate generators. +	*/ +	uint		im_brgc1; +	uint		im_brgc2; +	uint		im_brgc3; +	uint		im_brgc4; + +	scc_t		im_scc[4];	/* Four SCCs */ +	smc_t		im_smc[2];	/* Couple of SMCs */ +	im_spi_t	im_spi;		/* A SPI */ +	cpmux_t		im_cpmux;	/* CPM clock route mux */ +	siramctl_t	im_siramctl1;	/* First SI RAM Control */ +	mcc_t		im_mcc1;	/* First MCC */ +	siramctl_t	im_siramctl2;	/* Second SI RAM Control */ +	mcc_t		im_mcc2;	/* Second MCC */ + +	char		res6[1184]; + +	ushort		im_si1txram[256]; +	char		res7[512]; +	ushort		im_si1rxram[256]; +	char		res8[512]; +	ushort		im_si2txram[256]; +	char		res9[512]; +	ushort		im_si2rxram[256]; +	char		res10[512]; +	char		res11[4096]; +} immap_t; + +#endif /* __IMMAP_82XX__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_83xx.h b/roms/u-boot/arch/powerpc/include/asm/immap_83xx.h new file mode 100644 index 00000000..25184025 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_83xx.h @@ -0,0 +1,961 @@ +/* + * Copyright 2004-2011 Freescale Semiconductor, Inc. + * + * MPC83xx Internal Memory Map + * + * Contributors: + *	Dave Liu <daveliu@freescale.com> + *	Tanya Jiang <tanya.jiang@freescale.com> + *	Mandy Lavi <mandy.lavi@freescale.com> + *	Eran Liberty <liberty@freescale.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef __IMMAP_83xx__ +#define __IMMAP_83xx__ + +#include <fsl_immap.h> +#include <asm/types.h> +#include <asm/fsl_i2c.h> +#include <asm/mpc8xxx_spi.h> +#include <asm/fsl_lbc.h> +#include <asm/fsl_dma.h> + +/* + * Local Access Window + */ +typedef struct law83xx { +	u32 bar;		/* LBIU local access window base address register */ +	u32 ar;			/* LBIU local access window attribute register */ +} law83xx_t; + +/* + * System configuration registers + */ +typedef struct sysconf83xx { +	u32 immrbar;		/* Internal memory map base address register */ +	u8 res0[0x04]; +	u32 altcbar;		/* Alternate configuration base address register */ +	u8 res1[0x14]; +	law83xx_t lblaw[4];	/* LBIU local access window */ +	u8 res2[0x20]; +	law83xx_t pcilaw[2];	/* PCI local access window */ +	u8 res3[0x10]; +	law83xx_t pcielaw[2];	/* PCI Express local access window */ +	u8 res4[0x10]; +	law83xx_t ddrlaw[2];	/* DDR local access window */ +	u8 res5[0x50]; +	u32 sgprl;		/* System General Purpose Register Low */ +	u32 sgprh;		/* System General Purpose Register High */ +	u32 spridr;		/* System Part and Revision ID Register */ +	u8 res6[0x04]; +	u32 spcr;		/* System Priority Configuration Register */ +	u32 sicrl;		/* System I/O Configuration Register Low */ +	u32 sicrh;		/* System I/O Configuration Register High */ +	u8 res7[0x04]; +	u32 sidcr0;		/* System I/O Delay Configuration Register 0 */ +	u32 sidcr1;		/* System I/O Delay Configuration Register 1 */ +	u32 ddrcdr;		/* DDR Control Driver Register */ +	u32 ddrdsr;		/* DDR Debug Status Register */ +	u32 obir;		/* Output Buffer Impedance Register */ +	u8 res8[0xC]; +	u32 pecr1;		/* PCI Express control register 1 */ +#if defined(CONFIG_MPC830x) +	u32 sdhccr;		/* eSDHC Control Registers for MPC830x */ +#else +	u32 pecr2;		/* PCI Express control register 2 */ +#endif +#if defined(CONFIG_MPC8309) +	u32 can_dbg_ctrl; +	u32 res9a; +	u32 gpr1; +	u8 res9b[0xAC]; +#else +	u8 res9[0xB8]; +#endif +} sysconf83xx_t; + +/* + * Watch Dog Timer (WDT) Registers + */ +typedef struct wdt83xx { +	u8 res0[4]; +	u32 swcrr;		/* System watchdog control register */ +	u32 swcnr;		/* System watchdog count register */ +	u8 res1[2]; +	u16 swsrr;		/* System watchdog service register */ +	u8 res2[0xF0]; +} wdt83xx_t; + +/* + * RTC/PIT Module Registers + */ +typedef struct rtclk83xx { +	u32 cnr;		/* control register */ +	u32 ldr;		/* load register */ +	u32 psr;		/* prescale register */ +	u32 ctr;		/* counter value field register */ +	u32 evr;		/* event register */ +	u32 alr;		/* alarm register */ +	u8 res0[0xE8]; +} rtclk83xx_t; + +/* + * Global timer module + */ +typedef struct gtm83xx { +	u8 cfr1;		/* Timer1/2 Configuration */ +	u8 res0[3]; +	u8 cfr2;		/* Timer3/4 Configuration */ +	u8 res1[11]; +	u16 mdr1;		/* Timer1 Mode Register */ +	u16 mdr2;		/* Timer2 Mode Register */ +	u16 rfr1;		/* Timer1 Reference Register */ +	u16 rfr2;		/* Timer2 Reference Register */ +	u16 cpr1;		/* Timer1 Capture Register */ +	u16 cpr2;		/* Timer2 Capture Register */ +	u16 cnr1;		/* Timer1 Counter Register */ +	u16 cnr2;		/* Timer2 Counter Register */ +	u16 mdr3;		/* Timer3 Mode Register */ +	u16 mdr4;		/* Timer4 Mode Register */ +	u16 rfr3;		/* Timer3 Reference Register */ +	u16 rfr4;		/* Timer4 Reference Register */ +	u16 cpr3;		/* Timer3 Capture Register */ +	u16 cpr4;		/* Timer4 Capture Register */ +	u16 cnr3;		/* Timer3 Counter Register */ +	u16 cnr4;		/* Timer4 Counter Register */ +	u16 evr1;		/* Timer1 Event Register */ +	u16 evr2;		/* Timer2 Event Register */ +	u16 evr3;		/* Timer3 Event Register */ +	u16 evr4;		/* Timer4 Event Register */ +	u16 psr1;		/* Timer1 Prescaler Register */ +	u16 psr2;		/* Timer2 Prescaler Register */ +	u16 psr3;		/* Timer3 Prescaler Register */ +	u16 psr4;		/* Timer4 Prescaler Register */ +	u8 res[0xC0]; +} gtm83xx_t; + +/* + * Integrated Programmable Interrupt Controller + */ +typedef struct ipic83xx { +	u32 sicfr;		/* System Global Interrupt Configuration Register */ +	u32 sivcr;		/* System Global Interrupt Vector Register */ +	u32 sipnr_h;		/* System Internal Interrupt Pending Register - High */ +	u32 sipnr_l;		/* System Internal Interrupt Pending Register - Low */ +	u32 siprr_a;		/* System Internal Interrupt Group A Priority Register */ +	u32 siprr_b;		/* System Internal Interrupt Group B Priority Register */ +	u32 siprr_c;		/* System Internal Interrupt Group C Priority Register */ +	u32 siprr_d;		/* System Internal Interrupt Group D Priority Register */ +	u32 simsr_h;		/* System Internal Interrupt Mask Register - High */ +	u32 simsr_l;		/* System Internal Interrupt Mask Register - Low */ +	u32 sicnr;		/* System Internal Interrupt Control Register */ +	u32 sepnr;		/* System External Interrupt Pending Register */ +	u32 smprr_a;		/* System Mixed Interrupt Group A Priority Register */ +	u32 smprr_b;		/* System Mixed Interrupt Group B Priority Register */ +	u32 semsr;		/* System External Interrupt Mask Register */ +	u32 secnr;		/* System External Interrupt Control Register */ +	u32 sersr;		/* System Error Status Register */ +	u32 sermr;		/* System Error Mask Register */ +	u32 sercr;		/* System Error Control Register */ +	u32 sepcr;		/* System External Interrupt Polarity Control Register */ +	u32 sifcr_h;		/* System Internal Interrupt Force Register - High */ +	u32 sifcr_l;		/* System Internal Interrupt Force Register - Low */ +	u32 sefcr;		/* System External Interrupt Force Register */ +	u32 serfr;		/* System Error Force Register */ +	u32 scvcr;		/* System Critical Interrupt Vector Register */ +	u32 smvcr;		/* System Management Interrupt Vector Register */ +	u8 res[0x98]; +} ipic83xx_t; + +/* + * System Arbiter Registers + */ +typedef struct arbiter83xx { +	u32 acr;		/* Arbiter Configuration Register */ +	u32 atr;		/* Arbiter Timers Register */ +	u8 res[4]; +	u32 aer;		/* Arbiter Event Register */ +	u32 aidr;		/* Arbiter Interrupt Definition Register */ +	u32 amr;		/* Arbiter Mask Register */ +	u32 aeatr;		/* Arbiter Event Attributes Register */ +	u32 aeadr;		/* Arbiter Event Address Register */ +	u32 aerr;		/* Arbiter Event Response Register */ +	u8 res1[0xDC]; +} arbiter83xx_t; + +/* + * Reset Module + */ +typedef struct reset83xx { +	u32 rcwl;		/* Reset Configuration Word Low Register */ +	u32 rcwh;		/* Reset Configuration Word High Register */ +	u8 res0[8]; +	u32 rsr;		/* Reset Status Register */ +	u32 rmr;		/* Reset Mode Register */ +	u32 rpr;		/* Reset protection Register */ +	u32 rcr;		/* Reset Control Register */ +	u32 rcer;		/* Reset Control Enable Register */ +	u8 res1[0xDC]; +} reset83xx_t; + +/* + * Clock Module + */ +typedef struct clk83xx { +	u32 spmr;		/* system PLL mode Register */ +	u32 occr;		/* output clock control Register */ +	u32 sccr;		/* system clock control Register */ +	u8 res0[0xF4]; +} clk83xx_t; + +/* + * Power Management Control Module + */ +typedef struct pmc83xx { +	u32 pmccr;		/* PMC Configuration Register */ +	u32 pmcer;		/* PMC Event Register */ +	u32 pmcmr;		/* PMC Mask Register */ +	u32 pmccr1;		/* PMC Configuration Register 1 */ +	u32 pmccr2;		/* PMC Configuration Register 2 */ +	u8 res0[0xEC]; +} pmc83xx_t; + +/* + * General purpose I/O module + */ +typedef struct gpio83xx { +	u32 dir;		/* direction register */ +	u32 odr;		/* open drain register */ +	u32 dat;		/* data register */ +	u32 ier;		/* interrupt event register */ +	u32 imr;		/* interrupt mask register */ +	u32 icr;		/* external interrupt control register */ +	u8 res0[0xE8]; +} gpio83xx_t; + +/* + * QE Ports Interrupts Registers + */ +typedef struct qepi83xx { +	u8 res0[0xC]; +	u32 qepier;		/* QE Ports Interrupt Event Register */ +	u32 qepimr;		/* QE Ports Interrupt Mask Register */ +	u32 qepicr;		/* QE Ports Interrupt Control Register */ +	u8 res1[0xE8]; +} qepi83xx_t; + +/* + * QE Parallel I/O Ports + */ +typedef struct gpio_n { +	u32 podr;		/* Open Drain Register */ +	u32 pdat;		/* Data Register */ +	u32 dir1;		/* direction register 1 */ +	u32 dir2;		/* direction register 2 */ +	u32 ppar1;		/* Pin Assignment Register 1 */ +	u32 ppar2;		/* Pin Assignment Register 2 */ +} gpio_n_t; + +typedef struct qegpio83xx { +	gpio_n_t ioport[0x7]; +	u8 res0[0x358]; +} qepio83xx_t; + +/* + * QE Secondary Bus Access Windows + */ +typedef struct qesba83xx { +	u32 lbmcsar;		/* Local bus memory controller start address */ +	u32 sdmcsar;		/* Secondary DDR memory controller start address */ +	u8 res0[0x38]; +	u32 lbmcear;		/* Local bus memory controller end address */ +	u32 sdmcear;		/* Secondary DDR memory controller end address */ +	u8 res1[0x38]; +	u32 lbmcar;		/* Local bus memory controller attributes */ +	u32 sdmcar;		/* Secondary DDR memory controller attributes */ +	u8 res2[0x378]; +} qesba83xx_t; + +/* + * DDR Memory Controller Memory Map for DDR1 + * The structure of DDR2, or DDR3 is defined in fsl_immap.h + */ +#if !defined(CONFIG_SYS_FSL_DDR2) && !defined(CONFIG_SYS_FSL_DDR3) +typedef struct ddr_cs_bnds { +	u32 csbnds; +	u8 res0[4]; +} ddr_cs_bnds_t; + +typedef struct ddr83xx { +	ddr_cs_bnds_t csbnds[4];/* Chip Select x Memory Bounds */ +	u8 res0[0x60]; +	u32 cs_config[4];	/* Chip Select x Configuration */ +	u8 res1[0x70]; +	u32 timing_cfg_3;	/* SDRAM Timing Configuration 3 */ +	u32 timing_cfg_0;	/* SDRAM Timing Configuration 0 */ +	u32 timing_cfg_1;	/* SDRAM Timing Configuration 1 */ +	u32 timing_cfg_2;	/* SDRAM Timing Configuration 2 */ +	u32 sdram_cfg;		/* SDRAM Control Configuration */ +	u32 sdram_cfg2;		/* SDRAM Control Configuration 2 */ +	u32 sdram_mode;		/* SDRAM Mode Configuration */ +	u32 sdram_mode2;	/* SDRAM Mode Configuration 2 */ +	u32 sdram_md_cntl;	/* SDRAM Mode Control */ +	u32 sdram_interval;	/* SDRAM Interval Configuration */ +	u32 ddr_data_init;	/* SDRAM Data Initialization */ +	u8 res2[4]; +	u32 sdram_clk_cntl;	/* SDRAM Clock Control */ +	u8 res3[0x14]; +	u32 ddr_init_addr;	/* DDR training initialization address */ +	u32 ddr_init_ext_addr;	/* DDR training initialization extended address */ +	u8 res4[0xAA8]; +	u32 ddr_ip_rev1;	/* DDR IP block revision 1 */ +	u32 ddr_ip_rev2;	/* DDR IP block revision 2 */ +	u8 res5[0x200]; +	u32 data_err_inject_hi;	/* Memory Data Path Error Injection Mask High */ +	u32 data_err_inject_lo;	/* Memory Data Path Error Injection Mask Low */ +	u32 ecc_err_inject;	/* Memory Data Path Error Injection Mask ECC */ +	u8 res6[0x14]; +	u32 capture_data_hi;	/* Memory Data Path Read Capture High */ +	u32 capture_data_lo;	/* Memory Data Path Read Capture Low */ +	u32 capture_ecc;	/* Memory Data Path Read Capture ECC */ +	u8 res7[0x14]; +	u32 err_detect;		/* Memory Error Detect */ +	u32 err_disable;	/* Memory Error Disable */ +	u32 err_int_en;		/* Memory Error Interrupt Enable */ +	u32 capture_attributes;	/* Memory Error Attributes Capture */ +	u32 capture_address;	/* Memory Error Address Capture */ +	u32 capture_ext_address;/* Memory Error Extended Address Capture */ +	u32 err_sbe;		/* Memory Single-Bit ECC Error Management */ +	u8 res8[0xA4]; +	u32 debug_reg; +	u8 res9[0xFC]; +} ddr83xx_t; +#endif + +/* + * DUART + */ +typedef struct duart83xx { +	u8 urbr_ulcr_udlb;	/* combined register for URBR, UTHR and UDLB */ +	u8 uier_udmb;		/* combined register for UIER and UDMB */ +	u8 uiir_ufcr_uafr;	/* combined register for UIIR, UFCR and UAFR */ +	u8 ulcr;		/* line control register */ +	u8 umcr;		/* MODEM control register */ +	u8 ulsr;		/* line status register */ +	u8 umsr;		/* MODEM status register */ +	u8 uscr;		/* scratch register */ +	u8 res0[8]; +	u8 udsr;		/* DMA status register */ +	u8 res1[3]; +	u8 res2[0xEC]; +} duart83xx_t; + +/* + * DMA/Messaging Unit + */ +typedef struct dma83xx { +	u32 res0[0xC];		/* 0x0-0x29 reseverd */ +	u32 omisr;		/* 0x30 Outbound message interrupt status register */ +	u32 omimr;		/* 0x34 Outbound message interrupt mask register */ +	u32 res1[0x6];		/* 0x38-0x49 reserved */ +	u32 imr0;		/* 0x50 Inbound message register 0 */ +	u32 imr1;		/* 0x54 Inbound message register 1 */ +	u32 omr0;		/* 0x58 Outbound message register 0 */ +	u32 omr1;		/* 0x5C Outbound message register 1 */ +	u32 odr;		/* 0x60 Outbound doorbell register */ +	u32 res2;		/* 0x64-0x67 reserved */ +	u32 idr;		/* 0x68 Inbound doorbell register */ +	u32 res3[0x5];		/* 0x6C-0x79 reserved */ +	u32 imisr;		/* 0x80 Inbound message interrupt status register */ +	u32 imimr;		/* 0x84 Inbound message interrupt mask register */ +	u32 res4[0x1E];		/* 0x88-0x99 reserved */ +	struct fsl_dma dma[4]; +} dma83xx_t; + +/* + * PCI Software Configuration Registers + */ +typedef struct pciconf83xx { +	u32 config_address; +	u32 config_data; +	u32 int_ack; +	u8 res[116]; +} pciconf83xx_t; + +/* + * PCI Outbound Translation Register + */ +typedef struct pci_outbound_window { +	u32 potar; +	u8 res0[4]; +	u32 pobar; +	u8 res1[4]; +	u32 pocmr; +	u8 res2[4]; +} pot83xx_t; + +/* + * Sequencer + */ +typedef struct ios83xx { +	pot83xx_t pot[6]; +	u8 res0[0x60]; +	u32 pmcr; +	u8 res1[4]; +	u32 dtcr; +	u8 res2[4]; +} ios83xx_t; + +/* + * PCI Controller Control and Status Registers + */ +typedef struct pcictrl83xx { +	u32 esr; +	u32 ecdr; +	u32 eer; +	u32 eatcr; +	u32 eacr; +	u32 eeacr; +	u32 edlcr; +	u32 edhcr; +	u32 gcr; +	u32 ecr; +	u32 gsr; +	u8 res0[12]; +	u32 pitar2; +	u8 res1[4]; +	u32 pibar2; +	u32 piebar2; +	u32 piwar2; +	u8 res2[4]; +	u32 pitar1; +	u8 res3[4]; +	u32 pibar1; +	u32 piebar1; +	u32 piwar1; +	u8 res4[4]; +	u32 pitar0; +	u8 res5[4]; +	u32 pibar0; +	u8 res6[4]; +	u32 piwar0; +	u8 res7[132]; +} pcictrl83xx_t; + +/* + * USB + */ +typedef struct usb83xx { +	u8 fixme[0x1000]; +} usb83xx_t; + +/* + * TSEC + */ +typedef struct tsec83xx { +	u8 fixme[0x1000]; +} tsec83xx_t; + +/* + * Security + */ +typedef struct security83xx { +	u8 fixme[0x10000]; +} security83xx_t; + +/* + *  PCI Express + */ +struct pex_inbound_window { +	u32 ar; +	u32 tar; +	u32 barl; +	u32 barh; +}; + +struct pex_outbound_window { +	u32 ar; +	u32 bar; +	u32 tarl; +	u32 tarh; +}; + +struct pex_csb_bridge { +	u32 pex_csb_ver; +	u32 pex_csb_cab; +	u32 pex_csb_ctrl; +	u8 res0[8]; +	u32 pex_dms_dstmr; +	u8 res1[4]; +	u32 pex_cbs_stat; +	u8 res2[0x20]; +	u32 pex_csb_obctrl; +	u32 pex_csb_obstat; +	u8 res3[0x98]; +	u32 pex_csb_ibctrl; +	u32 pex_csb_ibstat; +	u8 res4[0xb8]; +	u32 pex_wdma_ctrl; +	u32 pex_wdma_addr; +	u32 pex_wdma_stat; +	u8 res5[0x94]; +	u32 pex_rdma_ctrl; +	u32 pex_rdma_addr; +	u32 pex_rdma_stat; +	u8 res6[0xd4]; +	u32 pex_ombcr; +	u32 pex_ombdr; +	u8 res7[0x38]; +	u32 pex_imbcr; +	u32 pex_imbdr; +	u8 res8[0x38]; +	u32 pex_int_enb; +	u32 pex_int_stat; +	u32 pex_int_apio_vec1; +	u32 pex_int_apio_vec2; +	u8 res9[0x10]; +	u32 pex_int_ppio_vec1; +	u32 pex_int_ppio_vec2; +	u32 pex_int_wdma_vec1; +	u32 pex_int_wdma_vec2; +	u32 pex_int_rdma_vec1; +	u32 pex_int_rdma_vec2; +	u32 pex_int_misc_vec; +	u8 res10[4]; +	u32 pex_int_axi_pio_enb; +	u32 pex_int_axi_wdma_enb; +	u32 pex_int_axi_rdma_enb; +	u32 pex_int_axi_misc_enb; +	u32 pex_int_axi_pio_stat; +	u32 pex_int_axi_wdma_stat; +	u32 pex_int_axi_rdma_stat; +	u32 pex_int_axi_misc_stat; +	u8 res11[0xa0]; +	struct pex_outbound_window pex_outbound_win[4]; +	u8 res12[0x100]; +	u32 pex_epiwtar0; +	u32 pex_epiwtar1; +	u32 pex_epiwtar2; +	u32 pex_epiwtar3; +	u8 res13[0x70]; +	struct pex_inbound_window pex_inbound_win[4]; +}; + +typedef struct pex83xx { +	u8 pex_cfg_header[0x404]; +	u32 pex_ltssm_stat; +	u8 res0[0x30]; +	u32 pex_ack_replay_timeout; +	u8 res1[4]; +	u32 pex_gclk_ratio; +	u8 res2[0xc]; +	u32 pex_pm_timer; +	u32 pex_pme_timeout; +	u8 res3[4]; +	u32 pex_aspm_req_timer; +	u8 res4[0x18]; +	u32 pex_ssvid_update; +	u8 res5[0x34]; +	u32 pex_cfg_ready; +	u8 res6[0x24]; +	u32 pex_bar_sizel; +	u8 res7[4]; +	u32 pex_bar_sel; +	u8 res8[0x20]; +	u32 pex_bar_pf; +	u8 res9[0x88]; +	u32 pex_pme_to_ack_tor; +	u8 res10[0xc]; +	u32 pex_ss_intr_mask; +	u8 res11[0x25c]; +	struct pex_csb_bridge bridge; +	u8 res12[0x160]; +} pex83xx_t; + +/* + * SATA + */ +typedef struct sata83xx { +	u8 fixme[0x1000]; +} sata83xx_t; + +/* + * eSDHC + */ +typedef struct sdhc83xx { +	u8 fixme[0x1000]; +} sdhc83xx_t; + +/* + * SerDes + */ +typedef struct serdes83xx { +	u32 srdscr0; +	u32 srdscr1; +	u32 srdscr2; +	u32 srdscr3; +	u32 srdscr4; +	u8 res0[0xc]; +	u32 srdsrstctl; +	u8 res1[0xdc]; +} serdes83xx_t; + +/* + * On Chip ROM + */ +typedef struct rom83xx { +#if defined(CONFIG_MPC8309) +	u8 mem[0x8000]; +#else +	u8 mem[0x10000]; +#endif +} rom83xx_t; + +/* + * TDM + */ +typedef struct tdm83xx { +	u8 fixme[0x200]; +} tdm83xx_t; + +/* + * TDM DMAC + */ +typedef struct tdmdmac83xx { +	u8 fixme[0x2000]; +} tdmdmac83xx_t; + +#if defined(CONFIG_MPC834x) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[2];	/* General purpose I/O module */ +	u8			res0[0x200]; +	u8			dll_ddr[0x100]; +	u8			dll_lbc[0x100]; +	u8			res1[0xE00]; +#if defined(CONFIG_SYS_FSL_DDR2) || defined(CONFIG_SYS_FSL_DDR3) +	struct ccsr_ddr		ddr;	/* DDR Memory Controller Memory */ +#else +	ddr83xx_t		ddr;	/* DDR Memory Controller Memory */ +#endif +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res2[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res3[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res4[0x1000]; +	spi8xxx_t		spi;		/* Serial Peripheral Interface */ +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[2];	/* PCI Software Configuration Registers */ +	ios83xx_t		ios;		/* Sequencer */ +	pcictrl83xx_t		pci_ctrl[2];	/* PCI Controller Control and Status Registers */ +	u8			res5[0x19900]; +	usb83xx_t		usb[2]; +	tsec83xx_t		tsec[2]; +	u8			res6[0xA000]; +	security83xx_t		security; +	u8			res7[0xC0000]; +} immap_t; + +#ifndef	CONFIG_MPC834x +#ifdef CONFIG_HAS_FSL_MPH_USB +#define CONFIG_SYS_MPC83xx_USB1_OFFSET  0x22000	/* use the MPH controller */ +#define CONFIG_SYS_MPC83xx_USB2_OFFSET	0 +#else +#define CONFIG_SYS_MPC83xx_USB1_OFFSET	0 +#define CONFIG_SYS_MPC83xx_USB2_OFFSET  0x23000	/* use the DR controller */ +#endif +#else +#define CONFIG_SYS_MPC83xx_USB1_OFFSET	0x22000 +#define CONFIG_SYS_MPC83xx_USB2_OFFSET  0x23000 +#endif + +#elif defined(CONFIG_MPC8313) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[1];	/* General purpose I/O module */ +	u8			res0[0x1300]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res1[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res2[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res3[0x1000]; +	spi8xxx_t		spi;		/* Serial Peripheral Interface */ +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res4[0x80]; +	ios83xx_t		ios;		/* Sequencer */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res5[0x1aa00]; +	usb83xx_t		usb[1]; +	tsec83xx_t		tsec[2]; +	u8			res6[0xA000]; +	security83xx_t		security; +	u8			res7[0xC0000]; +} immap_t; + +#elif defined(CONFIG_MPC8308) || defined(CONFIG_MPC8315) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[1];	/* General purpose I/O module */ +	u8			res0[0x1300]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res1[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res2[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res3[0x1000]; +	spi8xxx_t		spi;		/* Serial Peripheral Interface */ +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res4[0x80]; +	ios83xx_t		ios;		/* Sequencer */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res5[0xa00]; +	pex83xx_t		pciexp[2];	/* PCI Express Controller */ +	u8			res6[0xb000]; +	tdm83xx_t		tdm;		/* TDM Controller */ +	u8			res7[0x1e00]; +	sata83xx_t		sata[2];	/* SATA Controller */ +	u8			res8[0x9000]; +	usb83xx_t		usb[1];		/* USB DR Controller */ +	tsec83xx_t		tsec[2]; +	u8			res9[0x6000]; +	tdmdmac83xx_t		tdmdmac;	/* TDM DMAC */ +	u8			res10[0x2000]; +	security83xx_t		security; +	u8			res11[0xA3000]; +	serdes83xx_t		serdes[1];	/* SerDes Registers */ +	u8			res12[0x1CF00]; +} immap_t; + +#elif defined(CONFIG_MPC837x) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[2];	/* General purpose I/O module */ +	u8			res0[0x1200]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res1[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res2[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res3[0x1000]; +	spi8xxx_t		spi;		/* Serial Peripheral Interface */ +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res4[0x80]; +	ios83xx_t		ios;		/* Sequencer */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res5[0xa00]; +	pex83xx_t		pciexp[2];	/* PCI Express Controller */ +	u8			res6[0xd000]; +	sata83xx_t		sata[4];	/* SATA Controller */ +	u8			res7[0x7000]; +	usb83xx_t		usb[1];		/* USB DR Controller */ +	tsec83xx_t		tsec[2]; +	u8			res8[0x8000]; +	sdhc83xx_t		sdhc;		/* SDHC Controller */ +	u8			res9[0x1000]; +	security83xx_t		security; +	u8			res10[0xA3000]; +	serdes83xx_t		serdes[2];	/* SerDes Registers */ +	u8			res11[0xCE00]; +	rom83xx_t		rom;		/* On Chip ROM */ +} immap_t; + +#elif defined(CONFIG_MPC8360) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	u8			res0[0x200]; +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	qepi83xx_t		qepi;		/* QE Ports Interrupts Registers */ +	u8			res1[0x300]; +	u8			dll_ddr[0x100]; +	u8			dll_lbc[0x100]; +	u8			res2[0x200]; +	qepio83xx_t		qepio;		/* QE Parallel I/O ports */ +	qesba83xx_t		qesba;		/* QE Secondary Bus Access Windows */ +	u8			res3[0x400]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res4[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res5[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res6[0x2000]; +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res7[128]; +	ios83xx_t		ios;		/* Sequencer (IOS) */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res8[0x4A00]; +	ddr83xx_t		ddr_secondary;	/* Secondary DDR Memory Controller Memory Map */ +	u8			res9[0x22000]; +	security83xx_t		security; +	u8			res10[0xC0000]; +	u8			qe[0x100000];	/* QE block */ +} immap_t; + +#elif defined(CONFIG_MPC832x) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	qepi83xx_t		qepi;		/* QE Ports Interrupts Registers */ +	u8			res0[0x300]; +	u8			dll_ddr[0x100]; +	u8			dll_lbc[0x100]; +	u8			res1[0x200]; +	qepio83xx_t		qepio;		/* QE Parallel I/O ports */ +	u8			res2[0x800]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res3[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res4[0x900]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res5[0x2000]; +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res6[128]; +	ios83xx_t		ios;		/* Sequencer (IOS) */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res7[0x27A00]; +	security83xx_t		security; +	u8			res8[0xC0000]; +	u8			qe[0x100000];	/* QE block */ +} immap_t; +#elif defined(CONFIG_MPC8309) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[2];	/* General purpose I/O module */ +	u8			res0[0x500];	/* res0 1.25 KBytes added for 8309 */ +	qepi83xx_t		qepi;		/* QE Ports Interrupts Registers */ +	qepio83xx_t		qepio;		/* QE Parallel I/O ports */ +	u8			res1[0x800]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res2[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res3[0x200]; +	duart83xx_t		duart1[2];	/* DUART */ +	u8			res4[0x500]; +	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */ +	u8			res5[0x1000]; +	u8			spi[0x100]; +	u8			res6[0xf00]; +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Configuration Registers */ +	u8			res7[0x80]; +	ios83xx_t		ios;		/* Sequencer (IOS) */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Control & Status Registers */ +	u8			res8[0x13A00]; +	u8			can1[0x1000];	/* Flexcan 1 */ +	u8			can2[0x1000];	/* Flexcan 2 */ +	u8			res9[0x5000]; +	usb83xx_t		usb; +	u8			res10[0x5000]; +	u8			can3[0x1000];	/* Flexcan 3 */ +	u8			can4[0x1000];	/* Flexcan 4 */ +	u8			res11[0x1000]; +	u8			dma1[0x2000];	/* DMA */ +	sdhc83xx_t		sdhc;		/* SDHC Controller */ +	u8			res12[0xC1000]; +	rom83xx_t		rom;		/* On Chip ROM */ +	u8			res13[0x8000]; +	u8			qe[0x100000];	/* QE block */ +	u8			res14[0xE00000];/* Added for 8309 */ +} immap_t; +#endif + +#define CONFIG_SYS_MPC8xxx_DDR_OFFSET	(0x2000) +#define CONFIG_SYS_FSL_DDR_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET) +#define CONFIG_SYS_MPC83xx_DMA_OFFSET	(0x8000) +#define CONFIG_SYS_MPC83xx_DMA_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_DMA_OFFSET) +#define CONFIG_SYS_MPC83xx_ESDHC_OFFSET	(0x2e000) +#define CONFIG_SYS_MPC83xx_ESDHC_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_ESDHC_OFFSET) + +#ifndef CONFIG_SYS_MPC83xx_USB1_OFFSET +#define CONFIG_SYS_MPC83xx_USB1_OFFSET  0x23000 +#endif +#define CONFIG_SYS_MPC83xx_USB1_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_USB1_OFFSET) +#if defined(CONFIG_MPC834x) +#define CONFIG_SYS_MPC83xx_USB2_ADDR \ +			(CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_USB2_OFFSET) +#endif +#define CONFIG_SYS_LBC_ADDR (&((immap_t *)CONFIG_SYS_IMMR)->im_lbc) + +#define CONFIG_SYS_TSEC1_OFFSET		0x24000 +#define CONFIG_SYS_MDIO1_OFFSET		0x24000 + +#define TSEC_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET) +#define MDIO_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET) +#endif				/* __IMMAP_83xx__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_85xx.h b/roms/u-boot/arch/powerpc/include/asm/immap_85xx.h new file mode 100644 index 00000000..eff573b5 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_85xx.h @@ -0,0 +1,3189 @@ +/* + * MPC85xx Internal Memory Map + * + * Copyright 2007-2012 Freescale Semiconductor, Inc. + * + * Copyright(c) 2002,2003 Motorola Inc. + * Xianghua Xiao (x.xiao@motorola.com) + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __IMMAP_85xx__ +#define __IMMAP_85xx__ + +#include <asm/types.h> +#include <asm/fsl_dma.h> +#include <asm/fsl_i2c.h> +#include <fsl_ifc.h> +#include <asm/fsl_lbc.h> +#include <asm/fsl_fman.h> +#include <fsl_immap.h> + +typedef struct ccsr_local { +	u32	ccsrbarh;	/* CCSR Base Addr High */ +	u32	ccsrbarl;	/* CCSR Base Addr Low */ +	u32	ccsrar;		/* CCSR Attr */ +#define CCSRAR_C	0x80000000	/* Commit */ +	u8	res1[4]; +	u32	altcbarh;	/* Alternate Configuration Base Addr High */ +	u32	altcbarl;	/* Alternate Configuration Base Addr Low */ +	u32	altcar;		/* Alternate Configuration Attr */ +	u8	res2[4]; +	u32	bstrh;		/* Boot space translation high */ +	u32	bstrl;		/* Boot space translation Low */ +	u32	bstrar;		/* Boot space translation attributes */ +	u8	res3[0xbd4]; +	struct { +		u32	lawbarh;	/* LAWn base addr high */ +		u32	lawbarl;	/* LAWn base addr low */ +		u32	lawar;		/* LAWn attributes */ +		u8	res4[4]; +	} law[32]; +	u8	res35[0x204]; +} ccsr_local_t; + +/* Local-Access Registers & ECM Registers */ +typedef struct ccsr_local_ecm { +	u32	ccsrbar;	/* CCSR Base Addr */ +	u8	res1[4]; +	u32	altcbar;	/* Alternate Configuration Base Addr */ +	u8	res2[4]; +	u32	altcar;		/* Alternate Configuration Attr */ +	u8	res3[12]; +	u32	bptr;		/* Boot Page Translation */ +	u8	res4[3044]; +	u32	lawbar0;	/* Local Access Window 0 Base Addr */ +	u8	res5[4]; +	u32	lawar0;		/* Local Access Window 0 Attrs */ +	u8	res6[20]; +	u32	lawbar1;	/* Local Access Window 1 Base Addr */ +	u8	res7[4]; +	u32	lawar1;		/* Local Access Window 1 Attrs */ +	u8	res8[20]; +	u32	lawbar2;	/* Local Access Window 2 Base Addr */ +	u8	res9[4]; +	u32	lawar2;		/* Local Access Window 2 Attrs */ +	u8	res10[20]; +	u32	lawbar3;	/* Local Access Window 3 Base Addr */ +	u8	res11[4]; +	u32	lawar3;		/* Local Access Window 3 Attrs */ +	u8	res12[20]; +	u32	lawbar4;	/* Local Access Window 4 Base Addr */ +	u8	res13[4]; +	u32	lawar4;		/* Local Access Window 4 Attrs */ +	u8	res14[20]; +	u32	lawbar5;	/* Local Access Window 5 Base Addr */ +	u8	res15[4]; +	u32	lawar5;		/* Local Access Window 5 Attrs */ +	u8	res16[20]; +	u32	lawbar6;	/* Local Access Window 6 Base Addr */ +	u8	res17[4]; +	u32	lawar6;		/* Local Access Window 6 Attrs */ +	u8	res18[20]; +	u32	lawbar7;	/* Local Access Window 7 Base Addr */ +	u8	res19[4]; +	u32	lawar7;		/* Local Access Window 7 Attrs */ +	u8	res19_8a[20]; +	u32	lawbar8;	/* Local Access Window 8 Base Addr */ +	u8	res19_8b[4]; +	u32	lawar8;		/* Local Access Window 8 Attrs */ +	u8	res19_9a[20]; +	u32	lawbar9;	/* Local Access Window 9 Base Addr */ +	u8	res19_9b[4]; +	u32	lawar9;		/* Local Access Window 9 Attrs */ +	u8	res19_10a[20]; +	u32	lawbar10;	/* Local Access Window 10 Base Addr */ +	u8	res19_10b[4]; +	u32	lawar10;	/* Local Access Window 10 Attrs */ +	u8	res19_11a[20]; +	u32	lawbar11;	/* Local Access Window 11 Base Addr */ +	u8	res19_11b[4]; +	u32	lawar11;	/* Local Access Window 11 Attrs */ +	u8	res20[652]; +	u32	eebacr;		/* ECM CCB Addr Configuration */ +	u8	res21[12]; +	u32	eebpcr;		/* ECM CCB Port Configuration */ +	u8	res22[3564]; +	u32	eedr;		/* ECM Error Detect */ +	u8	res23[4]; +	u32	eeer;		/* ECM Error Enable */ +	u32	eeatr;		/* ECM Error Attrs Capture */ +	u32	eeadr;		/* ECM Error Addr Capture */ +	u8	res24[492]; +} ccsr_local_ecm_t; + +#define DDR_EOR_RD_BDW_OPT_DIS	0x80000000 /* Read BDW Opt. disable */ +#define DDR_EOR_ADDR_HASH_EN	0x40000000 /* Address hash enabled */ + +/* I2C Registers */ +typedef struct ccsr_i2c { +	struct fsl_i2c	i2c[1]; +	u8	res[4096 - 1 * sizeof(struct fsl_i2c)]; +} ccsr_i2c_t; + +#if defined(CONFIG_MPC8540) \ +	|| defined(CONFIG_MPC8541) \ +	|| defined(CONFIG_MPC8548) \ +	|| defined(CONFIG_MPC8555) +/* DUART Registers */ +typedef struct ccsr_duart { +	u8	res1[1280]; +/* URBR1, UTHR1, UDLB1 with the same addr */ +	u8	urbr1_uthr1_udlb1; +/* UIER1, UDMB1 with the same addr01 */ +	u8	uier1_udmb1; +/* UIIR1, UFCR1, UAFR1 with the same addr */ +	u8	uiir1_ufcr1_uafr1; +	u8	ulcr1;		/* UART1 Line Control */ +	u8	umcr1;		/* UART1 Modem Control */ +	u8	ulsr1;		/* UART1 Line Status */ +	u8	umsr1;		/* UART1 Modem Status */ +	u8	uscr1;		/* UART1 Scratch */ +	u8	res2[8]; +	u8	udsr1;		/* UART1 DMA Status */ +	u8	res3[239]; +/* URBR2, UTHR2, UDLB2 with the same addr */ +	u8	urbr2_uthr2_udlb2; +/* UIER2, UDMB2 with the same addr */ +	u8	uier2_udmb2; +/* UIIR2, UFCR2, UAFR2 with the same addr */ +	u8	uiir2_ufcr2_uafr2; +	u8	ulcr2;		/* UART2 Line Control */ +	u8	umcr2;		/* UART2 Modem Control */ +	u8	ulsr2;		/* UART2 Line Status */ +	u8	umsr2;		/* UART2 Modem Status */ +	u8	uscr2;		/* UART2 Scratch */ +	u8	res4[8]; +	u8	udsr2;		/* UART2 DMA Status */ +	u8	res5[2543]; +} ccsr_duart_t; +#else /* MPC8560 uses UART on its CPM */ +typedef struct ccsr_duart { +	u8 res[4096]; +} ccsr_duart_t; +#endif + +/* eSPI Registers */ +typedef struct ccsr_espi { +	u32	mode;		/* eSPI mode */ +	u32	event;		/* eSPI event */ +	u32	mask;		/* eSPI mask */ +	u32	com;		/* eSPI command */ +	u32	tx;		/* eSPI transmit FIFO access */ +	u32	rx;		/* eSPI receive FIFO access */ +	u8	res1[8];	/* reserved */ +	u32	csmode[4];	/* 0x2c: sSPI CS0/1/2/3 mode */ +	u8	res2[4048];	/* fill up to 0x1000 */ +} ccsr_espi_t; + +/* PCI Registers */ +typedef struct ccsr_pcix { +	u32	cfg_addr;	/* PCIX Configuration Addr */ +	u32	cfg_data;	/* PCIX Configuration Data */ +	u32	int_ack;	/* PCIX IRQ Acknowledge */ +	u8	res000c[52]; +	u32	liodn_base;	/* PCIX LIODN base register */ +	u8	res0044[2996]; +	u32	ipver1;		/* PCIX IP block revision register 1 */ +	u32	ipver2;		/* PCIX IP block revision register 2 */ +	u32	potar0;		/* PCIX Outbound Transaction Addr 0 */ +	u32	potear0;	/* PCIX Outbound Translation Extended Addr 0 */ +	u32	powbar0;	/* PCIX Outbound Window Base Addr 0 */ +	u32	powbear0;	/* PCIX Outbound Window Base Extended Addr 0 */ +	u32	powar0;		/* PCIX Outbound Window Attrs 0 */ +	u8	res2[12]; +	u32	potar1;		/* PCIX Outbound Transaction Addr 1 */ +	u32	potear1;	/* PCIX Outbound Translation Extended Addr 1 */ +	u32	powbar1;	/* PCIX Outbound Window Base Addr 1 */ +	u32	powbear1;	/* PCIX Outbound Window Base Extended Addr 1 */ +	u32	powar1;		/* PCIX Outbound Window Attrs 1 */ +	u8	res3[12]; +	u32	potar2;		/* PCIX Outbound Transaction Addr 2 */ +	u32	potear2;	/* PCIX Outbound Translation Extended Addr 2 */ +	u32	powbar2;	/* PCIX Outbound Window Base Addr 2 */ +	u32	powbear2;	/* PCIX Outbound Window Base Extended Addr 2 */ +	u32	powar2;		/* PCIX Outbound Window Attrs 2 */ +	u8	res4[12]; +	u32	potar3;		/* PCIX Outbound Transaction Addr 3 */ +	u32	potear3;	/* PCIX Outbound Translation Extended Addr 3 */ +	u32	powbar3;	/* PCIX Outbound Window Base Addr 3 */ +	u32	powbear3;	/* PCIX Outbound Window Base Extended Addr 3 */ +	u32	powar3;		/* PCIX Outbound Window Attrs 3 */ +	u8	res5[12]; +	u32	potar4;		/* PCIX Outbound Transaction Addr 4 */ +	u32	potear4;	/* PCIX Outbound Translation Extended Addr 4 */ +	u32	powbar4;	/* PCIX Outbound Window Base Addr 4 */ +	u32	powbear4;	/* PCIX Outbound Window Base Extended Addr 4 */ +	u32	powar4;		/* PCIX Outbound Window Attrs 4 */ +	u8	res6[268]; +	u32	pitar3;		/* PCIX Inbound Translation Addr 3 */ +	u32	pitear3;	/* PCIX Inbound Translation Extended Addr 3 */ +	u32	piwbar3;	/* PCIX Inbound Window Base Addr 3 */ +	u32	piwbear3;	/* PCIX Inbound Window Base Extended Addr 3 */ +	u32	piwar3;		/* PCIX Inbound Window Attrs 3 */ +	u8	res7[12]; +	u32	pitar2;		/* PCIX Inbound Translation Addr 2 */ +	u32	pitear2;	/* PCIX Inbound Translation Extended Addr 2 */ +	u32	piwbar2;	/* PCIX Inbound Window Base Addr 2 */ +	u32	piwbear2;	/* PCIX Inbound Window Base Extended Addr 2 */ +	u32	piwar2;		/* PCIX Inbound Window Attrs 2 */ +	u8	res8[12]; +	u32	pitar1;		/* PCIX Inbound Translation Addr 1 */ +	u32	pitear1;	/* PCIX Inbound Translation Extended Addr 1 */ +	u32	piwbar1;	/* PCIX Inbound Window Base Addr 1 */ +	u8	res9[4]; +	u32	piwar1;		/* PCIX Inbound Window Attrs 1 */ +	u8	res10[12]; +	u32	pedr;		/* PCIX Error Detect */ +	u32	pecdr;		/* PCIX Error Capture Disable */ +	u32	peer;		/* PCIX Error Enable */ +	u32	peattrcr;	/* PCIX Error Attrs Capture */ +	u32	peaddrcr;	/* PCIX Error Addr Capture */ +	u32	peextaddrcr;	/* PCIX Error Extended Addr Capture */ +	u32	pedlcr;		/* PCIX Error Data Low Capture */ +	u32	pedhcr;		/* PCIX Error Error Data High Capture */ +	u32	gas_timr;	/* PCIX Gasket Timer */ +	u8	res11[476]; +} ccsr_pcix_t; + +#define PCIX_COMMAND	0x62 +#define POWAR_EN	0x80000000 +#define POWAR_IO_READ	0x00080000 +#define POWAR_MEM_READ	0x00040000 +#define POWAR_IO_WRITE	0x00008000 +#define POWAR_MEM_WRITE	0x00004000 +#define POWAR_MEM_512M	0x0000001c +#define POWAR_IO_1M	0x00000013 + +#define PIWAR_EN	0x80000000 +#define PIWAR_PF	0x20000000 +#define PIWAR_LOCAL	0x00f00000 +#define PIWAR_READ_SNOOP	0x00050000 +#define PIWAR_WRITE_SNOOP	0x00005000 +#define PIWAR_MEM_2G		0x0000001e + +typedef struct ccsr_gpio { +	u32	gpdir; +	u32	gpodr; +	u32	gpdat; +	u32	gpier; +	u32	gpimr; +	u32	gpicr; +} ccsr_gpio_t; + +/* L2 Cache Registers */ +typedef struct ccsr_l2cache { +	u32	l2ctl;		/* L2 configuration 0 */ +	u8	res1[12]; +	u32	l2cewar0;	/* L2 cache external write addr 0 */ +	u8	res2[4]; +	u32	l2cewcr0;	/* L2 cache external write control 0 */ +	u8	res3[4]; +	u32	l2cewar1;	/* L2 cache external write addr 1 */ +	u8	res4[4]; +	u32	l2cewcr1;	/* L2 cache external write control 1 */ +	u8	res5[4]; +	u32	l2cewar2;	/* L2 cache external write addr 2 */ +	u8	res6[4]; +	u32	l2cewcr2;	/* L2 cache external write control 2 */ +	u8	res7[4]; +	u32	l2cewar3;	/* L2 cache external write addr 3 */ +	u8	res8[4]; +	u32	l2cewcr3;	/* L2 cache external write control 3 */ +	u8	res9[180]; +	u32	l2srbar0;	/* L2 memory-mapped SRAM base addr 0 */ +	u8	res10[4]; +	u32	l2srbar1;	/* L2 memory-mapped SRAM base addr 1 */ +	u8	res11[3316]; +	u32	l2errinjhi;	/* L2 error injection mask high */ +	u32	l2errinjlo;	/* L2 error injection mask low */ +	u32	l2errinjctl;	/* L2 error injection tag/ECC control */ +	u8	res12[20]; +	u32	l2captdatahi;	/* L2 error data high capture */ +	u32	l2captdatalo;	/* L2 error data low capture */ +	u32	l2captecc;	/* L2 error ECC capture */ +	u8	res13[20]; +	u32	l2errdet;	/* L2 error detect */ +	u32	l2errdis;	/* L2 error disable */ +	u32	l2errinten;	/* L2 error interrupt enable */ +	u32	l2errattr;	/* L2 error attributes capture */ +	u32	l2erraddr;	/* L2 error addr capture */ +	u8	res14[4]; +	u32	l2errctl;	/* L2 error control */ +	u8	res15[420]; +} ccsr_l2cache_t; + +#define MPC85xx_L2CTL_L2E			0x80000000 +#define MPC85xx_L2CTL_L2SRAM_ENTIRE		0x00010000 +#define MPC85xx_L2ERRDIS_MBECC			0x00000008 +#define MPC85xx_L2ERRDIS_SBECC			0x00000004 + +/* DMA Registers */ +typedef struct ccsr_dma { +	u8	res1[256]; +	struct fsl_dma dma[4]; +	u32	dgsr;		/* DMA General Status */ +	u8	res2[11516]; +} ccsr_dma_t; + +/* tsec */ +typedef struct ccsr_tsec { +	u8	res1[16]; +	u32	ievent;		/* IRQ Event */ +	u32	imask;		/* IRQ Mask */ +	u32	edis;		/* Error Disabled */ +	u8	res2[4]; +	u32	ecntrl;		/* Ethernet Control */ +	u32	minflr;		/* Minimum Frame Len */ +	u32	ptv;		/* Pause Time Value */ +	u32	dmactrl;	/* DMA Control */ +	u32	tbipa;		/* TBI PHY Addr */ +	u8	res3[88]; +	u32	fifo_tx_thr;		/* FIFO transmit threshold */ +	u8	res4[8]; +	u32	fifo_tx_starve;		/* FIFO transmit starve */ +	u32	fifo_tx_starve_shutoff;	/* FIFO transmit starve shutoff */ +	u8	res5[96]; +	u32	tctrl;		/* TX Control */ +	u32	tstat;		/* TX Status */ +	u8	res6[4]; +	u32	tbdlen;		/* TX Buffer Desc Data Len */ +	u8	res7[16]; +	u32	ctbptrh;	/* Current TX Buffer Desc Ptr High */ +	u32	ctbptr;		/* Current TX Buffer Desc Ptr */ +	u8	res8[88]; +	u32	tbptrh;		/* TX Buffer Desc Ptr High */ +	u32	tbptr;		/* TX Buffer Desc Ptr Low */ +	u8	res9[120]; +	u32	tbaseh;		/* TX Desc Base Addr High */ +	u32	tbase;		/* TX Desc Base Addr */ +	u8	res10[168]; +	u32	ostbd;		/* Out-of-Sequence(OOS) TX Buffer Desc */ +	u32	ostbdp;		/* OOS TX Data Buffer Ptr */ +	u32	os32tbdp;	/* OOS 32 Bytes TX Data Buffer Ptr Low */ +	u32	os32iptrh;	/* OOS 32 Bytes TX Insert Ptr High */ +	u32	os32iptrl;	/* OOS 32 Bytes TX Insert Ptr Low */ +	u32	os32tbdr;	/* OOS 32 Bytes TX Reserved */ +	u32	os32iil;	/* OOS 32 Bytes TX Insert Idx/Len */ +	u8	res11[52]; +	u32	rctrl;		/* RX Control */ +	u32	rstat;		/* RX Status */ +	u8	res12[4]; +	u32	rbdlen;		/* RxBD Data Len */ +	u8	res13[16]; +	u32	crbptrh;	/* Current RX Buffer Desc Ptr High */ +	u32	crbptr;		/* Current RX Buffer Desc Ptr */ +	u8	res14[24]; +	u32	mrblr;		/* Maximum RX Buffer Len */ +	u32	mrblr2r3;	/* Maximum RX Buffer Len R2R3 */ +	u8	res15[56]; +	u32	rbptrh;		/* RX Buffer Desc Ptr High 0 */ +	u32	rbptr;		/* RX Buffer Desc Ptr */ +	u32	rbptrh1;	/* RX Buffer Desc Ptr High 1 */ +	u32	rbptrl1;	/* RX Buffer Desc Ptr Low 1 */ +	u32	rbptrh2;	/* RX Buffer Desc Ptr High 2 */ +	u32	rbptrl2;	/* RX Buffer Desc Ptr Low 2 */ +	u32	rbptrh3;	/* RX Buffer Desc Ptr High 3 */ +	u32	rbptrl3;	/* RX Buffer Desc Ptr Low 3 */ +	u8	res16[96]; +	u32	rbaseh;		/* RX Desc Base Addr High 0 */ +	u32	rbase;		/* RX Desc Base Addr */ +	u32	rbaseh1;	/* RX Desc Base Addr High 1 */ +	u32	rbasel1;	/* RX Desc Base Addr Low 1 */ +	u32	rbaseh2;	/* RX Desc Base Addr High 2 */ +	u32	rbasel2;	/* RX Desc Base Addr Low 2 */ +	u32	rbaseh3;	/* RX Desc Base Addr High 3 */ +	u32	rbasel3;	/* RX Desc Base Addr Low 3 */ +	u8	res17[224]; +	u32	maccfg1;	/* MAC Configuration 1 */ +	u32	maccfg2;	/* MAC Configuration 2 */ +	u32	ipgifg;		/* Inter Packet Gap/Inter Frame Gap */ +	u32	hafdup;		/* Half Duplex */ +	u32	maxfrm;		/* Maximum Frame Len */ +	u8	res18[12]; +	u32	miimcfg;	/* MII Management Configuration */ +	u32	miimcom;	/* MII Management Cmd */ +	u32	miimadd;	/* MII Management Addr */ +	u32	miimcon;	/* MII Management Control */ +	u32	miimstat;	/* MII Management Status */ +	u32	miimind;	/* MII Management Indicator */ +	u8	res19[4]; +	u32	ifstat;		/* Interface Status */ +	u32	macstnaddr1;	/* Station Addr Part 1 */ +	u32	macstnaddr2;	/* Station Addr Part 2 */ +	u8	res20[312]; +	u32	tr64;		/* TX & RX 64-byte Frame Counter */ +	u32	tr127;		/* TX & RX 65-127 byte Frame Counter */ +	u32	tr255;		/* TX & RX 128-255 byte Frame Counter */ +	u32	tr511;		/* TX & RX 256-511 byte Frame Counter */ +	u32	tr1k;		/* TX & RX 512-1023 byte Frame Counter */ +	u32	trmax;		/* TX & RX 1024-1518 byte Frame Counter */ +	u32	trmgv;		/* TX & RX 1519-1522 byte Good VLAN Frame */ +	u32	rbyt;		/* RX Byte Counter */ +	u32	rpkt;		/* RX Packet Counter */ +	u32	rfcs;		/* RX FCS Error Counter */ +	u32	rmca;		/* RX Multicast Packet Counter */ +	u32	rbca;		/* RX Broadcast Packet Counter */ +	u32	rxcf;		/* RX Control Frame Packet Counter */ +	u32	rxpf;		/* RX Pause Frame Packet Counter */ +	u32	rxuo;		/* RX Unknown OP Code Counter */ +	u32	raln;		/* RX Alignment Error Counter */ +	u32	rflr;		/* RX Frame Len Error Counter */ +	u32	rcde;		/* RX Code Error Counter */ +	u32	rcse;		/* RX Carrier Sense Error Counter */ +	u32	rund;		/* RX Undersize Packet Counter */ +	u32	rovr;		/* RX Oversize Packet Counter */ +	u32	rfrg;		/* RX Fragments Counter */ +	u32	rjbr;		/* RX Jabber Counter */ +	u32	rdrp;		/* RX Drop Counter */ +	u32	tbyt;		/* TX Byte Counter Counter */ +	u32	tpkt;		/* TX Packet Counter */ +	u32	tmca;		/* TX Multicast Packet Counter */ +	u32	tbca;		/* TX Broadcast Packet Counter */ +	u32	txpf;		/* TX Pause Control Frame Counter */ +	u32	tdfr;		/* TX Deferral Packet Counter */ +	u32	tedf;		/* TX Excessive Deferral Packet Counter */ +	u32	tscl;		/* TX Single Collision Packet Counter */ +	u32	tmcl;		/* TX Multiple Collision Packet Counter */ +	u32	tlcl;		/* TX Late Collision Packet Counter */ +	u32	txcl;		/* TX Excessive Collision Packet Counter */ +	u32	tncl;		/* TX Total Collision Counter */ +	u8	res21[4]; +	u32	tdrp;		/* TX Drop Frame Counter */ +	u32	tjbr;		/* TX Jabber Frame Counter */ +	u32	tfcs;		/* TX FCS Error Counter */ +	u32	txcf;		/* TX Control Frame Counter */ +	u32	tovr;		/* TX Oversize Frame Counter */ +	u32	tund;		/* TX Undersize Frame Counter */ +	u32	tfrg;		/* TX Fragments Frame Counter */ +	u32	car1;		/* Carry One */ +	u32	car2;		/* Carry Two */ +	u32	cam1;		/* Carry Mask One */ +	u32	cam2;		/* Carry Mask Two */ +	u8	res22[192]; +	u32	iaddr0;		/* Indivdual addr 0 */ +	u32	iaddr1;		/* Indivdual addr 1 */ +	u32	iaddr2;		/* Indivdual addr 2 */ +	u32	iaddr3;		/* Indivdual addr 3 */ +	u32	iaddr4;		/* Indivdual addr 4 */ +	u32	iaddr5;		/* Indivdual addr 5 */ +	u32	iaddr6;		/* Indivdual addr 6 */ +	u32	iaddr7;		/* Indivdual addr 7 */ +	u8	res23[96]; +	u32	gaddr0;		/* Global addr 0 */ +	u32	gaddr1;		/* Global addr 1 */ +	u32	gaddr2;		/* Global addr 2 */ +	u32	gaddr3;		/* Global addr 3 */ +	u32	gaddr4;		/* Global addr 4 */ +	u32	gaddr5;		/* Global addr 5 */ +	u32	gaddr6;		/* Global addr 6 */ +	u32	gaddr7;		/* Global addr 7 */ +	u8	res24[96]; +	u32	pmd0;		/* Pattern Match Data */ +	u8	res25[4]; +	u32	pmask0;		/* Pattern Mask */ +	u8	res26[4]; +	u32	pcntrl0;	/* Pattern Match Control */ +	u8	res27[4]; +	u32	pattrb0;	/* Pattern Match Attrs */ +	u32	pattrbeli0;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd1;		/* Pattern Match Data */ +	u8	res28[4]; +	u32	pmask1;		/* Pattern Mask */ +	u8	res29[4]; +	u32	pcntrl1;	/* Pattern Match Control */ +	u8	res30[4]; +	u32	pattrb1;	/* Pattern Match Attrs */ +	u32	pattrbeli1;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd2;		/* Pattern Match Data */ +	u8	res31[4]; +	u32	pmask2;		/* Pattern Mask */ +	u8	res32[4]; +	u32	pcntrl2;	/* Pattern Match Control */ +	u8	res33[4]; +	u32	pattrb2;	/* Pattern Match Attrs */ +	u32	pattrbeli2;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd3;		/* Pattern Match Data */ +	u8	res34[4]; +	u32	pmask3;		/* Pattern Mask */ +	u8	res35[4]; +	u32	pcntrl3;	/* Pattern Match Control */ +	u8	res36[4]; +	u32	pattrb3;	/* Pattern Match Attrs */ +	u32	pattrbeli3;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd4;		/* Pattern Match Data */ +	u8	res37[4]; +	u32	pmask4;		/* Pattern Mask */ +	u8	res38[4]; +	u32	pcntrl4;	/* Pattern Match Control */ +	u8	res39[4]; +	u32	pattrb4;	/* Pattern Match Attrs */ +	u32	pattrbeli4;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd5;		/* Pattern Match Data */ +	u8	res40[4]; +	u32	pmask5;		/* Pattern Mask */ +	u8	res41[4]; +	u32	pcntrl5;	/* Pattern Match Control */ +	u8	res42[4]; +	u32	pattrb5;	/* Pattern Match Attrs */ +	u32	pattrbeli5;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd6;		/* Pattern Match Data */ +	u8	res43[4]; +	u32	pmask6;		/* Pattern Mask */ +	u8	res44[4]; +	u32	pcntrl6;	/* Pattern Match Control */ +	u8	res45[4]; +	u32	pattrb6;	/* Pattern Match Attrs */ +	u32	pattrbeli6;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd7;		/* Pattern Match Data */ +	u8	res46[4]; +	u32	pmask7;		/* Pattern Mask */ +	u8	res47[4]; +	u32	pcntrl7;	/* Pattern Match Control */ +	u8	res48[4]; +	u32	pattrb7;	/* Pattern Match Attrs */ +	u32	pattrbeli7;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd8;		/* Pattern Match Data */ +	u8	res49[4]; +	u32	pmask8;		/* Pattern Mask */ +	u8	res50[4]; +	u32	pcntrl8;	/* Pattern Match Control */ +	u8	res51[4]; +	u32	pattrb8;	/* Pattern Match Attrs */ +	u32	pattrbeli8;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd9;		/* Pattern Match Data */ +	u8	res52[4]; +	u32	pmask9;		/* Pattern Mask */ +	u8	res53[4]; +	u32	pcntrl9;	/* Pattern Match Control */ +	u8	res54[4]; +	u32	pattrb9;	/* Pattern Match Attrs */ +	u32	pattrbeli9;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd10;		/* Pattern Match Data */ +	u8	res55[4]; +	u32	pmask10;	/* Pattern Mask */ +	u8	res56[4]; +	u32	pcntrl10;	/* Pattern Match Control */ +	u8	res57[4]; +	u32	pattrb10;	/* Pattern Match Attrs */ +	u32	pattrbeli10;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd11;		/* Pattern Match Data */ +	u8	res58[4]; +	u32	pmask11;	/* Pattern Mask */ +	u8	res59[4]; +	u32	pcntrl11;	/* Pattern Match Control */ +	u8	res60[4]; +	u32	pattrb11;	/* Pattern Match Attrs */ +	u32	pattrbeli11;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd12;		/* Pattern Match Data */ +	u8	res61[4]; +	u32	pmask12;	/* Pattern Mask */ +	u8	res62[4]; +	u32	pcntrl12;	/* Pattern Match Control */ +	u8	res63[4]; +	u32	pattrb12;	/* Pattern Match Attrs */ +	u32	pattrbeli12;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd13;		/* Pattern Match Data */ +	u8	res64[4]; +	u32	pmask13;	/* Pattern Mask */ +	u8	res65[4]; +	u32	pcntrl13;	/* Pattern Match Control */ +	u8	res66[4]; +	u32	pattrb13;	/* Pattern Match Attrs */ +	u32	pattrbeli13;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd14;		/* Pattern Match Data */ +	u8	res67[4]; +	u32	pmask14;	/* Pattern Mask */ +	u8	res68[4]; +	u32	pcntrl14;	/* Pattern Match Control */ +	u8	res69[4]; +	u32	pattrb14;	/* Pattern Match Attrs */ +	u32	pattrbeli14;	/* Pattern Match Attrs Extract Len & Idx */ +	u32	pmd15;		/* Pattern Match Data */ +	u8	res70[4]; +	u32	pmask15;	/* Pattern Mask */ +	u8	res71[4]; +	u32	pcntrl15;	/* Pattern Match Control */ +	u8	res72[4]; +	u32	pattrb15;	/* Pattern Match Attrs */ +	u32	pattrbeli15;	/* Pattern Match Attrs Extract Len & Idx */ +	u8	res73[248]; +	u32	attr;		/* Attrs */ +	u32	attreli;	/* Attrs Extract Len & Idx */ +	u8	res74[1024]; +} ccsr_tsec_t; + +/* PIC Registers */ +typedef struct ccsr_pic { +	u8	res1[64]; +	u32	ipidr0;		/* Interprocessor IRQ Dispatch 0 */ +	u8	res2[12]; +	u32	ipidr1;		/* Interprocessor IRQ Dispatch 1 */ +	u8	res3[12]; +	u32	ipidr2;		/* Interprocessor IRQ Dispatch 2 */ +	u8	res4[12]; +	u32	ipidr3;		/* Interprocessor IRQ Dispatch 3 */ +	u8	res5[12]; +	u32	ctpr;		/* Current Task Priority */ +	u8	res6[12]; +	u32	whoami;		/* Who Am I */ +	u8	res7[12]; +	u32	iack;		/* IRQ Acknowledge */ +	u8	res8[12]; +	u32	eoi;		/* End Of IRQ */ +	u8	res9[3916]; +	u32	frr;		/* Feature Reporting */ +	u8	res10[28]; +	u32	gcr;		/* Global Configuration */ +#define MPC85xx_PICGCR_RST	0x80000000 +#define MPC85xx_PICGCR_M	0x20000000 +	u8	res11[92]; +	u32	vir;		/* Vendor Identification */ +	u8	res12[12]; +	u32	pir;		/* Processor Initialization */ +	u8	res13[12]; +	u32	ipivpr0;	/* IPI Vector/Priority 0 */ +	u8	res14[12]; +	u32	ipivpr1;	/* IPI Vector/Priority 1 */ +	u8	res15[12]; +	u32	ipivpr2;	/* IPI Vector/Priority 2 */ +	u8	res16[12]; +	u32	ipivpr3;	/* IPI Vector/Priority 3 */ +	u8	res17[12]; +	u32	svr;		/* Spurious Vector */ +	u8	res18[12]; +	u32	tfrr;		/* Timer Frequency Reporting */ +	u8	res19[12]; +	u32	gtccr0;		/* Global Timer Current Count 0 */ +	u8	res20[12]; +	u32	gtbcr0;		/* Global Timer Base Count 0 */ +	u8	res21[12]; +	u32	gtvpr0;		/* Global Timer Vector/Priority 0 */ +	u8	res22[12]; +	u32	gtdr0;		/* Global Timer Destination 0 */ +	u8	res23[12]; +	u32	gtccr1;		/* Global Timer Current Count 1 */ +	u8	res24[12]; +	u32	gtbcr1;		/* Global Timer Base Count 1 */ +	u8	res25[12]; +	u32	gtvpr1;		/* Global Timer Vector/Priority 1 */ +	u8	res26[12]; +	u32	gtdr1;		/* Global Timer Destination 1 */ +	u8	res27[12]; +	u32	gtccr2;		/* Global Timer Current Count 2 */ +	u8	res28[12]; +	u32	gtbcr2;		/* Global Timer Base Count 2 */ +	u8	res29[12]; +	u32	gtvpr2;		/* Global Timer Vector/Priority 2 */ +	u8	res30[12]; +	u32	gtdr2;		/* Global Timer Destination 2 */ +	u8	res31[12]; +	u32	gtccr3;		/* Global Timer Current Count 3 */ +	u8	res32[12]; +	u32	gtbcr3;		/* Global Timer Base Count 3 */ +	u8	res33[12]; +	u32	gtvpr3;		/* Global Timer Vector/Priority 3 */ +	u8	res34[12]; +	u32	gtdr3;		/* Global Timer Destination 3 */ +	u8	res35[268]; +	u32	tcr;		/* Timer Control */ +	u8	res36[12]; +	u32	irqsr0;		/* IRQ_OUT Summary 0 */ +	u8	res37[12]; +	u32	irqsr1;		/* IRQ_OUT Summary 1 */ +	u8	res38[12]; +	u32	cisr0;		/* Critical IRQ Summary 0 */ +	u8	res39[12]; +	u32	cisr1;		/* Critical IRQ Summary 1 */ +	u8	res40[188]; +	u32	msgr0;		/* Message 0 */ +	u8	res41[12]; +	u32	msgr1;		/* Message 1 */ +	u8	res42[12]; +	u32	msgr2;		/* Message 2 */ +	u8	res43[12]; +	u32	msgr3;		/* Message 3 */ +	u8	res44[204]; +	u32	mer;		/* Message Enable */ +	u8	res45[12]; +	u32	msr;		/* Message Status */ +	u8	res46[60140]; +	u32	eivpr0;		/* External IRQ Vector/Priority 0 */ +	u8	res47[12]; +	u32	eidr0;		/* External IRQ Destination 0 */ +	u8	res48[12]; +	u32	eivpr1;		/* External IRQ Vector/Priority 1 */ +	u8	res49[12]; +	u32	eidr1;		/* External IRQ Destination 1 */ +	u8	res50[12]; +	u32	eivpr2;		/* External IRQ Vector/Priority 2 */ +	u8	res51[12]; +	u32	eidr2;		/* External IRQ Destination 2 */ +	u8	res52[12]; +	u32	eivpr3;		/* External IRQ Vector/Priority 3 */ +	u8	res53[12]; +	u32	eidr3;		/* External IRQ Destination 3 */ +	u8	res54[12]; +	u32	eivpr4;		/* External IRQ Vector/Priority 4 */ +	u8	res55[12]; +	u32	eidr4;		/* External IRQ Destination 4 */ +	u8	res56[12]; +	u32	eivpr5;		/* External IRQ Vector/Priority 5 */ +	u8	res57[12]; +	u32	eidr5;		/* External IRQ Destination 5 */ +	u8	res58[12]; +	u32	eivpr6;		/* External IRQ Vector/Priority 6 */ +	u8	res59[12]; +	u32	eidr6;		/* External IRQ Destination 6 */ +	u8	res60[12]; +	u32	eivpr7;		/* External IRQ Vector/Priority 7 */ +	u8	res61[12]; +	u32	eidr7;		/* External IRQ Destination 7 */ +	u8	res62[12]; +	u32	eivpr8;		/* External IRQ Vector/Priority 8 */ +	u8	res63[12]; +	u32	eidr8;		/* External IRQ Destination 8 */ +	u8	res64[12]; +	u32	eivpr9;		/* External IRQ Vector/Priority 9 */ +	u8	res65[12]; +	u32	eidr9;		/* External IRQ Destination 9 */ +	u8	res66[12]; +	u32	eivpr10;	/* External IRQ Vector/Priority 10 */ +	u8	res67[12]; +	u32	eidr10;		/* External IRQ Destination 10 */ +	u8	res68[12]; +	u32	eivpr11;	/* External IRQ Vector/Priority 11 */ +	u8	res69[12]; +	u32	eidr11;		/* External IRQ Destination 11 */ +	u8	res70[140]; +	u32	iivpr0;		/* Internal IRQ Vector/Priority 0 */ +	u8	res71[12]; +	u32	iidr0;		/* Internal IRQ Destination 0 */ +	u8	res72[12]; +	u32	iivpr1;		/* Internal IRQ Vector/Priority 1 */ +	u8	res73[12]; +	u32	iidr1;		/* Internal IRQ Destination 1 */ +	u8	res74[12]; +	u32	iivpr2;		/* Internal IRQ Vector/Priority 2 */ +	u8	res75[12]; +	u32	iidr2;		/* Internal IRQ Destination 2 */ +	u8	res76[12]; +	u32	iivpr3;		/* Internal IRQ Vector/Priority 3 */ +	u8	res77[12]; +	u32	iidr3;		/* Internal IRQ Destination 3 */ +	u8	res78[12]; +	u32	iivpr4;		/* Internal IRQ Vector/Priority 4 */ +	u8	res79[12]; +	u32	iidr4;		/* Internal IRQ Destination 4 */ +	u8	res80[12]; +	u32	iivpr5;		/* Internal IRQ Vector/Priority 5 */ +	u8	res81[12]; +	u32	iidr5;		/* Internal IRQ Destination 5 */ +	u8	res82[12]; +	u32	iivpr6;		/* Internal IRQ Vector/Priority 6 */ +	u8	res83[12]; +	u32	iidr6;		/* Internal IRQ Destination 6 */ +	u8	res84[12]; +	u32	iivpr7;		/* Internal IRQ Vector/Priority 7 */ +	u8	res85[12]; +	u32	iidr7;		/* Internal IRQ Destination 7 */ +	u8	res86[12]; +	u32	iivpr8;		/* Internal IRQ Vector/Priority 8 */ +	u8	res87[12]; +	u32	iidr8;		/* Internal IRQ Destination 8 */ +	u8	res88[12]; +	u32	iivpr9;		/* Internal IRQ Vector/Priority 9 */ +	u8	res89[12]; +	u32	iidr9;		/* Internal IRQ Destination 9 */ +	u8	res90[12]; +	u32	iivpr10;	/* Internal IRQ Vector/Priority 10 */ +	u8	res91[12]; +	u32	iidr10;		/* Internal IRQ Destination 10 */ +	u8	res92[12]; +	u32	iivpr11;	/* Internal IRQ Vector/Priority 11 */ +	u8	res93[12]; +	u32	iidr11;		/* Internal IRQ Destination 11 */ +	u8	res94[12]; +	u32	iivpr12;	/* Internal IRQ Vector/Priority 12 */ +	u8	res95[12]; +	u32	iidr12;		/* Internal IRQ Destination 12 */ +	u8	res96[12]; +	u32	iivpr13;	/* Internal IRQ Vector/Priority 13 */ +	u8	res97[12]; +	u32	iidr13;		/* Internal IRQ Destination 13 */ +	u8	res98[12]; +	u32	iivpr14;	/* Internal IRQ Vector/Priority 14 */ +	u8	res99[12]; +	u32	iidr14;		/* Internal IRQ Destination 14 */ +	u8	res100[12]; +	u32	iivpr15;	/* Internal IRQ Vector/Priority 15 */ +	u8	res101[12]; +	u32	iidr15;		/* Internal IRQ Destination 15 */ +	u8	res102[12]; +	u32	iivpr16;	/* Internal IRQ Vector/Priority 16 */ +	u8	res103[12]; +	u32	iidr16;		/* Internal IRQ Destination 16 */ +	u8	res104[12]; +	u32	iivpr17;	/* Internal IRQ Vector/Priority 17 */ +	u8	res105[12]; +	u32	iidr17;		/* Internal IRQ Destination 17 */ +	u8	res106[12]; +	u32	iivpr18;	/* Internal IRQ Vector/Priority 18 */ +	u8	res107[12]; +	u32	iidr18;		/* Internal IRQ Destination 18 */ +	u8	res108[12]; +	u32	iivpr19;	/* Internal IRQ Vector/Priority 19 */ +	u8	res109[12]; +	u32	iidr19;		/* Internal IRQ Destination 19 */ +	u8	res110[12]; +	u32	iivpr20;	/* Internal IRQ Vector/Priority 20 */ +	u8	res111[12]; +	u32	iidr20;		/* Internal IRQ Destination 20 */ +	u8	res112[12]; +	u32	iivpr21;	/* Internal IRQ Vector/Priority 21 */ +	u8	res113[12]; +	u32	iidr21;		/* Internal IRQ Destination 21 */ +	u8	res114[12]; +	u32	iivpr22;	/* Internal IRQ Vector/Priority 22 */ +	u8	res115[12]; +	u32	iidr22;		/* Internal IRQ Destination 22 */ +	u8	res116[12]; +	u32	iivpr23;	/* Internal IRQ Vector/Priority 23 */ +	u8	res117[12]; +	u32	iidr23;		/* Internal IRQ Destination 23 */ +	u8	res118[12]; +	u32	iivpr24;	/* Internal IRQ Vector/Priority 24 */ +	u8	res119[12]; +	u32	iidr24;		/* Internal IRQ Destination 24 */ +	u8	res120[12]; +	u32	iivpr25;	/* Internal IRQ Vector/Priority 25 */ +	u8	res121[12]; +	u32	iidr25;		/* Internal IRQ Destination 25 */ +	u8	res122[12]; +	u32	iivpr26;	/* Internal IRQ Vector/Priority 26 */ +	u8	res123[12]; +	u32	iidr26;		/* Internal IRQ Destination 26 */ +	u8	res124[12]; +	u32	iivpr27;	/* Internal IRQ Vector/Priority 27 */ +	u8	res125[12]; +	u32	iidr27;		/* Internal IRQ Destination 27 */ +	u8	res126[12]; +	u32	iivpr28;	/* Internal IRQ Vector/Priority 28 */ +	u8	res127[12]; +	u32	iidr28;		/* Internal IRQ Destination 28 */ +	u8	res128[12]; +	u32	iivpr29;	/* Internal IRQ Vector/Priority 29 */ +	u8	res129[12]; +	u32	iidr29;		/* Internal IRQ Destination 29 */ +	u8	res130[12]; +	u32	iivpr30;	/* Internal IRQ Vector/Priority 30 */ +	u8	res131[12]; +	u32	iidr30;		/* Internal IRQ Destination 30 */ +	u8	res132[12]; +	u32	iivpr31;	/* Internal IRQ Vector/Priority 31 */ +	u8	res133[12]; +	u32	iidr31;		/* Internal IRQ Destination 31 */ +	u8	res134[4108]; +	u32	mivpr0;		/* Messaging IRQ Vector/Priority 0 */ +	u8	res135[12]; +	u32	midr0;		/* Messaging IRQ Destination 0 */ +	u8	res136[12]; +	u32	mivpr1;		/* Messaging IRQ Vector/Priority 1 */ +	u8	res137[12]; +	u32	midr1;		/* Messaging IRQ Destination 1 */ +	u8	res138[12]; +	u32	mivpr2;		/* Messaging IRQ Vector/Priority 2 */ +	u8	res139[12]; +	u32	midr2;		/* Messaging IRQ Destination 2 */ +	u8	res140[12]; +	u32	mivpr3;		/* Messaging IRQ Vector/Priority 3 */ +	u8	res141[12]; +	u32	midr3;		/* Messaging IRQ Destination 3 */ +	u8	res142[59852]; +	u32	ipi0dr0;	/* Processor 0 Interprocessor IRQ Dispatch 0 */ +	u8	res143[12]; +	u32	ipi0dr1;	/* Processor 0 Interprocessor IRQ Dispatch 1 */ +	u8	res144[12]; +	u32	ipi0dr2;	/* Processor 0 Interprocessor IRQ Dispatch 2 */ +	u8	res145[12]; +	u32	ipi0dr3;	/* Processor 0 Interprocessor IRQ Dispatch 3 */ +	u8	res146[12]; +	u32	ctpr0;		/* Current Task Priority for Processor 0 */ +	u8	res147[12]; +	u32	whoami0;	/* Who Am I for Processor 0 */ +	u8	res148[12]; +	u32	iack0;		/* IRQ Acknowledge for Processor 0 */ +	u8	res149[12]; +	u32	eoi0;		/* End Of IRQ for Processor 0 */ +	u8	res150[130892]; +} ccsr_pic_t; + +/* CPM Block */ +#ifndef CONFIG_CPM2 +typedef struct ccsr_cpm { +	u8 res[262144]; +} ccsr_cpm_t; +#else +/* + * DPARM + * General SIU + */ +typedef struct ccsr_cpm_siu { +	u8	res1[80]; +	u32	smaer; +	u32	smser; +	u32	smevr; +	u8	res2[4]; +	u32	lmaer; +	u32	lmser; +	u32	lmevr; +	u8	res3[2964]; +} ccsr_cpm_siu_t; + +/* IRQ Controller */ +typedef struct ccsr_cpm_intctl { +	u16	sicr; +	u8	res1[2]; +	u32	sivec; +	u32	sipnrh; +	u32	sipnrl; +	u32	siprr; +	u32	scprrh; +	u32	scprrl; +	u32	simrh; +	u32	simrl; +	u32	siexr; +	u8	res2[88]; +	u32	sccr; +	u8	res3[124]; +} ccsr_cpm_intctl_t; + +/* input/output port */ +typedef struct ccsr_cpm_iop { +	u32	pdira; +	u32	ppara; +	u32	psora; +	u32	podra; +	u32	pdata; +	u8	res1[12]; +	u32	pdirb; +	u32	pparb; +	u32	psorb; +	u32	podrb; +	u32	pdatb; +	u8	res2[12]; +	u32	pdirc; +	u32	pparc; +	u32	psorc; +	u32	podrc; +	u32	pdatc; +	u8	res3[12]; +	u32	pdird; +	u32	ppard; +	u32	psord; +	u32	podrd; +	u32	pdatd; +	u8	res4[12]; +} ccsr_cpm_iop_t; + +/* CPM timers */ +typedef struct ccsr_cpm_timer { +	u8	tgcr1; +	u8	res1[3]; +	u8	tgcr2; +	u8	res2[11]; +	u16	tmr1; +	u16	tmr2; +	u16	trr1; +	u16	trr2; +	u16	tcr1; +	u16	tcr2; +	u16	tcn1; +	u16	tcn2; +	u16	tmr3; +	u16	tmr4; +	u16	trr3; +	u16	trr4; +	u16	tcr3; +	u16	tcr4; +	u16	tcn3; +	u16	tcn4; +	u16	ter1; +	u16	ter2; +	u16	ter3; +	u16	ter4; +	u8	res3[608]; +} ccsr_cpm_timer_t; + +/* SDMA */ +typedef struct ccsr_cpm_sdma { +	u8	sdsr; +	u8	res1[3]; +	u8	sdmr; +	u8	res2[739]; +} ccsr_cpm_sdma_t; + +/* FCC1 */ +typedef struct ccsr_cpm_fcc1 { +	u32	gfmr; +	u32	fpsmr; +	u16	ftodr; +	u8	res1[2]; +	u16	fdsr; +	u8	res2[2]; +	u16	fcce; +	u8	res3[2]; +	u16	fccm; +	u8	res4[2]; +	u8	fccs; +	u8	res5[3]; +	u8	ftirr_phy[4]; +} ccsr_cpm_fcc1_t; + +/* FCC2 */ +typedef struct ccsr_cpm_fcc2 { +	u32	gfmr; +	u32	fpsmr; +	u16	ftodr; +	u8	res1[2]; +	u16	fdsr; +	u8	res2[2]; +	u16	fcce; +	u8	res3[2]; +	u16	fccm; +	u8	res4[2]; +	u8	fccs; +	u8	res5[3]; +	u8	ftirr_phy[4]; +} ccsr_cpm_fcc2_t; + +/* FCC3 */ +typedef struct ccsr_cpm_fcc3 { +	u32	gfmr; +	u32	fpsmr; +	u16	ftodr; +	u8	res1[2]; +	u16	fdsr; +	u8	res2[2]; +	u16	fcce; +	u8	res3[2]; +	u16	fccm; +	u8	res4[2]; +	u8	fccs; +	u8	res5[3]; +	u8	res[36]; +} ccsr_cpm_fcc3_t; + +/* FCC1 extended */ +typedef struct ccsr_cpm_fcc1_ext { +	u32	firper; +	u32	firer; +	u32	firsr_h; +	u32	firsr_l; +	u8	gfemr; +	u8	res[15]; + +} ccsr_cpm_fcc1_ext_t; + +/* FCC2 extended */ +typedef struct ccsr_cpm_fcc2_ext { +	u32	firper; +	u32	firer; +	u32	firsr_h; +	u32	firsr_l; +	u8	gfemr; +	u8	res[31]; +} ccsr_cpm_fcc2_ext_t; + +/* FCC3 extended */ +typedef struct ccsr_cpm_fcc3_ext { +	u8	gfemr; +	u8	res[47]; +} ccsr_cpm_fcc3_ext_t; + +/* TC layers */ +typedef struct ccsr_cpm_tmp1 { +	u8	res[496]; +} ccsr_cpm_tmp1_t; + +/* BRGs:5,6,7,8 */ +typedef struct ccsr_cpm_brg2 { +	u32	brgc5; +	u32	brgc6; +	u32	brgc7; +	u32	brgc8; +	u8	res[608]; +} ccsr_cpm_brg2_t; + +/* I2C */ +typedef struct ccsr_cpm_i2c { +	u8	i2mod; +	u8	res1[3]; +	u8	i2add; +	u8	res2[3]; +	u8	i2brg; +	u8	res3[3]; +	u8	i2com; +	u8	res4[3]; +	u8	i2cer; +	u8	res5[3]; +	u8	i2cmr; +	u8	res6[331]; +} ccsr_cpm_i2c_t; + +/* CPM core */ +typedef struct ccsr_cpm_cp { +	u32	cpcr; +	u32	rccr; +	u8	res1[14]; +	u16	rter; +	u8	res2[2]; +	u16	rtmr; +	u16	rtscr; +	u8	res3[2]; +	u32	rtsr; +	u8	res4[12]; +} ccsr_cpm_cp_t; + +/* BRGs:1,2,3,4 */ +typedef struct ccsr_cpm_brg1 { +	u32	brgc1; +	u32	brgc2; +	u32	brgc3; +	u32	brgc4; +} ccsr_cpm_brg1_t; + +/* SCC1-SCC4 */ +typedef struct ccsr_cpm_scc { +	u32	gsmrl; +	u32	gsmrh; +	u16	psmr; +	u8	res1[2]; +	u16	todr; +	u16	dsr; +	u16	scce; +	u8	res2[2]; +	u16	sccm; +	u8	res3; +	u8	sccs; +	u8	res4[8]; +} ccsr_cpm_scc_t; + +typedef struct ccsr_cpm_tmp2 { +	u8	res[32]; +} ccsr_cpm_tmp2_t; + +/* SPI */ +typedef struct ccsr_cpm_spi { +	u16	spmode; +	u8	res1[4]; +	u8	spie; +	u8	res2[3]; +	u8	spim; +	u8	res3[2]; +	u8	spcom; +	u8	res4[82]; +} ccsr_cpm_spi_t; + +/* CPM MUX */ +typedef struct ccsr_cpm_mux { +	u8	cmxsi1cr; +	u8	res1; +	u8	cmxsi2cr; +	u8	res2; +	u32	cmxfcr; +	u32	cmxscr; +	u8	res3[2]; +	u16	cmxuar; +	u8	res4[16]; +} ccsr_cpm_mux_t; + +/* SI,MCC,etc */ +typedef struct ccsr_cpm_tmp3 { +	u8 res[58592]; +} ccsr_cpm_tmp3_t; + +typedef struct ccsr_cpm_iram { +	u32	iram[8192]; +	u8	res[98304]; +} ccsr_cpm_iram_t; + +typedef struct ccsr_cpm { +	/* Some references are into the unique & known dpram spaces, +	 * others are from the generic base. +	 */ +#define im_dprambase		im_dpram1 +	u8			im_dpram1[16*1024]; +	u8			res1[16*1024]; +	u8			im_dpram2[16*1024]; +	u8			res2[16*1024]; +	ccsr_cpm_siu_t		im_cpm_siu; /* SIU Configuration */ +	ccsr_cpm_intctl_t	im_cpm_intctl; /* IRQ Controller */ +	ccsr_cpm_iop_t		im_cpm_iop; /* IO Port control/status */ +	ccsr_cpm_timer_t	im_cpm_timer; /* CPM timers */ +	ccsr_cpm_sdma_t		im_cpm_sdma; /* SDMA control/status */ +	ccsr_cpm_fcc1_t		im_cpm_fcc1; +	ccsr_cpm_fcc2_t		im_cpm_fcc2; +	ccsr_cpm_fcc3_t		im_cpm_fcc3; +	ccsr_cpm_fcc1_ext_t	im_cpm_fcc1_ext; +	ccsr_cpm_fcc2_ext_t	im_cpm_fcc2_ext; +	ccsr_cpm_fcc3_ext_t	im_cpm_fcc3_ext; +	ccsr_cpm_tmp1_t		im_cpm_tmp1; +	ccsr_cpm_brg2_t		im_cpm_brg2; +	ccsr_cpm_i2c_t		im_cpm_i2c; +	ccsr_cpm_cp_t		im_cpm_cp; +	ccsr_cpm_brg1_t		im_cpm_brg1; +	ccsr_cpm_scc_t		im_cpm_scc[4]; +	ccsr_cpm_tmp2_t		im_cpm_tmp2; +	ccsr_cpm_spi_t		im_cpm_spi; +	ccsr_cpm_mux_t		im_cpm_mux; +	ccsr_cpm_tmp3_t		im_cpm_tmp3; +	ccsr_cpm_iram_t		im_cpm_iram; +} ccsr_cpm_t; +#endif + +#ifdef CONFIG_SYS_SRIO +/* Architectural regsiters */ +struct rio_arch { +	u32	didcar;	/* Device Identity CAR */ +	u32	dicar;	/* Device Information CAR */ +	u32	aidcar;	/* Assembly Identity CAR */ +	u32	aicar;	/* Assembly Information CAR */ +	u32	pefcar;	/* Processing Element Features CAR */ +	u8	res0[4]; +	u32	socar;	/* Source Operations CAR */ +	u32	docar;	/* Destination Operations CAR */ +	u8	res1[32]; +	u32	mcsr;	/* Mailbox CSR */ +	u32	pwdcsr;	/* Port-Write and Doorbell CSR */ +	u8	res2[4]; +	u32	pellccsr;	/* Processing Element Logic Layer CCSR */ +	u8	res3[12]; +	u32	lcsbacsr;	/* Local Configuration Space BACSR */ +	u32	bdidcsr;	/* Base Device ID CSR */ +	u8	res4[4]; +	u32	hbdidlcsr;	/* Host Base Device ID Lock CSR */ +	u32	ctcsr;	/* Component Tag CSR */ +}; + +/* Extended Features Space: 1x/4x LP-Serial Port registers */ +struct rio_lp_serial_port { +	u32	plmreqcsr;	/* Port Link Maintenance Request CSR */ +	u32	plmrespcsr;	/* Port Link Maintenance Response CS */ +	u32	plascsr;	/* Port Local Ackid Status CSR */ +	u8	res0[12]; +	u32	pescsr;	/* Port Error and Status CSR */ +	u32	pccsr;	/* Port Control CSR */ +}; + +/* Extended Features Space: 1x/4x LP-Serial registers */ +struct rio_lp_serial { +	u32	pmbh0csr;	/* Port Maintenance Block Header 0 CSR */ +	u8	res0[28]; +	u32	pltoccsr;	/* Port Link Time-out CCSR */ +	u32	prtoccsr;	/* Port Response Time-out CCSR */ +	u8	res1[20]; +	u32	pgccsr;	/* Port General CSR */ +	struct rio_lp_serial_port	port[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +}; + +/* Logical error reporting registers */ +struct rio_logical_err { +	u32	erbh;	/* Error Reporting Block Header Register */ +	u8	res0[4]; +	u32	ltledcsr;	/* Logical/Transport layer error DCSR */ +	u32	ltleecsr;	/* Logical/Transport layer error ECSR */ +	u8	res1[4]; +	u32	ltlaccsr;	/* Logical/Transport layer ACCSR */ +	u32	ltldidccsr;	/* Logical/Transport layer DID CCSR */ +	u32	ltlcccsr;	/* Logical/Transport layer control CCSR */ +}; + +/* Physical error reporting port registers */ +struct rio_phys_err_port { +	u32	edcsr;	/* Port error detect CSR */ +	u32	erecsr;	/* Port error rate enable CSR */ +	u32	ecacsr;	/* Port error capture attributes CSR */ +	u32	pcseccsr0;	/* Port packet/control symbol ECCSR 0 */ +	u32	peccsr[3];	/* Port error capture CSR */ +	u8	res0[12]; +	u32	ercsr;	/* Port error rate CSR */ +	u32	ertcsr;	/* Port error rate threshold CSR */ +	u8	res1[16]; +}; + +/* Physical error reporting registers */ +struct rio_phys_err { +	struct rio_phys_err_port	port[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +}; + +/* Implementation Space: General Port-Common */ +struct rio_impl_common { +	u8	res0[4]; +	u32	llcr;	/* Logical Layer Configuration Register */ +	u8	res1[8]; +	u32	epwisr;	/* Error / Port-Write Interrupt SR */ +	u8	res2[12]; +	u32	lretcr;	/* Logical Retry Error Threshold CR */ +	u8	res3[92]; +	u32	pretcr;	/* Physical Retry Erorr Threshold CR */ +	u8	res4[124]; +}; + +/* Implementation Space: Port Specific */ +struct rio_impl_port_spec { +	u32	adidcsr;	/* Port Alt. Device ID CSR */ +	u8	res0[28]; +	u32	ptaacr;	/* Port Pass-Through/Accept-All CR */ +	u32	lopttlcr; +	u8	res1[8]; +	u32	iecsr;	/* Port Implementation Error CSR */ +	u8	res2[12]; +	u32	pcr;		/* Port Phsyical Configuration Register */ +	u8	res3[20]; +	u32	slcsr;	/* Port Serial Link CSR */ +	u8	res4[4]; +	u32	sleicr;	/* Port Serial Link Error Injection */ +	u32	a0txcr;	/* Port Arbitration 0 Tx CR */ +	u32	a1txcr;	/* Port Arbitration 1 Tx CR */ +	u32	a2txcr;	/* Port Arbitration 2 Tx CR */ +	u32	mreqtxbacr[3];	/* Port Request Tx Buffer ACR */ +	u32	mrspfctxbacr;	/* Port Response/Flow Control Tx Buffer ACR */ +}; + +/* Implementation Space: register */ +struct rio_implement { +	struct rio_impl_common	com; +	struct rio_impl_port_spec	port[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +}; + +/* Revision Control Register */ +struct rio_rev_ctrl { +	u32	ipbrr[2];	/* IP Block Revision Register */ +}; + +struct rio_atmu_row { +	u32	rowtar; /* RapidIO Outbound Window TAR */ +	u32	rowtear; /* RapidIO Outbound Window TEAR */ +	u32	rowbar; +	u8	res0[4]; +	u32	rowar; /* RapidIO Outbound Attributes Register */ +	u32	rowsr[3]; /* Port RapidIO outbound window segment register */ +}; + +struct rio_atmu_riw { +	u32	riwtar; /* RapidIO Inbound Window Translation AR */ +	u8	res0[4]; +	u32	riwbar; /* RapidIO Inbound Window Base AR */ +	u8	res1[4]; +	u32	riwar; /* RapidIO Inbound Attributes Register */ +	u8	res2[12]; +}; + +/* ATMU window registers */ +struct rio_atmu_win { +	struct rio_atmu_row	outbw[CONFIG_SYS_FSL_SRIO_OB_WIN_NUM]; +	u8	res0[64]; +	struct rio_atmu_riw	inbw[CONFIG_SYS_FSL_SRIO_IB_WIN_NUM]; +}; + +struct rio_atmu { +	struct rio_atmu_win	port[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +}; + +#ifdef CONFIG_SYS_FSL_RMU +struct rio_msg { +	u32	omr; /* Outbound Mode Register */ +	u32	osr; /* Outbound Status Register */ +	u32	eodqdpar; /* Extended Outbound DQ DPAR */ +	u32	odqdpar; /* Outbound Descriptor Queue DPAR */ +	u32	eosar; /* Extended Outbound Unit Source AR */ +	u32	osar; /* Outbound Unit Source AR */ +	u32	odpr; /* Outbound Destination Port Register */ +	u32	odatr; /* Outbound Destination Attributes Register */ +	u32	odcr; /* Outbound Doubleword Count Register */ +	u32	eodqepar; /* Extended Outbound DQ EPAR */ +	u32	odqepar; /* Outbound Descriptor Queue EPAR */ +	u32	oretr; /* Outbound Retry Error Threshold Register */ +	u32	omgr; /* Outbound Multicast Group Register */ +	u32	omlr; /* Outbound Multicast List Register */ +	u8	res0[40]; +	u32	imr;	 /* Outbound Mode Register */ +	u32	isr; /* Inbound Status Register */ +	u32	eidqdpar; /* Extended Inbound Descriptor Queue DPAR */ +	u32	idqdpar; /* Inbound Descriptor Queue DPAR */ +	u32	eifqepar; /* Extended Inbound Frame Queue EPAR */ +	u32	ifqepar; /* Inbound Frame Queue EPAR */ +	u32	imirir; /* Inbound Maximum Interrutp RIR */ +	u8	res1[4]; +	u32 eihqepar; /* Extended inbound message header queue EPAR */ +	u32 ihqepar; /* Inbound message header queue EPAR */ +	u8	res2[120]; +}; + +struct rio_dbell { +	u32	odmr; /* Outbound Doorbell Mode Register */ +	u32	odsr; /* Outbound Doorbell Status Register */ +	u8	res0[16]; +	u32	oddpr; /* Outbound Doorbell Destination Port */ +	u32	oddatr; /* Outbound Doorbell Destination AR */ +	u8	res1[12]; +	u32	oddretr; /* Outbound Doorbell Retry Threshold CR */ +	u8	res2[48]; +	u32	idmr; /* Inbound Doorbell Mode Register */ +	u32	idsr;	 /* Inbound Doorbell Status Register */ +	u32	iedqdpar; /* Extended Inbound Doorbell Queue DPAR */ +	u32	iqdpar; /* Inbound Doorbell Queue DPAR */ +	u32	iedqepar; /* Extended Inbound Doorbell Queue EPAR */ +	u32	idqepar; /* Inbound Doorbell Queue EPAR */ +	u32	idmirir; /* Inbound Doorbell Max Interrupt RIR */ +}; + +struct rio_pw { +	u32	pwmr; /* Port-Write Mode Register */ +	u32	pwsr; /* Port-Write Status Register */ +	u32	epwqbar; /* Extended Port-Write Queue BAR */ +	u32	pwqbar; /* Port-Write Queue Base Address Register */ +}; +#endif + +#ifdef CONFIG_SYS_FSL_SRIO_LIODN +struct rio_liodn { +	u32	plbr; +	u8	res0[28]; +	u32	plaor; +	u8	res1[12]; +	u32	pludr; +	u32	plldr; +	u8	res2[456]; +}; +#endif + +/* RapidIO Registers */ +struct ccsr_rio { +	struct rio_arch	arch; +	u8	res0[144]; +	struct rio_lp_serial	lp_serial; +	u8	res1[1152]; +	struct rio_logical_err	logical_err; +	u8	res2[32]; +	struct rio_phys_err	phys_err; +	u8	res3[63808]; +	struct rio_implement	impl; +	u8	res4[2552]; +	struct rio_rev_ctrl	rev; +	struct rio_atmu	atmu; +#ifdef CONFIG_SYS_FSL_RMU +	u8	res5[8192]; +	struct rio_msg	msg[CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM]; +	u8	res6[512]; +	struct rio_dbell	dbell; +	u8	res7[100]; +	struct rio_pw	pw; +#endif +#ifdef CONFIG_SYS_FSL_SRIO_LIODN +	u8	res5[8192]; +	struct rio_liodn liodn[CONFIG_SYS_FSL_SRIO_MAX_PORTS]; +#endif +}; +#endif + +/* Quick Engine Block Pin Muxing Registers */ +typedef struct par_io { +	u32	cpodr; +	u32	cpdat; +	u32	cpdir1; +	u32	cpdir2; +	u32	cppar1; +	u32	cppar2; +	u8	res[8]; +} par_io_t; + +#ifdef CONFIG_SYS_FSL_CPC +/* + * Define a single offset that is the start of all the CPC register + * blocks - if there is more than one CPC, we expect these to be + * contiguous 4k regions + */ + +typedef struct cpc_corenet { +	u32 	cpccsr0;	/* Config/status reg */ +	u32	res1; +	u32	cpccfg0;	/* Configuration register */ +	u32	res2; +	u32	cpcewcr0;	/* External Write reg 0 */ +	u32	cpcewabr0;	/* External write base reg 0 */ +	u32	res3[2]; +	u32	cpcewcr1;	/* External Write reg 1 */ +	u32	cpcewabr1;	/* External write base reg 1 */ +	u32	res4[54]; +	u32	cpcsrcr1;	/* SRAM control reg 1 */ +	u32	cpcsrcr0;	/* SRAM control reg 0 */ +	u32	res5[62]; +	struct { +		u32	id;	/* partition ID */ +		u32	res; +		u32	alloc;	/* partition allocation */ +		u32	way;	/* partition way */ +	} partition_regs[16]; +	u32	res6[704]; +	u32	cpcerrinjhi;	/* Error injection high */ +	u32	cpcerrinjlo;	/* Error injection lo */ +	u32	cpcerrinjctl;	/* Error injection control */ +	u32	res7[5]; +	u32	cpccaptdatahi;	/* capture data high */ +	u32	cpccaptdatalo;	/* capture data low */ +	u32	cpcaptecc;	/* capture ECC */ +	u32	res8[5]; +	u32	cpcerrdet;	/* error detect */ +	u32	cpcerrdis;	/* error disable */ +	u32	cpcerrinten;	/* errir interrupt enable */ +	u32	cpcerrattr;	/* error attribute */ +	u32	cpcerreaddr;	/* error extended address */ +	u32	cpcerraddr;	/* error address */ +	u32	cpcerrctl;	/* error control */ +	u32	res9[41];	/* pad out to 4k */ +	u32	cpchdbcr0;	/* hardware debug control register 0 */ +	u32	res10[63];	/* pad out to 4k */ +} cpc_corenet_t; + +#define CPC_CSR0_CE	0x80000000	/* Cache Enable */ +#define CPC_CSR0_PE	0x40000000	/* Enable ECC */ +#define CPC_CSR0_FI	0x00200000	/* Cache Flash Invalidate */ +#define CPC_CSR0_WT	0x00080000	/* Write-through mode */ +#define CPC_CSR0_FL	0x00000800	/* Hardware cache flush */ +#define CPC_CSR0_LFC	0x00000400	/* Cache Lock Flash Clear */ +#define CPC_CFG0_SZ_MASK	0x00003fff +#define CPC_CFG0_SZ_K(x)	((x & CPC_CFG0_SZ_MASK) << 6) +#define CPC_CFG0_NUM_WAYS(x)	(((x >> 14) & 0x1f) + 1) +#define CPC_CFG0_LINE_SZ(x)	((((x >> 23) & 0x3) + 1) * 32) +#define CPC_SRCR1_SRBARU_MASK	0x0000ffff +#define CPC_SRCR1_SRBARU(x)	(((unsigned long long)x >> 32) \ +				 & CPC_SRCR1_SRBARU_MASK) +#define	CPC_SRCR0_SRBARL_MASK	0xffff8000 +#define CPC_SRCR0_SRBARL(x)	(x & CPC_SRCR0_SRBARL_MASK) +#define CPC_SRCR0_INTLVEN	0x00000100 +#define CPC_SRCR0_SRAMSZ_1_WAY	0x00000000 +#define CPC_SRCR0_SRAMSZ_2_WAY	0x00000002 +#define CPC_SRCR0_SRAMSZ_4_WAY	0x00000004 +#define CPC_SRCR0_SRAMSZ_8_WAY	0x00000006 +#define CPC_SRCR0_SRAMSZ_16_WAY	0x00000008 +#define CPC_SRCR0_SRAMSZ_32_WAY	0x0000000a +#define CPC_SRCR0_SRAMEN	0x00000001 +#define	CPC_ERRDIS_TMHITDIS  	0x00000080	/* multi-way hit disable */ +#define CPC_HDBCR0_CDQ_SPEC_DIS	0x08000000 +#define CPC_HDBCR0_TAG_ECC_SCRUB_DIS	0x01000000 +#define CPC_HDBCR0_DATA_ECC_SCRUB_DIS	0x00400000 +#define CPC_HDBCR0_SPLRU_LEVEL_EN	0x003c0000 +#endif /* CONFIG_SYS_FSL_CPC */ + +/* Global Utilities Block */ +#ifdef CONFIG_FSL_CORENET +typedef struct ccsr_gur { +	u32	porsr1;		/* POR status 1 */ +	u32	porsr2;		/* POR status 2 */ +#ifdef	CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +#define	FSL_DCFG_PORSR1_SYSCLK_SHIFT	15 +#define	FSL_DCFG_PORSR1_SYSCLK_MASK	0x1 +#define	FSL_DCFG_PORSR1_SYSCLK_SINGLE_ENDED	0x1 +#define	FSL_DCFG_PORSR1_SYSCLK_DIFF	0x0 +#endif +	u8	res_008[0x20-0x8]; +	u32	gpporcr1;	/* General-purpose POR configuration */ +	u32	gpporcr2;	/* General-purpose POR configuration 2 */ +	u32	dcfg_fusesr;	/* Fuse status register */ +#define FSL_CORENET_DCFG_FUSESR_VID_SHIFT	25 +#define FSL_CORENET_DCFG_FUSESR_VID_MASK	0x1F +#define FSL_CORENET_DCFG_FUSESR_ALTVID_SHIFT	20 +#define FSL_CORENET_DCFG_FUSESR_ALTVID_MASK	0x1F +	u8	res_02c[0x70-0x2c]; +	u32	devdisr;	/* Device disable control */ +	u32	devdisr2;	/* Device disable control 2 */ +	u32	devdisr3;	/* Device disable control 3 */ +	u32	devdisr4;	/* Device disable control 4 */ +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +	u32	devdisr5;	/* Device disable control 5 */ +#define FSL_CORENET_DEVDISR_PBL	0x80000000 +#define FSL_CORENET_DEVDISR_PMAN	0x40000000 +#define FSL_CORENET_DEVDISR_ESDHC	0x20000000 +#define FSL_CORENET_DEVDISR_DMA1	0x00800000 +#define FSL_CORENET_DEVDISR_DMA2	0x00400000 +#define FSL_CORENET_DEVDISR_USB1	0x00080000 +#define FSL_CORENET_DEVDISR_USB2	0x00040000 +#define FSL_CORENET_DEVDISR_SATA1	0x00008000 +#define FSL_CORENET_DEVDISR_SATA2	0x00004000 +#define FSL_CORENET_DEVDISR_PME	0x00000800 +#define FSL_CORENET_DEVDISR_SEC	0x00000200 +#define FSL_CORENET_DEVDISR_RMU	0x00000080 +#define FSL_CORENET_DEVDISR_DCE	0x00000040 +#define FSL_CORENET_DEVDISR2_DTSEC1_1	0x80000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_2	0x40000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_3	0x20000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_4	0x10000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_5	0x08000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_6	0x04000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_9	0x00800000 +#define FSL_CORENET_DEVDISR2_DTSEC1_10	0x00400000 +#define FSL_CORENET_DEVDISR2_10GEC1_1	0x00800000 +#define FSL_CORENET_DEVDISR2_10GEC1_2	0x00400000 +#define FSL_CORENET_DEVDISR2_10GEC1_3	0x80000000 +#define FSL_CORENET_DEVDISR2_10GEC1_4	0x40000000 +#define FSL_CORENET_DEVDISR2_DTSEC2_1	0x00080000 +#define FSL_CORENET_DEVDISR2_DTSEC2_2	0x00040000 +#define FSL_CORENET_DEVDISR2_DTSEC2_3	0x00020000 +#define FSL_CORENET_DEVDISR2_DTSEC2_4	0x00010000 +#define FSL_CORENET_DEVDISR2_DTSEC2_5	0x00008000 +#define FSL_CORENET_DEVDISR2_DTSEC2_6	0x00004000 +#define FSL_CORENET_DEVDISR2_DTSEC2_9	0x00000800 +#define FSL_CORENET_DEVDISR2_DTSEC2_10	0x00000400 +#define FSL_CORENET_DEVDISR2_10GEC2_1	0x00000800 +#define FSL_CORENET_DEVDISR2_10GEC2_2	0x00000400 +#define FSL_CORENET_DEVDISR2_FM1	0x00000080 +#define FSL_CORENET_DEVDISR2_FM2	0x00000040 +#define FSL_CORENET_DEVDISR2_CPRI	0x00000008 +#define FSL_CORENET_DEVDISR3_PCIE1	0x80000000 +#define FSL_CORENET_DEVDISR3_PCIE2	0x40000000 +#define FSL_CORENET_DEVDISR3_PCIE3	0x20000000 +#define FSL_CORENET_DEVDISR3_PCIE4	0x10000000 +#define FSL_CORENET_DEVDISR3_SRIO1	0x08000000 +#define FSL_CORENET_DEVDISR3_SRIO2	0x04000000 +#define FSL_CORENET_DEVDISR3_QMAN	0x00080000 +#define FSL_CORENET_DEVDISR3_BMAN	0x00040000 +#define FSL_CORENET_DEVDISR3_LA1	0x00008000 +#define FSL_CORENET_DEVDISR3_MAPLE1	0x00000800 +#define FSL_CORENET_DEVDISR3_MAPLE2	0x00000400 +#define FSL_CORENET_DEVDISR3_MAPLE3	0x00000200 +#define FSL_CORENET_DEVDISR4_I2C1	0x80000000 +#define FSL_CORENET_DEVDISR4_I2C2	0x40000000 +#define FSL_CORENET_DEVDISR4_DUART1	0x20000000 +#define FSL_CORENET_DEVDISR4_DUART2	0x10000000 +#define FSL_CORENET_DEVDISR4_ESPI	0x08000000 +#define FSL_CORENET_DEVDISR5_DDR1	0x80000000 +#define FSL_CORENET_DEVDISR5_DDR2	0x40000000 +#define FSL_CORENET_DEVDISR5_DDR3	0x20000000 +#define FSL_CORENET_DEVDISR5_CPC1	0x08000000 +#define FSL_CORENET_DEVDISR5_CPC2	0x04000000 +#define FSL_CORENET_DEVDISR5_CPC3	0x02000000 +#define FSL_CORENET_DEVDISR5_IFC	0x00800000 +#define FSL_CORENET_DEVDISR5_GPIO	0x00400000 +#define FSL_CORENET_DEVDISR5_DBG	0x00200000 +#define FSL_CORENET_DEVDISR5_NAL	0x00100000 +#define FSL_CORENET_DEVDISR5_TIMERS	0x00020000 +#define FSL_CORENET_NUM_DEVDISR		5 +#else +#define FSL_CORENET_DEVDISR_PCIE1	0x80000000 +#define FSL_CORENET_DEVDISR_PCIE2	0x40000000 +#define FSL_CORENET_DEVDISR_PCIE3	0x20000000 +#define FSL_CORENET_DEVDISR_PCIE4	0x10000000 +#define FSL_CORENET_DEVDISR_RMU		0x08000000 +#define FSL_CORENET_DEVDISR_SRIO1	0x04000000 +#define FSL_CORENET_DEVDISR_SRIO2	0x02000000 +#define FSL_CORENET_DEVDISR_DMA1	0x00400000 +#define FSL_CORENET_DEVDISR_DMA2	0x00200000 +#define FSL_CORENET_DEVDISR_DDR1	0x00100000 +#define FSL_CORENET_DEVDISR_DDR2	0x00080000 +#define FSL_CORENET_DEVDISR_DBG		0x00010000 +#define FSL_CORENET_DEVDISR_NAL		0x00008000 +#define FSL_CORENET_DEVDISR_SATA1	0x00004000 +#define FSL_CORENET_DEVDISR_SATA2	0x00002000 +#define FSL_CORENET_DEVDISR_ELBC	0x00001000 +#define FSL_CORENET_DEVDISR_USB1	0x00000800 +#define FSL_CORENET_DEVDISR_USB2	0x00000400 +#define FSL_CORENET_DEVDISR_ESDHC	0x00000100 +#define FSL_CORENET_DEVDISR_GPIO	0x00000080 +#define FSL_CORENET_DEVDISR_ESPI	0x00000040 +#define FSL_CORENET_DEVDISR_I2C1	0x00000020 +#define FSL_CORENET_DEVDISR_I2C2	0x00000010 +#define FSL_CORENET_DEVDISR_DUART1	0x00000002 +#define FSL_CORENET_DEVDISR_DUART2	0x00000001 +#define FSL_CORENET_DEVDISR2_PME	0x80000000 +#define FSL_CORENET_DEVDISR2_SEC	0x40000000 +#define FSL_CORENET_DEVDISR2_QMBM	0x08000000 +#define FSL_CORENET_DEVDISR2_FM1	0x02000000 +#define FSL_CORENET_DEVDISR2_10GEC1	0x01000000 +#define FSL_CORENET_DEVDISR2_DTSEC1_1	0x00800000 +#define FSL_CORENET_DEVDISR2_DTSEC1_2	0x00400000 +#define FSL_CORENET_DEVDISR2_DTSEC1_3	0x00200000 +#define FSL_CORENET_DEVDISR2_DTSEC1_4	0x00100000 +#define FSL_CORENET_DEVDISR2_DTSEC1_5	0x00080000 +#define FSL_CORENET_DEVDISR2_FM2	0x00020000 +#define FSL_CORENET_DEVDISR2_10GEC2	0x00010000 +#define FSL_CORENET_DEVDISR2_DTSEC2_1	0x00008000 +#define FSL_CORENET_DEVDISR2_DTSEC2_2	0x00004000 +#define FSL_CORENET_DEVDISR2_DTSEC2_3	0x00002000 +#define FSL_CORENET_DEVDISR2_DTSEC2_4	0x00001000 +#define FSL_CORENET_DEVDISR2_DTSEC2_5	0x00000800 +#define FSL_CORENET_NUM_DEVDISR		2 +	u32	powmgtcsr;	/* Power management status & control */ +#endif +	u8	res8[12]; +	u32	coredisru;	/* uppper portion for support of 64 cores */ +	u32	coredisrl;	/* lower portion for support of 64 cores */ +	u8	res9[8]; +	u32	pvr;		/* Processor version */ +	u32	svr;		/* System version */ +	u8	res10[8]; +	u32	rstcr;		/* Reset control */ +	u32	rstrqpblsr;	/* Reset request preboot loader status */ +	u8	res11[8]; +	u32	rstrqmr1;	/* Reset request mask */ +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +#define FSL_CORENET_RSTRQMR1_SRDS_RST_MSK      0x00000800 +#endif +	u8	res12[4]; +	u32	rstrqsr1;	/* Reset request status */ +	u8	res13[4]; +	u8	res14[4]; +	u32	rstrqwdtmrl;	/* Reset request WDT mask */ +	u8	res15[4]; +	u32	rstrqwdtsrl;	/* Reset request WDT status */ +	u8	res16[4]; +	u32	brrl;		/* Boot release */ +	u8	res17[24]; +	u32	rcwsr[16];	/* Reset control word status */ + +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +#define FSL_CORENET_RCWSR0_MEM_PLL_RAT_SHIFT	16 +/* use reserved bits 18~23 as scratch space to host DDR PLL ratio */ +#define FSL_CORENET_RCWSR0_MEM_PLL_RAT_RESV_SHIFT	8 +#define FSL_CORENET_RCWSR0_MEM_PLL_RAT_MASK	0x3f +#if defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160) || \ +	defined(CONFIG_PPC_T4080) +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL		0xfc000000 +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	26 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL		0x00fe0000 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	17 +#define FSL_CORENET2_RCWSR4_SRDS3_PRTCL		0x0000f800 +#define FSL_CORENET2_RCWSR4_SRDS3_PRTCL_SHIFT	11 +#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL		0x000000f8 +#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL_SHIFT	3 +#define FSL_CORENET_RCWSR6_BOOT_LOC	0x0f800000 +#elif defined(CONFIG_PPC_B4860) || defined(CONFIG_PPC_B4420) +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL	0xfe000000 +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	25 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL	0x00ff0000 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	16 +#define FSL_CORENET_RCWSR6_BOOT_LOC	0x0f800000 +#elif defined(CONFIG_PPC_T1040) || defined(CONFIG_PPC_T1042) ||\ +defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022) +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL	0xff000000 +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	24 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL	0x00fe0000 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	17 +#define FSL_CORENET_RCWSR13_EC1	0x30000000 /* bits 418..419 */ +#define FSL_CORENET_RCWSR13_EC1_FM1_DTSEC4_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC1_FM1_GPIO	0x10000000 +#define FSL_CORENET_RCWSR13_EC1_FM1_DTSEC4_MII	0x20000000 +#define FSL_CORENET_RCWSR13_EC2	0x0c000000 /* bits 420..421 */ +#define FSL_CORENET_RCWSR13_EC2_FM1_DTSEC5_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC2_FM1_GPIO	0x10000000 +#define FSL_CORENET_RCWSR13_EC2_FM1_DTSEC5_MII	0x20000000 +#define FSL_CORENET_RCWSR13_MAC2_GMII_SEL	0x00000080 +#define FSL_CORENET_RCWSR13_MAC2_GMII_SEL_L2_SWITCH	0x00000000 +#define FSL_CORENET_RCWSR13_MAC2_GMII_SEL_ENET_PORT	0x80000000 +#define CONFIG_SYS_FSL_SCFG_PIXCLKCR_OFFSET	0x28 +#define PXCKEN_MASK	0x80000000 +#define PXCK_MASK	0x00FF0000 +#define PXCK_BITS_START	16 +#elif defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL		0xff000000 +#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT	24 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL		0x00ff0000 +#define FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT	16 +#define FSL_CORENET_RCWSR6_BOOT_LOC		0x0f800000 +#endif +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S1_PLL1	0x00800000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S1_PLL2	0x00400000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S2_PLL1	0x00200000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S2_PLL2	0x00100000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S3_PLL1	0x00080000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S3_PLL2	0x00040000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S4_PLL1	0x00020000 +#define FSL_CORENET2_RCWSR5_SRDS_PLL_PD_S4_PLL2	0x00010000 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_SHIFT 4 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_MASK	0x00000011 +#define FSL_CORENET2_RCWSR5_DDR_REFCLK_SINGLE_CLK	1 + +#else /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ +#define FSL_CORENET_RCWSR0_MEM_PLL_RAT_SHIFT	17 +#define FSL_CORENET_RCWSR0_MEM_PLL_RAT_MASK	0x1f +#define FSL_CORENET_RCWSR4_SRDS_PRTCL		0xfc000000 +#define FSL_CORENET_RCWSR5_DDR_SYNC		0x00000080 +#define FSL_CORENET_RCWSR5_DDR_SYNC_SHIFT		 7 +#define FSL_CORENET_RCWSR5_SRDS_EN		0x00002000 +#define FSL_CORENET_RCWSR5_SRDS2_EN		0x00001000 +#define FSL_CORENET_RCWSR6_BOOT_LOC	0x0f800000 +#define FSL_CORENET_RCWSRn_SRDS_LPD_B2		0x3c000000 /* bits 162..165 */ +#define FSL_CORENET_RCWSRn_SRDS_LPD_B3		0x003c0000 /* bits 170..173 */ +#endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +#define FSL_CORENET_RCWSR7_MCK_TO_PLAT_RAT	0x00400000 +#define FSL_CORENET_RCWSR8_HOST_AGT_B1		0x00e00000 +#define FSL_CORENET_RCWSR8_HOST_AGT_B2		0x00100000 +#define FSL_CORENET_RCWSR11_EC1			0x00c00000 /* bits 360..361 */ +#ifdef CONFIG_PPC_P4080 +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC1		0x00000000 +#define FSL_CORENET_RCWSR11_EC1_FM1_USB1		0x00800000 +#define FSL_CORENET_RCWSR11_EC2			0x001c0000 /* bits 363..365 */ +#define FSL_CORENET_RCWSR11_EC2_FM2_DTSEC1		0x00000000 +#define FSL_CORENET_RCWSR11_EC2_FM1_DTSEC2		0x00080000 +#define FSL_CORENET_RCWSR11_EC2_USB2			0x00100000 +#endif +#if defined(CONFIG_PPC_P2041) \ +	|| defined(CONFIG_PPC_P3041) || defined(CONFIG_PPC_P5020) +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC4_RGMII	0x00000000 +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC4_MII		0x00800000 +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC4_NONE		0x00c00000 +#define FSL_CORENET_RCWSR11_EC2			0x00180000 /* bits 363..364 */ +#define FSL_CORENET_RCWSR11_EC2_FM1_DTSEC5_RGMII	0x00000000 +#define FSL_CORENET_RCWSR11_EC2_FM1_DTSEC5_MII		0x00100000 +#define FSL_CORENET_RCWSR11_EC2_FM1_DTSEC5_NONE		0x00180000 +#endif +#if defined(CONFIG_PPC_P5040) +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC5_RGMII        0x00000000 +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC5_MII          0x00800000 +#define FSL_CORENET_RCWSR11_EC1_FM1_DTSEC5_NONE         0x00c00000 +#define FSL_CORENET_RCWSR11_EC2                 0x00180000 /* bits 363..364 */ +#define FSL_CORENET_RCWSR11_EC2_FM2_DTSEC5_RGMII        0x00000000 +#define FSL_CORENET_RCWSR11_EC2_FM2_DTSEC5_MII          0x00100000 +#define FSL_CORENET_RCWSR11_EC2_FM2_DTSEC5_NONE         0x00180000 +#endif +#if defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160) || \ +	defined(CONFIG_PPC_T4080) +#define FSL_CORENET_RCWSR13_EC1			0x60000000 /* bits 417..418 */ +#define FSL_CORENET_RCWSR13_EC1_FM2_DTSEC5_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC1_FM2_GPIO		0x40000000 +#define FSL_CORENET_RCWSR13_EC2			0x18000000 /* bits 419..420 */ +#define FSL_CORENET_RCWSR13_EC2_FM1_DTSEC5_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC2_FM1_DTSEC6_RGMII	0x08000000 +#define FSL_CORENET_RCWSR13_EC2_FM1_GPIO		0x10000000 +#endif +#if defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T2081) +#define FSL_CORENET_RCWSR13_EC1			0x60000000 /* bits 417..418 */ +#define FSL_CORENET_RCWSR13_EC1_DTSEC3_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC1_GPIO		0x40000000 +#define FSL_CORENET_RCWSR13_EC2			0x18000000 /* bits 419..420 */ +#define FSL_CORENET_RCWSR13_EC2_DTSEC4_RGMII	0x00000000 +#define FSL_CORENET_RCWSR13_EC2_DTSEC10_RGMII	0x08000000 +#define FSL_CORENET_RCWSR13_EC2_GPIO		0x10000000 +#endif +	u8	res18[192]; +	u32	scratchrw[4];	/* Scratch Read/Write */ +	u8	res19[240]; +	u32	scratchw1r[4];	/* Scratch Read (Write once) */ +	u8	res20[240]; +	u32	scrtsr[8];	/* Core reset status */ +	u8	res21[224]; +	u32	pex1liodnr;	/* PCI Express 1 LIODN */ +	u32	pex2liodnr;	/* PCI Express 2 LIODN */ +	u32	pex3liodnr;	/* PCI Express 3 LIODN */ +	u32	pex4liodnr;	/* PCI Express 4 LIODN */ +	u32	rio1liodnr;	/* RIO 1 LIODN */ +	u32	rio2liodnr;	/* RIO 2 LIODN */ +	u32	rio3liodnr;	/* RIO 3 LIODN */ +	u32	rio4liodnr;	/* RIO 4 LIODN */ +	u32	usb1liodnr;	/* USB 1 LIODN */ +	u32	usb2liodnr;	/* USB 2 LIODN */ +	u32	usb3liodnr;	/* USB 3 LIODN */ +	u32	usb4liodnr;	/* USB 4 LIODN */ +	u32	sdmmc1liodnr;	/* SD/MMC 1 LIODN */ +	u32	sdmmc2liodnr;	/* SD/MMC 2 LIODN */ +	u32	sdmmc3liodnr;	/* SD/MMC 3 LIODN */ +	u32	sdmmc4liodnr;	/* SD/MMC 4 LIODN */ +	u32	rio1maintliodnr;/* RIO 1 Maintenance LIODN */ +	u32	rio2maintliodnr;/* RIO 2 Maintenance LIODN */ +	u32	rio3maintliodnr;/* RIO 3 Maintenance LIODN */ +	u32	rio4maintliodnr;/* RIO 4 Maintenance LIODN */ +	u32	sata1liodnr;	/* SATA 1 LIODN */ +	u32	sata2liodnr;	/* SATA 2 LIODN */ +	u32	sata3liodnr;	/* SATA 3 LIODN */ +	u32	sata4liodnr;	/* SATA 4 LIODN */ +	u8      res22[24]; +	u32     qeliodnr;       /* QE LIODN */ +	u8      res_57c[4]; +	u32	dma1liodnr;	/* DMA 1 LIODN */ +	u32	dma2liodnr;	/* DMA 2 LIODN */ +	u32	dma3liodnr;	/* DMA 3 LIODN */ +	u32	dma4liodnr;	/* DMA 4 LIODN */ +	u8	res23[48]; +	u8	res24[64]; +	u32	pblsr;		/* Preboot loader status */ +	u32	pamubypenr;	/* PAMU bypass enable */ +	u32	dmacr1;		/* DMA control */ +	u8	res25[4]; +	u32	gensr1;		/* General status */ +	u8	res26[12]; +	u32	gencr1;		/* General control */ +	u8	res27[12]; +	u8	res28[4]; +	u32	cgensrl;	/* Core general status */ +	u8	res29[8]; +	u8	res30[4]; +	u32	cgencrl;	/* Core general control */ +	u8	res31[184]; +	u32	sriopstecr;	/* SRIO prescaler timer enable control */ +	u32	dcsrcr;		/* DCSR Control register */ +	u8	res31a[56]; +	u32	tp_ityp[64];	/* Topology Initiator Type Register */ +	struct { +		u32	upper; +		u32	lower; +	} tp_cluster[16];	/* Core Cluster n Topology Register */ +	u8	res32[1344]; +	u32	pmuxcr;		/* Pin multiplexing control */ +	u8	res33[60]; +	u32	iovselsr;	/* I/O voltage selection status */ +	u8	res34[28]; +	u32	ddrclkdr;	/* DDR clock disable */ +	u8	res35; +	u32	elbcclkdr;	/* eLBC clock disable */ +	u8	res36[20]; +	u32	sdhcpcr;	/* eSDHC polarity configuration */ +	u8	res37[380]; +} ccsr_gur_t; + +#define TP_ITYP_AV	0x00000001		/* Initiator available */ +#define TP_ITYP_TYPE(x)	(((x) & 0x6) >> 1)	/* Initiator Type */ +#define TP_ITYP_TYPE_OTHER	0x0 +#define TP_ITYP_TYPE_PPC	0x1	/* PowerPC */ +#define TP_ITYP_TYPE_SC		0x2	/* StarCore DSP */ +#define TP_ITYP_TYPE_HA		0x3	/* HW Accelerator */ +#define TP_ITYP_THDS(x)	(((x) & 0x18) >> 3)	/* # threads */ +#define TP_ITYP_VER(x)	(((x) & 0xe0) >> 5)	/* Initiator Version */ + +#define TP_CLUSTER_EOC		0x80000000	/* end of clusters */ +#define TP_CLUSTER_INIT_MASK	0x0000003f	/* initiator mask */ +#define TP_INIT_PER_CLUSTER	4 + +#define FSL_CORENET_DCSR_SZ_MASK	0x00000003 +#define FSL_CORENET_DCSR_SZ_4M		0x0 +#define FSL_CORENET_DCSR_SZ_1G		0x3 + +/* + * On p4080 we have an LIODN for msg unit (rmu) but not maintenance + * everything after has RMan thus msg unit LIODN is used for maintenance + */ +#define rmuliodnr rio1maintliodnr + +typedef struct ccsr_clk { +	struct { +		u32 clkcncsr;	/* core cluster n clock control status */ +		u8  res_004[0x0c]; +		u32 clkcgnhwacsr;/* clock generator n hardware accelerator */ +		u8  res_014[0x0c]; +	} clkcsr[12]; +	u8	res_100[0x680]; /* 0x100 */ +	struct { +		u32 pllcngsr; +		u8 res10[0x1c]; +	} pllcgsr[12]; +	u8	res21[0x280]; +	u32	pllpgsr;	/* 0xc00 Platform PLL General Status */ +	u8	res16[0x1c]; +	u32	plldgsr;	/* 0xc20 DDR PLL General Status */ +	u8	res17[0x3dc]; +} ccsr_clk_t; + +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +typedef struct ccsr_rcpm { +	u8	res_00[12]; +	u32	tph10sr0;	/* Thread PH10 Status Register */ +	u8	res_10[12]; +	u32	tph10setr0;	/* Thread PH10 Set Control Register */ +	u8	res_20[12]; +	u32	tph10clrr0;	/* Thread PH10 Clear Control Register */ +	u8	res_30[12]; +	u32	tph10psr0;	/* Thread PH10 Previous Status Register */ +	u8	res_40[12]; +	u32	twaitsr0;	/* Thread Wait Status Register */ +	u8	res_50[96]; +	u32	pcph15sr;	/* Physical Core PH15 Status Register */ +	u32	pcph15setr;	/* Physical Core PH15 Set Control Register */ +	u32	pcph15clrr;	/* Physical Core PH15 Clear Control Register */ +	u32	pcph15psr;	/* Physical Core PH15 Prev Status Register */ +	u8	res_c0[16]; +	u32	pcph20sr;	/* Physical Core PH20 Status Register */ +	u32	pcph20setr;	/* Physical Core PH20 Set Control Register */ +	u32	pcph20clrr;	/* Physical Core PH20 Clear Control Register */ +	u32	pcph20psr;	/* Physical Core PH20 Prev Status Register */ +	u32	pcpw20sr;	/* Physical Core PW20 Status Register */ +	u8	res_e0[12]; +	u32	pcph30sr;	/* Physical Core PH30 Status Register */ +	u32	pcph30setr;	/* Physical Core PH30 Set Control Register */ +	u32	pcph30clrr;	/* Physical Core PH30 Clear Control Register */ +	u32	pcph30psr;	/* Physical Core PH30 Prev Status Register */ +	u8	res_100[32]; +	u32	ippwrgatecr;	/* IP Power Gating Control Register */ +	u8	res_124[12]; +	u32	powmgtcsr;	/* Power Management Control & Status Reg */ +	u8	res_134[12]; +	u32	ippdexpcr[4];	/* IP Powerdown Exception Control Reg */ +	u8	res_150[12]; +	u32	tpmimr0;	/* Thread PM Interrupt Mask Reg */ +	u8	res_160[12]; +	u32	tpmcimr0;	/* Thread PM Crit Interrupt Mask Reg */ +	u8	res_170[12]; +	u32	tpmmcmr0;	/* Thread PM Machine Check Interrupt Mask Reg */ +	u8	res_180[12]; +	u32	tpmnmimr0;	/* Thread PM NMI Mask Reg */ +	u8	res_190[12]; +	u32	tmcpmaskcr0;	/* Thread Machine Check Mask Control Reg */ +	u32	pctbenr;	/* Physical Core Time Base Enable Reg */ +	u32	pctbclkselr;	/* Physical Core Time Base Clock Select */ +	u32	tbclkdivr;	/* Time Base Clock Divider Register */ +	u8	res_1ac[4]; +	u32	ttbhltcr[4];	/* Thread Time Base Halt Control Register */ +	u32	clpcl10sr;	/* Cluster PCL10 Status Register */ +	u32	clpcl10setr;	/* Cluster PCL30 Set Control Register */ +	u32	clpcl10clrr;	/* Cluster PCL30 Clear Control Register */ +	u32	clpcl10psr;	/* Cluster PCL30 Prev Status Register */ +	u32	cddslpsetr;	/* Core Domain Deep Sleep Set Register */ +	u32	cddslpclrr;	/* Core Domain Deep Sleep Clear Register */ +	u32	cdpwroksetr;	/* Core Domain Power OK Set Register */ +	u32	cdpwrokclrr;	/* Core Domain Power OK Clear Register */ +	u32	cdpwrensr;	/* Core Domain Power Enable Status Register */ +	u32	cddslsr;	/* Core Domain Deep Sleep Status Register */ +	u8	res_1e8[8]; +	u32	dslpcntcr[8];	/* Deep Sleep Counter Cfg Register */ +	u8	res_300[3568]; +} ccsr_rcpm_t; + +#define ctbenrl pctbenr + +#else +typedef struct ccsr_rcpm { +	u8	res1[4]; +	u32	cdozsrl;	/* Core Doze Status */ +	u8	res2[4]; +	u32	cdozcrl;	/* Core Doze Control */ +	u8	res3[4]; +	u32	cnapsrl;	/* Core Nap Status */ +	u8	res4[4]; +	u32	cnapcrl;	/* Core Nap Control */ +	u8	res5[4]; +	u32	cdozpsrl;	/* Core Doze Previous Status */ +	u8	res6[4]; +	u32	cdozpcrl;	/* Core Doze Previous Control */ +	u8	res7[4]; +	u32	cwaitsrl;	/* Core Wait Status */ +	u8	res8[8]; +	u32	powmgtcsr;	/* Power Mangement Control & Status */ +	u8	res9[12]; +	u32	ippdexpcr0;	/* IP Powerdown Exception Control 0 */ +	u8	res10[12]; +	u8	res11[4]; +	u32	cpmimrl;	/* Core PM IRQ Masking */ +	u8	res12[4]; +	u32	cpmcimrl;	/* Core PM Critical IRQ Masking */ +	u8	res13[4]; +	u32	cpmmcimrl;	/* Core PM Machine Check IRQ Masking */ +	u8	res14[4]; +	u32	cpmnmimrl;	/* Core PM NMI Masking */ +	u8	res15[4]; +	u32	ctbenrl;	/* Core Time Base Enable */ +	u8	res16[4]; +	u32	ctbclkselrl;	/* Core Time Base Clock Select */ +	u8	res17[4]; +	u32	ctbhltcrl;	/* Core Time Base Halt Control */ +	u8	res18[0xf68]; +} ccsr_rcpm_t; +#endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +#else +typedef struct ccsr_gur { +	u32	porpllsr;	/* POR PLL ratio status */ +#ifdef CONFIG_MPC8536 +#define MPC85xx_PORPLLSR_DDR_RATIO	0x3e000000 +#define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT	25 +#elif defined(CONFIG_PPC_C29X) +#define MPC85xx_PORPLLSR_DDR_RATIO	0x00003f00 +#define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT	(9 - ((gur->pordevsr2 \ +					& MPC85xx_PORDEVSR2_DDR_SPD_0) \ +					>> MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT)) +#else +#if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132) +#define MPC85xx_PORPLLSR_DDR_RATIO	0x00003f00 +#else +#define MPC85xx_PORPLLSR_DDR_RATIO	0x00003e00 +#endif +#define MPC85xx_PORPLLSR_DDR_RATIO_SHIFT	9 +#endif +#define MPC85xx_PORPLLSR_QE_RATIO	0x3e000000 +#define MPC85xx_PORPLLSR_QE_RATIO_SHIFT		25 +#define MPC85xx_PORPLLSR_PLAT_RATIO	0x0000003e +#define MPC85xx_PORPLLSR_PLAT_RATIO_SHIFT	1 +	u32	porbmsr;	/* POR boot mode status */ +#define MPC85xx_PORBMSR_HA		0x00070000 +#define MPC85xx_PORBMSR_HA_SHIFT	16 +#define MPC85xx_PORBMSR_ROMLOC_SHIFT	24 +#define PORBMSR_ROMLOC_SPI	0x6 +#define PORBMSR_ROMLOC_SDHC	0x7 +#define PORBMSR_ROMLOC_NAND_2K	0x9 +#define PORBMSR_ROMLOC_NOR	0xf +	u32	porimpscr;	/* POR I/O impedance status & control */ +	u32	pordevsr;	/* POR I/O device status regsiter */ +#if defined(CONFIG_P1017) || defined(CONFIG_P1023) +#define MPC85xx_PORDEVSR_SGMII1_DIS	0x10000000 +#define MPC85xx_PORDEVSR_SGMII2_DIS	0x08000000 +#define MPC85xx_PORDEVSR_TSEC1_PRTC	0x02000000 +#else +#define MPC85xx_PORDEVSR_SGMII1_DIS	0x20000000 +#define MPC85xx_PORDEVSR_SGMII2_DIS	0x10000000 +#endif +#define MPC85xx_PORDEVSR_SGMII3_DIS	0x08000000 +#define MPC85xx_PORDEVSR_SGMII4_DIS	0x04000000 +#define MPC85xx_PORDEVSR_SRDS2_IO_SEL	0x38000000 +#define MPC85xx_PORDEVSR_PCI1		0x00800000 +#if defined(CONFIG_P1013) || defined(CONFIG_P1022) +#define MPC85xx_PORDEVSR_IO_SEL		0x007c0000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	18 +#elif defined(CONFIG_P1017) || defined(CONFIG_P1023) +#define MPC85xx_PORDEVSR_IO_SEL		0x00600000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	21 +#else +#if defined(CONFIG_P1010) +#define MPC85xx_PORDEVSR_IO_SEL		0x00600000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	21 +#elif defined(CONFIG_BSC9132) +#define MPC85xx_PORDEVSR_IO_SEL		0x00FE0000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	17 +#elif defined(CONFIG_PPC_C29X) +#define MPC85xx_PORDEVSR_IO_SEL		0x00e00000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	21 +#else +#define MPC85xx_PORDEVSR_IO_SEL		0x00780000 +#define MPC85xx_PORDEVSR_IO_SEL_SHIFT	19 +#endif /* if defined(CONFIG_P1010) */ +#endif +#define MPC85xx_PORDEVSR_PCI2_ARB	0x00040000 +#define MPC85xx_PORDEVSR_PCI1_ARB	0x00020000 +#define MPC85xx_PORDEVSR_PCI1_PCI32	0x00010000 +#define MPC85xx_PORDEVSR_PCI1_SPD	0x00008000 +#define MPC85xx_PORDEVSR_PCI2_SPD	0x00004000 +#define MPC85xx_PORDEVSR_DRAM_RTYPE	0x00000060 +#define MPC85xx_PORDEVSR_RIO_CTLS	0x00000008 +#define MPC85xx_PORDEVSR_RIO_DEV_ID	0x00000007 +	u32	pordbgmsr;	/* POR debug mode status */ +	u32	pordevsr2;	/* POR I/O device status 2 */ +#if defined(CONFIG_PPC_C29X) +#define MPC85xx_PORDEVSR2_DDR_SPD_0	0x00000008 +#define MPC85xx_PORDEVSR2_DDR_SPD_0_SHIFT	3 +#endif +/* The 8544 RM says this is bit 26, but it's really bit 24 */ +#define MPC85xx_PORDEVSR2_SEC_CFG	0x00000080 +	u8	res1[8]; +	u32	gpporcr;	/* General-purpose POR configuration */ +	u8	res2[12]; +#if defined(CONFIG_MPC8536) +	u32	gencfgr;	/* General Configuration Register */ +#define MPC85xx_GENCFGR_SDHC_WP_INV	0x20000000 +#else +	u32	gpiocr;		/* GPIO control */ +#endif +	u8	res3[12]; +#if defined(CONFIG_MPC8569) +	u32	plppar1;	/* Platform port pin assignment 1 */ +	u32	plppar2;	/* Platform port pin assignment 2 */ +	u32	plpdir1;	/* Platform port pin direction 1 */ +	u32	plpdir2;	/* Platform port pin direction 2 */ +#else +	u32	gpoutdr;	/* General-purpose output data */ +	u8	res4[12]; +#endif +	u32	gpindr;		/* General-purpose input data */ +	u8	res5[12]; +	u32	pmuxcr;		/* Alt. function signal multiplex control */ +#if defined(CONFIG_P1010) || defined(CONFIG_P1014) +#define MPC85xx_PMUXCR_TSEC1_0_1588		0x40000000 +#define MPC85xx_PMUXCR_TSEC1_0_RES		0xC0000000 +#define MPC85xx_PMUXCR_TSEC1_1_1588_TRIG	0x10000000 +#define MPC85xx_PMUXCR_TSEC1_1_GPIO_12		0x20000000 +#define MPC85xx_PMUXCR_TSEC1_1_RES		0x30000000 +#define MPC85xx_PMUXCR_TSEC1_2_DMA		0x04000000 +#define MPC85xx_PMUXCR_TSEC1_2_GPIO		0x08000000 +#define MPC85xx_PMUXCR_TSEC1_2_RES		0x0C000000 +#define MPC85xx_PMUXCR_TSEC1_3_RES		0x01000000 +#define MPC85xx_PMUXCR_TSEC1_3_GPIO_15		0x02000000 +#define MPC85xx_PMUXCR_IFC_ADDR16_SDHC		0x00400000 +#define MPC85xx_PMUXCR_IFC_ADDR16_USB		0x00800000 +#define MPC85xx_PMUXCR_IFC_ADDR16_IFC_CS2	0x00C00000 +#define MPC85xx_PMUXCR_IFC_ADDR17_18_SDHC	0x00100000 +#define MPC85xx_PMUXCR_IFC_ADDR17_18_USB	0x00200000 +#define MPC85xx_PMUXCR_IFC_ADDR17_18_DMA	0x00300000 +#define MPC85xx_PMUXCR_IFC_ADDR19_SDHC_DATA	0x00040000 +#define MPC85xx_PMUXCR_IFC_ADDR19_USB		0x00080000 +#define MPC85xx_PMUXCR_IFC_ADDR19_DMA		0x000C0000 +#define MPC85xx_PMUXCR_IFC_ADDR20_21_SDHC_DATA	0x00010000 +#define MPC85xx_PMUXCR_IFC_ADDR20_21_USB	0x00020000 +#define MPC85xx_PMUXCR_IFC_ADDR20_21_RES	0x00030000 +#define MPC85xx_PMUXCR_IFC_ADDR22_SDHC		0x00004000 +#define MPC85xx_PMUXCR_IFC_ADDR22_USB		0x00008000 +#define MPC85xx_PMUXCR_IFC_ADDR22_RES		0x0000C000 +#define MPC85xx_PMUXCR_IFC_ADDR23_SDHC		0x00001000 +#define MPC85xx_PMUXCR_IFC_ADDR23_USB		0x00002000 +#define MPC85xx_PMUXCR_IFC_ADDR23_RES		0x00003000 +#define MPC85xx_PMUXCR_IFC_ADDR24_SDHC		0x00000400 +#define MPC85xx_PMUXCR_IFC_ADDR24_USB		0x00000800 +#define MPC85xx_PMUXCR_IFC_ADDR24_RES		0x00000C00 +#define MPC85xx_PMUXCR_IFC_PAR_PERR_RES		0x00000300 +#define MPC85xx_PMUXCR_IFC_PAR_PERR_USB		0x00000200 +#define MPC85xx_PMUXCR_LCLK_RES			0x00000040 +#define MPC85xx_PMUXCR_LCLK_USB			0x00000080 +#define MPC85xx_PMUXCR_LCLK_IFC_CS3		0x000000C0 +#define MPC85xx_PMUXCR_SPI_RES			0x00000030 +#define MPC85xx_PMUXCR_SPI_GPIO			0x00000020 +#define MPC85xx_PMUXCR_CAN1_UART		0x00000004 +#define MPC85xx_PMUXCR_CAN1_TDM			0x00000008 +#define MPC85xx_PMUXCR_CAN1_RES			0x0000000C +#define MPC85xx_PMUXCR_CAN2_UART		0x00000001 +#define MPC85xx_PMUXCR_CAN2_TDM			0x00000002 +#define MPC85xx_PMUXCR_CAN2_RES			0x00000003 +#endif +#if defined(CONFIG_P1017) || defined(CONFIG_P1023) +#define MPC85xx_PMUXCR_TSEC1_1		0x10000000 +#else +#define MPC85xx_PMUXCR_SD_DATA		0x80000000 +#define MPC85xx_PMUXCR_SDHC_CD		0x40000000 +#define MPC85xx_PMUXCR_SDHC_WP		0x20000000 +#define MPC85xx_PMUXCR_ELBC_OFF_USB2_ON	0x01000000 +#define MPC85xx_PMUXCR_TDM_ENA		0x00800000 +#define MPC85xx_PMUXCR_QE0		0x00008000 +#define MPC85xx_PMUXCR_QE1		0x00004000 +#define MPC85xx_PMUXCR_QE2		0x00002000 +#define MPC85xx_PMUXCR_QE3		0x00001000 +#define MPC85xx_PMUXCR_QE4		0x00000800 +#define MPC85xx_PMUXCR_QE5		0x00000400 +#define MPC85xx_PMUXCR_QE6		0x00000200 +#define MPC85xx_PMUXCR_QE7		0x00000100 +#define MPC85xx_PMUXCR_QE8		0x00000080 +#define MPC85xx_PMUXCR_QE9		0x00000040 +#define MPC85xx_PMUXCR_QE10		0x00000020 +#define MPC85xx_PMUXCR_QE11		0x00000010 +#define MPC85xx_PMUXCR_QE12		0x00000008 +#endif +#if defined(CONFIG_P1013) || defined(CONFIG_P1022) +#define MPC85xx_PMUXCR_TDM_MASK		0x0001cc00 +#define MPC85xx_PMUXCR_TDM		0x00014800 +#define MPC85xx_PMUXCR_SPI_MASK		0x00600000 +#define MPC85xx_PMUXCR_SPI		0x00000000 +#endif +#if defined(CONFIG_BSC9131) +#define MPC85xx_PMUXCR_TSEC2_DMA_GPIO_IRQ	0x40000000 +#define MPC85xx_PMUXCR_TSEC2_USB		0xC0000000 +#define MPC85xx_PMUXCR_TSEC2_1588_PPS		0x10000000 +#define MPC85xx_PMUXCR_TSEC2_1588_RSVD		0x30000000 +#define MPC85xx_PMUXCR_IFC_AD_GPIO		0x04000000 +#define MPC85xx_PMUXCR_IFC_AD_GPIO_MASK		0x0C000000 +#define MPC85xx_PMUXCR_IFC_AD15_GPIO		0x01000000 +#define MPC85xx_PMUXCR_IFC_AD15_TIMER2		0x02000000 +#define MPC85xx_PMUXCR_IFC_AD16_GPO8		0x00400000 +#define MPC85xx_PMUXCR_IFC_AD16_MSRCID0		0x00800000 +#define MPC85xx_PMUXCR_IFC_AD17_GPO		0x00100000 +#define MPC85xx_PMUXCR_IFC_AD17_GPO_MASK	0x00300000 +#define MPC85xx_PMUXCR_IFC_AD17_MSRCID_DSP	0x00200000 +#define MPC85xx_PMUXCR_IFC_CS2_GPO65		0x00040000 +#define MPC85xx_PMUXCR_IFC_CS2_DSP_TDI		0x00080000 +#define MPC85xx_PMUXCR_SDHC_USIM		0x00010000 +#define MPC85xx_PMUXCR_SDHC_TDM_RFS_RCK		0x00020000 +#define MPC85xx_PMUXCR_SDHC_GPIO77		0x00030000 +#define MPC85xx_PMUXCR_SDHC_RESV		0x00004000 +#define MPC85xx_PMUXCR_SDHC_TDM_TXD_RXD		0x00008000 +#define MPC85xx_PMUXCR_SDHC_GPIO_TIMER4		0x0000C000 +#define MPC85xx_PMUXCR_USB_CLK_UART_SIN		0x00001000 +#define MPC85xx_PMUXCR_USB_CLK_GPIO69		0x00002000 +#define MPC85xx_PMUXCR_USB_CLK_TIMER3		0x00003000 +#define MPC85xx_PMUXCR_USB_UART_GPIO0		0x00000400 +#define MPC85xx_PMUXCR_USB_RSVD			0x00000C00 +#define MPC85xx_PMUXCR_USB_GPIO62_TRIG_IN	0x00000800 +#define MPC85xx_PMUXCR_USB_D1_2_IIC2_SDA_SCL	0x00000100 +#define MPC85xx_PMUXCR_USB_D1_2_GPIO71_72	0x00000200 +#define MPC85xx_PMUXCR_USB_D1_2_RSVD		0x00000300 +#define MPC85xx_PMUXCR_USB_DIR_GPIO2		0x00000040 +#define MPC85xx_PMUXCR_USB_DIR_TIMER1		0x00000080 +#define MPC85xx_PMUXCR_USB_DIR_MCP_B		0x000000C0 +#define MPC85xx_PMUXCR_SPI1_UART3		0x00000010 +#define MPC85xx_PMUXCR_SPI1_SIM			0x00000020 +#define MPC85xx_PMUXCR_SPI1_CKSTP_IN_GPO74	0x00000030 +#define MPC85xx_PMUXCR_SPI1_CS2_CKSTP_OUT_B	0x00000004 +#define MPC85xx_PMUXCR_SPI1_CS2_dbg_adi1_rxen	0x00000008 +#define MPC85xx_PMUXCR_SPI1_CS2_GPO75		0x0000000C +#define MPC85xx_PMUXCR_SPI1_CS3_ANT_TCXO_PWM	0x00000001 +#define MPC85xx_PMUXCR_SPI1_CS3_dbg_adi2_rxen	0x00000002 +#define MPC85xx_PMUXCR_SPI1_CS3_GPO76		0x00000003 +#endif +#ifdef CONFIG_BSC9132 +#define MPC85xx_PMUXCR0_SIM_SEL_MASK	0x0003b000 +#define MPC85xx_PMUXCR0_SIM_SEL		0x00014000 +#endif +#if defined(CONFIG_PPC_C29X) +#define MPC85xx_PMUXCR_SPI_MASK			0x00000300 +#define MPC85xx_PMUXCR_SPI			0x00000000 +#define MPC85xx_PMUXCR_SPI_GPIO			0x00000100 +#endif +	u32	pmuxcr2;	/* Alt. function signal multiplex control 2 */ +#if defined(CONFIG_P1010) || defined(CONFIG_P1014) +#define MPC85xx_PMUXCR2_UART_GPIO		0x40000000 +#define MPC85xx_PMUXCR2_UART_TDM		0x80000000 +#define MPC85xx_PMUXCR2_UART_RES		0xC0000000 +#define MPC85xx_PMUXCR2_IRQ2_TRIG_IN		0x10000000 +#define MPC85xx_PMUXCR2_IRQ2_RES		0x30000000 +#define MPC85xx_PMUXCR2_IRQ3_SRESET		0x04000000 +#define MPC85xx_PMUXCR2_IRQ3_RES		0x0C000000 +#define MPC85xx_PMUXCR2_GPIO01_DRVVBUS		0x01000000 +#define MPC85xx_PMUXCR2_GPIO01_RES		0x03000000 +#define MPC85xx_PMUXCR2_GPIO23_CKSTP		0x00400000 +#define MPC85xx_PMUXCR2_GPIO23_RES		0x00800000 +#define MPC85xx_PMUXCR2_GPIO23_USB		0x00C00000 +#define MPC85xx_PMUXCR2_GPIO4_MCP		0x00100000 +#define MPC85xx_PMUXCR2_GPIO4_RES		0x00200000 +#define MPC85xx_PMUXCR2_GPIO4_CLK_OUT		0x00300000 +#define MPC85xx_PMUXCR2_GPIO5_UDE		0x00040000 +#define MPC85xx_PMUXCR2_GPIO5_RES		0x00080000 +#define MPC85xx_PMUXCR2_READY_ASLEEP		0x00020000 +#define MPC85xx_PMUXCR2_DDR_ECC_MUX		0x00010000 +#define MPC85xx_PMUXCR2_DEBUG_PORT_EXPOSE	0x00008000 +#define MPC85xx_PMUXCR2_POST_EXPOSE		0x00004000 +#define MPC85xx_PMUXCR2_DEBUG_MUX_SEL_USBPHY	0x00002000 +#define MPC85xx_PMUXCR2_PLL_LKDT_EXPOSE		0x00001000 +#endif +#if defined(CONFIG_P1013) || defined(CONFIG_P1022) +#define MPC85xx_PMUXCR2_ETSECUSB_MASK	0x001f8000 +#define MPC85xx_PMUXCR2_USB		0x00150000 +#endif +#if defined(CONFIG_BSC9131) || defined(CONFIG_BSC9132) +#if defined(CONFIG_BSC9131) +#define MPC85xx_PMUXCR2_UART_CTS_B0_SIM_PD		0X40000000 +#define MPC85xx_PMUXCR2_UART_CTS_B0_DSP_TMS		0X80000000 +#define MPC85xx_PMUXCR2_UART_CTS_B0_GPIO42		0xC0000000 +#define MPC85xx_PMUXCR2_UART_RTS_B0_PWM2		0x10000000 +#define MPC85xx_PMUXCR2_UART_RTS_B0_DSP_TCK		0x20000000 +#define MPC85xx_PMUXCR2_UART_RTS_B0_GPIO43		0x30000000 +#define MPC85xx_PMUXCR2_UART_CTS_B1_SIM_PD		0x04000000 +#define MPC85xx_PMUXCR2_UART_CTS_B1_SRESET_B		0x08000000 +#define MPC85xx_PMUXCR2_UART_CTS_B1_GPIO44		0x0C000000 +#define MPC85xx_PMUXCR2_UART_RTS_B1_PPS_LED		0x01000000 +#define MPC85xx_PMUXCR2_UART_RTS_B1_RSVD		0x02000000 +#define MPC85xx_PMUXCR2_UART_RTS_B1_GPIO45		0x03000000 +#define MPC85xx_PMUXCR2_TRIG_OUT_ASLEEP			0x00400000 +#define MPC85xx_PMUXCR2_TRIG_OUT_DSP_TRST_B		0x00800000 +#define MPC85xx_PMUXCR2_ANT1_TIMER5			0x00100000 +#define MPC85xx_PMUXCR2_ANT1_TSEC_1588			0x00200000 +#define MPC85xx_PMUXCR2_ANT1_GPIO95_19			0x00300000 +#define MPC85xx_PMUXCR2_ANT1_TX_RX_FRAME_MAX3_LOCK	0x00040000 +#define MPC85xx_PMUXCR2_ANT1_TX_RX_FRAME_RSVD		0x00080000 +#define MPC85xx_PMUXCR2_ANT1_TX_RX_FRAME_GPIO80_20	0x000C0000 +#define MPC85xx_PMUXCR2_ANT1_DIO0_3_SPI3_CS0		0x00010000 +#define MPC85xx_PMUXCR2_ANT1_DIO0_3_ANT2_DO_3		0x00020000 +#define MPC85xx_PMUXCR2_ANT1_DIO0_3_GPIO81_84		0x00030000 +#define MPC85xx_PMUXCR2_ANT1_DIO4_7_SPI4		0x00004000 +#define MPC85xx_PMUXCR2_ANT1_DIO4_7_ANT2_DO4_7		0x00008000 +#define MPC85xx_PMUXCR2_ANT1_DIO4_7_GPIO85_88		0x0000C000 +#define MPC85xx_PMUXCR2_ANT1_DIO8_9_MAX2_1_LOCK		0x00001000 +#define MPC85xx_PMUXCR2_ANT1_DIO8_9_ANT2_DO8_9		0x00002000 +#define MPC85xx_PMUXCR2_ANT1_DIO8_9_GPIO21_22		0x00003000 +#define MPC85xx_PMUXCR2_ANT1_DIO10_11_TIMER6_7		0x00000400 +#define MPC85xx_PMUXCR2_ANT1_DIO10_11_ANT2_DO10_11	0x00000800 +#define MPC85xx_PMUXCR2_ANT1_DIO10_11_GPIO23_24		0x00000C00 +#define MPC85xx_PMUXCR2_ANT2_RSVD			0x00000100 +#define MPC85xx_PMUXCR2_ANT2_GPO90_91_DMA		0x00000300 +#define MPC85xx_PMUXCR2_ANT2_ENABLE_DIO0_10_USB		0x00000040 +#define MPC85xx_PMUXCR2_ANT2_ENABLE_DIO0_10_GPIO	0x000000C0 +#define MPC85xx_PMUXCR2_ANT2_DIO11_RSVD			0x00000010 +#define MPC85xx_PMUXCR2_ANT2_DIO11_TIMER8		0x00000020 +#define MPC85xx_PMUXCR2_ANT2_DIO11_GPIO61		0x00000030 +#define MPC85xx_PMUXCR2_ANT3_AGC_GPO53			0x00000004 +#define MPC85xx_PMUXCR2_ANT3_DO_TDM			0x00000001 +#define MPC85xx_PMUXCR2_ANT3_DO_GPIO46_49		0x00000002 +#endif +	u32	pmuxcr3; +#if defined(CONFIG_BSC9131) +#define MPC85xx_PMUXCR3_ANT3_DO4_5_TDM			0x40000000 +#define MPC85xx_PMUXCR3_ANT3_DO4_5_GPIO_50_51		0x80000000 +#define MPC85xx_PMUXCR3_ANT3_DO6_7_TRIG_IN_SRESET_B	0x10000000 +#define MPC85xx_PMUXCR3_ANT3_DO6_7_GPIO_52_53		0x20000000 +#define MPC85xx_PMUXCR3_ANT3_DO8_MCP_B			0x04000000 +#define MPC85xx_PMUXCR3_ANT3_DO8_GPIO54			0x08000000 +#define MPC85xx_PMUXCR3_ANT3_DO9_10_CKSTP_IN_OUT	0x01000000 +#define MPC85xx_PMUXCR3_ANT3_DO9_10_GPIO55_56		0x02000000 +#define MPC85xx_PMUXCR3_ANT3_DO11_IRQ_OUT		0x00400000 +#define MPC85xx_PMUXCR3_ANT3_DO11_GPIO57		0x00800000 +#define MPC85xx_PMUXCR3_SPI2_CS2_GPO93			0x00100000 +#define MPC85xx_PMUXCR3_SPI2_CS3_GPO94			0x00040000 +#define MPC85xx_PMUXCR3_ANT2_AGC_RSVD			0x00010000 +#define MPC85xx_PMUXCR3_ANT2_GPO89			0x00030000 +#endif +#ifdef CONFIG_BSC9132 +#define MPC85xx_PMUXCR3_USB_SEL_MASK	0x0000ff00 +#define MPC85xx_PMUXCR3_UART2_SEL	0x00005000 +#define MPC85xx_PMUXCR3_UART3_SEL_MASK	0xc0000000 +#define MPC85xx_PMUXCR3_UART3_SEL	0x40000000 +#endif +	u32 pmuxcr4; +#else +	u8	res6[8]; +#endif +	u32	devdisr;	/* Device disable control */ +#define MPC85xx_DEVDISR_PCI1		0x80000000 +#define MPC85xx_DEVDISR_PCI2		0x40000000 +#define MPC85xx_DEVDISR_PCIE		0x20000000 +#define MPC85xx_DEVDISR_LBC		0x08000000 +#define MPC85xx_DEVDISR_PCIE2		0x04000000 +#define MPC85xx_DEVDISR_PCIE3		0x02000000 +#define MPC85xx_DEVDISR_SEC		0x01000000 +#define MPC85xx_DEVDISR_SRIO		0x00080000 +#define MPC85xx_DEVDISR_RMSG		0x00040000 +#define MPC85xx_DEVDISR_DDR		0x00010000 +#define MPC85xx_DEVDISR_CPU		0x00008000 +#define MPC85xx_DEVDISR_CPU0		MPC85xx_DEVDISR_CPU +#define MPC85xx_DEVDISR_TB		0x00004000 +#define MPC85xx_DEVDISR_TB0		MPC85xx_DEVDISR_TB +#define MPC85xx_DEVDISR_CPU1		0x00002000 +#define MPC85xx_DEVDISR_TB1		0x00001000 +#define MPC85xx_DEVDISR_DMA		0x00000400 +#define MPC85xx_DEVDISR_TSEC1		0x00000080 +#define MPC85xx_DEVDISR_TSEC2		0x00000040 +#define MPC85xx_DEVDISR_TSEC3		0x00000020 +#define MPC85xx_DEVDISR_TSEC4		0x00000010 +#define MPC85xx_DEVDISR_I2C		0x00000004 +#define MPC85xx_DEVDISR_DUART		0x00000002 +	u8	res7[12]; +	u32	powmgtcsr;	/* Power management status & control */ +	u8	res8[12]; +	u32	mcpsumr;	/* Machine check summary */ +	u8	res9[12]; +	u32	pvr;		/* Processor version */ +	u32	svr;		/* System version */ +	u8	res10[8]; +	u32	rstcr;		/* Reset control */ +#if defined(CONFIG_MPC8568)||defined(CONFIG_MPC8569) +	u8	res11a[76]; +	par_io_t qe_par_io[7]; +	u8	res11b[1600]; +#elif defined(CONFIG_P1012) || defined(CONFIG_P1021) || defined(CONFIG_P1025) +	u8      res11a[12]; +	u32     iovselsr; +	u8      res11b[60]; +	par_io_t qe_par_io[3]; +	u8      res11c[1496]; +#else +	u8	res11a[1868]; +#endif +	u32	clkdvdr;	/* Clock Divide register */ +	u8	res12[1532]; +	u32	clkocr;		/* Clock out select */ +	u8	res13[12]; +	u32	ddrdllcr;	/* DDR DLL control */ +	u8	res14[12]; +	u32	lbcdllcr;	/* LBC DLL control */ +#if defined(CONFIG_BSC9131) +	u8	res15[12]; +	u32	halt_req_mask; +#define HALTED_TO_HALT_REQ_MASK_0	0x80000000 +	u8	res18[232]; +#else +	u8	res15[248]; +#endif +	u32	lbiuiplldcr0;	/* LBIU PLL Debug Reg 0 */ +	u32	lbiuiplldcr1;	/* LBIU PLL Debug Reg 1 */ +	u32	ddrioovcr;	/* DDR IO Override Control */ +	u32	tsec12ioovcr;	/* eTSEC 1/2 IO override control */ +	u32	tsec34ioovcr;	/* eTSEC 3/4 IO override control */ +	u8      res16[52]; +	u32	sdhcdcr;	/* SDHC debug control register */ +	u8      res17[61592]; +} ccsr_gur_t; +#endif + +#define SDHCDCR_CD_INV		0x80000000 /* invert SDHC card detect */ + +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +#define MAX_SERDES 4 +#define SRDS_MAX_LANES 8 +#define SRDS_MAX_BANK 2 +typedef struct serdes_corenet { +	struct { +		u32	rstctl;	/* Reset Control Register */ +#define SRDS_RSTCTL_RST		0x80000000 +#define SRDS_RSTCTL_RSTDONE	0x40000000 +#define SRDS_RSTCTL_RSTERR	0x20000000 +#define SRDS_RSTCTL_SWRST	0x10000000 +#define SRDS_RSTCTL_SDEN	0x00000020 +#define SRDS_RSTCTL_SDRST_B	0x00000040 +#define SRDS_RSTCTL_PLLRST_B	0x00000080 +#define SRDS_RSTCTL_RSTERR_SHIFT  29 +		u32	pllcr0; /* PLL Control Register 0 */ +#define SRDS_PLLCR0_POFF		0x80000000 +#define SRDS_PLLCR0_RFCK_SEL_MASK	0x70000000 +#define SRDS_PLLCR0_RFCK_SEL_100	0x00000000 +#define SRDS_PLLCR0_RFCK_SEL_125	0x10000000 +#define SRDS_PLLCR0_RFCK_SEL_156_25	0x20000000 +#define SRDS_PLLCR0_RFCK_SEL_150	0x30000000 +#define SRDS_PLLCR0_RFCK_SEL_161_13	0x40000000 +#define SRDS_PLLCR0_RFCK_SEL_122_88	0x50000000 +#define SRDS_PLLCR0_DCBIAS_OUT_EN      0x02000000 +#define SRDS_PLLCR0_FRATE_SEL_MASK	0x000f0000 +#define SRDS_PLLCR0_FRATE_SEL_5		0x00000000 +#define SRDS_PLLCR0_FRATE_SEL_3_75	0x00050000 +#define SRDS_PLLCR0_FRATE_SEL_5_15	0x00060000 +#define SRDS_PLLCR0_FRATE_SEL_4		0x00070000 +#define SRDS_PLLCR0_FRATE_SEL_3_12	0x00090000 +#define SRDS_PLLCR0_FRATE_SEL_3		0x000a0000 +#define SRDS_PLLCR0_DCBIAS_OVRD		0x000000F0 +#define SRDS_PLLCR0_DCBIAS_OVRD_SHIFT	4 +		u32	pllcr1; /* PLL Control Register 1 */ +#define SRDS_PLLCR1_BCAP_EN		0x20000000 +#define SRDS_PLLCR1_BCAP_OVD		0x10000000 +#define SRDS_PLLCR1_PLL_FCAP		0x001F8000 +#define SRDS_PLLCR1_PLL_FCAP_SHIFT	15 +#define SRDS_PLLCR1_PLL_BWSEL		0x08000000 +#define SRDS_PLLCR1_BYP_CAL		0x02000000 +		u32	pllsr2;	/* At 0x00c, PLL Status Register 2 */ +#define SRDS_PLLSR2_BCAP_EN		0x00800000 +#define SRDS_PLLSR2_BCAP_EN_SHIFT	23 +#define SRDS_PLLSR2_FCAP		0x003F0000 +#define SRDS_PLLSR2_FCAP_SHIFT		16 +#define SRDS_PLLSR2_DCBIAS		0x000F0000 +#define SRDS_PLLSR2_DCBIAS_SHIFT	16 +		u32	pllcr3; +		u32	pllcr4; +		u8	res_18[0x20-0x18]; +	} bank[2]; +	u8	res_40[0x90-0x40]; +	u32	srdstcalcr;	/* 0x90 TX Calibration Control */ +	u8	res_94[0xa0-0x94]; +	u32	srdsrcalcr;	/* 0xa0 RX Calibration Control */ +	u8	res_a4[0xb0-0xa4]; +	u32	srdsgr0;	/* 0xb0 General Register 0 */ +	u8	res_b4[0xe0-0xb4]; +	u32	srdspccr0;	/* 0xe0 Protocol Converter Config 0 */ +	u32	srdspccr1;	/* 0xe4 Protocol Converter Config 1 */ +	u32	srdspccr2;	/* 0xe8 Protocol Converter Config 2 */ +	u32	srdspccr3;	/* 0xec Protocol Converter Config 3 */ +	u32	srdspccr4;	/* 0xf0 Protocol Converter Config 4 */ +	u8	res_f4[0x100-0xf4]; +	struct { +		u32	lnpssr;	/* 0x100, 0x120, ..., 0x1e0 */ +		u8	res_104[0x120-0x104]; +	} srdslnpssr[8]; +	u8	res_200[0x800-0x200]; +	struct { +		u32	gcr0;	/* 0x800 General Control Register 0 */ +		u32	gcr1;	/* 0x804 General Control Register 1 */ +		u32	gcr2;	/* 0x808 General Control Register 2 */ +		u32	res_80c; +		u32	recr0;	/* 0x810 Receive Equalization Control */ +		u32	res_814; +		u32	tecr0;	/* 0x818 Transmit Equalization Control */ +		u32	res_81c; +		u32	ttlcr0;	/* 0x820 Transition Tracking Loop Ctrl 0 */ +		u8	res_824[0x840-0x824]; +	} lane[8];	/* Lane A, B, C, D, E, F, G, H */ +	u8	res_a00[0x1000-0xa00];	/* from 0xa00 to 0xfff */ +} serdes_corenet_t; + +#else /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +#define SRDS_MAX_LANES		18 +#define SRDS_MAX_BANK		3 +typedef struct serdes_corenet { +	struct { +		u32	rstctl;	/* Reset Control Register */ +#define SRDS_RSTCTL_RST		0x80000000 +#define SRDS_RSTCTL_RSTDONE	0x40000000 +#define SRDS_RSTCTL_RSTERR	0x20000000 +#define SRDS_RSTCTL_SDPD	0x00000020 +		u32	pllcr0; /* PLL Control Register 0 */ +#define SRDS_PLLCR0_RFCK_SEL_MASK	0x70000000 +#define SRDS_PLLCR0_PVCOCNT_EN		0x02000000 +#define SRDS_PLLCR0_RFCK_SEL_100	0x00000000 +#define SRDS_PLLCR0_RFCK_SEL_125	0x10000000 +#define SRDS_PLLCR0_RFCK_SEL_156_25	0x20000000 +#define SRDS_PLLCR0_RFCK_SEL_150	0x30000000 +#define SRDS_PLLCR0_RFCK_SEL_161_13	0x40000000 +#define SRDS_PLLCR0_FRATE_SEL_MASK	0x00030000 +#define SRDS_PLLCR0_FRATE_SEL_5		0x00000000 +#define SRDS_PLLCR0_FRATE_SEL_6_25	0x00010000 +		u32	pllcr1; /* PLL Control Register 1 */ +#define SRDS_PLLCR1_PLL_BWSEL	0x08000000 +		u32	res[5]; +	} bank[3]; +	u32	res1[12]; +	u32	srdstcalcr;	/* TX Calibration Control */ +	u32	res2[3]; +	u32	srdsrcalcr;	/* RX Calibration Control */ +	u32	res3[3]; +	u32	srdsgr0;	/* General Register 0 */ +	u32	res4[11]; +	u32	srdspccr0;	/* Protocol Converter Config 0 */ +	u32	srdspccr1;	/* Protocol Converter Config 1 */ +	u32	srdspccr2;	/* Protocol Converter Config 2 */ +#define SRDS_PCCR2_RST_XGMII1		0x00800000 +#define SRDS_PCCR2_RST_XGMII2		0x00400000 +	u32	res5[197]; +	struct serdes_lane { +		u32	gcr0;	/* General Control Register 0 */ +#define SRDS_GCR0_RRST			0x00400000 +#define SRDS_GCR0_1STLANE		0x00010000 +#define SRDS_GCR0_UOTHL			0x00100000 +		u32	gcr1;	/* General Control Register 1 */ +#define SRDS_GCR1_REIDL_CTL_MASK	0x001f0000 +#define SRDS_GCR1_REIDL_CTL_PCIE	0x00100000 +#define SRDS_GCR1_REIDL_CTL_SRIO	0x00000000 +#define SRDS_GCR1_REIDL_CTL_SGMII	0x00040000 +#define SRDS_GCR1_OPAD_CTL		0x04000000 +		u32	res1[4]; +		u32	tecr0;	/* TX Equalization Control Reg 0 */ +#define SRDS_TECR0_TEQ_TYPE_MASK	0x30000000 +#define SRDS_TECR0_TEQ_TYPE_2LVL	0x10000000 +		u32	res3; +		u32	ttlcr0;	/* Transition Tracking Loop Ctrl 0 */ +#define SRDS_TTLCR0_FLT_SEL_MASK	0x3f000000 +#define SRDS_TTLCR0_FLT_SEL_KFR_26	0x10000000 +#define SRDS_TTLCR0_FLT_SEL_KPH_28	0x08000000 +#define SRDS_TTLCR0_FLT_SEL_750PPM	0x03000000 +#define SRDS_TTLCR0_PM_DIS		0x00004000 +#define SRDS_TTLCR0_FREQOVD_EN		0x00000001 +		u32	res4[7]; +	} lane[24]; +	u32 res6[384]; +} serdes_corenet_t; +#endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +enum { +	FSL_SRDS_B1_LANE_A = 0, +	FSL_SRDS_B1_LANE_B = 1, +	FSL_SRDS_B1_LANE_C = 2, +	FSL_SRDS_B1_LANE_D = 3, +	FSL_SRDS_B1_LANE_E = 4, +	FSL_SRDS_B1_LANE_F = 5, +	FSL_SRDS_B1_LANE_G = 6, +	FSL_SRDS_B1_LANE_H = 7, +	FSL_SRDS_B1_LANE_I = 8, +	FSL_SRDS_B1_LANE_J = 9, +	FSL_SRDS_B2_LANE_A = 16, +	FSL_SRDS_B2_LANE_B = 17, +	FSL_SRDS_B2_LANE_C = 18, +	FSL_SRDS_B2_LANE_D = 19, +	FSL_SRDS_B3_LANE_A = 20, +	FSL_SRDS_B3_LANE_B = 21, +	FSL_SRDS_B3_LANE_C = 22, +	FSL_SRDS_B3_LANE_D = 23, +}; + +/* Security Engine Block (MS = Most Sig., LS = Least Sig.) */ +#if CONFIG_SYS_FSL_SEC_COMPAT >= 4 +typedef struct ccsr_sec { +	u32	res0; +	u32	mcfgr;		/* Master CFG Register */ +	u8	res1[0x8]; +	struct { +		u32	ms;	/* Job Ring LIODN Register, MS */ +		u32	ls;	/* Job Ring LIODN Register, LS */ +	} jrliodnr[4]; +	u8	res2[0x30]; +	struct { +		u32	ms;	/* RTIC LIODN Register, MS */ +		u32	ls;	/* RTIC LIODN Register, LS */ +	} rticliodnr[4]; +	u8	res3[0x1c]; +	u32	decorr;		/* DECO Request Register */ +	struct { +		u32	ms;	/* DECO LIODN Register, MS */ +		u32	ls;	/* DECO LIODN Register, LS */ +	} decoliodnr[8]; +	u8	res4[0x40]; +	u32	dar;		/* DECO Avail Register */ +	u32	drr;		/* DECO Reset Register */ +	u8	res5[0xe78]; +	u32	crnr_ms;	/* CHA Revision Number Register, MS */ +	u32	crnr_ls;	/* CHA Revision Number Register, LS */ +	u32	ctpr_ms;	/* Compile Time Parameters Register, MS */ +	u32	ctpr_ls;	/* Compile Time Parameters Register, LS */ +	u8	res6[0x10]; +	u32	far_ms;		/* Fault Address Register, MS */ +	u32	far_ls;		/* Fault Address Register, LS */ +	u32	falr;		/* Fault Address LIODN Register */ +	u32	fadr;		/* Fault Address Detail Register */ +	u8	res7[0x4]; +	u32	csta;		/* CAAM Status Register */ +	u8	res8[0x8]; +	u32	rvid;		/* Run Time Integrity Checking Version ID Reg.*/ +	u32	ccbvid;		/* CHA Cluster Block Version ID Register */ +	u32	chavid_ms;	/* CHA Version ID Register, MS */ +	u32	chavid_ls;	/* CHA Version ID Register, LS */ +	u32	chanum_ms;	/* CHA Number Register, MS */ +	u32	chanum_ls;	/* CHA Number Register, LS */ +	u32	secvid_ms;	/* SEC Version ID Register, MS */ +	u32	secvid_ls;	/* SEC Version ID Register, LS */ +	u8	res9[0x6020]; +	u32	qilcr_ms;	/* Queue Interface LIODN CFG Register, MS */ +	u32	qilcr_ls;	/* Queue Interface LIODN CFG Register, LS */ +	u8	res10[0x8fd8]; +} ccsr_sec_t; + +#define SEC_CTPR_MS_AXI_LIODN		0x08000000 +#define SEC_CTPR_MS_QI			0x02000000 +#define SEC_RVID_MA			0x0f000000 +#define SEC_CHANUM_MS_JRNUM_MASK	0xf0000000 +#define SEC_CHANUM_MS_JRNUM_SHIFT	28 +#define SEC_CHANUM_MS_DECONUM_MASK	0x0f000000 +#define SEC_CHANUM_MS_DECONUM_SHIFT	24 +#define SEC_SECVID_MS_IPID_MASK	0xffff0000 +#define SEC_SECVID_MS_IPID_SHIFT	16 +#define SEC_SECVID_MS_MAJ_REV_MASK	0x0000ff00 +#define SEC_SECVID_MS_MAJ_REV_SHIFT	8 +#define SEC_CCBVID_ERA_MASK		0xff000000 +#define SEC_CCBVID_ERA_SHIFT		24 +#endif + +typedef struct ccsr_qman { +#ifdef CONFIG_SYS_FSL_QMAN_V3 +	u8	res0[0x200]; +#else +	struct { +		u32	qcsp_lio_cfg;	/* 0x0 - SW Portal n LIO cfg */ +		u32	qcsp_io_cfg;	/* 0x4 - SW Portal n IO cfg */ +		u32	res; +		u32	qcsp_dd_cfg;	/* 0xc - SW Portal n Dynamic Debug cfg */ +	} qcsp[32]; +#endif +	/* Not actually reserved, but irrelevant to u-boot */ +	u8	res[0xbf8 - 0x200]; +	u32	ip_rev_1; +	u32	ip_rev_2; +	u32	fqd_bare;	/* FQD Extended Base Addr Register */ +	u32	fqd_bar;	/* FQD Base Addr Register */ +	u8	res1[0x8]; +	u32	fqd_ar;		/* FQD Attributes Register */ +	u8	res2[0xc]; +	u32	pfdr_bare;	/* PFDR Extended Base Addr Register */ +	u32	pfdr_bar;	/* PFDR Base Addr Register */ +	u8	res3[0x8]; +	u32	pfdr_ar;	/* PFDR Attributes Register */ +	u8	res4[0x4c]; +	u32	qcsp_bare;	/* QCSP Extended Base Addr Register */ +	u32	qcsp_bar;	/* QCSP Base Addr Register */ +	u8	res5[0x78]; +	u32	ci_sched_cfg;	/* Initiator Scheduling Configuration */ +	u32	srcidr;		/* Source ID Register */ +	u32	liodnr;		/* LIODN Register */ +	u8	res6[4]; +	u32	ci_rlm_cfg;	/* Initiator Read Latency Monitor Cfg */ +	u32	ci_rlm_avg;	/* Initiator Read Latency Monitor Avg */ +	u8	res7[0x2e8]; +#ifdef CONFIG_SYS_FSL_QMAN_V3 +	struct { +		u32	qcsp_lio_cfg;	/* 0x0 - SW Portal n LIO cfg */ +		u32	qcsp_io_cfg;	/* 0x4 - SW Portal n IO cfg */ +		u32	res; +		u32	qcsp_dd_cfg;	/* 0xc - SW Portal n Dynamic Debug cfg*/ +	} qcsp[50]; +#endif +} ccsr_qman_t; + +typedef struct ccsr_bman { +	/* Not actually reserved, but irrelevant to u-boot */ +	u8	res[0xbf8]; +	u32	ip_rev_1; +	u32	ip_rev_2; +	u32	fbpr_bare;	/* FBPR Extended Base Addr Register */ +	u32	fbpr_bar;	/* FBPR Base Addr Register */ +	u8	res1[0x8]; +	u32	fbpr_ar;	/* FBPR Attributes Register */ +	u8	res2[0xf0]; +	u32	srcidr;		/* Source ID Register */ +	u32	liodnr;		/* LIODN Register */ +	u8	res7[0x2f4]; +} ccsr_bman_t; + +typedef struct ccsr_pme { +	u8	res0[0x804]; +	u32	liodnbr;	/* LIODN Base Register */ +	u8	res1[0x1f8]; +	u32	srcidr;		/* Source ID Register */ +	u8	res2[8]; +	u32	liodnr;		/* LIODN Register */ +	u8	res3[0x1e8]; +	u32	pm_ip_rev_1;	/* PME IP Block Revision Reg 1*/ +	u32	pm_ip_rev_2;	/* PME IP Block Revision Reg 1*/ +	u8	res4[0x400]; +} ccsr_pme_t; + +#ifdef CONFIG_SYS_FSL_RAID_ENGINE +struct ccsr_raide { +	u8	res0[0x543]; +	u32	liodnbr;			/* LIODN Base Register */ +	u8	res1[0xab8]; +	struct { +		struct { +			u32	cfg0;		/* cfg register 0 */ +			u32	cfg1;		/* cfg register 1 */ +			u8	res1[0x3f8]; +		} ring[2]; +		u8	res[0x800]; +	} jq[2]; +}; +#endif + +#ifdef CONFIG_SYS_DPAA_RMAN +struct ccsr_rman { +	u8	res0[0xf64]; +	u32	mmliodnbr;	/* Message Manager LIODN Base Register */ +	u32	mmitar;		/* RMAN Inbound Translation Address Register */ +	u32	mmitdr;		/* RMAN Inbound Translation Data Register */ +	u8	res4[0x1f090]; +}; +#endif + +#ifdef CONFIG_SYS_PMAN +struct ccsr_pman { +	u8	res_00[0x40]; +	u32	poes1;		/* PMAN Operation Error Status Register 1 */ +	u32	poes2;		/* PMAN Operation Error Status Register 2 */ +	u32	poeah;		/* PMAN Operation Error Address High */ +	u32	poeal;		/* PMAN Operation Error Address Low */ +	u8	res_50[0x50]; +	u32	pr1;		/* PMAN Revision Register 1 */ +	u32	pr2;		/* PMAN Revision Register 2 */ +	u8	res_a8[0x8]; +	u32	pcap;		/* PMAN Capabilities Register */ +	u8	res_b4[0xc]; +	u32	pc1;		/* PMAN Control Register 1 */ +	u32	pc2;		/* PMAN Control Register 2 */ +	u32	pc3;		/* PMAN Control Register 3 */ +	u32	pc4;		/* PMAN Control Register 4 */ +	u32	pc5;		/* PMAN Control Register 5 */ +	u32	pc6;		/* PMAN Control Register 6 */ +	u8	res_d8[0x8]; +	u32	ppa1;		/* PMAN Prefetch Attributes Register 1 */ +	u32	ppa2;		/* PMAN Prefetch Attributes Register 2 */ +	u8	res_e8[0x8]; +	u32	pics;		/* PMAN Interrupt Control and Status */ +	u8	res_f4[0xf0c]; +}; +#endif + +#ifdef CONFIG_FSL_CORENET +#define CONFIG_SYS_FSL_CORENET_CCM_OFFSET	0x0000 +#ifdef CONFIG_SYS_PMAN +#define CONFIG_SYS_FSL_CORENET_PMAN1_OFFSET	0x4000 +#define CONFIG_SYS_FSL_CORENET_PMAN2_OFFSET	0x5000 +#define CONFIG_SYS_FSL_CORENET_PMAN3_OFFSET	0x6000 +#endif +#define CONFIG_SYS_MPC8xxx_DDR_OFFSET		0x8000 +#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET		0x9000 +#define CONFIG_SYS_MPC8xxx_DDR3_OFFSET		0xA000 +#define CONFIG_SYS_FSL_CORENET_CLK_OFFSET	0xE1000 +#define CONFIG_SYS_FSL_CORENET_RCPM_OFFSET	0xE2000 +#define CONFIG_SYS_FSL_CORENET_SERDES_OFFSET	0xEA000 +#define CONFIG_SYS_FSL_CORENET_SERDES2_OFFSET	0xEB000 +#define CONFIG_SYS_FSL_CPC_OFFSET		0x10000 +#define CONFIG_SYS_FSL_SCFG_OFFSET		0xFC000 +#define CONFIG_SYS_MPC85xx_DMA1_OFFSET		0x100000 +#define CONFIG_SYS_MPC85xx_DMA2_OFFSET		0x101000 +#define CONFIG_SYS_MPC85xx_DMA3_OFFSET		0x102000 +#define CONFIG_SYS_MPC85xx_DMA_OFFSET		CONFIG_SYS_MPC85xx_DMA1_OFFSET +#define CONFIG_SYS_MPC85xx_ESPI_OFFSET		0x110000 +#define CONFIG_SYS_MPC85xx_ESDHC_OFFSET		0x114000 +#define CONFIG_SYS_MPC85xx_LBC_OFFSET		0x124000 +#define CONFIG_SYS_MPC85xx_IFC_OFFSET		0x124000 +#define CONFIG_SYS_MPC85xx_GPIO_OFFSET		0x130000 +#define CONFIG_SYS_MPC85xx_QE_OFFSET		0x140000 +#define CONFIG_SYS_FSL_CORENET_RMAN_OFFSET	0x1e0000 +#if defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2) && !defined(CONFIG_PPC_B4860)\ +	&& !defined(CONFIG_PPC_B4420) +#define CONFIG_SYS_MPC85xx_PCIE1_OFFSET		0x240000 +#define CONFIG_SYS_MPC85xx_PCIE2_OFFSET		0x250000 +#define CONFIG_SYS_MPC85xx_PCIE3_OFFSET		0x260000 +#define CONFIG_SYS_MPC85xx_PCIE4_OFFSET		0x270000 +#else +#define CONFIG_SYS_MPC85xx_PCIE1_OFFSET		0x200000 +#define CONFIG_SYS_MPC85xx_PCIE2_OFFSET		0x201000 +#define CONFIG_SYS_MPC85xx_PCIE3_OFFSET		0x202000 +#define CONFIG_SYS_MPC85xx_PCIE4_OFFSET		0x203000 +#endif +#define CONFIG_SYS_MPC85xx_USB1_OFFSET		0x210000 +#define CONFIG_SYS_MPC85xx_USB2_OFFSET		0x211000 +#define CONFIG_SYS_MPC85xx_USB1_PHY_OFFSET 0x214000 +#define CONFIG_SYS_MPC85xx_USB2_PHY_OFFSET 0x214100 +#define CONFIG_SYS_MPC85xx_SATA1_OFFSET		0x220000 +#define CONFIG_SYS_MPC85xx_SATA2_OFFSET		0x221000 +#define CONFIG_SYS_FSL_SEC_OFFSET		0x300000 +#define CONFIG_SYS_FSL_CORENET_PME_OFFSET	0x316000 +#define CONFIG_SYS_FSL_QMAN_OFFSET		0x318000 +#define CONFIG_SYS_FSL_BMAN_OFFSET		0x31a000 +#define CONFIG_SYS_FSL_RAID_ENGINE_OFFSET	0x320000 +#define CONFIG_SYS_FSL_FM1_OFFSET		0x400000 +#define CONFIG_SYS_FSL_FM1_RX0_1G_OFFSET	0x488000 +#define CONFIG_SYS_FSL_FM1_RX1_1G_OFFSET	0x489000 +#define CONFIG_SYS_FSL_FM1_RX2_1G_OFFSET	0x48a000 +#define CONFIG_SYS_FSL_FM1_RX3_1G_OFFSET	0x48b000 +#define CONFIG_SYS_FSL_FM1_RX4_1G_OFFSET	0x48c000 +#define CONFIG_SYS_FSL_FM1_RX5_1G_OFFSET	0x48d000 +#define CONFIG_SYS_FSL_FM1_RX0_10G_OFFSET	0x490000 +#define CONFIG_SYS_FSL_FM1_RX1_10G_OFFSET	0x491000 +#define CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET	0x4e0000 +#define CONFIG_SYS_FSL_FM2_OFFSET		0x500000 +#define CONFIG_SYS_FSL_FM2_RX0_1G_OFFSET	0x588000 +#define CONFIG_SYS_FSL_FM2_RX1_1G_OFFSET	0x589000 +#define CONFIG_SYS_FSL_FM2_RX2_1G_OFFSET	0x58a000 +#define CONFIG_SYS_FSL_FM2_RX3_1G_OFFSET	0x58b000 +#define CONFIG_SYS_FSL_FM2_RX4_1G_OFFSET	0x58c000 +#define CONFIG_SYS_FSL_FM2_RX5_1G_OFFSET	0x58d000 +#define CONFIG_SYS_FSL_FM2_RX0_10G_OFFSET	0x590000 +#define CONFIG_SYS_FSL_FM2_RX1_10G_OFFSET	0x591000 +#define CONFIG_SYS_FSL_CLUSTER_1_L2_OFFSET	0xC20000 +#else +#define CONFIG_SYS_MPC85xx_ECM_OFFSET		0x0000 +#define CONFIG_SYS_MPC8xxx_DDR_OFFSET		0x2000 +#define CONFIG_SYS_MPC85xx_LBC_OFFSET		0x5000 +#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET		0x6000 +#define CONFIG_SYS_MPC85xx_ESPI_OFFSET		0x7000 +#define CONFIG_SYS_MPC85xx_PCI1_OFFSET		0x8000 +#define CONFIG_SYS_MPC85xx_PCIX_OFFSET		0x8000 +#define CONFIG_SYS_MPC85xx_PCI2_OFFSET		0x9000 +#define CONFIG_SYS_MPC85xx_PCIX2_OFFSET		0x9000 +#define CONFIG_SYS_MPC85xx_PCIE1_OFFSET         0xa000 +#define CONFIG_SYS_MPC85xx_PCIE2_OFFSET         0x9000 +#if defined(CONFIG_MPC8572) || defined(CONFIG_P2020) +#define CONFIG_SYS_MPC85xx_PCIE3_OFFSET         0x8000 +#else +#define CONFIG_SYS_MPC85xx_PCIE3_OFFSET         0xb000 +#endif +#define CONFIG_SYS_MPC85xx_GPIO_OFFSET		0xF000 +#define CONFIG_SYS_MPC85xx_SATA1_OFFSET		0x18000 +#define CONFIG_SYS_MPC85xx_SATA2_OFFSET		0x19000 +#define CONFIG_SYS_MPC85xx_IFC_OFFSET		0x1e000 +#define CONFIG_SYS_MPC85xx_L2_OFFSET		0x20000 +#define CONFIG_SYS_MPC85xx_DMA_OFFSET		0x21000 +#define CONFIG_SYS_MPC85xx_USB1_OFFSET		0x22000 +#define CONFIG_SYS_MPC85xx_USB2_OFFSET		0x23000 +#ifdef CONFIG_TSECV2 +#define CONFIG_SYS_TSEC1_OFFSET			0xB0000 +#elif defined(CONFIG_TSECV2_1) +#define CONFIG_SYS_TSEC1_OFFSET			0x10000 +#else +#define CONFIG_SYS_TSEC1_OFFSET			0x24000 +#endif +#define CONFIG_SYS_MDIO1_OFFSET			0x24000 +#define CONFIG_SYS_MPC85xx_ESDHC_OFFSET		0x2e000 +#if defined(CONFIG_PPC_C29X) +#define CONFIG_SYS_FSL_SEC_OFFSET		0x80000 +#else +#define CONFIG_SYS_FSL_SEC_OFFSET		0x30000 +#endif +#define CONFIG_SYS_MPC85xx_SERDES2_OFFSET	0xE3100 +#define CONFIG_SYS_MPC85xx_SERDES1_OFFSET	0xE3000 +#define CONFIG_SYS_SNVS_OFFSET			0xE6000 +#define CONFIG_SYS_SFP_OFFSET			0xE7000 +#define CONFIG_SYS_MPC85xx_CPM_OFFSET		0x80000 +#define CONFIG_SYS_FSL_QMAN_OFFSET		0x88000 +#define CONFIG_SYS_FSL_BMAN_OFFSET		0x8a000 +#define CONFIG_SYS_FSL_FM1_OFFSET		0x100000 +#define CONFIG_SYS_FSL_FM1_RX0_1G_OFFSET	0x188000 +#define CONFIG_SYS_FSL_FM1_RX1_1G_OFFSET	0x189000 +#define CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET	0x1e0000 +#endif + +#define CONFIG_SYS_MPC85xx_PIC_OFFSET		0x40000 +#define CONFIG_SYS_MPC85xx_GUTS_OFFSET		0xE0000 +#define CONFIG_SYS_FSL_SRIO_OFFSET		0xC0000 + +#if defined(CONFIG_BSC9132) +#define CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET	0x10000 +#define CONFIG_SYS_FSL_DSP_CCSR_DDR_ADDR \ +	(CONFIG_SYS_FSL_DSP_CCSRBAR + CONFIG_SYS_FSL_DSP_CCSR_DDR_OFFSET) +#endif + +#define CONFIG_SYS_FSL_CPC_ADDR	\ +	(CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_CPC_OFFSET) +#define CONFIG_SYS_FSL_SCFG_ADDR	\ +	(CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_SCFG_OFFSET) +#define CONFIG_SYS_FSL_SCFG_PIXCLK_ADDR	\ +	(CONFIG_SYS_FSL_SCFG_ADDR + CONFIG_SYS_FSL_SCFG_PIXCLKCR_OFFSET) +#define CONFIG_SYS_FSL_QMAN_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_QMAN_OFFSET) +#define CONFIG_SYS_FSL_BMAN_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_BMAN_OFFSET) +#define CONFIG_SYS_FSL_CORENET_PME_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_PME_OFFSET) +#define CONFIG_SYS_FSL_RAID_ENGINE_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_RAID_ENGINE_OFFSET) +#define CONFIG_SYS_FSL_CORENET_RMAN_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_RMAN_OFFSET) +#define CONFIG_SYS_MPC85xx_GUTS_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_GUTS_OFFSET) +#define CONFIG_SYS_FSL_CORENET_CCM_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_CCM_OFFSET) +#define CONFIG_SYS_FSL_CORENET_CLK_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_CLK_OFFSET) +#define CONFIG_SYS_FSL_CORENET_RCPM_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_RCPM_OFFSET) +#define CONFIG_SYS_MPC85xx_ECM_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_ECM_OFFSET) +#define CONFIG_SYS_FSL_DDR_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET) +#define CONFIG_SYS_FSL_DDR2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR2_OFFSET) +#define CONFIG_SYS_FSL_DDR3_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR3_OFFSET) +#define CONFIG_SYS_LBC_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_LBC_OFFSET) +#define CONFIG_SYS_IFC_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_IFC_OFFSET) +#define CONFIG_SYS_MPC85xx_ESPI_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_ESPI_OFFSET) +#define CONFIG_SYS_MPC85xx_PCIX_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIX_OFFSET) +#define CONFIG_SYS_MPC85xx_PCIX2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIX2_OFFSET) +#define CONFIG_SYS_MPC85xx_GPIO_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_GPIO_OFFSET) +#define CONFIG_SYS_MPC85xx_SATA1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SATA1_OFFSET) +#define CONFIG_SYS_MPC85xx_SATA2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SATA2_OFFSET) +#define CONFIG_SYS_MPC85xx_L2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_L2_OFFSET) +#define CONFIG_SYS_MPC85xx_DMA_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_DMA_OFFSET) +#define CONFIG_SYS_MPC85xx_ESDHC_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_ESDHC_OFFSET) +#define CONFIG_SYS_MPC8xxx_PIC_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PIC_OFFSET) +#define CONFIG_SYS_MPC85xx_CPM_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_CPM_OFFSET) +#define CONFIG_SYS_MPC85xx_SERDES1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SERDES1_OFFSET) +#define CONFIG_SYS_MPC85xx_SERDES2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SERDES2_OFFSET) +#define CONFIG_SYS_FSL_CORENET_SERDES_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_SERDES_OFFSET) +#define CONFIG_SYS_FSL_CORENET_SERDES2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_SERDES2_OFFSET) +#define CONFIG_SYS_MPC85xx_USB1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB1_OFFSET) +#define CONFIG_SYS_MPC85xx_USB2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB2_OFFSET) +#define CONFIG_SYS_MPC85xx_USB1_PHY_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB1_PHY_OFFSET) +#define CONFIG_SYS_MPC85xx_USB2_PHY_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB2_PHY_OFFSET) +#define CONFIG_SYS_FSL_SEC_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_SEC_OFFSET) +#define CONFIG_SYS_FSL_FM1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM1_OFFSET) +#define CONFIG_SYS_FSL_FM1_DTSEC1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET) +#define CONFIG_SYS_FSL_FM2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM2_OFFSET) +#define CONFIG_SYS_FSL_SRIO_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_SRIO_OFFSET) + +#define CONFIG_SYS_PCI1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCI1_OFFSET) +#define CONFIG_SYS_PCI2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCI2_OFFSET) +#define CONFIG_SYS_PCIE1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIE1_OFFSET) +#define CONFIG_SYS_PCIE2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIE2_OFFSET) +#define CONFIG_SYS_PCIE3_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIE3_OFFSET) +#define CONFIG_SYS_PCIE4_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCIE4_OFFSET) + +#define TSEC_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET) +#define MDIO_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET) + +#ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 +struct ccsr_cluster_l2 { +	u32 l2csr0;	/* 0x000 L2 cache control and status register 0 */ +	u32 l2csr1;	/* 0x004 L2 cache control and status register 1 */ +	u32 l2cfg0;	/* 0x008 L2 cache configuration register 0 */ +	u8  res_0c[500];/* 0x00c - 0x1ff */ +	u32 l2pir0;	/* 0x200 L2 cache partitioning ID register 0 */ +	u8  res_204[4]; +	u32 l2par0;	/* 0x208 L2 cache partitioning allocation register 0 */ +	u32 l2pwr0;	/* 0x20c L2 cache partitioning way register 0 */ +	u32 l2pir1;	/* 0x210 L2 cache partitioning ID register 1 */ +	u8  res_214[4]; +	u32 l2par1;	/* 0x218 L2 cache partitioning allocation register 1 */ +	u32 l2pwr1;	/* 0x21c L2 cache partitioning way register 1 */ +	u32 u2pir2;	/* 0x220 L2 cache partitioning ID register 2 */ +	u8  res_224[4]; +	u32 l2par2;	/* 0x228 L2 cache partitioning allocation register 2 */ +	u32 l2pwr2;	/* 0x22c L2 cache partitioning way register 2 */ +	u32 l2pir3;	/* 0x230 L2 cache partitioning ID register 3 */ +	u8  res_234[4]; +	u32 l2par3;	/* 0x238 L2 cache partitining allocation register 3 */ +	u32 l2pwr3;	/* 0x23c L2 cache partitining way register 3 */ +	u32 l2pir4;	/* 0x240 L2 cache partitioning ID register 3 */ +	u8  res244[4]; +	u32 l2par4;	/* 0x248 L2 cache partitioning allocation register 3 */ +	u32 l2pwr4;	/* 0x24c L2 cache partitioning way register 3 */ +	u32 l2pir5;	/* 0x250 L2 cache partitioning ID register 3 */ +	u8  res_254[4]; +	u32 l2par5;	/* 0x258 L2 cache partitioning allocation register 3 */ +	u32 l2pwr5;	/* 0x25c L2 cache partitioning way register 3 */ +	u32 l2pir6;	/* 0x260 L2 cache partitioning ID register 3 */ +	u8  res_264[4]; +	u32 l2par6;	/* 0x268 L2 cache partitioning allocation register 3 */ +	u32 l2pwr6;	/* 0x26c L2 cache partitioning way register 3 */ +	u32 l2pir7;	/* 0x270 L2 cache partitioning ID register 3 */ +	u8  res274[4]; +	u32 l2par7;	/* 0x278 L2 cache partitioning allocation register 3 */ +	u32 l2pwr7;	/* 0x27c L2 cache partitioning way register 3 */ +	u8  res_280[0xb80]; /* 0x280 - 0xdff */ +	u32 l2errinjhi;	/* 0xe00 L2 cache error injection mask high */ +	u32 l2errinjlo;	/* 0xe04 L2 cache error injection mask low */ +	u32 l2errinjctl;/* 0xe08 L2 cache error injection control */ +	u8  res_e0c[20];	/* 0xe0c - 0x01f */ +	u32 l2captdatahi; /* 0xe20 L2 cache error capture data high */ +	u32 l2captdatalo; /* 0xe24 L2 cache error capture data low */ +	u32 l2captecc;	/* 0xe28 L2 cache error capture ECC syndrome */ +	u8  res_e2c[20];	/* 0xe2c - 0xe3f */ +	u32 l2errdet;	/* 0xe40 L2 cache error detect */ +	u32 l2errdis;	/* 0xe44 L2 cache error disable */ +	u32 l2errinten;	/* 0xe48 L2 cache error interrupt enable */ +	u32 l2errattr;	/* 0xe4c L2 cache error attribute */ +	u32 l2erreaddr;	/* 0xe50 L2 cache error extended address */ +	u32 l2erraddr;	/* 0xe54 L2 cache error address */ +	u32 l2errctl;	/* 0xe58 L2 cache error control */ +}; +#define CONFIG_SYS_FSL_CLUSTER_1_L2 \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CLUSTER_1_L2_OFFSET) +#endif /* CONFIG_SYS_FSL_QORIQ_CHASSIS2 */ + +#define	CONFIG_SYS_DCSR_DCFG_OFFSET	0X20000 +struct dcsr_dcfg_regs { +	u8  res_0[0x520]; +	u32 ecccr1; +#define	DCSR_DCFG_ECC_DISABLE_USB1	0x00008000 +#define	DCSR_DCFG_ECC_DISABLE_USB2	0x00004000 +	u8  res_524[0x1000 - 0x524]; /* 0x524 - 0x1000 */ +}; + +#define CONFIG_SYS_MPC85xx_SCFG \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SCFG_OFFSET) +#define CONFIG_SYS_MPC85xx_SCFG_OFFSET	0xfc000 +/* The supplement configuration unit register */ +struct ccsr_scfg { +	u32 dpslpcr;	/* 0x000 Deep Sleep Control register */ +	u32 usb1dpslpcsr;/* 0x004 USB1 Deep Sleep Control Status register */ +	u32 usb2dpslpcsr;/* 0x008 USB2 Deep Sleep Control Status register */ +	u32 fmclkdpslpcr;/* 0x00c FM Clock Deep Sleep Control register */ +	u32 res1[4]; +	u32 esgmiiselcr;/* 0x020 Ethernet Switch SGMII Select Control reg */ +	u32 res2; +	u32 pixclkcr;	/* 0x028 Pixel Clock Control register */ +	u32 res3[245]; +	u32 qeioclkcr;	/* 0x400 QUICC Engine IO Clock Control register */ +	u32 emiiocr;	/* 0x404 EMI MDIO Control Register */ +	u32 sdhciovselcr;/* 0x408 SDHC IO VSEL Control register */ +	u32 qmifrstcr;	/* 0x40c QMAN Interface Reset Control register */ +	u32 res4[60]; +	u32 sparecr[8];	/* 0x500 Spare Control register(0-7) */ +}; +#endif /*__IMMAP_85xx__*/ diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_86xx.h b/roms/u-boot/arch/powerpc/include/asm/immap_86xx.h new file mode 100644 index 00000000..177918b7 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_86xx.h @@ -0,0 +1,1221 @@ +/* + * MPC86xx Internal Memory Map + * + * Copyright 2004, 2011 Freescale Semiconductor + * Jeff Brown (Jeffrey@freescale.com) + * Srikanth Srinivasan (srikanth.srinivasan@freescale.com) + * + */ + +#ifndef __IMMAP_86xx__ +#define __IMMAP_86xx__ + +#include <fsl_immap.h> +#include <asm/types.h> +#include <asm/fsl_dma.h> +#include <asm/fsl_lbc.h> +#include <asm/fsl_i2c.h> + +/* Local-Access Registers and MCM Registers(0x0000-0x2000) */ +typedef struct ccsr_local_mcm { +	uint	ccsrbar;	/* 0x0 - Control Configuration Status Registers Base Address Register */ +	char	res1[4]; +	uint	altcbar;	/* 0x8 - Alternate Configuration Base Address Register */ +	char	res2[4]; +	uint	altcar;		/* 0x10 - Alternate Configuration Attribute Register */ +	char	res3[12]; +	uint	bptr;		/* 0x20 - Boot Page Translation Register */ +	char	res4[3044]; +	uint	lawbar0;	/* 0xc08 - Local Access Window 0 Base Address Register */ +	char	res5[4]; +	uint	lawar0;		/* 0xc10 - Local Access Window 0 Attributes Register */ +	char	res6[20]; +	uint	lawbar1;	/* 0xc28 - Local Access Window 1 Base Address Register */ +	char	res7[4]; +	uint	lawar1;		/* 0xc30 - Local Access Window 1 Attributes Register */ +	char	res8[20]; +	uint	lawbar2;	/* 0xc48 - Local Access Window 2 Base Address Register */ +	char	res9[4]; +	uint	lawar2;		/* 0xc50 - Local Access Window 2 Attributes Register */ +	char	res10[20]; +	uint	lawbar3;	/* 0xc68 - Local Access Window 3 Base Address Register */ +	char	res11[4]; +	uint	lawar3;		/* 0xc70 - Local Access Window 3 Attributes Register */ +	char	res12[20]; +	uint	lawbar4;	/* 0xc88 - Local Access Window 4 Base Address Register */ +	char	res13[4]; +	uint	lawar4;		/* 0xc90 - Local Access Window 4 Attributes Register */ +	char	res14[20]; +	uint	lawbar5;	/* 0xca8 - Local Access Window 5 Base Address Register */ +	char	res15[4]; +	uint	lawar5;		/* 0xcb0 - Local Access Window 5 Attributes Register */ +	char	res16[20]; +	uint	lawbar6;	/* 0xcc8 - Local Access Window 6 Base Address Register */ +	char	res17[4]; +	uint	lawar6;		/* 0xcd0 - Local Access Window 6 Attributes Register */ +	char	res18[20]; +	uint	lawbar7;	/* 0xce8 - Local Access Window 7 Base Address Register */ +	char	res19[4]; +	uint	lawar7;		/* 0xcf0 - Local Access Window 7 Attributes Register */ +	char	res20[20]; +	uint	lawbar8;	/* 0xd08 - Local Access Window 8 Base Address Register */ +	char	res21[4]; +	uint	lawar8;		/* 0xd10 - Local Access Window 8 Attributes Register */ +	char	res22[20]; +	uint	lawbar9;	/* 0xd28 - Local Access Window 9 Base Address Register */ +	char	res23[4]; +	uint	lawar9;		/* 0xd30 - Local Access Window 9 Attributes Register */ +	char	res24[716]; +	uint	abcr;		/* 0x1000 - MCM CCB Address Configuration Register */ +	char	res25[4]; +	uint    dbcr;           /* 0x1008 - MCM MPX data bus Configuration Register */ +	char	res26[4]; +	uint	pcr;		/* 0x1010 - MCM CCB Port Configuration Register */ +	char	res27[44]; +	uint	hpmr0;		/* 0x1040 - MCM HPM Threshold Count Register 0 */ +	uint	hpmr1;		/* 0x1044 - MCM HPM Threshold Count Register 1 */ +	uint	hpmr2;		/* 0x1048 - MCM HPM Threshold Count Register 2 */ +	uint	hpmr3;		/* 0x104c - MCM HPM Threshold Count Register 3 */ +	char	res28[16]; +	uint	hpmr4;		/* 0x1060 - MCM HPM Threshold Count Register 4 */ +	uint	hpmr5;		/* 0x1064 - MCM HPM Threshold Count Register 5 */ +	uint	hpmccr;		/* 0x1068 - MCM HPM Cycle Count Register */ +	char	res29[3476]; +	uint	edr;		/* 0x1e00 - MCM Error Detect Register */ +	char	res30[4]; +	uint	eer;		/* 0x1e08 - MCM Error Enable Register */ +	uint	eatr;		/* 0x1e0c - MCM Error Attributes Capture Register */ +	uint	eladr;		/* 0x1e10 - MCM Error Low Address Capture Register */ +	uint	ehadr;		/* 0x1e14 - MCM Error High Address Capture Register */ +	char	res31[488]; +} ccsr_local_mcm_t; + +/* Daul I2C Registers(0x3000-0x4000) */ +typedef struct ccsr_i2c { +	struct fsl_i2c	i2c[2]; +	u8	res[4096 - 2 * sizeof(struct fsl_i2c)]; +} ccsr_i2c_t; + +/* DUART Registers(0x4000-0x5000) */ +typedef struct ccsr_duart { +	char	res1[1280]; +	u_char	urbr1_uthr1_udlb1;/* 0x4500 - URBR1, UTHR1, UDLB1 with the same address offset of 0x04500 */ +	u_char	uier1_udmb1;	/* 0x4501 - UIER1, UDMB1 with the same address offset of 0x04501 */ +	u_char	uiir1_ufcr1_uafr1;/* 0x4502 - UIIR1, UFCR1, UAFR1 with the same address offset of 0x04502 */ +	u_char	ulcr1;		/* 0x4503 - UART1 Line Control Register */ +	u_char	umcr1;		/* 0x4504 - UART1 Modem Control Register */ +	u_char	ulsr1;		/* 0x4505 - UART1 Line Status Register */ +	u_char	umsr1;		/* 0x4506 - UART1 Modem Status Register */ +	u_char	uscr1;		/* 0x4507 - UART1 Scratch Register */ +	char	res2[8]; +	u_char	udsr1;		/* 0x4510 - UART1 DMA Status Register */ +	char	res3[239]; +	u_char	urbr2_uthr2_udlb2;/* 0x4600 - URBR2, UTHR2, UDLB2 with the same address offset of 0x04600 */ +	u_char	uier2_udmb2;	/* 0x4601 - UIER2, UDMB2 with the same address offset of 0x04601 */ +	u_char	uiir2_ufcr2_uafr2;/* 0x4602 - UIIR2, UFCR2, UAFR2 with the same address offset of 0x04602 */ +	u_char	ulcr2;		/* 0x4603 - UART2 Line Control Register */ +	u_char	umcr2;		/* 0x4604 - UART2 Modem Control Register */ +	u_char	ulsr2;		/* 0x4605 - UART2 Line Status Register */ +	u_char	umsr2;		/* 0x4606 - UART2 Modem Status Register */ +	u_char	uscr2;		/* 0x4607 - UART2 Scratch Register */ +	char	res4[8]; +	u_char	udsr2;		/* 0x4610 - UART2 DMA Status Register */ +	char	res5[2543]; +} ccsr_duart_t; + +/* PCI Express Registers(0x8000-0x9000) and (0x9000-0xA000) */ +typedef struct ccsr_pex { +	uint	cfg_addr;	/* 0x8000 - PEX Configuration Address Register */ +	uint	cfg_data;	/* 0x8004 - PEX Configuration Data Register */ +	char	res1[4]; +	uint	out_comp_to;	/* 0x800C - PEX Outbound Completion Timeout Register */ +	char	res2[16]; +	uint	pme_msg_det;	/* 0x8020 - PEX PME & message detect register */ +	uint    pme_msg_int_en;	/* 0x8024 - PEX PME & message interrupt enable register */ +	uint    pme_msg_dis;	/* 0x8028 - PEX PME & message disable register */ +	uint    pm_command;	/* 0x802c - PEX PM Command register */ +	char	res3[3016]; +	uint    block_rev1;	/* 0x8bf8 - PEX Block Revision register 1 */ +	uint    block_rev2;	/* 0x8bfc - PEX Block Revision register 2 */ +	uint	potar0;	        /* 0x8c00 - PEX Outbound Transaction Address Register 0 */ +	uint	potear0;	/* 0x8c04 - PEX Outbound Translation Extended Address Register 0 */ +	char	res4[8]; +	uint	powar0;	        /* 0x8c10 - PEX Outbound Window Attributes Register 0 */ +	char	res5[12]; +	uint	potar1;	        /* 0x8c20 - PEX Outbound Transaction Address Register 1 */ +	uint	potear1;	/* 0x8c24 - PEX Outbound Translation Extended Address Register 1 */ +	uint	powbar1;	/* 0x8c28 - PEX Outbound Window Base Address Register 1 */ +	char	res6[4]; +	uint	powar1;	        /* 0x8c30 - PEX Outbound Window Attributes Register 1 */ +	char	res7[12]; +	uint	potar2;	        /* 0x8c40 - PEX Outbound Transaction Address Register 2 */ +	uint	potear2;	/* 0x8c44 - PEX Outbound Translation Extended Address Register 2 */ +	uint	powbar2;	/* 0x8c48 - PEX Outbound Window Base Address Register 2 */ +	char	res8[4]; +	uint	powar2;	        /* 0x8c50 - PEX Outbound Window Attributes Register 2 */ +	char	res9[12]; +	uint	potar3;	        /* 0x8c60 - PEX Outbound Transaction Address Register 3 */ +	uint	potear3;	/* 0x8c64 - PEX Outbound Translation Extended Address Register 3 */ +	uint	powbar3;	/* 0x8c68 - PEX Outbound Window Base Address Register 3 */ +	char	res10[4]; +	uint	powar3;	        /* 0x8c70 - PEX Outbound Window Attributes Register 3 */ +	char	res11[12]; +	uint	potar4;	        /* 0x8c80 - PEX Outbound Transaction Address Register 4 */ +	uint	potear4;	/* 0x8c84 - PEX Outbound Translation Extended Address Register 4 */ +	uint	powbar4;	/* 0x8c88 - PEX Outbound Window Base Address Register 4 */ +	char	res12[4]; +	uint	powar4;	        /* 0x8c90 - PEX Outbound Window Attributes Register 4 */ +	char	res13[12]; +	char	res14[256]; +	uint	pitar3;	        /* 0x8da0 - PEX Inbound Translation Address Register 3  */ +	char	res15[4]; +	uint	piwbar3;	/* 0x8da8 - PEX Inbound Window Base Address Register 3 */ +	uint	piwbear3;	/* 0x8dac - PEX Inbound Window Base Extended Address Register 3 */ +	uint	piwar3;	        /* 0x8db0 - PEX Inbound Window Attributes Register 3 */ +	char	res16[12]; +	uint	pitar2;	        /* 0x8dc0 - PEX Inbound Translation Address Register 2  */ +	char	res17[4]; +	uint	piwbar2;	/* 0x8dc8 - PEX Inbound Window Base Address Register 2 */ +	uint	piwbear2;	/* 0x8dcc - PEX Inbound Window Base Extended Address Register 2 */ +	uint	piwar2;	        /* 0x8dd0 - PEX Inbound Window Attributes Register 2 */ +	char	res18[12]; +	uint	pitar1;	        /* 0x8de0 - PEX Inbound Translation Address Register 1  */ +	char	res19[4]; +	uint	piwbar1;	/* 0x8de8 - PEX Inbound Window Base Address Register 1 */ +	uint	piwbear1; +	uint	piwar1;	        /* 0x8df0 - PEX Inbound Window Attributes Register 1 */ +	char	res20[12]; +	uint	pedr;		/* 0x8e00 - PEX Error Detect Register */ +	char    res21[4]; +	uint	peer;		/* 0x8e08 - PEX Error Interrupt Enable Register */ +	char    res22[4]; +	uint	pecdr;		/* 0x8e10 - PEX Error Disable Register */ +	char    res23[12]; +	uint	peer_stat;	/* 0x8e20 - PEX Error Capture Status Register */ +	char    res24[4]; +	uint	perr_cap0;	/* 0x8e28 - PEX Error Capture Register 0 */ +	uint	perr_cap1;	/* 0x8e2c - PEX Error Capture Register 1 */ +	uint	perr_cap2;	/* 0x8e30 - PEX Error Capture Register 2 */ +	uint	perr_cap3;	/* 0x8e34 - PEX Error Capture Register 3 */ +	char	res25[452]; +	char    res26[4]; +} ccsr_pex_t; + +/* Hyper Transport Register Block (0xA000-0xB000) */ +typedef struct ccsr_ht { +	uint    hcfg_addr;      /* 0xa000 - HT Configuration Address register */ +	uint    hcfg_data;      /* 0xa004 - HT Configuration Data register */ +	char	res1[3064]; +	uint    howtar0;        /* 0xac00 - HT Outbound Window 0 Translation register */ +	char	res2[12]; +	uint    howar0;         /* 0xac10 - HT Outbound Window 0 Attributes register */ +	char	res3[12]; +	uint    howtar1;        /* 0xac20 - HT Outbound Window 1 Translation register */ +	char	res4[4]; +	uint    howbar1;        /* 0xac28 - HT Outbound Window 1 Base Address register */ +	char	res5[4]; +	uint    howar1;         /* 0xac30 - HT Outbound Window 1 Attributes register */ +	char	res6[12]; +	uint    howtar2;        /* 0xac40 - HT Outbound Window 2 Translation register */ +	char	res7[4]; +	uint    howbar2;        /* 0xac48 - HT Outbound Window 2 Base Address register */ +	char	res8[4]; +	uint    howar2;         /* 0xac50 - HT Outbound Window 2 Attributes register */ +	char	res9[12]; +	uint    howtar3;        /* 0xac60 - HT Outbound Window 3 Translation register */ +	char	res10[4]; +	uint    howbar3;        /* 0xac68 - HT Outbound Window 3 Base Address register */ +	char	res11[4]; +	uint    howar3;         /* 0xac70 - HT Outbound Window 3 Attributes  register */ +	char	res12[12]; +	uint    howtar4;        /* 0xac80 - HT Outbound Window 4 Translation register */ +	char	res13[4]; +	uint    howbar4;        /* 0xac88 - HT Outbound Window 4 Base Address register */ +	char	res14[4]; +	uint    howar4;         /* 0xac90 - HT Outbound Window 4 Attributes register */ +	char	res15[236]; +	uint    hiwtar4;        /* 0xad80 - HT Inbound Window 4 Translation register */ +	char	res16[4]; +	uint    hiwbar4;        /* 0xad88 - HT Inbound Window 4 Base Address register */ +	char	res17[4]; +	uint    hiwar4;         /* 0xad90 - HT Inbound Window 4 Attributes register */ +	char	res18[12]; +	uint    hiwtar3;        /* 0xada0 - HT Inbound Window 3 Translation register */ +	char	res19[4]; +	uint    hiwbar3;        /* 0xada8 - HT Inbound Window 3 Base Address register */ +	char	res20[4]; +	uint    hiwar3;         /* 0xadb0 - HT Inbound Window 3 Attributes register */ +	char	res21[12]; +	uint    hiwtar2;        /* 0xadc0 - HT Inbound Window 2 Translation register */ +	char	res22[4]; +	uint    hiwbar2;        /* 0xadc8 - HT Inbound Window 2 Base Address register */ +	char	res23[4]; +	uint    hiwar2;         /* 0xadd0 - HT Inbound Window 2 Attributes register */ +	char	res24[12]; +	uint    hiwtar1;        /* 0xade0 - HT Inbound Window 1 Translation register */ +	char	res25[4]; +	uint    hiwbar1;        /* 0xade8 - HT Inbound Window 1 Base Address register */ +	char	res26[4]; +	uint    hiwar1;         /* 0xadf0 - HT Inbound Window 1 Attributes register */ +	char	res27[12]; +	uint    hedr;           /* 0xae00 - HT Error Detect register */ +	char	res28[4]; +	uint    heier;          /* 0xae08 - HT Error Interrupt Enable register */ +	char	res29[4]; +	uint    hecdr;          /* 0xae10 - HT Error Capture Disbale register */ +	char	res30[12]; +	uint    hecsr;          /* 0xae20 - HT Error Capture Status register */ +	char	res31[4]; +	uint    hec0;           /* 0xae28 - HT Error Capture 0 register */ +	uint    hec1;           /* 0xae2c - HT Error Capture 1 register */ +	uint    hec2;           /* 0xae30 - HT Error Capture 2 register */ +	char    res32[460]; +} ccsr_ht_t; + +/* DMA Registers(0x2_1000-0x2_2000) */ +typedef struct ccsr_dma { +	char	res1[256]; +	struct fsl_dma dma[4]; +	uint	dgsr;		/* 0x21300 - DMA General Status Register */ +	char	res2[3324]; +} ccsr_dma_t; + +/* tsec1-4: 24000-28000 */ +typedef struct ccsr_tsec { +	uint    id;		/* 0x24000 - Controller ID Register */ +	char	res1[12]; +	uint	ievent;		/* 0x24010 - Interrupt Event Register */ +	uint	imask;		/* 0x24014 - Interrupt Mask Register */ +	uint	edis;		/* 0x24018 - Error Disabled Register */ +	char	res2[4]; +	uint	ecntrl;		/* 0x24020 - Ethernet Control Register */ +	char    res2_1[4]; +	uint	ptv;		/* 0x24028 - Pause Time Value Register */ +	uint	dmactrl;	/* 0x2402c - DMA Control Register */ +	uint	tbipa;		/* 0x24030 - TBI PHY Address Register */ +	char	res3[88]; +	uint	fifo_tx_thr;	/* 0x2408c - FIFO transmit threshold register */ +	char	res4[8]; +	uint	fifo_tx_starve;	/* 0x24098 - FIFO transmit starve register */ +	uint	fifo_tx_starve_shutoff;/* 0x2409c - FIFO transmit starve shutoff register */ +	char    res4_1[4]; +	uint    fifo_rx_pause;  /* 0x240a4 - FIFO receive pause threshold register */ +	uint    fifo_rx_alarm;  /* 0x240a8 - FIFO receive alarm threshold register */ +	char	res5[84]; +	uint	tctrl;		/* 0x24100 - Transmit Control Register */ +	uint	tstat;		/* 0x24104 - Transmit Status Register */ +	uint    dfvlan;		/* 0x24108 - Default VLAN control word */ +	char    res6[4]; +	uint    txic;		/* 0x24110 - Transmit interrupt coalescing Register */ +	uint    tqueue;         /* 0x24114 - Transmit Queue Control Register */ +	char	res7[40]; +	uint    tr03wt;         /* 0x24140 - TxBD Rings 0-3 round-robin weightings */ +	uint    tw47wt;         /* 0x24144 - TxBD Rings 4-7 round-robin weightings */ +	char    res8[52]; +	uint	tbdbph;	        /* 0x2417c - Transmit Data Buffer Pointer High Register */ +	char    res9[4]; +	uint    tbptr0;         /* 0x24184 - Transmit Buffer Descriptor Pointer for Ring 0 */ +	char    res10[4]; +	uint    tbptr1;         /* 0x2418C - Transmit Buffer Descriptor Pointer for Ring 1 */ +	char    res11[4]; +	uint    tbptr2;         /* 0x24194 - Transmit Buffer Descriptor Pointer for Ring 2 */ +	char    res12[4]; +	uint    tbptr3;         /* 0x2419C - Transmit Buffer Descriptor Pointer for Ring 3 */ +	char    res13[4]; +	uint    tbptr4;         /* 0x241A4 - Transmit Buffer Descriptor Pointer for Ring 4 */ +	char    res14[4]; +	uint    tbptr5;         /* 0x241AC - Transmit Buffer Descriptor Pointer for Ring 5 */ +	char    res15[4]; +	uint    tbptr6;         /* 0x241B4 - Transmit Buffer Descriptor Pointer for Ring 6 */ +	char    res16[4]; +	uint    tbptr7;         /* 0x241BC - Transmit Buffer Descriptor Pointer for Ring 7 */ +	char    res17[64]; +	uint	tbaseh;		/* 0x24200 - Transmit Descriptor Base Address High Register */ +	uint	tbase0;		/* 0x24204 - Transmit Descriptor Base Address Register of Ring 0 */ +	char    res18[4]; +	uint    tbase1;         /* 0x2420C - Transmit Descriptor base address of Ring 1 */ +	char    res19[4]; +	uint    tbase2;         /* 0x24214 - Transmit Descriptor base address of Ring 2 */ +	char    res20[4]; +	uint    tbase3;         /* 0x2421C - Transmit Descriptor base address of Ring 3 */ +	char    res21[4]; +	uint    tbase4;         /* 0x24224 - Transmit Descriptor base address of Ring 4 */ +	char    res22[4]; +	uint    tbase5;         /* 0x2422C - Transmit Descriptor base address of Ring 5 */ +	char    res23[4]; +	uint    tbase6;         /* 0x24234 - Transmit Descriptor base address of Ring 6 */ +	char    res24[4]; +	uint    tbase7;         /* 0x2423C - Transmit Descriptor base address of Ring 7 */ +	char    res25[192]; +	uint	rctrl;		/* 0x24300 - Receive Control Register */ +	uint	rstat;		/* 0x24304 - Receive Status Register */ +	char	res26[8]; +	uint    rxic;           /* 0x24310 - Receive Interrupt Coalecing Register */ +	uint    rqueue;         /* 0x24314 - Receive queue control register */ +	char	res27[24]; +	uint    rbifx;		/* 0x24330 - Receive bit field extract control Register */ +	uint    rqfar;		/* 0x24334 - Receive queue filing table address Register */ +	uint    rqfcr;		/* 0x24338 - Receive queue filing table control Register */ +	uint    rqfpr;		/* 0x2433c - Receive queue filing table property Register */ +	uint	mrblr;		/* 0x24340 - Maximum Receive Buffer Length Register */ +	char	res28[56]; +	uint    rbdbph;		/* 0x2437C - Receive Data Buffer Pointer High */ +	char    res29[4]; +	uint	rbptr0;		/* 0x24384 - Receive Buffer Descriptor Pointer for Ring 0 */ +	char    res30[4]; +	uint	rbptr1;		/* 0x2438C - Receive Buffer Descriptor Pointer for Ring 1 */ +	char    res31[4]; +	uint	rbptr2;		/* 0x24394 - Receive Buffer Descriptor Pointer for Ring 2 */ +	char    res32[4]; +	uint	rbptr3;		/* 0x2439C - Receive Buffer Descriptor Pointer for Ring 3 */ +	char    res33[4]; +	uint	rbptr4;		/* 0x243A4 - Receive Buffer Descriptor Pointer for Ring 4 */ +	char    res34[4]; +	uint	rbptr5;		/* 0x243AC - Receive Buffer Descriptor Pointer for Ring 5 */ +	char    res35[4]; +	uint	rbptr6;		/* 0x243B4 - Receive Buffer Descriptor Pointer for Ring 6 */ +	char    res36[4]; +	uint	rbptr7;		/* 0x243BC - Receive Buffer Descriptor Pointer for Ring 7 */ +	char    res37[64]; +	uint	rbaseh;		/* 0x24400 - Receive Descriptor Base Address High 0 */ +	uint	rbase0;		/* 0x24404 - Receive Descriptor Base Address of Ring 0 */ +	char    res38[4]; +	uint	rbase1;		/* 0x2440C - Receive Descriptor Base Address of Ring 1 */ +	char    res39[4]; +	uint	rbase2;		/* 0x24414 - Receive Descriptor Base Address of Ring 2 */ +	char    res40[4]; +	uint	rbase3;		/* 0x2441C - Receive Descriptor Base Address of Ring 3 */ +	char    res41[4]; +	uint	rbase4;		/* 0x24424 - Receive Descriptor Base Address of Ring 4 */ +	char    res42[4]; +	uint	rbase5;		/* 0x2442C - Receive Descriptor Base Address of Ring 5 */ +	char    res43[4]; +	uint	rbase6;		/* 0x24434 - Receive Descriptor Base Address of Ring 6 */ +	char    res44[4]; +	uint	rbase7;		/* 0x2443C - Receive Descriptor Base Address of Ring 7 */ +	char    res45[192]; +	uint	maccfg1;	/* 0x24500 - MAC Configuration 1 Register */ +	uint	maccfg2;	/* 0x24504 - MAC Configuration 2 Register */ +	uint	ipgifg;		/* 0x24508 - Inter Packet Gap/Inter Frame Gap Register */ +	uint	hafdup;		/* 0x2450c - Half Duplex Register */ +	uint	maxfrm;		/* 0x24510 - Maximum Frame Length Register */ +	char	res46[12]; +	uint	miimcfg;	/* 0x24520 - MII Management Configuration Register */ +	uint	miimcom;	/* 0x24524 - MII Management Command Register */ +	uint	miimadd;	/* 0x24528 - MII Management Address Register */ +	uint	miimcon;	/* 0x2452c - MII Management Control Register */ +	uint	miimstat;	/* 0x24530 - MII Management Status Register */ +	uint	miimind;	/* 0x24534 - MII Management Indicator Register */ +	uint    ifctrl;		/* 0x24538 - Interface Contrl Register */ +	uint	ifstat;		/* 0x2453c - Interface Status Register */ +	uint	macstnaddr1;	/* 0x24540 - Station Address Part 1 Register */ +	uint	macstnaddr2;	/* 0x24544 - Station Address Part 2 Register */ +	uint    mac01addr1;     /* 0x24548 - MAC exact match address 1, part 1 */ +	uint    mac01addr2;     /* 0x2454C - MAC exact match address 1, part 2 */ +	uint    mac02addr1;     /* 0x24550 - MAC exact match address 2, part 1 */ +	uint    mac02addr2;     /* 0x24554 - MAC exact match address 2, part 2 */ +	uint    mac03addr1;     /* 0x24558 - MAC exact match address 3, part 1 */ +	uint    mac03addr2;     /* 0x2455C - MAC exact match address 3, part 2 */ +	uint    mac04addr1;     /* 0x24560 - MAC exact match address 4, part 1 */ +	uint    mac04addr2;     /* 0x24564 - MAC exact match address 4, part 2 */ +	uint    mac05addr1;     /* 0x24568 - MAC exact match address 5, part 1 */ +	uint    mac05addr2;     /* 0x2456C - MAC exact match address 5, part 2 */ +	uint    mac06addr1;     /* 0x24570 - MAC exact match address 6, part 1 */ +	uint    mac06addr2;     /* 0x24574 - MAC exact match address 6, part 2 */ +	uint    mac07addr1;     /* 0x24578 - MAC exact match address 7, part 1 */ +	uint    mac07addr2;     /* 0x2457C - MAC exact match address 7, part 2 */ +	uint    mac08addr1;     /* 0x24580 - MAC exact match address 8, part 1 */ +	uint    mac08addr2;     /* 0x24584 - MAC exact match address 8, part 2 */ +	uint    mac09addr1;     /* 0x24588 - MAC exact match address 9, part 1 */ +	uint    mac09addr2;     /* 0x2458C - MAC exact match address 9, part 2 */ +	uint    mac10addr1;     /* 0x24590 - MAC exact match address 10, part 1 */ +	uint    mac10addr2;     /* 0x24594 - MAC exact match address 10, part 2 */ +	uint    mac11addr1;     /* 0x24598 - MAC exact match address 11, part 1 */ +	uint    mac11addr2;     /* 0x2459C - MAC exact match address 11, part 2 */ +	uint    mac12addr1;     /* 0x245A0 - MAC exact match address 12, part 1 */ +	uint    mac12addr2;     /* 0x245A4 - MAC exact match address 12, part 2 */ +	uint    mac13addr1;     /* 0x245A8 - MAC exact match address 13, part 1 */ +	uint    mac13addr2;     /* 0x245AC - MAC exact match address 13, part 2 */ +	uint    mac14addr1;     /* 0x245B0 - MAC exact match address 14, part 1 */ +	uint    mac14addr2;     /* 0x245B4 - MAC exact match address 14, part 2 */ +	uint    mac15addr1;     /* 0x245B8 - MAC exact match address 15, part 1 */ +	uint    mac15addr2;     /* 0x245BC - MAC exact match address 15, part 2 */ +	char	res48[192]; +	uint	tr64;		/* 0x24680 - Transmit and Receive 64-byte Frame Counter */ +	uint	tr127;		/* 0x24684 - Transmit and Receive 65-127 byte Frame Counter */ +	uint	tr255;		/* 0x24688 - Transmit and Receive 128-255 byte Frame Counter */ +	uint	tr511;		/* 0x2468c - Transmit and Receive 256-511 byte Frame Counter */ +	uint	tr1k;		/* 0x24690 - Transmit and Receive 512-1023 byte Frame Counter */ +	uint	trmax;		/* 0x24694 - Transmit and Receive 1024-1518 byte Frame Counter */ +	uint	trmgv;		/* 0x24698 - Transmit and Receive 1519-1522 byte Good VLAN Frame */ +	uint	rbyt;		/* 0x2469c - Receive Byte Counter */ +	uint	rpkt;		/* 0x246a0 - Receive Packet Counter */ +	uint	rfcs;		/* 0x246a4 - Receive FCS Error Counter */ +	uint	rmca;		/* 0x246a8 - Receive Multicast Packet Counter */ +	uint	rbca;		/* 0x246ac - Receive Broadcast Packet Counter */ +	uint	rxcf;		/* 0x246b0 - Receive Control Frame Packet Counter */ +	uint	rxpf;		/* 0x246b4 - Receive Pause Frame Packet Counter */ +	uint	rxuo;		/* 0x246b8 - Receive Unknown OP Code Counter */ +	uint	raln;		/* 0x246bc - Receive Alignment Error Counter */ +	uint	rflr;		/* 0x246c0 - Receive Frame Length Error Counter */ +	uint	rcde;		/* 0x246c4 - Receive Code Error Counter */ +	uint	rcse;		/* 0x246c8 - Receive Carrier Sense Error Counter */ +	uint	rund;		/* 0x246cc - Receive Undersize Packet Counter */ +	uint	rovr;		/* 0x246d0 - Receive Oversize Packet Counter */ +	uint	rfrg;		/* 0x246d4 - Receive Fragments Counter */ +	uint	rjbr;		/* 0x246d8 - Receive Jabber Counter */ +	uint	rdrp;		/* 0x246dc - Receive Drop Counter */ +	uint	tbyt;		/* 0x246e0 - Transmit Byte Counter Counter */ +	uint	tpkt;		/* 0x246e4 - Transmit Packet Counter */ +	uint	tmca;		/* 0x246e8 - Transmit Multicast Packet Counter */ +	uint	tbca;		/* 0x246ec - Transmit Broadcast Packet Counter */ +	uint	txpf;		/* 0x246f0 - Transmit Pause Control Frame Counter */ +	uint	tdfr;		/* 0x246f4 - Transmit Deferral Packet Counter */ +	uint	tedf;		/* 0x246f8 - Transmit Excessive Deferral Packet Counter */ +	uint	tscl;		/* 0x246fc - Transmit Single Collision Packet Counter */ +	uint	tmcl;		/* 0x24700 - Transmit Multiple Collision Packet Counter */ +	uint	tlcl;		/* 0x24704 - Transmit Late Collision Packet Counter */ +	uint	txcl;		/* 0x24708 - Transmit Excessive Collision Packet Counter */ +	uint	tncl;		/* 0x2470c - Transmit Total Collision Counter */ +	char	res49[4]; +	uint	tdrp;		/* 0x24714 - Transmit Drop Frame Counter */ +	uint	tjbr;		/* 0x24718 - Transmit Jabber Frame Counter */ +	uint	tfcs;		/* 0x2471c - Transmit FCS Error Counter */ +	uint	txcf;		/* 0x24720 - Transmit Control Frame Counter */ +	uint	tovr;		/* 0x24724 - Transmit Oversize Frame Counter */ +	uint	tund;		/* 0x24728 - Transmit Undersize Frame Counter */ +	uint	tfrg;		/* 0x2472c - Transmit Fragments Frame Counter */ +	uint	car1;		/* 0x24730 - Carry Register One */ +	uint	car2;		/* 0x24734 - Carry Register Two */ +	uint	cam1;		/* 0x24738 - Carry Mask Register One */ +	uint	cam2;		/* 0x2473c - Carry Mask Register Two */ +	uint    rrej;	        /* 0x24740 - Receive filer rejected packet counter */ +	char	res50[188]; +	uint	iaddr0;		/* 0x24800 - Indivdual address register 0 */ +	uint	iaddr1;		/* 0x24804 - Indivdual address register 1 */ +	uint	iaddr2;		/* 0x24808 - Indivdual address register 2 */ +	uint	iaddr3;		/* 0x2480c - Indivdual address register 3 */ +	uint	iaddr4;		/* 0x24810 - Indivdual address register 4 */ +	uint	iaddr5;		/* 0x24814 - Indivdual address register 5 */ +	uint	iaddr6;		/* 0x24818 - Indivdual address register 6 */ +	uint	iaddr7;		/* 0x2481c - Indivdual address register 7 */ +	char	res51[96]; +	uint	gaddr0;		/* 0x24880 - Global address register 0 */ +	uint	gaddr1;		/* 0x24884 - Global address register 1 */ +	uint	gaddr2;		/* 0x24888 - Global address register 2 */ +	uint	gaddr3;		/* 0x2488c - Global address register 3 */ +	uint	gaddr4;		/* 0x24890 - Global address register 4 */ +	uint	gaddr5;		/* 0x24894 - Global address register 5 */ +	uint	gaddr6;		/* 0x24898 - Global address register 6 */ +	uint	gaddr7;		/* 0x2489c - Global address register 7 */ +	char	res52[352]; +	uint    fifocfg;        /* 0x24A00 - FIFO interface configuration register */ +	char    res53[500]; +	uint    attr;           /* 0x24BF8 - DMA Attribute register */ +	uint    attreli;        /* 0x24BFC - DMA Attribute extract length and index register */ +	char    res54[1024]; +} ccsr_tsec_t; + +/* PIC Registers(0x4_0000-0x6_1000) */ + +typedef struct ccsr_pic { +	char	res1[64]; +	uint	ipidr0;		/* 0x40040 - Interprocessor Interrupt Dispatch Register 0 */ +	char	res2[12]; +	uint	ipidr1;		/* 0x40050 - Interprocessor Interrupt Dispatch Register 1 */ +	char	res3[12]; +	uint	ipidr2;		/* 0x40060 - Interprocessor Interrupt Dispatch Register 2 */ +	char	res4[12]; +	uint	ipidr3;		/* 0x40070 - Interprocessor Interrupt Dispatch Register 3 */ +	char	res5[12]; +	uint	ctpr;		/* 0x40080 - Current Task Priority Register */ +	char	res6[12]; +	uint	whoami;		/* 0x40090 - Who Am I Register */ +	char	res7[12]; +	uint	iack;		/* 0x400a0 - Interrupt Acknowledge Register */ +	char	res8[12]; +	uint	eoi;		/* 0x400b0 - End Of Interrupt Register */ +	char	res9[3916]; +	uint	frr;		/* 0x41000 - Feature Reporting Register */ +	char	res10[28]; +	uint	gcr;		/* 0x41020 - Global Configuration Register */ +#define MPC86xx_PICGCR_RST	0x80000000 +#define MPC86xx_PICGCR_MODE	0x20000000 +	char	res11[92]; +	uint	vir;		/* 0x41080 - Vendor Identification Register */ +	char	res12[12]; +	uint	pir;		/* 0x41090 - Processor Initialization Register */ +	char	res13[12]; +	uint	ipivpr0;	/* 0x410a0 - IPI Vector/Priority Register 0 */ +	char	res14[12]; +	uint	ipivpr1;	/* 0x410b0 - IPI Vector/Priority Register 1 */ +	char	res15[12]; +	uint	ipivpr2;	/* 0x410c0 - IPI Vector/Priority Register 2 */ +	char	res16[12]; +	uint	ipivpr3;	/* 0x410d0 - IPI Vector/Priority Register 3 */ +	char	res17[12]; +	uint	svr;		/* 0x410e0 - Spurious Vector Register */ +	char	res18[12]; +	uint	tfrr;		/* 0x410f0 - Timer Frequency Reporting Register */ +	char	res19[12]; +	uint	gtccr0;		/* 0x41100 - Global Timer Current Count Register 0 */ +	char	res20[12]; +	uint	gtbcr0;		/* 0x41110 - Global Timer Base Count Register 0 */ +	char	res21[12]; +	uint	gtvpr0;		/* 0x41120 - Global Timer Vector/Priority Register 0 */ +	char	res22[12]; +	uint	gtdr0;		/* 0x41130 - Global Timer Destination Register 0 */ +	char	res23[12]; +	uint	gtccr1;		/* 0x41140 - Global Timer Current Count Register 1 */ +	char	res24[12]; +	uint	gtbcr1;		/* 0x41150 - Global Timer Base Count Register 1 */ +	char	res25[12]; +	uint	gtvpr1;		/* 0x41160 - Global Timer Vector/Priority Register 1 */ +	char	res26[12]; +	uint	gtdr1;		/* 0x41170 - Global Timer Destination Register 1 */ +	char	res27[12]; +	uint	gtccr2;		/* 0x41180 - Global Timer Current Count Register 2 */ +	char	res28[12]; +	uint	gtbcr2;		/* 0x41190 - Global Timer Base Count Register 2 */ +	char	res29[12]; +	uint	gtvpr2;		/* 0x411a0 - Global Timer Vector/Priority Register 2 */ +	char	res30[12]; +	uint	gtdr2;		/* 0x411b0 - Global Timer Destination Register 2 */ +	char	res31[12]; +	uint	gtccr3;		/* 0x411c0 - Global Timer Current Count Register 3 */ +	char	res32[12]; +	uint	gtbcr3;		/* 0x411d0 - Global Timer Base Count Register 3 */ +	char	res33[12]; +	uint	gtvpr3;		/* 0x411e0 - Global Timer Vector/Priority Register 3 */ +	char	res34[12]; +	uint	gtdr3;		/* 0x411f0 - Global Timer Destination Register 3 */ +	char	res35[268]; +	uint	tcr;		/* 0x41300 - Timer Control Register */ +	char	res36[12]; +	uint	irqsr0;		/* 0x41310 - IRQ_OUT Summary Register 0 */ +	char	res37[12]; +	uint	irqsr1;		/* 0x41320 - IRQ_OUT Summary Register 1 */ +	char	res38[12]; +	uint	cisr0;		/* 0x41330 - Critical Interrupt Summary Register 0 */ +	char	res39[12]; +	uint	cisr1;		/* 0x41340 - Critical Interrupt Summary Register 1 */ +	char	res40[12]; +	uint	pm0mr0;		/* 0x41350 - Performance monitor 0 mask register 0  */ +	char	res41[12]; +	uint	pm0mr1;		/* 0x41360 - Performance monitor 0 mask register 1  */ +	char	res42[12]; +	uint	pm1mr0;		/* 0x41370 - Performance monitor 1 mask register 0  */ +	char	res43[12]; +	uint	pm1mr1;		/* 0x41380 - Performance monitor 1 mask register 1  */ +	char	res44[12]; +	uint	pm2mr0;		/* 0x41390 - Performance monitor 2 mask register 0  */ +	char	res45[12]; +	uint	pm2mr1;		/* 0x413A0 - Performance monitor 2 mask register 1  */ +	char	res46[12]; +	uint	pm3mr0;		/* 0x413B0 - Performance monitor 3 mask register 0  */ +	char	res47[12]; +	uint	pm3mr1;		/* 0x413C0 - Performance monitor 3 mask register 1  */ +	char	res48[60]; +	uint	msgr0;		/* 0x41400 - Message Register 0 */ +	char	res49[12]; +	uint	msgr1;		/* 0x41410 - Message Register 1 */ +	char	res50[12]; +	uint	msgr2;		/* 0x41420 - Message Register 2 */ +	char	res51[12]; +	uint	msgr3;		/* 0x41430 - Message Register 3 */ +	char	res52[204]; +	uint	mer;		/* 0x41500 - Message Enable Register */ +	char	res53[12]; +	uint	msr;		/* 0x41510 - Message Status Register */ +	char	res54[60140]; +	uint	eivpr0;		/* 0x50000 - External Interrupt Vector/Priority Register 0 */ +	char	res55[12]; +	uint	eidr0;		/* 0x50010 - External Interrupt Destination Register 0 */ +	char	res56[12]; +	uint	eivpr1;		/* 0x50020 - External Interrupt Vector/Priority Register 1 */ +	char	res57[12]; +	uint	eidr1;		/* 0x50030 - External Interrupt Destination Register 1 */ +	char	res58[12]; +	uint	eivpr2;		/* 0x50040 - External Interrupt Vector/Priority Register 2 */ +	char	res59[12]; +	uint	eidr2;		/* 0x50050 - External Interrupt Destination Register 2 */ +	char	res60[12]; +	uint	eivpr3;		/* 0x50060 - External Interrupt Vector/Priority Register 3 */ +	char	res61[12]; +	uint	eidr3;		/* 0x50070 - External Interrupt Destination Register 3 */ +	char	res62[12]; +	uint	eivpr4;		/* 0x50080 - External Interrupt Vector/Priority Register 4 */ +	char	res63[12]; +	uint	eidr4;		/* 0x50090 - External Interrupt Destination Register 4 */ +	char	res64[12]; +	uint	eivpr5;		/* 0x500a0 - External Interrupt Vector/Priority Register 5 */ +	char	res65[12]; +	uint	eidr5;		/* 0x500b0 - External Interrupt Destination Register 5 */ +	char	res66[12]; +	uint	eivpr6;		/* 0x500c0 - External Interrupt Vector/Priority Register 6 */ +	char	res67[12]; +	uint	eidr6;		/* 0x500d0 - External Interrupt Destination Register 6 */ +	char	res68[12]; +	uint	eivpr7;		/* 0x500e0 - External Interrupt Vector/Priority Register 7 */ +	char	res69[12]; +	uint	eidr7;		/* 0x500f0 - External Interrupt Destination Register 7 */ +	char	res70[12]; +	uint	eivpr8;		/* 0x50100 - External Interrupt Vector/Priority Register 8 */ +	char	res71[12]; +	uint	eidr8;		/* 0x50110 - External Interrupt Destination Register 8 */ +	char	res72[12]; +	uint	eivpr9;		/* 0x50120 - External Interrupt Vector/Priority Register 9 */ +	char	res73[12]; +	uint	eidr9;		/* 0x50130 - External Interrupt Destination Register 9 */ +	char	res74[12]; +	uint	eivpr10;	/* 0x50140 - External Interrupt Vector/Priority Register 10 */ +	char	res75[12]; +	uint	eidr10;		/* 0x50150 - External Interrupt Destination Register 10 */ +	char	res76[12]; +	uint	eivpr11;	/* 0x50160 - External Interrupt Vector/Priority Register 11 */ +	char	res77[12]; +	uint	eidr11;		/* 0x50170 - External Interrupt Destination Register 11 */ +	char	res78[140]; +	uint	iivpr0;		/* 0x50200 - Internal Interrupt Vector/Priority Register 0 */ +	char	res79[12]; +	uint	iidr0;		/* 0x50210 - Internal Interrupt Destination Register 0 */ +	char	res80[12]; +	uint	iivpr1;		/* 0x50220 - Internal Interrupt Vector/Priority Register 1 */ +	char	res81[12]; +	uint	iidr1;		/* 0x50230 - Internal Interrupt Destination Register 1 */ +	char	res82[12]; +	uint	iivpr2;		/* 0x50240 - Internal Interrupt Vector/Priority Register 2 */ +	char	res83[12]; +	uint	iidr2;		/* 0x50250 - Internal Interrupt Destination Register 2 */ +	char	res84[12]; +	uint	iivpr3;		/* 0x50260 - Internal Interrupt Vector/Priority Register 3 */ +	char	res85[12]; +	uint	iidr3;		/* 0x50270 - Internal Interrupt Destination Register 3 */ +	char	res86[12]; +	uint	iivpr4;		/* 0x50280 - Internal Interrupt Vector/Priority Register 4 */ +	char	res87[12]; +	uint	iidr4;		/* 0x50290 - Internal Interrupt Destination Register 4 */ +	char	res88[12]; +	uint	iivpr5;		/* 0x502a0 - Internal Interrupt Vector/Priority Register 5 */ +	char	res89[12]; +	uint	iidr5;		/* 0x502b0 - Internal Interrupt Destination Register 5 */ +	char	res90[12]; +	uint	iivpr6;		/* 0x502c0 - Internal Interrupt Vector/Priority Register 6 */ +	char	res91[12]; +	uint	iidr6;		/* 0x502d0 - Internal Interrupt Destination Register 6 */ +	char	res92[12]; +	uint	iivpr7;		/* 0x502e0 - Internal Interrupt Vector/Priority Register 7 */ +	char	res93[12]; +	uint	iidr7;		/* 0x502f0 - Internal Interrupt Destination Register 7 */ +	char	res94[12]; +	uint	iivpr8;		/* 0x50300 - Internal Interrupt Vector/Priority Register 8 */ +	char	res95[12]; +	uint	iidr8;		/* 0x50310 - Internal Interrupt Destination Register 8 */ +	char	res96[12]; +	uint	iivpr9;		/* 0x50320 - Internal Interrupt Vector/Priority Register 9 */ +	char	res97[12]; +	uint	iidr9;		/* 0x50330 - Internal Interrupt Destination Register 9 */ +	char	res98[12]; +	uint	iivpr10;	/* 0x50340 - Internal Interrupt Vector/Priority Register 10 */ +	char	res99[12]; +	uint	iidr10;		/* 0x50350 - Internal Interrupt Destination Register 10 */ +	char	res100[12]; +	uint	iivpr11;	/* 0x50360 - Internal Interrupt Vector/Priority Register 11 */ +	char	res101[12]; +	uint	iidr11;		/* 0x50370 - Internal Interrupt Destination Register 11 */ +	char	res102[12]; +	uint	iivpr12;	/* 0x50380 - Internal Interrupt Vector/Priority Register 12 */ +	char	res103[12]; +	uint	iidr12;		/* 0x50390 - Internal Interrupt Destination Register 12 */ +	char	res104[12]; +	uint	iivpr13;	/* 0x503a0 - Internal Interrupt Vector/Priority Register 13 */ +	char	res105[12]; +	uint	iidr13;		/* 0x503b0 - Internal Interrupt Destination Register 13 */ +	char	res106[12]; +	uint	iivpr14;	/* 0x503c0 - Internal Interrupt Vector/Priority Register 14 */ +	char	res107[12]; +	uint	iidr14;		/* 0x503d0 - Internal Interrupt Destination Register 14 */ +	char	res108[12]; +	uint	iivpr15;	/* 0x503e0 - Internal Interrupt Vector/Priority Register 15 */ +	char	res109[12]; +	uint	iidr15;		/* 0x503f0 - Internal Interrupt Destination Register 15 */ +	char	res110[12]; +	uint	iivpr16;	/* 0x50400 - Internal Interrupt Vector/Priority Register 16 */ +	char	res111[12]; +	uint	iidr16;		/* 0x50410 - Internal Interrupt Destination Register 16 */ +	char	res112[12]; +	uint	iivpr17;	/* 0x50420 - Internal Interrupt Vector/Priority Register 17 */ +	char	res113[12]; +	uint	iidr17;		/* 0x50430 - Internal Interrupt Destination Register 17 */ +	char	res114[12]; +	uint	iivpr18;	/* 0x50440 - Internal Interrupt Vector/Priority Register 18 */ +	char	res115[12]; +	uint	iidr18;		/* 0x50450 - Internal Interrupt Destination Register 18 */ +	char	res116[12]; +	uint	iivpr19;	/* 0x50460 - Internal Interrupt Vector/Priority Register 19 */ +	char	res117[12]; +	uint	iidr19;		/* 0x50470 - Internal Interrupt Destination Register 19 */ +	char	res118[12]; +	uint	iivpr20;	/* 0x50480 - Internal Interrupt Vector/Priority Register 20 */ +	char	res119[12]; +	uint	iidr20;		/* 0x50490 - Internal Interrupt Destination Register 20 */ +	char	res120[12]; +	uint	iivpr21;	/* 0x504a0 - Internal Interrupt Vector/Priority Register 21 */ +	char	res121[12]; +	uint	iidr21;		/* 0x504b0 - Internal Interrupt Destination Register 21 */ +	char	res122[12]; +	uint	iivpr22;	/* 0x504c0 - Internal Interrupt Vector/Priority Register 22 */ +	char	res123[12]; +	uint	iidr22;		/* 0x504d0 - Internal Interrupt Destination Register 22 */ +	char	res124[12]; +	uint	iivpr23;	/* 0x504e0 - Internal Interrupt Vector/Priority Register 23 */ +	char	res125[12]; +	uint	iidr23;		/* 0x504f0 - Internal Interrupt Destination Register 23 */ +	char	res126[12]; +	uint	iivpr24;	/* 0x50500 - Internal Interrupt Vector/Priority Register 24 */ +	char	res127[12]; +	uint	iidr24;		/* 0x50510 - Internal Interrupt Destination Register 24 */ +	char	res128[12]; +	uint	iivpr25;	/* 0x50520 - Internal Interrupt Vector/Priority Register 25 */ +	char	res129[12]; +	uint	iidr25;		/* 0x50530 - Internal Interrupt Destination Register 25 */ +	char	res130[12]; +	uint	iivpr26;	/* 0x50540 - Internal Interrupt Vector/Priority Register 26 */ +	char	res131[12]; +	uint	iidr26;		/* 0x50550 - Internal Interrupt Destination Register 26 */ +	char	res132[12]; +	uint	iivpr27;	/* 0x50560 - Internal Interrupt Vector/Priority Register 27 */ +	char	res133[12]; +	uint	iidr27;		/* 0x50570 - Internal Interrupt Destination Register 27 */ +	char	res134[12]; +	uint	iivpr28;	/* 0x50580 - Internal Interrupt Vector/Priority Register 28 */ +	char	res135[12]; +	uint	iidr28;		/* 0x50590 - Internal Interrupt Destination Register 28 */ +	char	res136[12]; +	uint	iivpr29;	/* 0x505a0 - Internal Interrupt Vector/Priority Register 29 */ +	char	res137[12]; +	uint	iidr29;		/* 0x505b0 - Internal Interrupt Destination Register 29 */ +	char	res138[12]; +	uint	iivpr30;	/* 0x505c0 - Internal Interrupt Vector/Priority Register 30 */ +	char	res139[12]; +	uint	iidr30;		/* 0x505d0 - Internal Interrupt Destination Register 30 */ +	char	res140[12]; +	uint	iivpr31;	/* 0x505e0 - Internal Interrupt Vector/Priority Register 31 */ +	char	res141[12]; +	uint	iidr31;		/* 0x505f0 - Internal Interrupt Destination Register 31 */ +	char	res142[4108]; +	uint	mivpr0;		/* 0x51600 - Messaging Interrupt Vector/Priority Register 0 */ +	char	res143[12]; +	uint	midr0;		/* 0x51610 - Messaging Interrupt Destination Register 0 */ +	char	res144[12]; +	uint	mivpr1;		/* 0x51620 - Messaging Interrupt Vector/Priority Register 1 */ +	char	res145[12]; +	uint	midr1;		/* 0x51630 - Messaging Interrupt Destination Register 1 */ +	char	res146[12]; +	uint	mivpr2;		/* 0x51640 - Messaging Interrupt Vector/Priority Register 2 */ +	char	res147[12]; +	uint	midr2;		/* 0x51650 - Messaging Interrupt Destination Register 2 */ +	char	res148[12]; +	uint	mivpr3;		/* 0x51660 - Messaging Interrupt Vector/Priority Register 3 */ +	char	res149[12]; +	uint	midr3;		/* 0x51670 - Messaging Interrupt Destination Register 3 */ +	char	res150[59852]; +	uint	ipi0dr0;	/* 0x60040 - Processor 0 Interprocessor Interrupt Dispatch Register 0 */ +	char	res151[12]; +	uint	ipi0dr1;	/* 0x60050 - Processor 0 Interprocessor Interrupt Dispatch Register 1 */ +	char	res152[12]; +	uint	ipi0dr2;	/* 0x60060 - Processor 0 Interprocessor Interrupt Dispatch Register 2 */ +	char	res153[12]; +	uint	ipi0dr3;	/* 0x60070 - Processor 0 Interprocessor Interrupt Dispatch Register 3 */ +	char	res154[12]; +	uint	ctpr0;		/* 0x60080 - Current Task Priority Register for Processor 0 */ +	char	res155[12]; +	uint	whoami0;	/* 0x60090 - Who Am I Register for Processor 0 */ +	char	res156[12]; +	uint	iack0;		/* 0x600a0 - Interrupt Acknowledge Register for Processor 0 */ +	char	res157[12]; +	uint	eoi0;		/* 0x600b0 - End Of Interrupt Register for Processor 0 */ +	char	res158[3916]; +} ccsr_pic_t; + +/* RapidIO Registers(0xc_0000-0xe_0000) */ + +typedef struct ccsr_rio { +	uint	didcar;		/* 0xc0000 - Device Identity Capability Register */ +	uint	dicar;		/* 0xc0004 - Device Information Capability Register */ +	uint	aidcar;		/* 0xc0008 - Assembly Identity Capability Register */ +	uint	aicar;		/* 0xc000c - Assembly Information Capability Register */ +	uint	pefcar;		/* 0xc0010 - Processing Element Features Capability Register */ +	uint	spicar;		/* 0xc0014 - Switch Port Information Capability Register */ +	uint	socar;		/* 0xc0018 - Source Operations Capability Register */ +	uint	docar;		/* 0xc001c - Destination Operations Capability Register */ +	char	res1[32]; +	uint	msr;		/* 0xc0040 - Mailbox Command And Status Register */ +	uint	pwdcsr;		/* 0xc0044 - Port-Write and Doorbell Command And Status Register */ +	char	res2[4]; +	uint	pellccsr;	/* 0xc004c - Processing Element Logic Layer Control Command and Status Register */ +	char	res3[12]; +	uint	lcsbacsr;	/* 0xc005c - Local Configuration Space Base Address Command and Status Register */ +	uint	bdidcsr;	/* 0xc0060 - Base Device ID Command and Status Register */ +	char	res4[4]; +	uint	hbdidlcsr;	/* 0xc0068 - Host Base Device ID Lock Command and Status Register */ +	uint	ctcsr;		/* 0xc006c - Component Tag Command and Status Register */ +	char	res5[144]; +	uint	pmbh0csr;	/* 0xc0100 - 8/16 LP-LVDS Port Maintenance Block Header 0 Command and Status Register */ +	char	res6[28]; +	uint	pltoccsr;	/* 0xc0120 - Port Link Time-out Control Command and Status Register */ +	uint	prtoccsr;	/* 0xc0124 - Port Response Time-out Control Command and Status Register */ +	char	res7[20]; +	uint	pgccsr;		/* 0xc013c - Port General Command and Status Register */ +	uint	plmreqcsr;	/* 0xc0140 - Port Link Maintenance Request Command and Status Register */ +	uint	plmrespcsr;	/* 0xc0144 - Port Link Maintenance Response Command and Status Register */ +	uint	plascsr;	/* 0xc0148 - Port Local Ackid Status Command and Status Register */ +	char	res8[12]; +	uint	pescsr;		/* 0xc0158 - Port Error and Status Command and Status Register */ +	uint	pccsr;		/* 0xc015c - Port Control Command and Status Register */ +	char	res9[1184]; +	uint	erbh;		/* 0xc0600 - Error Reporting Block Header Register */ +	char	res10[4]; +	uint	ltledcsr;	/* 0xc0608 - Logical/Transport layer error detect status register */ +	uint	ltleecsr;	/* 0xc060c - Logical/Transport layer error enable register */ +	char	res11[4]; +	uint	ltlaccsr;	/* 0xc0614 - Logical/Transport layer addresss capture register */ +	uint	ltldidccsr;	/* 0xc0618 - Logical/Transport layer device ID capture register */ +	uint	ltlcccsr;	/* 0xc061c - Logical/Transport layer control capture register */ +	char	res12[32]; +	uint	edcsr;	        /* 0xc0640 - Port 0 error detect status register */ +	uint	erecsr;	        /* 0xc0644 - Port 0 error rate enable status register */ +	uint	ecacsr;	        /* 0xc0648 - Port 0 error capture attributes register */ +	uint	pcseccsr0;	/* 0xc064c - Port 0 packet/control symbol error capture register 0 */ +	uint	peccsr1;	/* 0xc0650 - Port 0 error capture command and status register 1 */ +	uint	peccsr2;	/* 0xc0654 - Port 0 error capture command and status register 2 */ +	uint	peccsr3;	/* 0xc0658 - Port 0 error capture command and status register 3 */ +	char	res13[12]; +	uint	ercsr;	        /* 0xc0668 - Port 0 error rate command and status register */ +	uint	ertcsr;	        /* 0xc066C - Port 0 error rate threshold status register*/ +	char	res14[63892]; +	uint	llcr;		/* 0xd0004 - Logical Layer Configuration Register */ +	char	res15[12]; +	uint	epwisr;		/* 0xd0010 - Error / Port-Write Interrupt Status Register */ +	char	res16[12]; +	uint	lretcr;		/* 0xd0020 - Logical Retry Error Threshold Configuration Register */ +	char	res17[92]; +	uint	pretcr;		/* 0xd0080 - Physical Retry Erorr Threshold Configuration Register */ +	char	res18[124]; +	uint	adidcsr;	/* 0xd0100 - Port 0 Alt. Device ID Command and Status Register */ +	char	res19[28]; +	uint	ptaacr;	        /* 0xd0120 - Port 0 Pass-Through/Accept-All Configuration Register */ +	char	res20[12]; +	uint	iecsr;	        /* 0xd0130 - Port 0 Implementation Error Status Register */ +	char	res21[12]; +	uint	pcr;		/* 0xd0140 - Port 0 Phsyical Configuration RegisterRegister */ +	char	res22[20]; +	uint	slcsr;	        /* 0xd0158 - Port 0 Serial Link Command and Status Register */ +	char	res23[4]; +	uint	sleir;	        /* 0xd0160 - Port 0 Serial Link Error Injection Register */ +	char	res24[2716]; +	uint	rowtar0;	/* 0xd0c00 - RapidIO Outbound Window Translation Address Register 0 */ +	uint	rowtear0;	/* 0xd0c04 - RapidIO Outbound Window Translation Ext. Address Register 0 */ +	char	res25[8]; +	uint	rowar0;		/* 0xd0c10 - RapidIO Outbound Attributes Register 0 */ +	char	res26[12]; +	uint	rowtar1;	/* 0xd0c20 - RapidIO Outbound Window Translation Address Register 1 */ +	uint	rowtear1;	/* 0xd0c24 - RapidIO Outbound Window Translation Ext. Address Register 1 */ +	uint	rowbar1;	/* 0xd0c28 - RapidIO Outbound Window Base Address Register 1 */ +	char	res27[4]; +	uint	rowar1;		/* 0xd0c30 - RapidIO Outbound Attributes Register 1 */ +	uint	rows1r1;	/* 0xd0c34 - RapidIO Outbound Window Segment 1 Register 1 */ +	uint	rows2r1;	/* 0xd0c38 - RapidIO Outbound Window Segment 2 Register 1 */ +	uint	rows3r1;	/* 0xd0c3c - RapidIO Outbound Window Segment 3 Register 1 */ +	uint	rowtar2;	/* 0xd0c40 - RapidIO Outbound Window Translation Address Register 2 */ +	uint	rowtear2;	/* 0xd0c44 - RapidIO Outbound Window Translation Ext. Address Register 2 */ +	uint	rowbar2;	/* 0xd0c48 - RapidIO Outbound Window Base Address Register 2 */ +	char	res28[4]; +	uint	rowar2;		/* 0xd0c50 - RapidIO Outbound Attributes Register 2 */ +	uint	rows1r2;	/* 0xd0c54 - RapidIO Outbound Window Segment 1 Register 2 */ +	uint	rows2r2;	/* 0xd0c58 - RapidIO Outbound Window Segment 2 Register 2 */ +	uint	rows3r2;	/* 0xd0c5c - RapidIO Outbound Window Segment 3 Register 2 */ +	uint	rowtar3;	/* 0xd0c60 - RapidIO Outbound Window Translation Address Register 3 */ +	uint	rowtear3;	/* 0xd0c64 - RapidIO Outbound Window Translation Ext. Address Register 3 */ +	uint	rowbar3;	/* 0xd0c68 - RapidIO Outbound Window Base Address Register 3 */ +	char	res29[4]; +	uint	rowar3;		/* 0xd0c70 - RapidIO Outbound Attributes Register 3 */ +	uint	rows1r3;	/* 0xd0c74 - RapidIO Outbound Window Segment 1 Register 3 */ +	uint	rows2r3;	/* 0xd0c78 - RapidIO Outbound Window Segment 2 Register 3 */ +	uint	rows3r3;	/* 0xd0c7c - RapidIO Outbound Window Segment 3 Register 3 */ +	uint	rowtar4;	/* 0xd0c80 - RapidIO Outbound Window Translation Address Register 4 */ +	uint	rowtear4;	/* 0xd0c84 - RapidIO Outbound Window Translation Ext. Address Register 4 */ +	uint	rowbar4;	/* 0xd0c88 - RapidIO Outbound Window Base Address Register 4 */ +	char	res30[4]; +	uint	rowar4;		/* 0xd0c90 - RapidIO Outbound Attributes Register 4 */ +	uint	rows1r4;	/* 0xd0c94 - RapidIO Outbound Window Segment 1 Register 4 */ +	uint	rows2r4;	/* 0xd0c98 - RapidIO Outbound Window Segment 2 Register 4 */ +	uint	rows3r4;	/* 0xd0c9c - RapidIO Outbound Window Segment 3 Register 4 */ +	uint	rowtar5;	/* 0xd0ca0 - RapidIO Outbound Window Translation Address Register 5 */ +	uint	rowtear5;	/* 0xd0ca4 - RapidIO Outbound Window Translation Ext. Address Register 5 */ +	uint	rowbar5;	/* 0xd0ca8 - RapidIO Outbound Window Base Address Register 5 */ +	char	res31[4]; +	uint	rowar5;		/* 0xd0cb0 - RapidIO Outbound Attributes Register 5 */ +	uint	rows1r5;	/* 0xd0cb4 - RapidIO Outbound Window Segment 1 Register 5 */ +	uint	rows2r5;	/* 0xd0cb8 - RapidIO Outbound Window Segment 2 Register 5 */ +	uint	rows3r5;	/* 0xd0cbc - RapidIO Outbound Window Segment 3 Register 5 */ +	uint	rowtar6;	/* 0xd0cc0 - RapidIO Outbound Window Translation Address Register 6 */ +	uint	rowtear6;	/* 0xd0cc4 - RapidIO Outbound Window Translation Ext. Address Register 6 */ +	uint	rowbar6;	/* 0xd0cc8 - RapidIO Outbound Window Base Address Register 6 */ +	char	res32[4]; +	uint	rowar6;		/* 0xd0cd0 - RapidIO Outbound Attributes Register 6 */ +	uint	rows1r6;	/* 0xd0cd4 - RapidIO Outbound Window Segment 1 Register 6 */ +	uint	rows2r6;	/* 0xd0cd8 - RapidIO Outbound Window Segment 2 Register 6 */ +	uint	rows3r6;	/* 0xd0cdc - RapidIO Outbound Window Segment 3 Register 6 */ +	uint	rowtar7;	/* 0xd0ce0 - RapidIO Outbound Window Translation Address Register 7 */ +	uint	rowtear7;	/* 0xd0ce4 - RapidIO Outbound Window Translation Ext. Address Register 7 */ +	uint	rowbar7;	/* 0xd0ce8 - RapidIO Outbound Window Base Address Register 7 */ +	char	res33[4]; +	uint	rowar7;		/* 0xd0cf0 - RapidIO Outbound Attributes Register 7 */ +	uint	rows1r7;	/* 0xd0cf4 - RapidIO Outbound Window Segment 1 Register 7 */ +	uint	rows2r7;	/* 0xd0cf8 - RapidIO Outbound Window Segment 2 Register 7 */ +	uint	rows3r7;	/* 0xd0cfc - RapidIO Outbound Window Segment 3 Register 7 */ +	uint	rowtar8;	/* 0xd0d00 - RapidIO Outbound Window Translation Address Register 8 */ +	uint	rowtear8;	/* 0xd0d04 - RapidIO Outbound Window Translation Ext. Address Register 8 */ +	uint	rowbar8;	/* 0xd0d08 - RapidIO Outbound Window Base Address Register 8 */ +	char	res34[4]; +	uint	rowar8;		/* 0xd0d10 - RapidIO Outbound Attributes Register 8 */ +	uint	rows1r8;	/* 0xd0d14 - RapidIO Outbound Window Segment 1 Register 8 */ +	uint	rows2r8;	/* 0xd0d18 - RapidIO Outbound Window Segment 2 Register 8 */ +	uint	rows3r8;	/* 0xd0d1c - RapidIO Outbound Window Segment 3 Register 8 */ +	char	res35[64]; +	uint	riwtar4;	/* 0xd0d60 - RapidIO Inbound Window Translation Address Register 4 */ +	uint	riwbar4;	/* 0xd0d68 - RapidIO Inbound Window Base Address Register 4 */ +	char	res36[4]; +	uint	riwar4;		/* 0xd0d70 - RapidIO Inbound Attributes Register 4 */ +	char	res37[12]; +	uint	riwtar3;	/* 0xd0d80 - RapidIO Inbound Window Translation Address Register 3 */ +	char	res38[4]; +	uint	riwbar3;	/* 0xd0d88 - RapidIO Inbound Window Base Address Register 3 */ +	char	res39[4]; +	uint	riwar3;		/* 0xd0d90 - RapidIO Inbound Attributes Register 3 */ +	char	res40[12]; +	uint	riwtar2;	/* 0xd0da0 - RapidIO Inbound Window Translation Address Register 2 */ +	char	res41[4]; +	uint	riwbar2;	/* 0xd0da8 - RapidIO Inbound Window Base Address Register 2 */ +	char	res42[4]; +	uint	riwar2;		/* 0xd0db0 - RapidIO Inbound Attributes Register 2 */ +	char	res43[12]; +	uint	riwtar1;	/* 0xd0dc0 - RapidIO Inbound Window Translation Address Register 1 */ +	char	res44[4]; +	uint	riwbar1;	/* 0xd0dc8 - RapidIO Inbound Window Base Address Register 1 */ +	char	res45[4]; +	uint	riwar1;		/* 0xd0dd0 - RapidIO Inbound Attributes Register 1 */ +	char	res46[12]; +	uint	riwtar0;	/* 0xd0de0 - RapidIO Inbound Window Translation Address Register 0 */ +	char	res47[12]; +	uint	riwar0;		/* 0xd0df0 - RapidIO Inbound Attributes Register 0 */ +	char	res48[12]; +	uint	pnfedr;		/* 0xd0e00 - Port Notification/Fatal Error Detect Register */ +	uint	pnfedir;	/* 0xd0e04 - Port Notification/Fatal Error Detect Register */ +	uint	pnfeier;	/* 0xd0e08 - Port Notification/Fatal Error Interrupt Enable Register */ +	uint	pecr;		/* 0xd0e0c - Port Error Control Register */ +	uint	pepcsr0;	/* 0xd0e10 - Port Error Packet/Control Symbol Register 0 */ +	uint	pepr1;		/* 0xd0e14 - Port Error Packet Register 1 */ +	uint	pepr2;		/* 0xd0e18 - Port Error Packet Register 2 */ +	char	res49[4]; +	uint	predr;		/* 0xd0e20 - Port Recoverable Error Detect Register */ +	char	res50[4]; +	uint	pertr;		/* 0xd0e28 - Port Error Recovery Threshold Register */ +	uint	prtr;		/* 0xd0e2c - Port Retry Threshold Register */ +	char	res51[8656]; +	uint	omr;		/* 0xd3000 - Outbound Mode Register */ +	uint	osr;		/* 0xd3004 - Outbound Status Register */ +	uint	eodqtpar;	/* 0xd3008 - Extended Outbound Descriptor Queue Tail Pointer Address Register */ +	uint	odqtpar;	/* 0xd300c - Outbound Descriptor Queue Tail Pointer Address Register */ +	uint	eosar;		/* 0xd3010 - Extended Outbound Unit Source Address Register */ +	uint	osar;		/* 0xd3014 - Outbound Unit Source Address Register */ +	uint	odpr;		/* 0xd3018 - Outbound Destination Port Register */ +	uint	odatr;		/* 0xd301c - Outbound Destination Attributes Register */ +	uint	odcr;		/* 0xd3020 - Outbound Doubleword Count Register */ +	uint	eodqhpar;	/* 0xd3024 - Extended Outbound Descriptor Queue Head Pointer Address Register */ +	uint	odqhpar;	/* 0xd3028 - Outbound Descriptor Queue Head Pointer Address Register */ +	uint	oretr;	        /* 0xd302C - Outbound Retry Error Threshold Register */ +	uint	omgr;	        /* 0xd3030 - Outbound Multicast Group Register */ +	uint	omlr;	        /* 0xd3034 - Outbound Multicast List Register */ +	char	res52[40]; +	uint	imr;		/* 0xd3060 - Outbound Mode Register */ +	uint	isr;		/* 0xd3064 - Inbound Status Register */ +	uint	eidqtpar;	/* 0xd3068 - Extended Inbound Descriptor Queue Tail Pointer Address Register */ +	uint	idqtpar;	/* 0xd306c - Inbound Descriptor Queue Tail Pointer Address Register */ +	uint	eifqhpar;	/* 0xd3070 - Extended Inbound Frame Queue Head Pointer Address Register */ +	uint	ifqhpar;	/* 0xd3074 - Inbound Frame Queue Head Pointer Address Register */ +	uint	imirir;	        /* 0xd3078 - Inbound Maximum Interrutp Report Interval Register */ +	char	res53[900]; +	uint	oddmr;		/* 0xd3400 - Outbound Doorbell Mode Register */ +	uint	oddsr;		/* 0xd3404 - Outbound Doorbell Status Register */ +	char	res54[16]; +	uint	oddpr;		/* 0xd3418 - Outbound Doorbell Destination Port Register */ +	uint	oddatr;		/* 0xd341C - Outbound Doorbell Destination Attributes Register */ +	char	res55[12]; +	uint	oddretr;	/* 0xd342C - Outbound Doorbell Retry Threshold Configuration Register */ +	char	res56[48]; +	uint	idmr;		/* 0xd3460 - Inbound Doorbell Mode Register */ +	uint	idsr;		/* 0xd3464 - Inbound Doorbell Status Register */ +	uint	iedqtpar;	/* 0xd3468 - Extended Inbound Doorbell Queue Tail Pointer Address Register */ +	uint	iqtpar;	        /* 0xd346c - Inbound Doorbell Queue Tail Pointer Address Register */ +	uint	iedqhpar;	/* 0xd3470 - Extended Inbound Doorbell Queue Head Pointer Address Register */ +	uint	idqhpar;	/* 0xd3474 - Inbound Doorbell Queue Head Pointer Address Register */ +	uint	idmirir;	/* 0xd3478 - Inbound Doorbell Max Interrupt Report Interval Register */ +	char	res57[100]; +	uint	pwmr;		/* 0xd34e0 - Port-Write Mode Register */ +	uint	pwsr;		/* 0xd34e4 - Port-Write Status Register */ +	uint	epwqbar;	/* 0xd34e8 - Extended Port-Write Queue Base Address Register */ +	uint	pwqbar;		/* 0xd34ec - Port-Write Queue Base Address Register */ +	char	res58[51984]; +} ccsr_rio_t; + +/* Global Utilities Register Block(0xe_0000-0xf_ffff) */ +typedef struct ccsr_gur { +	uint	porpllsr;	/* 0xe0000 - POR PLL ratio status register */ +	uint	porbmsr;	/* 0xe0004 - POR boot mode status register */ +	uint	porimpscr;	/* 0xe0008 - POR I/O impedance status and control register */ +	uint	pordevsr;	/* 0xe000c - POR I/O device status regsiter */ +	uint	pordbgmsr;	/* 0xe0010 - POR debug mode status register */ +	char	res1[12]; +	uint	gpporcr;	/* 0xe0020 - General-purpose POR configuration register */ +	char	res2[12]; +	uint	gpiocr;		/* 0xe0030 - GPIO control register */ +	char	res3[12]; +	uint	gpoutdr;	/* 0xe0040 - General-purpose output data register */ +	char	res4[12]; +	uint	gpindr;		/* 0xe0050 - General-purpose input data register */ +	char	res5[12]; +	uint	pmuxcr;		/* 0xe0060 - Alternate function signal multiplex control */ +	char	res6[12]; +	uint	devdisr;	/* 0xe0070 - Device disable control */ +	char	res7[12]; +	uint	powmgtcsr;	/* 0xe0080 - Power management status and control register */ +	char	res8[12]; +	uint	mcpsumr;	/* 0xe0090 - Machine check summary register */ +	uint	rstrscr;	/* 0xe0094 - Reset request status and control register */ +	char	res9[8]; +	uint	pvr;		/* 0xe00a0 - Processor version register */ +	uint	svr;		/* 0xe00a4 - System version register */ +	char	res10a[8]; +	uint	rstcr;		/* 0xe00b0 - Reset control register */ +	char	res10b[1868]; +	uint	clkdvdr;	/* 0xe0800 - Clock Divide register */ +	char	res10c[796]; +	uint	ddr1clkdr;	/* 0xe0b20 - DDRC1 Clock Disable register */ +	char	res10d[4]; +	uint	ddr2clkdr;	/* 0xe0b28 - DDRC2 Clock Disable register */ +	char	res10e[724]; +	uint	clkocr;		/* 0xe0e00 - Clock out select register */ +	char	res11[12]; +	uint	ddrdllcr;	/* 0xe0e10 - DDR DLL control register */ +	char	res12[12]; +	uint	lbcdllcr;	/* 0xe0e20 - LBC DLL control register */ +	char	res13a[224]; +	uint	srds1cr0;	/* 0xe0f04 - SerDes1 control register 0 */ +	char	res13b[4]; +	uint	srds1cr1;	/* 0xe0f08 - SerDes1 control register 1 */ +	char	res14[24]; +	uint	ddrioovcr;	/* 0xe0f24 - DDR IO Overdrive Control register */ +	char	res15a[24]; +	uint	srds2cr0;	/* 0xe0f40 - SerDes2 control register 0 */ +	uint	srds2cr1;	/* 0xe0f44 - SerDes2 control register 1 */ +	char	res16[184]; +} ccsr_gur_t; + +#define MPC8610_PORBMSR_HA      0x00070000 +#define MPC8610_PORBMSR_HA_SHIFT	16 +#define MPC8641_PORBMSR_HA      0x00060000 +#define MPC8641_PORBMSR_HA_SHIFT	17 +#define MPC8610_PORDEVSR_IO_SEL		0x00380000 +#define MPC8610_PORDEVSR_IO_SEL_SHIFT		19 +#define MPC8641_PORDEVSR_IO_SEL		0x000F0000 +#define MPC8641_PORDEVSR_IO_SEL_SHIFT		16 +#define MPC86xx_PORDEVSR_CORE1TE	0x00000080 /* ASMP (Core1 addr trans) */ +#define MPC86xx_DEVDISR_PCIEX1	0x80000000 +#define MPC86xx_DEVDISR_PCIEX2	0x40000000 +#define MPC86xx_DEVDISR_PCI1	0x80000000 +#define MPC86xx_DEVDISR_PCIE1	0x40000000 +#define MPC86xx_DEVDISR_PCIE2	0x20000000 +#define MPC86xx_DEVDISR_SRIO	0x00080000 +#define MPC86xx_DEVDISR_RMSG	0x00040000 +#define MPC86xx_DEVDISR_CPU0	0x00008000 +#define MPC86xx_DEVDISR_CPU1	0x00004000 +#define MPC86xx_RSTCR_HRST_REQ	0x00000002 + +/* + * Watchdog register block(0xe_4000-0xe_4fff) + */ +typedef struct ccsr_wdt { +	uint	res0; +	uint	swcrr; /* System watchdog control register */ +	uint	swcnr; /* System watchdog count register */ +	char	res1[2]; +	ushort	swsrr; /* System watchdog service register */ +	char	res2[4080]; +} ccsr_wdt_t; + +typedef struct immap { +	ccsr_local_mcm_t	im_local_mcm; +	struct ccsr_ddr		im_ddr1; +	ccsr_i2c_t		im_i2c; +	ccsr_duart_t		im_duart; +	fsl_lbc_t		im_lbc; +	struct ccsr_ddr		im_ddr2; +	char                    res1[4096]; +	ccsr_pex_t		im_pex1; +	ccsr_pex_t		im_pex2; +	ccsr_ht_t               im_ht; +	char                    res2[90112]; +	ccsr_dma_t		im_dma; +	char                    res3[8192]; +	ccsr_tsec_t		im_tsec1; +	ccsr_tsec_t		im_tsec2; +	ccsr_tsec_t             im_tsec3; +	ccsr_tsec_t             im_tsec4; +	char                    res4[98304]; +	ccsr_pic_t		im_pic; +	char                    res5[389120]; +	ccsr_rio_t		im_rio; +	ccsr_gur_t		im_gur; +	char			res6[12288]; +	ccsr_wdt_t		im_wdt; +} immap_t; + +extern immap_t  *immr; + +#define CONFIG_SYS_MPC8xxx_DDR_OFFSET	0x2000 +#define CONFIG_SYS_FSL_DDR_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR_OFFSET) +#define CONFIG_SYS_MPC8xxx_DDR2_OFFSET	0x6000 +#define CONFIG_SYS_FSL_DDR2_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC8xxx_DDR2_OFFSET) +#define CONFIG_SYS_MPC86xx_DMA_OFFSET	0x21000 +#define CONFIG_SYS_MPC86xx_DMA_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DMA_OFFSET) +#define CONFIG_SYS_MPC86xx_PIC_OFFSET	0x40000 +#define CONFIG_SYS_MPC8xxx_PIC_ADDR	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_PIC_OFFSET) + + +#define CONFIG_SYS_MPC86xx_PCI1_OFFSET		0x8000 +#ifdef CONFIG_MPC8610 +#define CONFIG_SYS_MPC86xx_PCIE1_OFFSET         0xa000 +#else +#define CONFIG_SYS_MPC86xx_PCIE1_OFFSET         0x8000 +#endif +#define CONFIG_SYS_MPC86xx_PCIE2_OFFSET         0x9000 + +#define CONFIG_SYS_PCI1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_PCI1_OFFSET) +#define CONFIG_SYS_PCI2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_PCI2_OFFSET) +#define CONFIG_SYS_PCIE1_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_PCIE1_OFFSET) +#define CONFIG_SYS_PCIE2_ADDR \ +	(CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_PCIE2_OFFSET) + +#define CONFIG_SYS_TSEC1_OFFSET		0x24000 +#define CONFIG_SYS_MDIO1_OFFSET		0x24000 +#define CONFIG_SYS_LBC_ADDR		(&((immap_t *)CONFIG_SYS_IMMR)->im_lbc) + +#define TSEC_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET) +#define MDIO_BASE_ADDR		(CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET) + +#endif /*__IMMAP_86xx__*/ diff --git a/roms/u-boot/arch/powerpc/include/asm/immap_qe.h b/roms/u-boot/arch/powerpc/include/asm/immap_qe.h new file mode 100644 index 00000000..b317dcb5 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/immap_qe.h @@ -0,0 +1,582 @@ +/* + * QUICC Engine (QE) Internal Memory Map. + * The Internal Memory Map for devices with QE on them. This + * is the superset of all QE devices (8360, etc.). + * + * Copyright (c) 2006-2009, 2011 Freescale Semiconductor, Inc. + * Author: Shlomi Gridih <gridish@freescale.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __IMMAP_QE_H__ +#define __IMMAP_QE_H__ + +#ifdef CONFIG_MPC83xx +#if defined(CONFIG_MPC8360) +#define QE_MURAM_SIZE		0xc000UL +#define MAX_QE_RISC		2 +#define QE_NUM_OF_SNUM		28 +#elif defined(CONFIG_MPC832x) || defined(CONFIG_MPC8309) +#define QE_MURAM_SIZE		0x4000UL +#define MAX_QE_RISC		1 +#define QE_NUM_OF_SNUM		28 +#endif +#endif + +/* QE I-RAM */ +typedef struct qe_iram { +	u32 iadd;		/* I-RAM Address Register */ +	u32 idata;		/* I-RAM Data Register    */ +	u8 res0[0x4]; +	u32 iready; +	u8 res1[0x70]; +} __attribute__ ((packed)) qe_iram_t; + +/* QE Interrupt Controller */ +typedef struct qe_ic { +	u32 qicr; +	u32 qivec; +	u32 qripnr; +	u32 qipnr; +	u32 qipxcc; +	u32 qipycc; +	u32 qipwcc; +	u32 qipzcc; +	u32 qimr; +	u32 qrimr; +	u32 qicnr; +	u8 res0[0x4]; +	u32 qiprta; +	u32 qiprtb; +	u8 res1[0x4]; +	u32 qricr; +	u8 res2[0x20]; +	u32 qhivec; +	u8 res3[0x1C]; +} __attribute__ ((packed)) qe_ic_t; + +/* Communications Processor */ +typedef struct cp_qe { +	u32 cecr;		/* QE command register */ +	u32 ceccr;		/* QE controller configuration register */ +	u32 cecdr;		/* QE command data register */ +	u8 res0[0xA]; +	u16 ceter;		/* QE timer event register */ +	u8 res1[0x2]; +	u16 cetmr;		/* QE timers mask register */ +	u32 cetscr;		/* QE time-stamp timer control register */ +	u32 cetsr1;		/* QE time-stamp register 1 */ +	u32 cetsr2;		/* QE time-stamp register 2 */ +	u8 res2[0x8]; +	u32 cevter;		/* QE virtual tasks event register */ +	u32 cevtmr;		/* QE virtual tasks mask register */ +	u16 cercr;		/* QE RAM control register */ +	u8 res3[0x2]; +	u8 res4[0x24]; +	u16 ceexe1;		/* QE external request 1 event register */ +	u8 res5[0x2]; +	u16 ceexm1;		/* QE external request 1 mask register */ +	u8 res6[0x2]; +	u16 ceexe2;		/* QE external request 2 event register */ +	u8 res7[0x2]; +	u16 ceexm2;		/* QE external request 2 mask register */ +	u8 res8[0x2]; +	u16 ceexe3;		/* QE external request 3 event register */ +	u8 res9[0x2]; +	u16 ceexm3;		/* QE external request 3 mask register */ +	u8 res10[0x2]; +	u16 ceexe4;		/* QE external request 4 event register */ +	u8 res11[0x2]; +	u16 ceexm4;		/* QE external request 4 mask register */ +	u8 res12[0x2]; +	u8 res13[0x280]; +} __attribute__ ((packed)) cp_qe_t; + +/* QE Multiplexer */ +typedef struct qe_mux { +	u32 cmxgcr;		/* CMX general clock route register    */ +	u32 cmxsi1cr_l;		/* CMX SI1 clock route low register    */ +	u32 cmxsi1cr_h;		/* CMX SI1 clock route high register   */ +	u32 cmxsi1syr;		/* CMX SI1 SYNC route register         */ +	u32 cmxucr1;		/* CMX UCC1, UCC3 clock route register */ +	u32 cmxucr2;		/* CMX UCC5, UCC7 clock route register */ +	u32 cmxucr3;		/* CMX UCC2, UCC4 clock route register */ +	u32 cmxucr4;		/* CMX UCC6, UCC8 clock route register */ +	u32 cmxupcr;		/* CMX UPC clock route register        */ +	u8 res0[0x1C]; +} __attribute__ ((packed)) qe_mux_t; + +/* QE Timers */ +typedef struct qe_timers { +	u8 gtcfr1;		/* Timer 1 2 global configuration register */ +	u8 res0[0x3]; +	u8 gtcfr2;		/* Timer 3 4 global configuration register */ +	u8 res1[0xB]; +	u16 gtmdr1;		/* Timer 1 mode register */ +	u16 gtmdr2;		/* Timer 2 mode register */ +	u16 gtrfr1;		/* Timer 1 reference register */ +	u16 gtrfr2;		/* Timer 2 reference register */ +	u16 gtcpr1;		/* Timer 1 capture register */ +	u16 gtcpr2;		/* Timer 2 capture register */ +	u16 gtcnr1;		/* Timer 1 counter */ +	u16 gtcnr2;		/* Timer 2 counter */ +	u16 gtmdr3;		/* Timer 3 mode register */ +	u16 gtmdr4;		/* Timer 4 mode register */ +	u16 gtrfr3;		/* Timer 3 reference register */ +	u16 gtrfr4;		/* Timer 4 reference register */ +	u16 gtcpr3;		/* Timer 3 capture register */ +	u16 gtcpr4;		/* Timer 4 capture register */ +	u16 gtcnr3;		/* Timer 3 counter */ +	u16 gtcnr4;		/* Timer 4 counter */ +	u16 gtevr1;		/* Timer 1 event register */ +	u16 gtevr2;		/* Timer 2 event register */ +	u16 gtevr3;		/* Timer 3 event register */ +	u16 gtevr4;		/* Timer 4 event register */ +	u16 gtps;		/* Timer 1 prescale register */ +	u8 res2[0x46]; +} __attribute__ ((packed)) qe_timers_t; + +/* BRG */ +typedef struct qe_brg { +	u32 brgc1;		/* BRG1 configuration register  */ +	u32 brgc2;		/* BRG2 configuration register  */ +	u32 brgc3;		/* BRG3 configuration register  */ +	u32 brgc4;		/* BRG4 configuration register  */ +	u32 brgc5;		/* BRG5 configuration register  */ +	u32 brgc6;		/* BRG6 configuration register  */ +	u32 brgc7;		/* BRG7 configuration register  */ +	u32 brgc8;		/* BRG8 configuration register  */ +	u32 brgc9;		/* BRG9 configuration register  */ +	u32 brgc10;		/* BRG10 configuration register */ +	u32 brgc11;		/* BRG11 configuration register */ +	u32 brgc12;		/* BRG12 configuration register */ +	u32 brgc13;		/* BRG13 configuration register */ +	u32 brgc14;		/* BRG14 configuration register */ +	u32 brgc15;		/* BRG15 configuration register */ +	u32 brgc16;		/* BRG16 configuration register */ +	u8 res0[0x40]; +} __attribute__ ((packed)) qe_brg_t; + +/* SPI */ +typedef struct spi { +	u8 res0[0x20]; +	u32 spmode;		/* SPI mode register */ +	u8 res1[0x2]; +	u8 spie;		/* SPI event register */ +	u8 res2[0x1]; +	u8 res3[0x2]; +	u8 spim;		/* SPI mask register */ +	u8 res4[0x1]; +	u8 res5[0x1]; +	u8 spcom;		/* SPI command register  */ +	u8 res6[0x2]; +	u32 spitd;		/* SPI transmit data register (cpu mode) */ +	u32 spird;		/* SPI receive data register (cpu mode) */ +	u8 res7[0x8]; +} __attribute__ ((packed)) spi_t; + +/* SI */ +typedef struct si1 { +	u16 siamr1;		/* SI1 TDMA mode register */ +	u16 sibmr1;		/* SI1 TDMB mode register */ +	u16 sicmr1;		/* SI1 TDMC mode register */ +	u16 sidmr1;		/* SI1 TDMD mode register */ +	u8 siglmr1_h;		/* SI1 global mode register high */ +	u8 res0[0x1]; +	u8 sicmdr1_h;		/* SI1 command register high */ +	u8 res2[0x1]; +	u8 sistr1_h;		/* SI1 status register high */ +	u8 res3[0x1]; +	u16 sirsr1_h;		/* SI1 RAM shadow address register high */ +	u8 sitarc1;		/* SI1 RAM counter Tx TDMA */ +	u8 sitbrc1;		/* SI1 RAM counter Tx TDMB */ +	u8 sitcrc1;		/* SI1 RAM counter Tx TDMC */ +	u8 sitdrc1;		/* SI1 RAM counter Tx TDMD */ +	u8 sirarc1;		/* SI1 RAM counter Rx TDMA */ +	u8 sirbrc1;		/* SI1 RAM counter Rx TDMB */ +	u8 sircrc1;		/* SI1 RAM counter Rx TDMC */ +	u8 sirdrc1;		/* SI1 RAM counter Rx TDMD */ +	u8 res4[0x8]; +	u16 siemr1;		/* SI1 TDME mode register 16 bits */ +	u16 sifmr1;		/* SI1 TDMF mode register 16 bits */ +	u16 sigmr1;		/* SI1 TDMG mode register 16 bits */ +	u16 sihmr1;		/* SI1 TDMH mode register 16 bits */ +	u8 siglmg1_l;		/* SI1 global mode register low 8 bits */ +	u8 res5[0x1]; +	u8 sicmdr1_l;		/* SI1 command register low 8 bits */ +	u8 res6[0x1]; +	u8 sistr1_l;		/* SI1 status register low 8 bits */ +	u8 res7[0x1]; +	u16 sirsr1_l;		/* SI1 RAM shadow address register low 16 bits */ +	u8 siterc1;		/* SI1 RAM counter Tx TDME 8 bits */ +	u8 sitfrc1;		/* SI1 RAM counter Tx TDMF 8 bits */ +	u8 sitgrc1;		/* SI1 RAM counter Tx TDMG 8 bits */ +	u8 sithrc1;		/* SI1 RAM counter Tx TDMH 8 bits */ +	u8 sirerc1;		/* SI1 RAM counter Rx TDME 8 bits */ +	u8 sirfrc1;		/* SI1 RAM counter Rx TDMF 8 bits */ +	u8 sirgrc1;		/* SI1 RAM counter Rx TDMG 8 bits */ +	u8 sirhrc1;		/* SI1 RAM counter Rx TDMH 8 bits */ +	u8 res8[0x8]; +	u32 siml1;		/* SI1 multiframe limit register */ +	u8 siedm1;		/* SI1 extended diagnostic mode register */ +	u8 res9[0xBB]; +} __attribute__ ((packed)) si1_t; + +/* SI Routing Tables */ +typedef struct sir { +	u8 tx[0x400]; +	u8 rx[0x400]; +	u8 res0[0x800]; +} __attribute__ ((packed)) sir_t; + +/* USB Controller.  */ +typedef struct usb_ctlr { +	u8 usb_usmod; +	u8 usb_usadr; +	u8 usb_uscom; +	u8 res1[1]; +	u16 usb_usep1; +	u16 usb_usep2; +	u16 usb_usep3; +	u16 usb_usep4; +	u8 res2[4]; +	u16 usb_usber; +	u8 res3[2]; +	u16 usb_usbmr; +	u8 res4[1]; +	u8 usb_usbs; +	u16 usb_ussft; +	u8 res5[2]; +	u16 usb_usfrn; +	u8 res6[0x22]; +} __attribute__ ((packed)) usb_t; + +/* MCC */ +typedef struct mcc { +	u32 mcce;		/* MCC event register */ +	u32 mccm;		/* MCC mask register */ +	u32 mccf;		/* MCC configuration register */ +	u32 merl;		/* MCC emergency request level register */ +	u8 res0[0xF0]; +} __attribute__ ((packed)) mcc_t; + +/* QE UCC Slow */ +typedef struct ucc_slow { +	u32 gumr_l;		/* UCCx general mode register (low) */ +	u32 gumr_h;		/* UCCx general mode register (high) */ +	u16 upsmr;		/* UCCx protocol-specific mode register */ +	u8 res0[0x2]; +	u16 utodr;		/* UCCx transmit on demand register */ +	u16 udsr;		/* UCCx data synchronization register */ +	u16 ucce;		/* UCCx event register */ +	u8 res1[0x2]; +	u16 uccm;		/* UCCx mask register */ +	u8 res2[0x1]; +	u8 uccs;		/* UCCx status register */ +	u8 res3[0x24]; +	u16 utpt; +	u8 guemr;		/* UCC general extended mode register */ +	u8 res4[0x200 - 0x091]; +} __attribute__ ((packed)) ucc_slow_t; + +typedef struct ucc_mii_mng { +	u32 miimcfg;		/* MII management configuration reg    */ +	u32 miimcom;		/* MII management command reg          */ +	u32 miimadd;		/* MII management address reg          */ +	u32 miimcon;		/* MII management control reg          */ +	u32 miimstat;		/* MII management status reg           */ +	u32 miimind;		/* MII management indication reg       */ +	u32 ifctl;		/* interface control reg               */ +	u32 ifstat;		/* interface statux reg                */ +} __attribute__ ((packed))uec_mii_t; + +typedef struct ucc_ethernet { +	u32 maccfg1;		/* mac configuration reg. 1            */ +	u32 maccfg2;		/* mac configuration reg. 2            */ +	u32 ipgifg;		/* interframe gap reg.                 */ +	u32 hafdup;		/* half-duplex reg.                    */ +	u8 res1[0x10]; +	u32 miimcfg;		/* MII management configuration reg    */ +	u32 miimcom;		/* MII management command reg          */ +	u32 miimadd;		/* MII management address reg          */ +	u32 miimcon;		/* MII management control reg          */ +	u32 miimstat;		/* MII management status reg           */ +	u32 miimind;		/* MII management indication reg       */ +	u32 ifctl;		/* interface control reg               */ +	u32 ifstat;		/* interface statux reg                */ +	u32 macstnaddr1;	/* mac station address part 1 reg      */ +	u32 macstnaddr2;	/* mac station address part 2 reg      */ +	u8 res2[0x8]; +	u32 uempr;		/* UCC Ethernet Mac parameter reg      */ +	u32 utbipar;		/* UCC tbi address reg                 */ +	u16 uescr;		/* UCC Ethernet statistics control reg */ +	u8 res3[0x180 - 0x15A]; +	u32 tx64;		/* Total number of frames (including bad +				 * frames) transmitted that were exactly +				 * of the minimal length (64 for un tagged, +				 * 68 for tagged, or with length exactly +				 * equal to the parameter MINLength */ +	u32 tx127;		/* Total number of frames (including bad +				 * frames) transmitted that were between +				 * MINLength (Including FCS length==4) +				 * and 127 octets */ +	u32 tx255;		/* Total number of frames (including bad +				 * frames) transmitted that were between +				 * 128 (Including FCS length==4) and 255 +				 * octets */ +	u32 rx64;		/* Total number of frames received including +				 * bad frames that were exactly of the +				 * mninimal length (64 bytes) */ +	u32 rx127;		/* Total number of frames (including bad +				 * frames) received that were between +				 * MINLength (Including FCS length==4) +				 * and 127 octets */ +	u32 rx255;		/* Total number of frames (including +				 * bad frames) received that were between +				 * 128 (Including FCS length==4) and 255 +				 * octets */ +	u32 txok;		/* Total number of octets residing in frames +				 * that where involved in succesfull +				 * transmission */ +	u16 txcf;		/* Total number of PAUSE control frames +				 *  transmitted by this MAC */ +	u8 res4[0x2]; +	u32 tmca;		/* Total number of frames that were transmitted +				 * succesfully with the group address bit set +				 * that are not broadcast frames */ +	u32 tbca;		/* Total number of frames transmitted +				 * succesfully that had destination address +				 * field equal to the broadcast address */ +	u32 rxfok;		/* Total number of frames received OK */ +	u32 rxbok;		/* Total number of octets received OK */ +	u32 rbyt;		/* Total number of octets received including +				 * octets in bad frames. Must be implemented +				 * in HW because it includes octets in frames +				 * that never even reach the UCC */ +	u32 rmca;		/* Total number of frames that were received +				 * succesfully with the group address bit set +				 * that are not broadcast frames */ +	u32 rbca;		/* Total number of frames received succesfully +				 * that had destination address equal to the +				 * broadcast address */ +	u32 scar;		/* Statistics carry register */ +	u32 scam;		/* Statistics caryy mask register */ +	u8 res5[0x200 - 0x1c4]; +} __attribute__ ((packed)) uec_t; + +/* QE UCC Fast */ +typedef struct ucc_fast { +	u32 gumr;		/* UCCx general mode register */ +	u32 upsmr;		/* UCCx protocol-specific mode register  */ +	u16 utodr;		/* UCCx transmit on demand register  */ +	u8 res0[0x2]; +	u16 udsr;		/* UCCx data synchronization register  */ +	u8 res1[0x2]; +	u32 ucce;		/* UCCx event register */ +	u32 uccm;		/* UCCx mask register.  */ +	u8 uccs;		/* UCCx status register */ +	u8 res2[0x7]; +	u32 urfb;		/* UCC receive FIFO base */ +	u16 urfs;		/* UCC receive FIFO size */ +	u8 res3[0x2]; +	u16 urfet;		/* UCC receive FIFO emergency threshold */ +	u16 urfset;		/* UCC receive FIFO special emergency +				 * threshold */ +	u32 utfb;		/* UCC transmit FIFO base */ +	u16 utfs;		/* UCC transmit FIFO size */ +	u8 res4[0x2]; +	u16 utfet;		/* UCC transmit FIFO emergency threshold */ +	u8 res5[0x2]; +	u16 utftt;		/* UCC transmit FIFO transmit threshold */ +	u8 res6[0x2]; +	u16 utpt;		/* UCC transmit polling timer */ +	u8 res7[0x2]; +	u32 urtry;		/* UCC retry counter register */ +	u8 res8[0x4C]; +	u8 guemr;		/* UCC general extended mode register */ +	u8 res9[0x100 - 0x091]; +	uec_t ucc_eth; +} __attribute__ ((packed)) ucc_fast_t; + +/* QE UCC */ +typedef struct ucc_common { +	u8 res1[0x90]; +	u8 guemr; +	u8 res2[0x200 - 0x091]; +} __attribute__ ((packed)) ucc_common_t; + +typedef struct ucc { +	union { +		ucc_slow_t slow; +		ucc_fast_t fast; +		ucc_common_t common; +	}; +} __attribute__ ((packed)) ucc_t; + +/* MultiPHY UTOPIA POS Controllers (UPC) */ +typedef struct upc { +	u32 upgcr;		/* UTOPIA/POS general configuration register */ +	u32 uplpa;		/* UTOPIA/POS last PHY address */ +	u32 uphec;		/* ATM HEC register */ +	u32 upuc;		/* UTOPIA/POS UCC configuration */ +	u32 updc1;		/* UTOPIA/POS device 1 configuration */ +	u32 updc2;		/* UTOPIA/POS device 2 configuration  */ +	u32 updc3;		/* UTOPIA/POS device 3 configuration */ +	u32 updc4;		/* UTOPIA/POS device 4 configuration  */ +	u32 upstpa;		/* UTOPIA/POS STPA threshold  */ +	u8 res0[0xC]; +	u32 updrs1_h;		/* UTOPIA/POS device 1 rate select  */ +	u32 updrs1_l;		/* UTOPIA/POS device 1 rate select  */ +	u32 updrs2_h;		/* UTOPIA/POS device 2 rate select  */ +	u32 updrs2_l;		/* UTOPIA/POS device 2 rate select */ +	u32 updrs3_h;		/* UTOPIA/POS device 3 rate select */ +	u32 updrs3_l;		/* UTOPIA/POS device 3 rate select */ +	u32 updrs4_h;		/* UTOPIA/POS device 4 rate select */ +	u32 updrs4_l;		/* UTOPIA/POS device 4 rate select */ +	u32 updrp1;		/* UTOPIA/POS device 1 receive priority low  */ +	u32 updrp2;		/* UTOPIA/POS device 2 receive priority low  */ +	u32 updrp3;		/* UTOPIA/POS device 3 receive priority low  */ +	u32 updrp4;		/* UTOPIA/POS device 4 receive priority low  */ +	u32 upde1;		/* UTOPIA/POS device 1 event */ +	u32 upde2;		/* UTOPIA/POS device 2 event */ +	u32 upde3;		/* UTOPIA/POS device 3 event */ +	u32 upde4;		/* UTOPIA/POS device 4 event */ +	u16 uprp1; +	u16 uprp2; +	u16 uprp3; +	u16 uprp4; +	u8 res1[0x8]; +	u16 uptirr1_0;		/* Device 1 transmit internal rate 0 */ +	u16 uptirr1_1;		/* Device 1 transmit internal rate 1 */ +	u16 uptirr1_2;		/* Device 1 transmit internal rate 2 */ +	u16 uptirr1_3;		/* Device 1 transmit internal rate 3 */ +	u16 uptirr2_0;		/* Device 2 transmit internal rate 0 */ +	u16 uptirr2_1;		/* Device 2 transmit internal rate 1 */ +	u16 uptirr2_2;		/* Device 2 transmit internal rate 2 */ +	u16 uptirr2_3;		/* Device 2 transmit internal rate 3 */ +	u16 uptirr3_0;		/* Device 3 transmit internal rate 0 */ +	u16 uptirr3_1;		/* Device 3 transmit internal rate 1 */ +	u16 uptirr3_2;		/* Device 3 transmit internal rate 2 */ +	u16 uptirr3_3;		/* Device 3 transmit internal rate 3 */ +	u16 uptirr4_0;		/* Device 4 transmit internal rate 0 */ +	u16 uptirr4_1;		/* Device 4 transmit internal rate 1 */ +	u16 uptirr4_2;		/* Device 4 transmit internal rate 2 */ +	u16 uptirr4_3;		/* Device 4 transmit internal rate 3 */ +	u32 uper1;		/* Device 1 port enable register */ +	u32 uper2;		/* Device 2 port enable register */ +	u32 uper3;		/* Device 3 port enable register */ +	u32 uper4;		/* Device 4 port enable register */ +	u8 res2[0x150]; +} __attribute__ ((packed)) upc_t; + +/* SDMA */ +typedef struct sdma { +	u32 sdsr;		/* Serial DMA status register */ +	u32 sdmr;		/* Serial DMA mode register */ +	u32 sdtr1;		/* SDMA system bus threshold register */ +	u32 sdtr2;		/* SDMA secondary bus threshold register */ +	u32 sdhy1;		/* SDMA system bus hysteresis register */ +	u32 sdhy2;		/* SDMA secondary bus hysteresis register */ +	u32 sdta1;		/* SDMA system bus address register */ +	u32 sdta2;		/* SDMA secondary bus address register */ +	u32 sdtm1;		/* SDMA system bus MSNUM register */ +	u32 sdtm2;		/* SDMA secondary bus MSNUM register */ +	u8 res0[0x10]; +	u32 sdaqr;		/* SDMA address bus qualify register */ +	u32 sdaqmr;		/* SDMA address bus qualify mask register */ +	u8 res1[0x4]; +	u32 sdwbcr;		/* SDMA CAM entries base register */ +	u8 res2[0x38]; +} __attribute__ ((packed)) sdma_t; + +/* Debug Space */ +typedef struct dbg { +	u32 bpdcr;		/* Breakpoint debug command register */ +	u32 bpdsr;		/* Breakpoint debug status register */ +	u32 bpdmr;		/* Breakpoint debug mask register */ +	u32 bprmrr0;		/* Breakpoint request mode risc register 0 */ +	u32 bprmrr1;		/* Breakpoint request mode risc register 1 */ +	u8 res0[0x8]; +	u32 bprmtr0;		/* Breakpoint request mode trb register 0 */ +	u32 bprmtr1;		/* Breakpoint request mode trb register 1 */ +	u8 res1[0x8]; +	u32 bprmir;		/* Breakpoint request mode immediate register */ +	u32 bprmsr;		/* Breakpoint request mode serial register */ +	u32 bpemr;		/* Breakpoint exit mode register */ +	u8 res2[0x48]; +} __attribute__ ((packed)) dbg_t; + +/* + * RISC Special Registers (Trap and Breakpoint).  These are described in + * the QE Developer's Handbook. +*/ +typedef struct rsp { +	u32 tibcr[16];	/* Trap/instruction breakpoint control regs */ +	u8 res0[64]; +	u32 ibcr0; +	u32 ibs0; +	u32 ibcnr0; +	u8 res1[4]; +	u32 ibcr1; +	u32 ibs1; +	u32 ibcnr1; +	u32 npcr; +	u32 dbcr; +	u32 dbar; +	u32 dbamr; +	u32 dbsr; +	u32 dbcnr; +	u8 res2[12]; +	u32 dbdr_h; +	u32 dbdr_l; +	u32 dbdmr_h; +	u32 dbdmr_l; +	u32 bsr; +	u32 bor; +	u32 bior; +	u8 res3[4]; +	u32 iatr[4]; +	u32 eccr;		/* Exception control configuration register */ +	u32 eicr; +	u8 res4[0x100-0xf8]; +} __attribute__ ((packed)) rsp_t; + +typedef struct qe_immap { +	qe_iram_t iram;		/* I-RAM */ +	qe_ic_t ic;		/* Interrupt Controller */ +	cp_qe_t cp;		/* Communications Processor */ +	qe_mux_t qmx;		/* QE Multiplexer */ +	qe_timers_t qet;	/* QE Timers */ +	spi_t spi[0x2];		/* spi  */ +	mcc_t mcc;		/* mcc */ +	qe_brg_t brg;		/* brg */ +	usb_t usb;		/* USB */ +	si1_t si1;		/* SI */ +	u8 res11[0x800]; +	sir_t sir;		/* SI Routing Tables  */ +	ucc_t ucc1;		/* ucc1 */ +	ucc_t ucc3;		/* ucc3 */ +	ucc_t ucc5;		/* ucc5 */ +	ucc_t ucc7;		/* ucc7 */ +	u8 res12[0x600]; +	upc_t upc1;		/* MultiPHY UTOPIA POS Controller 1 */ +	ucc_t ucc2;		/* ucc2 */ +	ucc_t ucc4;		/* ucc4 */ +	ucc_t ucc6;		/* ucc6 */ +	ucc_t ucc8;		/* ucc8 */ +	u8 res13[0x600]; +	upc_t upc2;		/* MultiPHY UTOPIA POS Controller 2 */ +	sdma_t sdma;		/* SDMA */ +	dbg_t dbg;		/* Debug Space */ +	rsp_t rsp[0x2];		/* RISC Special Registers +				 * (Trap and Breakpoint) */ +	u8 res14[0x300]; +	u8 res15[0x3A00]; +	u8 res16[0x8000];	/* 0x108000 -  0x110000 */ +	u8 muram[QE_MURAM_SIZE]; +} __attribute__ ((packed)) qe_map_t; + +extern qe_map_t *qe_immr; + +#endif				/* __IMMAP_QE_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/interrupt.h b/roms/u-boot/arch/powerpc/include/asm/interrupt.h new file mode 100644 index 00000000..1a6a9338 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/interrupt.h @@ -0,0 +1,25 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef INTERRUPT_H +#define INTERRUPT_H + +#if defined(CONFIG_XILINX_440) +#include <asm/xilinx_irq.h> +#else +#include <asm/ppc4xx-uic.h> +#endif + +void pic_enable(void); +void pic_irq_enable(unsigned int irq); +void pic_irq_disable(unsigned int irq); +void pic_irq_ack(unsigned int irq); +void external_interrupt(struct pt_regs *regs); +void interrupt_run_handler(int vec); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/io.h b/roms/u-boot/arch/powerpc/include/asm/io.h new file mode 100644 index 00000000..d8b7b974 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/io.h @@ -0,0 +1,319 @@ +/* originally from linux source. + * removed the dependencies on CONFIG_ values + * removed virt_to_phys stuff (and in fact everything surrounded by #if __KERNEL__) + * Modified By Rob Taylor, Flying Pig Systems, 2000 + */ + +#ifndef _PPC_IO_H +#define _PPC_IO_H + +#include <asm/byteorder.h> + +#ifdef CONFIG_ADDR_MAP +#include <addr_map.h> +#endif + +#define SIO_CONFIG_RA   0x398 +#define SIO_CONFIG_RD   0x399 + +#ifndef _IO_BASE +#define _IO_BASE 0 +#endif + +#define readb(addr) in_8((volatile u8 *)(addr)) +#define writeb(b,addr) out_8((volatile u8 *)(addr), (b)) +#if !defined(__BIG_ENDIAN) +#define readw(addr) (*(volatile u16 *) (addr)) +#define readl(addr) (*(volatile u32 *) (addr)) +#define writew(b,addr) ((*(volatile u16 *) (addr)) = (b)) +#define writel(b,addr) ((*(volatile u32 *) (addr)) = (b)) +#else +#define readw(addr) in_le16((volatile u16 *)(addr)) +#define readl(addr) in_le32((volatile u32 *)(addr)) +#define writew(b,addr) out_le16((volatile u16 *)(addr),(b)) +#define writel(b,addr) out_le32((volatile u32 *)(addr),(b)) +#endif + +/* + * The insw/outsw/insl/outsl macros don't do byte-swapping. + * They are only used in practice for transferring buffers which + * are arrays of bytes, and byte-swapping is not appropriate in + * that case.  - paulus + */ +#define insb(port, buf, ns) _insb((u8 *)((port)+_IO_BASE), (buf), (ns)) +#define outsb(port, buf, ns)    _outsb((u8 *)((port)+_IO_BASE), (buf), (ns)) +#define insw(port, buf, ns) _insw_ns((u16 *)((port)+_IO_BASE), (buf), (ns)) +#define outsw(port, buf, ns)    _outsw_ns((u16 *)((port)+_IO_BASE), (buf), (ns)) +#define insl(port, buf, nl) _insl_ns((u32 *)((port)+_IO_BASE), (buf), (nl)) +#define outsl(port, buf, nl)    _outsl_ns((u32 *)((port)+_IO_BASE), (buf), (nl)) + +#define inb(port)       in_8((u8 *)((port)+_IO_BASE)) +#define outb(val, port)     out_8((u8 *)((port)+_IO_BASE), (val)) +#if !defined(__BIG_ENDIAN) +#define inw(port)       in_be16((u16 *)((port)+_IO_BASE)) +#define outw(val, port)     out_be16((u16 *)((port)+_IO_BASE), (val)) +#define inl(port)       in_be32((u32 *)((port)+_IO_BASE)) +#define outl(val, port)     out_be32((u32 *)((port)+_IO_BASE), (val)) +#else +#define inw(port)       in_le16((u16 *)((port)+_IO_BASE)) +#define outw(val, port)     out_le16((u16 *)((port)+_IO_BASE), (val)) +#define inl(port)       in_le32((u32 *)((port)+_IO_BASE)) +#define outl(val, port)     out_le32((u32 *)((port)+_IO_BASE), (val)) +#endif + +#define inb_p(port)     in_8((u8 *)((port)+_IO_BASE)) +#define outb_p(val, port)   out_8((u8 *)((port)+_IO_BASE), (val)) +#define inw_p(port)     in_le16((u16 *)((port)+_IO_BASE)) +#define outw_p(val, port)   out_le16((u16 *)((port)+_IO_BASE), (val)) +#define inl_p(port)     in_le32((u32 *)((port)+_IO_BASE)) +#define outl_p(val, port)   out_le32((u32 *)((port)+_IO_BASE), (val)) + +extern void _insb(volatile u8 *port, void *buf, int ns); +extern void _outsb(volatile u8 *port, const void *buf, int ns); +extern void _insw(volatile u16 *port, void *buf, int ns); +extern void _outsw(volatile u16 *port, const void *buf, int ns); +extern void _insl(volatile u32 *port, void *buf, int nl); +extern void _outsl(volatile u32 *port, const void *buf, int nl); +extern void _insw_ns(volatile u16 *port, void *buf, int ns); +extern void _outsw_ns(volatile u16 *port, const void *buf, int ns); +extern void _insl_ns(volatile u32 *port, void *buf, int nl); +extern void _outsl_ns(volatile u32 *port, const void *buf, int nl); + +/* + * The *_ns versions below don't do byte-swapping. + * Neither do the standard versions now, these are just here + * for older code. + */ +#define insw_ns(port, buf, ns)  _insw_ns((u16 *)((port)+_IO_BASE), (buf), (ns)) +#define outsw_ns(port, buf, ns) _outsw_ns((u16 *)((port)+_IO_BASE), (buf), (ns)) +#define insl_ns(port, buf, nl)  _insl_ns((u32 *)((port)+_IO_BASE), (buf), (nl)) +#define outsl_ns(port, buf, nl) _outsl_ns((u32 *)((port)+_IO_BASE), (buf), (nl)) + + +#define IO_SPACE_LIMIT ~0 + +#define memset_io(a,b,c)       memset((void *)(a),(b),(c)) +#define memcpy_fromio(a,b,c)   memcpy((a),(void *)(b),(c)) +#define memcpy_toio(a,b,c)  memcpy((void *)(a),(b),(c)) + +/* + * Enforce In-order Execution of I/O: + * Acts as a barrier to ensure all previous I/O accesses have + * completed before any further ones are issued. + */ +static inline void eieio(void) +{ +	__asm__ __volatile__ ("eieio" : : : "memory"); +} + +static inline void sync(void) +{ +	__asm__ __volatile__ ("sync" : : : "memory"); +} + +static inline void isync(void) +{ +	__asm__ __volatile__ ("isync" : : : "memory"); +} + +/* Enforce in-order execution of data I/O. + * No distinction between read/write on PPC; use eieio for all three. + */ +#define iobarrier_rw() eieio() +#define iobarrier_r()  eieio() +#define iobarrier_w()  eieio() + +/* + * Non ordered and non-swapping "raw" accessors + */ +#define PCI_FIX_ADDR(addr)	(addr) + +static inline unsigned char __raw_readb(const volatile void __iomem *addr) +{ +	return *(volatile unsigned char *)PCI_FIX_ADDR(addr); +} +static inline unsigned short __raw_readw(const volatile void __iomem *addr) +{ +	return *(volatile unsigned short *)PCI_FIX_ADDR(addr); +} +static inline unsigned int __raw_readl(const volatile void __iomem *addr) +{ +	return *(volatile unsigned int *)PCI_FIX_ADDR(addr); +} +static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr) +{ +	*(volatile unsigned char *)PCI_FIX_ADDR(addr) = v; +} +static inline void __raw_writew(unsigned short v, volatile void __iomem *addr) +{ +	*(volatile unsigned short *)PCI_FIX_ADDR(addr) = v; +} +static inline void __raw_writel(unsigned int v, volatile void __iomem *addr) +{ +	*(volatile unsigned int *)PCI_FIX_ADDR(addr) = v; +} + +/* + * 8, 16 and 32 bit, big and little endian I/O operations, with barrier. + * + * Read operations have additional twi & isync to make sure the read + * is actually performed (i.e. the data has come back) before we start + * executing any following instructions. + */ +extern inline u8 in_8(const volatile unsigned char __iomem *addr) +{ +	u8 ret; + +	__asm__ __volatile__( +		"sync; lbz%U1%X1 %0,%1;\n" +		"twi 0,%0,0;\n" +		"isync" : "=r" (ret) : "m" (*addr)); +	return ret; +} + +extern inline void out_8(volatile unsigned char __iomem *addr, u8 val) +{ +	__asm__ __volatile__("sync;\n" +			     "stb%U0%X0 %1,%0;\n" +			     : "=m" (*addr) +			     : "r" (val)); +} + +extern inline u16 in_le16(const volatile unsigned short __iomem *addr) +{ +	u16 ret; + +	__asm__ __volatile__("sync; lhbrx %0,0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : +			      "r" (addr), "m" (*addr)); +	return ret; +} + +extern inline u16 in_be16(const volatile unsigned short __iomem *addr) +{ +	u16 ret; + +	__asm__ __volatile__("sync; lhz%U1%X1 %0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : "m" (*addr)); +	return ret; +} + +extern inline void out_le16(volatile unsigned short __iomem *addr, u16 val) +{ +	__asm__ __volatile__("sync; sthbrx %1,0,%2" : "=m" (*addr) : +			      "r" (val), "r" (addr)); +} + +extern inline void out_be16(volatile unsigned short __iomem *addr, u16 val) +{ +	__asm__ __volatile__("sync; sth%U0%X0 %1,%0" : "=m" (*addr) : "r" (val)); +} + +extern inline u32 in_le32(const volatile unsigned __iomem *addr) +{ +	u32 ret; + +	__asm__ __volatile__("sync; lwbrx %0,0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : +			     "r" (addr), "m" (*addr)); +	return ret; +} + +extern inline u32 in_be32(const volatile unsigned __iomem *addr) +{ +	u32 ret; + +	__asm__ __volatile__("sync; lwz%U1%X1 %0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : "m" (*addr)); +	return ret; +} + +extern inline void out_le32(volatile unsigned __iomem *addr, u32 val) +{ +	__asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr) : +			     "r" (val), "r" (addr)); +} + +extern inline void out_be32(volatile unsigned __iomem *addr, u32 val) +{ +	__asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val)); +} + +/* Clear and set bits in one shot. These macros can be used to clear and + * set multiple bits in a register using a single call. These macros can + * also be used to set a multiple-bit bit pattern using a mask, by + * specifying the mask in the 'clear' parameter and the new bit pattern + * in the 'set' parameter. + */ + +#define clrbits(type, addr, clear) \ +	out_##type((addr), in_##type(addr) & ~(clear)) + +#define setbits(type, addr, set) \ +	out_##type((addr), in_##type(addr) | (set)) + +#define clrsetbits(type, addr, clear, set) \ +	out_##type((addr), (in_##type(addr) & ~(clear)) | (set)) + +#define clrbits_be32(addr, clear) clrbits(be32, addr, clear) +#define setbits_be32(addr, set) setbits(be32, addr, set) +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set) + +#define clrbits_le32(addr, clear) clrbits(le32, addr, clear) +#define setbits_le32(addr, set) setbits(le32, addr, set) +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) + +#define clrbits_be16(addr, clear) clrbits(be16, addr, clear) +#define setbits_be16(addr, set) setbits(be16, addr, set) +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set) + +#define clrbits_le16(addr, clear) clrbits(le16, addr, clear) +#define setbits_le16(addr, set) setbits(le16, addr, set) +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set) + +#define clrbits_8(addr, clear) clrbits(8, addr, clear) +#define setbits_8(addr, set) setbits(8, addr, set) +#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set) + +/* + * Given a physical address and a length, return a virtual address + * that can be used to access the memory range with the caching + * properties specified by "flags". + */ +#define MAP_NOCACHE	(0) +#define MAP_WRCOMBINE	(0) +#define MAP_WRBACK	(0) +#define MAP_WRTHROUGH	(0) + +static inline void * +map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags) +{ +#ifdef CONFIG_ADDR_MAP +	return addrmap_phys_to_virt(paddr); +#else +	return (void *)((unsigned long)paddr); +#endif +} + +/* + * Take down a mapping set up by map_physmem(). + */ +static inline void unmap_physmem(void *vaddr, unsigned long flags) +{ + +} + +static inline phys_addr_t virt_to_phys(void * vaddr) +{ +#ifdef CONFIG_ADDR_MAP +	return addrmap_virt_to_phys(vaddr); +#else +	return (phys_addr_t)((unsigned long)vaddr); +#endif +} + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/iopin_8260.h b/roms/u-boot/arch/powerpc/include/asm/iopin_8260.h new file mode 100644 index 00000000..619f3a8a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/iopin_8260.h @@ -0,0 +1,168 @@ +/* + * MPC8260 I/O port pin manipulation functions + */ + +#ifndef _ASM_IOPIN_8260_H_ +#define _ASM_IOPIN_8260_H_ + +#include <linux/types.h> +#include <asm/immap_8260.h> + +#ifdef __KERNEL__ + +typedef +    struct { +	u_char port:2;	/* port number (A=0, B=1, C=2, D=3) */ +	u_char pin:5;	/* port pin (0-31) */ +	u_char flag:1;	/* for whatever */ +    } +iopin_t; + +#define IOPIN_PORTA	0 +#define IOPIN_PORTB	1 +#define IOPIN_PORTC	2 +#define IOPIN_PORTD	3 + +extern __inline__ void +iopin_set_high(iopin_t *iopin) +{ +    volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; +    datp[iopin->port * 8] |= (1 << (31 - iopin->pin)); +} + +extern __inline__ void +iopin_set_low(iopin_t *iopin) +{ +    volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; +    datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); +} + +extern __inline__ uint +iopin_is_high(iopin_t *iopin) +{ +    volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; +    return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1; +} + +extern __inline__ uint +iopin_is_low(iopin_t *iopin) +{ +    volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; +    return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; +} + +extern __inline__ void +iopin_set_out(iopin_t *iopin) +{ +    volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; +    dirp[iopin->port * 8] |= (1 << (31 - iopin->pin)); +} + +extern __inline__ void +iopin_set_in(iopin_t *iopin) +{ +    volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; +    dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); +} + +extern __inline__ uint +iopin_is_out(iopin_t *iopin) +{ +    volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; +    return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1; +} + +extern __inline__ uint +iopin_is_in(iopin_t *iopin) +{ +    volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; +    return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; +} + +extern __inline__ void +iopin_set_odr(iopin_t *iopin) +{ +    volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; +    odrp[iopin->port * 8] |= (1 << (31 - iopin->pin)); +} + +extern __inline__ void +iopin_set_act(iopin_t *iopin) +{ +    volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; +    odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); +} + +extern __inline__ uint +iopin_is_odr(iopin_t *iopin) +{ +    volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; +    return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1; +} + +extern __inline__ uint +iopin_is_act(iopin_t *iopin) +{ +    volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; +    return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; +} + +extern __inline__ void +iopin_set_ded(iopin_t *iopin) +{ +    volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; +    parp[iopin->port * 8] |= (1 << (31 - iopin->pin)); +} + +extern __inline__ void +iopin_set_gen(iopin_t *iopin) +{ +    volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; +    parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); +} + +extern __inline__ uint +iopin_is_ded(iopin_t *iopin) +{ +    volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; +    return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1; +} + +extern __inline__ uint +iopin_is_gen(iopin_t *iopin) +{ +    volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; +    return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; +} + +extern __inline__ void +iopin_set_opt2(iopin_t *iopin) +{ +    volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; +    sorp[iopin->port * 8] |= (1 << (31 - iopin->pin)); +} + +extern __inline__ void +iopin_set_opt1(iopin_t *iopin) +{ +    volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; +    sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); +} + +extern __inline__ uint +iopin_is_opt2(iopin_t *iopin) +{ +    volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; +    return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1; +} + +extern __inline__ uint +iopin_is_opt1(iopin_t *iopin) +{ +    volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; +    return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; +} + +#endif /* __KERNEL__ */ + +#endif /* _ASM_IOPIN_8260_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/iopin_8xx.h b/roms/u-boot/arch/powerpc/include/asm/iopin_8xx.h new file mode 100644 index 00000000..0123bafc --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/iopin_8xx.h @@ -0,0 +1,379 @@ +/* + * SPDX-License-Identifier:	GPL-2.0+ + */ + +/* + * MPC8xx I/O port pin manipulation functions + * Roughly based on iopin_8260.h + */ + +#ifndef _ASM_IOPIN_8XX_H_ +#define _ASM_IOPIN_8XX_H_ + +#include <linux/types.h> +#include <asm/8xx_immap.h> + +#ifdef __KERNEL__ + +typedef struct { +	u_char port:2;	/* port number (A=0, B=1, C=2, D=3) */ +	u_char pin:5;	/* port pin (0-31) */ +	u_char flag:1;	/* for whatever */ +} iopin_t; + +#define IOPIN_PORTA	0 +#define IOPIN_PORTB	1 +#define IOPIN_PORTC	2 +#define IOPIN_PORTD	3 + +extern __inline__ void +iopin_set_high(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padat; +		*datp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat; +		*datp |= (1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdat; +		*datp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddat; +		*datp |= (1 << (15 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_low(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padat; +		*datp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat; +		*datp &= ~(1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdat; +		*datp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddat; +		*datp &= ~(1 << (15 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_high(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padat; +		return (*datp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat; +		return (*datp >> (31 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdat; +		return (*datp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddat; +		return (*datp >> (15 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_low(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padat; +		return ((*datp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdat; +		return ((*datp >> (31 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdat; +		return ((*datp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddat; +		return ((*datp >> (15 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +extern __inline__ void +iopin_set_out(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padir; +		*dirp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir; +		*dirp |= (1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdir; +		*dirp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddir; +		*dirp |= (1 << (15 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_in(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padir; +		*dirp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir; +		*dirp &= ~(1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdir; +		*dirp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddir; +		*dirp &= ~(1 << (15 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_out(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padir; +		return (*dirp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir; +		return (*dirp >> (31 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdir; +		return (*dirp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddir; +		return (*dirp >> (15 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_in(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_padir; +		return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbdir; +		return ((*dirp >> (31 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcdir; +		return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pddir; +		return ((*dirp >> (15 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +extern __inline__ void +iopin_set_odr(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_paodr; +		*odrp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr; +		*odrp |= (1 << (31 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_act(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_paodr; +		*odrp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr; +		*odrp &= ~(1 << (31 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_odr(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_paodr; +		return (*odrp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr; +		return (*odrp >> (31 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_act(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_paodr; +		return ((*odrp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile ushort *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbodr; +		return ((*odrp >> (31 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +extern __inline__ void +iopin_set_ded(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_papar; +		*parp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar; +		*parp |= (1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcpar; +		*parp |= (1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdpar; +		*parp |= (1 << (15 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_gen(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_papar; +		*parp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar; +		*parp &= ~(1 << (31 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcpar; +		*parp &= ~(1 << (15 - iopin->pin)); +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdpar; +		*parp &= ~(1 << (15 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_ded(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_papar; +		return (*parp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar; +		return (*parp >> (31 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcpar; +		return (*parp >> (15 - iopin->pin)) & 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdpar; +		return (*parp >> (15 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_gen(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTA) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_papar; +		return ((*parp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTB) { +		volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_cpm.cp_pbpar; +		return ((*parp >> (31 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTC) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcpar; +		return ((*parp >> (15 - iopin->pin)) & 1) ^ 1; +	} else if (iopin->port == IOPIN_PORTD) { +		volatile ushort *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdpar; +		return ((*parp >> (15 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +extern __inline__ void +iopin_set_opt2(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcso; +		*sorp |= (1 << (15 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_opt1(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcso; +		*sorp &= ~(1 << (15 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_opt2(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcso; +		return (*sorp >> (15 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_opt1(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcso; +		return ((*sorp >> (15 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +extern __inline__ void +iopin_set_falledge(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *intp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcint; +		*intp |= (1 << (15 - iopin->pin)); +	} +} + +extern __inline__ void +iopin_set_anyedge(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *intp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcint; +		*intp &= ~(1 << (15 - iopin->pin)); +	} +} + +extern __inline__ uint +iopin_is_falledge(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *intp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcint; +		return (*intp >> (15 - iopin->pin)) & 1; +	} +	return 0; +} + +extern __inline__ uint +iopin_is_anyedge(iopin_t *iopin) +{ +	if (iopin->port == IOPIN_PORTC) { +		volatile ushort *intp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pcint; +		return ((*intp >> (15 - iopin->pin)) & 1) ^ 1; +	} +	return 0; +} + +#endif /* __KERNEL__ */ + +#endif /* _ASM_IOPIN_8XX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/m8260_pci.h b/roms/u-boot/arch/powerpc/include/asm/m8260_pci.h new file mode 100644 index 00000000..6daca4f9 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/m8260_pci.h @@ -0,0 +1,165 @@ +#ifndef _PPC_KERNEL_M8260_PCI_H +#define _PPC_KERNEL_M8260_PCI_H + +#define M8265_PCIBR0	0x101ac +#define M8265_PCIBR1	0x101b0 +#define M8265_PCIMSK0	0x101c4 +#define M8265_PCIMSK1	0x101c8 + +/* Bit definitions for PCIBR registers */ + +#define PCIBR_ENABLE        0x00000001 + +/* Bit definitions for PCIMSK registers */ + +#define PCIMSK_32KB         0xFFFF8000  /* Size of window, smallest */ +#define PCIMSK_64KB         0xFFFF0000 +#define PCIMSK_128KB        0xFFFE0000 +#define PCIMSK_256KB        0xFFFC0000 +#define PCIMSK_512KB        0xFFF80000 +#define PCIMSK_1MB          0xFFF00000 +#define PCIMSK_2MB          0xFFE00000 +#define PCIMSK_4MB          0xFFC00000 +#define PCIMSK_8MB          0xFF800000 +#define PCIMSK_16MB         0xFF000000 +#define PCIMSK_32MB         0xFE000000 +#define PCIMSK_64MB         0xFC000000 +#define PCIMSK_128MB        0xF8000000 +#define PCIMSK_256MB        0xF0000000 +#define PCIMSK_512MB        0xE0000000 +#define PCIMSK_1GB          0xC0000000  /* Size of window, largest */ + + +#define M826X_SCCR_PCI_MODE_EN 0x100 + + +/* + * Outbound ATU registers (3 sets). These registers control how 60x bus (local) + * addresses are translated to PCI addresses when the MPC826x is a PCI bus + * master (initiator). + */ + +#define POTAR_REG0          0x10800     /* PCI Outbound Translation Addr registers */ +#define POTAR_REG1          0x10818 +#define POTAR_REG2          0x10830 + +#define POBAR_REG0          0x10808     /* PCI Outbound Base Addr registers */ +#define POBAR_REG1          0x10820 +#define POBAR_REG2          0x10838 + +#define POCMR_REG0          0x10810     /* PCI Outbound Comparison Mask registers */ +#define POCMR_REG1          0x10828 +#define POCMR_REG2          0x10840 + +/* Bit definitions for POMCR registers */ + +#define POCMR_MASK_4KB      0x000FFFFF +#define POCMR_MASK_8KB      0x000FFFFE +#define POCMR_MASK_16KB     0x000FFFFC +#define POCMR_MASK_32KB     0x000FFFF8 +#define POCMR_MASK_64KB     0x000FFFF0 +#define POCMR_MASK_128KB    0x000FFFE0 +#define POCMR_MASK_256KB    0x000FFFC0 +#define POCMR_MASK_512KB    0x000FFF80 +#define POCMR_MASK_1MB      0x000FFF00 +#define POCMR_MASK_2MB      0x000FFE00 +#define POCMR_MASK_4MB      0x000FFC00 +#define POCMR_MASK_8MB      0x000FF800 +#define POCMR_MASK_16MB     0x000FF000 +#define POCMR_MASK_32MB     0x000FE000 +#define POCMR_MASK_64MB     0x000FC000 +#define POCMR_MASK_128MB    0x000F8000 +#define POCMR_MASK_256MB    0x000F0000 +#define POCMR_MASK_512MB    0x000E0000 +#define POCMR_MASK_1GB      0x000C0000 + +#define POCMR_ENABLE        0x80000000 +#define POCMR_PCI_IO        0x40000000 +#define POCMR_PREFETCH_EN   0x20000000 + +/* Soft PCI reset */ + +#define PCI_GCR_REG         0x10880 + +/* Bit definitions for PCI_GCR registers */ + +#define PCIGCR_PCI_BUS_EN   0x1 + +/* + * Inbound ATU registers (2 sets). These registers control how PCI addresses + * are translated to 60x bus (local) addresses when the MPC826x is a PCI bus target. + */ + +#define PITAR_REG1          0x108D0 +#define PIBAR_REG1          0x108D8 +#define PICMR_REG1          0x108E0 +#define PITAR_REG0          0x108E8 +#define PIBAR_REG0          0x108F0 +#define PICMR_REG0          0x108F8 + +/* Bit definitions for PCI Inbound Comparison Mask registers */ + +#define PICMR_MASK_4KB       0x000FFFFF +#define PICMR_MASK_8KB       0x000FFFFE +#define PICMR_MASK_16KB      0x000FFFFC +#define PICMR_MASK_32KB      0x000FFFF8 +#define PICMR_MASK_64KB      0x000FFFF0 +#define PICMR_MASK_128KB     0x000FFFE0 +#define PICMR_MASK_256KB     0x000FFFC0 +#define PICMR_MASK_512KB     0x000FFF80 +#define PICMR_MASK_1MB       0x000FFF00 +#define PICMR_MASK_2MB       0x000FFE00 +#define PICMR_MASK_4MB       0x000FFC00 +#define PICMR_MASK_8MB       0x000FF800 +#define PICMR_MASK_16MB      0x000FF000 +#define PICMR_MASK_32MB      0x000FE000 +#define PICMR_MASK_64MB      0x000FC000 +#define PICMR_MASK_128MB     0x000F8000 +#define PICMR_MASK_256MB     0x000F0000 +#define PICMR_MASK_512MB     0x000E0000 +#define PICMR_MASK_1GB       0x000C0000 + +#define PICMR_ENABLE         0x80000000 +#define PICMR_NO_SNOOP_EN    0x40000000 +#define PICMR_PREFETCH_EN    0x20000000 + +/* PCI error Registers */ + +#define	PCI_ERROR_STATUS_REG		0x10884 +#define	PCI_ERROR_MASK_REG		0x10888 +#define	PCI_ERROR_CONTROL_REG		0x1088C +#define PCI_ERROR_ADRS_CAPTURE_REG      0x10890 +#define PCI_ERROR_DATA_CAPTURE_REG      0x10898 +#define PCI_ERROR_CTRL_CAPTURE_REG      0x108A0 + +/* PCI error Register bit defines */ + +#define	PCI_ERROR_PCI_ADDR_PAR			0x00000001 +#define	PCI_ERROR_PCI_DATA_PAR_WR		0x00000002 +#define	PCI_ERROR_PCI_DATA_PAR_RD		0x00000004 +#define	PCI_ERROR_PCI_NO_RSP			0x00000008 +#define	PCI_ERROR_PCI_TAR_ABT			0x00000010 +#define	PCI_ERROR_PCI_SERR			0x00000020 +#define	PCI_ERROR_PCI_PERR_RD			0x00000040 +#define	PCI_ERROR_PCI_PERR_WR			0x00000080 +#define	PCI_ERROR_I2O_OFQO			0x00000100 +#define	PCI_ERROR_I2O_IPQO			0x00000200 +#define	PCI_ERROR_IRA				0x00000400 +#define	PCI_ERROR_NMI				0x00000800 +#define	PCI_ERROR_I2O_DBMC			0x00001000 + +/* + * Register pair used to generate configuration cycles on the PCI bus + * and access the MPC826x's own PCI configuration registers. + */ + +#define PCI_CFG_ADDR_REG     0x10900 +#define PCI_CFG_DATA_REG     0x10904 + +/* Bus parking decides where the bus control sits when idle */ +/* If modifying memory controllers for PCI park on the core */ + +#define PPC_ACR_BUS_PARK_CORE 0x6 +#define PPC_ACR_BUS_PARK_PCI  0x3 + +#endif /* _PPC_KERNEL_M8260_PCI_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mc146818rtc.h b/roms/u-boot/arch/powerpc/include/asm/mc146818rtc.h new file mode 100644 index 00000000..5f806c4e --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mc146818rtc.h @@ -0,0 +1,27 @@ +/* + * Machine dependent access functions for RTC registers. + */ +#ifndef __ASM_PPC_MC146818RTC_H +#define __ASM_PPC_MC146818RTC_H + +#include <asm/io.h> + +#ifndef RTC_PORT +#define RTC_PORT(x) (0x70 + (x)) +#define RTC_ALWAYS_BCD  1   /* RTC operates in binary mode */ +#endif + +/* + * The yet supported machines all access the RTC index register via + * an ISA port access but the way to access the date register differs ... + */ +#define CMOS_READ(addr) ({ \ +outb_p((addr),RTC_PORT(0)); \ +inb_p(RTC_PORT(1)); \ +}) +#define CMOS_WRITE(val, addr) ({ \ +outb_p((addr),RTC_PORT(0)); \ +outb_p((val),RTC_PORT(1)); \ +}) + +#endif /* __ASM_PPC_MC146818RTC_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mmu.h b/roms/u-boot/arch/powerpc/include/asm/mmu.h new file mode 100644 index 00000000..5aa916f2 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mmu.h @@ -0,0 +1,797 @@ +/* + * PowerPC memory management structures + */ + +#ifndef _PPC_MMU_H_ +#define _PPC_MMU_H_ + +#ifndef __ASSEMBLY__ +/* Hardware Page Table Entry */ +typedef struct _PTE { +#ifdef CONFIG_PPC64BRIDGE +	unsigned long long vsid:52; +	unsigned long api:5; +	unsigned long :5; +	unsigned long h:1; +	unsigned long v:1; +	unsigned long long rpn:52; +#else /* CONFIG_PPC64BRIDGE */ +	unsigned long v:1;	/* Entry is valid */ +	unsigned long vsid:24;	/* Virtual segment identifier */ +	unsigned long h:1;	/* Hash algorithm indicator */ +	unsigned long api:6;	/* Abbreviated page index */ +	unsigned long rpn:20;	/* Real (physical) page number */ +#endif /* CONFIG_PPC64BRIDGE */ +	unsigned long    :3;	/* Unused */ +	unsigned long r:1;	/* Referenced */ +	unsigned long c:1;	/* Changed */ +	unsigned long w:1;	/* Write-thru cache mode */ +	unsigned long i:1;	/* Cache inhibited */ +	unsigned long m:1;	/* Memory coherence */ +	unsigned long g:1;	/* Guarded */ +	unsigned long  :1;	/* Unused */ +	unsigned long pp:2;	/* Page protection */ +} PTE; + +/* Values for PP (assumes Ks=0, Kp=1) */ +#define PP_RWXX	0	/* Supervisor read/write, User none */ +#define PP_RWRX 1	/* Supervisor read/write, User read */ +#define PP_RWRW 2	/* Supervisor read/write, User read/write */ +#define PP_RXRX 3	/* Supervisor read,       User read */ + +/* Segment Register */ +typedef struct _SEGREG { +	unsigned long t:1;	/* Normal or I/O  type */ +	unsigned long ks:1;	/* Supervisor 'key' (normally 0) */ +	unsigned long kp:1;	/* User 'key' (normally 1) */ +	unsigned long n:1;	/* No-execute */ +	unsigned long :4;	/* Unused */ +	unsigned long vsid:24;	/* Virtual Segment Identifier */ +} SEGREG; + +/* Block Address Translation (BAT) Registers */ +typedef struct _P601_BATU {	/* Upper part of BAT for 601 processor */ +	unsigned long bepi:15;	/* Effective page index (virtual address) */ +	unsigned long :8;	/* unused */ +	unsigned long w:1; +	unsigned long i:1;	/* Cache inhibit */ +	unsigned long m:1;	/* Memory coherence */ +	unsigned long ks:1;	/* Supervisor key (normally 0) */ +	unsigned long kp:1;	/* User key (normally 1) */ +	unsigned long pp:2;	/* Page access protections */ +} P601_BATU; + +typedef struct _BATU {		/* Upper part of BAT (all except 601) */ +#ifdef CONFIG_PPC64BRIDGE +	unsigned long long bepi:47; +#else /* CONFIG_PPC64BRIDGE */ +	unsigned long bepi:15;	/* Effective page index (virtual address) */ +#endif /* CONFIG_PPC64BRIDGE */ +	unsigned long :4;	/* Unused */ +	unsigned long bl:11;	/* Block size mask */ +	unsigned long vs:1;	/* Supervisor valid */ +	unsigned long vp:1;	/* User valid */ +} BATU; + +typedef struct _P601_BATL {	/* Lower part of BAT for 601 processor */ +	unsigned long brpn:15;	/* Real page index (physical address) */ +	unsigned long :10;	/* Unused */ +	unsigned long v:1;	/* Valid bit */ +	unsigned long bl:6;	/* Block size mask */ +} P601_BATL; + +typedef struct _BATL {		/* Lower part of BAT (all except 601) */ +#ifdef CONFIG_PPC64BRIDGE +	unsigned long long brpn:47; +#else /* CONFIG_PPC64BRIDGE */ +	unsigned long brpn:15;	/* Real page index (physical address) */ +#endif /* CONFIG_PPC64BRIDGE */ +	unsigned long :10;	/* Unused */ +	unsigned long w:1;	/* Write-thru cache */ +	unsigned long i:1;	/* Cache inhibit */ +	unsigned long m:1;	/* Memory coherence */ +	unsigned long g:1;	/* Guarded (MBZ in IBAT) */ +	unsigned long :1;	/* Unused */ +	unsigned long pp:2;	/* Page access protections */ +} BATL; + +typedef struct _BAT { +	BATU batu;		/* Upper register */ +	BATL batl;		/* Lower register */ +} BAT; + +typedef struct _P601_BAT { +	P601_BATU batu;		/* Upper register */ +	P601_BATL batl;		/* Lower register */ +} P601_BAT; + +/* + * Simulated two-level MMU.  This structure is used by the kernel + * to keep track of MMU mappings and is used to update/maintain + * the hardware HASH table which is really a cache of mappings. + * + * The simulated structures mimic the hardware available on other + * platforms, notably the 80x86 and 680x0. + */ + +typedef struct _pte { +	unsigned long page_num:20; +	unsigned long flags:12;		/* Page flags (some unused bits) */ +} pte; + +#define PD_SHIFT (10+12)		/* Page directory */ +#define PD_MASK  0x02FF +#define PT_SHIFT (12)			/* Page Table */ +#define PT_MASK  0x02FF +#define PG_SHIFT (12)			/* Page Entry */ + + +/* MMU context */ + +typedef struct _MMU_context { +	SEGREG	segs[16];	/* Segment registers */ +	pte	**pmap;		/* Two-level page-map structure */ +} MMU_context; + +extern void _tlbie(unsigned long va);	/* invalidate a TLB entry */ +extern void _tlbia(void);		/* invalidate all TLB entries */ + +#ifdef CONFIG_ADDR_MAP +extern void init_addr_map(void); +#endif + +typedef enum { +	IBAT0 = 0, IBAT1, IBAT2, IBAT3, +	DBAT0, DBAT1, DBAT2, DBAT3, +#ifdef CONFIG_HIGH_BATS +	IBAT4, IBAT5, IBAT6, IBAT7, +	DBAT4, DBAT5, DBAT6, DBAT7 +#endif +} ppc_bat_t; + +extern int read_bat(ppc_bat_t bat, unsigned long *upper, unsigned long *lower); +extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower); +extern void print_bats(void); + +#endif /* __ASSEMBLY__ */ + +#define BATU_VS                 0x00000002 +#define BATU_VP                 0x00000001 +#define BATU_INVALID            0x00000000 + +#define BATL_WRITETHROUGH       0x00000040 +#define BATL_CACHEINHIBIT       0x00000020 +#define BATL_MEMCOHERENCE	0x00000010 +#define BATL_GUARDEDSTORAGE     0x00000008 +#define BATL_NO_ACCESS		0x00000000 + +#define BATL_PP_MSK		0x00000003 +#define BATL_PP_00		0x00000000 /* No access */ +#define BATL_PP_01		0x00000001 /* Read-only */ +#define BATL_PP_10		0x00000002 /* Read-write */ +#define BATL_PP_11		0x00000003 + +#define BATL_PP_NO_ACCESS	BATL_PP_00 +#define BATL_PP_RO		BATL_PP_01 +#define BATL_PP_RW		BATL_PP_10 + +/* BAT Block size values */ +#define BATU_BL_128K            0x00000000 +#define BATU_BL_256K            0x00000004 +#define BATU_BL_512K            0x0000000c +#define BATU_BL_1M              0x0000001c +#define BATU_BL_2M              0x0000003c +#define BATU_BL_4M              0x0000007c +#define BATU_BL_8M              0x000000fc +#define BATU_BL_16M             0x000001fc +#define BATU_BL_32M             0x000003fc +#define BATU_BL_64M             0x000007fc +#define BATU_BL_128M            0x00000ffc +#define BATU_BL_256M            0x00001ffc + +/* Block lengths for processors that support extended block length */ +#ifdef HID0_XBSEN +#define BATU_BL_512M            0x00003ffc +#define BATU_BL_1G              0x00007ffc +#define BATU_BL_2G              0x0000fffc +#define BATU_BL_4G              0x0001fffc +#define BATU_BL_MAX		BATU_BL_4G +#else +#define BATU_BL_MAX		BATU_BL_256M +#endif + +/* BAT Access Protection */ +#define BPP_XX	0x00		/* No access */ +#define BPP_RX	0x01		/* Read only */ +#define BPP_RW	0x02		/* Read/write */ + +/* Macros to get values from BATs, once data is in the BAT register format */ +#define BATU_VALID(x) (x & 0x3) +#define BATU_VADDR(x) (x & 0xfffe0000) +#define BATL_PADDR(x) ((phys_addr_t)((x & 0xfffe0000)		\ +				     | ((x & 0x0e00ULL) << 24)	\ +				     | ((x & 0x04ULL) << 30))) +#define BATU_SIZE(x) (1ULL << (fls((x & BATU_BL_MAX) >> 2) + 17)) + +/* bytes into BATU_BL */ +#define TO_BATU_BL(x) \ +	(u32)((((1ull << __ilog2_u64((u64)x)) / (128 * 1024)) - 1) * 4) + +/* Used to set up SDR1 register */ +#define HASH_TABLE_SIZE_64K	0x00010000 +#define HASH_TABLE_SIZE_128K	0x00020000 +#define HASH_TABLE_SIZE_256K	0x00040000 +#define HASH_TABLE_SIZE_512K	0x00080000 +#define HASH_TABLE_SIZE_1M	0x00100000 +#define HASH_TABLE_SIZE_2M	0x00200000 +#define HASH_TABLE_SIZE_4M	0x00400000 +#define HASH_TABLE_MASK_64K	0x000 +#define HASH_TABLE_MASK_128K	0x001 +#define HASH_TABLE_MASK_256K	0x003 +#define HASH_TABLE_MASK_512K	0x007 +#define HASH_TABLE_MASK_1M	0x00F +#define HASH_TABLE_MASK_2M	0x01F +#define HASH_TABLE_MASK_4M	0x03F + +/* Control/status registers for the MPC8xx. + * A write operation to these registers causes serialized access. + * During software tablewalk, the registers used perform mask/shift-add + * operations when written/read.  A TLB entry is created when the Mx_RPN + * is written, and the contents of several registers are used to + * create the entry. + */ +#define MI_CTR		784	/* Instruction TLB control register */ +#define MI_GPM		0x80000000	/* Set domain manager mode */ +#define MI_PPM		0x40000000	/* Set subpage protection */ +#define MI_CIDEF	0x20000000	/* Set cache inhibit when MMU dis */ +#define MI_RSV4I	0x08000000	/* Reserve 4 TLB entries */ +#define MI_PPCS		0x02000000	/* Use MI_RPN prob/priv state */ +#define MI_IDXMASK	0x00001f00	/* TLB index to be loaded */ +#define MI_RESETVAL	0x00000000	/* Value of register at reset */ + +/* These are the Ks and Kp from the PowerPC books.  For proper operation, + * Ks = 0, Kp = 1. + */ +#define MI_AP		786 +#define MI_Ks		0x80000000	/* Should not be set */ +#define MI_Kp		0x40000000	/* Should always be set */ + +/* The effective page number register.  When read, contains the information + * about the last instruction TLB miss.  When MI_RPN is written, bits in + * this register are used to create the TLB entry. + */ +#define MI_EPN		787 +#define MI_EPNMASK	0xfffff000	/* Effective page number for entry */ +#define MI_EVALID	0x00000200	/* Entry is valid */ +#define MI_ASIDMASK	0x0000000f	/* ASID match value */ +					/* Reset value is undefined */ + +/* A "level 1" or "segment" or whatever you want to call it register. + * For the instruction TLB, it contains bits that get loaded into the + * TLB entry when the MI_RPN is written. + */ +#define MI_TWC		789 +#define MI_APG		0x000001e0	/* Access protection group (0) */ +#define MI_GUARDED	0x00000010	/* Guarded storage */ +#define MI_PSMASK	0x0000000c	/* Mask of page size bits */ +#define MI_PS8MEG	0x0000000c	/* 8M page size */ +#define MI_PS512K	0x00000004	/* 512K page size */ +#define MI_PS4K_16K	0x00000000	/* 4K or 16K page size */ +#define MI_SVALID	0x00000001	/* Segment entry is valid */ +					/* Reset value is undefined */ + +/* Real page number.  Defined by the pte.  Writing this register + * causes a TLB entry to be created for the instruction TLB, using + * additional information from the MI_EPN, and MI_TWC registers. + */ +#define MI_RPN		790 + +/* Define an RPN value for mapping kernel memory to large virtual + * pages for boot initialization.  This has real page number of 0, + * large page size, shared page, cache enabled, and valid. + * Also mark all subpages valid and write access. + */ +#define MI_BOOTINIT	0x000001fd + +#define MD_CTR		792	/* Data TLB control register */ +#define MD_GPM		0x80000000	/* Set domain manager mode */ +#define MD_PPM		0x40000000	/* Set subpage protection */ +#define MD_CIDEF	0x20000000	/* Set cache inhibit when MMU dis */ +#define MD_WTDEF	0x10000000	/* Set writethrough when MMU dis */ +#define MD_RSV4I	0x08000000	/* Reserve 4 TLB entries */ +#define MD_TWAM		0x04000000	/* Use 4K page hardware assist */ +#define MD_PPCS		0x02000000	/* Use MI_RPN prob/priv state */ +#define MD_IDXMASK	0x00001f00	/* TLB index to be loaded */ +#define MD_RESETVAL	0x04000000	/* Value of register at reset */ + +#define M_CASID		793	/* Address space ID (context) to match */ +#define MC_ASIDMASK	0x0000000f	/* Bits used for ASID value */ + + +/* These are the Ks and Kp from the PowerPC books.  For proper operation, + * Ks = 0, Kp = 1. + */ +#define MD_AP		794 +#define MD_Ks		0x80000000	/* Should not be set */ +#define MD_Kp		0x40000000	/* Should always be set */ + +/* The effective page number register.  When read, contains the information + * about the last instruction TLB miss.  When MD_RPN is written, bits in + * this register are used to create the TLB entry. + */ +#define MD_EPN		795 +#define MD_EPNMASK	0xfffff000	/* Effective page number for entry */ +#define MD_EVALID	0x00000200	/* Entry is valid */ +#define MD_ASIDMASK	0x0000000f	/* ASID match value */ +					/* Reset value is undefined */ + +/* The pointer to the base address of the first level page table. + * During a software tablewalk, reading this register provides the address + * of the entry associated with MD_EPN. + */ +#define M_TWB		796 +#define	M_L1TB		0xfffff000	/* Level 1 table base address */ +#define M_L1INDX	0x00000ffc	/* Level 1 index, when read */ +					/* Reset value is undefined */ + +/* A "level 1" or "segment" or whatever you want to call it register. + * For the data TLB, it contains bits that get loaded into the TLB entry + * when the MD_RPN is written.  It is also provides the hardware assist + * for finding the PTE address during software tablewalk. + */ +#define MD_TWC		797 +#define MD_L2TB		0xfffff000	/* Level 2 table base address */ +#define MD_L2INDX	0xfffffe00	/* Level 2 index (*pte), when read */ +#define MD_APG		0x000001e0	/* Access protection group (0) */ +#define MD_GUARDED	0x00000010	/* Guarded storage */ +#define MD_PSMASK	0x0000000c	/* Mask of page size bits */ +#define MD_PS8MEG	0x0000000c	/* 8M page size */ +#define MD_PS512K	0x00000004	/* 512K page size */ +#define MD_PS4K_16K	0x00000000	/* 4K or 16K page size */ +#define MD_WT		0x00000002	/* Use writethrough page attribute */ +#define MD_SVALID	0x00000001	/* Segment entry is valid */ +					/* Reset value is undefined */ + + +/* Real page number.  Defined by the pte.  Writing this register + * causes a TLB entry to be created for the data TLB, using + * additional information from the MD_EPN, and MD_TWC registers. + */ +#define MD_RPN		798 + +/* This is a temporary storage register that could be used to save + * a processor working register during a tablewalk. + */ +#define M_TW		799 + +/* + * At present, all PowerPC 400-class processors share a similar TLB + * architecture. The instruction and data sides share a unified, + * 64-entry, fully-associative TLB which is maintained totally under + * software control. In addition, the instruction side has a + * hardware-managed, 4-entry, fully- associative TLB which serves as a + * first level to the shared TLB. These two TLBs are known as the UTLB + * and ITLB, respectively. + */ + +#define        PPC4XX_TLB_SIZE 64 + +/* + * TLB entries are defined by a "high" tag portion and a "low" data + * portion.  On all architectures, the data portion is 32-bits. + * + * TLB entries are managed entirely under software control by reading, + * writing, and searchoing using the 4xx-specific tlbre, tlbwr, and tlbsx + * instructions. + */ + +/* + * FSL Book-E support + */ + +#define MAS0_TLBSEL_MSK	0x30000000 +#define MAS0_TLBSEL(x)	(((x) << 28) & MAS0_TLBSEL_MSK) +#define MAS0_ESEL_MSK	0x0FFF0000 +#define MAS0_ESEL(x)	(((x) << 16) & MAS0_ESEL_MSK) +#define MAS0_NV(x)	((x) & 0x00000FFF) + +#define MAS1_VALID	0x80000000 +#define MAS1_IPROT	0x40000000 +#define MAS1_TID(x)	(((x) << 16) & 0x3FFF0000) +#define MAS1_TS		0x00001000 +#define MAS1_TSIZE(x)	(((x) << 7) & 0x00000F80) +#define TSIZE_TO_BYTES(x) (1ULL << ((x) + 10)) + +#define MAS2_EPN	0xFFFFF000 +#define MAS2_X0		0x00000040 +#define MAS2_X1		0x00000020 +#define MAS2_W		0x00000010 +#define MAS2_I		0x00000008 +#define MAS2_M		0x00000004 +#define MAS2_G		0x00000002 +#define MAS2_E		0x00000001 + +#define MAS3_RPN	0xFFFFF000 +#define MAS3_U0		0x00000200 +#define MAS3_U1		0x00000100 +#define MAS3_U2		0x00000080 +#define MAS3_U3		0x00000040 +#define MAS3_UX		0x00000020 +#define MAS3_SX		0x00000010 +#define MAS3_UW		0x00000008 +#define MAS3_SW		0x00000004 +#define MAS3_UR		0x00000002 +#define MAS3_SR		0x00000001 + +#define MAS4_TLBSELD(x) MAS0_TLBSEL(x) +#define MAS4_TIDDSEL	0x000F0000 +#define MAS4_TSIZED(x)	MAS1_TSIZE(x) +#define MAS4_X0D	0x00000040 +#define MAS4_X1D	0x00000020 +#define MAS4_WD		0x00000010 +#define MAS4_ID		0x00000008 +#define MAS4_MD		0x00000004 +#define MAS4_GD		0x00000002 +#define MAS4_ED		0x00000001 + +#define MAS6_SPID0	0x3FFF0000 +#define MAS6_SPID1	0x00007FFE +#define MAS6_SAS	0x00000001 +#define MAS6_SPID	MAS6_SPID0 + +#define MAS7_RPN	0xFFFFFFFF + +#define FSL_BOOKE_MAS0(tlbsel,esel,nv) \ +		(MAS0_TLBSEL(tlbsel) | MAS0_ESEL(esel) | MAS0_NV(nv)) +#define FSL_BOOKE_MAS1(v,iprot,tid,ts,tsize) \ +		((((v) << 31) & MAS1_VALID)             |\ +		(((iprot) << 30) & MAS1_IPROT)          |\ +		(MAS1_TID(tid))				|\ +		(((ts) << 12) & MAS1_TS)                |\ +		(MAS1_TSIZE(tsize))) +#define FSL_BOOKE_MAS2(epn, wimge) \ +		(((epn) & MAS3_RPN) | (wimge)) +#define FSL_BOOKE_MAS3(rpn, user, perms) \ +		(((rpn) & MAS3_RPN) | (user) | (perms)) +#define FSL_BOOKE_MAS7(rpn) \ +		(((u64)(rpn)) >> 32) + +#define BOOKE_PAGESZ_1K		0 +#define BOOKE_PAGESZ_2K		1 +#define BOOKE_PAGESZ_4K		2 +#define BOOKE_PAGESZ_8K		3 +#define BOOKE_PAGESZ_16K	4 +#define BOOKE_PAGESZ_32K	5 +#define BOOKE_PAGESZ_64K	6 +#define BOOKE_PAGESZ_128K	7 +#define BOOKE_PAGESZ_256K	8 +#define BOOKE_PAGESZ_512K	9 +#define BOOKE_PAGESZ_1M		10 +#define BOOKE_PAGESZ_2M		11 +#define BOOKE_PAGESZ_4M		12 +#define BOOKE_PAGESZ_8M		13 +#define BOOKE_PAGESZ_16M	14 +#define BOOKE_PAGESZ_32M	15 +#define BOOKE_PAGESZ_64M	16 +#define BOOKE_PAGESZ_128M	17 +#define BOOKE_PAGESZ_256M	18 +#define BOOKE_PAGESZ_512M	19 +#define BOOKE_PAGESZ_1G		20 +#define BOOKE_PAGESZ_2G		21 +#define BOOKE_PAGESZ_4G		22 +#define BOOKE_PAGESZ_8G		23 +#define BOOKE_PAGESZ_16GB	24 +#define BOOKE_PAGESZ_32GB	25 +#define BOOKE_PAGESZ_64GB	26 +#define BOOKE_PAGESZ_128GB	27 +#define BOOKE_PAGESZ_256GB	28 +#define BOOKE_PAGESZ_512GB	29 +#define BOOKE_PAGESZ_1TB	30 +#define BOOKE_PAGESZ_2TB	31 + +#define TLBIVAX_ALL		4 +#define TLBIVAX_TLB0		0 +#define TLBIVAX_TLB1		8 + +#ifdef CONFIG_E500 +#ifndef __ASSEMBLY__ +extern void set_tlb(u8 tlb, u32 epn, u64 rpn, +		    u8 perms, u8 wimge, +		    u8 ts, u8 esel, u8 tsize, u8 iprot); +extern void disable_tlb(u8 esel); +extern void invalidate_tlb(u8 tlb); +extern void init_tlbs(void); +extern int find_tlb_idx(void *addr, u8 tlbsel); +extern void init_used_tlb_cams(void); +extern int find_free_tlbcam(void); +extern void print_tlbcam(void); + +extern unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg); +extern void clear_ddr_tlbs(unsigned int memsize_in_meg); + +enum tlb_map_type { +	TLB_MAP_RAM, +	TLB_MAP_IO, +}; + +extern uint64_t tlb_map_range(ulong v_addr, phys_addr_t p_addr, uint64_t size, +			      enum tlb_map_type map_type); + +extern void write_tlb(u32 _mas0, u32 _mas1, u32 _mas2, u32 _mas3, u32 _mas7); + +#define SET_TLB_ENTRY(_tlb, _epn, _rpn, _perms, _wimge, _ts, _esel, _sz, _iprot) \ +	{ .mas0 = FSL_BOOKE_MAS0(_tlb, _esel, 0), \ +	  .mas1 = FSL_BOOKE_MAS1(1, _iprot, 0, _ts, _sz), \ +	  .mas2 = FSL_BOOKE_MAS2(_epn, _wimge), \ +	  .mas3 = FSL_BOOKE_MAS3(_rpn, 0, _perms), \ +	  .mas7 = FSL_BOOKE_MAS7(_rpn), } + +struct fsl_e_tlb_entry { +	u32	mas0; +	u32	mas1; +	u32	mas2; +	u32	mas3; +	u32	mas7; +}; + +extern struct fsl_e_tlb_entry tlb_table[]; +extern int num_tlb_entries; +#endif +#endif + +#ifdef CONFIG_E300 +#define LAWAR_EN		0x80000000 +#define LAWAR_SIZE		0x0000003F + +#define LAWAR_TRGT_IF_PCI	0x00000000 +#define LAWAR_TRGT_IF_PCI1	0x00000000 +#define LAWAR_TRGT_IF_PCIX	0x00000000 +#define LAWAR_TRGT_IF_PCI2	0x00100000 +#define LAWAR_TRGT_IF_PCIE1	0x00200000 +#define LAWAR_TRGT_IF_PCIE2	0x00100000 +#define LAWAR_TRGT_IF_PCIE3	0x00300000 +#define LAWAR_TRGT_IF_LBC	0x00400000 +#define LAWAR_TRGT_IF_CCSR	0x00800000 +#define LAWAR_TRGT_IF_DDR_INTERLEAVED 0x00B00000 +#define LAWAR_TRGT_IF_RIO	0x00c00000 +#define LAWAR_TRGT_IF_DDR	0x00f00000 +#define LAWAR_TRGT_IF_DDR1	0x00f00000 +#define LAWAR_TRGT_IF_DDR2	0x01600000 + +#define LAWAR_SIZE_BASE		0xa +#define LAWAR_SIZE_4K		(LAWAR_SIZE_BASE+1) +#define LAWAR_SIZE_8K		(LAWAR_SIZE_BASE+2) +#define LAWAR_SIZE_16K		(LAWAR_SIZE_BASE+3) +#define LAWAR_SIZE_32K		(LAWAR_SIZE_BASE+4) +#define LAWAR_SIZE_64K		(LAWAR_SIZE_BASE+5) +#define LAWAR_SIZE_128K		(LAWAR_SIZE_BASE+6) +#define LAWAR_SIZE_256K		(LAWAR_SIZE_BASE+7) +#define LAWAR_SIZE_512K		(LAWAR_SIZE_BASE+8) +#define LAWAR_SIZE_1M		(LAWAR_SIZE_BASE+9) +#define LAWAR_SIZE_2M		(LAWAR_SIZE_BASE+10) +#define LAWAR_SIZE_4M		(LAWAR_SIZE_BASE+11) +#define LAWAR_SIZE_8M		(LAWAR_SIZE_BASE+12) +#define LAWAR_SIZE_16M		(LAWAR_SIZE_BASE+13) +#define LAWAR_SIZE_32M		(LAWAR_SIZE_BASE+14) +#define LAWAR_SIZE_64M		(LAWAR_SIZE_BASE+15) +#define LAWAR_SIZE_128M		(LAWAR_SIZE_BASE+16) +#define LAWAR_SIZE_256M		(LAWAR_SIZE_BASE+17) +#define LAWAR_SIZE_512M		(LAWAR_SIZE_BASE+18) +#define LAWAR_SIZE_1G		(LAWAR_SIZE_BASE+19) +#define LAWAR_SIZE_2G		(LAWAR_SIZE_BASE+20) +#define LAWAR_SIZE_4G		(LAWAR_SIZE_BASE+21) +#define LAWAR_SIZE_8G		(LAWAR_SIZE_BASE+22) +#define LAWAR_SIZE_16G		(LAWAR_SIZE_BASE+23) +#define LAWAR_SIZE_32G		(LAWAR_SIZE_BASE+24) +#endif + +#ifdef CONFIG_440 +/* General */ +#define TLB_VALID   0x00000200 + +/* Supported page sizes */ + +#define SZ_1K	0x00000000 +#define SZ_4K	0x00000010 +#define SZ_16K	0x00000020 +#define SZ_64K	0x00000030 +#define SZ_256K	0x00000040 +#define SZ_1M	0x00000050 +#define SZ_16M	0x00000070 +#define SZ_256M	0x00000090 + +/* Storage attributes */ +#define SA_W	0x00000800	/* Write-through */ +#define SA_I	0x00000400	/* Caching inhibited */ +#define SA_M	0x00000200	/* Memory coherence */ +#define SA_G	0x00000100	/* Guarded */ +#define SA_E	0x00000080	/* Endian */ +/* Some additional macros for combinations often used */ +#define SA_IG	(SA_I | SA_G) + +/* Access control */ +#define AC_X	0x00000024	/* Execute */ +#define AC_W	0x00000012	/* Write */ +#define AC_R	0x00000009	/* Read */ +/* Some additional macros for combinations often used */ +#define AC_RW	(AC_R | AC_W) +#define AC_RWX	(AC_R | AC_W | AC_X) + +/* Some handy macros */ + +#define EPN(e)		((e) & 0xfffffc00) +#define TLB0(epn,sz)	((EPN((epn)) | (sz) | TLB_VALID )) +#define TLB1(rpn,erpn)	(((rpn) & 0xfffffc00) | (erpn)) +#define TLB2(a)		((a) & 0x00000fbf) + +#define tlbtab_start\ +	mflr	r1	;\ +	bl	0f	; + +#define tlbtab_end\ +	.long 0, 0, 0	;\ +0:	mflr	r0	;\ +	mtlr	r1	;\ +	blr		; + +#define tlbentry(epn,sz,rpn,erpn,attr)\ +	.long TLB0(epn,sz),TLB1(rpn,erpn),TLB2(attr) + +/*----------------------------------------------------------------------------+ +| TLB specific defines. ++----------------------------------------------------------------------------*/ +#define TLB_256MB_ALIGN_MASK 0xFF0000000ULL +#define TLB_16MB_ALIGN_MASK  0xFFF000000ULL +#define TLB_1MB_ALIGN_MASK   0xFFFF00000ULL +#define TLB_256KB_ALIGN_MASK 0xFFFFC0000ULL +#define TLB_64KB_ALIGN_MASK  0xFFFFF0000ULL +#define TLB_16KB_ALIGN_MASK  0xFFFFFC000ULL +#define TLB_4KB_ALIGN_MASK   0xFFFFFF000ULL +#define TLB_1KB_ALIGN_MASK   0xFFFFFFC00ULL +#define TLB_256MB_SIZE       0x10000000 +#define TLB_16MB_SIZE        0x01000000 +#define TLB_1MB_SIZE         0x00100000 +#define TLB_256KB_SIZE       0x00040000 +#define TLB_64KB_SIZE        0x00010000 +#define TLB_16KB_SIZE        0x00004000 +#define TLB_4KB_SIZE         0x00001000 +#define TLB_1KB_SIZE         0x00000400 + +#define TLB_WORD0_EPN_MASK   0xFFFFFC00 +#define TLB_WORD0_EPN_ENCODE(n) (((unsigned long)(n))&0xFFFFFC00) +#define TLB_WORD0_EPN_DECODE(n) (((unsigned long)(n))&0xFFFFFC00) +#define TLB_WORD0_V_MASK     0x00000200 +#define TLB_WORD0_V_ENABLE   0x00000200 +#define TLB_WORD0_V_DISABLE  0x00000000 +#define TLB_WORD0_TS_MASK    0x00000100 +#define TLB_WORD0_TS_1       0x00000100 +#define TLB_WORD0_TS_0       0x00000000 +#define TLB_WORD0_SIZE_MASK  0x000000F0 +#define TLB_WORD0_SIZE_1KB   0x00000000 +#define TLB_WORD0_SIZE_4KB   0x00000010 +#define TLB_WORD0_SIZE_16KB  0x00000020 +#define TLB_WORD0_SIZE_64KB  0x00000030 +#define TLB_WORD0_SIZE_256KB 0x00000040 +#define TLB_WORD0_SIZE_1MB   0x00000050 +#define TLB_WORD0_SIZE_16MB  0x00000070 +#define TLB_WORD0_SIZE_256MB 0x00000090 +#define TLB_WORD0_TPAR_MASK  0x0000000F +#define TLB_WORD0_TPAR_ENCODE(n) ((((unsigned long)(n))&0x0F)<<0) +#define TLB_WORD0_TPAR_DECODE(n) ((((unsigned long)(n))>>0)&0x0F) + +#define TLB_WORD1_RPN_MASK   0xFFFFFC00 +#define TLB_WORD1_RPN_ENCODE(n) (((unsigned long)(n))&0xFFFFFC00) +#define TLB_WORD1_RPN_DECODE(n) (((unsigned long)(n))&0xFFFFFC00) +#define TLB_WORD1_PAR1_MASK  0x00000300 +#define TLB_WORD1_PAR1_ENCODE(n) ((((unsigned long)(n))&0x03)<<8) +#define TLB_WORD1_PAR1_DECODE(n) ((((unsigned long)(n))>>8)&0x03) +#define TLB_WORD1_PAR1_0     0x00000000 +#define TLB_WORD1_PAR1_1     0x00000100 +#define TLB_WORD1_PAR1_2     0x00000200 +#define TLB_WORD1_PAR1_3     0x00000300 +#define TLB_WORD1_ERPN_MASK  0x0000000F +#define TLB_WORD1_ERPN_ENCODE(n) ((((unsigned long)(n))&0x0F)<<0) +#define TLB_WORD1_ERPN_DECODE(n) ((((unsigned long)(n))>>0)&0x0F) + +#define TLB_WORD2_PAR2_MASK  0xC0000000 +#define TLB_WORD2_PAR2_ENCODE(n) ((((unsigned long)(n))&0x03)<<30) +#define TLB_WORD2_PAR2_DECODE(n) ((((unsigned long)(n))>>30)&0x03) +#define TLB_WORD2_PAR2_0     0x00000000 +#define TLB_WORD2_PAR2_1     0x40000000 +#define TLB_WORD2_PAR2_2     0x80000000 +#define TLB_WORD2_PAR2_3     0xC0000000 +#define TLB_WORD2_U0_MASK    0x00008000 +#define TLB_WORD2_U0_ENABLE  0x00008000 +#define TLB_WORD2_U0_DISABLE 0x00000000 +#define TLB_WORD2_U1_MASK    0x00004000 +#define TLB_WORD2_U1_ENABLE  0x00004000 +#define TLB_WORD2_U1_DISABLE 0x00000000 +#define TLB_WORD2_U2_MASK    0x00002000 +#define TLB_WORD2_U2_ENABLE  0x00002000 +#define TLB_WORD2_U2_DISABLE 0x00000000 +#define TLB_WORD2_U3_MASK    0x00001000 +#define TLB_WORD2_U3_ENABLE  0x00001000 +#define TLB_WORD2_U3_DISABLE 0x00000000 +#define TLB_WORD2_W_MASK     0x00000800 +#define TLB_WORD2_W_ENABLE   0x00000800 +#define TLB_WORD2_W_DISABLE  0x00000000 +#define TLB_WORD2_I_MASK     0x00000400 +#define TLB_WORD2_I_ENABLE   0x00000400 +#define TLB_WORD2_I_DISABLE  0x00000000 +#define TLB_WORD2_M_MASK     0x00000200 +#define TLB_WORD2_M_ENABLE   0x00000200 +#define TLB_WORD2_M_DISABLE  0x00000000 +#define TLB_WORD2_G_MASK     0x00000100 +#define TLB_WORD2_G_ENABLE   0x00000100 +#define TLB_WORD2_G_DISABLE  0x00000000 +#define TLB_WORD2_E_MASK     0x00000080 +#define TLB_WORD2_E_ENABLE   0x00000080 +#define TLB_WORD2_E_DISABLE  0x00000000 +#define TLB_WORD2_UX_MASK    0x00000020 +#define TLB_WORD2_UX_ENABLE  0x00000020 +#define TLB_WORD2_UX_DISABLE 0x00000000 +#define TLB_WORD2_UW_MASK    0x00000010 +#define TLB_WORD2_UW_ENABLE  0x00000010 +#define TLB_WORD2_UW_DISABLE 0x00000000 +#define TLB_WORD2_UR_MASK    0x00000008 +#define TLB_WORD2_UR_ENABLE  0x00000008 +#define TLB_WORD2_UR_DISABLE 0x00000000 +#define TLB_WORD2_SX_MASK    0x00000004 +#define TLB_WORD2_SX_ENABLE  0x00000004 +#define TLB_WORD2_SX_DISABLE 0x00000000 +#define TLB_WORD2_SW_MASK    0x00000002 +#define TLB_WORD2_SW_ENABLE  0x00000002 +#define TLB_WORD2_SW_DISABLE 0x00000000 +#define TLB_WORD2_SR_MASK    0x00000001 +#define TLB_WORD2_SR_ENABLE  0x00000001 +#define TLB_WORD2_SR_DISABLE 0x00000000 + +/*----------------------------------------------------------------------------+ +| Following instructions are not available in Book E mode of the GNU assembler. ++----------------------------------------------------------------------------*/ +#define DCCCI(ra,rb)			.long 0x7c000000|\ +					(ra<<16)|(rb<<11)|(454<<1) + +#define ICCCI(ra,rb)			.long 0x7c000000|\ +					(ra<<16)|(rb<<11)|(966<<1) + +#define DCREAD(rt,ra,rb)		.long 0x7c000000|\ +					(rt<<21)|(ra<<16)|(rb<<11)|(486<<1) + +#define ICREAD(ra,rb)			.long 0x7c000000|\ +					(ra<<16)|(rb<<11)|(998<<1) + +#define TLBSX(rt,ra,rb)			.long 0x7c000000|\ +					(rt<<21)|(ra<<16)|(rb<<11)|(914<<1) + +#define TLBWE(rs,ra,ws)			.long 0x7c000000|\ +					(rs<<21)|(ra<<16)|(ws<<11)|(978<<1) + +#define TLBRE(rt,ra,ws)			.long 0x7c000000|\ +					(rt<<21)|(ra<<16)|(ws<<11)|(946<<1) + +#define TLBSXDOT(rt,ra,rb)		.long 0x7c000001|\ +					(rt<<21)|(ra<<16)|(rb<<11)|(914<<1) + +#define MSYNC				.long 0x7c000000|\ +					(598<<1) + +#define MBAR_INST				.long 0x7c000000|\ +					(854<<1) + +#ifndef __ASSEMBLY__ +/* Prototypes */ +void mttlb1(unsigned long index, unsigned long value); +void mttlb2(unsigned long index, unsigned long value); +void mttlb3(unsigned long index, unsigned long value); +unsigned long mftlb1(unsigned long index); +unsigned long mftlb2(unsigned long index); +unsigned long mftlb3(unsigned long index); + +void program_tlb(u64 phys_addr, u32 virt_addr, u32 size, u32 tlb_word2_i_value); +void remove_tlb(u32 vaddr, u32 size); +void change_tlb(u32 vaddr, u32 size, u32 tlb_word2_i_value); +#endif /* __ASSEMBLY__ */ + +#endif /* CONFIG_440 */ +#endif /* _PPC_MMU_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mp.h b/roms/u-boot/arch/powerpc/include/asm/mp.h new file mode 100644 index 00000000..bcfa1290 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mp.h @@ -0,0 +1,23 @@ +/* + * Copyright 2009-2010 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_MP_H_ +#define _ASM_MP_H_ + +#include <lmb.h> + +void setup_mp(void); +void cpu_mp_lmb_reserve(struct lmb *lmb); +u32 determine_mp_bootpg(unsigned int *pagesize); +int is_core_disabled(int nr); + +#ifdef CONFIG_E6500 +#define thread_to_core(x) (x >> 1) +#else +#define thread_to_core(x) (x) +#endif + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/mpc512x.h b/roms/u-boot/arch/powerpc/include/asm/mpc512x.h new file mode 100644 index 00000000..9167a575 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mpc512x.h @@ -0,0 +1,42 @@ +/* + * include/asm-ppc/mpc512x.h + * + * Prototypes, etc. for the Freescale MPC512x embedded cpu chips + * + * 2009 (C) Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef __ASMPPC_MPC512X_H +#define __ASMPPC_MPC512X_H + +/* + * macros for manipulating CSx_START/STOP + */ +#define CSAW_START(start)	((start) & 0xFFFF0000) +#define CSAW_STOP(start, size)	(((start) + (size) - 1) >> 16) + +/* + * Inlines + */ + +/* + * According to MPC5121e RM, configuring local access windows should + * be followed by a dummy read of the config register that was + * modified last and an isync. + */ +static inline void sync_law(volatile void *addr) +{ +	in_be32(addr); +	__asm__ __volatile__ ("isync"); +} + +/* + * Prototypes + */ +extern long int fixed_sdram(ddr512x_config_t *mddrc_config, +				u32 *dram_init_seq, int seq_sz); +extern int mpc5121_diu_init(void); +extern void ide_set_reset(int idereset); + +#endif /* __ASMPPC_MPC512X_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mpc8349_pci.h b/roms/u-boot/arch/powerpc/include/asm/mpc8349_pci.h new file mode 100644 index 00000000..7a1adba9 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mpc8349_pci.h @@ -0,0 +1,168 @@ +#ifndef _PPC_KERNEL_MPC8349_PCI_H +#define _PPC_KERNEL_MPC8349_PCI_H + + +#define M8265_PCIBR0	0x101ac +#define M8265_PCIBR1	0x101b0 +#define M8265_PCIMSK0	0x101c4 +#define M8265_PCIMSK1	0x101c8 + +/* Bit definitions for PCIBR registers */ + +#define PCIBR_ENABLE        0x00000001 + +/* Bit definitions for PCIMSK registers */ + +#define PCIMSK_32KB         0xFFFF8000  /* Size of window, smallest */ +#define PCIMSK_64KB         0xFFFF0000 +#define PCIMSK_128KB        0xFFFE0000 +#define PCIMSK_256KB        0xFFFC0000 +#define PCIMSK_512KB        0xFFF80000 +#define PCIMSK_1MB          0xFFF00000 +#define PCIMSK_2MB          0xFFE00000 +#define PCIMSK_4MB          0xFFC00000 +#define PCIMSK_8MB          0xFF800000 +#define PCIMSK_16MB         0xFF000000 +#define PCIMSK_32MB         0xFE000000 +#define PCIMSK_64MB         0xFC000000 +#define PCIMSK_128MB        0xF8000000 +#define PCIMSK_256MB        0xF0000000 +#define PCIMSK_512MB        0xE0000000 +#define PCIMSK_1GB          0xC0000000  /* Size of window, largest */ + + +#define M826X_SCCR_PCI_MODE_EN 0x100 + + +/* + * Outbound ATU registers (3 sets). These registers control how 60x bus + * (local) addresses are translated to PCI addresses when the MPC826x is + * a PCI bus master (initiator). + */ + +#define POTAR_REG0          0x10800     /* PCI Outbound Translation Addr registers */ +#define POTAR_REG1          0x10818 +#define POTAR_REG2          0x10830 + +#define POBAR_REG0          0x10808     /* PCI Outbound Base Addr registers */ +#define POBAR_REG1          0x10820 +#define POBAR_REG2          0x10838 + +#define POCMR_REG0          0x10810     /* PCI Outbound Comparison Mask registers */ +#define POCMR_REG1          0x10828 +#define POCMR_REG2          0x10840 + +/* Bit definitions for POMCR registers */ + +#define POCMR_MASK_4KB      0x000FFFFF +#define POCMR_MASK_8KB      0x000FFFFE +#define POCMR_MASK_16KB     0x000FFFFC +#define POCMR_MASK_32KB     0x000FFFF8 +#define POCMR_MASK_64KB     0x000FFFF0 +#define POCMR_MASK_128KB    0x000FFFE0 +#define POCMR_MASK_256KB    0x000FFFC0 +#define POCMR_MASK_512KB    0x000FFF80 +#define POCMR_MASK_1MB      0x000FFF00 +#define POCMR_MASK_2MB      0x000FFE00 +#define POCMR_MASK_4MB      0x000FFC00 +#define POCMR_MASK_8MB      0x000FF800 +#define POCMR_MASK_16MB     0x000FF000 +#define POCMR_MASK_32MB     0x000FE000 +#define POCMR_MASK_64MB     0x000FC000 +#define POCMR_MASK_128MB    0x000F8000 +#define POCMR_MASK_256MB    0x000F0000 +#define POCMR_MASK_512MB    0x000E0000 +#define POCMR_MASK_1GB      0x000C0000 + +#define POCMR_ENABLE        0x80000000 +#define POCMR_PCI_IO        0x40000000 +#define POCMR_PREFETCH_EN   0x20000000 +#define POCMR_PCI2          0x10000000 + +/* Soft PCI reset */ + +#define PCI_GCR_REG         0x10880 + +/* Bit definitions for PCI_GCR registers */ + +#define PCIGCR_PCI_BUS_EN   0x1 + +/* + * Inbound ATU registers (2 sets). These registers control how PCI + * addresses are translated to 60x bus (local) addresses when the + * MPC826x is a PCI bus target. + */ + +#define PITAR_REG1          0x108D0 +#define PIBAR_REG1          0x108D8 +#define PICMR_REG1          0x108E0 +#define PITAR_REG0          0x108E8 +#define PIBAR_REG0          0x108F0 +#define PICMR_REG0          0x108F8 + +/* Bit definitions for PCI Inbound Comparison Mask registers */ + +#define PICMR_MASK_4KB       0x000FFFFF +#define PICMR_MASK_8KB       0x000FFFFE +#define PICMR_MASK_16KB      0x000FFFFC +#define PICMR_MASK_32KB      0x000FFFF8 +#define PICMR_MASK_64KB      0x000FFFF0 +#define PICMR_MASK_128KB     0x000FFFE0 +#define PICMR_MASK_256KB     0x000FFFC0 +#define PICMR_MASK_512KB     0x000FFF80 +#define PICMR_MASK_1MB       0x000FFF00 +#define PICMR_MASK_2MB       0x000FFE00 +#define PICMR_MASK_4MB       0x000FFC00 +#define PICMR_MASK_8MB       0x000FF800 +#define PICMR_MASK_16MB      0x000FF000 +#define PICMR_MASK_32MB      0x000FE000 +#define PICMR_MASK_64MB      0x000FC000 +#define PICMR_MASK_128MB     0x000F8000 +#define PICMR_MASK_256MB     0x000F0000 +#define PICMR_MASK_512MB     0x000E0000 +#define PICMR_MASK_1GB       0x000C0000 + +#define PICMR_ENABLE         0x80000000 +#define PICMR_NO_SNOOP_EN    0x40000000 +#define PICMR_PREFETCH_EN    0x20000000 + +/* PCI error Registers */ + +#define	PCI_ERROR_STATUS_REG		0x10884 +#define	PCI_ERROR_MASK_REG		0x10888 +#define	PCI_ERROR_CONTROL_REG		0x1088C +#define PCI_ERROR_ADRS_CAPTURE_REG      0x10890 +#define PCI_ERROR_DATA_CAPTURE_REG      0x10898 +#define PCI_ERROR_CTRL_CAPTURE_REG      0x108A0 + +/* PCI error Register bit defines */ + +#define	PCI_ERROR_PCI_ADDR_PAR			0x00000001 +#define	PCI_ERROR_PCI_DATA_PAR_WR		0x00000002 +#define	PCI_ERROR_PCI_DATA_PAR_RD		0x00000004 +#define	PCI_ERROR_PCI_NO_RSP			0x00000008 +#define	PCI_ERROR_PCI_TAR_ABT			0x00000010 +#define	PCI_ERROR_PCI_SERR			0x00000020 +#define	PCI_ERROR_PCI_PERR_RD			0x00000040 +#define	PCI_ERROR_PCI_PERR_WR			0x00000080 +#define	PCI_ERROR_I2O_OFQO			0x00000100 +#define	PCI_ERROR_I2O_IPQO			0x00000200 +#define	PCI_ERROR_IRA				0x00000400 +#define	PCI_ERROR_NMI				0x00000800 +#define	PCI_ERROR_I2O_DBMC			0x00001000 + +/* + * Register pair used to generate configuration cycles on the PCI bus + * and access the MPC826x's own PCI configuration registers. + */ + +#define PCI_CFG_ADDR_REG     0x10900 +#define PCI_CFG_DATA_REG     0x10904 + +/* Bus parking decides where the bus control sits when idle */ +/* If modifying memory controllers for PCI park on the core */ + +#define PPC_ACR_BUS_PARK_CORE 0x6 +#define PPC_ACR_BUS_PARK_PCI  0x3 + +#endif /* _PPC_KERNEL_M8260_PCI_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mpc85xx_gpio.h b/roms/u-boot/arch/powerpc/include/asm/mpc85xx_gpio.h new file mode 100644 index 00000000..87bb4a09 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mpc85xx_gpio.h @@ -0,0 +1,113 @@ +/* + * Copyright 2010 eXMeritus, A Boeing Company + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef POWERPC_ASM_MPC85XX_GPIO_H_ +#define POWERPC_ASM_MPC85XX_GPIO_H_ + +# include <asm/immap_85xx.h> + +/* + * The following internal functions are an MPC85XX-specific GPIO API which + * allows setting and querying multiple GPIOs in a single operation. + * + * All of these look relatively large, but the arguments are almost always + * constants, so they compile down to just a few instructions and a + * memory-mapped IO operation or two. + */ +static inline void mpc85xx_gpio_set(unsigned int mask, +		unsigned int dir, unsigned int val) +{ +	ccsr_gpio_t *gpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR); + +	/* First mask off the unwanted parts of "dir" and "val" */ +	dir &= mask; +	val &= mask; + +	/* Now read in the values we're supposed to preserve */ +	dir |= (in_be32(&gpio->gpdir) & ~mask); +	val |= (in_be32(&gpio->gpdat) & ~mask); + +	/* +	 * Poke the new output values first, then set the direction.  This +	 * helps to avoid transient data when switching from input to output +	 * and vice versa. +	 */ +	out_be32(&gpio->gpdat, val); +	out_be32(&gpio->gpdir, dir); +} + +static inline void mpc85xx_gpio_set_in(unsigned int gpios) +{ +	mpc85xx_gpio_set(gpios, 0x00000000, 0x00000000); +} + +static inline void mpc85xx_gpio_set_low(unsigned int gpios) +{ +	mpc85xx_gpio_set(gpios, 0xFFFFFFFF, 0x00000000); +} + +static inline void mpc85xx_gpio_set_high(unsigned int gpios) +{ +	mpc85xx_gpio_set(gpios, 0xFFFFFFFF, 0xFFFFFFFF); +} + +static inline unsigned int mpc85xx_gpio_get(unsigned int mask) +{ +	ccsr_gpio_t *gpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR); + +	/* Read the requested values */ +	return in_be32(&gpio->gpdat) & mask; +} + +/* + * These implement the generic Linux GPIO API on top of the other functions + * in this header. + */ +static inline int gpio_request(unsigned gpio, const char *label) +{ +	/* Compatibility shim */ +	return 0; +} + +static inline void gpio_free(unsigned gpio) +{ +	/* Compatibility shim */ +} + +static inline int gpio_direction_input(unsigned gpio) +{ +	mpc85xx_gpio_set_in(1U << gpio); +	return 0; +} + +static inline int gpio_direction_output(unsigned gpio, int value) +{ +	if (value) +		mpc85xx_gpio_set_high(1U << gpio); +	else +		mpc85xx_gpio_set_low(1U << gpio); +	return 0; +} + +static inline int gpio_get_value(unsigned gpio) +{ +	return !!mpc85xx_gpio_get(1U << gpio); +} + +static inline void gpio_set_value(unsigned gpio, int value) +{ +	if (value) +		mpc85xx_gpio_set_high(1U << gpio); +	else +		mpc85xx_gpio_set_low(1U << gpio); +} + +static inline int gpio_is_valid(int gpio) +{ +	return (gpio >= 0) && (gpio < 32); +} + +#endif /* not POWERPC_ASM_MPC85XX_GPIO_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/mpc8xxx_spi.h b/roms/u-boot/arch/powerpc/include/asm/mpc8xxx_spi.h new file mode 100644 index 00000000..b0082aff --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/mpc8xxx_spi.h @@ -0,0 +1,49 @@ +/* + * Freescale non-CPM SPI Controller + * + * Copyright 2008 Qstreams Networks, Inc. + * + * This software may be used and distributed according to the + * terms of the GNU Public License, Version 2, incorporated + * herein by reference. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * Version 2 as published by the Free Software Foundation. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef _ASM_MPC8XXX_SPI_H_ +#define _ASM_MPC8XXX_SPI_H_ + +#include <asm/types.h> + +#if defined(CONFIG_MPC8308) || \ +	defined(CONFIG_MPC8313) || \ +	defined(CONFIG_MPC8315) || \ +	defined(CONFIG_MPC834x) || \ +	defined(CONFIG_MPC837x) + +typedef struct spi8xxx { +	u8 res0[0x20];	/* 0x0-0x01f reserved */ +	u32 mode;	/* mode register  */ +	u32 event;	/* event register */ +	u32 mask;	/* mask register  */ +	u32 com;	/* command register */ +	u32 tx;		/* transmit register */ +	u32 rx;		/* receive register */ +	u8 res1[0xFC8];	/* fill up to 0x1000 */ +} spi8xxx_t; + +#endif + +#endif	/* _ASM_MPC8XXX_SPI_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/pci_io.h b/roms/u-boot/arch/powerpc/include/asm/pci_io.h new file mode 100644 index 00000000..9b738c38 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/pci_io.h @@ -0,0 +1,43 @@ +/* originally from linux source (asm-ppc/io.h). + * Sanity added by Rob Taylor, Flying Pig Systems, 2000 + */ +#ifndef _PCI_IO_H_ +#define _PCI_IO_H_ + +#include "io.h" + + +#define pci_read_le16(addr, dest) \ +    __asm__ __volatile__("lhbrx %0,0,%1" : "=r" (dest) : \ +		  "r" (addr), "m" (*addr)); + +#define pci_write_le16(addr, val) \ +    __asm__ __volatile__("sthbrx %1,0,%2" : "=m" (*addr) : \ +		  "r" (val), "r" (addr)); + + +#define pci_read_le32(addr, dest) \ +    __asm__ __volatile__("lwbrx %0,0,%1" : "=r" (dest) : \ +		 "r" (addr), "m" (*addr)); + +#define pci_write_le32(addr, val) \ +__asm__ __volatile__("stwbrx %1,0,%2" : "=m" (*addr) : \ +		 "r" (val), "r" (addr)); + +#define pci_readb(addr,b) ((b) = *(volatile u8 *) (addr)) +#define pci_writeb(b,addr) ((*(volatile u8 *) (addr)) = (b)) + +#if !defined(__BIG_ENDIAN) +#define pci_readw(addr,b) ((b) = *(volatile u16 *) (addr)) +#define pci_readl(addr,b) ((b) = *(volatile u32 *) (addr)) +#define pci_writew(b,addr) ((*(volatile u16 *) (addr)) = (b)) +#define pci_writel(b,addr) ((*(volatile u32 *) (addr)) = (b)) +#else +#define pci_readw(addr,b) pci_read_le16((volatile u16 *)(addr),(b)) +#define pci_readl(addr,b) pci_read_le32((volatile u32 *)(addr),(b)) +#define pci_writew(b,addr) pci_write_le16((volatile u16 *)(addr),(b)) +#define pci_writel(b,addr) pci_write_le32((volatile u32 *)(addr),(b)) +#endif + + +#endif /* _PCI_IO_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/posix_types.h b/roms/u-boot/arch/powerpc/include/asm/posix_types.h new file mode 100644 index 00000000..91707281 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/posix_types.h @@ -0,0 +1,109 @@ +#ifndef _PPC_POSIX_TYPES_H +#define _PPC_POSIX_TYPES_H + +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc.  Also, we cannot + * assume GCC is being used. + */ + +typedef unsigned int	__kernel_dev_t; +typedef unsigned int	__kernel_ino_t; +typedef unsigned int	__kernel_mode_t; +typedef unsigned short	__kernel_nlink_t; +typedef long		__kernel_off_t; +typedef int		__kernel_pid_t; +typedef unsigned int	__kernel_uid_t; +typedef unsigned int	__kernel_gid_t; +typedef unsigned int	__kernel_size_t; +typedef int		__kernel_ssize_t; +typedef long		__kernel_ptrdiff_t; +typedef long		__kernel_time_t; +typedef long		__kernel_suseconds_t; +typedef long		__kernel_clock_t; +typedef int		__kernel_daddr_t; +typedef char *		__kernel_caddr_t; +typedef short             __kernel_ipc_pid_t; +typedef unsigned short	__kernel_uid16_t; +typedef unsigned short	__kernel_gid16_t; +typedef unsigned int	__kernel_uid32_t; +typedef unsigned int	__kernel_gid32_t; + +typedef unsigned int	__kernel_old_uid_t; +typedef unsigned int	__kernel_old_gid_t; + +#ifdef __GNUC__ +typedef long long	__kernel_loff_t; +#endif + +typedef struct { +	int	val[2]; +} __kernel_fsid_t; + +#ifndef __GNUC__ + +#define	__FD_SET(d, set)	((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) +#define	__FD_CLR(d, set)	((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) +#define	__FD_ISSET(d, set)	((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) +#define	__FD_ZERO(set)	\ +  ((void) memset ((__ptr_t) (set), 0, sizeof (__kernel_fd_set))) + +#else /* __GNUC__ */ + +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) \ +    || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 0) +/* With GNU C, use inline functions instead so args are evaluated only once: */ + +#undef __FD_SET +static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp) +{ +	unsigned long _tmp = fd / __NFDBITS; +	unsigned long _rem = fd % __NFDBITS; +	fdsetp->fds_bits[_tmp] |= (1UL<<_rem); +} + +#undef __FD_CLR +static __inline__ void __FD_CLR(unsigned long fd, __kernel_fd_set *fdsetp) +{ +	unsigned long _tmp = fd / __NFDBITS; +	unsigned long _rem = fd % __NFDBITS; +	fdsetp->fds_bits[_tmp] &= ~(1UL<<_rem); +} + +#undef __FD_ISSET +static __inline__ int __FD_ISSET(unsigned long fd, __kernel_fd_set *p) +{ +	unsigned long _tmp = fd / __NFDBITS; +	unsigned long _rem = fd % __NFDBITS; +	return (p->fds_bits[_tmp] & (1UL<<_rem)) != 0; +} + +/* + * This will unroll the loop for the normal constant case (8 ints, + * for a 256-bit fd_set) + */ +#undef __FD_ZERO +static __inline__ void __FD_ZERO(__kernel_fd_set *p) +{ +	unsigned int *tmp = (unsigned int *)p->fds_bits; +	int i; + +	if (__builtin_constant_p(__FDSET_LONGS)) { +		switch (__FDSET_LONGS) { +			case 8: +				tmp[0] = 0; tmp[1] = 0; tmp[2] = 0; tmp[3] = 0; +				tmp[4] = 0; tmp[5] = 0; tmp[6] = 0; tmp[7] = 0; +				return; +		} +	} +	i = __FDSET_LONGS; +	while (i) { +		i--; +		*tmp = 0; +		tmp++; +	} +} + +#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ +#endif /* __GNUC__ */ +#endif /* _PPC_POSIX_TYPES_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc405.h b/roms/u-boot/arch/powerpc/include/asm/ppc405.h new file mode 100644 index 00000000..f2ed16a2 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc405.h @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier:	GPL-2.0	IBM-pibs + */ + +#ifndef	__PPC405_H__ +#define __PPC405_H__ + +/* Define bits and masks for real-mode storage attribute control registers */ +#define PPC_128MB_SACR_BIT(addr)	((addr) >> 27) +#define PPC_128MB_SACR_VALUE(addr)	PPC_REG_VAL(PPC_128MB_SACR_BIT(addr),1) + +#define CONFIG_SYS_DCACHE_SIZE		(16 << 10)	/* For AMCC 405 CPUs */ + +/* DCR registers */ +#define PLB0_ACR	0x0087 + +/* SDR registers */ +#define SDR0_PINSTP	0x0040 + +/* CPR registers */ +#define CPR0_CLKUPD	0x0020 +#define CPR0_PLLC	0x0040 +#define CPR0_PLLD	0x0060 +#define CPR0_CPUD	0x0080 +#define CPR0_PLBD	0x00a0 +#define CPR0_OPBD0	0x00c0 +#define CPR0_PERD	0x00e0 + +/* + * DMA + */ +#define DMA_DCR_BASE	0x0100 +#define DMACR0		(DMA_DCR_BASE + 0x00)  /* DMA channel control reg 0	*/ +#define DMACT0		(DMA_DCR_BASE + 0x01)  /* DMA count reg 0		*/ +#define DMADA0		(DMA_DCR_BASE + 0x02)  /* DMA destination address reg 0 */ +#define DMASA0		(DMA_DCR_BASE + 0x03)  /* DMA source address reg 0	*/ +#define DMASB0		(DMA_DCR_BASE + 0x04)  /* DMA sg descriptor addr 0	*/ +#define DMACR1		(DMA_DCR_BASE + 0x08)  /* DMA channel control reg 1	*/ +#define DMACT1		(DMA_DCR_BASE + 0x09)  /* DMA count reg 1		*/ +#define DMADA1		(DMA_DCR_BASE + 0x0a)  /* DMA destination address reg 1 */ +#define DMASA1		(DMA_DCR_BASE + 0x0b)  /* DMA source address reg 1	*/ +#define DMASB1		(DMA_DCR_BASE + 0x0c)  /* DMA sg descriptor addr 1	*/ +#define DMACR2		(DMA_DCR_BASE + 0x10)  /* DMA channel control reg 2	*/ +#define DMACT2		(DMA_DCR_BASE + 0x11)  /* DMA count reg 2		*/ +#define DMADA2		(DMA_DCR_BASE + 0x12)  /* DMA destination address reg 2 */ +#define DMASA2		(DMA_DCR_BASE + 0x13)  /* DMA source address reg 2	*/ +#define DMASB2		(DMA_DCR_BASE + 0x14)  /* DMA sg descriptor addr 2	*/ +#define DMACR3		(DMA_DCR_BASE + 0x18)  /* DMA channel control reg 3	*/ +#define DMACT3		(DMA_DCR_BASE + 0x19)  /* DMA count reg 3		*/ +#define DMADA3		(DMA_DCR_BASE + 0x1a)  /* DMA destination address reg 3 */ +#define DMASA3		(DMA_DCR_BASE + 0x1b)  /* DMA source address reg 3	*/ +#define DMASB3		(DMA_DCR_BASE + 0x1c)  /* DMA sg descriptor addr 3	*/ +#define DMASR		(DMA_DCR_BASE + 0x20)  /* DMA status reg		*/ +#define DMASGC		(DMA_DCR_BASE + 0x23)  /* DMA scatter/gather command reg*/ +#define DMAADR		(DMA_DCR_BASE + 0x24)  /* DMA address decode reg	*/ + +#endif	/* __PPC405_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc405ep.h b/roms/u-boot/arch/powerpc/include/asm/ppc405ep.h new file mode 100644 index 00000000..9f042156 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc405ep.h @@ -0,0 +1,239 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC405EP_H_ +#define _PPC405EP_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_SDRAM	/* IBM SDRAM controller */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +/* DCR */ +#define OCM0_ISCNTL	0x0019	/* OCM I-side control reg */ +#define OCM0_DSARC	0x001a	/* OCM D-side address compare */ +#define OCM0_DSCNTL	0x001b	/* OCM D-side control */ +#define CPC0_PLLMR0	0x00f0	/* PLL mode  register 0	*/ +#define CPC0_BOOT	0x00f1	/* Clock status register	*/ +#define CPC0_CR1	0x00f2	/* Chip Control 1 register */ +#define CPC0_EPCTL	0x00f3	/* EMAC to PHY control register */ +#define CPC0_PLLMR1	0x00f4	/* PLL mode  register 1	*/ +#define CPC0_UCR	0x00f5	/* UART control register	*/ +#define CPC0_SRR	0x00f6	/* Soft Reset register */ +#define CPC0_PCI	0x00f9	/* PCI control register	*/ + +/* Defines for CPC0_EPCTL register */ +#define CPC0_EPCTL_E0NFE	0x80000000 +#define CPC0_EPCTL_E1NFE	0x40000000 + +/* Defines for CPC0_PCI Register */ +#define CPC0_PCI_SPE		0x00000010	/* PCIINT/WE select	 */ +#define CPC0_PCI_HOST_CFG_EN	0x00000008	/* PCI host config Enable */ +#define CPC0_PCI_ARBIT_EN	0x00000001	/* PCI Internal Arb Enabled */ + +/* Defines for CPC0_BOOR Register */ +#define CPC0_BOOT_SEP		0x00000002	/* serial EEPROM present */ + +/* Bit definitions */ +#define PLLMR0_CPU_DIV_MASK	0x00300000	/* CPU clock divider */ +#define PLLMR0_CPU_DIV_BYPASS	0x00000000 +#define PLLMR0_CPU_DIV_2	0x00100000 +#define PLLMR0_CPU_DIV_3	0x00200000 +#define PLLMR0_CPU_DIV_4	0x00300000 + +#define PLLMR0_CPU_TO_PLB_MASK	0x00030000	/* CPU:PLB Frequency Divisor */ +#define PLLMR0_CPU_PLB_DIV_1	0x00000000 +#define PLLMR0_CPU_PLB_DIV_2	0x00010000 +#define PLLMR0_CPU_PLB_DIV_3	0x00020000 +#define PLLMR0_CPU_PLB_DIV_4	0x00030000 + +#define PLLMR0_OPB_TO_PLB_MASK	0x00003000	/* OPB:PLB Frequency Divisor */ +#define PLLMR0_OPB_PLB_DIV_1	0x00000000 +#define PLLMR0_OPB_PLB_DIV_2	0x00001000 +#define PLLMR0_OPB_PLB_DIV_3	0x00002000 +#define PLLMR0_OPB_PLB_DIV_4	0x00003000 + +#define PLLMR0_EXB_TO_PLB_MASK	0x00000300	/* External Bus:PLB Divisor */ +#define PLLMR0_EXB_PLB_DIV_2	0x00000000 +#define PLLMR0_EXB_PLB_DIV_3	0x00000100 +#define PLLMR0_EXB_PLB_DIV_4	0x00000200 +#define PLLMR0_EXB_PLB_DIV_5	0x00000300 + +#define PLLMR0_MAL_TO_PLB_MASK	0x00000030	/* MAL:PLB Divisor */ +#define PLLMR0_MAL_PLB_DIV_1	0x00000000 +#define PLLMR0_MAL_PLB_DIV_2	0x00000010 +#define PLLMR0_MAL_PLB_DIV_3	0x00000020 +#define PLLMR0_MAL_PLB_DIV_4	0x00000030 + +#define PLLMR0_PCI_TO_PLB_MASK	0x00000003	/* PCI:PLB Frequency Divisor */ +#define PLLMR0_PCI_PLB_DIV_1	0x00000000 +#define PLLMR0_PCI_PLB_DIV_2	0x00000001 +#define PLLMR0_PCI_PLB_DIV_3	0x00000002 +#define PLLMR0_PCI_PLB_DIV_4	0x00000003 + +#define PLLMR1_SSCS_MASK	0x80000000	/* Select system clock source */ +#define PLLMR1_PLLR_MASK	0x40000000	/* PLL reset */ +#define PLLMR1_FBMUL_MASK	0x00F00000	/* PLL feedback multiplier value */ + +#define PLLMR1_FWDVA_MASK	0x00070000	/* PLL forward divider A value */ +#define PLLMR1_FWDVB_MASK	0x00007000	/* PLL forward divider B value */ +#define PLLMR1_TUNING_MASK	0x000003FF	/* PLL tune bits */ + +/* Defines for CPC0_PLLMR1 Register fields */ +#define PLL_ACTIVE		0x80000000 +#define CPC0_PLLMR1_SSCS	0x80000000 +#define PLL_RESET		0x40000000 +#define CPC0_PLLMR1_PLLR	0x40000000 +/* Feedback multiplier */ +#define PLL_FBKDIV		0x00F00000 +#define CPC0_PLLMR1_FBDV	0x00F00000 +#define PLL_FBKDIV_16		0x00000000 +#define PLL_FBKDIV_1		0x00100000 +#define PLL_FBKDIV_2		0x00200000 +#define PLL_FBKDIV_3		0x00300000 +#define PLL_FBKDIV_4		0x00400000 +#define PLL_FBKDIV_5		0x00500000 +#define PLL_FBKDIV_6		0x00600000 +#define PLL_FBKDIV_7		0x00700000 +#define PLL_FBKDIV_8		0x00800000 +#define PLL_FBKDIV_9		0x00900000 +#define PLL_FBKDIV_10		0x00A00000 +#define PLL_FBKDIV_11		0x00B00000 +#define PLL_FBKDIV_12		0x00C00000 +#define PLL_FBKDIV_13		0x00D00000 +#define PLL_FBKDIV_14		0x00E00000 +#define PLL_FBKDIV_15		0x00F00000 +/* Forward A divisor */ +#define PLL_FWDDIVA		0x00070000 +#define CPC0_PLLMR1_FWDVA	0x00070000 +#define PLL_FWDDIVA_8		0x00000000 +#define PLL_FWDDIVA_7		0x00010000 +#define PLL_FWDDIVA_6		0x00020000 +#define PLL_FWDDIVA_5		0x00030000 +#define PLL_FWDDIVA_4		0x00040000 +#define PLL_FWDDIVA_3		0x00050000 +#define PLL_FWDDIVA_2		0x00060000 +#define PLL_FWDDIVA_1		0x00070000 +/* Forward B divisor */ +#define PLL_FWDDIVB		0x00007000 +#define CPC0_PLLMR1_FWDVB	0x00007000 +#define PLL_FWDDIVB_8		0x00000000 +#define PLL_FWDDIVB_7		0x00001000 +#define PLL_FWDDIVB_6		0x00002000 +#define PLL_FWDDIVB_5		0x00003000 +#define PLL_FWDDIVB_4		0x00004000 +#define PLL_FWDDIVB_3		0x00005000 +#define PLL_FWDDIVB_2		0x00006000 +#define PLL_FWDDIVB_1		0x00007000 +/* PLL tune bits */ +#define PLL_TUNE_MASK		0x000003FF +#define PLL_TUNE_2_M_3		0x00000133	/*  2 <= M <= 3 */ +#define PLL_TUNE_4_M_6		0x00000134	/*  3 <  M <= 6 */ +#define PLL_TUNE_7_M_10		0x00000138	/*  6 <  M <= 10 */ +#define PLL_TUNE_11_M_14	0x0000013C	/* 10 <  M <= 14 */ +#define PLL_TUNE_15_M_40	0x0000023E	/* 14 <  M <= 40 */ +#define PLL_TUNE_VCO_LOW	0x00000000	/* 500MHz <= VCO <=  800MHz */ +#define PLL_TUNE_VCO_HI		0x00000080	/* 800MHz <  VCO <= 1000MHz */ + +/* Defines for CPC0_PLLMR0 Register fields */ +/* CPU divisor */ +#define PLL_CPUDIV		0x00300000 +#define CPC0_PLLMR0_CCDV	0x00300000 +#define PLL_CPUDIV_1		0x00000000 +#define PLL_CPUDIV_2		0x00100000 +#define PLL_CPUDIV_3		0x00200000 +#define PLL_CPUDIV_4		0x00300000 +/* PLB divisor */ +#define PLL_PLBDIV		0x00030000 +#define CPC0_PLLMR0_CBDV	0x00030000 +#define PLL_PLBDIV_1		0x00000000 +#define PLL_PLBDIV_2		0x00010000 +#define PLL_PLBDIV_3		0x00020000 +#define PLL_PLBDIV_4		0x00030000 +/* OPB divisor */ +#define PLL_OPBDIV		0x00003000 +#define CPC0_PLLMR0_OPDV	0x00003000 +#define PLL_OPBDIV_1		0x00000000 +#define PLL_OPBDIV_2		0x00001000 +#define PLL_OPBDIV_3		0x00002000 +#define PLL_OPBDIV_4		0x00003000 +/* EBC divisor */ +#define PLL_EXTBUSDIV		0x00000300 +#define CPC0_PLLMR0_EPDV	0x00000300 +#define PLL_EXTBUSDIV_2		0x00000000 +#define PLL_EXTBUSDIV_3		0x00000100 +#define PLL_EXTBUSDIV_4		0x00000200 +#define PLL_EXTBUSDIV_5		0x00000300 +/* MAL divisor */ +#define PLL_MALDIV		0x00000030 +#define CPC0_PLLMR0_MPDV	0x00000030 +#define PLL_MALDIV_1		0x00000000 +#define PLL_MALDIV_2		0x00000010 +#define PLL_MALDIV_3		0x00000020 +#define PLL_MALDIV_4		0x00000030 +/* PCI divisor */ +#define PLL_PCIDIV		0x00000003 +#define CPC0_PLLMR0_PPFD	0x00000003 +#define PLL_PCIDIV_1		0x00000000 +#define PLL_PCIDIV_2		0x00000001 +#define PLL_PCIDIV_3		0x00000002 +#define PLL_PCIDIV_4		0x00000003 + +/* + * PLL settings for 266MHz CPU, 133MHz PLB/SDRAM, 66MHz EBC, 33MHz PCI, + * assuming a 33.3MHz input clock to the 405EP. + */ +#define PLLMR0_266_133_66	(PLL_CPUDIV_1 | PLL_PLBDIV_2 |     \ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |  \ +				 PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_266_133_66	(PLL_FBKDIV_8  |			\ +				 PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) + +#define PLLMR0_133_66_66_33	(PLL_CPUDIV_1 | PLL_PLBDIV_1 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_133_66_66_33	(PLL_FBKDIV_4  |			\ +				 PLL_FWDDIVA_6 | PLL_FWDDIVB_6 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_200_100_50_33	(PLL_CPUDIV_1 | PLL_PLBDIV_2 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_3 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_200_100_50_33	(PLL_FBKDIV_6  |			\ +				 PLL_FWDDIVA_4 | PLL_FWDDIVB_4 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_266_133_66_33	(PLL_CPUDIV_1 | PLL_PLBDIV_2 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_266_133_66_33	(PLL_FBKDIV_8  |			\ +				 PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_266_66_33_33	(PLL_CPUDIV_1 | PLL_PLBDIV_4 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_2) +#define PLLMR1_266_66_33_33	(PLL_FBKDIV_8  |			\ +				 PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_333_111_55_37	(PLL_CPUDIV_1 | PLL_PLBDIV_3 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_3) +#define PLLMR1_333_111_55_37	(PLL_FBKDIV_10  |			\ +				 PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_HI) +#define PLLMR0_333_111_55_111	(PLL_CPUDIV_1 | PLL_PLBDIV_3 |		\ +				 PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |	\ +				 PLL_MALDIV_1 | PLL_PCIDIV_1) +#define PLLMR1_333_111_55_111	(PLL_FBKDIV_10  |			\ +				 PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |	\ +				 PLL_TUNE_15_M_40 | PLL_TUNE_VCO_HI) + +#endif /* _PPC405EP_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc405ex.h b/roms/u-boot/arch/powerpc/include/asm/ppc405ex.h new file mode 100644 index 00000000..083405cc --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc405ex.h @@ -0,0 +1,82 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC405EX_H_ +#define _PPC405EX_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +#define CONFIG_NAND_NDFC + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0800) + +/* SDR */ +#define SDR0_SDCS0		0x0060 +#define SDR0_UART0		0x0120	/* UART0 Config */ +#define SDR0_UART1		0x0121	/* UART1 Config */ +#define SDR0_SRST		0x0200 +#define SDR0_CUST0		0x4000 +#define SDR0_PFC0		0x4100 +#define SDR0_PFC1		0x4101 +#define SDR0_MFR		0x4300	/* SDR0_MFR reg */ + +#define SDR0_ECID0		0x0080 +#define SDR0_ECID1		0x0081 +#define SDR0_ECID2		0x0082 +#define SDR0_ECID3		0x0083 + +#define SDR0_SDCS_SDD		(0x80000000 >> 31) + +#define SDR0_SRST_DMC		(0x80000000 >> 10) + +#define SDR0_CUST0_MUX_E_N_G_MASK	0xC0000000 /* Mux_Emac_NDFC_GPIO */ +#define SDR0_CUST0_MUX_EMAC_SEL		0x40000000 /* Emac Selection */ +#define SDR0_CUST0_MUX_NDFC_SEL		0x80000000 /* NDFC Selection */ +#define SDR0_CUST0_MUX_GPIO_SEL		0xC0000000 /* GPIO Selection */ + +#define SDR0_CUST0_NDFC_EN_MASK		0x20000000 /* NDFC Enable Mask */ +#define SDR0_CUST0_NDFC_ENABLE		0x20000000 /* NDFC Enable */ +#define SDR0_CUST0_NDFC_DISABLE		0x00000000 /* NDFC Disable */ + +#define SDR0_CUST0_NDFC_BW_MASK	  	0x10000000 /* NDFC Boot Width */ +#define SDR0_CUST0_NDFC_BW_16_BIT 	0x10000000 /* NDFC Boot Width= 16 Bit */ +#define SDR0_CUST0_NDFC_BW_8_BIT  	0x00000000 /* NDFC Boot Width=  8 Bit */ + +#define SDR0_CUST0_NDFC_BP_MASK		0x0F000000 /* NDFC Boot Page */ +#define SDR0_CUST0_NDFC_BP_ENCODE(n)	((((u32)(n)) & 0xF) << 24) +#define SDR0_CUST0_NDFC_BP_DECODE(n)	((((u32)(n)) >> 24) & 0xF) + +#define SDR0_CUST0_NDFC_BAC_MASK	0x00C00000 /* NDFC Boot Address Cycle */ +#define SDR0_CUST0_NDFC_BAC_ENCODE(n)	((((u32)(n)) & 0x3) << 22) +#define SDR0_CUST0_NDFC_BAC_DECODE(n)	((((u32)(n)) >> 22) & 0x3) + +#define SDR0_CUST0_NDFC_ARE_MASK	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_ENABLE	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_DISABLE	0x00000000 /* NDFC Auto Read Disable */ + +#define SDR0_CUST0_NRB_MASK		0x00100000 /* NDFC Ready / Busy */ +#define SDR0_CUST0_NRB_BUSY		0x00100000 /* Busy */ +#define SDR0_CUST0_NRB_READY		0x00000000 /* Ready */ + +#define SDR0_PFC1_U1ME			0x02000000 +#define SDR0_PFC1_U0ME			0x00080000 +#define SDR0_PFC1_U0IM			0x00040000 +#define SDR0_PFC1_SIS			0x00020000 +#define SDR0_PFC1_DMAAEN		0x00010000 +#define SDR0_PFC1_DMADEN		0x00008000 +#define SDR0_PFC1_USBEN			0x00004000 +#define SDR0_PFC1_AHBSWAP		0x00000020 +#define SDR0_PFC1_USBBIGEN		0x00000010 +#define SDR0_PFC1_GPT_FREQ		0x0000000f + +#endif /* _PPC405EX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc405ez.h b/roms/u-boot/arch/powerpc/include/asm/ppc405ez.h new file mode 100644 index 00000000..40cf8ed5 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc405ez.h @@ -0,0 +1,89 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC405EZ_H_ +#define _PPC405EZ_H_ + +#define CONFIG_NAND_NDFC + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) +#define GPIO1_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0800) + +/* DCR register */ +#define OCM0_PLBCR1	0x0020	/* OCM PLB3 Bank 1 Config */ +#define OCM0_PLBCR2	0x0021	/* OCM PLB3 Bank 2 Config */ +#define OCM0_PLBBEAR	0x0022	/* OCM PLB3 Bus Error Add */ +#define OCM0_DSRC1	0x0028	/* OCM D-side Bank 1 Config */ +#define OCM0_DSRC2	0x0029	/* OCM D-side Bank 2 Config */ +#define OCM0_ISRC1	0x002A	/* OCM I-side Bank 1Config */ +#define OCM0_ISRC2	0x002B	/* OCM I-side Bank 2 Config */ +#define OCM0_DISDPC	0x002C	/* OCM D-/I-side Data Par Chk */ + +/* SDR register */ +#define SDR0_NAND0	0x4000 +#define SDR0_ULTRA0	0x4040 +#define SDR0_ULTRA1	0x4050 +#define SDR0_ICINTSTAT	0x4510 + +/* CPR register */ +#define CPR0_PRIMAD	0x0080 +#define CPR0_PERD0	0x00e0 +#define CPR0_PERD1	0x00e1 +#define CPR0_PERC0	0x0180 + +#define	MAL_DCR_BASE	0x380 + +#define SDR_NAND0_NDEN		0x80000000 +#define SDR_NAND0_NDBTEN	0x40000000 +#define SDR_NAND0_NDBADR_MASK	0x30000000 +#define SDR_NAND0_NDBPG_MASK	0x0f000000 +#define SDR_NAND0_NDAREN	0x00800000 +#define SDR_NAND0_NDRBEN	0x00400000 + +#define SDR_ULTRA0_NDGPIOBP	0x80000000 +#define SDR_ULTRA0_CSN_MASK	0x78000000 +#define SDR_ULTRA0_CSNSEL0	0x40000000 +#define SDR_ULTRA0_CSNSEL1	0x20000000 +#define SDR_ULTRA0_CSNSEL2	0x10000000 +#define SDR_ULTRA0_CSNSEL3	0x08000000 +#define SDR_ULTRA0_EBCRDYEN	0x04000000 +#define SDR_ULTRA0_SPISSINEN	0x02000000 +#define SDR_ULTRA0_NFSRSTEN	0x01000000 + +#define SDR_ULTRA1_LEDNENABLE	0x40000000 + +#define SDR_ICRX_STAT		0x80000000 +#define SDR_ICTX0_STAT		0x40000000 +#define SDR_ICTX1_STAT		0x20000000 + +#define CPR_CLKUPD_ENPLLCH_EN	0x40000000 /* Enable CPR PLL Changes */ +#define CPR_CLKUPD_ENDVCH_EN	0x20000000 /* Enable CPR Sys. Div. Changes */ +#define CPR_PERD0_SPIDV_MASK	0x000F0000 /* SPI Clock Divider */ + +#define PLLC_SRC_MASK		0x20000000 /* PLL feedback source */ + +#define PLLD_FBDV_MASK		0x1F000000 /* PLL feedback divider value */ +#define PLLD_FWDVA_MASK		0x000F0000 /* PLL forward divider A value */ +#define PLLD_FWDVB_MASK		0x00000700 /* PLL forward divider B value */ + +#define PRIMAD_CPUDV_MASK	0x0F000000 /* CPU Clock Divisor Mask */ +#define PRIMAD_PLBDV_MASK	0x000F0000 /* PLB Clock Divisor Mask */ +#define PRIMAD_OPBDV_MASK	0x00000F00 /* OPB Clock Divisor Mask */ +#define PRIMAD_EBCDV_MASK	0x0000000F /* EBC Clock Divisor Mask */ + +#define PERD0_PWMDV_MASK	0xFF000000 /* PWM Divider Mask */ +#define PERD0_SPIDV_MASK	0x000F0000 /* SPI Divider Mask */ +#define PERD0_U0DV_MASK		0x0000FF00 /* UART 0 Divider Mask */ +#define PERD0_U1DV_MASK		0x000000FF /* UART 1 Divider Mask */ + +#endif /* _PPC405EZ_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc405gp.h b/roms/u-boot/arch/powerpc/include/asm/ppc405gp.h new file mode 100644 index 00000000..0044a3a4 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc405gp.h @@ -0,0 +1,95 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC405GP_H_ +#define _PPC405GP_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_SDRAM	/* IBM SDRAM controller */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +/* DCR's */ +#define DCP0_CFGADDR	0x0014		/* Decompression controller addr reg */ +#define DCP0_CFGDATA	0x0015		/* Decompression controller data reg */ +#define OCM0_ISCNTL	0x0019	/* OCM I-side control reg */ +#define OCM0_DSARC	0x001a	/* OCM D-side address compare */ +#define OCM0_DSCNTL	0x001b	/* OCM D-side control */ +#define CPC0_PLLMR	0x00b0		/* PLL mode  register */ +#define CPC0_CR0	0x00b1		/* chip control register 0 */ +#define CPC0_CR1	0x00b2		/* chip control register 1 */ +#define CPC0_PSR	0x00b4		/* chip pin strapping reg */ +#define CPC0_EIRR	0x00b6		/* ext interrupt routing reg */ +#define CPC0_SR		0x00b8		/* Power management status */ +#define CPC0_ER		0x00b9		/* Power management enable */ +#define CPC0_FR		0x00ba		/* Power management force */ +#define CPC0_ECR	0x00aa		/* edge conditioner register */ + +/* values for kiar register - indirect addressing of these regs */ +#define KCONF		0x40		/* decompression core config register */ + +#define PLLMR_FWD_DIV_MASK	0xE0000000	/* Forward Divisor */ +#define PLLMR_FWD_DIV_BYPASS	0xE0000000 +#define PLLMR_FWD_DIV_3		0xA0000000 +#define PLLMR_FWD_DIV_4		0x80000000 +#define PLLMR_FWD_DIV_6		0x40000000 + +#define PLLMR_FB_DIV_MASK	0x1E000000	/* Feedback Divisor */ +#define PLLMR_FB_DIV_1		0x02000000 +#define PLLMR_FB_DIV_2		0x04000000 +#define PLLMR_FB_DIV_3		0x06000000 +#define PLLMR_FB_DIV_4		0x08000000 + +#define PLLMR_TUNING_MASK	0x01F80000 + +#define PLLMR_CPU_TO_PLB_MASK	0x00060000	/* CPU:PLB Frequency Divisor */ +#define PLLMR_CPU_PLB_DIV_1	0x00000000 +#define PLLMR_CPU_PLB_DIV_2	0x00020000 +#define PLLMR_CPU_PLB_DIV_3	0x00040000 +#define PLLMR_CPU_PLB_DIV_4	0x00060000 + +#define PLLMR_OPB_TO_PLB_MASK	0x00018000	/* OPB:PLB Frequency Divisor */ +#define PLLMR_OPB_PLB_DIV_1	0x00000000 +#define PLLMR_OPB_PLB_DIV_2	0x00008000 +#define PLLMR_OPB_PLB_DIV_3	0x00010000 +#define PLLMR_OPB_PLB_DIV_4	0x00018000 + +#define PLLMR_PCI_TO_PLB_MASK	0x00006000	/* PCI:PLB Frequency Divisor */ +#define PLLMR_PCI_PLB_DIV_1	0x00000000 +#define PLLMR_PCI_PLB_DIV_2	0x00002000 +#define PLLMR_PCI_PLB_DIV_3	0x00004000 +#define PLLMR_PCI_PLB_DIV_4	0x00006000 + +#define PLLMR_EXB_TO_PLB_MASK	0x00001800	/* External Bus:PLB Divisor */ +#define PLLMR_EXB_PLB_DIV_2	0x00000000 +#define PLLMR_EXB_PLB_DIV_3	0x00000800 +#define PLLMR_EXB_PLB_DIV_4	0x00001000 +#define PLLMR_EXB_PLB_DIV_5	0x00001800 + +/* definitions for PPC405GPr (new mode strapping) */ +#define PLLMR_FWDB_DIV_MASK	0x00000007	/* Forward Divisor B */ + +#define PSR_PLL_FWD_MASK	0xC0000000 +#define PSR_PLL_FDBACK_MASK	0x30000000 +#define PSR_PLL_TUNING_MASK	0x0E000000 +#define PSR_PLB_CPU_MASK	0x01800000 +#define PSR_OPB_PLB_MASK	0x00600000 +#define PSR_PCI_PLB_MASK	0x00180000 +#define PSR_EB_PLB_MASK		0x00060000 +#define PSR_ROM_WIDTH_MASK	0x00018000 +#define PSR_ROM_LOC		0x00004000 +#define PSR_PCI_ASYNC_EN	0x00001000 +#define PSR_PERCLK_SYNC_MODE_EN 0x00000800	/* PPC405GPr only */ +#define PSR_PCI_ARBIT_EN	0x00000400 +#define PSR_NEW_MODE_EN		0x00000020	/* PPC405GPr only */ + +#endif /* _PPC405GP_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440.h b/roms/u-boot/arch/powerpc/include/asm/ppc440.h new file mode 100644 index 00000000..0cfa88bf --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440.h @@ -0,0 +1,154 @@ +/* + * (C) Copyright 2006 + * Sylvie Gohl,             AMCC/IBM, gohl.sylvie@fr.ibm.com + * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com + * Thierry Roman,           AMCC/IBM, thierry_roman@fr.ibm.com + * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com + * Robert Snyder,           AMCC/IBM, rob.snyder@fr.ibm.com + * + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0	IBM-pibs + */ + +#ifndef __PPC440_H__ +#define __PPC440_H__ + +#define CONFIG_SYS_DCACHE_SIZE		(32 << 10)	/* For AMCC 440 CPUs */ + +/* + * DCRs & Related + */ + +/* Memory mapped registers */ +#define PCIL0_CFGADR	(CONFIG_SYS_PCI_BASE + 0x0ec00000) +#define PCIL0_CFGDATA	(CONFIG_SYS_PCI_BASE + 0x0ec00004) +#define PCIL0_CFGBASE	(CONFIG_SYS_PCI_BASE + 0x0ec80000) +#define PCIL0_IOBASE	(CONFIG_SYS_PCI_BASE + 0x08000000) + +/* DCR registers */ + +/* CPR register declarations */ +#define CPR0_PLLC	0x0040 +#define CPR0_PLLD	0x0060 +#define CPR0_PRIMAD0	0x0080 +#define CPR0_PRIMBD0	0x00a0 +#define CPR0_OPBD0	0x00c0 +#define CPR0_PERD	0x00e0 +#define CPR0_MALD	0x0100 +#define CPR0_SPCID	0x0120 +#define CPR0_ICFG	0x0140 + +/* SDR register definations */ +#define SDR0_SDSTP0	0x0020 +#define SDR0_SDSTP1	0x0021 +#define SDR0_PINSTP	0x0040 +#define SDR0_SDCS0	0x0060 +#define SDR0_ECID0	0x0080 +#define SDR0_ECID1	0x0081 +#define SDR0_ECID2	0x0082 +#define SDR0_ECID3	0x0083 +#define SDR0_DDR0	0x00e1 +#define SDR0_EBC	0x0100 +#define SDR0_UART0	0x0120 +#define SDR0_UART1	0x0121 +#define SDR0_UART2	0x0122 +#define SDR0_UART3	0x0123 +#define SDR0_CP440	0x0180 +#define SDR0_XCR	0x01c0 +#define SDR0_XCR0	0x01c0 +#define SDR0_XPLLC	0x01c1 +#define SDR0_XPLLD	0x01c2 +#define SDR0_SRST	0x0200 +#define SDR0_SRST0	SDR0_SRST +#define SDR0_SRST1	0x0201 +#define SDR0_AMP0	0x0240 +#define SDR0_AMP1	0x0241 +#define SDR0_USB0	0x0320 +#define SDR0_CUST0	0x4000 +#define SDR0_CUST1	0x4002 +#define SDR0_CUST2	0x4004 +#define SDR0_CUST3	0x4006 +#define SDR0_PFC0	0x4100 +#define SDR0_PFC1	0x4101 +#define SDR0_PFC2   	0x4102 +#define SDR0_PFC4	0x4104 +#define SDR0_MFR	0x4300 + +#define SDR0_DDR0_DDRM_DECODE(n)	((((u32)(n)) >> 29) & 0x03) + +#define SDR0_PCI0_PAE_MASK		(0x80000000 >> 0) +#define SDR0_XCR0_PAE_MASK		(0x80000000 >> 0) + +#define SDR0_PFC0_GEIE_MASK		0x00003e00 +#define SDR0_PFC0_GEIE_TRE		0x00003e00 +#define SDR0_PFC0_GEIE_NOTRE		0x00000000 +#define SDR0_PFC0_TRE_MASK		(0x80000000 >> 23) +#define SDR0_PFC0_TRE_DISABLE		0x00000000 +#define SDR0_PFC0_TRE_ENABLE		(0x80000000 >> 23) + +/* + * Core Configuration/MMU configuration for 440 + */ +#define CCR0_DAPUIB		0x00100000 +#define CCR0_DTB		0x00008000 + +#define SDR0_SDCS_SDD		(0x80000000 >> 31) + +/* todo: move this code from macro offsets to struct */ +#define PCIL0_VENDID		(PCIL0_CFGBASE + PCI_VENDOR_ID ) +#define PCIL0_DEVID		(PCIL0_CFGBASE + PCI_DEVICE_ID ) +#define PCIL0_CMD		(PCIL0_CFGBASE + PCI_COMMAND ) +#define PCIL0_STATUS		(PCIL0_CFGBASE + PCI_STATUS ) +#define PCIL0_REVID		(PCIL0_CFGBASE + PCI_REVISION_ID ) +#define PCIL0_CLS		(PCIL0_CFGBASE + PCI_CLASS_CODE) +#define PCIL0_CACHELS		(PCIL0_CFGBASE + PCI_CACHE_LINE_SIZE ) +#define PCIL0_LATTIM		(PCIL0_CFGBASE + PCI_LATENCY_TIMER ) +#define PCIL0_HDTYPE		(PCIL0_CFGBASE + PCI_HEADER_TYPE ) +#define PCIL0_BIST		(PCIL0_CFGBASE + PCI_BIST ) +#define PCIL0_BAR0		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_0 ) +#define PCIL0_BAR1		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_1 ) +#define PCIL0_BAR2		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_2 ) +#define PCIL0_BAR3		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_3 ) +#define PCIL0_BAR4		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_4 ) +#define PCIL0_BAR5		(PCIL0_CFGBASE + PCI_BASE_ADDRESS_5 ) +#define PCIL0_CISPTR		(PCIL0_CFGBASE + PCI_CARDBUS_CIS ) +#define PCIL0_SBSYSVID		(PCIL0_CFGBASE + PCI_SUBSYSTEM_VENDOR_ID ) +#define PCIL0_SBSYSID		(PCIL0_CFGBASE + PCI_SUBSYSTEM_ID ) +#define PCIL0_EROMBA		(PCIL0_CFGBASE + PCI_ROM_ADDRESS ) +#define PCIL0_CAP		(PCIL0_CFGBASE + PCI_CAPABILITY_LIST ) +#define PCIL0_RES0		(PCIL0_CFGBASE + 0x0035 ) +#define PCIL0_RES1		(PCIL0_CFGBASE + 0x0036 ) +#define PCIL0_RES2		(PCIL0_CFGBASE + 0x0038 ) +#define PCIL0_INTLN		(PCIL0_CFGBASE + PCI_INTERRUPT_LINE ) +#define PCIL0_INTPN		(PCIL0_CFGBASE + PCI_INTERRUPT_PIN ) + +#define PCIL0_MINGNT		(PCIL0_CFGBASE + PCI_MIN_GNT ) +#define PCIL0_MAXLTNCY		(PCIL0_CFGBASE + PCI_MAX_LAT ) + +#define PCIL0_POM0LAL		(PCIL0_CFGBASE + 0x0068) +#define PCIL0_POM0LAH		(PCIL0_CFGBASE + 0x006c) +#define PCIL0_POM0SA		(PCIL0_CFGBASE + 0x0070) +#define PCIL0_POM0PCIAL		(PCIL0_CFGBASE + 0x0074) +#define PCIL0_POM0PCIAH		(PCIL0_CFGBASE + 0x0078) +#define PCIL0_POM1LAL		(PCIL0_CFGBASE + 0x007c) +#define PCIL0_POM1LAH		(PCIL0_CFGBASE + 0x0080) +#define PCIL0_POM1SA		(PCIL0_CFGBASE + 0x0084) +#define PCIL0_POM1PCIAL		(PCIL0_CFGBASE + 0x0088) +#define PCIL0_POM1PCIAH		(PCIL0_CFGBASE + 0x008c) +#define PCIL0_POM2SA		(PCIL0_CFGBASE + 0x0090) + +#define PCIL0_PIM0SA		(PCIL0_CFGBASE + 0x0098) +#define PCIL0_PIM0LAL		(PCIL0_CFGBASE + 0x009c) +#define PCIL0_PIM0LAH		(PCIL0_CFGBASE + 0x00a0) +#define PCIL0_PIM1SA		(PCIL0_CFGBASE + 0x00a4) +#define PCIL0_PIM1LAL		(PCIL0_CFGBASE + 0x00a8) +#define PCIL0_PIM1LAH		(PCIL0_CFGBASE + 0x00ac) +#define PCIL0_PIM2SA		(PCIL0_CFGBASE + 0x00b0) +#define PCIL0_PIM2LAL		(PCIL0_CFGBASE + 0x00b4) +#define PCIL0_PIM2LAH		(PCIL0_CFGBASE + 0x00b8) + +#define PCIL0_STS		(PCIL0_CFGBASE + 0x00e0) + +#endif	/* __PPC440_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440ep_gr.h b/roms/u-boot/arch/powerpc/include/asm/ppc440ep_gr.h new file mode 100644 index 00000000..c2c3abb0 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440ep_gr.h @@ -0,0 +1,231 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440EP_GR_H_ +#define _PPC440EP_GR_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR	/* IBM DDR controller */ + +#define CONFIG_NAND_NDFC + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped registers */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) +#define CONFIG_SYS_NS16550_COM3	(CONFIG_SYS_PERIPHERAL_BASE + 0x0500) +#define CONFIG_SYS_NS16550_COM4	(CONFIG_SYS_PERIPHERAL_BASE + 0x0600) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0b00) +#define GPIO1_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0c00) + +/* SDR's */ +#define SDR0_PCI0	0x0300 +#define SDR0_SDSTP2	0x4001 +#define SDR0_SDSTP3	0x4003 + +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 21) +#define SDR0_SDSTP1_PAME_MASK		(0x80000000 >> 27) + +/* Pin Function Control Register 1 */ +#define SDR0_PFC1_U1ME_MASK		0x02000000 /* UART1 Mode Enable */ +#define SDR0_PFC1_U1ME_DSR_DTR		0x00000000 /* UART1 in DSR/DTR Mode */ +#define SDR0_PFC1_U1ME_CTS_RTS		0x02000000 /* UART1 in CTS/RTS Mode */ +#define SDR0_PFC1_U0ME_MASK		0x00080000 /* UART0 Mode Enable */ +#define SDR0_PFC1_U0ME_DSR_DTR		0x00000000 /* UART0 in DSR/DTR Mode */ +#define SDR0_PFC1_U0ME_CTS_RTS		0x00080000 /* UART0 in CTS/RTS Mode */ +#define SDR0_PFC1_U0IM_MASK		0x00040000 /* UART0 Interface Mode */ +#define SDR0_PFC1_U0IM_8PINS		0x00000000 /* UART0 Interface Mode 8 pins */ +#define SDR0_PFC1_U0IM_4PINS		0x00040000 /* UART0 Interface Mode 4 pins */ +#define SDR0_PFC1_SIS_MASK		0x00020000 /* SCP or IIC1 Selection */ +#define SDR0_PFC1_SIS_SCP_SEL		0x00000000 /* SCP Selected */ +#define SDR0_PFC1_SIS_IIC1_SEL		0x00020000 /* IIC1 Selected */ +#define SDR0_PFC1_UES_MASK		0x00010000 /* USB2D_RX_Active / EBC_Hold +						      Req Selection */ +#define SDR0_PFC1_UES_USB2D_SEL		0x00000000 /* USB2D_RX_Active Selected */ +#define SDR0_PFC1_UES_EBCHR_SEL		0x00010000 /* EBC_Hold Req Selected */ +#define SDR0_PFC1_DIS_MASK		0x00008000 /* DMA_Req(1) / UIC_IRQ(5) +						      Selection */ +#define SDR0_PFC1_DIS_DMAR_SEL		0x00000000 /* DMA_Req(1) Selected */ +#define SDR0_PFC1_DIS_UICIRQ5_SEL	0x00008000 /* UIC_IRQ(5) Selected */ +#define SDR0_PFC1_ERE_MASK		0x00004000 /* EBC Mast.Ext.Req.En./GPIO0(27) +						      Selection */ +#define SDR0_PFC1_ERE_EXTR_SEL		0x00000000 /* EBC Mast.Ext.Req.En. +						      Selected */ +#define SDR0_PFC1_ERE_GPIO0_27_SEL	0x00004000 /* GPIO0(27) Selected */ +#define SDR0_PFC1_UPR_MASK		0x00002000 /* USB2 Device Packet Reject +						      Selection */ +#define SDR0_PFC1_UPR_DISABLE		0x00000000 /* USB2 Device Packet Reject +						      Disable */ +#define SDR0_PFC1_UPR_ENABLE		0x00002000 /* USB2 Device Packet Reject +						      Enable */ +#define SDR0_PFC1_PLB_PME_MASK		0x00001000 /* PLB3/PLB4 Perf. Monitor Enable +						      Selection */ +#define SDR0_PFC1_PLB_PME_PLB3_SEL	0x00000000 /* PLB3 Performance Monitor +						      Enable */ +#define SDR0_PFC1_PLB_PME_PLB4_SEL	0x00001000 /* PLB3 Performance Monitor +						      Enable */ +#define SDR0_PFC1_GFGGI_MASK		0x0000000F /* GPT Frequency Generation +						      Gated In */ + +/* USB Control Register */ +#define SDR0_USB0_USB_DEVSEL_MASK	0x00000002 /* USB Device Selection */ +#define SDR0_USB0_USB20D_DEVSEL		0x00000000 /* USB2.0 Device Selected */ +#define SDR0_USB0_USB11D_DEVSEL		0x00000002 /* USB1.1 Device Selected */ +#define SDR0_USB0_LEEN_MASK		0x00000001 /* Little Endian selection */ +#define SDR0_USB0_LEEN_DISABLE		0x00000000 /* Little Endian Disable */ +#define SDR0_USB0_LEEN_ENABLE		0x00000001 /* Little Endian Enable */ + +/* Miscealleneaous Function Reg. */ +#define SDR0_MFR_ETH0_CLK_SEL_MASK	0x08000000 /* Ethernet0 Clock Select */ +#define SDR0_MFR_ETH0_CLK_SEL_EXT	0x00000000 +#define SDR0_MFR_ETH1_CLK_SEL_MASK	0x04000000 /* Ethernet1 Clock Select */ +#define SDR0_MFR_ETH1_CLK_SEL_EXT	0x00000000 +#define SDR0_MFR_ZMII_MODE_MASK		0x03000000 /* ZMII Mode Mask */ +#define SDR0_MFR_ZMII_MODE_MII		0x00000000 /* ZMII Mode MII */ +#define SDR0_MFR_ZMII_MODE_SMII		0x01000000 /* ZMII Mode SMII */ +#define SDR0_MFR_ZMII_MODE_RMII_10M	0x02000000 /* ZMII Mode RMII - 10 Mbs */ +#define SDR0_MFR_ZMII_MODE_RMII_100M	0x03000000 /* ZMII Mode RMII - 100 Mbs */ +#define SDR0_MFR_ZMII_MODE_BIT0		0x02000000 /* ZMII Mode Bit0 */ +#define SDR0_MFR_ZMII_MODE_BIT1		0x01000000 /* ZMII Mode Bit1 */ +#define SDR0_MFR_ZM_ENCODE(n)		((((u32)(n)) & 0x3) << 24) +#define SDR0_MFR_ZM_DECODE(n)		((((u32)(n)) << 24) & 0x3) + +#define SDR0_MFR_ERRATA3_EN0		0x00800000 +#define SDR0_MFR_ERRATA3_EN1		0x00400000 +#define SDR0_MFR_PKT_REJ_MASK		0x00180000 /* Pkt Rej. Enable Mask */ +#define SDR0_MFR_PKT_REJ_EN		0x00180000 /* Pkt Rej. Ena. on both EMAC3 0-1 */ +#define SDR0_MFR_PKT_REJ_EN0		0x00100000 /* Pkt Rej. Enable on EMAC3(0) */ +#define SDR0_MFR_PKT_REJ_EN1		0x00080000 /* Pkt Rej. Enable on EMAC3(1) */ +#define SDR0_MFR_PKT_REJ_POL		0x00200000 /* Packet Reject Polarity */ + +/* CUST0 Customer Configuration Register0 */ +#define SDR0_CUST0_MUX_E_N_G_MASK	0xC0000000 /* Mux_Emac_NDFC_GPIO */ +#define SDR0_CUST0_MUX_EMAC_SEL		0x40000000 /* Emac Selection */ +#define SDR0_CUST0_MUX_NDFC_SEL		0x80000000 /* NDFC Selection */ +#define SDR0_CUST0_MUX_GPIO_SEL		0xC0000000 /* GPIO Selection */ + +#define SDR0_CUST0_NDFC_EN_MASK		0x20000000 /* NDFC Enable Mask */ +#define SDR0_CUST0_NDFC_ENABLE		0x20000000 /* NDFC Enable */ +#define SDR0_CUST0_NDFC_DISABLE		0x00000000 /* NDFC Disable */ + +#define SDR0_CUST0_NDFC_BW_MASK		0x10000000 /* NDFC Boot Width */ +#define SDR0_CUST0_NDFC_BW_16_BIT	0x10000000 /* NDFC Boot Width = 16 Bit */ +#define SDR0_CUST0_NDFC_BW_8_BIT	0x00000000 /* NDFC Boot Width =  8 Bit */ + +#define SDR0_CUST0_NDFC_BP_MASK		0x0F000000 /* NDFC Boot Page */ +#define SDR0_CUST0_NDFC_BP_ENCODE(n)	((((u32)(n)) & 0xF) << 24) +#define SDR0_CUST0_NDFC_BP_DECODE(n)	((((u32)(n)) >> 24) & 0xF) + +#define SDR0_CUST0_NDFC_BAC_MASK	0x00C00000 /* NDFC Boot Address Cycle */ +#define SDR0_CUST0_NDFC_BAC_ENCODE(n)	((((u32)(n)) & 0x3) << 22) +#define SDR0_CUST0_NDFC_BAC_DECODE(n)	((((u32)(n)) >> 22) & 0x3) + +#define SDR0_CUST0_NDFC_ARE_MASK	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_ENABLE	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_DISABLE	0x00000000 /* NDFC Auto Read Disable */ + +#define SDR0_CUST0_NRB_MASK		0x00100000 /* NDFC Ready / Busy */ +#define SDR0_CUST0_NRB_BUSY		0x00100000 /* Busy */ +#define SDR0_CUST0_NRB_READY		0x00000000 /* Ready */ + +#define SDR0_CUST0_NDRSC_MASK		0x0000FFF0 /* NDFC Device Reset Count Mask */ +#define SDR0_CUST0_NDRSC_ENCODE(n)	((((u32)(n)) & 0xFFF) << 4) +#define SDR0_CUST0_NDRSC_DECODE(n)	((((u32)(n)) >> 4) & 0xFFF) + +#define SDR0_CUST0_CHIPSELGAT_MASK	0x0000000F /* Chip Select Gating Mask */ +#define SDR0_CUST0_CHIPSELGAT_DIS	0x00000000 /* Chip Select Gating Disable */ +#define SDR0_CUST0_CHIPSELGAT_ENALL	0x0000000F /*All Chip Select Gating Enable*/ +#define SDR0_CUST0_CHIPSELGAT_EN0	0x00000008 /* Chip Select0 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN1	0x00000004 /* Chip Select1 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN2	0x00000002 /* Chip Select2 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN3	0x00000001 /* Chip Select3 Gating Enable */ + +#define SDR0_SRST_DMC			0x00200000 + +#define PLLSYS0_ENG_MASK	0x80000000	/* 0 = SysClk, 1 = PLL VCO */ +#define PLLSYS0_SRC_MASK	0x40000000	/* 0 = PLL A, 1 = PLL B */ +#define PLLSYS0_SEL_MASK	0x38000000	/* 0 = PLL, 1 = CPU, 5 = PerClk */ +#define PLLSYS0_TUNE_MASK	0x07fe0000	/* PLL Tune bits */ +#define PLLSYS0_FB_DIV_MASK	0x0001f000	/* Feedback divisor */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00000f00	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x000000e0	/* Fwd Div B */ +#define PLLSYS0_PRI_DIV_B_MASK	0x0000001c	/* PLL Primary Divisor B */ +#define PLLSYS0_OPB_DIV_MASK	0x00000003	/* OPB Divisor */ + +#define PLLC_ENG_MASK		0x20000000  /* PLL primary forward divisor source */ +#define PLLC_SRC_MASK		0x20000000  /* PLL feedback source   */ +#define PLLD_FBDV_MASK		0x1f000000  /* PLL Feedback Divisor  */ +#define PLLD_FWDVA_MASK		0x000f0000  /* PLL Forward Divisor A */ +#define PLLD_FWDVB_MASK		0x00000700  /* PLL Forward Divisor B */ +#define PLLD_LFBDV_MASK		0x0000003f  /* PLL Local Feedback Divisor */ + +#define OPBDDV_MASK		0x03000000  /* OPB Clock Divisor Register */ +#define PERDV_MASK		0x07000000  /* Peripheral Clock Divisor */ +#define PRADV_MASK		0x07000000  /* Primary Divisor A */ +#define PRBDV_MASK		0x07000000  /* Primary Divisor B */ +#define SPCID_MASK		0x03000000  /* Sync PCI Divisor  */ + +/* Strap 1 Register */ +#define PLLSYS1_LF_DIV_MASK	0xfc000000	/* PLL Local Feedback Divisor */ +#define PLLSYS1_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS1_MAL_DIV_MASK	0x00c00000	/* MAL Clk Divisor */ +#define PLLSYS1_RW_MASK		0x00300000	/* ROM width */ +#define PLLSYS1_EAR_MASK	0x00080000	/* ERAP Address reset vector */ +#define PLLSYS1_PAE_MASK	0x00040000	/* PCI arbitor enable */ +#define PLLSYS1_PCHE_MASK	0x00020000	/* PCI host config enable */ +#define PLLSYS1_PISE_MASK	0x00010000	/* PCI init seq. enable */ +#define PLLSYS1_PCWE_MASK	0x00008000	/* PCI local cpu wait enable */ +#define PLLSYS1_PPIM_MASK	0x00007800	/* PCI inbound map */ +#define PLLSYS1_PR64E_MASK	0x00000400	/* PCI init Req64 enable */ +#define PLLSYS1_PXFS_MASK	0x00000300	/* PCI-X Freq Sel */ +#define PLLSYS1_RSVD_MASK	0x00000080	/* RSVD */ +#define PLLSYS1_PDM_MASK	0x00000040	/* PCI-X Driver Mode */ +#define PLLSYS1_EPS_MASK	0x00000038	/* Ethernet Pin Select */ +#define PLLSYS1_RMII_MASK	0x00000004	/* RMII Mode */ +#define PLLSYS1_TRE_MASK	0x00000002	/* GPIO Trace Enable */ +#define PLLSYS1_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio */ + +#define CPR0_ICFG_RLI_MASK	0x80000000 +#define CPR0_ICFG_ICS_MASK	0x00000007 +#define CPR0_SPCID_SPCIDV0_MASK	0x03000000 +#define CPR0_SPCID_SPCIDV0_DIV1	0x01000000 +#define CPR0_SPCID_SPCIDV0_DIV2	0x02000000 +#define CPR0_SPCID_SPCIDV0_DIV3	0x03000000 +#define CPR0_SPCID_SPCIDV0_DIV4	0x00000000 +#define CPR0_PERD_PERDV0_MASK	0x07000000 + +#define PCI_MMIO_LCR_BASE	(CONFIG_SYS_PCI_BASE + 0x0f400000) /* Real => +								      0x0EF400000 */ + +/* PCI Master Local Configuration Registers */ +#define PCIL0_PMM0LA		(PCI_MMIO_LCR_BASE + 0x00) /* PMM0 Local Address */ +#define PCIL0_PMM0MA		(PCI_MMIO_LCR_BASE + 0x04) /* PMM0 Mask/Attribute */ +#define PCIL0_PMM0PCILA		(PCI_MMIO_LCR_BASE + 0x08) /* PMM0 PCI Low Address */ +#define PCIL0_PMM0PCIHA		(PCI_MMIO_LCR_BASE + 0x0C) /* PMM0 PCI High Address */ +#define PCIL0_PMM1LA		(PCI_MMIO_LCR_BASE + 0x10) /* PMM1 Local Address */ +#define PCIL0_PMM1MA		(PCI_MMIO_LCR_BASE + 0x14) /* PMM1 Mask/Attribute */ +#define PCIL0_PMM1PCILA		(PCI_MMIO_LCR_BASE + 0x18) /* PMM1 PCI Low Address */ +#define PCIL0_PMM1PCIHA		(PCI_MMIO_LCR_BASE + 0x1C) /* PMM1 PCI High Address */ +#define PCIL0_PMM2LA		(PCI_MMIO_LCR_BASE + 0x20) /* PMM2 Local Address */ +#define PCIL0_PMM2MA		(PCI_MMIO_LCR_BASE + 0x24) /* PMM2 Mask/Attribute */ +#define PCIL0_PMM2PCILA		(PCI_MMIO_LCR_BASE + 0x28) /* PMM2 PCI Low Address */ +#define PCIL0_PMM2PCIHA		(PCI_MMIO_LCR_BASE + 0x2C) /* PMM2 PCI High Address */ + +/* PCI Target Local Configuration Registers */ +#define PCIL0_PTM1MS		(PCI_MMIO_LCR_BASE + 0x30) /* PTM1 Memory Size/ +							      Attribute */ +#define PCIL0_PTM1LA		(PCI_MMIO_LCR_BASE + 0x34) /* PTM1 Local Addr. Reg */ +#define PCIL0_PTM2MS		(PCI_MMIO_LCR_BASE + 0x38) /* PTM2 Memory Size/ +							      Attribute */ +#define PCIL0_PTM2LA		(PCI_MMIO_LCR_BASE + 0x3C) /* PTM2 Local Addr. Reg */ + +#endif /* _PPC440EP_GR_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440epx_grx.h b/roms/u-boot/arch/powerpc/include/asm/ppc440epx_grx.h new file mode 100644 index 00000000..93c3e2ef --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440epx_grx.h @@ -0,0 +1,453 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440EPX_GRX_H_ +#define _PPC440EPX_GRX_H_ + +#define CONFIG_SDRAM_PPC4xx_DENALI_DDR2	/* Denali DDR(2) controller */ + +#define CONFIG_NAND_NDFC + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped registers */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define SPI0_MODE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0090) + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) +#define CONFIG_SYS_NS16550_COM3	(CONFIG_SYS_PERIPHERAL_BASE + 0x0500) +#define CONFIG_SYS_NS16550_COM4	(CONFIG_SYS_PERIPHERAL_BASE + 0x0600) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0b00) +#define GPIO1_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0c00) + +/* DCR */ +#define CPM0_ER			0x00b0 +#define CPM1_ER			0x00f0 +#define PLB3A0_ACR		0x0077 +#define PLB4A0_ACR		0x0081 +#define PLB4A1_ACR		0x0089 +#define OPB2PLB40_BCTRL		0x0350 +#define P4P3BO0_CFG		0x0026 + +/* SDR */ +#define SDR0_DDRCFG		0x00e0 +#define SDR0_PCI0		0x0300 +#define SDR0_SDSTP2		0x4001 +#define SDR0_SDSTP3		0x4003 +#define SDR0_EMAC0RXST 		0x4301 +#define SDR0_EMAC0TXST		0x4302 +#define SDR0_CRYP0		0x4500 + +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 21) +#define SDR0_SDSTP1_PAME_MASK		(0x80000000 >> 27) + +/* Pin Function Control Register 1 */ +#define SDR0_PFC1_U1ME_MASK		0x02000000 /* UART1 Mode Enable */ +#define SDR0_PFC1_U1ME_DSR_DTR		0x00000000 /* UART1 in DSR/DTR Mode */ +#define SDR0_PFC1_U1ME_CTS_RTS		0x02000000 /* UART1 in CTS/RTS Mode */ +#define SDR0_PFC1_SELECT_MASK		0x01C00000 /* Ethernet Pin Select +						      EMAC 0 */ +#define SDR0_PFC1_SELECT_CONFIG_1_1	0x00C00000 /* 1xMII   using RGMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_1_2	0x00000000 /* 1xMII   using  ZMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_2	0x00C00000 /* 1xGMII  using RGMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_3	0x01000000 /* 1xTBI   using RGMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_4	0x01400000 /* 2xRGMII using RGMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_5	0x01800000 /* 2xRTBI  using RGMII +						      bridge */ +#define SDR0_PFC1_SELECT_CONFIG_6	0x00800000 /* 2xSMII  using  ZMII +						      bridge */ +#define SDR0_PFC1_U0ME_MASK		0x00080000 /* UART0 Mode Enable */ +#define SDR0_PFC1_U0ME_DSR_DTR		0x00000000 /* UART0 in DSR/DTR Mode */ +#define SDR0_PFC1_U0ME_CTS_RTS		0x00080000 /* UART0 in CTS/RTS Mode */ +#define SDR0_PFC1_U0IM_MASK		0x00040000 /* UART0 Interface Mode */ +#define SDR0_PFC1_U0IM_8PINS		0x00000000 /* UART0 Interface Mode 8 pins */ +#define SDR0_PFC1_U0IM_4PINS		0x00040000 /* UART0 Interface Mode 4 pins */ +#define SDR0_PFC1_SIS_MASK		0x00020000 /* SCP or IIC1 Selection */ +#define SDR0_PFC1_SIS_SCP_SEL		0x00000000 /* SCP Selected */ +#define SDR0_PFC1_SIS_IIC1_SEL		0x00020000 /* IIC1 Selected */ +#define SDR0_PFC1_UES_MASK		0x00010000 /* USB2D_RX_Active / EBC_Hold +						      Req Selection */ +#define SDR0_PFC1_UES_USB2D_SEL		0x00000000 /* USB2D_RX_Active Selected */ +#define SDR0_PFC1_UES_EBCHR_SEL		0x00010000 /* EBC_Hold Req Selected */ +#define SDR0_PFC1_DIS_MASK		0x00008000 /* DMA_Req(1) / UIC_IRQ(5) +						      Selection */ +#define SDR0_PFC1_DIS_DMAR_SEL		0x00000000 /* DMA_Req(1) Selected */ +#define SDR0_PFC1_DIS_UICIRQ5_SEL	0x00008000 /* UIC_IRQ(5) Selected */ +#define SDR0_PFC1_ERE_MASK		0x00004000 /* EBC Mast.Ext.Req.En./GPIO0(27) +						      Selection */ +#define SDR0_PFC1_ERE_EXTR_SEL		0x00000000 /* EBC Mast.Ext.Req.En. +						      Selected */ +#define SDR0_PFC1_ERE_GPIO0_27_SEL	0x00004000 /* GPIO0(27) Selected */ +#define SDR0_PFC1_UPR_MASK		0x00002000 /* USB2 Device Packet Reject +						      Selection */ +#define SDR0_PFC1_UPR_DISABLE		0x00000000 /* USB2 Device Packet Reject +						      Disable */ +#define SDR0_PFC1_UPR_ENABLE		0x00002000 /* USB2 Device Packet Reject +						      Enable */ +#define SDR0_PFC1_PLB_PME_MASK		0x00001000 /* PLB3/PLB4 Perf. Monitor Enable +						      Selection */ +#define SDR0_PFC1_PLB_PME_PLB3_SEL	0x00000000 /* PLB3 Performance Monitor +						      Enable */ +#define SDR0_PFC1_PLB_PME_PLB4_SEL	0x00001000 /* PLB3 Performance Monitor +						      Enable */ +#define SDR0_PFC1_GFGGI_MASK		0x0000000F /* GPT Frequency Generation +						      Gated In */ + +#define SDR0_PFC2_SELECT_MASK		0xe0000000 /* Ethernet Pin select EMAC1 */ +#define SDR0_PFC2_SELECT_CONFIG_1_1	0x60000000 /* 1xMII   using RGMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_1_2	0x00000000 /* 1xMII   using  ZMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_2	0x60000000 /* 1xGMII  using RGMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_3	0x80000000 /* 1xTBI   using RGMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_4	0xa0000000 /* 2xRGMII using RGMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_5	0xc0000000 /* 2xRTBI  using RGMII bridge */ +#define SDR0_PFC2_SELECT_CONFIG_6	0x40000000 /* 2xSMII  using  ZMII bridge */ + +#define SDR0_USB2D0CR	0x0320 +#define SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK 0x00000004 /* USB 2.0 Device/EBC +							 Master Selection */ +#define SDR0_USB2D0CR_USB2DEV_SELECTION	0x00000004 /* USB 2.0 Device Selection*/ +#define SDR0_USB2D0CR_EBC_SELECTION	0x00000000 /* EBC Selection */ + +#define SDR0_USB2D0CR_USB_DEV_INT_SEL_MASK 0x00000002 /* USB Device Interface +							 Selection */ +#define SDR0_USB2D0CR_USB20D_DEVSEL	0x00000000 /* USB2.0 Device Selected */ +#define SDR0_USB2D0CR_USB11D_DEVSEL	0x00000002 /* USB1.1 Device Selected */ + +#define SDR0_USB2D0CR_LEEN_MASK		0x00000001 /* Little Endian selection */ +#define SDR0_USB2D0CR_LEEN_DISABLE	0x00000000 /* Little Endian Disable */ +#define SDR0_USB2D0CR_LEEN_ENABLE	0x00000001 /* Little Endian Enable */ + +/* USB2 Host Control Register */ +#define SDR0_USB2H0CR		0x0340 +#define SDR0_USB2H0CR_WDINT_MASK	0x00000001 /* Host UTMI Word Interface*/ +#define SDR0_USB2H0CR_WDINT_8BIT_60MHZ	0x00000000 /* 8-bit/60MHz */ +#define SDR0_USB2H0CR_WDINT_16BIT_30MHZ	0x00000001 /* 16-bit/30MHz */ +#define SDR0_USB2H0CR_EFLADJ_MASK	0x0000007e /* EHCI Frame Length +						      Adjustment */ +/* USB2PHY0 Control Register */ +#define SDR0_USB2PHY0CR		0x4103 +#define SDR0_USB2PHY0CR_UTMICN_MASK	0x00100000 + +	/*  PHY UTMI interface connection */ +#define SDR0_USB2PHY0CR_UTMICN_DEV	0x00000000 /* Device support */ +#define SDR0_USB2PHY0CR_UTMICN_HOST	0x00100000 /* Host support */ + +#define SDR0_USB2PHY0CR_DWNSTR_MASK	0x00400000 /* Select downstream port mode */ +#define SDR0_USB2PHY0CR_DWNSTR_DEV	0x00000000 /* Device */ +#define SDR0_USB2PHY0CR_DWNSTR_HOST	0x00400000 /* Host   */ + +/* VBus detect (Device mode only)  */ +#define SDR0_USB2PHY0CR_DVBUS_MASK	0x00800000 +/* Pull-up resistance on D+ is disabled */ +#define SDR0_USB2PHY0CR_DVBUS_PURDIS	0x00000000 +/* Pull-up resistance on D+ is enabled */ +#define SDR0_USB2PHY0CR_DVBUS_PUREN	0x00800000 + +/* PHY UTMI data width and clock select  */ +#define SDR0_USB2PHY0CR_WDINT_MASK	0x01000000 +#define SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ 0x00000000 /* 8-bit data/60MHz */ +#define SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ 0x01000000 /* 16-bit data/30MHz */ + +#define SDR0_USB2PHY0CR_LOOPEN_MASK	0x02000000 /* Loop back test enable  */ +#define SDR0_USB2PHY0CR_LOOP_ENABLE	0x00000000 /* Loop back disabled */ +/* Loop back enabled (only test purposes) */ +#define SDR0_USB2PHY0CR_LOOP_DISABLE	0x02000000 + +/* Force XO block on during a suspend  */ +#define SDR0_USB2PHY0CR_XOON_MASK	0x04000000 +#define SDR0_USB2PHY0CR_XO_ON		0x00000000 /* PHY XO block is powered-on */ +/* PHY XO block is powered-off when all ports are suspended */ +#define SDR0_USB2PHY0CR_XO_OFF		0x04000000 + +#define SDR0_USB2PHY0CR_PWRSAV_MASK	0x08000000 /* Select PHY power-save mode  */ +#define SDR0_USB2PHY0CR_PWRSAV_OFF	0x00000000 /* Non-power-save mode */ +#define SDR0_USB2PHY0CR_PWRSAV_ON	0x08000000 /* Power-save mode. Valid only +						      for full-speed operation */ + +#define SDR0_USB2PHY0CR_XOREF_MASK	0x10000000 /* Select reference clock +						      source  */ +#define SDR0_USB2PHY0CR_XOREF_INTERNAL	0x00000000 /* PHY PLL uses chip internal +						      48M clock as a reference */ +#define SDR0_USB2PHY0CR_XOREF_XO	0x10000000 /* PHY PLL uses internal XO +						      block output as a reference */ + +#define SDR0_USB2PHY0CR_XOCLK_MASK	0x20000000 /* Select clock for XO +						      block*/ +#define SDR0_USB2PHY0CR_XOCLK_EXTERNAL	0x00000000 /* PHY macro used an external +						      clock */ +#define SDR0_USB2PHY0CR_XOCLK_CRYSTAL	0x20000000 /* PHY macro uses the clock +						      from a crystal */ + +#define SDR0_USB2PHY0CR_CLKSEL_MASK	0xc0000000 /* Select ref clk freq */ +#define SDR0_USB2PHY0CR_CLKSEL_12MHZ	0x00000000 /* Select ref clk freq +						      = 12 MHz */ +#define SDR0_USB2PHY0CR_CLKSEL_48MHZ	0x40000000 /* Select ref clk freq +						      = 48 MHz */ +#define SDR0_USB2PHY0CR_CLKSEL_24MHZ	0x80000000 /* Select ref clk freq +						      = 24 MHz */ + +/* USB2.0 Device */ +/* + * todo: check if this can be completely removed, only used in + * cpu/ppc4xx/usbdev.c. And offsets are completely wrong. This could + * never have actually worked. Best probably is to remove this + * usbdev.c file completely (and these defines). + */ +#define USB2D0_BASE         CONFIG_SYS_USB2D0_BASE + +#define USB2D0_INTRIN       (USB2D0_BASE + 0x00000000) + +#define USB2D0_INTRIN       (USB2D0_BASE + 0x00000000) /* Interrupt register for +				Endpoint 0 plus IN Endpoints 1 to 3 */ +#define USB2D0_POWER        (USB2D0_BASE + 0x00000000) /* Power management +				register */ +#define USB2D0_FADDR        (USB2D0_BASE + 0x00000000) /* Function address +				register */ +#define USB2D0_INTRINE      (USB2D0_BASE + 0x00000000) /* Interrupt enable +				register for USB2D0_INTRIN */ +#define USB2D0_INTROUT      (USB2D0_BASE + 0x00000000) /* Interrupt register for +				OUT Endpoints 1 to 3 */ +#define USB2D0_INTRUSBE     (USB2D0_BASE + 0x00000000) /* Interrupt enable +				register for USB2D0_INTRUSB */ +#define USB2D0_INTRUSB      (USB2D0_BASE + 0x00000000) /* Interrupt register for +				common USB interrupts */ +#define USB2D0_INTROUTE     (USB2D0_BASE + 0x00000000) /* Interrupt enable +				register for IntrOut */ +#define USB2D0_TSTMODE      (USB2D0_BASE + 0x00000000) /* Enables the USB 2.0 +				test modes */ +#define USB2D0_INDEX        (USB2D0_BASE + 0x00000000) /* Index register for +			     selecting the Endpoint status/control registers */ +#define USB2D0_FRAME        (USB2D0_BASE + 0x00000000) /* Frame number */ +#define USB2D0_INCSR0       (USB2D0_BASE + 0x00000000) /* Control Status +	  register for Endpoint 0. (Index register set to select Endpoint 0) */ +#define USB2D0_INCSR        (USB2D0_BASE + 0x00000000) /* Control Status +       register for IN Endpoint. (Index register set to select Endpoints 13) */ +#define USB2D0_INMAXP       (USB2D0_BASE + 0x00000000) /* Maximum packet +	   size for IN Endpoint. (Index register set to select Endpoints 13) */ +#define USB2D0_OUTCSR       (USB2D0_BASE + 0x00000000) /* Control Status +      register for OUT Endpoint. (Index register set to select Endpoints 13) */ +#define USB2D0_OUTMAXP      (USB2D0_BASE + 0x00000000) /* Maximum packet +	  size for OUT Endpoint. (Index register set to select Endpoints 13) */ +#define USB2D0_OUTCOUNT0    (USB2D0_BASE + 0x00000000) /* Number of received +	 bytes in Endpoint 0 FIFO. (Index register set to select Endpoint 0) */ +#define USB2D0_OUTCOUNT     (USB2D0_BASE + 0x00000000) /* Number of bytes in +	      OUT Endpoint FIFO. (Index register set to select Endpoints 13) */ + +/* Miscealleneaous Function Reg. */ +#define SDR0_MFR_ETH0_CLK_SEL_MASK	0x08000000 /* Ethernet0 Clock Select */ +#define SDR0_MFR_ETH0_CLK_SEL_EXT	0x00000000 +#define SDR0_MFR_ETH1_CLK_SEL_MASK	0x04000000 /* Ethernet1 Clock Select */ +#define SDR0_MFR_ETH1_CLK_SEL_EXT	0x00000000 +#define SDR0_MFR_ZMII_MODE_MASK		0x03000000 /* ZMII Mode Mask */ +#define SDR0_MFR_ZMII_MODE_MII		0x00000000 /* ZMII Mode MII */ +#define SDR0_MFR_ZMII_MODE_SMII		0x01000000 /* ZMII Mode SMII */ +#define SDR0_MFR_ZMII_MODE_BIT0		0x02000000 /* ZMII Mode Bit0 */ +#define SDR0_MFR_ZMII_MODE_BIT1		0x01000000 /* ZMII Mode Bit1 */ +#define SDR0_MFR_ZM_ENCODE(n)		((((u32)(n)) & 0x3) << 24) +#define SDR0_MFR_ZM_DECODE(n)		((((u32)(n)) << 24) & 0x3) +#define SDR0_MFR_PKT_REJ_MASK		0x00300000 /* Pkt Rej. Enable Mask */ +#define SDR0_MFR_PKT_REJ_EN		0x00300000 /* Pkt Rej. Ena. on both EMAC3 0-1 */ +#define SDR0_MFR_PKT_REJ_EN0		0x00200000 /* Pkt Rej. Enable on EMAC3(0) */ +#define SDR0_MFR_PKT_REJ_EN1		0x00100000 /* Pkt Rej. Enable on EMAC3(1) */ +#define SDR0_MFR_PKT_REJ_POL		0x00080000 /* Packet Reject Polarity */ + +/* CUST0 Customer Configuration Register0 */ +#define SDR0_CUST0_MUX_E_N_G_MASK	0xC0000000 /* Mux_Emac_NDFC_GPIO */ +#define SDR0_CUST0_MUX_EMAC_SEL		0x40000000 /* Emac Selection */ +#define SDR0_CUST0_MUX_NDFC_SEL		0x80000000 /* NDFC Selection */ +#define SDR0_CUST0_MUX_GPIO_SEL		0xC0000000 /* GPIO Selection */ + +#define SDR0_CUST0_NDFC_EN_MASK		0x20000000 /* NDFC Enable Mask */ +#define SDR0_CUST0_NDFC_ENABLE		0x20000000 /* NDFC Enable */ +#define SDR0_CUST0_NDFC_DISABLE		0x00000000 /* NDFC Disable */ + +#define SDR0_CUST0_NDFC_BW_MASK		0x10000000 /* NDFC Boot Width */ +#define SDR0_CUST0_NDFC_BW_16_BIT	0x10000000 /* NDFC Boot Width = 16 Bit */ +#define SDR0_CUST0_NDFC_BW_8_BIT	0x00000000 /* NDFC Boot Width =  8 Bit */ + +#define SDR0_CUST0_NDFC_BP_MASK		0x0F000000 /* NDFC Boot Page */ +#define SDR0_CUST0_NDFC_BP_ENCODE(n)	((((u32)(n)) & 0xF) << 24) +#define SDR0_CUST0_NDFC_BP_DECODE(n)	((((u32)(n)) >> 24) & 0xF) + +#define SDR0_CUST0_NDFC_BAC_MASK	0x00C00000 /* NDFC Boot Address Cycle */ +#define SDR0_CUST0_NDFC_BAC_ENCODE(n)	((((u32)(n)) & 0x3) << 22) +#define SDR0_CUST0_NDFC_BAC_DECODE(n)	((((u32)(n)) >> 22) & 0x3) + +#define SDR0_CUST0_NDFC_ARE_MASK	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_ENABLE	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_DISABLE	0x00000000 /* NDFC Auto Read Disable */ + +#define SDR0_CUST0_NRB_MASK		0x00100000 /* NDFC Ready / Busy */ +#define SDR0_CUST0_NRB_BUSY		0x00100000 /* Busy */ +#define SDR0_CUST0_NRB_READY		0x00000000 /* Ready */ + +#define SDR0_CUST0_NDRSC_MASK		0x0000FFF0 /* NDFC Device Reset Count Mask */ +#define SDR0_CUST0_NDRSC_ENCODE(n)	((((u32)(n)) & 0xFFF) << 4) +#define SDR0_CUST0_NDRSC_DECODE(n)	((((u32)(n)) >> 4) & 0xFFF) + +#define SDR0_CUST0_CHIPSELGAT_MASK	0x0000000F /* Chip Select Gating Mask */ +#define SDR0_CUST0_CHIPSELGAT_DIS	0x00000000 /* Chip Select Gating Disable */ +#define SDR0_CUST0_CHIPSELGAT_ENALL	0x0000000F /*All Chip Select Gating Enable*/ +#define SDR0_CUST0_CHIPSELGAT_EN0	0x00000008 /* Chip Select0 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN1	0x00000004 /* Chip Select1 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN2	0x00000002 /* Chip Select2 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN3	0x00000001 /* Chip Select3 Gating Enable */ + +#define SDR0_SRST0_BGO		0x80000000 /* PLB to OPB bridge */ +#define SDR0_SRST0_PLB4		0x40000000 /* PLB4 arbiter */ +#define SDR0_SRST0_EBC		0x20000000 /* External bus controller */ +#define SDR0_SRST0_OPB		0x10000000 /* OPB arbiter */ +#define SDR0_SRST0_UART0	0x08000000 /* Universal asynchronous receiver/ +					      transmitter 0 */ +#define SDR0_SRST0_UART1	0x04000000 /* Universal asynchronous receiver/ +					      transmitter 1 */ +#define SDR0_SRST0_IIC0		0x02000000 /* Inter integrated circuit 0 */ +#define SDR0_SRST0_USB2H	0x01000000 /* USB2.0 Host */ +#define SDR0_SRST0_GPIO		0x00800000 /* General purpose I/O */ +#define SDR0_SRST0_GPT		0x00400000 /* General purpose timer */ +#define SDR0_SRST0_DMC		0x00200000 /* DDR SDRAM memory controller */ +#define SDR0_SRST0_PCI		0x00100000 /* PCI */ +#define SDR0_SRST0_EMAC0	0x00080000 /* Ethernet media access controller 0 */ +#define SDR0_SRST0_EMAC1	0x00040000 /* Ethernet media access controller 1 */ +#define SDR0_SRST0_CPM0		0x00020000 /* Clock and power management */ +#define SDR0_SRST0_ZMII		0x00010000 /* ZMII bridge */ +#define SDR0_SRST0_UIC0		0x00008000 /* Universal interrupt controller 0 */ +#define SDR0_SRST0_UIC1		0x00004000 /* Universal interrupt controller 1 */ +#define SDR0_SRST0_IIC1		0x00002000 /* Inter integrated circuit 1 */ +#define SDR0_SRST0_SCP		0x00001000 /* Serial communications port */ +#define SDR0_SRST0_BGI		0x00000800 /* OPB to PLB bridge */ +#define SDR0_SRST0_DMA		0x00000400 /* Direct memory access controller */ +#define SDR0_SRST0_DMAC		0x00000200 /* DMA channel */ +#define SDR0_SRST0_MAL		0x00000100 /* Media access layer */ +#define SDR0_SRST0_USB2D	0x00000080 /* USB2.0 device */ +#define SDR0_SRST0_GPTR		0x00000040 /* General purpose timer */ +#define SDR0_SRST0_P4P3		0x00000010 /* PLB4 to PLB3 bridge */ +#define SDR0_SRST0_P3P4		0x00000008 /* PLB3 to PLB4 bridge */ +#define SDR0_SRST0_PLB3		0x00000004 /* PLB3 arbiter */ +#define SDR0_SRST0_UART2	0x00000002 /* Universal asynchronous receiver/ +					      transmitter 2 */ +#define SDR0_SRST0_UART3	0x00000001 /* Universal asynchronous receiver/ +					      transmitter 3 */ + +#define SDR0_SRST1_NDFC		0x80000000 /* Nand flash controller */ +#define SDR0_SRST1_OPBA1	0x40000000 /* OPB Arbiter attached to PLB4 */ +#define SDR0_SRST1_P4OPB0	0x20000000 /* PLB4 to OPB Bridge0 */ +#define SDR0_SRST1_PLB42OPB0	SDR0_SRST1_P4OPB0 +#define SDR0_SRST1_DMA4		0x10000000 /* DMA to PLB4 */ +#define SDR0_SRST1_DMA4CH	0x08000000 /* DMA Channel to PLB4 */ +#define SDR0_SRST1_OPBA2	0x04000000 /* OPB Arbiter attached to PLB4 +					      USB 2.0 Host */ +#define SDR0_SRST1_OPB2PLB40	0x02000000 /* OPB to PLB4 Bridge attached to +					      USB 2.0 Host */ +#define SDR0_SRST1_PLB42OPB1	0x01000000 /* PLB4 to OPB Bridge attached to +					      USB 2.0 Host */ +#define SDR0_SRST1_CPM1		0x00800000 /* Clock and Power management 1 */ +#define SDR0_SRST1_UIC2		0x00400000 /* Universal Interrupt Controller 2*/ +#define SDR0_SRST1_CRYP0	0x00200000 /* Security Engine */ +#define SDR0_SRST1_USB20PHY	0x00100000 /* USB 2.0 Phy */ +#define SDR0_SRST1_USB2HUTMI	0x00080000 /* USB 2.0 Host UTMI Interface */ +#define SDR0_SRST1_USB2HPHY	0x00040000 /* USB 2.0 Host Phy Interface */ +#define SDR0_SRST1_SRAM0	0x00020000 /* Internal SRAM Controller */ +#define SDR0_SRST1_RGMII0	0x00010000 /* RGMII Bridge */ +#define SDR0_SRST1_ETHPLL	0x00008000 /* Ethernet PLL */ +#define SDR0_SRST1_FPU 		0x00004000 /* Floating Point Unit */ +#define SDR0_SRST1_KASU0	0x00002000 /* Kasumi Engine */ + +#define PLLSYS0_ENG_MASK	0x80000000	/* 0 = SysClk, 1 = PLL VCO */ +#define PLLSYS0_SRC_MASK	0x40000000	/* 0 = PLL A, 1 = PLL B */ +#define PLLSYS0_SEL_MASK	0x38000000	/* 0 = PLL, 1 = CPU, 5 = PerClk */ +#define PLLSYS0_TUNE_MASK	0x07fe0000	/* PLL Tune bits */ +#define PLLSYS0_FB_DIV_MASK	0x0001f000	/* Feedback divisor */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00000f00	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x000000e0	/* Fwd Div B */ +#define PLLSYS0_PRI_DIV_B_MASK	0x0000001c	/* PLL Primary Divisor B */ +#define PLLSYS0_OPB_DIV_MASK	0x00000003	/* OPB Divisor */ + +#define PLLC_ENG_MASK		0x20000000  /* PLL primary forward divisor source */ +#define PLLC_SRC_MASK		0x20000000  /* PLL feedback source   */ +#define PLLD_FBDV_MASK		0x1f000000  /* PLL Feedback Divisor  */ +#define PLLD_FWDVA_MASK		0x000f0000  /* PLL Forward Divisor A */ +#define PLLD_FWDVB_MASK		0x00000700  /* PLL Forward Divisor B */ +#define PLLD_LFBDV_MASK		0x0000003f  /* PLL Local Feedback Divisor */ + +#define OPBDDV_MASK		0x03000000  /* OPB Clock Divisor Register */ +#define PERDV_MASK		0x07000000  /* Peripheral Clock Divisor */ +#define PRADV_MASK		0x07000000  /* Primary Divisor A */ +#define PRBDV_MASK		0x07000000  /* Primary Divisor B */ +#define SPCID_MASK		0x03000000  /* Sync PCI Divisor  */ + +/* Strap 1 Register */ +#define PLLSYS1_LF_DIV_MASK	0xfc000000	/* PLL Local Feedback Divisor */ +#define PLLSYS1_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS1_MAL_DIV_MASK	0x00c00000	/* MAL Clk Divisor */ +#define PLLSYS1_RW_MASK		0x00300000	/* ROM width */ +#define PLLSYS1_EAR_MASK	0x00080000	/* ERAP Address reset vector */ +#define PLLSYS1_PAE_MASK	0x00040000	/* PCI arbitor enable */ +#define PLLSYS1_PCHE_MASK	0x00020000	/* PCI host config enable */ +#define PLLSYS1_PISE_MASK	0x00010000	/* PCI init seq. enable */ +#define PLLSYS1_PCWE_MASK	0x00008000	/* PCI local cpu wait enable */ +#define PLLSYS1_PPIM_MASK	0x00007800	/* PCI inbound map */ +#define PLLSYS1_PR64E_MASK	0x00000400	/* PCI init Req64 enable */ +#define PLLSYS1_PXFS_MASK	0x00000300	/* PCI-X Freq Sel */ +#define PLLSYS1_RSVD_MASK	0x00000080	/* RSVD */ +#define PLLSYS1_PDM_MASK	0x00000040	/* PCI-X Driver Mode */ +#define PLLSYS1_EPS_MASK	0x00000038	/* Ethernet Pin Select */ +#define PLLSYS1_RMII_MASK	0x00000004	/* RMII Mode */ +#define PLLSYS1_TRE_MASK	0x00000002	/* GPIO Trace Enable */ +#define PLLSYS1_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio */ + +#define CPR0_ICFG_RLI_MASK	0x80000000 +#define CPR0_ICFG_ICS_MASK	0x00000007 +#define CPR0_SPCID_SPCIDV0_MASK	0x03000000 +#define CPR0_SPCID_SPCIDV0_DIV1	0x01000000 +#define CPR0_SPCID_SPCIDV0_DIV2	0x02000000 +#define CPR0_SPCID_SPCIDV0_DIV3	0x03000000 +#define CPR0_SPCID_SPCIDV0_DIV4	0x00000000 +#define CPR0_PERD_PERDV0_MASK	0x07000000 + +#define PCI_MMIO_LCR_BASE	(CONFIG_SYS_PCI_BASE + 0x0f400000) /* Real => +								      0x0EF400000 */ + +/* PCI Master Local Configuration Registers */ +#define PCIL0_PMM0LA		(PCI_MMIO_LCR_BASE + 0x00) /* PMM0 Local Address */ +#define PCIL0_PMM0MA		(PCI_MMIO_LCR_BASE + 0x04) /* PMM0 Mask/Attribute */ +#define PCIL0_PMM0PCILA		(PCI_MMIO_LCR_BASE + 0x08) /* PMM0 PCI Low Address */ +#define PCIL0_PMM0PCIHA		(PCI_MMIO_LCR_BASE + 0x0C) /* PMM0 PCI High Address */ +#define PCIL0_PMM1LA		(PCI_MMIO_LCR_BASE + 0x10) /* PMM1 Local Address */ +#define PCIL0_PMM1MA		(PCI_MMIO_LCR_BASE + 0x14) /* PMM1 Mask/Attribute */ +#define PCIL0_PMM1PCILA		(PCI_MMIO_LCR_BASE + 0x18) /* PMM1 PCI Low Address */ +#define PCIL0_PMM1PCIHA		(PCI_MMIO_LCR_BASE + 0x1C) /* PMM1 PCI High Address */ +#define PCIL0_PMM2LA		(PCI_MMIO_LCR_BASE + 0x20) /* PMM2 Local Address */ +#define PCIL0_PMM2MA		(PCI_MMIO_LCR_BASE + 0x24) /* PMM2 Mask/Attribute */ +#define PCIL0_PMM2PCILA		(PCI_MMIO_LCR_BASE + 0x28) /* PMM2 PCI Low Address */ +#define PCIL0_PMM2PCIHA		(PCI_MMIO_LCR_BASE + 0x2C) /* PMM2 PCI High Address */ + +/* PCI Target Local Configuration Registers */ +#define PCIL0_PTM1MS		(PCI_MMIO_LCR_BASE + 0x30) /* PTM1 Memory Size/ +							      Attribute */ +#define PCIL0_PTM1LA		(PCI_MMIO_LCR_BASE + 0x34) /* PTM1 Local Addr. Reg */ +#define PCIL0_PTM2MS		(PCI_MMIO_LCR_BASE + 0x38) /* PTM2 Memory Size/ +							      Attribute */ +#define PCIL0_PTM2LA		(PCI_MMIO_LCR_BASE + 0x3C) /* PTM2 Local Addr. Reg */ + +/* 440EPx boot strap options */ +#define BOOT_STRAP_OPTION_A	0x00000000 +#define BOOT_STRAP_OPTION_B	0x00000001 +#define BOOT_STRAP_OPTION_D	0x00000003 +#define BOOT_STRAP_OPTION_E	0x00000004 + +#endif /* _PPC440EPX_GRX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440gp.h b/roms/u-boot/arch/powerpc/include/asm/ppc440gp.h new file mode 100644 index 00000000..01b66c05 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440gp.h @@ -0,0 +1,59 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440GP_H_ +#define _PPC440GP_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR	/* IBM DDR controller */ + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xe0000000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +#define SDR0_PCI0	0x0300 + +#define CPC0_STRP1_PAE_MASK		(0x80000000 >> 11) +#define CPC0_STRP1_PISE_MASK		(0x80000000 >> 13) + +#define CNTRL_DCR_BASE	0x0b0 + +#define CPC0_SYS0	(CNTRL_DCR_BASE + 0x30)	/* System configuration reg 0 */ +#define CPC0_SYS1	(CNTRL_DCR_BASE + 0x31)	/* System configuration reg 1 */ + +#define CPC0_STRP0	(CNTRL_DCR_BASE + 0x34)	/* Power-on config reg 0 (RO) */ +#define CPC0_STRP1	(CNTRL_DCR_BASE + 0x35)	/* Power-on config reg 1 (RO) */ + +#define CPC0_GPIO	(CNTRL_DCR_BASE + 0x38)	/* GPIO config reg (440GP) */ + +#define CPC0_CR0	(CNTRL_DCR_BASE + 0x3b)	/* Control 0 register */ +#define CPC0_CR1	(CNTRL_DCR_BASE + 0x3a)	/* Control 1 register */ + +#define PLLSYS0_TUNE_MASK	0xffc00000	/* PLL TUNE bits	    */ +#define PLLSYS0_FB_DIV_MASK	0x003c0000	/* Feedback divisor	    */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00038000	/* Forward divisor A	    */ +#define PLLSYS0_FWD_DIV_B_MASK	0x00007000	/* Forward divisor B	    */ +#define PLLSYS0_OPB_DIV_MASK	0x00000c00	/* OPB divisor		    */ +#define PLLSYS0_EPB_DIV_MASK	0x00000300	/* EPB divisor		    */ +#define PLLSYS0_EXTSL_MASK	0x00000080	/* PerClk feedback path	    */ +#define PLLSYS0_RW_MASK		0x00000060	/* ROM width		    */ +#define PLLSYS0_RL_MASK		0x00000010	/* ROM location		    */ +#define PLLSYS0_ZMII_SEL_MASK	0x0000000c	/* ZMII selection	    */ +#define PLLSYS0_BYPASS_MASK	0x00000002	/* Bypass PLL		    */ +#define PLLSYS0_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio	    */ + +#define PCIL0_BRDGOPT1		(PCIL0_CFGBASE + 0x0040) +#define PCIL0_BRDGOPT2		(PCIL0_CFGBASE + 0x0044) + +#endif /* _PPC440GP_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440gx.h b/roms/u-boot/arch/powerpc/include/asm/ppc440gx.h new file mode 100644 index 00000000..7bd36e86 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440gx.h @@ -0,0 +1,89 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440GX_H_ +#define _PPC440GX_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR	/* IBM DDR controller */ + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xe0000000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +/* SDR's */ +#define SDR0_PCI0	0x0300 + +#define SDR0_SDSTP2	0x4001 +#define SDR0_SDSTP3	0x4003 + +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 13) +#define SDR0_SDSTP1_PISE_MASK		(0x80000000 >> 15) + +#define SDR0_PFC1_EPS_DECODE(n)		((((u32)(n)) >> 22) & 0x07) +#define SDR0_PFC1_CTEMS_MASK		(0x80000000 >> 11) +#define SDR0_PFC1_CTEMS_EMS		0x00000000 +#define SDR0_PFC1_CTEMS_CPUTRACE	(0x80000000 >> 11) + +#define SDR0_MFR_ECS_MASK		0x10000000 + +#define SDR0_SRST_DMC			0x00200000 + +#define PLLSYS0_ENG_MASK	0x80000000	/* 0 = SysClk, 1 = PLL VCO */ +#define PLLSYS0_SRC_MASK	0x40000000	/* 0 = PLL A, 1 = PLL B */ +#define PLLSYS0_SEL_MASK	0x38000000	/* 0 = PLL, 1 = CPU, 5 = PerClk */ +#define PLLSYS0_TUNE_MASK	0x07fe0000	/* PLL Tune bits */ +#define PLLSYS0_FB_DIV_MASK	0x0001f000	/* Feedback divisor */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00000f00	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x000000e0	/* Fwd Div B */ +#define PLLSYS0_PRI_DIV_B_MASK	0x0000001c	/* PLL Primary Divisor B */ +#define PLLSYS0_OPB_DIV_MASK	0x00000003	/* OPB Divisor */ + +#define PLLC_ENG_MASK		0x20000000  /* PLL primary forward divisor source */ +#define PLLC_SRC_MASK		0x20000000  /* PLL feedback source   */ +#define PLLD_FBDV_MASK		0x1f000000  /* PLL Feedback Divisor  */ +#define PLLD_FWDVA_MASK		0x000f0000  /* PLL Forward Divisor A */ +#define PLLD_FWDVB_MASK		0x00000700  /* PLL Forward Divisor B */ +#define PLLD_LFBDV_MASK		0x0000003f  /* PLL Local Feedback Divisor */ + +#define OPBDDV_MASK		0x03000000  /* OPB Clock Divisor Register */ +#define PERDV_MASK		0x07000000  /* Peripheral Clock Divisor */ +#define PRADV_MASK		0x07000000  /* Primary Divisor A */ +#define PRBDV_MASK		0x07000000  /* Primary Divisor B */ +#define SPCID_MASK		0x03000000  /* Sync PCI Divisor  */ + +/* Strap 1 Register */ +#define PLLSYS1_LF_DIV_MASK	0xfc000000	/* PLL Local Feedback Divisor */ +#define PLLSYS1_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS1_MAL_DIV_MASK	0x00c00000	/* MAL Clk Divisor */ +#define PLLSYS1_RW_MASK		0x00300000	/* ROM width */ +#define PLLSYS1_EAR_MASK	0x00080000	/* ERAP Address reset vector */ +#define PLLSYS1_PAE_MASK	0x00040000	/* PCI arbitor enable */ +#define PLLSYS1_PCHE_MASK	0x00020000	/* PCI host config enable */ +#define PLLSYS1_PISE_MASK	0x00010000	/* PCI init seq. enable */ +#define PLLSYS1_PCWE_MASK	0x00008000	/* PCI local cpu wait enable */ +#define PLLSYS1_PPIM_MASK	0x00007800	/* PCI inbound map */ +#define PLLSYS1_PR64E_MASK	0x00000400	/* PCI init Req64 enable */ +#define PLLSYS1_PXFS_MASK	0x00000300	/* PCI-X Freq Sel */ +#define PLLSYS1_RSVD_MASK	0x00000080	/* RSVD */ +#define PLLSYS1_PDM_MASK	0x00000040	/* PCI-X Driver Mode */ +#define PLLSYS1_EPS_MASK	0x00000038	/* Ethernet Pin Select */ +#define PLLSYS1_RMII_MASK	0x00000004	/* RMII Mode */ +#define PLLSYS1_TRE_MASK	0x00000002	/* GPIO Trace Enable */ +#define PLLSYS1_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio */ + +#define PCIL0_BRDGOPT1		(PCIL0_CFGBASE + 0x0040) +#define PCIL0_BRDGOPT2		(PCIL0_CFGBASE + 0x0044) + +#endif /* _PPC440GX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440sp.h b/roms/u-boot/arch/powerpc/include/asm/ppc440sp.h new file mode 100644 index 00000000..5c2192ee --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440sp.h @@ -0,0 +1,85 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440SP_H_ +#define _PPC440SP_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xf0000000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +/* SDR's */ +#define SDR0_PCI0	0x0300 +#define SDR0_SDSTP2	0x0022 +#define SDR0_SDSTP3	0x0023 + +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 13) +#define SDR0_SDSTP1_PISE_MASK		(0x80000000 >> 15) + +#define SDR0_PFC1_EM_1000		(0x80000000 >> 10) + +#define SDR0_MFR_FIXD			(0x80000000 >> 3)	/* Workaround for PCI/DMA */ + +#define SDR0_SRST0_DMC			0x00200000 + +#define PLLSYS0_ENG_MASK	0x80000000	/* 0 = SysClk, 1 = PLL VCO */ +#define PLLSYS0_SRC_MASK	0x40000000	/* 0 = PLL A, 1 = PLL B */ +#define PLLSYS0_SEL_MASK	0x38000000	/* 0 = PLL, 1 = CPU, 5 = PerClk */ +#define PLLSYS0_TUNE_MASK	0x07fe0000	/* PLL Tune bits */ +#define PLLSYS0_FB_DIV_MASK	0x0001f000	/* Feedback divisor */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00000f00	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x000000e0	/* Fwd Div B */ +#define PLLSYS0_PRI_DIV_B_MASK	0x0000001c	/* PLL Primary Divisor B */ +#define PLLSYS0_OPB_DIV_MASK	0x00000003	/* OPB Divisor */ + +#define PLLC_ENG_MASK		0x20000000  /* PLL primary forward divisor source */ +#define PLLC_SRC_MASK		0x20000000  /* PLL feedback source   */ +#define PLLD_FBDV_MASK		0x1f000000  /* PLL Feedback Divisor  */ +#define PLLD_FWDVA_MASK		0x000f0000  /* PLL Forward Divisor A */ +#define PLLD_FWDVB_MASK		0x00000700  /* PLL Forward Divisor B */ +#define PLLD_LFBDV_MASK		0x0000003f  /* PLL Local Feedback Divisor */ + +#define OPBDDV_MASK		0x03000000  /* OPB Clock Divisor Register */ +#define PERDV_MASK		0x07000000  /* Peripheral Clock Divisor */ +#define PRADV_MASK		0x07000000  /* Primary Divisor A */ +#define PRBDV_MASK		0x07000000  /* Primary Divisor B */ +#define SPCID_MASK		0x03000000  /* Sync PCI Divisor  */ + +/* Strap 1 Register */ +#define PLLSYS1_LF_DIV_MASK	0xfc000000	/* PLL Local Feedback Divisor */ +#define PLLSYS1_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS1_MAL_DIV_MASK	0x00c00000	/* MAL Clk Divisor */ +#define PLLSYS1_RW_MASK		0x00300000	/* ROM width */ +#define PLLSYS1_EAR_MASK	0x00080000	/* ERAP Address reset vector */ +#define PLLSYS1_PAE_MASK	0x00040000	/* PCI arbitor enable */ +#define PLLSYS1_PCHE_MASK	0x00020000	/* PCI host config enable */ +#define PLLSYS1_PISE_MASK	0x00010000	/* PCI init seq. enable */ +#define PLLSYS1_PCWE_MASK	0x00008000	/* PCI local cpu wait enable */ +#define PLLSYS1_PPIM_MASK	0x00007800	/* PCI inbound map */ +#define PLLSYS1_PR64E_MASK	0x00000400	/* PCI init Req64 enable */ +#define PLLSYS1_PXFS_MASK	0x00000300	/* PCI-X Freq Sel */ +#define PLLSYS1_RSVD_MASK	0x00000080	/* RSVD */ +#define PLLSYS1_PDM_MASK	0x00000040	/* PCI-X Driver Mode */ +#define PLLSYS1_EPS_MASK	0x00000038	/* Ethernet Pin Select */ +#define PLLSYS1_RMII_MASK	0x00000004	/* RMII Mode */ +#define PLLSYS1_TRE_MASK	0x00000002	/* GPIO Trace Enable */ +#define PLLSYS1_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio */ + +#define PCIL0_BRDGOPT1		(PCIL0_CFGBASE + 0x0040) +#define PCIL0_BRDGOPT2		(PCIL0_CFGBASE + 0x0044) + +#endif /* _PPC440SP_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc440spe.h b/roms/u-boot/arch/powerpc/include/asm/ppc440spe.h new file mode 100644 index 00000000..105dc011 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc440spe.h @@ -0,0 +1,101 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC440SPE_H_ +#define _PPC440SPE_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +/* + * Some SoC specific registers (not common for all 440 SoC's) + */ + +/* Memory mapped register */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xa0000000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +/* SDR's */ +#define SDR0_PCI0	0x0300 +#define SDR0_SDSTP2	0x0022 +#define SDR0_SDSTP3	0x0023 + +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 13) +#define SDR0_SDSTP1_PISE_MASK		(0x80000000 >> 15) +#define SDR0_SDSTP1_ERPN_MASK		(0x80000000 >> 12) +#define SDR0_SDSTP1_ERPN_EBC		0 +#define SDR0_SDSTP1_ERPN_PCI		(0x80000000 >> 12) +#define SDR0_SDSTP1_EBCW_MASK		(0x80000000 >> 24) +#define SDR0_SDSTP1_EBCW_8_BITS		0 +#define SDR0_SDSTP1_EBCW_16_BITS	(0x80000000 >> 24) + +#define SDR0_PFC1_EM_1000		(0x80000000 >> 10) + +#define SDR0_MFR_FIXD			(0x80000000 >> 3)	/* Workaround for PCI/DMA */ + +#define SDR0_PINSTP_BOOTSTRAP_MASK	0xC0000000  /* Strap Bits */ +#define SDR0_PINSTP_BOOTSTRAP_SETTINGS0	0x00000000  /* Default strap settings 0 +						       (EBC boot) */ +#define SDR0_PINSTP_BOOTSTRAP_SETTINGS1	0x40000000  /* Default strap settings 1 +						       (PCI boot) */ +#define SDR0_PINSTP_BOOTSTRAP_IIC_54_EN	0x80000000  /* Serial Device Enabled - +						       Addr = 0x54 */ +#define SDR0_PINSTP_BOOTSTRAP_IIC_50_EN	0xC0000000  /* Serial Device Enabled - +						       Addr = 0x50 */ + +#define SDR0_SRST0_DMC			0x00200000 + +#define PLLSYS0_ENG_MASK	0x80000000	/* 0 = SysClk, 1 = PLL VCO */ +#define PLLSYS0_SRC_MASK	0x40000000	/* 0 = PLL A, 1 = PLL B */ +#define PLLSYS0_SEL_MASK	0x38000000	/* 0 = PLL, 1 = CPU, 5 = PerClk */ +#define PLLSYS0_TUNE_MASK	0x07fe0000	/* PLL Tune bits */ +#define PLLSYS0_FB_DIV_MASK	0x0001f000	/* Feedback divisor */ +#define PLLSYS0_FWD_DIV_A_MASK	0x00000f00	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x000000e0	/* Fwd Div B */ +#define PLLSYS0_PRI_DIV_B_MASK	0x0000001c	/* PLL Primary Divisor B */ +#define PLLSYS0_OPB_DIV_MASK	0x00000003	/* OPB Divisor */ + +#define PLLC_ENG_MASK		0x20000000  /* PLL primary forward divisor source */ +#define PLLC_SRC_MASK		0x20000000  /* PLL feedback source   */ +#define PLLD_FBDV_MASK		0x1f000000  /* PLL Feedback Divisor  */ +#define PLLD_FWDVA_MASK		0x000f0000  /* PLL Forward Divisor A */ +#define PLLD_FWDVB_MASK		0x00000700  /* PLL Forward Divisor B */ +#define PLLD_LFBDV_MASK		0x0000003f  /* PLL Local Feedback Divisor */ + +#define OPBDDV_MASK		0x03000000  /* OPB Clock Divisor Register */ +#define PERDV_MASK		0x07000000  /* Peripheral Clock Divisor */ +#define PRADV_MASK		0x07000000  /* Primary Divisor A */ +#define PRBDV_MASK		0x07000000  /* Primary Divisor B */ +#define SPCID_MASK		0x03000000  /* Sync PCI Divisor  */ + +/* Strap 1 Register */ +#define PLLSYS1_LF_DIV_MASK	0xfc000000	/* PLL Local Feedback Divisor */ +#define PLLSYS1_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS1_MAL_DIV_MASK	0x00c00000	/* MAL Clk Divisor */ +#define PLLSYS1_RW_MASK		0x00300000	/* ROM width */ +#define PLLSYS1_EAR_MASK	0x00080000	/* ERAP Address reset vector */ +#define PLLSYS1_PAE_MASK	0x00040000	/* PCI arbitor enable */ +#define PLLSYS1_PCHE_MASK	0x00020000	/* PCI host config enable */ +#define PLLSYS1_PISE_MASK	0x00010000	/* PCI init seq. enable */ +#define PLLSYS1_PCWE_MASK	0x00008000	/* PCI local cpu wait enable */ +#define PLLSYS1_PPIM_MASK	0x00007800	/* PCI inbound map */ +#define PLLSYS1_PR64E_MASK	0x00000400	/* PCI init Req64 enable */ +#define PLLSYS1_PXFS_MASK	0x00000300	/* PCI-X Freq Sel */ +#define PLLSYS1_RSVD_MASK	0x00000080	/* RSVD */ +#define PLLSYS1_PDM_MASK	0x00000040	/* PCI-X Driver Mode */ +#define PLLSYS1_EPS_MASK	0x00000038	/* Ethernet Pin Select */ +#define PLLSYS1_RMII_MASK	0x00000004	/* RMII Mode */ +#define PLLSYS1_TRE_MASK	0x00000002	/* GPIO Trace Enable */ +#define PLLSYS1_NTO1_MASK	0x00000001	/* CPU:PLB N-to-1 ratio */ + +#define PCIL0_BRDGOPT1		(PCIL0_CFGBASE + 0x0040) +#define PCIL0_BRDGOPT2		(PCIL0_CFGBASE + 0x0044) + +#endif /* _PPC440SPE_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc460ex_gt.h b/roms/u-boot/arch/powerpc/include/asm/ppc460ex_gt.h new file mode 100644 index 00000000..f41df0da --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc460ex_gt.h @@ -0,0 +1,209 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC460EX_GT_H_ +#define _PPC460EX_GT_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +#define CONFIG_NAND_NDFC + +/* + * Some SoC specific registers + */ + +/* Memory mapped registers */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xef600000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0400) +#define CONFIG_SYS_NS16550_COM3	(CONFIG_SYS_PERIPHERAL_BASE + 0x0500) +#define CONFIG_SYS_NS16550_COM4	(CONFIG_SYS_PERIPHERAL_BASE + 0x0600) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0b00) +#define GPIO1_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0c00) + +/* DCR */ +#define AHB_TOP			0x00a4 +#define AHB_BOT			0x00a5 + +/* SDR */ +#define SDR0_PCI0		0x01c0 +#define SDR0_AHB_CFG		0x0370 +#define SDR0_USB2HOST_CFG	0x0371 +#define SDR0_ETH_PLL		0x4102 +#define SDR0_ETH_CFG		0x4103 +#define SDR0_ETH_STS		0x4104 + +/* + * Register bits and masks + */ +#define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 13) +#define SDR0_SDSTP1_PISE_MASK		(0x80000000 >> 15) + +/* CUST0 Customer Configuration Register0 */ +#define SDR0_CUST0_MUX_E_N_G_MASK	0xC0000000 /* Mux_Emac_NDFC_GPIO */ +#define SDR0_CUST0_MUX_EMAC_SEL		0x40000000 /* Emac Selection */ +#define SDR0_CUST0_MUX_NDFC_SEL		0x80000000 /* NDFC Selection */ +#define SDR0_CUST0_MUX_GPIO_SEL		0xC0000000 /* GPIO Selection */ + +#define SDR0_CUST0_NDFC_EN_MASK		0x20000000 /* NDFC Enable Mask */ +#define SDR0_CUST0_NDFC_ENABLE		0x20000000 /* NDFC Enable */ +#define SDR0_CUST0_NDFC_DISABLE		0x00000000 /* NDFC Disable */ + +#define SDR0_CUST0_NDFC_BW_MASK		0x10000000 /* NDFC Boot Width */ +#define SDR0_CUST0_NDFC_BW_16_BIT	0x10000000 /* NDFC Boot Width = 16 Bit */ +#define SDR0_CUST0_NDFC_BW_8_BIT	0x00000000 /* NDFC Boot Width =  8 Bit */ + +#define SDR0_CUST0_NDFC_BP_MASK		0x0F000000 /* NDFC Boot Page */ +#define SDR0_CUST0_NDFC_BP_ENCODE(n)	((((u32)(n)) & 0xF) << 24) +#define SDR0_CUST0_NDFC_BP_DECODE(n)	((((u32)(n)) >> 24) & 0xF) + +#define SDR0_CUST0_NDFC_BAC_MASK	0x00C00000 /* NDFC Boot Address Cycle */ +#define SDR0_CUST0_NDFC_BAC_ENCODE(n)	((((u32)(n)) & 0x3) << 22) +#define SDR0_CUST0_NDFC_BAC_DECODE(n)	((((u32)(n)) >> 22) & 0x3) + +#define SDR0_CUST0_NDFC_ARE_MASK	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_ENABLE	0x00200000 /* NDFC Auto Read Enable */ +#define SDR0_CUST0_NDFC_ARE_DISABLE	0x00000000 /* NDFC Auto Read Disable */ + +#define SDR0_CUST0_NRB_MASK		0x00100000 /* NDFC Ready / Busy */ +#define SDR0_CUST0_NRB_BUSY		0x00100000 /* Busy */ +#define SDR0_CUST0_NRB_READY		0x00000000 /* Ready */ + +#define SDR0_CUST0_NDRSC_MASK		0x0000FFF0 /* NDFC Device Reset Count Mask */ +#define SDR0_CUST0_NDRSC_ENCODE(n)	((((u32)(n)) & 0xFFF) << 4) +#define SDR0_CUST0_NDRSC_DECODE(n)	((((u32)(n)) >> 4) & 0xFFF) + +#define SDR0_CUST0_CHIPSELGAT_MASK	0x0000000F /* Chip Select Gating Mask */ +#define SDR0_CUST0_CHIPSELGAT_DIS	0x00000000 /* Chip Select Gating Disable */ +#define SDR0_CUST0_CHIPSELGAT_ENALL	0x0000000F /*All Chip Select Gating Enable*/ +#define SDR0_CUST0_CHIPSELGAT_EN0	0x00000008 /* Chip Select0 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN1	0x00000004 /* Chip Select1 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN2	0x00000002 /* Chip Select2 Gating Enable */ +#define SDR0_CUST0_CHIPSELGAT_EN3	0x00000001 /* Chip Select3 Gating Enable */ + +/* Ethernet PLL Configuration Register (SDR0_ETH_PLL) */ +#define SDR0_ETH_PLL_PLLLOCK	0x80000000	/* Ethernet PLL lock indication */ + +/* Ethernet Configuration Register (SDR0_ETH_CFG) */ +#define SDR0_ETH_CFG_SGMII3_LPBK	0x00800000 /*SGMII3 port loopback +						    enable */ +#define SDR0_ETH_CFG_SGMII2_LPBK	0x00400000 /*SGMII2 port loopback +						    enable */ +#define SDR0_ETH_CFG_SGMII1_LPBK	0x00200000 /*SGMII1 port loopback +						    enable */ +#define SDR0_ETH_CFG_SGMII0_LPBK	0x00100000 /*SGMII0 port loopback +						    enable */ +#define SDR0_ETH_CFG_SGMII_MASK		0x00070000 /*SGMII Mask */ +#define SDR0_ETH_CFG_SGMII2_ENABLE	0x00040000 /*SGMII2 port enable */ +#define SDR0_ETH_CFG_SGMII1_ENABLE	0x00020000 /*SGMII1 port enable */ +#define SDR0_ETH_CFG_SGMII0_ENABLE	0x00010000 /*SGMII0 port enable */ +#define SDR0_ETH_CFG_TAHOE1_BYPASS	0x00002000 /*TAHOE1 Bypass selector */ +#define SDR0_ETH_CFG_TAHOE0_BYPASS	0x00001000 /*TAHOE0 Bypass selector */ +#define SDR0_ETH_CFG_EMAC3_PHY_CLK_SEL	0x00000800 /*EMAC 3 PHY clock selector*/ +#define SDR0_ETH_CFG_EMAC2_PHY_CLK_SEL	0x00000400 /*EMAC 2 PHY clock selector*/ +#define SDR0_ETH_CFG_EMAC1_PHY_CLK_SEL	0x00000200 /*EMAC 1 PHY clock selector*/ +#define SDR0_ETH_CFG_EMAC0_PHY_CLK_SEL	0x00000100 /*EMAC 0 PHY clock selector*/ +#define SDR0_ETH_CFG_EMAC_2_1_SWAP	0x00000080 /*Swap EMAC2 with EMAC1 */ +#define SDR0_ETH_CFG_EMAC_0_3_SWAP	0x00000040 /*Swap EMAC0 with EMAC3 */ +#define SDR0_ETH_CFG_MDIO_SEL_MASK	0x00000030 /*MDIO source selector mask*/ +#define SDR0_ETH_CFG_MDIO_SEL_EMAC0	0x00000000 /*MDIO source - EMAC0 */ +#define SDR0_ETH_CFG_MDIO_SEL_EMAC1	0x00000010 /*MDIO source - EMAC1 */ +#define SDR0_ETH_CFG_MDIO_SEL_EMAC2	0x00000020 /*MDIO source - EMAC2 */ +#define SDR0_ETH_CFG_MDIO_SEL_EMAC3	0x00000030 /*MDIO source - EMAC3 */ +#define SDR0_ETH_CFG_GMC1_BRIDGE_SEL	0x00000002 /*GMC Port 1 bridge +						     selector */ +#define SDR0_ETH_CFG_GMC0_BRIDGE_SEL	0x00000001 /*GMC Port 0 bridge +						    selector */ + +#define SDR0_SRST0_BGO		0x80000000 /* PLB to OPB bridge */ +#define SDR0_SRST0_PLB4		0x40000000 /* PLB4 arbiter */ +#define SDR0_SRST0_EBC		0x20000000 /* External bus controller */ +#define SDR0_SRST0_OPB		0x10000000 /* OPB arbiter */ +#define SDR0_SRST0_UART0	0x08000000 /* Universal asynchronous receiver/ +					      transmitter 0 */ +#define SDR0_SRST0_UART1	0x04000000 /* Universal asynchronous receiver/ +					      transmitter 1 */ +#define SDR0_SRST0_IIC0		0x02000000 /* Inter integrated circuit 0 */ +#define SDR0_SRST0_IIC1		0x01000000 /* Inter integrated circuit 1 */ +#define SDR0_SRST0_GPIO0	0x00800000 /* General purpose I/O 0 */ +#define SDR0_SRST0_GPT		0x00400000 /* General purpose timer */ +#define SDR0_SRST0_DMC		0x00200000 /* DDR SDRAM memory controller */ +#define SDR0_SRST0_PCI		0x00100000 /* PCI */ +#define SDR0_SRST0_CPM0		0x00020000 /* Clock and power management */ +#define SDR0_SRST0_IMU		0x00010000 /* I2O DMA */ +#define SDR0_SRST0_UIC0		0x00008000 /* Universal interrupt controller 0*/ +#define SDR0_SRST0_UIC1		0x00004000 /* Universal interrupt controller 1*/ +#define SDR0_SRST0_SRAM		0x00002000 /* Universal interrupt controller 0*/ +#define SDR0_SRST0_UIC2		0x00001000 /* Universal interrupt controller 2*/ +#define SDR0_SRST0_UIC3		0x00000800 /* Universal interrupt controller 3*/ +#define SDR0_SRST0_OCM		0x00000400 /* Universal interrupt controller 0*/ +#define SDR0_SRST0_UART2	0x00000200 /* Universal asynchronous receiver/ +					      transmitter 2 */ +#define SDR0_SRST0_MAL		0x00000100 /* Media access layer */ +#define SDR0_SRST0_GPTR         0x00000040 /* General purpose timer */ +#define SDR0_SRST0_L2CACHE	0x00000004 /* L2 Cache */ +#define SDR0_SRST0_UART3	0x00000002 /* Universal asynchronous receiver/ +					      transmitter 3 */ +#define SDR0_SRST0_GPIO1	0x00000001 /* General purpose I/O 1 */ + +#define SDR0_SRST1_RLL		0x80000000 /* SRIO RLL */ +#define SDR0_SRST1_SCP		0x40000000 /* Serial communications port */ +#define SDR0_SRST1_PLBARB	0x20000000 /* PLB Arbiter */ +#define SDR0_SRST1_EIPPKP	0x10000000 /* EIPPPKP */ +#define SDR0_SRST1_EIP94	0x08000000 /* EIP 94 */ +#define SDR0_SRST1_EMAC0	0x04000000 /* Ethernet media access +					      controller 0 */ +#define SDR0_SRST1_EMAC1	0x02000000 /* Ethernet media access +					      controller 1 */ +#define SDR0_SRST1_EMAC2	0x01000000 /* Ethernet media access +					      controller 2 */ +#define SDR0_SRST1_EMAC3	0x00800000 /* Ethernet media access +					      controller 3 */ +#define SDR0_SRST1_ZMII		0x00400000 /* Ethernet ZMII/RMII/SMII */ +#define SDR0_SRST1_RGMII0	0x00200000 /* Ethernet RGMII/RTBI 0 */ +#define SDR0_SRST1_RGMII1	0x00100000 /* Ethernet RGMII/RTBI 1 */ +#define SDR0_SRST1_DMA4		0x00080000 /* DMA to PLB4 */ +#define SDR0_SRST1_DMA4CH	0x00040000 /* DMA Channel to PLB4 */ +#define SDR0_SRST1_SATAPHY	0x00020000 /* Serial ATA PHY */ +#define SDR0_SRST1_SRIODEV	0x00010000 /* Serial Rapid IO core, PCS, and +					      serdes */ +#define SDR0_SRST1_SRIOPCS	0x00008000 /* Serial Rapid IO core and PCS */ +#define SDR0_SRST1_NDFC		0x00004000 /* Nand flash controller */ +#define SDR0_SRST1_SRIOPLB	0x00002000 /* Serial Rapid IO PLB */ +#define SDR0_SRST1_ETHPLL	0x00001000 /* Ethernet PLL */ +#define SDR0_SRST1_TAHOE1	0x00000800 /* Ethernet Tahoe 1 */ +#define SDR0_SRST1_TAHOE0	0x00000400 /* Ethernet Tahoe 0 */ +#define SDR0_SRST1_SGMII0	0x00000200 /* Ethernet SGMII 0 */ +#define SDR0_SRST1_SGMII1	0x00000100 /* Ethernet SGMII 1 */ +#define SDR0_SRST1_SGMII2	0x00000080 /* Ethernet SGMII 2 */ +#define SDR0_SRST1_AHB		0x00000040 /* PLB4XAHB bridge */ +#define SDR0_SRST1_USBOTGPHY	0x00000020 /* USB 2.0 OTG PHY */ +#define SDR0_SRST1_USBOTG	0x00000010 /* USB 2.0 OTG controller */ +#define SDR0_SRST1_USBHOST	0x00000008 /* USB 2.0 Host controller */ +#define SDR0_SRST1_AHBDMAC	0x00000004 /* AHB DMA controller */ +#define SDR0_SRST1_AHBICM	0x00000002 /* AHB inter-connect matrix */ +#define SDR0_SRST1_SATA		0x00000001 /* Serial ATA controller */ + +#define PLLSYS0_FWD_DIV_A_MASK	0x000000f0	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x0000000f	/* Fwd Div B */ +#define PLLSYS0_FB_DIV_MASK	0x0000ff00	/* Feedback divisor */ +#define PLLSYS0_OPB_DIV_MASK	0x0c000000	/* OPB Divisor */ +#define PLLSYS0_PLBEDV0_DIV_MASK 0xe0000000	/* PLB Early Clock Divisor */ +#define PLLSYS0_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS0_SEL_MASK	0x18000000	/* 0 = PLL, 1 = PerClk */ + +#define CPR0_ICFG_RLI_MASK	0x80000000 + +#define CPR0_PLLC_RST		0x80000000 +#define CPR0_PLLC_ENG		0x40000000 + +#define PCIL0_BRDGOPT1		(PCIL0_CFGBASE + 0x0040) +#define PCIL0_BRDGOPT2		(PCIL0_CFGBASE + 0x0044) + +#endif /* _PPC460EX_GT_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc460sx.h b/roms/u-boot/arch/powerpc/include/asm/ppc460sx.h new file mode 100644 index 00000000..b692d07f --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc460sx.h @@ -0,0 +1,31 @@ +/* + * (C) Copyright 2010 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC460SX_H_ +#define _PPC460SX_H_ + +#define CONFIG_SDRAM_PPC4xx_IBM_DDR2	/* IBM DDR(2) controller */ + +/* Memory mapped registers */ +#define CONFIG_SYS_PERIPHERAL_BASE	0xa0000000 /* Internal Peripherals */ + +#define CONFIG_SYS_NS16550_COM1	(CONFIG_SYS_PERIPHERAL_BASE + 0x0200) +#define CONFIG_SYS_NS16550_COM2	(CONFIG_SYS_PERIPHERAL_BASE + 0x0300) + +#define GPIO0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0700) + +#define SDR0_SRST0_DMC			0x00200000 + +#define PLLSYS0_FWD_DIV_A_MASK	0x000000f0	/* Fwd Div A */ +#define PLLSYS0_FWD_DIV_B_MASK	0x0000000f	/* Fwd Div B */ +#define PLLSYS0_FB_DIV_MASK	0x0000ff00	/* Feedback divisor */ +#define PLLSYS0_OPB_DIV_MASK	0x0c000000	/* OPB Divisor */ +#define PLLSYS0_PLBEDV0_DIV_MASK 0xe0000000	/* PLB Early Clock Divisor */ +#define PLLSYS0_PERCLK_DIV_MASK 0x03000000	/* Peripheral Clk Divisor */ +#define PLLSYS0_SEL_MASK	0x18000000	/* 0 = PLL, 1 = PerClk */ + +#endif /* _PPC460SX_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-ebc.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-ebc.h new file mode 100644 index 00000000..07a3fe03 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-ebc.h @@ -0,0 +1,184 @@ +/* + * (C) Copyright 2008 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC4xx_EBC_H_ +#define _PPC4xx_EBC_H_ + +/* + * Currently there are two register layout versions for the IBM EBC core + * used on 4xx PPC's. The following grouping lists the first layout. + * Within this group there is a slight variation concerning the bit field + * position of the EMPL and EMPH fields: + */ +#if defined(CONFIG_405GP) || \ +    defined(CONFIG_405EP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +#define CONFIG_EBC_PPC4xx_IBM_VER1 +#if defined(CONFIG_405GP) || \ +    defined(CONFIG_405EP) +#define EBC_CFG_EMPH_POS	8 +#define EBC_CFG_EMPL_POS	6 +#else +#define EBC_CFG_EMPH_POS	6 +#define EBC_CFG_EMPL_POS	8 +#endif +#endif + +/* + * Define the max number of EBC banks (chip selects) + */ +#if defined(CONFIG_405GP) || \ +    defined(CONFIG_405EZ) || \ +    defined(CONFIG_440GP) || defined(CONFIG_440GX) +#define EBC_NUM_BANKS	8 +#endif + +#if defined(CONFIG_405EP) +#define EBC_NUM_BANKS	5 +#endif + +#if defined(CONFIG_405EX) || \ +    defined(CONFIG_460SX) +#define EBC_NUM_BANKS	4 +#endif + +#if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define EBC_NUM_BANKS	6 +#endif + +#if defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_APM821XX) +#define EBC_NUM_BANKS	3 +#endif + +/* Bank Configuration Register */ +#define EBC_BXCR(n)		(n) +#define EBC_BXCR_BANK_SIZE(n)	(0x100000 << (((n) & EBC_BXCR_BS_MASK) >> 17)) + +#define	EBC_BXCR_BAS_MASK	PPC_REG_VAL(11, 0xFFF) +#define EBC_BXCR_BAS_ENCODE(n)	(((static_cast(u32, n)) & EBC_BXCR_BAS_MASK)) +#define EBC_BXCR_BS_MASK	PPC_REG_VAL(14, 0x7) +#define EBC_BXCR_BS_1MB		PPC_REG_VAL(14, 0x0) +#define EBC_BXCR_BS_2MB		PPC_REG_VAL(14, 0x1) +#define EBC_BXCR_BS_4MB		PPC_REG_VAL(14, 0x2) +#define EBC_BXCR_BS_8MB		PPC_REG_VAL(14, 0x3) +#define EBC_BXCR_BS_16MB	PPC_REG_VAL(14, 0x4) +#define EBC_BXCR_BS_32MB	PPC_REG_VAL(14, 0x5) +#define EBC_BXCR_BS_64MB	PPC_REG_VAL(14, 0x6) +#define EBC_BXCR_BS_128MB	PPC_REG_VAL(14, 0x7) +#define EBC_BXCR_BU_MASK	PPC_REG_VAL(16, 0x3) +#define	EBC_BXCR_BU_NONE	PPC_REG_VAL(16, 0x0) +#define EBC_BXCR_BU_R		PPC_REG_VAL(16, 0x1) +#define EBC_BXCR_BU_W		PPC_REG_VAL(16, 0x2) +#define EBC_BXCR_BU_RW		PPC_REG_VAL(16, 0x3) +#define EBC_BXCR_BW_MASK	PPC_REG_VAL(18, 0x3) +#define EBC_BXCR_BW_8BIT	PPC_REG_VAL(18, 0x0) +#define EBC_BXCR_BW_16BIT	PPC_REG_VAL(18, 0x1) +#if defined(CONFIG_EBC_PPC4xx_IBM_VER1) +#define EBC_BXCR_BW_32BIT	PPC_REG_VAL(18, 0x2) +#else +#define EBC_BXCR_BW_32BIT	PPC_REG_VAL(18, 0x3) +#endif + +/* Bank Access Parameter Register */ +#define EBC_BXAP_BME_ENABLED	PPC_REG_VAL(0, 0x1) +#define EBC_BXAP_BME_DISABLED	PPC_REG_VAL(0, 0x0) +#define EBC_BXAP_TWT_ENCODE(n)	PPC_REG_VAL(8, (static_cast(u32, n)) & 0xFF) +#define	EBC_BXAP_FWT_ENCODE(n)	PPC_REG_VAL(5, (static_cast(u32, n)) & 0x1F) +#define	EBC_BXAP_BWT_ENCODE(n)	PPC_REG_VAL(8, (static_cast(u32, n)) & 0x7) +#define EBC_BXAP_BCE_DISABLE	PPC_REG_VAL(9, 0x0) +#define EBC_BXAP_BCE_ENABLE	PPC_REG_VAL(9, 0x1) +#define EBC_BXAP_BCT_MASK	PPC_REG_VAL(11, 0x3) +#define EBC_BXAP_BCT_2TRANS	PPC_REG_VAL(11, 0x0) +#define EBC_BXAP_BCT_4TRANS	PPC_REG_VAL(11, 0x1) +#define EBC_BXAP_BCT_8TRANS	PPC_REG_VAL(11, 0x2) +#define EBC_BXAP_BCT_16TRANS	PPC_REG_VAL(11, 0x3) +#define EBC_BXAP_CSN_ENCODE(n)	PPC_REG_VAL(13, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_OEN_ENCODE(n)	PPC_REG_VAL(15, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_WBN_ENCODE(n)	PPC_REG_VAL(17, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_WBF_ENCODE(n)	PPC_REG_VAL(19, (static_cast(u32, n)) & 0x3) +#define EBC_BXAP_TH_ENCODE(n)	PPC_REG_VAL(22, (static_cast(u32, n)) & 0x7) +#define EBC_BXAP_RE_ENABLED	PPC_REG_VAL(23, 0x1) +#define EBC_BXAP_RE_DISABLED	PPC_REG_VAL(23, 0x0) +#define EBC_BXAP_SOR_DELAYED	PPC_REG_VAL(24, 0x0) +#define EBC_BXAP_SOR_NONDELAYED	PPC_REG_VAL(24, 0x1) +#define EBC_BXAP_BEM_WRITEONLY	PPC_REG_VAL(25, 0x0) +#define EBC_BXAP_BEM_RW		PPC_REG_VAL(25, 0x1) +#define EBC_BXAP_PEN_DISABLED	PPC_REG_VAL(26, 0x0) +#define EBC_BXAP_PEN_ENABLED	PPC_REG_VAL(26, 0x1) + +/* Common fields in EBC0_CFG register */ +#define EBC_CFG_PTD_MASK	PPC_REG_VAL(1, 0x1) +#define EBC_CFG_PTD_ENABLE	PPC_REG_VAL(1, 0x0) +#define EBC_CFG_PTD_DISABLE	PPC_REG_VAL(1, 0x1) +#define EBC_CFG_RTC_MASK	PPC_REG_VAL(4, 0x7) +#define EBC_CFG_RTC_16PERCLK	PPC_REG_VAL(4, 0x0) +#define EBC_CFG_RTC_32PERCLK	PPC_REG_VAL(4, 0x1) +#define EBC_CFG_RTC_64PERCLK	PPC_REG_VAL(4, 0x2) +#define EBC_CFG_RTC_128PERCLK	PPC_REG_VAL(4, 0x3) +#define EBC_CFG_RTC_256PERCLK	PPC_REG_VAL(4, 0x4) +#define EBC_CFG_RTC_512PERCLK	PPC_REG_VAL(4, 0x5) +#define EBC_CFG_RTC_1024PERCLK	PPC_REG_VAL(4, 0x6) +#define EBC_CFG_RTC_2048PERCLK	PPC_REG_VAL(4, 0x7) +#define EBC_CFG_PME_MASK	PPC_REG_VAL(14, 0x1) +#define EBC_CFG_PME_DISABLE	PPC_REG_VAL(14, 0x0) +#define EBC_CFG_PME_ENABLE	PPC_REG_VAL(14, 0x1) +#define EBC_CFG_PMT_MASK	PPC_REG_VAL(19, 0x1F) +#define EBC_CFG_PMT_ENCODE(n)	PPC_REG_VAL(19, (static_cast(u32, n)) & 0x1F) + +/* Now the two versions of the other bits */ +#if defined(CONFIG_EBC_PPC4xx_IBM_VER1) +#define EBC_CFG_EBTC_MASK	PPC_REG_VAL(0, 0x1) +#define EBC_CFG_EBTC_HI		PPC_REG_VAL(0, 0x0) +#define EBC_CFG_EBTC_DRIVEN	PPC_REG_VAL(0, 0x1) +#define EBC_CFG_EMPH_MASK	PPC_REG_VAL(EBC_CFG_EMPH_POS, 0x3) +#define EBC_CFG_EMPH_ENCODE(n)	PPC_REG_VAL(EBC_CFG_EMPH_POS, \ +						(static_cast(u32, n)) & 0x3) +#define EBC_CFG_EMPL_MASK	PPC_REG_VAL(EBC_CFG_EMPL_POS, 0x3) +#define EBC_CFG_EMPL_ENCODE(n)	PPC_REG_VAL(EBC_CFG_EMPH_POS, \ +						(static_cast(u32, n)) & 0x3) +#define EBC_CFG_CSTC_MASK	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_CSTC_HI		PPC_REG_VAL(9, 0x0) +#define EBC_CFG_CSTC_DRIVEN	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_BPR_MASK	PPC_REG_VAL(11, 0x3) +#define EBC_CFG_BPR_1DW		PPC_REG_VAL(11, 0x0) +#define EBC_CFG_BPR_2DW		PPC_REG_VAL(11, 0x1) +#define EBC_CFG_BPR_4DW		PPC_REG_VAL(11, 0x2) +#define EBC_CFG_EMS_MASK	PPC_REG_VAL(13, 0x3) +#define EBC_CFG_EMS_8BIT	PPC_REG_VAL(13, 0x0) +#define EBC_CFG_EMS_16BIT	PPC_REG_VAL(13, 0x1) +#define EBC_CFG_EMS_32BIT	PPC_REG_VAL(13, 0x2) +#else +#define EBC_CFG_LE_MASK		PPC_REG_VAL(0, 0x1) +#define EBC_CFG_LE_UNLOCK	PPC_REG_VAL(0, 0x0) +#define EBC_CFG_LE_LOCK		PPC_REG_VAL(0, 0x1) +#define EBC_CFG_ATC_MASK	PPC_REG_VAL(5, 0x1) +#define EBC_CFG_ATC_HI		PPC_REG_VAL(5, 0x0) +#define EBC_CFG_ATC_PREVIOUS	PPC_REG_VAL(5, 0x1) +#define EBC_CFG_DTC_MASK	PPC_REG_VAL(6, 0x1) +#define EBC_CFG_DTC_HI		PPC_REG_VAL(6, 0x0) +#define EBC_CFG_DTC_PREVIOUS	PPC_REG_VAL(6, 0x1) +#define EBC_CFG_CTC_MASK	PPC_REG_VAL(7, 0x1) +#define EBC_CFG_CTC_HI		PPC_REG_VAL(7, 0x0) +#define EBC_CFG_CTC_PREVIOUS	PPC_REG_VAL(7, 0x1) +#define EBC_CFG_OEO_MASK	PPC_REG_VAL(8, 0x1) +#define EBC_CFG_OEO_HI		PPC_REG_VAL(8, 0x0) +#define EBC_CFG_OEO_PREVIOUS	PPC_REG_VAL(8, 0x1) +#define EBC_CFG_EMC_MASK	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_EMC_NONDEFAULT	PPC_REG_VAL(9, 0x0) +#define EBC_CFG_EMC_DEFAULT	PPC_REG_VAL(9, 0x1) +#define EBC_CFG_PR_MASK		PPC_REG_VAL(21, 0x3) +#define EBC_CFG_PR_16		PPC_REG_VAL(21, 0x0) +#define EBC_CFG_PR_32		PPC_REG_VAL(21, 0x1) +#define EBC_CFG_PR_64		PPC_REG_VAL(21, 0x2) +#define EBC_CFG_PR_128		PPC_REG_VAL(21, 0x3) +#endif + +#endif /* _PPC4xx_EBC_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-emac.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-emac.h new file mode 100644 index 00000000..76fa95ca --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-emac.h @@ -0,0 +1,536 @@ +/* + * SPDX-License-Identifier:	GPL-2.0	IBM-pibs + */ +/*----------------------------------------------------------------------------+ +| +|  File Name:	enetemac.h +| +|  Function:	Header file for the EMAC3 macro on the 405GP. +| +|  Author:	Mark Wisner +| +|  Change Activity- +| +|  Date	       Description of Change					   BY +|  ---------   ---------------------					   --- +|  29-Apr-99   Created							   MKW +| ++----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------+ +|  19-Nov-03   Travis Sawyer, Sandburst Corporation, tsawyer@sandburst.com +|	       ported to handle 440GP and 440GX multiple EMACs ++----------------------------------------------------------------------------*/ + +#ifndef _PPC4XX_ENET_H_ +#define _PPC4XX_ENET_H_ + +#include <net.h> +#include "asm/ppc4xx-mal.h" + + +/*-----------------------------------------------------------------------------+ +| General enternet defines.  802 frames are not supported. ++-----------------------------------------------------------------------------*/ +#define ENET_ADDR_LENGTH		6 +#define ENET_ARPTYPE			0x806 +#define ARP_REQUEST			1 +#define ARP_REPLY			2 +#define ENET_IPTYPE			0x800 +#define ARP_CACHE_SIZE			5 + +#define NUM_TX_BUFF 1 +#define NUM_RX_BUFF PKTBUFSRX + +struct enet_frame { +   unsigned char	dest_addr[ENET_ADDR_LENGTH]; +   unsigned char	source_addr[ENET_ADDR_LENGTH]; +   unsigned short	type; +   unsigned char	enet_data[1]; +}; + +struct arp_entry { +   unsigned long	inet_address; +   unsigned char	mac_address[ENET_ADDR_LENGTH]; +   unsigned long	valid; +   unsigned long	sec; +   unsigned long	nsec; +}; + + +/* Statistic Areas */ +#define MAX_ERR_LOG 10 + +typedef struct emac_stats_st{	/* Statistic Block */ +	int data_len_err; +	int rx_frames; +	int rx; +	int rx_prot_err; +	int int_err; +	int pkts_tx; +	int pkts_rx; +	int pkts_handled; +	short tx_err_log[MAX_ERR_LOG]; +	short rx_err_log[MAX_ERR_LOG]; +} EMAC_STATS_ST, *EMAC_STATS_PST; + +/* Structure containing variables used by the shared code (4xx_enet.c) */ +typedef struct emac_4xx_hw_st { +    uint32_t		hw_addr;		/* EMAC offset */ +    uint32_t		tah_addr;		/* TAH offset */ +    uint32_t		phy_id; +    uint32_t		phy_addr; +    uint32_t		original_fc; +    uint32_t		txcw; +    uint32_t		autoneg_failed; +    uint32_t		emac_ier; +    volatile mal_desc_t *tx; +    volatile mal_desc_t *rx; +    u32			tx_phys; +    u32			rx_phys; +    bd_t		*bis;	/* for eth_init upon mal error */ +    mal_desc_t		*alloc_tx_buf; +    mal_desc_t		*alloc_rx_buf; +    char		*txbuf_ptr; +    uint16_t		devnum; +    int			get_link_status; +    int			tbi_compatibility_en; +    int			tbi_compatibility_on; +    int			fc_send_xon; +    int			report_tx_early; +    int			first_init; +    int			tx_err_index; +    int			rx_err_index; +    int			rx_slot;	/* MAL Receive Slot */ +    int			rx_i_index;	/* Receive Interrupt Queue Index */ +    int			rx_u_index;	/* Receive User Queue Index */ +    int			tx_slot;	/* MAL Transmit Slot */ +    int			tx_i_index;	/* Transmit Interrupt Queue Index */ +    int			tx_u_index;		/* Transmit User Queue Index */ +    int			rx_ready[NUM_RX_BUFF];	/* Receive Ready Queue */ +    int			tx_run[NUM_TX_BUFF];	/* Transmit Running Queue */ +    int			is_receiving;	/* sync with eth interrupt */ +    int			print_speed;	/* print speed message upon start */ +    EMAC_STATS_ST	stats; +} EMAC_4XX_HW_ST, *EMAC_4XX_HW_PST; + + +#if defined(CONFIG_440GX) || defined(CONFIG_460GT) +#define EMAC_NUM_DEV		4 +#elif (defined(CONFIG_440) || defined(CONFIG_405EP)) &&	\ +	!defined(CONFIG_440SP) && !defined(CONFIG_440SPE) +#define EMAC_NUM_DEV		2 +#else +#define EMAC_NUM_DEV		1 +#endif + +#ifdef CONFIG_IBM_EMAC4_V4	/* EMAC4 V4 changed bit setting */ +#define EMAC_STACR_OC_MASK	(0x00008000) +#else +#define EMAC_STACR_OC_MASK	(0x00000000) +#endif + +/* + * XMII bridge configurations for those systems (e.g. 405EX(r)) that do + * not have a pin function control (PFC) register to otherwise determine + * the bridge configuration. + */ +#define EMAC_PHY_MODE_NONE		0 +#define EMAC_PHY_MODE_NONE_RGMII	1 +#define EMAC_PHY_MODE_RGMII_NONE	2 +#define EMAC_PHY_MODE_RGMII_RGMII	3 +#define EMAC_PHY_MODE_NONE_GMII		4 +#define EMAC_PHY_MODE_GMII_NONE		5 +#define EMAC_PHY_MODE_NONE_MII		6 +#define EMAC_PHY_MODE_MII_NONE		7 + +/* ZMII Bridge Register addresses */ +#if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define ZMII0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0D00) +#else +#define ZMII0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0780) +#endif +#define ZMII0_FER		(ZMII0_BASE) +#define ZMII0_SSR		(ZMII0_BASE + 4) +#define ZMII0_SMIISR		(ZMII0_BASE + 8) + +/* ZMII FER Register Bit Definitions */ +#define ZMII_FER_DIS		(0x0) +#define ZMII_FER_MDI		(0x8) +#define ZMII_FER_SMII		(0x4) +#define ZMII_FER_RMII		(0x2) +#define ZMII_FER_MII		(0x1) + +#define ZMII_FER_RSVD11		(0x00200000) +#define ZMII_FER_RSVD10		(0x00100000) +#define ZMII_FER_RSVD14_31	(0x0003FFFF) + +#define ZMII_FER_V(__x)		(((3 - __x) * 4) + 16) + + +/* ZMII Speed Selection Register Bit Definitions */ +#define ZMII0_SSR_SCI		(0x4) +#define ZMII0_SSR_FSS		(0x2) +#define ZMII0_SSR_SP		(0x1) +#define ZMII0_SSR_RSVD16_31	(0x0000FFFF) + +#define ZMII0_SSR_V(__x)		(((3 - __x) * 4) + 16) + + +/* ZMII SMII Status Register Bit Definitions */ +#define ZMII0_SMIISR_E1		(0x80) +#define ZMII0_SMIISR_EC		(0x40) +#define ZMII0_SMIISR_EN		(0x20) +#define ZMII0_SMIISR_EJ		(0x10) +#define ZMII0_SMIISR_EL		(0x08) +#define ZMII0_SMIISR_ED		(0x04) +#define ZMII0_SMIISR_ES		(0x02) +#define ZMII0_SMIISR_EF		(0x01) + +#define ZMII0_SMIISR_V(__x)	((3 - __x) * 8) + +/* RGMII Register Addresses */ +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +#define RGMII_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x1000) +#elif defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define RGMII_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x1500) +#elif defined(CONFIG_405EX) +#define RGMII_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0xB00) +#else +#define RGMII_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0790) +#endif +#define RGMII_FER		(RGMII_BASE + 0x00) +#define RGMII_SSR		(RGMII_BASE + 0x04) + +#if defined(CONFIG_460GT) +#define RGMII1_BASE_OFFSET	0x100 +#endif + +/* RGMII Function Enable (FER) Register Bit Definitions */ +#define RGMII_FER_DIS		(0x00) +#define RGMII_FER_RTBI		(0x04) +#define RGMII_FER_RGMII		(0x05) +#define RGMII_FER_TBI		(0x06) +#define RGMII_FER_GMII		(0x07) +#define RGMII_FER_MII		(RGMII_FER_GMII) + +#define RGMII_FER_V(__x)	((__x - 2) * 4) + +#define RGMII_FER_MDIO(__x)	(1 << (19 - (__x))) + +/* RGMII Speed Selection Register Bit Definitions */ +#define RGMII_SSR_SP_10MBPS	(0x00) +#define RGMII_SSR_SP_100MBPS	(0x02) +#define RGMII_SSR_SP_1000MBPS	(0x04) + +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_405EX) +#define RGMII_SSR_V(__x)	((__x) * 8) +#else +#define RGMII_SSR_V(__x)	((__x -2) * 8) +#endif + +/*---------------------------------------------------------------------------+ +|  TCP/IP Acceleration Hardware (TAH) 440GX Only ++---------------------------------------------------------------------------*/ +#if defined(CONFIG_440GX) +#define TAH_BASE	(CONFIG_SYS_PERIPHERAL_BASE + 0x0B50) +#define TAH_REVID	(TAH_BASE + 0x0)    /* Revision ID (RO)*/ +#define TAH_MR		(TAH_BASE + 0x10)   /* Mode Register (R/W) */ +#define TAH_SSR0	(TAH_BASE + 0x14)   /* Segment Size Reg 0 (R/W) */ +#define TAH_SSR1	(TAH_BASE + 0x18)   /* Segment Size Reg 1 (R/W) */ +#define TAH_SSR2	(TAH_BASE + 0x1C)   /* Segment Size Reg 2 (R/W) */ +#define TAH_SSR3	(TAH_BASE + 0x20)   /* Segment Size Reg 3 (R/W) */ +#define TAH_SSR4	(TAH_BASE + 0x24)   /* Segment Size Reg 4 (R/W) */ +#define TAH_SSR5	(TAH_BASE + 0x28)   /* Segment Size Reg 5 (R/W) */ +#define TAH_TSR		(TAH_BASE + 0x2C)   /* Transmit Status Register (RO) */ + +/* TAH Revision */ +#define TAH_REV_RN_M		(0x000FFF00)	    /* Revision Number */ +#define TAH_REV_BN_M		(0x000000FF)	    /* Branch Revision Number */ + +#define TAH_REV_RN_V		(8) +#define TAH_REV_BN_V		(0) + +/* TAH Mode Register */ +#define TAH_MR_CVR	(0x80000000)	    /* Checksum verification on RX */ +#define TAH_MR_SR	(0x40000000)	    /* Software reset */ +#define TAH_MR_ST	(0x3F000000)	    /* Send Threshold */ +#define TAH_MR_TFS	(0x00E00000)	    /* Transmit FIFO size */ +#define TAH_MR_DTFP	(0x00100000)	    /* Disable TX FIFO parity */ +#define TAH_MR_DIG	(0x00080000)	    /* Disable interrupt generation */ +#define TAH_MR_RSVD	(0x0007FFFF)	    /* Reserved */ + +#define TAH_MR_ST_V	(20) +#define TAH_MR_TFS_V	(17) + +#define TAH_MR_TFS_2K	(0x1)	    /* Transmit FIFO size 2Kbyte */ +#define TAH_MR_TFS_4K	(0x2)	    /* Transmit FIFO size 4Kbyte */ +#define TAH_MR_TFS_6K	(0x3)	    /* Transmit FIFO size 6Kbyte */ +#define TAH_MR_TFS_8K	(0x4)	    /* Transmit FIFO size 8Kbyte */ +#define TAH_MR_TFS_10K	(0x5)	    /* Transmit FIFO size 10Kbyte (max)*/ + + +/* TAH Segment Size Registers 0:5 */ +#define TAH_SSR_RSVD0	(0xC0000000)	    /* Reserved */ +#define TAH_SSR_SS	(0x3FFE0000)	    /* Segment size in multiples of 2 */ +#define TAH_SSR_RSVD1	(0x0001FFFF)	    /* Reserved */ + +/* TAH Transmit Status Register */ +#define TAH_TSR_TFTS	(0x80000000)	    /* Transmit FIFO too small */ +#define TAH_TSR_UH	(0x40000000)	    /* Unrecognized header */ +#define TAH_TSR_NIPF	(0x20000000)	    /* Not IPv4 */ +#define TAH_TSR_IPOP	(0x10000000)	    /* IP option present */ +#define TAH_TSR_NISF	(0x08000000)	    /* No IEEE SNAP format */ +#define TAH_TSR_ILTS	(0x04000000)	    /* IP length too short */ +#define TAH_TSR_IPFP	(0x02000000)	    /* IP fragment present */ +#define TAH_TSR_UP	(0x01000000)	    /* Unsupported protocol */ +#define TAH_TSR_TFP	(0x00800000)	    /* TCP flags present */ +#define TAH_TSR_SUDP	(0x00400000)	    /* Segmentation for UDP */ +#define TAH_TSR_DLM	(0x00200000)	    /* Data length mismatch */ +#define TAH_TSR_SIEEE	(0x00100000)	    /* Segmentation for IEEE */ +#define TAH_TSR_TFPE	(0x00080000)	    /* Transmit FIFO parity error */ +#define TAH_TSR_SSTS	(0x00040000)	    /* Segment size too small */ +#define TAH_TSR_RSVD	(0x0003FFFF)	    /* Reserved */ +#endif /* CONFIG_440GX */ + + +/* Ethernet MAC Regsiter Addresses */ +#if defined(CONFIG_440) +#if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define EMAC0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0E00) +#else +#define EMAC0_BASE		(CONFIG_SYS_PERIPHERAL_BASE + 0x0800) +#endif +#else +#if defined(CONFIG_405EZ) || defined(CONFIG_405EX) +#define EMAC0_BASE		0xEF600900 +#else +#define EMAC0_BASE		0xEF600800 +#endif +#endif + +#if defined(CONFIG_440EPX) +#define EMAC1_BASE		0xEF600F00 +#define EMAC1_MR1		(EMAC1_BASE + 0x04) +#endif + +#define EMAC0_MR0		(EMAC0_BASE) +#define EMAC0_MR1		(EMAC0_BASE + 0x04) +#define EMAC0_TMR0		(EMAC0_BASE + 0x08) +#define EMAC0_TMR1		(EMAC0_BASE + 0x0c) +#define EMAC0_RXM		(EMAC0_BASE + 0x10) +#define EMAC0_ISR		(EMAC0_BASE + 0x14) +#define EMAC0_IER		(EMAC0_BASE + 0x18) +#define EMAC0_IAH		(EMAC0_BASE + 0x1c) +#define EMAC0_IAL		(EMAC0_BASE + 0x20) +#define EMAC0_PTR		(EMAC0_BASE + 0x2c) +#define EMAC0_PAUSE_TIME_REG	EMAC0_PTR +#define EMAC0_IPGVR		(EMAC0_BASE + 0x58) +#define EMAC0_I_FRAME_GAP_REG	EMAC0_IPGVR +#define EMAC0_STACR		(EMAC0_BASE + 0x5c) +#define EMAC0_TRTR		(EMAC0_BASE + 0x60) +#define EMAC0_RWMR		(EMAC0_BASE + 0x64) +#define EMAC0_RX_HI_LO_WMARK	EMAC0_RWMR + +/* bit definitions */ +/* MODE REG 0 */ +#define EMAC_MR0_RXI		(0x80000000) +#define EMAC_MR0_TXI		(0x40000000) +#define EMAC_MR0_SRST		(0x20000000) +#define EMAC_MR0_TXE		(0x10000000) +#define EMAC_MR0_RXE		(0x08000000) +#define EMAC_MR0_WKE		(0x04000000) + +/* on 440GX EMAC_MR1 has a different layout! */ +#if defined(CONFIG_440GX) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_405EX) +/* MODE Reg 1 */ +#define EMAC_MR1_FDE		(0x80000000) +#define EMAC_MR1_ILE		(0x40000000) +#define EMAC_MR1_VLE		(0x20000000) +#define EMAC_MR1_EIFC		(0x10000000) +#define EMAC_MR1_APP		(0x08000000) +#define EMAC_MR1_RSVD		(0x06000000) +#define EMAC_MR1_IST		(0x01000000) +#define EMAC_MR1_MF_1000GPCS	(0x00C00000) +#define EMAC_MR1_MF_1000MBPS	(0x00800000)	/* 0's for 10MBPS */ +#define EMAC_MR1_MF_100MBPS	(0x00400000) +#define EMAC_MR1_RFS_MASK	(0x00380000) +#define EMAC_MR1_RFS_16K		(0x00280000) +#define EMAC_MR1_RFS_8K		(0x00200000) +#define EMAC_MR1_RFS_4K		(0x00180000) +#define EMAC_MR1_RFS_2K		(0x00100000) +#define EMAC_MR1_RFS_1K		(0x00080000) +#define EMAC_MR1_TX_FIFO_MASK	(0x00070000) +#define EMAC_MR1_TX_FIFO_16K	(0x00050000) +#define EMAC_MR1_TX_FIFO_8K	(0x00040000) +#define EMAC_MR1_TX_FIFO_4K	(0x00030000) +#define EMAC_MR1_TX_FIFO_2K	(0x00020000) +#define EMAC_MR1_TX_FIFO_1K	(0x00010000) +#define EMAC_MR1_TR_MULTI	(0x00008000)	/* 0'x for single packet */ +#define EMAC_MR1_MWSW		(0x00007000) +#define EMAC_MR1_JUMBO_ENABLE	(0x00000800) +#define EMAC_MR1_IPPA		(0x000007c0) +#define EMAC_MR1_IPPA_SET(id)	(((id) & 0x1f) << 6) +#define EMAC_MR1_IPPA_GET(id)	(((id) >> 6) & 0x1f) +#define EMAC_MR1_OBCI_GT100	(0x00000020) +#define EMAC_MR1_OBCI_100	(0x00000018) +#define EMAC_MR1_OBCI_83		(0x00000010) +#define EMAC_MR1_OBCI_66		(0x00000008) +#define EMAC_MR1_RSVD1		(0x00000007) +#else /* defined(CONFIG_440GX) */ +/* EMAC_MR1 is the same on 405GP, 405GPr, 405EP, 440GP, 440EP */ +#define EMAC_MR1_FDE		0x80000000 +#define EMAC_MR1_ILE		0x40000000 +#define EMAC_MR1_VLE		0x20000000 +#define EMAC_MR1_EIFC		0x10000000 +#define EMAC_MR1_APP		0x08000000 +#define EMAC_MR1_AEMI		0x02000000 +#define EMAC_MR1_IST		0x01000000 +#define EMAC_MR1_MF_1000MBPS	0x00800000	/* 0's for 10MBPS */ +#define EMAC_MR1_MF_100MBPS	0x00400000 +#define EMAC_MR1_RFS_MASK	0x00300000 +#define EMAC_MR1_RFS_4K		0x00300000 +#define EMAC_MR1_RFS_2K		0x00200000 +#define EMAC_MR1_RFS_1K		0x00100000 +#define EMAC_MR1_RFS_512		0x00000000 +#define EMAC_MR1_TX_FIFO_MASK	0x000c0000 +#define EMAC_MR1_TX_FIFO_2K	0x00080000 +#define EMAC_MR1_TX_FIFO_1K	0x00040000 +#define EMAC_MR1_TX_FIFO_512	0x00000000 +#define EMAC_MR1_TR0_DEPEND	0x00010000	/* 0'x for single packet */ +#define EMAC_MR1_TR0_MULTI	0x00008000 +#define EMAC_MR1_TR1_DEPEND	0x00004000 +#define EMAC_MR1_TR1_MULTI	0x00002000 +#if defined(CONFIG_440EP) || defined(CONFIG_440GR) +#define EMAC_MR1_JUMBO_ENABLE	0x00001000 +#endif /* defined(CONFIG_440EP) || defined(CONFIG_440GR) */ +#endif /* defined(CONFIG_440GX) */ + +#define EMAC_MR1_FIFO_MASK	(EMAC_MR1_RFS_MASK | EMAC_MR1_TX_FIFO_MASK) +#if defined(CONFIG_405EZ) +/* 405EZ only supports 512 bytes fifos */ +#define EMAC_MR1_FIFO_SIZE	(EMAC_MR1_RFS_512 | EMAC_MR1_TX_FIFO_512) +#else +/* Set receive fifo to 4k and tx fifo to 2k */ +#define EMAC_MR1_FIFO_SIZE	(EMAC_MR1_RFS_4K | EMAC_MR1_TX_FIFO_2K) +#endif + +/* Transmit Mode Register 0 */ +#define EMAC_TMR0_GNP0		(0x80000000) +#define EMAC_TMR0_GNP1		(0x40000000) +#define EMAC_TMR0_GNPD		(0x20000000) +#define EMAC_TMR0_FC		(0x10000000) + +/* Receive Mode Register */ +#define EMAC_RMR_SP		(0x80000000) +#define EMAC_RMR_SFCS		(0x40000000) +#define EMAC_RMR_ARRP		(0x20000000) +#define EMAC_RMR_ARP		(0x10000000) +#define EMAC_RMR_AROP		(0x08000000) +#define EMAC_RMR_ARPI		(0x04000000) +#define EMAC_RMR_PPP		(0x02000000) +#define EMAC_RMR_PME		(0x01000000) +#define EMAC_RMR_PMME		(0x00800000) +#define EMAC_RMR_IAE		(0x00400000) +#define EMAC_RMR_MIAE		(0x00200000) +#define EMAC_RMR_BAE		(0x00100000) +#define EMAC_RMR_MAE		(0x00080000) + +/* Interrupt Status & enable Regs */ +#define EMAC_ISR_OVR		(0x02000000) +#define EMAC_ISR_PP		(0x01000000) +#define EMAC_ISR_BP		(0x00800000) +#define EMAC_ISR_RP		(0x00400000) +#define EMAC_ISR_SE		(0x00200000) +#define EMAC_ISR_SYE		(0x00100000) +#define EMAC_ISR_BFCS		(0x00080000) +#define EMAC_ISR_PTLE		(0x00040000) +#define EMAC_ISR_ORE		(0x00020000) +#define EMAC_ISR_IRE		(0x00010000) +#define EMAC_ISR_DBDM		(0x00000200) +#define EMAC_ISR_DB0		(0x00000100) +#define EMAC_ISR_SE0		(0x00000080) +#define EMAC_ISR_TE0		(0x00000040) +#define EMAC_ISR_DB1		(0x00000020) +#define EMAC_ISR_SE1		(0x00000010) +#define EMAC_ISR_TE1		(0x00000008) +#define EMAC_ISR_MOS		(0x00000002) +#define EMAC_ISR_MOF		(0x00000001) + +/* STA CONTROL REG */ +#define EMAC_STACR_OC		(0x00008000) +#define EMAC_STACR_PHYE		(0x00004000) + +#ifdef CONFIG_IBM_EMAC4_V4	/* EMAC4 V4 changed bit setting */ +#define EMAC_STACR_INDIRECT_MODE (0x00002000) +#define EMAC_STACR_WRITE	(0x00000800) /* $BUC */ +#define EMAC_STACR_READ		(0x00001000) /* $BUC */ +#define EMAC_STACR_OP_MASK	(0x00001800) +#define EMAC_STACR_MDIO_ADDR	(0x00000000) +#define EMAC_STACR_MDIO_WRITE	(0x00000800) +#define EMAC_STACR_MDIO_READ	(0x00001800) +#define EMAC_STACR_MDIO_READ_INC (0x00001000) +#else +#define EMAC_STACR_WRITE	(0x00002000) +#define EMAC_STACR_READ		(0x00001000) +#endif + +#define EMAC_STACR_CLK_83MHZ	(0x00000800)  /* 0's for 50Mhz */ +#define EMAC_STACR_CLK_66MHZ	(0x00000400) +#define EMAC_STACR_CLK_100MHZ	(0x00000C00) + +/* Transmit Request Threshold Register */ +#define EMAC_TRTR_256		(0x18000000)   /* 0's for 64 Bytes */ +#define EMAC_TRTR_192		(0x10000000) +#define EMAC_TRTR_128		(0x01000000) + +/* the follwing defines are for the MadMAL status and control registers. */ +/* For bits 0..5 look at the mal.h file					 */ +#define EMAC_TX_CTRL_GFCS	(0x0200) +#define EMAC_TX_CTRL_GP		(0x0100) +#define EMAC_TX_CTRL_ISA	(0x0080) +#define EMAC_TX_CTRL_RSA	(0x0040) +#define EMAC_TX_CTRL_IVT	(0x0020) +#define EMAC_TX_CTRL_RVT	(0x0010) + +#define EMAC_TX_CTRL_DEFAULT (EMAC_TX_CTRL_GFCS |EMAC_TX_CTRL_GP) + +#define EMAC_TX_ST_BFCS		(0x0200) +#define EMAC_TX_ST_BPP		(0x0100) +#define EMAC_TX_ST_LCS		(0x0080) +#define EMAC_TX_ST_ED		(0x0040) +#define EMAC_TX_ST_EC		(0x0020) +#define EMAC_TX_ST_LC		(0x0010) +#define EMAC_TX_ST_MC		(0x0008) +#define EMAC_TX_ST_SC		(0x0004) +#define EMAC_TX_ST_UR		(0x0002) +#define EMAC_TX_ST_SQE		(0x0001) + +#define EMAC_TX_ST_DEFAULT	(0x03F3) + + +/* madmal receive status / Control bits */ + +#define EMAC_RX_ST_OE		(0x0200) +#define EMAC_RX_ST_PP		(0x0100) +#define EMAC_RX_ST_BP		(0x0080) +#define EMAC_RX_ST_RP		(0x0040) +#define EMAC_RX_ST_SE		(0x0020) +#define EMAC_RX_ST_AE		(0x0010) +#define EMAC_RX_ST_BFCS		(0x0008) +#define EMAC_RX_ST_PTL		(0x0004) +#define EMAC_RX_ST_ORE		(0x0002) +#define EMAC_RX_ST_IRE		(0x0001) +/* all the errors we care about */ +#define EMAC_RX_ERRORS		(0x03FF) + +#endif /* _PPC4XX_ENET_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-gpio.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-gpio.h new file mode 100644 index 00000000..90a62ea4 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-gpio.h @@ -0,0 +1,103 @@ +/* + * (C) Copyright 2007-2008 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_PPC_GPIO_H +#define __ASM_PPC_GPIO_H + +#include <asm/types.h> + +/* 4xx PPC's have 2 GPIO controllers */ +#if defined(CONFIG_405EZ) ||					\ +	defined(CONFIG_440EP) || defined(CONFIG_440GR) ||	\ +	defined(CONFIG_440EPX) || defined(CONFIG_440GRX) ||	\ +	defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define GPIO_GROUP_MAX	2 +#else +#define GPIO_GROUP_MAX	1 +#endif + +/* GPIO controller */ +struct ppc4xx_gpio { +	u32 or;		/* Output Control */ +	u32 tcr;	/* Tri-State Control */ +	u32 osl;	/* Output Select 16..31 */ +	u32 osh;	/* Output Select 0..15 */ +	u32 tsl;	/* Tri-State Select 16..31 */ +	u32 tsh;	/* Tri-State Select 0..15 */ +	u32 odr;	/* Open Drain */ +	u32 ir;		/* Input */ +	u32 rr1;	/* Receive Register 1 */ +	u32 rr2;	/* Receive Register 2 */ +	u32 rr3;	/* Receive Register 3 */ +	u32 reserved; +	u32 is1l;	/* Input Select 1 16..31 */ +	u32 is1h;	/* Input Select 1 0..15 */ +	u32 is2l;	/* Input Select 2 16..31 */ +	u32 is2h;	/* Input Select 2 0..15 */ +	u32 is3l;	/* Input Select 3 16..31 */ +	u32 is3h;	/* Input Select 3 0..15 */ +}; + +/* Offsets */ +#define GPIOx_OR	0x00		/* GPIO Output Register */ +#define GPIOx_TCR	0x04		/* GPIO Three-State Control Register */ +#define GPIOx_OSL	0x08		/* GPIO Output Select Register (Bits 0-31) */ +#define GPIOx_OSH	0x0C		/* GPIO Ouput Select Register (Bits 32-63) */ +#define GPIOx_TSL	0x10		/* GPIO Three-State Select Register (Bits 0-31) */ +#define GPIOx_TSH	0x14		/* GPIO Three-State Select Register  (Bits 32-63) */ +#define GPIOx_ODR	0x18		/* GPIO Open drain Register */ +#define GPIOx_IR	0x1C		/* GPIO Input Register */ +#define GPIOx_RR1	0x20		/* GPIO Receive Register 1 */ +#define GPIOx_RR2	0x24		/* GPIO Receive Register 2 */ +#define GPIOx_RR3	0x28		/* GPIO Receive Register 3 */ +#define GPIOx_IS1L	0x30		/* GPIO Input Select Register 1 (Bits 0-31) */ +#define GPIOx_IS1H	0x34		/* GPIO Input Select Register 1 (Bits 32-63) */ +#define GPIOx_IS2L	0x38		/* GPIO Input Select Register 2 (Bits 0-31) */ +#define GPIOx_IS2H	0x3C		/* GPIO Input Select Register 2 (Bits 32-63) */ +#define GPIOx_IS3L	0x40		/* GPIO Input Select Register 3 (Bits 0-31) */ +#define GPIOx_IS3H	0x44		/* GPIO Input Select Register 3 (Bits 32-63) */ + +#define GPIO_OR(x)	(x+GPIOx_OR)	/* GPIO Output Register */ +#define GPIO_TCR(x)	(x+GPIOx_TCR)	/* GPIO Three-State Control Register */ +#define GPIO_OS(x)	(x+GPIOx_OSL)	/* GPIO Output Select Register High or Low */ +#define GPIO_TS(x)	(x+GPIOx_TSL)	/* GPIO Three-state Control Reg High or Low */ +#define GPIO_IS1(x)	(x+GPIOx_IS1L)	/* GPIO Input register1 High or Low */ +#define GPIO_IS2(x)	(x+GPIOx_IS2L)	/* GPIO Input register2 High or Low */ +#define GPIO_IS3(x)	(x+GPIOx_IS3L)	/* GPIO Input register3 High or Low */ + +#define GPIO0		0 +#define GPIO1		1 + +#define GPIO_MAX	32 +#define GPIO_ALT1_SEL	0x40000000 +#define GPIO_ALT2_SEL	0x80000000 +#define GPIO_ALT3_SEL	0xc0000000 +#define GPIO_IN_SEL	0x40000000 +#define GPIO_MASK	0xc0000000 + +#define GPIO_VAL(gpio)	(0x80000000 >> (gpio)) + +#ifndef __ASSEMBLY__ +typedef enum gpio_select { GPIO_SEL, GPIO_ALT1, GPIO_ALT2, GPIO_ALT3 } gpio_select_t; +typedef enum gpio_driver { GPIO_DIS, GPIO_IN, GPIO_OUT, GPIO_BI } gpio_driver_t; +typedef enum gpio_out	 { GPIO_OUT_0, GPIO_OUT_1, GPIO_OUT_NO_CHG } gpio_out_t; + +typedef struct { +	unsigned long	add;	/* gpio core base address	*/ +	gpio_driver_t	in_out;	/* Driver Setting		*/ +	gpio_select_t	alt_nb;	/* Selected Alternate		*/ +	gpio_out_t	out_val;/* Default Output Value		*/ +} gpio_param_s; +#endif + +void gpio_config(int pin, int in_out, int gpio_alt, int out_val); +void gpio_write_bit(int pin, int val); +int gpio_read_out_bit(int pin); +int gpio_read_in_bit(int pin); +void gpio_set_chip_configuration(void); + +#endif /* __ASM_PPC_GPIO_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-i2c.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-i2c.h new file mode 100644 index 00000000..09189cf1 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-i2c.h @@ -0,0 +1,93 @@ +/* + * (C) Copyright 2007-2009 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _4xx_i2c_h_ +#define _4xx_i2c_h_ + +#define IIC_OK		0 +#define IIC_NOK		1 +#define IIC_NOK_LA	2		/* Lost arbitration */ +#define IIC_NOK_ICT	3		/* Incomplete transfer */ +#define IIC_NOK_XFRA	4		/* Transfer aborted */ +#define IIC_NOK_DATA	5		/* No data in buffer */ +#define IIC_NOK_TOUT	6		/* Transfer timeout */ + +#define IIC_TIMEOUT	1		/* 1 second */ + +struct ppc4xx_i2c { +	u8 mdbuf; +	u8 res1; +	u8 sdbuf; +	u8 res2; +	u8 lmadr; +	u8 hmadr; +	u8 cntl; +	u8 mdcntl; +	u8 sts; +	u8 extsts; +	u8 lsadr; +	u8 hsadr; +	u8 clkdiv; +	u8 intrmsk; +	u8 xfrcnt; +	u8 xtcntlss; +	u8 directcntl; +	u8 intr; +}; + +/* MDCNTL Register Bit definition */ +#define IIC_MDCNTL_HSCL		0x01 +#define IIC_MDCNTL_EUBS		0x02 +#define IIC_MDCNTL_EINT		0x04 +#define IIC_MDCNTL_ESM		0x08 +#define IIC_MDCNTL_FSM		0x10 +#define IIC_MDCNTL_EGC		0x20 +#define IIC_MDCNTL_FMDB		0x40 +#define IIC_MDCNTL_FSDB		0x80 + +/* CNTL Register Bit definition */ +#define IIC_CNTL_PT		0x01 +#define IIC_CNTL_READ		0x02 +#define IIC_CNTL_CHT		0x04 +#define IIC_CNTL_RPST		0x08 +/* bit 2/3 for Transfer count*/ +#define IIC_CNTL_AMD		0x40 +#define IIC_CNTL_HMT		0x80 + +/* STS Register Bit definition */ +#define IIC_STS_PT		0x01 +#define IIC_STS_IRQA		0x02 +#define IIC_STS_ERR		0x04 +#define IIC_STS_SCMP		0x08 +#define IIC_STS_MDBF		0x10 +#define IIC_STS_MDBS		0x20 +#define IIC_STS_SLPR		0x40 +#define IIC_STS_SSS		0x80 + +/* EXTSTS Register Bit definition */ +#define IIC_EXTSTS_XFRA		0x01 +#define IIC_EXTSTS_ICT		0x02 +#define IIC_EXTSTS_LA		0x04 + +/* XTCNTLSS Register Bit definition */ +#define IIC_XTCNTLSS_SRST	0x01 +#define IIC_XTCNTLSS_EPI	0x02 +#define IIC_XTCNTLSS_SDBF	0x04 +#define IIC_XTCNTLSS_SBDD	0x08 +#define IIC_XTCNTLSS_SWS	0x10 +#define IIC_XTCNTLSS_SWC	0x20 +#define IIC_XTCNTLSS_SRS	0x40 +#define IIC_XTCNTLSS_SRC	0x80 + +/* IICx_DIRECTCNTL register */ +#define IIC_DIRCNTL_SDAC	0x08 +#define IIC_DIRCNTL_SCC		0x04 +#define IIC_DIRCNTL_MSDA	0x02 +#define IIC_DIRCNTL_MSC		0x01 + +#define DIRCTNL_FREE(v)		(((v) & 0x0f) == 0x0f) +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-isram.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-isram.h new file mode 100644 index 00000000..4d1106b1 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-isram.h @@ -0,0 +1,66 @@ +/* + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC4xx_ISRAM_H_ +#define _PPC4xx_ISRAM_H_ + +/* + * Internal SRAM + */ +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_APM821XX) +#define ISRAM0_DCR_BASE 0x380 +#else +#define ISRAM0_DCR_BASE 0x020 +#endif +#define ISRAM0_SB0CR	(ISRAM0_DCR_BASE+0x00)	/* SRAM bank config 0*/ +#define ISRAM0_SB1CR	(ISRAM0_DCR_BASE+0x01)	/* SRAM bank config 1*/ +#define ISRAM0_SB2CR	(ISRAM0_DCR_BASE+0x02)	/* SRAM bank config 2*/ +#define ISRAM0_SB3CR	(ISRAM0_DCR_BASE+0x03)	/* SRAM bank config 3*/ +#define ISRAM0_BEAR	(ISRAM0_DCR_BASE+0x04)	/* SRAM bus error addr reg */ +#define ISRAM0_BESR0	(ISRAM0_DCR_BASE+0x05)	/* SRAM bus error status reg 0 */ +#define ISRAM0_BESR1	(ISRAM0_DCR_BASE+0x06)	/* SRAM bus error status reg 1 */ +#define ISRAM0_PMEG	(ISRAM0_DCR_BASE+0x07)	/* SRAM power management */ +#define ISRAM0_CID	(ISRAM0_DCR_BASE+0x08)	/* SRAM bus core id reg */ +#define ISRAM0_REVID	(ISRAM0_DCR_BASE+0x09)	/* SRAM bus revision id reg */ +#define ISRAM0_DPC	(ISRAM0_DCR_BASE+0x0a)	/* SRAM data parity check reg */ + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_APM821XX) +#define ISRAM1_DCR_BASE 0x0B0 +#define ISRAM1_SB0CR	(ISRAM1_DCR_BASE+0x00)	/* SRAM1 bank config 0*/ +#define ISRAM1_BEAR	(ISRAM1_DCR_BASE+0x04)	/* SRAM1 bus error addr reg */ +#define ISRAM1_BESR0	(ISRAM1_DCR_BASE+0x05)	/* SRAM1 bus error status reg 0 */ +#define ISRAM1_BESR1	(ISRAM1_DCR_BASE+0x06)	/* SRAM1 bus error status reg 1 */ +#define ISRAM1_PMEG	(ISRAM1_DCR_BASE+0x07)	/* SRAM1 power management */ +#define ISRAM1_CID	(ISRAM1_DCR_BASE+0x08)	/* SRAM1 bus core id reg */ +#define ISRAM1_REVID	(ISRAM1_DCR_BASE+0x09)	/* SRAM1 bus revision id reg */ +#define ISRAM1_DPC	(ISRAM1_DCR_BASE+0x0a)	/* SRAM1 data parity check reg */ +#endif /* CONFIG_460EX || CONFIG_460GT */ + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define ISRAM1_SIZE 0x0984 /* OCM size 64k */ +#elif defined(CONFIG_APM821XX) +#define ISRAM1_SIZE 0x0784 /* OCM size 32k */ +#endif + +/* + * L2 Cache + */ +#if defined (CONFIG_440GX) || \ +    defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX) || defined(CONFIG_APM821XX) +#define L2_CACHE_BASE	0x030 +#define L2_CACHE_CFG	(L2_CACHE_BASE+0x00)	/* L2 Cache Config      */ +#define L2_CACHE_CMD	(L2_CACHE_BASE+0x01)	/* L2 Cache Command     */ +#define L2_CACHE_ADDR	(L2_CACHE_BASE+0x02)	/* L2 Cache Address     */ +#define L2_CACHE_DATA	(L2_CACHE_BASE+0x03)	/* L2 Cache Data        */ +#define L2_CACHE_STAT	(L2_CACHE_BASE+0x04)	/* L2 Cache Status      */ +#define L2_CACHE_CVER	(L2_CACHE_BASE+0x05)	/* L2 Cache Revision ID */ +#define L2_CACHE_SNP0	(L2_CACHE_BASE+0x06)	/* L2 Cache Snoop reg 0 */ +#define L2_CACHE_SNP1	(L2_CACHE_BASE+0x07)	/* L2 Cache Snoop reg 1 */ +#endif /* CONFIG_440GX */ + +#endif /* _PPC4xx_ISRAM_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-mal.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-mal.h new file mode 100644 index 00000000..ef8b1744 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-mal.h @@ -0,0 +1,149 @@ +/* include/mal.h, openbios_walnut, walnut_bios 8/6/99 08:48:40 */ +/* + * SPDX-License-Identifier:	GPL-2.0	IBM-pibs + */ +/*----------------------------------------------------------------------------+ +| +|  File Name:	mal.h +| +|  Function:	Header file for the MAL (MADMAL) macro on the 405GP. +| +|  Author:	Mark Wisner +| +|  Change Activity- +| +|  Date	       Description of Change					   BY +|  ---------   ---------------------					   --- +|  29-Apr-99   Created							   MKW +| ++----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------+ +|  17-Nov-03  Travis B. Sawyer, Sandburst Corporation, tsawyer@sandburst.com +|	      Added register bit definitions to support multiple channels ++----------------------------------------------------------------------------*/ +#ifndef _mal_h_ +#define _mal_h_ + +#if !defined(MAL_DCR_BASE) +#define MAL_DCR_BASE	0x180 +#endif +#define MAL0_CFG	(MAL_DCR_BASE + 0x00)	/* MAL Config reg	*/ +#define MAL0_ESR	(MAL_DCR_BASE + 0x01)	/* Error Status (Read/Clear) */ +#define MAL0_IER	(MAL_DCR_BASE + 0x02)	/* Interrupt enable */ +#define MAL0_TXCASR	(MAL_DCR_BASE + 0x04)	/* TX Channel active (set) */ +#define MAL0_TXCARR	(MAL_DCR_BASE + 0x05)	/* TX Channel active (reset) */ +#define MAL0_TXEOBISR	(MAL_DCR_BASE + 0x06)	/* TX End of buffer int status*/ +#define MAL0_TXDEIR	(MAL_DCR_BASE + 0x07)	/* TX Descr. Error Int */ +#define MAL0_TXBADDR	(MAL_DCR_BASE + 0x09)	/* TX descriptor base addr*/ +#define MAL0_RXCASR	(MAL_DCR_BASE + 0x10)	/* RX Channel active (set) */ +#define MAL0_RXCARR	(MAL_DCR_BASE + 0x11)	/* RX Channel active (reset) */ +#define MAL0_RXEOBISR	(MAL_DCR_BASE + 0x12)	/* RX End of buffer int status*/ +#define MAL0_RXDEIR	(MAL_DCR_BASE + 0x13)	/* RX Descr. Error Int */ +#define MAL0_RXBADDR	(MAL_DCR_BASE + 0x15)	/* RX descriptor base addr */ +#define MAL0_TXCTP0R	(MAL_DCR_BASE + 0x20)	/* TX 0 Channel table pointer */ +#define MAL0_TXCTP1R	(MAL_DCR_BASE + 0x21)	/* TX 1 Channel table pointer */ +#define MAL0_TXCTP2R	(MAL_DCR_BASE + 0x22)	/* TX 2 Channel table pointer */ +#define MAL0_TXCTP3R	(MAL_DCR_BASE + 0x23)	/* TX 3 Channel table pointer */ +#define MAL0_RXCTP0R	(MAL_DCR_BASE + 0x40)	/* RX 0 Channel table pointer */ +#define MAL0_RXCTP1R	(MAL_DCR_BASE + 0x41)	/* RX 1 Channel table pointer */ +#define MAL0_RCBS0	(MAL_DCR_BASE + 0x60)	/* RX 0 Channel buffer size */ +#define MAL0_RCBS1	(MAL_DCR_BASE + 0x61)	/* RX 1 Channel buffer size */ +#if defined(CONFIG_440GX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +#define MAL0_RXCTP2R	(MAL_DCR_BASE + 0x42)	/* RX 2 Channel table pointer */ +#define MAL0_RXCTP3R	(MAL_DCR_BASE + 0x43)	/* RX 3 Channel table pointer */ +#define MAL0_RXCTP8R	(MAL_DCR_BASE + 0x48)	/* RX 8 Channel table pointer */ +#define MAL0_RXCTP16R	(MAL_DCR_BASE + 0x50)	/* RX 16 Channel table pointer*/ +#define MAL0_RXCTP24R	(MAL_DCR_BASE + 0x58)	/* RX 24 Channel table pointer*/ +#define MAL0_RCBS2	(MAL_DCR_BASE + 0x62)	/* RX 2 Channel buffer size */ +#define MAL0_RCBS3	(MAL_DCR_BASE + 0x63)	/* RX 3 Channel buffer size */ +#define MAL0_RCBS8	(MAL_DCR_BASE + 0x68)	/* RX 8 Channel buffer size */ +#define MAL0_RCBS16	(MAL_DCR_BASE + 0x70)	/* RX 16 Channel buffer size */ +#define MAL0_RCBS24	(MAL_DCR_BASE + 0x78)	/* RX 24 Channel buffer size */ +#endif /* CONFIG_440GX */ + +/* MADMAL transmit and receive status/control bits  */ +/* for COMMAC bits, refer to the COMMAC header file */ + +#define MAL_TX_CTRL_READY 0x8000 +#define MAL_TX_CTRL_WRAP  0x4000 +#define MAL_TX_CTRL_CM	  0x2000 +#define MAL_TX_CTRL_LAST  0x1000 +#define MAL_TX_CTRL_INTR  0x0400 + +#define MAL_RX_CTRL_EMPTY 0x8000 +#define MAL_RX_CTRL_WRAP  0x4000 +#define MAL_RX_CTRL_CM	  0x2000 +#define MAL_RX_CTRL_LAST  0x1000 +#define MAL_RX_CTRL_FIRST 0x0800 +#define MAL_RX_CTRL_INTR  0x0400 + +      /* Configuration Reg  */ +#define MAL_CR_MMSR	  0x80000000 +#define MAL_CR_PLBP_1	  0x00400000   /* lowsest is 00 */ +#define MAL_CR_PLBP_2	  0x00800000 +#define MAL_CR_PLBP_3	  0x00C00000   /* highest	*/ +#define MAL_CR_GA	  0x00200000 +#define MAL_CR_OA	  0x00100000 +#define MAL_CR_PLBLE	  0x00080000 +#define MAL_CR_PLBLT_1	0x00040000 +#define MAL_CR_PLBLT_2	0x00020000 +#define MAL_CR_PLBLT_3	0x00010000 +#define MAL_CR_PLBLT_4	0x00008000 +#define MAL_CR_PLBLT_DEFAULT 0x00078000 /* ????? */ +#define MAL_CR_PLBB	  0x00004000 +#define MAL_CR_OPBBL	  0x00000080 +#define MAL_CR_EOPIE	  0x00000004 +#define MAL_CR_LEA	  0x00000002 +#define MAL_CR_MSD	  0x00000001 + +    /* Error Status Reg	   */ +#define MAL_ESR_EVB	  0x80000000 +#define MAL_ESR_CID	  0x40000000 +#define MAL_ESR_DE	  0x00100000 +#define MAL_ESR_ONE	  0x00080000 +#define MAL_ESR_OTE	  0x00040000 +#define MAL_ESR_OSE	  0x00020000 +#define MAL_ESR_PEIN	  0x00010000 +      /* same bit position as the IER */ +      /* VV			 VV   */ +#define MAL_ESR_DEI	  0x00000010 +#define MAL_ESR_ONEI	  0x00000008 +#define MAL_ESR_OTEI	  0x00000004 +#define MAL_ESR_OSEI	  0x00000002 +#define MAL_ESR_PBEI	  0x00000001 +      /* ^^			 ^^   */ +      /* Mal IER		      */ +#if defined(CONFIG_440SPE) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_405EX) +#define MAL_IER_PT	  0x00000080 +#define MAL_IER_PRE	  0x00000040 +#define MAL_IER_PWE	  0x00000020 +#define MAL_IER_DE	  0x00000010 +#define MAL_IER_OTE	  0x00000004 +#define MAL_IER_OE	  0x00000002 +#define MAL_IER_PE	  0x00000001 +#else +#define MAL_IER_DE	  0x00000010 +#define MAL_IER_NE	  0x00000008 +#define MAL_IER_TE	  0x00000004 +#define MAL_IER_OPBE	  0x00000002 +#define MAL_IER_PLBE	  0x00000001 +#endif + +/* MAL Channel Active Set and Reset Registers */ +#define MAL_TXRX_CASR	(0x80000000) + +#define MAL_TXRX_CASR_V(__x)  (__x)  /* Channel 0 shifts 0, channel 1 shifts 1, etc */ + + +/* MAL Buffer Descriptor structure */ +typedef struct { +  short	 ctrl;		    /* MAL / Commac status control bits */ +  short	 data_len;	    /* Max length is 4K-1 (12 bits)	*/ +  char	*data_ptr;	    /* pointer to actual data buffer	*/ +} mal_desc_t; + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-sdram.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-sdram.h new file mode 100644 index 00000000..12d6d038 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-sdram.h @@ -0,0 +1,1402 @@ +/* + * (C) Copyright 2008 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC4xx_SDRAM_H_ +#define _PPC4xx_SDRAM_H_ + +#if defined(CONFIG_SDRAM_PPC4xx_IBM_SDRAM) + +/* + * SDRAM Controller + */ + +#ifndef CONFIG_405EP +#define SDRAM0_BESR0	0x00	/* bus error syndrome reg a		*/ +#define SDRAM0_BESRS0	0x04	/* bus error syndrome reg set a		*/ +#define SDRAM0_BESR1	0x08	/* bus error syndrome reg b		*/ +#define SDRAM0_BESRS1	0x0c	/* bus error syndrome reg set b		*/ +#define SDRAM0_BEAR	0x10	/* bus error address reg		*/ +#endif +#define SDRAM0_CFG	0x20	/* memory controller options 1		*/ +#define SDRAM0_STATUS	0x24	/* memory status			*/ +#define SDRAM0_RTR	0x30	/* refresh timer reg			*/ +#define SDRAM0_PMIT	0x34	/* power management idle timer		*/ +#define SDRAM0_B0CR	0x40	/* memory bank 0 configuration		*/ +#define SDRAM0_B1CR	0x44	/* memory bank 1 configuration		*/ +#ifndef CONFIG_405EP +#define SDRAM0_B2CR	0x48	/* memory bank 2 configuration		*/ +#define SDRAM0_B3CR	0x4c	/* memory bank 3 configuration		*/ +#endif +#define SDRAM0_TR	0x80	/* timing reg 1				*/ +#ifndef CONFIG_405EP +#define SDRAM0_ECCCFG	0x94	/* ECC configuration			*/ +#define SDRAM0_ECCESR	0x98	/* ECC error status			*/ +#endif + +#endif /* CONFIG_SDRAM_PPC4xx_IBM_SDRAM */ + +#if defined(CONFIG_SDRAM_PPC4xx_IBM_DDR) + +/* + * Memory controller registers + */ +#define SDRAM_CFG0	0x20	/* memory controller options 0		*/ +#define SDRAM_CFG1	0x21	/* memory controller options 1		*/ + +#define SDRAM0_BESR0	0x0000	/* bus error status reg 0		*/ +#define SDRAM0_BESR1	0x0008	/* bus error status reg 1		*/ +#define SDRAM0_BEAR	0x0010	/* bus error address reg		*/ +#define SDRAM0_SLIO	0x0018	/* ddr sdram slave interface options	*/ +#define SDRAM0_CFG0	0x0020	/* ddr sdram options 0			*/ +#define SDRAM0_CFG1	0x0021	/* ddr sdram options 1			*/ +#define SDRAM0_DEVOPT	0x0022	/* ddr sdram device options		*/ +#define SDRAM0_MCSTS	0x0024	/* memory controller status		*/ +#define SDRAM0_RTR	0x0030	/* refresh timer register		*/ +#define SDRAM0_PMIT	0x0034	/* power management idle timer		*/ +#define SDRAM0_UABBA	0x0038	/* plb UABus base address		*/ +#define SDRAM0_B0CR	0x0040	/* ddr sdram bank 0 configuration	*/ +#define SDRAM0_B1CR	0x0044	/* ddr sdram bank 1 configuration	*/ +#define SDRAM0_B2CR	0x0048	/* ddr sdram bank 2 configuration	*/ +#define SDRAM0_B3CR	0x004c	/* ddr sdram bank 3 configuration	*/ +#define SDRAM0_TR0	0x0080	/* sdram timing register 0		*/ +#define SDRAM0_TR1	0x0081	/* sdram timing register 1		*/ +#define SDRAM0_CLKTR	0x0082	/* ddr clock timing register		*/ +#define SDRAM0_WDDCTR	0x0083	/* write data/dm/dqs clock timing reg	*/ +#define SDRAM0_DLYCAL	0x0084	/* delay line calibration register	*/ +#define SDRAM0_ECCESR	0x0098	/* ECC error status			*/ + +/* + * Memory Controller Options 0 + */ +#define SDRAM_CFG0_DCEN		0x80000000	/* SDRAM Controller Enable	*/ +#define SDRAM_CFG0_MCHK_MASK	0x30000000	/* Memory data errchecking mask */ +#define SDRAM_CFG0_MCHK_NON	0x00000000	/* No ECC generation		*/ +#define SDRAM_CFG0_MCHK_GEN	0x20000000	/* ECC generation		*/ +#define SDRAM_CFG0_MCHK_CHK	0x30000000	/* ECC generation and checking	*/ +#define SDRAM_CFG0_RDEN		0x08000000	/* Registered DIMM enable	*/ +#define SDRAM_CFG0_PMUD		0x04000000	/* Page management unit		*/ +#define SDRAM_CFG0_DMWD_MASK	0x02000000	/* DRAM width mask		*/ +#define SDRAM_CFG0_DMWD_32	0x00000000	/* 32 bits			*/ +#define SDRAM_CFG0_DMWD_64	0x02000000	/* 64 bits			*/ +#define SDRAM_CFG0_UIOS_MASK	0x00C00000	/* Unused IO State		*/ +#define SDRAM_CFG0_PDP		0x00200000	/* Page deallocation policy	*/ + +/* + * Memory Controller Options 1 + */ +#define SDRAM_CFG1_SRE		0x80000000	/* Self-Refresh Entry		*/ +#define SDRAM_CFG1_PMEN		0x40000000	/* Power Management Enable	*/ + +/* + * SDRAM DEVPOT Options + */ +#define SDRAM_DEVOPT_DLL	0x80000000 +#define SDRAM_DEVOPT_DS		0x40000000 + +/* + * SDRAM MCSTS Options + */ +#define SDRAM_MCSTS_MRSC	0x80000000 +#define SDRAM_MCSTS_SRMS	0x40000000 +#define SDRAM_MCSTS_CIS		0x20000000 +#define SDRAM_MCSTS_IDLE_NOT	0x00000000	/* Mem contr not idle		*/ + +/* + * SDRAM Refresh Timer Register + */ +#define SDRAM_RTR_RINT_MASK	  0xFFFF0000 +#define SDRAM_RTR_RINT_ENCODE(n)  (((n) << 16) & SDRAM_RTR_RINT_MASK) + +/* + * SDRAM UABus Base Address Reg + */ +#define SDRAM_UABBA_UBBA_MASK	0x0000000F + +/* + * Memory Bank 0-7 configuration + */ +#define SDRAM_BXCR_SDBA_MASK	0xff800000	  /* Base address	      */ +#define SDRAM_BXCR_SDSZ_MASK	0x000e0000	  /* Size		      */ +#define SDRAM_BXCR_SDSZ_8	0x00020000	  /*   8M		      */ +#define SDRAM_BXCR_SDSZ_16	0x00040000	  /*  16M		      */ +#define SDRAM_BXCR_SDSZ_32	0x00060000	  /*  32M		      */ +#define SDRAM_BXCR_SDSZ_64	0x00080000	  /*  64M		      */ +#define SDRAM_BXCR_SDSZ_128	0x000a0000	  /* 128M		      */ +#define SDRAM_BXCR_SDSZ_256	0x000c0000	  /* 256M		      */ +#define SDRAM_BXCR_SDSZ_512	0x000e0000	  /* 512M		      */ +#define SDRAM_BXCR_SDAM_MASK	0x0000e000	  /* Addressing mode	      */ +#define SDRAM_BXCR_SDAM_1	0x00000000	  /*   Mode 1		      */ +#define SDRAM_BXCR_SDAM_2	0x00002000	  /*   Mode 2		      */ +#define SDRAM_BXCR_SDAM_3	0x00004000	  /*   Mode 3		      */ +#define SDRAM_BXCR_SDAM_4	0x00006000	  /*   Mode 4		      */ +#define SDRAM_BXCR_SDBE		0x00000001	  /* Memory Bank Enable	      */ + +/* + * SDRAM TR0 Options + */ +#define SDRAM_TR0_SDWR_MASK	0x80000000 +#define	 SDRAM_TR0_SDWR_2_CLK	0x00000000 +#define	 SDRAM_TR0_SDWR_3_CLK	0x80000000 +#define SDRAM_TR0_SDWD_MASK	0x40000000 +#define	 SDRAM_TR0_SDWD_0_CLK	0x00000000 +#define	 SDRAM_TR0_SDWD_1_CLK	0x40000000 +#define SDRAM_TR0_SDCL_MASK	0x01800000 +#define	 SDRAM_TR0_SDCL_2_0_CLK 0x00800000 +#define	 SDRAM_TR0_SDCL_2_5_CLK 0x01000000 +#define	 SDRAM_TR0_SDCL_3_0_CLK 0x01800000 +#define SDRAM_TR0_SDPA_MASK	0x000C0000 +#define	 SDRAM_TR0_SDPA_2_CLK	0x00040000 +#define	 SDRAM_TR0_SDPA_3_CLK	0x00080000 +#define	 SDRAM_TR0_SDPA_4_CLK	0x000C0000 +#define SDRAM_TR0_SDCP_MASK	0x00030000 +#define	 SDRAM_TR0_SDCP_2_CLK	0x00000000 +#define	 SDRAM_TR0_SDCP_3_CLK	0x00010000 +#define	 SDRAM_TR0_SDCP_4_CLK	0x00020000 +#define	 SDRAM_TR0_SDCP_5_CLK	0x00030000 +#define SDRAM_TR0_SDLD_MASK	0x0000C000 +#define	 SDRAM_TR0_SDLD_1_CLK	0x00000000 +#define	 SDRAM_TR0_SDLD_2_CLK	0x00004000 +#define SDRAM_TR0_SDRA_MASK	0x0000001C +#define	 SDRAM_TR0_SDRA_6_CLK	0x00000000 +#define	 SDRAM_TR0_SDRA_7_CLK	0x00000004 +#define	 SDRAM_TR0_SDRA_8_CLK	0x00000008 +#define	 SDRAM_TR0_SDRA_9_CLK	0x0000000C +#define	 SDRAM_TR0_SDRA_10_CLK	0x00000010 +#define	 SDRAM_TR0_SDRA_11_CLK	0x00000014 +#define	 SDRAM_TR0_SDRA_12_CLK	0x00000018 +#define	 SDRAM_TR0_SDRA_13_CLK	0x0000001C +#define SDRAM_TR0_SDRD_MASK	0x00000003 +#define	 SDRAM_TR0_SDRD_2_CLK	0x00000001 +#define	 SDRAM_TR0_SDRD_3_CLK	0x00000002 +#define	 SDRAM_TR0_SDRD_4_CLK	0x00000003 + +/* + * SDRAM TR1 Options + */ +#define SDRAM_TR1_RDSS_MASK	0xC0000000 +#define	 SDRAM_TR1_RDSS_TR0	0x00000000 +#define	 SDRAM_TR1_RDSS_TR1	0x40000000 +#define	 SDRAM_TR1_RDSS_TR2	0x80000000 +#define	 SDRAM_TR1_RDSS_TR3	0xC0000000 +#define SDRAM_TR1_RDSL_MASK	0x00C00000 +#define	 SDRAM_TR1_RDSL_STAGE1	0x00000000 +#define	 SDRAM_TR1_RDSL_STAGE2	0x00400000 +#define	 SDRAM_TR1_RDSL_STAGE3	0x00800000 +#define SDRAM_TR1_RDCD_MASK	0x00000800 +#define	 SDRAM_TR1_RDCD_RCD_0_0 0x00000000 +#define	 SDRAM_TR1_RDCD_RCD_1_2 0x00000800 +#define SDRAM_TR1_RDCT_MASK	0x000001FF +#define	 SDRAM_TR1_RDCT_ENCODE(x)  (((x) << 0) & SDRAM_TR1_RDCT_MASK) +#define	 SDRAM_TR1_RDCT_DECODE(x)  (((x) & SDRAM_TR1_RDCT_MASK) >> 0) +#define	 SDRAM_TR1_RDCT_MIN	0x00000000 +#define	 SDRAM_TR1_RDCT_MAX	0x000001FF + +/* + * SDRAM WDDCTR Options + */ +#define SDRAM_WDDCTR_WRCP_MASK	0xC0000000 +#define	 SDRAM_WDDCTR_WRCP_0DEG	  0x00000000 +#define	 SDRAM_WDDCTR_WRCP_90DEG  0x40000000 +#define	 SDRAM_WDDCTR_WRCP_180DEG 0x80000000 +#define SDRAM_WDDCTR_DCD_MASK	0x000001FF + +/* + * SDRAM CLKTR Options + */ +#define SDRAM_CLKTR_CLKP_MASK	0xC0000000 +#define	 SDRAM_CLKTR_CLKP_0DEG	  0x00000000 +#define	 SDRAM_CLKTR_CLKP_90DEG	  0x40000000 +#define	 SDRAM_CLKTR_CLKP_180DEG  0x80000000 +#define SDRAM_CLKTR_DCDT_MASK	0x000001FF + +/* + * SDRAM DLYCAL Options + */ +#define SDRAM_DLYCAL_DLCV_MASK	0x000003FC +#define	 SDRAM_DLYCAL_DLCV_ENCODE(x) (((x)<<2) & SDRAM_DLYCAL_DLCV_MASK) +#define	 SDRAM_DLYCAL_DLCV_DECODE(x) (((x) & SDRAM_DLYCAL_DLCV_MASK)>>2) + +#endif /* CONFIG_SDRAM_PPC4xx_IBM_DDR */ + +#if defined(CONFIG_SDRAM_PPC4xx_IBM_DDR2) + +#define SDRAM_DLYCAL_DLCV_MASK		0x000003FC +#define SDRAM_DLYCAL_DLCV_ENCODE(x)	(((x)<<2) & SDRAM_DLYCAL_DLCV_MASK) +#define SDRAM_DLYCAL_DLCV_DECODE(x)	(((x) & SDRAM_DLYCAL_DLCV_MASK)>>2) + +#if !defined(CONFIG_405EX) +/* + * Memory queue defines + */ +#define SDRAMQ_DCR_BASE 0x040 + +#define SDRAM_R0BAS		(SDRAMQ_DCR_BASE+0x0)	/* rank 0 base address & size  */ +#define SDRAM_R1BAS		(SDRAMQ_DCR_BASE+0x1)	/* rank 1 base address & size  */ +#define SDRAM_R2BAS		(SDRAMQ_DCR_BASE+0x2)	/* rank 2 base address & size  */ +#define SDRAM_R3BAS		(SDRAMQ_DCR_BASE+0x3)	/* rank 3 base address & size  */ +#define SDRAM_CONF1HB		(SDRAMQ_DCR_BASE+0x5)	/* configuration 1 HB          */ +#define SDRAM_CONF1HB_AAFR	0x80000000	/* Address Ack on First Request - Bit 0 */ +#define SDRAM_CONF1HB_PRPD	0x00080000	/* PLB Read pipeline Disable - Bit 12 */ +#define SDRAM_CONF1HB_PWPD	0x00040000	/* PLB Write pipeline Disable - Bit 13 */ +#define SDRAM_CONF1HB_PRW	0x00020000	/* PLB Read Wait - Bit 14 */ +#define SDRAM_CONF1HB_RPLM	0x00001000	/* Read Passing Limit 1 - Bits 16..19 */ +#define SDRAM_CONF1HB_RPEN	0x00000800	/* Read Passing Enable - Bit 20 */ +#define SDRAM_CONF1HB_RFTE	0x00000400	/* Read Flow Through Enable - Bit 21 */ +#define SDRAM_CONF1HB_WRCL	0x00000080	/* MCIF Cycle Limit 1 - Bits 22..24 */ +#define SDRAM_CONF1HB_MASK	0x0000F380	/* RPLM & WRCL mask */ + +#define SDRAM_ERRSTATHB		(SDRAMQ_DCR_BASE+0x7)	/* error status HB             */ +#define SDRAM_ERRADDUHB		(SDRAMQ_DCR_BASE+0x8)	/* error address upper 32 HB   */ +#define SDRAM_ERRADDLHB		(SDRAMQ_DCR_BASE+0x9)	/* error address lower 32 HB   */ +#define SDRAM_PLBADDULL		(SDRAMQ_DCR_BASE+0xA)	/* PLB base address upper 32 LL */ +#define SDRAM_CONF1LL		(SDRAMQ_DCR_BASE+0xB)	/* configuration 1 LL          */ +#define SDRAM_CONF1LL_AAFR	0x80000000		/* Address Ack on First Request - Bit 0 */ +#define SDRAM_CONF1LL_PRPD	0x00080000		/* PLB Read pipeline Disable - Bit 12 */ +#define SDRAM_CONF1LL_PWPD	0x00040000		/* PLB Write pipeline Disable - Bit 13 */ +#define SDRAM_CONF1LL_PRW	0x00020000		/* PLB Read Wait - Bit 14 */ +#define SDRAM_CONF1LL_RPLM	0x00001000		/* Read Passing Limit 1 - Bits 16..19 */ +#define SDRAM_CONF1LL_RPEN	0x00000800		/* Read Passing Enable - Bit 20 */ +#define SDRAM_CONF1LL_RFTE	0x00000400		/* Read Flow Through Enable - Bit 21 */ +#define SDRAM_CONF1LL_MASK	0x0000F000		/* RPLM mask */ + +#define SDRAM_ERRSTATLL		(SDRAMQ_DCR_BASE+0xC)	/* error status LL             */ +#define SDRAM_ERRADDULL		(SDRAMQ_DCR_BASE+0xD)	/* error address upper 32 LL   */ +#define SDRAM_ERRADDLLL		(SDRAMQ_DCR_BASE+0xE)	/* error address lower 32 LL   */ +#define SDRAM_CONFPATHB		(SDRAMQ_DCR_BASE+0xF)	/* configuration between paths */ +#define SDRAM_CONFPATHB_TPEN	0x08000000		/* Transaction Passing Enable - Bit 4 */ + +#define SDRAM_PLBADDUHB		(SDRAMQ_DCR_BASE+0x10)  /* PLB base address upper 32 LL */ + +/* + * Memory Bank 0-7 configuration + */ +#if defined(CONFIG_440SPE) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX) || defined(CONFIG_APM821XX) +#define SDRAM_RXBAS_SDBA_MASK		0xFFE00000	/* Base address	*/ +#define SDRAM_RXBAS_SDBA_ENCODE(n)	((u32)(((phys_size_t)(n) >> 2) & 0xFFE00000)) +#define SDRAM_RXBAS_SDBA_DECODE(n)	((((phys_size_t)(n)) & 0xFFE00000) << 2) +#endif /* CONFIG_440SPE */ +#if defined(CONFIG_440SP) +#define SDRAM_RXBAS_SDBA_MASK		0xFF800000	/* Base address	*/ +#define SDRAM_RXBAS_SDBA_ENCODE(n)	((((u32)(n))&0xFF800000)) +#define SDRAM_RXBAS_SDBA_DECODE(n)	((((u32)(n))&0xFF800000)) +#endif /* CONFIG_440SP */ +#define SDRAM_RXBAS_SDSZ_MASK		0x0000FFC0	/* Size		*/ +#define SDRAM_RXBAS_SDSZ_ENCODE(n)	((((u32)(n))&0x3FF)<<6) +#define SDRAM_RXBAS_SDSZ_DECODE(n)	((((u32)(n))>>6)&0x3FF) +#define SDRAM_RXBAS_SDSZ_0		0x00000000	/*   0M		*/ +#define SDRAM_RXBAS_SDSZ_8		0x0000FFC0	/*   8M		*/ +#define SDRAM_RXBAS_SDSZ_16		0x0000FF80	/*  16M		*/ +#define SDRAM_RXBAS_SDSZ_32		0x0000FF00	/*  32M		*/ +#define SDRAM_RXBAS_SDSZ_64		0x0000FE00	/*  64M		*/ +#define SDRAM_RXBAS_SDSZ_128		0x0000FC00	/* 128M		*/ +#define SDRAM_RXBAS_SDSZ_256		0x0000F800	/* 256M		*/ +#define SDRAM_RXBAS_SDSZ_512		0x0000F000	/* 512M		*/ +#define SDRAM_RXBAS_SDSZ_1024		0x0000E000	/* 1024M	*/ +#define SDRAM_RXBAS_SDSZ_2048		0x0000C000	/* 2048M	*/ +#define SDRAM_RXBAS_SDSZ_4096		0x00008000	/* 4096M	*/ +#else /* CONFIG_405EX */ +/* + * XXX - ToDo: + * Revisit this file to check if all these 405EX defines are correct and + * can be used in the common 44x_spd_ddr2 code as well. sr, 2008-06-02 + */ +#define SDRAM_RXBAS_SDSZ_MASK		PPC_REG_VAL(19, 0xF) +#define SDRAM_RXBAS_SDSZ_4MB	   	PPC_REG_VAL(19, 0x0) +#define SDRAM_RXBAS_SDSZ_8MB	   	PPC_REG_VAL(19, 0x1) +#define SDRAM_RXBAS_SDSZ_16MB	   	PPC_REG_VAL(19, 0x2) +#define SDRAM_RXBAS_SDSZ_32MB	   	PPC_REG_VAL(19, 0x3) +#define SDRAM_RXBAS_SDSZ_64MB	   	PPC_REG_VAL(19, 0x4) +#define SDRAM_RXBAS_SDSZ_128MB	   	PPC_REG_VAL(19, 0x5) +#define SDRAM_RXBAS_SDSZ_256MB	   	PPC_REG_VAL(19, 0x6) +#define SDRAM_RXBAS_SDSZ_512MB	   	PPC_REG_VAL(19, 0x7) +#define SDRAM_RXBAS_SDSZ_1024MB	   	PPC_REG_VAL(19, 0x8) +#define SDRAM_RXBAS_SDSZ_2048MB	   	PPC_REG_VAL(19, 0x9) +#define SDRAM_RXBAS_SDSZ_4096MB		PPC_REG_VAL(19, 0xA) +#define SDRAM_RXBAS_SDSZ_8192MB		PPC_REG_VAL(19, 0xB) +#define SDRAM_RXBAS_SDSZ_8      	SDRAM_RXBAS_SDSZ_8MB +#define SDRAM_RXBAS_SDSZ_16     	SDRAM_RXBAS_SDSZ_16MB +#define SDRAM_RXBAS_SDSZ_32     	SDRAM_RXBAS_SDSZ_32MB +#define SDRAM_RXBAS_SDSZ_64     	SDRAM_RXBAS_SDSZ_64MB +#define SDRAM_RXBAS_SDSZ_128    	SDRAM_RXBAS_SDSZ_128MB +#define SDRAM_RXBAS_SDSZ_256    	SDRAM_RXBAS_SDSZ_256MB +#define SDRAM_RXBAS_SDSZ_512    	SDRAM_RXBAS_SDSZ_512MB +#define SDRAM_RXBAS_SDSZ_1024		SDRAM_RXBAS_SDSZ_1024MB +#define SDRAM_RXBAS_SDSZ_2048		SDRAM_RXBAS_SDSZ_2048MB +#define SDRAM_RXBAS_SDSZ_4096		SDRAM_RXBAS_SDSZ_4096MB +#define SDRAM_RXBAS_SDSZ_8192		SDRAM_RXBAS_SDSZ_8192MB +#endif /* CONFIG_405EX */ + +/* The mode definitions are the same for all PPC4xx variants */ +#define SDRAM_RXBAS_SDAM_MODE0		PPC_REG_VAL(23, 0x0) +#define SDRAM_RXBAS_SDAM_MODE1		PPC_REG_VAL(23, 0x1) +#define SDRAM_RXBAS_SDAM_MODE2		PPC_REG_VAL(23, 0x2) +#define SDRAM_RXBAS_SDAM_MODE3		PPC_REG_VAL(23, 0x3) +#define SDRAM_RXBAS_SDAM_MODE4		PPC_REG_VAL(23, 0x4) +#define SDRAM_RXBAS_SDAM_MODE5		PPC_REG_VAL(23, 0x5) +#define SDRAM_RXBAS_SDAM_MODE6		PPC_REG_VAL(23, 0x6) +#define SDRAM_RXBAS_SDAM_MODE7		PPC_REG_VAL(23, 0x7) +#define SDRAM_RXBAS_SDAM_MODE8		PPC_REG_VAL(23, 0x8) +#define SDRAM_RXBAS_SDAM_MODE9		PPC_REG_VAL(23, 0x9) +#define SDRAM_RXBAS_SDBE_DISABLE	PPC_REG_VAL(31, 0x0) +#define SDRAM_RXBAS_SDBE_ENABLE		PPC_REG_VAL(31, 0x1) + +/* + * Memory controller registers + */ +#if defined(CONFIG_405EX) || defined(CONFIG_APM821XX) +#define SDRAM_BESR	0x00	/* PLB bus error status (read/clear)         */ +#define SDRAM_BESRT	0x01	/* PLB bus error status (test/set)           */ +#define SDRAM_BEARL	0x02	/* PLB bus error address low                 */ +#define SDRAM_BEARH	0x03	/* PLB bus error address high                */ +#define SDRAM_WMIRQ	0x06	/* PLB write master interrupt (read/clear)   */ +#define SDRAM_WMIRQT	0x07	/* PLB write master interrupt (test/set)     */ +#define SDRAM_PLBOPT	0x08	/* PLB slave options                         */ +#define SDRAM_PUABA	0x09	/* PLB upper address base                    */ +#define SDRAM_MCSTAT	0x1F	/* memory controller status                  */ +#else /* CONFIG_405EX || CONFIG_APM821XX */ +#define SDRAM_MCSTAT	0x14	/* memory controller status                  */ +#endif /* CONFIG_405EX || CONFIG_APM821XX */ +#define SDRAM_MCOPT1	0x20	/* memory controller options 1               */ +#define SDRAM_MCOPT2	0x21	/* memory controller options 2               */ +#define SDRAM_MODT0	0x22	/* on die termination for bank 0             */ +#define SDRAM_MODT1	0x23	/* on die termination for bank 1             */ +#define SDRAM_MODT2	0x24	/* on die termination for bank 2             */ +#define SDRAM_MODT3	0x25	/* on die termination for bank 3             */ +#define SDRAM_CODT	0x26	/* on die termination for controller         */ +#define SDRAM_VVPR	0x27	/* variable VRef programmming                */ +#define SDRAM_OPARS	0x28	/* on chip driver control setup              */ +#define SDRAM_OPART	0x29	/* on chip driver control trigger            */ +#define SDRAM_RTR	0x30	/* refresh timer                             */ +#define SDRAM_PMIT	0x34	/* power management idle timer               */ +#define SDRAM_MB0CF	0x40	/* memory bank 0 configuration               */ +#define SDRAM_MB1CF	0x44	/* memory bank 1 configuration               */ +#define SDRAM_MB2CF	0x48 +#define SDRAM_MB3CF	0x4C +#define SDRAM_INITPLR0	0x50	/* manual initialization control             */ +#define SDRAM_INITPLR1	0x51	/* manual initialization control             */ +#define SDRAM_INITPLR2	0x52	/* manual initialization control             */ +#define SDRAM_INITPLR3	0x53	/* manual initialization control             */ +#define SDRAM_INITPLR4	0x54	/* manual initialization control             */ +#define SDRAM_INITPLR5	0x55	/* manual initialization control             */ +#define SDRAM_INITPLR6	0x56	/* manual initialization control             */ +#define SDRAM_INITPLR7	0x57	/* manual initialization control             */ +#define SDRAM_INITPLR8	0x58	/* manual initialization control             */ +#define SDRAM_INITPLR9	0x59	/* manual initialization control             */ +#define SDRAM_INITPLR10	0x5a	/* manual initialization control             */ +#define SDRAM_INITPLR11	0x5b	/* manual initialization control             */ +#define SDRAM_INITPLR12	0x5c	/* manual initialization control             */ +#define SDRAM_INITPLR13	0x5d	/* manual initialization control             */ +#define SDRAM_INITPLR14	0x5e	/* manual initialization control             */ +#define SDRAM_INITPLR15	0x5f	/* manual initialization control             */ +#define SDRAM_RQDC	0x70	/* read DQS delay control                    */ +#define SDRAM_RFDC	0x74	/* read feedback delay control               */ +#define SDRAM_RDCC	0x78	/* read data capture control                 */ +#define SDRAM_DLCR	0x7A	/* delay line calibration                    */ +#define SDRAM_CLKTR	0x80	/* DDR clock timing                          */ +#define SDRAM_WRDTR	0x81	/* write data, DQS, DM clock, timing         */ +#define SDRAM_SDTR1	0x85	/* DDR SDRAM timing 1                        */ +#define SDRAM_SDTR2	0x86	/* DDR SDRAM timing 2                        */ +#define SDRAM_SDTR3	0x87	/* DDR SDRAM timing 3                        */ +#define SDRAM_MMODE	0x88	/* memory mode                               */ +#define SDRAM_MEMODE	0x89	/* memory extended mode                      */ +#define SDRAM_ECCES	0x98	/* ECC error status                          */ +#define SDRAM_CID	0xA4	/* core ID                                   */ +#if !defined(CONFIG_405EX) && !defined(CONFIG_APM821XX) +#define SDRAM_RID	0xA8	/* revision ID                               */ +#endif +#define SDRAM_FCSR	0xB0	/* feedback calibration status               */ +#define SDRAM_RTSR	0xB1	/* run time status tracking                  */ +#if  defined(CONFIG_405EX) || defined(CONFIG_APM821XX) +#define SDRAM_RID	0xF8	/* revision ID                               */ +#endif + +/* + * Memory Controller Bus Error Status + */ +#define SDRAM_BESR_MASK			PPC_REG_VAL(7, 0xFF) +#define SDRAM_BESR_M0ID_MASK		PPC_REG_VAL(3, 0xF) +#define SDRAM_BESR_M0ID_ICU		PPC_REG_VAL(3, 0x0) +#define SDRAM_BESR_M0ID_PCIE0		PPC_REG_VAL(3, 0x1) +#define SDRAM_BESR_M0ID_PCIE1		PPC_REG_VAL(3, 0x2) +#define SDRAM_BESR_M0ID_DMA		PPC_REG_VAL(3, 0x3) +#define SDRAM_BESR_M0ID_DCU		PPC_REG_VAL(3, 0x4) +#define SDRAM_BESR_M0ID_OPB		PPC_REG_VAL(3, 0x5) +#define SDRAM_BESR_M0ID_MAL		PPC_REG_VAL(3, 0x6) +#define SDRAM_BESR_M0ID_SEC		PPC_REG_VAL(3, 0x7) +#define SDRAM_BESR_M0ET_MASK		PPC_REG_VAL(6, 0x7) +#define SDRAM_BESR_M0ET_NONE		PPC_REG_VAL(6, 0x0) +#define SDRAM_BESR_M0ET_ECC		PPC_REG_VAL(6, 0x1) +#define SDRAM_BESR_M0RW_WRITE		PPC_REG_VAL(7, 0) +#define SDRAM_BESR_M0RW_READ		PPC_REG_VAL(8, 1) + +/* + * Memory Controller Status + */ +#define SDRAM_MCSTAT_MIC_MASK		0x80000000	/* Memory init status mask	*/ +#define SDRAM_MCSTAT_MIC_NOTCOMP	0x00000000	/* Mem init not complete	*/ +#define SDRAM_MCSTAT_MIC_COMP		0x80000000	/* Mem init complete		*/ +#define SDRAM_MCSTAT_SRMS_MASK		0x40000000	/* Mem self refresh stat mask	*/ +#define SDRAM_MCSTAT_SRMS_NOT_SF	0x00000000	/* Mem not in self refresh	*/ +#define SDRAM_MCSTAT_SRMS_SF		0x40000000	/* Mem in self refresh		*/ +#define SDRAM_MCSTAT_IDLE_MASK		0x20000000	/* Mem self refresh stat mask	*/ +#define SDRAM_MCSTAT_IDLE_NOT		0x00000000	/* Mem contr not idle		*/ +#define SDRAM_MCSTAT_IDLE		0x20000000	/* Mem contr idle		*/ + +/* + * Memory Controller Options 1 + */ +#define SDRAM_MCOPT1_MCHK_MASK		0x30000000 /* Memory data err check mask*/ +#define SDRAM_MCOPT1_MCHK_NON		0x00000000 /* No ECC generation		*/ +#define SDRAM_MCOPT1_MCHK_GEN		0x20000000 /* ECC generation		*/ +#define SDRAM_MCOPT1_MCHK_CHK		0x10000000 /* ECC generation and check	*/ +#define SDRAM_MCOPT1_MCHK_CHK_REP	0x30000000 /* ECC generation, chk, report*/ +#define SDRAM_MCOPT1_MCHK_CHK_DECODE(n)	((((u32)(n))>>28)&0x3) +#define SDRAM_MCOPT1_RDEN_MASK		0x08000000 /* Registered DIMM mask	*/ +#define SDRAM_MCOPT1_RDEN		0x08000000 /* Registered DIMM enable	*/ +#define SDRAM_MCOPT1_PMU_MASK		0x06000000 /* Page management unit mask	*/ +#define SDRAM_MCOPT1_PMU_CLOSE		0x00000000 /* PMU Close			*/ +#define SDRAM_MCOPT1_PMU_OPEN		0x04000000 /* PMU Open			*/ +#define SDRAM_MCOPT1_PMU_AUTOCLOSE	0x02000000 /* PMU AutoClose		*/ +#define SDRAM_MCOPT1_DMWD_MASK		0x01000000 /* DRAM width mask		*/ +#define SDRAM_MCOPT1_DMWD_32		0x00000000 /* 32 bits			*/ +#define SDRAM_MCOPT1_DMWD_64		0x01000000 /* 64 bits			*/ +#define SDRAM_MCOPT1_UIOS_MASK		0x00C00000 /* Unused IO State		*/ +#define SDRAM_MCOPT1_BCNT_MASK		0x00200000 /* Bank count		*/ +#define SDRAM_MCOPT1_4_BANKS		0x00000000 /* 4 Banks			*/ +#define SDRAM_MCOPT1_8_BANKS		0x00200000 /* 8 Banks			*/ +#define SDRAM_MCOPT1_DDR_TYPE_MASK	0x00100000 /* DDR Memory Type mask	*/ +#define SDRAM_MCOPT1_DDR1_TYPE		0x00000000 /* DDR1 Memory Type		*/ +#define SDRAM_MCOPT1_DDR2_TYPE		0x00100000 /* DDR2 Memory Type		*/ +#define SDRAM_MCOPT1_QDEP		0x00020000 /* 4 commands deep		*/ +#define SDRAM_MCOPT1_RWOO_MASK		0x00008000 /* Out of Order Read mask	*/ +#define SDRAM_MCOPT1_RWOO_DISABLED	0x00000000 /* disabled			*/ +#define SDRAM_MCOPT1_RWOO_ENABLED	0x00008000 /* enabled			*/ +#define SDRAM_MCOPT1_WOOO_MASK		0x00004000 /* Out of Order Write mask	*/ +#define SDRAM_MCOPT1_WOOO_DISABLED	0x00000000 /* disabled			*/ +#define SDRAM_MCOPT1_WOOO_ENABLED	0x00004000 /* enabled			*/ +#define SDRAM_MCOPT1_DCOO_MASK		0x00002000 /* All Out of Order mask	*/ +#define SDRAM_MCOPT1_DCOO_DISABLED	0x00002000 /* disabled			*/ +#define SDRAM_MCOPT1_DCOO_ENABLED	0x00000000 /* enabled			*/ +#define SDRAM_MCOPT1_DREF_MASK		0x00001000 /* Deferred refresh mask	*/ +#define SDRAM_MCOPT1_DREF_NORMAL	0x00000000 /* normal refresh		*/ +#define SDRAM_MCOPT1_DREF_DEFER_4	0x00001000 /* defer up to 4 refresh cmd	*/ + +/* + * Memory Controller Options 2 + */ +#define SDRAM_MCOPT2_SREN_MASK		0x80000000 /* Self Test mask		*/ +#define SDRAM_MCOPT2_SREN_EXIT		0x00000000 /* Self Test exit		*/ +#define SDRAM_MCOPT2_SREN_ENTER		0x80000000 /* Self Test enter		*/ +#define SDRAM_MCOPT2_PMEN_MASK		0x40000000 /* Power Management mask	*/ +#define SDRAM_MCOPT2_PMEN_DISABLE	0x00000000 /* disable			*/ +#define SDRAM_MCOPT2_PMEN_ENABLE	0x40000000 /* enable			*/ +#define SDRAM_MCOPT2_IPTR_MASK		0x20000000 /* Init Trigger Reg mask	*/ +#define SDRAM_MCOPT2_IPTR_IDLE		0x00000000 /* idle			*/ +#define SDRAM_MCOPT2_IPTR_EXECUTE	0x20000000 /* execute preloaded init	*/ +#define SDRAM_MCOPT2_XSRP_MASK		0x10000000 /* Exit Self Refresh Prevent	*/ +#define SDRAM_MCOPT2_XSRP_ALLOW		0x00000000 /* allow self refresh exit	*/ +#define SDRAM_MCOPT2_XSRP_PREVENT	0x10000000 /* prevent self refresh exit	*/ +#define SDRAM_MCOPT2_DCEN_MASK		0x08000000 /* SDRAM Controller Enable	*/ +#define SDRAM_MCOPT2_DCEN_DISABLE	0x00000000 /* SDRAM Controller Enable	*/ +#define SDRAM_MCOPT2_DCEN_ENABLE	0x08000000 /* SDRAM Controller Enable	*/ +#define SDRAM_MCOPT2_ISIE_MASK		0x04000000 /* Init Seq Interruptable mas*/ +#define SDRAM_MCOPT2_ISIE_DISABLE	0x00000000 /* disable			*/ +#define SDRAM_MCOPT2_ISIE_ENABLE	0x04000000 /* enable			*/ + +/* + * SDRAM Refresh Timer Register + */ +#define SDRAM_RTR_RINT_MASK		0xFFF80000 +#define SDRAM_RTR_RINT_ENCODE(n)	((((u32)(n))&0xFFF8)<<16) +#define SDRAM_RTR_RINT_DECODE(n)	((((u32)(n))>>16)&0xFFF8) + +/* + * SDRAM Read DQS Delay Control Register + */ +#define SDRAM_RQDC_RQDE_MASK		0x80000000 +#define SDRAM_RQDC_RQDE_DISABLE		0x00000000 +#define SDRAM_RQDC_RQDE_ENABLE		0x80000000 +#define SDRAM_RQDC_RQFD_MASK		0x000001FF +#define SDRAM_RQDC_RQFD_ENCODE(n)	((((u32)(n))&0x1FF)<<0) + +#define SDRAM_RQDC_RQFD_MAX		0x1FF + +/* + * SDRAM Read Data Capture Control Register + */ +#define SDRAM_RDCC_RDSS_MASK		0xC0000000 +#define SDRAM_RDCC_RDSS_T1		0x00000000 +#define SDRAM_RDCC_RDSS_T2		0x40000000 +#define SDRAM_RDCC_RDSS_T3		0x80000000 +#define SDRAM_RDCC_RDSS_T4		0xC0000000 +#define SDRAM_RDCC_RSAE_MASK		0x00000001 +#define SDRAM_RDCC_RSAE_DISABLE		0x00000001 +#define SDRAM_RDCC_RSAE_ENABLE		0x00000000 +#define SDRAM_RDCC_RDSS_ENCODE(n)	((((u32)(n))&0x03)<<30) +#define SDRAM_RDCC_RDSS_DECODE(n)	((((u32)(n))>>30)&0x03) + +/* + * SDRAM Read Feedback Delay Control Register + */ +#define SDRAM_RFDC_ARSE_MASK		0x80000000 +#define SDRAM_RFDC_ARSE_DISABLE		0x80000000 +#define SDRAM_RFDC_ARSE_ENABLE		0x00000000 +#define SDRAM_RFDC_RFOS_MASK		0x007F0000 +#define SDRAM_RFDC_RFOS_ENCODE(n)	((((u32)(n))&0x7F)<<16) +#define SDRAM_RFDC_RFFD_MASK		0x000007FF +#define SDRAM_RFDC_RFFD_ENCODE(n)	((((u32)(n))&0x7FF)<<0) + +#define SDRAM_RFDC_RFFD_MAX		0x7FF + +/* + * SDRAM Delay Line Calibration Register + */ +#define SDRAM_DLCR_DCLM_MASK		0x80000000 +#define SDRAM_DLCR_DCLM_MANUAL		0x80000000 +#define SDRAM_DLCR_DCLM_AUTO		0x00000000 +#define SDRAM_DLCR_DLCR_MASK		0x08000000 +#define SDRAM_DLCR_DLCR_CALIBRATE	0x08000000 +#define SDRAM_DLCR_DLCR_IDLE		0x00000000 +#define SDRAM_DLCR_DLCS_MASK		0x07000000 +#define SDRAM_DLCR_DLCS_NOT_RUN		0x00000000 +#define SDRAM_DLCR_DLCS_IN_PROGRESS	0x01000000 +#define SDRAM_DLCR_DLCS_COMPLETE	0x02000000 +#define SDRAM_DLCR_DLCS_CONT_DONE	0x03000000 +#define SDRAM_DLCR_DLCS_ERROR		0x04000000 +#define SDRAM_DLCR_DLCV_MASK		0x000001FF +#define SDRAM_DLCR_DLCV_ENCODE(n)	((((u32)(n))&0x1FF)<<0) +#define SDRAM_DLCR_DLCV_DECODE(n)	((((u32)(n))>>0)&0x1FF) + +/* + * SDRAM Memory On Die Terimination Control Register + */ +#define SDRAM_MODT_ODTON_DISABLE		PPC_REG_VAL(0, 0) +#define SDRAM_MODT_ODTON_ENABLE			PPC_REG_VAL(0, 1) +#define SDRAM_MODT_EB1W_DISABLE			PPC_REG_VAL(1, 0) +#define SDRAM_MODT_EB1W_ENABLE			PPC_REG_VAL(1, 1) +#define SDRAM_MODT_EB1R_DISABLE			PPC_REG_VAL(2, 0) +#define SDRAM_MODT_EB1R_ENABLE			PPC_REG_VAL(2, 1) +#define SDRAM_MODT_EB0W_DISABLE			PPC_REG_VAL(7, 0) +#define SDRAM_MODT_EB0W_ENABLE			PPC_REG_VAL(7, 1) +#define SDRAM_MODT_EB0R_DISABLE			PPC_REG_VAL(8, 0) +#define SDRAM_MODT_EB0R_ENABLE			PPC_REG_VAL(8, 1) + +/* + * SDRAM Controller On Die Termination Register + */ +#define SDRAM_CODT_ODT_ON			PPC_REG_VAL(0, 1) +#define SDRAM_CODT_ODT_OFF			PPC_REG_VAL(0, 0) +#define SDRAM_CODT_RK1W_ON			PPC_REG_VAL(1, 1) +#define SDRAM_CODT_RK1W_OFF			PPC_REG_VAL(1, 0) +#define SDRAM_CODT_RK1R_ON			PPC_REG_VAL(2, 1) +#define SDRAM_CODT_RK1R_OFF			PPC_REG_VAL(2, 0) +#define SDRAM_CODT_RK0W_ON			PPC_REG_VAL(7, 1) +#define SDRAM_CODT_RK0W_OFF			PPC_REG_VAL(7, 0) +#define SDRAM_CODT_RK0R_ON			PPC_REG_VAL(8, 1) +#define SDRAM_CODT_RK0R_OFF			PPC_REG_VAL(8, 0) +#define SDRAM_CODT_ODTSH_NORMAL			PPC_REG_VAL(10, 0) +#define SDRAM_CODT_ODTSH_REMOVE_ONE_AT_END	PPC_REG_VAL(10, 1) +#define SDRAM_CODT_ODTSH_ADD_ONE_AT_START	PPC_REG_VAL(10, 2) +#define SDRAM_CODT_ODTSH_SHIFT_ONE_EARLIER	PPC_REG_VAL(10, 3) +#define SDRAM_CODT_CODTZ_75OHM			PPC_REG_VAL(11, 0) +#define SDRAM_CODT_CKEG_ON			PPC_REG_VAL(12, 1) +#define SDRAM_CODT_CKEG_OFF			PPC_REG_VAL(12, 0) +#define SDRAM_CODT_CTLG_ON			PPC_REG_VAL(13, 1) +#define SDRAM_CODT_CTLG_OFF			PPC_REG_VAL(13, 0) +#define SDRAM_CODT_FBDG_ON			PPC_REG_VAL(14, 1) +#define SDRAM_CODT_FBDG_OFF			PPC_REG_VAL(14, 0) +#define SDRAM_CODT_FBRG_ON			PPC_REG_VAL(15, 1) +#define SDRAM_CODT_FBRG_OFF			PPC_REG_VAL(15, 0) +#define SDRAM_CODT_CKLZ_36OHM			PPC_REG_VAL(18, 1) +#define SDRAM_CODT_CKLZ_18OHM			PPC_REG_VAL(18, 0) +#define SDRAM_CODT_DQS_VOLTAGE_DDR_MASK		PPC_REG_VAL(26, 1) +#define SDRAM_CODT_DQS_2_5_V_DDR1		PPC_REG_VAL(26, 0) +#define SDRAM_CODT_DQS_1_8_V_DDR2		PPC_REG_VAL(26, 1) +#define SDRAM_CODT_DQS_MASK			PPC_REG_VAL(27, 1) +#define SDRAM_CODT_DQS_DIFFERENTIAL		PPC_REG_VAL(27, 0) +#define SDRAM_CODT_DQS_SINGLE_END		PPC_REG_VAL(27, 1) +#define SDRAM_CODT_CKSE_DIFFERENTIAL		PPC_REG_VAL(28, 0) +#define SDRAM_CODT_CKSE_SINGLE_END		PPC_REG_VAL(28, 1) +#define SDRAM_CODT_FEEBBACK_RCV_SINGLE_END	PPC_REG_VAL(29, 1) +#define SDRAM_CODT_FEEBBACK_DRV_SINGLE_END	PPC_REG_VAL(30, 1) +#define SDRAM_CODT_IO_HIZ			PPC_REG_VAL(31, 0) +#define SDRAM_CODT_IO_NMODE			PPC_REG_VAL(31, 1) + +/* + * SDRAM Initialization Preload Register + */ +#define SDRAM_INITPLR_ENABLE			PPC_REG_VAL(0, 1) +#define SDRAM_INITPLR_DISABLE			PPC_REG_VAL(0, 0) +#define SDRAM_INITPLR_IMWT_MASK			PPC_REG_VAL(8, 0xFF) +#define SDRAM_INITPLR_IMWT_ENCODE(n)		PPC_REG_VAL(8, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0xFF) +#define SDRAM_INITPLR_ICMD_MASK			PPC_REG_VAL(12, 0x7) +#define SDRAM_INITPLR_ICMD_ENCODE(n)		PPC_REG_VAL(12, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7) +#define SDRAM_INITPLR_IBA_MASK			PPC_REG_VAL(15, 0x7) +#define SDRAM_INITPLR_IBA_ENCODE(n)		PPC_REG_VAL(15, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7) +#define SDRAM_INITPLR_IMA_MASK			PPC_REG_VAL(31, 0x7FFF) +#define SDRAM_INITPLR_IMA_ENCODE(n)		PPC_REG_VAL(31, \ +							    (static_cast(u32, \ +									 n)) \ +							    & 0x7FFF) + +/* + * JEDEC DDR Initialization Commands + */ +#define JEDEC_CMD_NOP				7 +#define JEDEC_CMD_PRECHARGE			2 +#define JEDEC_CMD_REFRESH			1 +#define JEDEC_CMD_EMR				0 +#define JEDEC_CMD_READ				5 +#define JEDEC_CMD_WRITE				4 + +/* + * JEDEC Precharge Command Memory Address Arguments + */ +#define JEDEC_MA_PRECHARGE_ONE			(0 << 10) +#define JEDEC_MA_PRECHARGE_ALL			(1 << 10) + +/* + * JEDEC DDR EMR Command Bank Address Arguments + */ +#define JEDEC_BA_MR				0 +#define JEDEC_BA_EMR				1 +#define JEDEC_BA_EMR2				2 +#define JEDEC_BA_EMR3				3 + +/* + * JEDEC DDR Mode Register + */ +#define JEDEC_MA_MR_PDMODE_FAST_EXIT		(0 << 12) +#define JEDEC_MA_MR_PDMODE_SLOW_EXIT		(1 << 12) +#define JEDEC_MA_MR_WR_MASK			(0x7 << 9) +#define JEDEC_MA_MR_WR_DDR1			(0x0 << 9) +#define JEDEC_MA_MR_WR_DDR2_2_CYC		(0x1 << 9) +#define JEDEC_MA_MR_WR_DDR2_3_CYC		(0x2 << 9) +#define JEDEC_MA_MR_WR_DDR2_4_CYC		(0x3 << 9) +#define JEDEC_MA_MR_WR_DDR2_5_CYC		(0x4 << 9) +#define JEDEC_MA_MR_WR_DDR2_6_CYC		(0x5 << 9) +#define JEDEC_MA_MR_DLL_RESET			(1 << 8) +#define JEDEC_MA_MR_MODE_NORMAL			(0 << 8) +#define JEDEC_MA_MR_MODE_TEST			(1 << 8) +#define JEDEC_MA_MR_CL_MASK			(0x7 << 4) +#define JEDEC_MA_MR_CL_DDR1_2_0_CLK		(0x2 << 4) +#define JEDEC_MA_MR_CL_DDR1_2_5_CLK		(0x6 << 4) +#define JEDEC_MA_MR_CL_DDR1_3_0_CLK		(0x3 << 4) +#define JEDEC_MA_MR_CL_DDR2_2_0_CLK		(0x2 << 4) +#define JEDEC_MA_MR_CL_DDR2_3_0_CLK		(0x3 << 4) +#define JEDEC_MA_MR_CL_DDR2_4_0_CLK		(0x4 << 4) +#define JEDEC_MA_MR_CL_DDR2_5_0_CLK		(0x5 << 4) +#define JEDEC_MA_MR_CL_DDR2_6_0_CLK		(0x6 << 4) +#define JEDEC_MA_MR_CL_DDR2_7_0_CLK		(0x7 << 4) +#define JEDEC_MA_MR_BTYP_SEQUENTIAL		(0 << 3) +#define JEDEC_MA_MR_BTYP_INTERLEAVED		(1 << 3) +#define JEDEC_MA_MR_BLEN_MASK			(0x7 << 0) +#define JEDEC_MA_MR_BLEN_4			(2 << 0) +#define JEDEC_MA_MR_BLEN_8			(3 << 0) + +/* + * JEDEC DDR Extended Mode Register + */ +#define JEDEC_MA_EMR_OUTPUT_MASK		(1 << 12) +#define JEDEC_MA_EMR_OUTPUT_ENABLE		(0 << 12) +#define JEDEC_MA_EMR_OUTPUT_DISABLE		(1 << 12) +#define JEDEC_MA_EMR_RQDS_MASK			(1 << 11) +#define JEDEC_MA_EMR_RDQS_DISABLE		(0 << 11) +#define JEDEC_MA_EMR_RDQS_ENABLE		(1 << 11) +#define JEDEC_MA_EMR_DQS_MASK			(1 << 10) +#define JEDEC_MA_EMR_DQS_DISABLE		(1 << 10) +#define JEDEC_MA_EMR_DQS_ENABLE			(0 << 10) +#define JEDEC_MA_EMR_OCD_MASK			(0x7 << 7) +#define JEDEC_MA_EMR_OCD_EXIT			(0 << 7) +#define JEDEC_MA_EMR_OCD_ENTER			(7 << 7) +#define JEDEC_MA_EMR_AL_DDR1_0_CYC		(0 << 3) +#define JEDEC_MA_EMR_AL_DDR2_1_CYC		(1 << 3) +#define JEDEC_MA_EMR_AL_DDR2_2_CYC		(2 << 3) +#define JEDEC_MA_EMR_AL_DDR2_3_CYC		(3 << 3) +#define JEDEC_MA_EMR_AL_DDR2_4_CYC		(4 << 3) +#define JEDEC_MA_EMR_RTT_MASK			(0x11 << 2) +#define JEDEC_MA_EMR_RTT_DISABLED		(0x00 << 2) +#define JEDEC_MA_EMR_RTT_75OHM			(0x01 << 2) +#define JEDEC_MA_EMR_RTT_150OHM			(0x10 << 2) +#define JEDEC_MA_EMR_RTT_50OHM			(0x11 << 2) +#define JEDEC_MA_EMR_ODS_MASK			(1 << 1) +#define JEDEC_MA_EMR_ODS_NORMAL			(0 << 1) +#define JEDEC_MA_EMR_ODS_WEAK			(1 << 1) +#define JEDEC_MA_EMR_DLL_MASK			(1 << 0) +#define JEDEC_MA_EMR_DLL_ENABLE			(0 << 0) +#define JEDEC_MA_EMR_DLL_DISABLE		(1 << 0) + +/* + * JEDEC DDR Extended Mode Register 2 + */ +#define JEDEC_MA_EMR2_TEMP_COMMERCIAL		(0 << 7) +#define JEDEC_MA_EMR2_TEMP_INDUSTRIAL		(1 << 7) + +/* + * SDRAM Mode Register (Corresponds 1:1 w/ JEDEC Mode Register) + */ +#define SDRAM_MMODE_WR_MASK			JEDEC_MA_MR_WR_MASK +#define SDRAM_MMODE_WR_DDR1			JEDEC_MA_MR_WR_DDR1 +#define SDRAM_MMODE_WR_DDR2_2_CYC		JEDEC_MA_MR_WR_DDR2_2_CYC +#define SDRAM_MMODE_WR_DDR2_3_CYC		JEDEC_MA_MR_WR_DDR2_3_CYC +#define SDRAM_MMODE_WR_DDR2_4_CYC		JEDEC_MA_MR_WR_DDR2_4_CYC +#define SDRAM_MMODE_WR_DDR2_5_CYC		JEDEC_MA_MR_WR_DDR2_5_CYC +#define SDRAM_MMODE_WR_DDR2_6_CYC		JEDEC_MA_MR_WR_DDR2_6_CYC +#define SDRAM_MMODE_DCL_MASK			JEDEC_MA_MR_CL_MASK +#define SDRAM_MMODE_DCL_DDR1_2_0_CLK		JEDEC_MA_MR_CL_DDR1_2_0_CLK +#define SDRAM_MMODE_DCL_DDR1_2_5_CLK		JEDEC_MA_MR_CL_DDR1_2_5_CLK +#define SDRAM_MMODE_DCL_DDR1_3_0_CLK		JEDEC_MA_MR_CL_DDR1_3_0_CLK +#define SDRAM_MMODE_DCL_DDR2_2_0_CLK		JEDEC_MA_MR_CL_DDR2_2_0_CLK +#define SDRAM_MMODE_DCL_DDR2_3_0_CLK		JEDEC_MA_MR_CL_DDR2_3_0_CLK +#define SDRAM_MMODE_DCL_DDR2_4_0_CLK		JEDEC_MA_MR_CL_DDR2_4_0_CLK +#define SDRAM_MMODE_DCL_DDR2_5_0_CLK		JEDEC_MA_MR_CL_DDR2_5_0_CLK +#define SDRAM_MMODE_DCL_DDR2_6_0_CLK		JEDEC_MA_MR_CL_DDR2_6_0_CLK +#define SDRAM_MMODE_DCL_DDR2_7_0_CLK		JEDEC_MA_MR_CL_DDR2_7_0_CLK +#define SDRAM_MMODE_BTYP_SEQUENTIAL		JEDEC_MA_MR_BTYP_SEQUENTIAL +#define SDRAM_MMODE_BTYP_INTERLEAVED		JEDEC_MA_MR_BTYP_INTERLEAVED +#define SDRAM_MMODE_BLEN_MASK			JEDEC_MA_MR_BLEN_MASK +#define SDRAM_MMODE_BLEN_4			JEDEC_MA_MR_BLEN_4 +#define SDRAM_MMODE_BLEN_8			JEDEC_MA_MR_BLEN_8 + +/* + * SDRAM Extended Mode Register (Corresponds 1:1 w/ JEDEC Extended + * Mode Register) + */ +#define SDRAM_MEMODE_QOFF_MASK			JEDEC_MA_EMR_OUTPUT_MASK +#define SDRAM_MEMODE_QOFF_DISABLE		JEDEC_MA_EMR_OUTPUT_DISABLE +#define SDRAM_MEMODE_QOFF_ENABLE		JEDEC_MA_EMR_OUTPUT_ENABLE +#define SDRAM_MEMODE_RDQS_MASK			JEDEC_MA_EMR_RQDS_MASK +#define SDRAM_MEMODE_RDQS_DISABLE		JEDEC_MA_EMR_RDQS_DISABLE +#define SDRAM_MEMODE_RDQS_ENABLE		JEDEC_MA_EMR_RDQS_ENABLE +#define SDRAM_MEMODE_DQS_MASK			JEDEC_MA_EMR_DQS_MASK +#define SDRAM_MEMODE_DQS_DISABLE		JEDEC_MA_EMR_DQS_DISABLE +#define SDRAM_MEMODE_DQS_ENABLE			JEDEC_MA_EMR_DQS_ENABLE +#define SDRAM_MEMODE_AL_DDR1_0_CYC		JEDEC_MA_EMR_AL_DDR1_0_CYC +#define SDRAM_MEMODE_AL_DDR2_1_CYC		JEDEC_MA_EMR_AL_DDR2_1_CYC +#define SDRAM_MEMODE_AL_DDR2_2_CYC		JEDEC_MA_EMR_AL_DDR2_2_CYC +#define SDRAM_MEMODE_AL_DDR2_3_CYC		JEDEC_MA_EMR_AL_DDR2_3_CYC +#define SDRAM_MEMODE_AL_DDR2_4_CYC		JEDEC_MA_EMR_AL_DDR2_4_CYC +#define SDRAM_MEMODE_RTT_MASK			JEDEC_MA_EMR_RTT_MASK +#define SDRAM_MEMODE_RTT_DISABLED		JEDEC_MA_EMR_RTT_DISABLED +#define SDRAM_MEMODE_RTT_75OHM			JEDEC_MA_EMR_RTT_75OHM +#define SDRAM_MEMODE_RTT_150OHM			JEDEC_MA_EMR_RTT_150OHM +#define SDRAM_MEMODE_RTT_50OHM			JEDEC_MA_EMR_RTT_50OHM +#define SDRAM_MEMODE_DIC_MASK			JEDEC_MA_EMR_ODS_MASK +#define SDRAM_MEMODE_DIC_NORMAL			JEDEC_MA_EMR_ODS_NORMAL +#define SDRAM_MEMODE_DIC_WEAK			JEDEC_MA_EMR_ODS_WEAK +#define SDRAM_MEMODE_DLL_MASK			JEDEC_MA_EMR_DLL_MASK +#define SDRAM_MEMODE_DLL_DISABLE		JEDEC_MA_EMR_DLL_DISABLE +#define SDRAM_MEMODE_DLL_ENABLE			JEDEC_MA_EMR_DLL_ENABLE + +/* + * SDRAM Clock Timing Register + */ +#define SDRAM_CLKTR_CLKP_MASK		0xC0000000 +#define SDRAM_CLKTR_CLKP_0_DEG		0x00000000 +#define SDRAM_CLKTR_CLKP_180_DEG_ADV	0x80000000 +#define SDRAM_CLKTR_CLKP_90_DEG_ADV	0x40000000 +#define SDRAM_CLKTR_CLKP_270_DEG_ADV	0xC0000000 + +/* + * SDRAM Write Timing Register + */ +#define SDRAM_WRDTR_LLWP_MASK		0x10000000 +#define SDRAM_WRDTR_LLWP_DIS		0x10000000 +#define SDRAM_WRDTR_LLWP_1_CYC		0x00000000 +#define SDRAM_WRDTR_WTR_MASK		0x0E000000 +#define SDRAM_WRDTR_WTR_0_DEG		0x06000000 +#define SDRAM_WRDTR_WTR_90_DEG_ADV	0x04000000 +#define SDRAM_WRDTR_WTR_180_DEG_ADV	0x02000000 +#define SDRAM_WRDTR_WTR_270_DEG_ADV	0x00000000 + +/* + * SDRAM SDTR1 Options + */ +#define SDRAM_SDTR1_LDOF_MASK		0x80000000 +#define SDRAM_SDTR1_LDOF_1_CLK		0x00000000 +#define SDRAM_SDTR1_LDOF_2_CLK		0x80000000 +#define SDRAM_SDTR1_RTW_MASK		0x00F00000 +#define SDRAM_SDTR1_RTW_2_CLK		0x00200000 +#define SDRAM_SDTR1_RTW_3_CLK		0x00300000 +#define SDRAM_SDTR1_WTWO_MASK		0x000F0000 +#define SDRAM_SDTR1_WTWO_0_CLK		0x00000000 +#define SDRAM_SDTR1_WTWO_1_CLK		0x00010000 +#define SDRAM_SDTR1_RTRO_MASK		0x0000F000 +#define SDRAM_SDTR1_RTRO_1_CLK		0x00001000 +#define SDRAM_SDTR1_RTRO_2_CLK		0x00002000 + +/* + * SDRAM SDTR2 Options + */ +#define SDRAM_SDTR2_RCD_MASK		0xF0000000 +#define SDRAM_SDTR2_RCD_1_CLK		0x10000000 +#define SDRAM_SDTR2_RCD_2_CLK		0x20000000 +#define SDRAM_SDTR2_RCD_3_CLK		0x30000000 +#define SDRAM_SDTR2_RCD_4_CLK		0x40000000 +#define SDRAM_SDTR2_RCD_5_CLK		0x50000000 +#define SDRAM_SDTR2_WTR_MASK		0x0F000000 +#define SDRAM_SDTR2_WTR_1_CLK		0x01000000 +#define SDRAM_SDTR2_WTR_2_CLK		0x02000000 +#define SDRAM_SDTR2_WTR_3_CLK		0x03000000 +#define SDRAM_SDTR2_WTR_4_CLK		0x04000000 +#define SDRAM_SDTR3_WTR_ENCODE(n)	((((u32)(n))&0xF)<<24) +#define SDRAM_SDTR2_XSNR_MASK		0x00FF0000 +#define SDRAM_SDTR2_XSNR_8_CLK		0x00080000 +#define SDRAM_SDTR2_XSNR_16_CLK		0x00100000 +#define SDRAM_SDTR2_XSNR_32_CLK		0x00200000 +#define SDRAM_SDTR2_XSNR_64_CLK		0x00400000 +#define SDRAM_SDTR2_WPC_MASK		0x0000F000 +#define SDRAM_SDTR2_WPC_2_CLK		0x00002000 +#define SDRAM_SDTR2_WPC_3_CLK		0x00003000 +#define SDRAM_SDTR2_WPC_4_CLK		0x00004000 +#define SDRAM_SDTR2_WPC_5_CLK		0x00005000 +#define SDRAM_SDTR2_WPC_6_CLK		0x00006000 +#define SDRAM_SDTR3_WPC_ENCODE(n)	((((u32)(n))&0xF)<<12) +#define SDRAM_SDTR2_RPC_MASK		0x00000F00 +#define SDRAM_SDTR2_RPC_2_CLK		0x00000200 +#define SDRAM_SDTR2_RPC_3_CLK		0x00000300 +#define SDRAM_SDTR2_RPC_4_CLK		0x00000400 +#define SDRAM_SDTR2_RP_MASK		0x000000F0 +#define SDRAM_SDTR2_RP_3_CLK		0x00000030 +#define SDRAM_SDTR2_RP_4_CLK		0x00000040 +#define SDRAM_SDTR2_RP_5_CLK		0x00000050 +#define SDRAM_SDTR2_RP_6_CLK		0x00000060 +#define SDRAM_SDTR2_RP_7_CLK		0x00000070 +#define SDRAM_SDTR2_RRD_MASK		0x0000000F +#define SDRAM_SDTR2_RRD_2_CLK		0x00000002 +#define SDRAM_SDTR2_RRD_3_CLK		0x00000003 + +/* + * SDRAM SDTR3 Options + */ +#define SDRAM_SDTR3_RAS_MASK		0x1F000000 +#define SDRAM_SDTR3_RAS_ENCODE(n)	((((u32)(n))&0x1F)<<24) +#define SDRAM_SDTR3_RC_MASK		0x001F0000 +#define SDRAM_SDTR3_RC_ENCODE(n)	((((u32)(n))&0x1F)<<16) +#define SDRAM_SDTR3_XCS_MASK		0x00001F00 +#define SDRAM_SDTR3_XCS			0x00000D00 +#define SDRAM_SDTR3_RFC_MASK		0x0000003F +#define SDRAM_SDTR3_RFC_ENCODE(n)	((((u32)(n))&0x3F)<<0) + +/* + * ECC Error Status + */ +#define SDRAM_ECCES_MASK		 PPC_REG_VAL(21, 0x3FFFFF) +#define SDRAM_ECCES_BNCE_MASK		 PPC_REG_VAL(15, 0xFFFF) +#define SDRAM_ECCES_BNCE_ENCODE(lane)	 PPC_REG_VAL(((lane) & 0xF), 1) +#define SDRAM_ECCES_CKBER_MASK		 PPC_REG_VAL(17, 0x3) +#define SDRAM_ECCES_CKBER_NONE		 PPC_REG_VAL(17, 0) +#define SDRAM_ECCES_CKBER_16_ECC_0_3	 PPC_REG_VAL(17, 2) +#define SDRAM_ECCES_CKBER_32_ECC_0_3	 PPC_REG_VAL(17, 1) +#define SDRAM_ECCES_CKBER_32_ECC_4_8	 PPC_REG_VAL(17, 2) +#define SDRAM_ECCES_CKBER_32_ECC_0_8	 PPC_REG_VAL(17, 3) +#define SDRAM_ECCES_CE			 PPC_REG_VAL(18, 1) +#define SDRAM_ECCES_UE			 PPC_REG_VAL(19, 1) +#define SDRAM_ECCES_BKNER_MASK		 PPC_REG_VAL(21, 0x3) +#define SDRAM_ECCES_BK0ER		 PPC_REG_VAL(20, 1) +#define SDRAM_ECCES_BK1ER		 PPC_REG_VAL(21, 1) + +/* + * Memory Bank 0-1 configuration + */ +#define SDRAM_BXCF_M_AM_MASK		0x00000F00	/* Addressing mode	*/ +#define SDRAM_BXCF_M_AM_0		0x00000000	/*   Mode 0		*/ +#define SDRAM_BXCF_M_AM_1		0x00000100	/*   Mode 1		*/ +#define SDRAM_BXCF_M_AM_2		0x00000200	/*   Mode 2		*/ +#define SDRAM_BXCF_M_AM_3		0x00000300	/*   Mode 3		*/ +#define SDRAM_BXCF_M_AM_4		0x00000400	/*   Mode 4		*/ +#define SDRAM_BXCF_M_AM_5		0x00000500	/*   Mode 5		*/ +#define SDRAM_BXCF_M_AM_6		0x00000600	/*   Mode 6		*/ +#define SDRAM_BXCF_M_AM_7		0x00000700	/*   Mode 7		*/ +#define SDRAM_BXCF_M_AM_8		0x00000800	/*   Mode 8		*/ +#define SDRAM_BXCF_M_AM_9		0x00000900	/*   Mode 9		*/ +#define SDRAM_BXCF_M_BE_MASK		0x00000001	/* Memory Bank Enable	*/ +#define SDRAM_BXCF_M_BE_DISABLE		0x00000000	/* Memory Bank Enable	*/ +#define SDRAM_BXCF_M_BE_ENABLE		0x00000001	/* Memory Bank Enable	*/ + +#define SDRAM_RTSR_TRK1SM_MASK		0xC0000000	/* Tracking State Mach 1*/ +#define SDRAM_RTSR_TRK1SM_ATBASE	0x00000000	/* atbase state		*/ +#define SDRAM_RTSR_TRK1SM_MISSED	0x40000000	/* missed state		*/ +#define SDRAM_RTSR_TRK1SM_ATPLS1	0x80000000	/* atpls1 state		*/ +#define SDRAM_RTSR_TRK1SM_RESET		0xC0000000	/* reset  state		*/ + +#endif /* CONFIG_SDRAM_PPC4xx_IBM_DDR2 */ + +#if defined(CONFIG_SDRAM_PPC4xx_DENALI_DDR2) +/* + * SDRAM Controller + */ +#define DDR0_00				0x00 +#define DDR0_00_INT_ACK_MASK		0x7F000000	/* Write only */ +#define DDR0_00_INT_ACK_ALL		0x7F000000 +#define DDR0_00_INT_ACK_ENCODE(n)	((((u32)(n))&0x7F)<<24) +#define DDR0_00_INT_ACK_DECODE(n)	((((u32)(n))>>24)&0x7F) +/* Status */ +#define DDR0_00_INT_STATUS_MASK		0x00FF0000	/* Read only */ +/* Bit0. A single access outside the defined PHYSICAL memory space detected. */ +#define DDR0_00_INT_STATUS_BIT0		0x00010000 +/* Bit1. Multiple accesses outside the defined PHYSICAL memory space detected. */ +#define DDR0_00_INT_STATUS_BIT1		0x00020000 +/* Bit2. Single correctable ECC event detected */ +#define DDR0_00_INT_STATUS_BIT2		0x00040000 +/* Bit3. Multiple correctable ECC events detected. */ +#define DDR0_00_INT_STATUS_BIT3		0x00080000 +/* Bit4. Single uncorrectable ECC event detected. */ +#define DDR0_00_INT_STATUS_BIT4		0x00100000 +/* Bit5. Multiple uncorrectable ECC events detected. */ +#define DDR0_00_INT_STATUS_BIT5		0x00200000 +/* Bit6. DRAM initialization complete. */ +#define DDR0_00_INT_STATUS_BIT6		0x00400000 +/* Bit7. Logical OR of all lower bits. */ +#define DDR0_00_INT_STATUS_BIT7		0x00800000 + +#define DDR0_00_INT_STATUS_ENCODE(n)	((((u32)(n))&0xFF)<<16) +#define DDR0_00_INT_STATUS_DECODE(n)	((((u32)(n))>>16)&0xFF) +#define DDR0_00_DLL_INCREMENT_MASK	0x00007F00 +#define DDR0_00_DLL_INCREMENT_ENCODE(n)	((((u32)(n))&0x7F)<<8) +#define DDR0_00_DLL_INCREMENT_DECODE(n)	((((u32)(n))>>8)&0x7F) +#define DDR0_00_DLL_START_POINT_MASK	0x0000007F +#define DDR0_00_DLL_START_POINT_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_00_DLL_START_POINT_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_01				0x01 +#define DDR0_01_PLB0_DB_CS_LOWER_MASK	0x1F000000 +#define DDR0_01_PLB0_DB_CS_LOWER_ENCODE(n) ((((u32)(n))&0x1F)<<24) +#define DDR0_01_PLB0_DB_CS_LOWER_DECODE(n) ((((u32)(n))>>24)&0x1F) +#define DDR0_01_PLB0_DB_CS_UPPER_MASK	0x001F0000 +#define DDR0_01_PLB0_DB_CS_UPPER_ENCODE(n) ((((u32)(n))&0x1F)<<16) +#define DDR0_01_PLB0_DB_CS_UPPER_DECODE(n) ((((u32)(n))>>16)&0x1F) +#define DDR0_01_OUT_OF_RANGE_TYPE_MASK	0x00000700	/* Read only */ +#define DDR0_01_OUT_OF_RANGE_TYPE_ENCODE(n) ((((u32)(n))&0x7)<<8) +#define DDR0_01_OUT_OF_RANGE_TYPE_DECODE(n) ((((u32)(n))>>8)&0x7) +#define DDR0_01_INT_MASK_MASK		0x000000FF +#define DDR0_01_INT_MASK_ENCODE(n)	((((u32)(n))&0xFF)<<0) +#define DDR0_01_INT_MASK_DECODE(n)	((((u32)(n))>>0)&0xFF) +#define DDR0_01_INT_MASK_ALL_ON		0x000000FF +#define DDR0_01_INT_MASK_ALL_OFF	0x00000000 + +#define DDR0_02				0x02 +#define DDR0_02_MAX_CS_REG_MASK		0x02000000	/* Read only */ +#define DDR0_02_MAX_CS_REG_ENCODE(n)	((((u32)(n))&0x2)<<24) +#define DDR0_02_MAX_CS_REG_DECODE(n)	((((u32)(n))>>24)&0x2) +#define DDR0_02_MAX_COL_REG_MASK	0x000F0000	/* Read only */ +#define DDR0_02_MAX_COL_REG_ENCODE(n)	((((u32)(n))&0xF)<<16) +#define DDR0_02_MAX_COL_REG_DECODE(n)	((((u32)(n))>>16)&0xF) +#define DDR0_02_MAX_ROW_REG_MASK	0x00000F00	/* Read only */ +#define DDR0_02_MAX_ROW_REG_ENCODE(n)	((((u32)(n))&0xF)<<8) +#define DDR0_02_MAX_ROW_REG_DECODE(n)	((((u32)(n))>>8)&0xF) +#define DDR0_02_START_MASK		0x00000001 +#define DDR0_02_START_ENCODE(n)		((((u32)(n))&0x1)<<0) +#define DDR0_02_START_DECODE(n)		((((u32)(n))>>0)&0x1) +#define DDR0_02_START_OFF		0x00000000 +#define DDR0_02_START_ON		0x00000001 + +#define DDR0_03				0x03 +#define DDR0_03_BSTLEN_MASK		0x07000000 +#define DDR0_03_BSTLEN_ENCODE(n)	((((u32)(n))&0x7)<<24) +#define DDR0_03_BSTLEN_DECODE(n)	((((u32)(n))>>24)&0x7) +#define DDR0_03_CASLAT_MASK		0x00070000 +#define DDR0_03_CASLAT_ENCODE(n)	((((u32)(n))&0x7)<<16) +#define DDR0_03_CASLAT_DECODE(n)	((((u32)(n))>>16)&0x7) +#define DDR0_03_CASLAT_LIN_MASK		0x00000F00 +#define DDR0_03_CASLAT_LIN_ENCODE(n)	((((u32)(n))&0xF)<<8) +#define DDR0_03_CASLAT_LIN_DECODE(n)	((((u32)(n))>>8)&0xF) +#define DDR0_03_INITAREF_MASK		0x0000000F +#define DDR0_03_INITAREF_ENCODE(n)	((((u32)(n))&0xF)<<0) +#define DDR0_03_INITAREF_DECODE(n)	((((u32)(n))>>0)&0xF) + +#define DDR0_04				0x04 +#define DDR0_04_TRC_MASK		0x1F000000 +#define DDR0_04_TRC_ENCODE(n)		((((u32)(n))&0x1F)<<24) +#define DDR0_04_TRC_DECODE(n)		((((u32)(n))>>24)&0x1F) +#define DDR0_04_TRRD_MASK		0x00070000 +#define DDR0_04_TRRD_ENCODE(n)		((((u32)(n))&0x7)<<16) +#define DDR0_04_TRRD_DECODE(n)		((((u32)(n))>>16)&0x7) +#define DDR0_04_TRTP_MASK		0x00000700 +#define DDR0_04_TRTP_ENCODE(n)		((((u32)(n))&0x7)<<8) +#define DDR0_04_TRTP_DECODE(n)		((((u32)(n))>>8)&0x7) + +#define DDR0_05				0x05 +#define DDR0_05_TMRD_MASK		0x1F000000 +#define DDR0_05_TMRD_ENCODE(n)		((((u32)(n))&0x1F)<<24) +#define DDR0_05_TMRD_DECODE(n)		((((u32)(n))>>24)&0x1F) +#define DDR0_05_TEMRS_MASK		0x00070000 +#define DDR0_05_TEMRS_ENCODE(n)		((((u32)(n))&0x7)<<16) +#define DDR0_05_TEMRS_DECODE(n)		((((u32)(n))>>16)&0x7) +#define DDR0_05_TRP_MASK		0x00000F00 +#define DDR0_05_TRP_ENCODE(n)		((((u32)(n))&0xF)<<8) +#define DDR0_05_TRP_DECODE(n)		((((u32)(n))>>8)&0xF) +#define DDR0_05_TRAS_MIN_MASK		0x000000FF +#define DDR0_05_TRAS_MIN_ENCODE(n)	((((u32)(n))&0xFF)<<0) +#define DDR0_05_TRAS_MIN_DECODE(n)	((((u32)(n))>>0)&0xFF) + +#define DDR0_06				0x06 +#define DDR0_06_WRITEINTERP_MASK	0x01000000 +#define DDR0_06_WRITEINTERP_ENCODE(n)	((((u32)(n))&0x1)<<24) +#define DDR0_06_WRITEINTERP_DECODE(n)	((((u32)(n))>>24)&0x1) +#define DDR0_06_TWTR_MASK		0x00070000 +#define DDR0_06_TWTR_ENCODE(n)		((((u32)(n))&0x7)<<16) +#define DDR0_06_TWTR_DECODE(n)		((((u32)(n))>>16)&0x7) +#define DDR0_06_TDLL_MASK		0x0000FF00 +#define DDR0_06_TDLL_ENCODE(n)		((((u32)(n))&0xFF)<<8) +#define DDR0_06_TDLL_DECODE(n)		((((u32)(n))>>8)&0xFF) +#define DDR0_06_TRFC_MASK		0x0000007F +#define DDR0_06_TRFC_ENCODE(n)		((((u32)(n))&0x7F)<<0) +#define DDR0_06_TRFC_DECODE(n)		((((u32)(n))>>0)&0x7F) + +#define DDR0_07				0x07 +#define DDR0_07_NO_CMD_INIT_MASK	0x01000000 +#define DDR0_07_NO_CMD_INIT_ENCODE(n)	((((u32)(n))&0x1)<<24) +#define DDR0_07_NO_CMD_INIT_DECODE(n)	((((u32)(n))>>24)&0x1) +#define DDR0_07_TFAW_MASK		0x001F0000 +#define DDR0_07_TFAW_ENCODE(n)		((((u32)(n))&0x1F)<<16) +#define DDR0_07_TFAW_DECODE(n)		((((u32)(n))>>16)&0x1F) +#define DDR0_07_AUTO_REFRESH_MODE_MASK	0x00000100 +#define DDR0_07_AUTO_REFRESH_MODE_ENCODE(n) ((((u32)(n))&0x1)<<8) +#define DDR0_07_AUTO_REFRESH_MODE_DECODE(n) ((((u32)(n))>>8)&0x1) +#define DDR0_07_AREFRESH_MASK		0x00000001 +#define DDR0_07_AREFRESH_ENCODE(n)	((((u32)(n))&0x1)<<0) +#define DDR0_07_AREFRESH_DECODE(n)	((((u32)(n))>>0)&0x1) + +#define DDR0_08				0x08 +#define DDR0_08_WRLAT_MASK		0x07000000 +#define DDR0_08_WRLAT_ENCODE(n)		((((u32)(n))&0x7)<<24) +#define DDR0_08_WRLAT_DECODE(n)		((((u32)(n))>>24)&0x7) +#define DDR0_08_TCPD_MASK		0x00FF0000 +#define DDR0_08_TCPD_ENCODE(n)		((((u32)(n))&0xFF)<<16) +#define DDR0_08_TCPD_DECODE(n)		((((u32)(n))>>16)&0xFF) +#define DDR0_08_DQS_N_EN_MASK		0x00000100 +#define DDR0_08_DQS_N_EN_ENCODE(n)	((((u32)(n))&0x1)<<8) +#define DDR0_08_DQS_N_EN_DECODE(n)	((((u32)(n))>>8)&0x1) +#define DDR0_08_DDRII_SDRAM_MODE_MASK	0x00000001 +#define DDR0_08_DDRII_ENCODE(n)		((((u32)(n))&0x1)<<0) +#define DDR0_08_DDRII_DECODE(n)		((((u32)(n))>>0)&0x1) + +#define DDR0_09				0x09 +#define DDR0_09_OCD_ADJUST_PDN_CS_0_MASK 0x1F000000 +#define DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(n) ((((u32)(n))&0x1F)<<24) +#define DDR0_09_OCD_ADJUST_PDN_CS_0_DECODE(n) ((((u32)(n))>>24)&0x1F) +#define DDR0_09_RTT_0_MASK		0x00030000 +#define DDR0_09_RTT_0_ENCODE(n)		((((u32)(n))&0x3)<<16) +#define DDR0_09_RTT_0_DECODE(n)		((((u32)(n))>>16)&0x3) +#define DDR0_09_WR_DQS_SHIFT_BYPASS_MASK  0x00007F00 +#define DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(n) ((((u32)(n))&0x7F)<<8) +#define DDR0_09_WR_DQS_SHIFT_BYPASS_DECODE(n) ((((u32)(n))>>8)&0x7F) +#define DDR0_09_WR_DQS_SHIFT_MASK	0x0000007F +#define DDR0_09_WR_DQS_SHIFT_ENCODE(n)	((((u32)(n))&0x7F)<<0) +#define DDR0_09_WR_DQS_SHIFT_DECODE(n)	((((u32)(n))>>0)&0x7F) + +#define DDR0_10				0x0A +#define DDR0_10_WRITE_MODEREG_MASK	0x00010000	/* Write only */ +#define DDR0_10_WRITE_MODEREG_ENCODE(n)	((((u32)(n))&0x1)<<16) +#define DDR0_10_WRITE_MODEREG_DECODE(n)	((((u32)(n))>>16)&0x1) +#define DDR0_10_CS_MAP_MASK		0x00000300 +#define DDR0_10_CS_MAP_NO_MEM		0x00000000 +#define DDR0_10_CS_MAP_RANK0_INSTALLED	0x00000100 +#define DDR0_10_CS_MAP_RANK1_INSTALLED	0x00000200 +#define DDR0_10_CS_MAP_ENCODE(n)	((((u32)(n))&0x3)<<8) +#define DDR0_10_CS_MAP_DECODE(n)	((((u32)(n))>>8)&0x3) +#define DDR0_10_OCD_ADJUST_PUP_CS_0_MASK  0x0000001F +#define DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(n) ((((u32)(n))&0x1F)<<0) +#define DDR0_10_OCD_ADJUST_PUP_CS_0_DECODE(n) ((((u32)(n))>>0)&0x1F) + +#define DDR0_11				0x0B +#define DDR0_11_SREFRESH_MASK		0x01000000 +#define DDR0_11_SREFRESH_ENCODE(n)	((((u32)(n))&0x1)<<24) +#define DDR0_11_SREFRESH_DECODE(n)	((((u32)(n))>>24)&0x1F) +#define DDR0_11_TXSNR_MASK		0x00FF0000 +#define DDR0_11_TXSNR_ENCODE(n)		((((u32)(n))&0xFF)<<16) +#define DDR0_11_TXSNR_DECODE(n)		((((u32)(n))>>16)&0xFF) +#define DDR0_11_TXSR_MASK		0x0000FF00 +#define DDR0_11_TXSR_ENCODE(n)		((((u32)(n))&0xFF)<<8) +#define DDR0_11_TXSR_DECODE(n)		((((u32)(n))>>8)&0xFF) + +#define DDR0_12				0x0C +#define DDR0_12_TCKE_MASK		0x0000007 +#define DDR0_12_TCKE_ENCODE(n)		((((u32)(n))&0x7)<<0) +#define DDR0_12_TCKE_DECODE(n)		((((u32)(n))>>0)&0x7) + +#define DDR0_14				0x0E +#define DDR0_14_DLL_BYPASS_MODE_MASK	0x01000000 +#define DDR0_14_DLL_BYPASS_MODE_ENCODE(n) ((((u32)(n))&0x1)<<24) +#define DDR0_14_DLL_BYPASS_MODE_DECODE(n) ((((u32)(n))>>24)&0x1) +#define DDR0_14_REDUC_MASK		0x00010000 +#define DDR0_14_REDUC_64BITS		0x00000000 +#define DDR0_14_REDUC_32BITS		0x00010000 +#define DDR0_14_REDUC_ENCODE(n)		((((u32)(n))&0x1)<<16) +#define DDR0_14_REDUC_DECODE(n)		((((u32)(n))>>16)&0x1) +#define DDR0_14_REG_DIMM_ENABLE_MASK	0x00000100 +#define DDR0_14_REG_DIMM_ENABLE_ENCODE(n) ((((u32)(n))&0x1)<<8) +#define DDR0_14_REG_DIMM_ENABLE_DECODE(n) ((((u32)(n))>>8)&0x1) + +#define DDR0_17				0x11 +#define DDR0_17_DLL_DQS_DELAY_0_MASK	0x7F000000 +#define DDR0_17_DLL_DQS_DELAY_0_ENCODE(n) ((((u32)(n))&0x7F)<<24) +#define DDR0_17_DLL_DQS_DELAY_0_DECODE(n) ((((u32)(n))>>24)&0x7F) +#define DDR0_17_DLLLOCKREG_MASK		0x00010000	/* Read only */ +#define DDR0_17_DLLLOCKREG_LOCKED	0x00010000 +#define DDR0_17_DLLLOCKREG_UNLOCKED	0x00000000 +#define DDR0_17_DLLLOCKREG_ENCODE(n)	((((u32)(n))&0x1)<<16) +#define DDR0_17_DLLLOCKREG_DECODE(n)	((((u32)(n))>>16)&0x1) +#define DDR0_17_DLL_LOCK_MASK		0x00007F00	/* Read only */ +#define DDR0_17_DLL_LOCK_ENCODE(n)	((((u32)(n))&0x7F)<<8) +#define DDR0_17_DLL_LOCK_DECODE(n)	((((u32)(n))>>8)&0x7F) + +#define DDR0_18				0x12 +#define DDR0_18_DLL_DQS_DELAY_X_MASK	0x7F7F7F7F +#define DDR0_18_DLL_DQS_DELAY_4_MASK	0x7F000000 +#define DDR0_18_DLL_DQS_DELAY_4_ENCODE(n) ((((u32)(n))&0x7F)<<24) +#define DDR0_18_DLL_DQS_DELAY_4_DECODE(n) ((((u32)(n))>>24)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_3_MASK	0x007F0000 +#define DDR0_18_DLL_DQS_DELAY_3_ENCODE(n) ((((u32)(n))&0x7F)<<16) +#define DDR0_18_DLL_DQS_DELAY_3_DECODE(n) ((((u32)(n))>>16)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_2_MASK	0x00007F00 +#define DDR0_18_DLL_DQS_DELAY_2_ENCODE(n) ((((u32)(n))&0x7F)<<8) +#define DDR0_18_DLL_DQS_DELAY_2_DECODE(n) ((((u32)(n))>>8)&0x7F) +#define DDR0_18_DLL_DQS_DELAY_1_MASK	0x0000007F +#define DDR0_18_DLL_DQS_DELAY_1_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_18_DLL_DQS_DELAY_1_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_19				0x13 +#define DDR0_19_DLL_DQS_DELAY_X_MASK	0x7F7F7F7F +#define DDR0_19_DLL_DQS_DELAY_8_MASK	0x7F000000 +#define DDR0_19_DLL_DQS_DELAY_8_ENCODE(n) ((((u32)(n))&0x7F)<<24) +#define DDR0_19_DLL_DQS_DELAY_8_DECODE(n) ((((u32)(n))>>24)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_7_MASK	0x007F0000 +#define DDR0_19_DLL_DQS_DELAY_7_ENCODE(n) ((((u32)(n))&0x7F)<<16) +#define DDR0_19_DLL_DQS_DELAY_7_DECODE(n) ((((u32)(n))>>16)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_6_MASK	0x00007F00 +#define DDR0_19_DLL_DQS_DELAY_6_ENCODE(n) ((((u32)(n))&0x7F)<<8) +#define DDR0_19_DLL_DQS_DELAY_6_DECODE(n) ((((u32)(n))>>8)&0x7F) +#define DDR0_19_DLL_DQS_DELAY_5_MASK	0x0000007F +#define DDR0_19_DLL_DQS_DELAY_5_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_19_DLL_DQS_DELAY_5_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_20				0x14 +#define DDR0_20_DLL_DQS_BYPASS_3_MASK	0x7F000000 +#define DDR0_20_DLL_DQS_BYPASS_3_ENCODE(n) ((((u32)(n))&0x7F)<<24) +#define DDR0_20_DLL_DQS_BYPASS_3_DECODE(n) ((((u32)(n))>>24)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_2_MASK	0x007F0000 +#define DDR0_20_DLL_DQS_BYPASS_2_ENCODE(n) ((((u32)(n))&0x7F)<<16) +#define DDR0_20_DLL_DQS_BYPASS_2_DECODE(n) ((((u32)(n))>>16)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_1_MASK	0x00007F00 +#define DDR0_20_DLL_DQS_BYPASS_1_ENCODE(n) ((((u32)(n))&0x7F)<<8) +#define DDR0_20_DLL_DQS_BYPASS_1_DECODE(n) ((((u32)(n))>>8)&0x7F) +#define DDR0_20_DLL_DQS_BYPASS_0_MASK	0x0000007F +#define DDR0_20_DLL_DQS_BYPASS_0_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_20_DLL_DQS_BYPASS_0_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_21				0x15 +#define DDR0_21_DLL_DQS_BYPASS_7_MASK	0x7F000000 +#define DDR0_21_DLL_DQS_BYPASS_7_ENCODE(n) ((((u32)(n))&0x7F)<<24) +#define DDR0_21_DLL_DQS_BYPASS_7_DECODE(n) ((((u32)(n))>>24)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_6_MASK	0x007F0000 +#define DDR0_21_DLL_DQS_BYPASS_6_ENCODE(n) ((((u32)(n))&0x7F)<<16) +#define DDR0_21_DLL_DQS_BYPASS_6_DECODE(n) ((((u32)(n))>>16)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_5_MASK	0x00007F00 +#define DDR0_21_DLL_DQS_BYPASS_5_ENCODE(n) ((((u32)(n))&0x7F)<<8) +#define DDR0_21_DLL_DQS_BYPASS_5_DECODE(n) ((((u32)(n))>>8)&0x7F) +#define DDR0_21_DLL_DQS_BYPASS_4_MASK	0x0000007F +#define DDR0_21_DLL_DQS_BYPASS_4_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_21_DLL_DQS_BYPASS_4_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_22				0x16 +#define DDR0_22_CTRL_RAW_MASK		0x03000000 +#define DDR0_22_CTRL_RAW_ECC_DISABLE	0x00000000 +#define DDR0_22_CTRL_RAW_ECC_CHECK_ONLY	0x01000000 +#define DDR0_22_CTRL_RAW_NO_ECC_RAM	0x02000000 +#define DDR0_22_CTRL_RAW_ECC_ENABLE	0x03000000 +#define DDR0_22_CTRL_RAW_ENCODE(n)	((((u32)(n))&0x3)<<24) +#define DDR0_22_CTRL_RAW_DECODE(n)	((((u32)(n))>>24)&0x3) +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_MASK 0x007F0000 +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(n) ((((u32)(n))&0x7F)<<16) +#define DDR0_22_DQS_OUT_SHIFT_BYPASS_DECODE(n) ((((u32)(n))>>16)&0x7F) +#define DDR0_22_DQS_OUT_SHIFT_MASK	0x00007F00 +#define DDR0_22_DQS_OUT_SHIFT_ENCODE(n)	((((u32)(n))&0x7F)<<8) +#define DDR0_22_DQS_OUT_SHIFT_DECODE(n)	((((u32)(n))>>8)&0x7F) +#define DDR0_22_DLL_DQS_BYPASS_8_MASK	0x0000007F +#define DDR0_22_DLL_DQS_BYPASS_8_ENCODE(n) ((((u32)(n))&0x7F)<<0) +#define DDR0_22_DLL_DQS_BYPASS_8_DECODE(n) ((((u32)(n))>>0)&0x7F) + +#define DDR0_23				0x17 +#define DDR0_23_ODT_RD_MAP_CS0_MASK	0x03000000 +#define DDR0_23_ODT_RD_MAP_CS0_ENCODE(n) ((((u32)(n))&0x3)<<24) +#define DDR0_23_ODT_RD_MAP_CS0_DECODE(n) ((((u32)(n))>>24)&0x3) +#define DDR0_23_ECC_C_SYND_MASK		0x00FF0000	/* Read only */ +#define DDR0_23_ECC_C_SYND_ENCODE(n)	((((u32)(n))&0xFF)<<16) +#define DDR0_23_ECC_C_SYND_DECODE(n)	((((u32)(n))>>16)&0xFF) +#define DDR0_23_ECC_U_SYND_MASK		0x0000FF00	/* Read only */ +#define DDR0_23_ECC_U_SYND_ENCODE(n)	((((u32)(n))&0xFF)<<8) +#define DDR0_23_ECC_U_SYND_DECODE(n)	((((u32)(n))>>8)&0xFF) +#define DDR0_23_FWC_MASK		0x00000001	/* Write only */ +#define DDR0_23_FWC_ENCODE(n)		((((u32)(n))&0x1)<<0) +#define DDR0_23_FWC_DECODE(n)		((((u32)(n))>>0)&0x1) + +#define DDR0_24				0x18 +#define DDR0_24_RTT_PAD_TERMINATION_MASK 0x03000000 +#define DDR0_24_RTT_PAD_TERMINATION_ENCODE(n) ((((u32)(n))&0x3)<<24) +#define DDR0_24_RTT_PAD_TERMINATION_DECODE(n) ((((u32)(n))>>24)&0x3) +#define DDR0_24_ODT_WR_MAP_CS1_MASK	0x00030000 +#define DDR0_24_ODT_WR_MAP_CS1_ENCODE(n) ((((u32)(n))&0x3)<<16) +#define DDR0_24_ODT_WR_MAP_CS1_DECODE(n) ((((u32)(n))>>16)&0x3) +#define DDR0_24_ODT_RD_MAP_CS1_MASK	0x00000300 +#define DDR0_24_ODT_RD_MAP_CS1_ENCODE(n) ((((u32)(n))&0x3)<<8) +#define DDR0_24_ODT_RD_MAP_CS1_DECODE(n) ((((u32)(n))>>8)&0x3) +#define DDR0_24_ODT_WR_MAP_CS0_MASK	0x00000003 +#define DDR0_24_ODT_WR_MAP_CS0_ENCODE(n) ((((u32)(n))&0x3)<<0) +#define DDR0_24_ODT_WR_MAP_CS0_DECODE(n) ((((u32)(n))>>0)&0x3) + +#define DDR0_25				0x19 +#define DDR0_25_VERSION_MASK		0xFFFF0000	/* Read only */ +#define DDR0_25_VERSION_ENCODE(n)	((((u32)(n))&0xFFFF)<<16) +#define DDR0_25_VERSION_DECODE(n)	((((u32)(n))>>16)&0xFFFF) +#define DDR0_25_OUT_OF_RANGE_LENGTH_MASK  0x000003FF	/* Read only */ +#define DDR0_25_OUT_OF_RANGE_LENGTH_ENCODE(n) ((((u32)(n))&0x3FF)<<0) +#define DDR0_25_OUT_OF_RANGE_LENGTH_DECODE(n) ((((u32)(n))>>0)&0x3FF) + +#define DDR0_26				0x1A +#define DDR0_26_TRAS_MAX_MASK		0xFFFF0000 +#define DDR0_26_TRAS_MAX_ENCODE(n)	((((u32)(n))&0xFFFF)<<16) +#define DDR0_26_TRAS_MAX_DECODE(n)	((((u32)(n))>>16)&0xFFFF) +#define DDR0_26_TREF_MASK		0x00003FFF +#define DDR0_26_TREF_ENCODE(n)		((((u32)(n))&0x3FFF)<<0) +#define DDR0_26_TREF_DECODE(n)		((((u32)(n))>>0)&0x3FFF) + +#define DDR0_27				0x1B +#define DDR0_27_EMRS_DATA_MASK		0x3FFF0000 +#define DDR0_27_EMRS_DATA_ENCODE(n)	((((u32)(n))&0x3FFF)<<16) +#define DDR0_27_EMRS_DATA_DECODE(n)	((((u32)(n))>>16)&0x3FFF) +#define DDR0_27_TINIT_MASK		0x0000FFFF +#define DDR0_27_TINIT_ENCODE(n)		((((u32)(n))&0xFFFF)<<0) +#define DDR0_27_TINIT_DECODE(n)		((((u32)(n))>>0)&0xFFFF) + +#define DDR0_28				0x1C +#define DDR0_28_EMRS3_DATA_MASK		0x3FFF0000 +#define DDR0_28_EMRS3_DATA_ENCODE(n)	((((u32)(n))&0x3FFF)<<16) +#define DDR0_28_EMRS3_DATA_DECODE(n)	((((u32)(n))>>16)&0x3FFF) +#define DDR0_28_EMRS2_DATA_MASK		0x00003FFF +#define DDR0_28_EMRS2_DATA_ENCODE(n)	((((u32)(n))&0x3FFF)<<0) +#define DDR0_28_EMRS2_DATA_DECODE(n)	((((u32)(n))>>0)&0x3FFF) + +#define DDR0_31				0x1F +#define DDR0_31_XOR_CHECK_BITS_MASK	0x0000FFFF +#define DDR0_31_XOR_CHECK_BITS_ENCODE(n) ((((u32)(n))&0xFFFF)<<0) +#define DDR0_31_XOR_CHECK_BITS_DECODE(n) ((((u32)(n))>>0)&0xFFFF) + +#define DDR0_32				0x20 +#define DDR0_32_OUT_OF_RANGE_ADDR_MASK	0xFFFFFFFF	/* Read only */ +#define DDR0_32_OUT_OF_RANGE_ADDR_ENCODE(n) ((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_32_OUT_OF_RANGE_ADDR_DECODE(n) ((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_33				0x21 +#define DDR0_33_OUT_OF_RANGE_ADDR_MASK	0x00000001	/* Read only */ +#define DDR0_33_OUT_OF_RANGE_ADDR_ENCODE(n) ((((u32)(n))&0x1)<<0) +#define DDR0_33_OUT_OF_RANGE_ADDR_DECODE(n) ((((u32)(n))>>0)&0x1) + +#define DDR0_34				0x22 +#define DDR0_34_ECC_U_ADDR_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_34_ECC_U_ADDR_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_34_ECC_U_ADDR_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_35				0x23 +#define DDR0_35_ECC_U_ADDR_MASK		0x00000001	/* Read only */ +#define DDR0_35_ECC_U_ADDR_ENCODE(n)	((((u32)(n))&0x1)<<0) +#define DDR0_35_ECC_U_ADDR_DECODE(n)	((((u32)(n))>>0)&0x1) + +#define DDR0_36				0x24 +#define DDR0_36_ECC_U_DATA_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_36_ECC_U_DATA_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_36_ECC_U_DATA_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_37				0x25 +#define DDR0_37_ECC_U_DATA_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_37_ECC_U_DATA_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_37_ECC_U_DATA_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_38				0x26 +#define DDR0_38_ECC_C_ADDR_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_38_ECC_C_ADDR_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_38_ECC_C_ADDR_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_39				0x27 +#define DDR0_39_ECC_C_ADDR_MASK		0x00000001	/* Read only */ +#define DDR0_39_ECC_C_ADDR_ENCODE(n)	((((u32)(n))&0x1)<<0) +#define DDR0_39_ECC_C_ADDR_DECODE(n)	((((u32)(n))>>0)&0x1) + +#define DDR0_40				0x28 +#define DDR0_40_ECC_C_DATA_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_40_ECC_C_DATA_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_40_ECC_C_DATA_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_41				0x29 +#define DDR0_41_ECC_C_DATA_MASK		0xFFFFFFFF	/* Read only */ +#define DDR0_41_ECC_C_DATA_ENCODE(n)	((((u32)(n))&0xFFFFFFFF)<<0) +#define DDR0_41_ECC_C_DATA_DECODE(n)	((((u32)(n))>>0)&0xFFFFFFFF) + +#define DDR0_42				0x2A +#define DDR0_42_ADDR_PINS_MASK		0x07000000 +#define DDR0_42_ADDR_PINS_ENCODE(n)	((((u32)(n))&0x7)<<24) +#define DDR0_42_ADDR_PINS_DECODE(n)	((((u32)(n))>>24)&0x7) +#define DDR0_42_CASLAT_LIN_GATE_MASK	0x0000000F +#define DDR0_42_CASLAT_LIN_GATE_ENCODE(n) ((((u32)(n))&0xF)<<0) +#define DDR0_42_CASLAT_LIN_GATE_DECODE(n) ((((u32)(n))>>0)&0xF) + +#define DDR0_43				0x2B +#define DDR0_43_TWR_MASK		0x07000000 +#define DDR0_43_TWR_ENCODE(n)		((((u32)(n))&0x7)<<24) +#define DDR0_43_TWR_DECODE(n)		((((u32)(n))>>24)&0x7) +#define DDR0_43_APREBIT_MASK		0x000F0000 +#define DDR0_43_APREBIT_ENCODE(n)	((((u32)(n))&0xF)<<16) +#define DDR0_43_APREBIT_DECODE(n)	((((u32)(n))>>16)&0xF) +#define DDR0_43_COLUMN_SIZE_MASK	0x00000700 +#define DDR0_43_COLUMN_SIZE_ENCODE(n)	((((u32)(n))&0x7)<<8) +#define DDR0_43_COLUMN_SIZE_DECODE(n)	((((u32)(n))>>8)&0x7) +#define DDR0_43_EIGHT_BANK_MODE_MASK	0x00000001 +#define DDR0_43_EIGHT_BANK_MODE_8_BANKS	0x00000001 +#define DDR0_43_EIGHT_BANK_MODE_4_BANKS	0x00000000 +#define DDR0_43_EIGHT_BANK_MODE_ENCODE(n) ((((u32)(n))&0x1)<<0) +#define DDR0_43_EIGHT_BANK_MODE_DECODE(n) ((((u32)(n))>>0)&0x1) + +#define DDR0_44				0x2C +#define DDR0_44_TRCD_MASK		0x000000FF +#define DDR0_44_TRCD_ENCODE(n)		((((u32)(n))&0xFF)<<0) +#define DDR0_44_TRCD_DECODE(n)		((((u32)(n))>>0)&0xFF) + +#endif /* CONFIG_SDRAM_PPC4xx_DENALI_DDR2 */ + +#ifndef __ASSEMBLY__ +struct sdram_timing { +	u32 wrdtr; +	u32 clktr; +}; + +/* + * Prototypes + */ +void ppc4xx_ibm_ddr2_register_dump(void); +u32 mfdcr_any(u32); +void mtdcr_any(u32, u32); +u32 ddr_wrdtr(u32); +u32 ddr_clktr(u32); +void spd_ddr_init_hang(void); +u32 DQS_autocalibration(void); +phys_size_t sdram_memsize(void); +void dcbz_area(u32 start_address, u32 num_bytes); +#endif /* __ASSEMBLY__ */ + +#endif /* _PPC4xx_SDRAM_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx-uic.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-uic.h new file mode 100644 index 00000000..05b4690a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx-uic.h @@ -0,0 +1,289 @@ +/* + *  Copyright (C) 2002 Scott McNutt <smcnutt@artesyncp.com> + * + * (C) Copyright 2008-2009 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _PPC4xx_UIC_H_ +#define _PPC4xx_UIC_H_ + +/* + * Define the number of UIC's + */ +#if defined(CONFIG_440GX) || defined(CONFIG_440SPE) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_460SX) || defined(CONFIG_APM821XX) +#define UIC_MAX		4 +#elif defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_405EX) +#define UIC_MAX		3 +#elif defined(CONFIG_440GP) || defined(CONFIG_440SP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) +#define UIC_MAX		2 +#else +#define UIC_MAX		1 +#endif + +#define IRQ_MAX		(UIC_MAX * 32) + +/* + * UIC register + */ +#define UIC_SR	0x0			/* UIC status			*/ +#define UIC_ER	0x2			/* UIC enable			*/ +#define UIC_CR	0x3			/* UIC critical			*/ +#define UIC_PR	0x4			/* UIC polarity			*/ +#define UIC_TR	0x5			/* UIC triggering		*/ +#define UIC_MSR 0x6			/* UIC masked status		*/ +#define UIC_VR	0x7			/* UIC vector			*/ +#define UIC_VCR 0x8			/* UIC vector configuration	*/ + +/* + * On 440GX we use the UICB0 as UIC0. Its the root UIC where all other UIC's + * are cascaded on. With this trick we can use the common UIC code for 440GX + * too. + */ +#if defined(CONFIG_440GX) +#define UIC0_DCR_BASE 0x200 +#define UIC1_DCR_BASE 0xc0 +#define UIC2_DCR_BASE 0xd0 +#define UIC3_DCR_BASE 0x210 +#else +#define UIC0_DCR_BASE 0xc0 +#define UIC1_DCR_BASE 0xd0 +#define UIC2_DCR_BASE 0xe0 +#define UIC3_DCR_BASE 0xf0 +#endif + +#define UIC0SR	(UIC0_DCR_BASE+0x0)	/* UIC0 status			*/ +#define UIC0ER	(UIC0_DCR_BASE+0x2)	/* UIC0 enable			*/ +#define UIC0CR	(UIC0_DCR_BASE+0x3)	/* UIC0 critical		*/ +#define UIC0PR	(UIC0_DCR_BASE+0x4)	/* UIC0 polarity		*/ +#define UIC0TR	(UIC0_DCR_BASE+0x5)	/* UIC0 triggering		*/ +#define UIC0MSR (UIC0_DCR_BASE+0x6)	/* UIC0 masked status		*/ +#define UIC0VR	(UIC0_DCR_BASE+0x7)	/* UIC0 vector			*/ +#define UIC0VCR (UIC0_DCR_BASE+0x8)	/* UIC0 vector configuration	*/ + +#define UIC1SR	(UIC1_DCR_BASE+0x0)	/* UIC1 status			*/ +#define UIC1ER	(UIC1_DCR_BASE+0x2)	/* UIC1 enable			*/ +#define UIC1CR	(UIC1_DCR_BASE+0x3)	/* UIC1 critical		*/ +#define UIC1PR	(UIC1_DCR_BASE+0x4)	/* UIC1 polarity		*/ +#define UIC1TR	(UIC1_DCR_BASE+0x5)	/* UIC1 triggering		*/ +#define UIC1MSR (UIC1_DCR_BASE+0x6)	/* UIC1 masked status		*/ +#define UIC1VR	(UIC1_DCR_BASE+0x7)	/* UIC1 vector			*/ +#define UIC1VCR (UIC1_DCR_BASE+0x8)	/* UIC1 vector configuration	*/ + +#define UIC2SR	(UIC2_DCR_BASE+0x0)	/* UIC2 status-Read Clear	*/ +#define UIC2ER	(UIC2_DCR_BASE+0x2)	/* UIC2 enable			*/ +#define UIC2CR	(UIC2_DCR_BASE+0x3)	/* UIC2 critical		*/ +#define UIC2PR	(UIC2_DCR_BASE+0x4)	/* UIC2 polarity		*/ +#define UIC2TR	(UIC2_DCR_BASE+0x5)	/* UIC2 triggering		*/ +#define UIC2MSR (UIC2_DCR_BASE+0x6)	/* UIC2 masked status		*/ +#define UIC2VR	(UIC2_DCR_BASE+0x7)	/* UIC2 vector			*/ +#define UIC2VCR (UIC2_DCR_BASE+0x8)	/* UIC2 vector configuration	*/ + +#define UIC3SR	(UIC3_DCR_BASE+0x0)	/* UIC3 status-Read Clear	*/ +#define UIC3ER	(UIC3_DCR_BASE+0x2)	/* UIC3 enable			*/ +#define UIC3CR	(UIC3_DCR_BASE+0x3)	/* UIC3 critical		*/ +#define UIC3PR	(UIC3_DCR_BASE+0x4)	/* UIC3 polarity		*/ +#define UIC3TR	(UIC3_DCR_BASE+0x5)	/* UIC3 triggering		*/ +#define UIC3MSR (UIC3_DCR_BASE+0x6)	/* UIC3 masked status		*/ +#define UIC3VR	(UIC3_DCR_BASE+0x7)	/* UIC3 vector			*/ +#define UIC3VCR (UIC3_DCR_BASE+0x8)	/* UIC3 vector configuration	*/ + +/* + * Now the interrupt vector definitions. They are different for most of + * the 4xx variants, so we need some more #ifdef's here. No mask + * definitions anymore here. For this please use the UIC_MASK macro below. + * + * Note: Please only define the interrupts really used in U-Boot here. + * Those are the cascading and EMAC/MAL related interrupt. + */ + +#if defined(CONFIG_405EP) || defined(CONFIG_405GP) +#define VECNUM_MAL_SERR		10 +#define VECNUM_MAL_TXEOB	11 +#define VECNUM_MAL_RXEOB	12 +#define VECNUM_MAL_TXDE		13 +#define VECNUM_MAL_RXDE		14 +#define VECNUM_ETH0		15 +#define VECNUM_ETH1_OFFS	2 +#define VECNUM_EIRQ6		29 +#endif /* defined(CONFIG_405EP) */ + +#if defined(CONFIG_405EZ) +#define VECNUM_USBDEV		15 +#define VECNUM_ETH0		16 +#define VECNUM_MAL_SERR		18 +#define VECNUM_MAL_TXDE		18 +#define VECNUM_MAL_RXDE		18 +#define VECNUM_MAL_TXEOB	19 +#define VECNUM_MAL_RXEOB	21 +#endif /* CONFIG_405EX */ + +#if defined(CONFIG_405EX) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_ETH0		24 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC2NCI		28 +#define VECNUM_UIC2CI		29 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) +#endif /* CONFIG_405EX */ + +#if defined(CONFIG_440GP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) +#define VECNUM_USBDEV		(32 + 23) +#define VECNUM_ETH0		(32 + 28) +#define VECNUM_ETH1_OFFS	2 +#endif /* CONFIG_440GP */ + +#if defined(CONFIG_440GX) +/* UICB 0 (440GX only) */ +/* + * All those defines below are off-by-one, so that the common UIC code + * can be used. So VECNUM_UIC1CI refers to VECNUM_UIC0CI etc. + */ +#define VECNUM_UIC1CI		0 +#define VECNUM_UIC1NCI		1 +#define VECNUM_UIC2CI		2 +#define VECNUM_UIC2NCI		3 +#define VECNUM_UIC3CI		4 +#define VECNUM_UIC3NCI		5 + +/* UIC 0, used as UIC1 on 440GX because of UICB0 */ +#define VECNUM_MAL_TXEOB	(32 + 10) +#define VECNUM_MAL_RXEOB	(32 + 11) + +/* UIC 1, used as UIC2 on 440GX because of UICB0 */ +#define VECNUM_MAL_SERR		(64 + 0) +#define VECNUM_MAL_TXDE		(64 + 1) +#define VECNUM_MAL_RXDE		(64 + 2) +#define VECNUM_ETH0		(64 + 28) +#define VECNUM_ETH1_OFFS	2 +#endif /* CONFIG_440GX */ + +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +/* UIC 0 */ +#define VECNUM_MAL_TXEOB	10 +#define VECNUM_MAL_RXEOB	11 +#define VECNUM_USBDEV		20 +#define VECNUM_ETH0		24 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC2NCI		28 +#define VECNUM_UIC2CI		29 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 0) +#define VECNUM_MAL_TXDE		(32 + 1) +#define VECNUM_MAL_RXDE		(32 + 2) + +/* UIC 2 */ +#define VECNUM_EIRQ2		(64 + 3) +#endif /* CONFIG_440EPX */ + +#if defined(CONFIG_440SP) +/* UIC 0 */ +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define VECNUM_MAL_TXDE		(32 + 2) +#define VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define VECNUM_MAL_RXEOB	(32 + 7) +#define VECNUM_ETH0		(32 + 28) +#endif /* CONFIG_440SP */ + +#if defined(CONFIG_440SPE) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define VECNUM_MAL_TXDE		(32 + 2) +#define VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define VECNUM_MAL_RXEOB	(32 + 7) +#define VECNUM_ETH0		(32 + 28) +#endif /* CONFIG_440SPE */ + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) || \ +    defined(CONFIG_APM821XX) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 2 */ +#define VECNUM_MAL_SERR		(64 + 3) +#define	VECNUM_MAL_TXDE		(64 + 4) +#define	VECNUM_MAL_RXDE		(64 + 5) +#define VECNUM_MAL_TXEOB	(64 + 6) +#define	VECNUM_MAL_RXEOB	(64 + 7) +#define	VECNUM_ETH0		(64 + 16) +#define VECNUM_ETH1_OFFS	1 +#endif /* CONFIG_460EX */ + +#if defined(CONFIG_460SX) +/* UIC 0 */ +#define VECNUM_UIC2NCI		10 +#define VECNUM_UIC2CI		11 +#define VECNUM_UIC3NCI		16 +#define VECNUM_UIC3CI		17 +#define	VECNUM_ETH0		19 +#define VECNUM_ETH1_OFFS	1 +#define VECNUM_UIC1NCI		30 +#define VECNUM_UIC1CI		31 + +/* UIC 1 */ +#define VECNUM_MAL_SERR		(32 + 1) +#define	VECNUM_MAL_TXDE		(32 + 2) +#define	VECNUM_MAL_RXDE		(32 + 3) +#define VECNUM_MAL_TXEOB	(32 + 6) +#define	VECNUM_MAL_RXEOB	(32 + 7) +#endif /* CONFIG_460EX */ + +#if !defined(VECNUM_ETH1_OFFS) +#define VECNUM_ETH1_OFFS	1 +#endif + +/* + * Mask definitions (used for example in 4xx_enet.c) + */ +#define UIC_MASK(vec)		(0x80000000 >> ((vec) & 0x1f)) +/* UIC_NR won't work for 440GX because of its specific UIC DCR addresses */ +#define UIC_NR(vec)		((vec) >> 5) + +#endif /* _PPC4xx_UIC_H_ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx.h new file mode 100644 index 00000000..e6a3bff0 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx.h @@ -0,0 +1,301 @@ +/* + * SPDX-License-Identifier:	GPL-2.0	IBM-pibs + */ + +#ifndef	__PPC4XX_H__ +#define __PPC4XX_H__ + +/* + * Include SoC specific headers + */ +#if defined(CONFIG_405EP) +#include <asm/ppc405ep.h> +#endif + +#if defined(CONFIG_405EX) +#include <asm/ppc405ex.h> +#endif + +#if defined(CONFIG_405EZ) +#include <asm/ppc405ez.h> +#endif + +#if defined(CONFIG_405GP) +#include <asm/ppc405gp.h> +#endif + +#if defined(CONFIG_440EP) || defined(CONFIG_440GR) +#include <asm/ppc440ep_gr.h> +#endif + +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) +#include <asm/ppc440epx_grx.h> +#endif + +#if defined(CONFIG_440GP) +#include <asm/ppc440gp.h> +#endif + +#if defined(CONFIG_440GX) +#include <asm/ppc440gx.h> +#endif + +#if defined(CONFIG_440SP) +#include <asm/ppc440sp.h> +#endif + +#if defined(CONFIG_440SPE) +#include <asm/ppc440spe.h> +#endif + +#if defined(CONFIG_460EX) || defined(CONFIG_460GT) +#include <asm/ppc460ex_gt.h> +#endif + +#if defined(CONFIG_460SX) +#include <asm/ppc460sx.h> +#endif + +#if defined(CONFIG_APM821XX) +#include <asm/apm821xx.h> +#endif + +/* + * Common registers for all SoC's + */ +/* DCR registers */ +#define PLB3A0_ACR	0x0077 +#define PLB4A0_ACR	0x0081 +#define PLB4A1_ACR	0x0089 + +/* CPR register declarations */ + +#define PLB4Ax_ACR_PPM_MASK		0xf0000000 +#define PLB4Ax_ACR_PPM_FIXED		0x00000000 +#define PLB4Ax_ACR_PPM_FAIR		0xd0000000 +#define PLB4Ax_ACR_HBU_MASK		0x08000000 +#define PLB4Ax_ACR_HBU_DISABLED		0x00000000 +#define PLB4Ax_ACR_HBU_ENABLED		0x08000000 +#define PLB4Ax_ACR_RDP_MASK		0x06000000 +#define PLB4Ax_ACR_RDP_DISABLED		0x00000000 +#define PLB4Ax_ACR_RDP_2DEEP		0x02000000 +#define PLB4Ax_ACR_RDP_3DEEP		0x04000000 +#define PLB4Ax_ACR_RDP_4DEEP		0x06000000 +#define PLB4Ax_ACR_WRP_MASK		0x01000000 +#define PLB4Ax_ACR_WRP_DISABLED		0x00000000 +#define PLB4Ax_ACR_WRP_2DEEP		0x01000000 + +/* + * External Bus Controller + */ +/* Values for EBC0_CFGADDR register - indirect addressing of these regs */ +#define PB0CR		0x00	/* periph bank 0 config reg		*/ +#define PB1CR		0x01	/* periph bank 1 config reg		*/ +#define PB2CR		0x02	/* periph bank 2 config reg		*/ +#define PB3CR		0x03	/* periph bank 3 config reg		*/ +#define PB4CR		0x04	/* periph bank 4 config reg		*/ +#define PB5CR		0x05	/* periph bank 5 config reg		*/ +#define PB6CR		0x06	/* periph bank 6 config reg		*/ +#define PB7CR		0x07	/* periph bank 7 config reg		*/ +#define PB0AP		0x10	/* periph bank 0 access parameters	*/ +#define PB1AP		0x11	/* periph bank 1 access parameters	*/ +#define PB2AP		0x12	/* periph bank 2 access parameters	*/ +#define PB3AP		0x13	/* periph bank 3 access parameters	*/ +#define PB4AP		0x14	/* periph bank 4 access parameters	*/ +#define PB5AP		0x15	/* periph bank 5 access parameters	*/ +#define PB6AP		0x16	/* periph bank 6 access parameters	*/ +#define PB7AP		0x17	/* periph bank 7 access parameters	*/ +#define PBEAR		0x20	/* periph bus error addr reg		*/ +#define PBESR0		0x21	/* periph bus error status reg 0	*/ +#define PBESR1		0x22	/* periph bus error status reg 1	*/ +#define EBC0_CFG	0x23	/* external bus configuration reg	*/ + +/* + * GPIO macro register defines + */ +/* todo: merge with gpio.h header */ +#define GPIO_BASE		GPIO0_BASE + +#define GPIO0_OR		(GPIO0_BASE + 0x0) +#define GPIO0_TCR		(GPIO0_BASE + 0x4) +#define GPIO0_OSRL		(GPIO0_BASE + 0x8) +#define GPIO0_OSRH		(GPIO0_BASE + 0xC) +#define GPIO0_TSRL		(GPIO0_BASE + 0x10) +#define GPIO0_TSRH		(GPIO0_BASE + 0x14) +#define GPIO0_ODR		(GPIO0_BASE + 0x18) +#define GPIO0_IR		(GPIO0_BASE + 0x1C) +#define GPIO0_RR1		(GPIO0_BASE + 0x20) +#define GPIO0_RR2		(GPIO0_BASE + 0x24) +#define GPIO0_RR3		(GPIO0_BASE + 0x28) +#define GPIO0_ISR1L		(GPIO0_BASE + 0x30) +#define GPIO0_ISR1H		(GPIO0_BASE + 0x34) +#define GPIO0_ISR2L		(GPIO0_BASE + 0x38) +#define GPIO0_ISR2H		(GPIO0_BASE + 0x3C) +#define GPIO0_ISR3L		(GPIO0_BASE + 0x40) +#define GPIO0_ISR3H		(GPIO0_BASE + 0x44) + +#define GPIO1_OR		(GPIO1_BASE + 0x0) +#define GPIO1_TCR		(GPIO1_BASE + 0x4) +#define GPIO1_OSRL		(GPIO1_BASE + 0x8) +#define GPIO1_OSRH		(GPIO1_BASE + 0xC) +#define GPIO1_TSRL		(GPIO1_BASE + 0x10) +#define GPIO1_TSRH		(GPIO1_BASE + 0x14) +#define GPIO1_ODR		(GPIO1_BASE + 0x18) +#define GPIO1_IR		(GPIO1_BASE + 0x1C) +#define GPIO1_RR1		(GPIO1_BASE + 0x20) +#define GPIO1_RR2		(GPIO1_BASE + 0x24) +#define GPIO1_RR3		(GPIO1_BASE + 0x28) +#define GPIO1_ISR1L		(GPIO1_BASE + 0x30) +#define GPIO1_ISR1H		(GPIO1_BASE + 0x34) +#define GPIO1_ISR2L		(GPIO1_BASE + 0x38) +#define GPIO1_ISR2H		(GPIO1_BASE + 0x3C) +#define GPIO1_ISR3L		(GPIO1_BASE + 0x40) +#define GPIO1_ISR3H		(GPIO1_BASE + 0x44) + +/* General Purpose Timer (GPT) Register Offsets */ +#define GPT0_TBC		0x00000000 +#define GPT0_IM			0x00000018 +#define GPT0_ISS		0x0000001C +#define GPT0_ISC		0x00000020 +#define GPT0_IE			0x00000024 +#define GPT0_COMP0		0x00000080 +#define GPT0_COMP1		0x00000084 +#define GPT0_COMP2		0x00000088 +#define GPT0_COMP3		0x0000008C +#define GPT0_COMP4		0x00000090 +#define GPT0_COMP5		0x00000094 +#define GPT0_COMP6		0x00000098 +#define GPT0_MASK0		0x000000C0 +#define GPT0_MASK1		0x000000C4 +#define GPT0_MASK2		0x000000C8 +#define GPT0_MASK3		0x000000CC +#define GPT0_MASK4		0x000000D0 +#define GPT0_MASK5		0x000000D4 +#define GPT0_MASK6		0x000000D8 +#define GPT0_DCT0		0x00000110 +#define GPT0_DCIS		0x0000011C + +#if defined(CONFIG_440) +#include <asm/ppc440.h> +#else +#include <asm/ppc405.h> +#endif + +#include <asm/ppc4xx-sdram.h> +#include <asm/ppc4xx-ebc.h> +#if !defined(CONFIG_XILINX_440) +#include <asm/ppc4xx-uic.h> +#endif + +/* + * Macro for generating register field mnemonics + */ +#define	PPC_REG_BITS		32 +#define	PPC_REG_VAL(bit, value)	((value) << ((PPC_REG_BITS - 1) - (bit))) + +/* + * Elide casts when assembling register mnemonics + */ +#ifndef __ASSEMBLY__ +#define	static_cast(type, val)	(type)(val) +#else +#define	static_cast(type, val)	(val) +#endif + +/* + * Common stuff for 4xx (405 and 440) + */ + +#define EXC_OFF_SYS_RESET	0x0100	/* System reset			*/ +#define _START_OFFSET		(EXC_OFF_SYS_RESET + 0x2000) + +#define RESET_VECTOR	0xfffffffc +#define CACHELINE_MASK	(CONFIG_SYS_CACHELINE_SIZE - 1) /* Address mask for +						cache line aligned data. */ + +#define CPR0_DCR_BASE	0x0C +#define CPR0_CFGADDR	(CPR0_DCR_BASE + 0x0) +#define CPR0_CFGDATA	(CPR0_DCR_BASE + 0x1) + +#define SDR_DCR_BASE	0x0E +#define SDR0_CFGADDR	(SDR_DCR_BASE + 0x0) +#define SDR0_CFGDATA	(SDR_DCR_BASE + 0x1) + +#define SDRAM_DCR_BASE	0x10 +#define SDRAM0_CFGADDR	(SDRAM_DCR_BASE + 0x0) +#define SDRAM0_CFGDATA	(SDRAM_DCR_BASE + 0x1) + +#define EBC_DCR_BASE	0x12 +#define EBC0_CFGADDR	(EBC_DCR_BASE + 0x0) +#define EBC0_CFGDATA	(EBC_DCR_BASE + 0x1) + +/* + * Macros for indirect DCR access + */ +#define mtcpr(reg, d)	\ +  do { mtdcr(CPR0_CFGADDR, reg); mtdcr(CPR0_CFGDATA, d); } while (0) +#define mfcpr(reg, d)	\ +  do { mtdcr(CPR0_CFGADDR, reg); d = mfdcr(CPR0_CFGDATA); } while (0) + +#define mtebc(reg, d)	\ +  do { mtdcr(EBC0_CFGADDR, reg); mtdcr(EBC0_CFGDATA, d); } while (0) +#define mfebc(reg, d)	\ +  do { mtdcr(EBC0_CFGADDR, reg); d = mfdcr(EBC0_CFGDATA); } while (0) + +#define mtsdram(reg, d)	\ +  do { mtdcr(SDRAM0_CFGADDR, reg); mtdcr(SDRAM0_CFGDATA, d); } while (0) +#define mfsdram(reg, d)	\ +  do { mtdcr(SDRAM0_CFGADDR, reg); d = mfdcr(SDRAM0_CFGDATA); } while (0) + +#define mtsdr(reg, d)	\ +  do { mtdcr(SDR0_CFGADDR, reg); mtdcr(SDR0_CFGDATA, d); } while (0) +#define mfsdr(reg, d)	\ +  do { mtdcr(SDR0_CFGADDR, reg); d = mfdcr(SDR0_CFGDATA); } while (0) + +#ifndef __ASSEMBLY__ + +typedef struct +{ +	unsigned long freqDDR; +	unsigned long freqEBC; +	unsigned long freqOPB; +	unsigned long freqPCI; +	unsigned long freqPLB; +	unsigned long freqTmrClk; +	unsigned long freqUART; +	unsigned long freqProcessor; +	unsigned long freqVCOHz; +	unsigned long freqVCOMhz;	/* in MHz                          */ +	unsigned long pciClkSync;	/* PCI clock is synchronous        */ +	unsigned long pciIntArbEn;	/* Internal PCI arbiter is enabled */ +	unsigned long pllExtBusDiv; +	unsigned long pllFbkDiv; +	unsigned long pllFwdDiv; +	unsigned long pllFwdDivA; +	unsigned long pllFwdDivB; +	unsigned long pllOpbDiv; +	unsigned long pllPciDiv; +	unsigned long pllPlbDiv; +} PPC4xx_SYS_INFO; + +static inline u32 get_mcsr(void) +{ +	u32 val; + +	asm volatile("mfspr %0, 0x23c" : "=r" (val) :); +	return val; +} + +static inline void set_mcsr(u32 val) +{ +	asm volatile("mtspr 0x23c, %0" : "=r" (val) :); +} + +int ppc4xx_pci_sync_clock_config(u32 async); + +#endif	/* __ASSEMBLY__ */ + +/* for multi-cpu support */ +#define NA_OR_UNKNOWN_CPU	-1 + +#endif	/* __PPC4XX_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ppc4xx_config.h b/roms/u-boot/arch/powerpc/include/asm/ppc4xx_config.h new file mode 100644 index 00000000..f38fde54 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ppc4xx_config.h @@ -0,0 +1,25 @@ +/* + * (C) Copyright 2008-2009 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * (C) Copyright 2009 + * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __PPC4xx_CONFIG_H +#define __PPC4xx_CONFIG_H + +#include <common.h> + +struct ppc4xx_config { +	char label[16]; +	char description[64]; +	u8 val[CONFIG_4xx_CONFIG_BLOCKSIZE]; +}; + +extern struct ppc4xx_config ppc4xx_config_val[]; +extern int ppc4xx_config_count; + +#endif /* __PPC4xx_CONFIG_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/processor.h b/roms/u-boot/arch/powerpc/include/asm/processor.h new file mode 100644 index 00000000..a6f121e1 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/processor.h @@ -0,0 +1,1379 @@ +#ifndef __ASM_PPC_PROCESSOR_H +#define __ASM_PPC_PROCESSOR_H + +/* + * Default implementation of macro that returns current + * instruction pointer ("program counter"). + */ +#define current_text_addr() ({ __label__ _l; _l: &&_l;}) + +#include <asm/ptrace.h> +#include <asm/types.h> + +/* Machine State Register (MSR) Fields */ + +#ifdef CONFIG_PPC64BRIDGE +#define MSR_SF		(1<<63) +#define MSR_ISF		(1<<61) +#endif /* CONFIG_PPC64BRIDGE */ +#define MSR_UCLE	(1<<26)		/* User-mode cache lock enable (e500) */ +#define MSR_VEC		(1<<25)		/* Enable AltiVec(74xx) */ +#define MSR_SPE		(1<<25)		/* Enable SPE(e500) */ +#define MSR_POW		(1<<18)		/* Enable Power Management */ +#define MSR_WE		(1<<18)		/* Wait State Enable */ +#define MSR_TGPR	(1<<17)		/* TLB Update registers in use */ +#define MSR_CE		(1<<17)		/* Critical Interrupt Enable */ +#define MSR_ILE		(1<<16)		/* Interrupt Little Endian */ +#define MSR_EE		(1<<15)		/* External Interrupt Enable */ +#define MSR_PR		(1<<14)		/* Problem State / Privilege Level */ +#define MSR_FP		(1<<13)		/* Floating Point enable */ +#define MSR_ME		(1<<12)		/* Machine Check Enable */ +#define MSR_FE0		(1<<11)		/* Floating Exception mode 0 */ +#define MSR_SE		(1<<10)		/* Single Step */ +#define MSR_DWE		(1<<10)		/* Debug Wait Enable (4xx) */ +#define MSR_UBLE	(1<<10)		/* BTB lock enable (e500) */ +#define MSR_BE		(1<<9)		/* Branch Trace */ +#define MSR_DE		(1<<9)		/* Debug Exception Enable */ +#define MSR_FE1		(1<<8)		/* Floating Exception mode 1 */ +#define MSR_IP		(1<<6)		/* Exception prefix 0x000/0xFFF */ +#define MSR_IR		(1<<5)		/* Instruction Relocate */ +#define MSR_IS		(1<<5)		/* Book E Instruction space */ +#define MSR_DR		(1<<4)		/* Data Relocate */ +#define MSR_DS		(1<<4)		/* Book E Data space */ +#define MSR_PE		(1<<3)		/* Protection Enable */ +#define MSR_PX		(1<<2)		/* Protection Exclusive Mode */ +#define MSR_PMM		(1<<2)		/* Performance monitor mark bit (e500) */ +#define MSR_RI		(1<<1)		/* Recoverable Exception */ +#define MSR_LE		(1<<0)		/* Little Endian */ + +#ifdef CONFIG_APUS_FAST_EXCEPT +#define MSR_		MSR_ME|MSR_IP|MSR_RI +#else +#define MSR_		MSR_ME|MSR_RI +#endif +#ifndef CONFIG_E500 +#define MSR_KERNEL	MSR_|MSR_IR|MSR_DR +#else +#define MSR_KERNEL	MSR_ME +#endif + +/* Floating Point Status and Control Register (FPSCR) Fields */ + +#define FPSCR_FX	0x80000000	/* FPU exception summary */ +#define FPSCR_FEX	0x40000000	/* FPU enabled exception summary */ +#define FPSCR_VX	0x20000000	/* Invalid operation summary */ +#define FPSCR_OX	0x10000000	/* Overflow exception summary */ +#define FPSCR_UX	0x08000000	/* Underflow exception summary */ +#define FPSCR_ZX	0x04000000	/* Zero-devide exception summary */ +#define FPSCR_XX	0x02000000	/* Inexact exception summary */ +#define FPSCR_VXSNAN	0x01000000	/* Invalid op for SNaN */ +#define FPSCR_VXISI	0x00800000	/* Invalid op for Inv - Inv */ +#define FPSCR_VXIDI	0x00400000	/* Invalid op for Inv / Inv */ +#define FPSCR_VXZDZ	0x00200000	/* Invalid op for Zero / Zero */ +#define FPSCR_VXIMZ	0x00100000	/* Invalid op for Inv * Zero */ +#define FPSCR_VXVC	0x00080000	/* Invalid op for Compare */ +#define FPSCR_FR	0x00040000	/* Fraction rounded */ +#define FPSCR_FI	0x00020000	/* Fraction inexact */ +#define FPSCR_FPRF	0x0001f000	/* FPU Result Flags */ +#define FPSCR_FPCC	0x0000f000	/* FPU Condition Codes */ +#define FPSCR_VXSOFT	0x00000400	/* Invalid op for software request */ +#define FPSCR_VXSQRT	0x00000200	/* Invalid op for square root */ +#define FPSCR_VXCVI	0x00000100	/* Invalid op for integer convert */ +#define FPSCR_VE	0x00000080	/* Invalid op exception enable */ +#define FPSCR_OE	0x00000040	/* IEEE overflow exception enable */ +#define FPSCR_UE	0x00000020	/* IEEE underflow exception enable */ +#define FPSCR_ZE	0x00000010	/* IEEE zero divide exception enable */ +#define FPSCR_XE	0x00000008	/* FP inexact exception enable */ +#define FPSCR_NI	0x00000004	/* FPU non IEEE-Mode */ +#define FPSCR_RN	0x00000003	/* FPU rounding control */ + +/* Special Purpose Registers (SPRNs)*/ + +/* PPC440 Architecture is BOOK-E */ +#ifdef CONFIG_440 +#define CONFIG_BOOKE +#endif + +#define SPRN_CCR0	0x3B3	/* Core Configuration Register 0 */ +#ifdef CONFIG_BOOKE +#define SPRN_CCR1	0x378	/* Core Configuration Register for 440 only */ +#endif +#define SPRN_CDBCR	0x3D7	/* Cache Debug Control Register */ +#define SPRN_CTR	0x009	/* Count Register */ +#define SPRN_DABR	0x3F5	/* Data Address Breakpoint Register */ +#ifndef CONFIG_BOOKE +#define SPRN_DAC1	0x3F6	/* Data Address Compare 1 */ +#define SPRN_DAC2	0x3F7	/* Data Address Compare 2 */ +#else +#define SPRN_DAC1	0x13C	/* Book E Data Address Compare 1 */ +#define SPRN_DAC2	0x13D	/* Book E Data Address Compare 2 */ +#endif	/* CONFIG_BOOKE */ +#define SPRN_DAR	0x013	/* Data Address Register */ +#define SPRN_DBAT0L	0x219	/* Data BAT 0 Lower Register */ +#define SPRN_DBAT0U	0x218	/* Data BAT 0 Upper Register */ +#define SPRN_DBAT1L	0x21B	/* Data BAT 1 Lower Register */ +#define SPRN_DBAT1U	0x21A	/* Data BAT 1 Upper Register */ +#define SPRN_DBAT2L	0x21D	/* Data BAT 2 Lower Register */ +#define SPRN_DBAT2U	0x21C	/* Data BAT 2 Upper Register */ +#define SPRN_DBAT3L	0x21F	/* Data BAT 3 Lower Register */ +#define SPRN_DBAT3U	0x21E	/* Data BAT 3 Upper Register */ +#define SPRN_DBAT4L	0x239	/* Data BAT 4 Lower Register */ +#define SPRN_DBAT4U	0x238	/* Data BAT 4 Upper Register */ +#define SPRN_DBAT5L	0x23B	/* Data BAT 5 Lower Register */ +#define SPRN_DBAT5U	0x23A	/* Data BAT 5 Upper Register */ +#define SPRN_DBAT6L	0x23D	/* Data BAT 6 Lower Register */ +#define SPRN_DBAT6U	0x23C	/* Data BAT 6 Upper Register */ +#define SPRN_DBAT7L	0x23F	/* Data BAT 7 Lower Register */ +#define SPRN_DBAT7U	0x23E	/* Data BAT 7 Lower Register */ +#define SPRN_DBCR	0x3F2	/* Debug Control Regsiter */ +#define   DBCR_EDM	0x80000000 +#define   DBCR_IDM	0x40000000 +#define   DBCR_RST(x)	(((x) & 0x3) << 28) +#define     DBCR_RST_NONE		0 +#define     DBCR_RST_CORE		1 +#define     DBCR_RST_CHIP		2 +#define     DBCR_RST_SYSTEM		3 +#define   DBCR_IC	0x08000000	/* Instruction Completion Debug Evnt */ +#define   DBCR_BT	0x04000000	/* Branch Taken Debug Event */ +#define   DBCR_EDE	0x02000000	/* Exception Debug Event */ +#define   DBCR_TDE	0x01000000	/* TRAP Debug Event */ +#define   DBCR_FER	0x00F80000	/* First Events Remaining Mask */ +#define   DBCR_FT	0x00040000	/* Freeze Timers on Debug Event */ +#define   DBCR_IA1	0x00020000	/* Instr. Addr. Compare 1 Enable */ +#define   DBCR_IA2	0x00010000	/* Instr. Addr. Compare 2 Enable */ +#define   DBCR_D1R	0x00008000	/* Data Addr. Compare 1 Read Enable */ +#define   DBCR_D1W	0x00004000	/* Data Addr. Compare 1 Write Enable */ +#define   DBCR_D1S(x)	(((x) & 0x3) << 12)	/* Data Adrr. Compare 1 Size */ +#define     DAC_BYTE	0 +#define     DAC_HALF	1 +#define     DAC_WORD	2 +#define     DAC_QUAD	3 +#define   DBCR_D2R	0x00000800	/* Data Addr. Compare 2 Read Enable */ +#define   DBCR_D2W	0x00000400	/* Data Addr. Compare 2 Write Enable */ +#define   DBCR_D2S(x)	(((x) & 0x3) << 8)	/* Data Addr. Compare 2 Size */ +#define   DBCR_SBT	0x00000040	/* Second Branch Taken Debug Event */ +#define   DBCR_SED	0x00000020	/* Second Exception Debug Event */ +#define   DBCR_STD	0x00000010	/* Second Trap Debug Event */ +#define   DBCR_SIA	0x00000008	/* Second IAC Enable */ +#define   DBCR_SDA	0x00000004	/* Second DAC Enable */ +#define   DBCR_JOI	0x00000002	/* JTAG Serial Outbound Int. Enable */ +#define   DBCR_JII	0x00000001	/* JTAG Serial Inbound Int. Enable */ +#ifndef CONFIG_BOOKE +#define SPRN_DBCR0	0x3F2		/* Debug Control Register 0 */ +#else +#define SPRN_DBCR0	0x134		/* Book E Debug Control Register 0 */ +#endif /* CONFIG_BOOKE */ +#ifndef CONFIG_BOOKE +#define SPRN_DBCR1	0x3BD	/* Debug Control Register 1 */ +#define SPRN_DBSR	0x3F0	/* Debug Status Register */ +#else +#define SPRN_DBCR1	0x135		/* Book E Debug Control Register 1 */ +#ifdef CONFIG_BOOKE +#define	SPRN_DBDR	0x3f3		/* Debug Data Register */ +#endif +#define SPRN_DBSR	0x130		/* Book E Debug Status Register */ +#define   DBSR_IC	    0x08000000	/* Book E Instruction Completion  */ +#define   DBSR_TIE	    0x01000000	/* Book E Trap Instruction Event */ +#endif /* CONFIG_BOOKE */ +#define SPRN_DCCR	0x3FA	/* Data Cache Cacheability Register */ +#define   DCCR_NOCACHE		0	/* Noncacheable */ +#define   DCCR_CACHE		1	/* Cacheable */ +#ifndef CONFIG_BOOKE +#define	SPRN_DCDBTRL	0x39c	/* Data Cache Debug Tag Register Low */ +#define	SPRN_DCDBTRH	0x39d	/* Data Cache Debug Tag Register High */ +#endif +#define SPRN_DCMP	0x3D1	/* Data TLB Compare Register */ +#define SPRN_DCWR	0x3BA	/* Data Cache Write-thru Register */ +#define   DCWR_COPY		0	/* Copy-back */ +#define   DCWR_WRITE		1	/* Write-through */ +#ifndef CONFIG_BOOKE +#define SPRN_DEAR	0x3D5	/* Data Error Address Register */ +#else +#define SPRN_DEAR	0x03D	/* Book E Data Error Address Register */ +#endif /* CONFIG_BOOKE */ +#define SPRN_DEC	0x016	/* Decrement Register */ +#define SPRN_DMISS	0x3D0	/* Data TLB Miss Register */ +#ifdef CONFIG_BOOKE +#define	SPRN_DNV0	0x390	/* Data Cache Normal Victim 0 */ +#define	SPRN_DNV1	0x391	/* Data Cache Normal Victim 1 */ +#define	SPRN_DNV2	0x392	/* Data Cache Normal Victim 2 */ +#define	SPRN_DNV3	0x393	/* Data Cache Normal Victim 3 */ +#endif +#define SPRN_DSISR	0x012	/* Data Storage Interrupt Status Register */ +#ifdef CONFIG_BOOKE +#define	SPRN_DTV0	0x394	/* Data Cache Transient Victim 0 */ +#define	SPRN_DTV1	0x395	/* Data Cache Transient Victim 1 */ +#define	SPRN_DTV2	0x396	/* Data Cache Transient Victim 2 */ +#define	SPRN_DTV3	0x397	/* Data Cache Transient Victim 3 */ +#define	SPRN_DVLIM	0x398	/* Data Cache Victim Limit */ +#endif +#define SPRN_EAR	0x11A	/* External Address Register */ +#ifndef CONFIG_BOOKE +#define SPRN_ESR	0x3D4	/* Exception Syndrome Register */ +#else +#define SPRN_ESR	0x03E		/* Book E Exception Syndrome Register */ +#endif /* CONFIG_BOOKE */ +#define   ESR_IMCP	0x80000000	/* Instr. Machine Check - Protection */ +#define   ESR_IMCN	0x40000000	/* Instr. Machine Check - Non-config */ +#define   ESR_IMCB	0x20000000	/* Instr. Machine Check - Bus error */ +#define   ESR_IMCT	0x10000000	/* Instr. Machine Check - Timeout */ +#define   ESR_PIL	0x08000000	/* Program Exception - Illegal */ +#define   ESR_PPR	0x04000000	/* Program Exception - Priveleged */ +#define   ESR_PTR	0x02000000	/* Program Exception - Trap */ +#define   ESR_DST	0x00800000	/* Storage Exception - Data miss */ +#define   ESR_DIZ	0x00400000	/* Storage Exception - Zone fault */ +#define SPRN_EVPR	0x3D6	/* Exception Vector Prefix Register */ +#define SPRN_HASH1	0x3D2	/* Primary Hash Address Register */ +#define SPRN_HASH2	0x3D3	/* Secondary Hash Address Resgister */ +#define SPRN_HID0	0x3F0	/* Hardware Implementation Register 0 */ + +#define HID0_ICE_SHIFT		15 +#define HID0_DCE_SHIFT		14 +#define HID0_DLOCK_SHIFT	12 + +#define   HID0_EMCP	(1<<31)		/* Enable Machine Check pin */ +#define   HID0_EBA	(1<<29)		/* Enable Bus Address Parity */ +#define   HID0_EBD	(1<<28)		/* Enable Bus Data Parity */ +#define   HID0_SBCLK	(1<<27) +#define   HID0_EICE	(1<<26) +#define   HID0_ECLK	(1<<25) +#define   HID0_PAR	(1<<24) +#define   HID0_DOZE	(1<<23) +#define   HID0_NAP	(1<<22) +#define   HID0_SLEEP	(1<<21) +#define   HID0_DPM	(1<<20) +#define   HID0_ICE	(1<<HID0_ICE_SHIFT)	/* Instruction Cache Enable */ +#define   HID0_DCE	(1<<HID0_DCE_SHIFT)	/* Data Cache Enable */ +#define   HID0_TBEN	(1<<14)		/* Time Base Enable */ +#define   HID0_ILOCK	(1<<13)		/* Instruction Cache Lock */ +#define   HID0_DLOCK	(1<<HID0_DLOCK_SHIFT)	/* Data Cache Lock */ +#define   HID0_ICFI	(1<<11)		/* Instr. Cache Flash Invalidate */ +#define   HID0_DCFI	(1<<10)		/* Data Cache Flash Invalidate */ +#define   HID0_DCI	HID0_DCFI +#define   HID0_SPD	(1<<9)		/* Speculative disable */ +#define   HID0_ENMAS7	(1<<7)		/* Enable MAS7 Update for 36-bit phys */ +#define   HID0_SGE	(1<<7)		/* Store Gathering Enable */ +#define   HID0_SIED	HID_SGE		/* Serial Instr. Execution [Disable] */ +#define   HID0_DCFA	(1<<6)		/* Data Cache Flush Assist */ +#define   HID0_BTIC	(1<<5)		/* Branch Target Instruction Cache Enable */ +#define   HID0_ABE	(1<<3)		/* Address Broadcast Enable */ +#define   HID0_BHTE	(1<<2)		/* Branch History Table Enable */ +#define   HID0_BTCD	(1<<1)		/* Branch target cache disable */ +#define SPRN_HID1	0x3F1	/* Hardware Implementation Register 1 */ +#define	  HID1_RFXE	(1<<17)		/* Read Fault Exception Enable */ +#define	  HID1_ASTME	(1<<13)		/* Address bus streaming mode */ +#define	  HID1_ABE	(1<<12)		/* Address broadcast enable */ +#define	  HID1_MBDD	(1<<6)		/* optimized sync instruction */ +#define SPRN_IABR	0x3F2	/* Instruction Address Breakpoint Register */ +#ifndef CONFIG_BOOKE +#define SPRN_IAC1	0x3F4	/* Instruction Address Compare 1 */ +#define SPRN_IAC2	0x3F5	/* Instruction Address Compare 2 */ +#else +#define SPRN_IAC1	0x138	/* Book E Instruction Address Compare 1 */ +#define SPRN_IAC2	0x139	/* Book E Instruction Address Compare 2 */ +#endif /* CONFIG_BOOKE */ +#define SPRN_IBAT0L	0x211	/* Instruction BAT 0 Lower Register */ +#define SPRN_IBAT0U	0x210	/* Instruction BAT 0 Upper Register */ +#define SPRN_IBAT1L	0x213	/* Instruction BAT 1 Lower Register */ +#define SPRN_IBAT1U	0x212	/* Instruction BAT 1 Upper Register */ +#define SPRN_IBAT2L	0x215	/* Instruction BAT 2 Lower Register */ +#define SPRN_IBAT2U	0x214	/* Instruction BAT 2 Upper Register */ +#define SPRN_IBAT3L	0x217	/* Instruction BAT 3 Lower Register */ +#define SPRN_IBAT3U	0x216	/* Instruction BAT 3 Upper Register */ +#define SPRN_IBAT4L	0x231	/* Instruction BAT 4 Lower Register */ +#define SPRN_IBAT4U	0x230	/* Instruction BAT 4 Upper Register */ +#define SPRN_IBAT5L	0x233	/* Instruction BAT 5 Lower Register */ +#define SPRN_IBAT5U	0x232	/* Instruction BAT 5 Upper Register */ +#define SPRN_IBAT6L	0x235	/* Instruction BAT 6 Lower Register */ +#define SPRN_IBAT6U	0x234	/* Instruction BAT 6 Upper Register */ +#define SPRN_IBAT7L	0x237	/* Instruction BAT 7 Lower Register */ +#define SPRN_IBAT7U	0x236	/* Instruction BAT 7 Upper Register */ +#define SPRN_ICCR	0x3FB	/* Instruction Cache Cacheability Register */ +#define   ICCR_NOCACHE		0	/* Noncacheable */ +#define   ICCR_CACHE		1	/* Cacheable */ +#define SPRN_ICDBDR	0x3D3	/* Instruction Cache Debug Data Register */ +#ifdef CONFIG_BOOKE +#define SPRN_ICDBTRL	0x39e	/* instruction cache debug tag register low */ +#define	SPRN_ICDBTRH	0x39f	/* instruction cache debug tag register high */ +#endif +#define SPRN_ICMP	0x3D5	/* Instruction TLB Compare Register */ +#define SPRN_ICTC	0x3FB	/* Instruction Cache Throttling Control Reg */ +#define SPRN_IMISS	0x3D4	/* Instruction TLB Miss Register */ +#define SPRN_IMMR	0x27E	/* Internal Memory Map Register */ +#ifdef CONFIG_BOOKE +#define	SPRN_INV0	0x370	/* Instruction Cache Normal Victim 0 */ +#define	SPRN_INV1	0x371	/* Instruction Cache Normal Victim 1 */ +#define	SPRN_INV2	0x372	/* Instruction Cache Normal Victim 2 */ +#define	SPRN_INV3	0x373	/* Instruction Cache Normal Victim 3 */ +#define	SPRN_ITV0	0x374	/* Instruction Cache Transient Victim 0 */ +#define	SPRN_ITV1	0x375	/* Instruction Cache Transient Victim 1 */ +#define	SPRN_ITV2	0x376	/* Instruction Cache Transient Victim 2 */ +#define	SPRN_ITV3	0x377	/* Instruction Cache Transient Victim 3 */ +#define	SPRN_IVLIM	0x399	/* Instruction Cache Victim Limit */ +#endif +#define SPRN_LDSTCR	0x3F8	/* Load/Store Control Register */ +#define SPRN_L2CR	0x3F9	/* Level 2 Cache Control Regsiter */ +#define SPRN_LR		0x008	/* Link Register */ +#define SPRN_MBAR	0x137	/* System memory base address */ +#define SPRN_MMCR0	0x3B8	/* Monitor Mode Control Register 0 */ +#define SPRN_MMCR1	0x3BC	/* Monitor Mode Control Register 1 */ +#ifdef CONFIG_BOOKE +#define	SPRN_MMUCR	0x3b2	/* MMU Control Register */ +#endif +#define SPRN_PBL1	0x3FC	/* Protection Bound Lower 1 */ +#define SPRN_PBL2	0x3FE	/* Protection Bound Lower 2 */ +#define SPRN_PBU1	0x3FD	/* Protection Bound Upper 1 */ +#define SPRN_PBU2	0x3FF	/* Protection Bound Upper 2 */ +#ifndef CONFIG_BOOKE +#define SPRN_PID	0x3B1	/* Process ID */ +#define SPRN_PIR	0x3FF	/* Processor Identification Register */ +#else +#define SPRN_PID	0x030	/* Book E Process ID */ +#define SPRN_PIR	0x11E	/* Book E Processor Identification Register */ +#endif /* CONFIG_BOOKE */ +#define SPRN_PIT	0x3DB	/* Programmable Interval Timer */ +#define SPRN_PMC1	0x3B9	/* Performance Counter Register 1 */ +#define SPRN_PMC2	0x3BA	/* Performance Counter Register 2 */ +#define SPRN_PMC3	0x3BD	/* Performance Counter Register 3 */ +#define SPRN_PMC4	0x3BE	/* Performance Counter Register 4 */ +#define SPRN_PVR	0x11F	/* Processor Version Register */ +#define SPRN_RPA	0x3D6	/* Required Physical Address Register */ +#ifdef CONFIG_BOOKE +#define	SPRN_RSTCFG	0x39b	/* Reset Configuration */ +#endif +#define SPRN_SDA	0x3BF	/* Sampled Data Address Register */ +#define SPRN_SDR1	0x019	/* MMU Hash Base Register */ +#define SPRN_SGR	0x3B9	/* Storage Guarded Register */ +#define   SGR_NORMAL		0 +#define   SGR_GUARDED		1 +#define SPRN_SIA	0x3BB	/* Sampled Instruction Address Register */ +#define SPRN_SPRG0	0x110	/* Special Purpose Register General 0 */ +#define SPRN_SPRG1	0x111	/* Special Purpose Register General 1 */ +#define SPRN_SPRG2	0x112	/* Special Purpose Register General 2 */ +#define SPRN_SPRG3	0x113	/* Special Purpose Register General 3 */ +#define SPRN_SPRG4	0x114	/* Special Purpose Register General 4 */ +#define SPRN_SPRG5	0x115	/* Special Purpose Register General 5 */ +#define SPRN_SPRG6	0x116	/* Special Purpose Register General 6 */ +#define SPRN_SPRG7	0x117	/* Special Purpose Register General 7 */ +#define SPRN_SRR0	0x01A	/* Save/Restore Register 0 */ +#define SPRN_SRR1	0x01B	/* Save/Restore Register 1 */ +#define SPRN_SRR2	0x3DE	/* Save/Restore Register 2 */ +#define SPRN_SRR3	0x3DF	/* Save/Restore Register 3 */ + +#ifdef CONFIG_BOOKE +#define SPRN_SVR	0x3FF	/* System Version Register */ +#else +#define SPRN_SVR	0x11E	/* System Version Register */ +#endif +#define SPRN_TBHI	0x3DC	/* Time Base High */ +#define SPRN_TBHU	0x3CC	/* Time Base High User-mode */ +#define SPRN_TBLO	0x3DD	/* Time Base Low */ +#define SPRN_TBLU	0x3CD	/* Time Base Low User-mode */ +#define SPRN_TBRL	0x10C	/* Time Base Read Lower Register */ +#define SPRN_TBRU	0x10D	/* Time Base Read Upper Register */ +#define SPRN_TBWL	0x11C	/* Time Base Write Lower Register */ +#define SPRN_TBWU	0x11D	/* Time Base Write Upper Register */ +#ifndef CONFIG_BOOKE +#define SPRN_TCR	0x3DA	/* Timer Control Register */ +#else +#define SPRN_TCR	0x154	/* Book E Timer Control Register */ +#endif /* CONFIG_BOOKE */ +#define   TCR_WP(x)		(((x)&0x3)<<30)	/* WDT Period */ +#define     WP_2_17		0		/* 2^17 clocks */ +#define     WP_2_21		1		/* 2^21 clocks */ +#define     WP_2_25		2		/* 2^25 clocks */ +#define     WP_2_29		3		/* 2^29 clocks */ +#define   TCR_WRC(x)		(((x)&0x3)<<28)	/* WDT Reset Control */ +#define     WRC_NONE		0		/* No reset will occur */ +#define     WRC_CORE		1		/* Core reset will occur */ +#define     WRC_CHIP		2		/* Chip reset will occur */ +#define     WRC_SYSTEM		3		/* System reset will occur */ +#define   TCR_WIE		0x08000000	/* WDT Interrupt Enable */ +#define   TCR_PIE		0x04000000	/* PIT Interrupt Enable */ +#define   TCR_FP(x)		(((x)&0x3)<<24)	/* FIT Period */ +#define     FP_2_9		0		/* 2^9 clocks */ +#define     FP_2_13		1		/* 2^13 clocks */ +#define     FP_2_17		2		/* 2^17 clocks */ +#define     FP_2_21		3		/* 2^21 clocks */ +#define   TCR_FIE		0x00800000	/* FIT Interrupt Enable */ +#define   TCR_ARE		0x00400000	/* Auto Reload Enable */ +#define SPRN_THRM1	0x3FC	/* Thermal Management Register 1 */ +#define   THRM1_TIN		(1<<0) +#define   THRM1_TIV		(1<<1) +#define   THRM1_THRES		(0x7f<<2) +#define   THRM1_TID		(1<<29) +#define   THRM1_TIE		(1<<30) +#define   THRM1_V		(1<<31) +#define SPRN_THRM2	0x3FD	/* Thermal Management Register 2 */ +#define SPRN_THRM3	0x3FE	/* Thermal Management Register 3 */ +#define   THRM3_E		(1<<31) +#define SPRN_TLBMISS	0x3D4	/* 980 7450 TLB Miss Register */ +#ifndef CONFIG_BOOKE +#define SPRN_TSR	0x3D8	/* Timer Status Register */ +#else +#define SPRN_TSR	0x150	/* Book E Timer Status Register */ +#endif /* CONFIG_BOOKE */ +#define   TSR_ENW		0x80000000	/* Enable Next Watchdog */ +#define   TSR_WIS		0x40000000	/* WDT Interrupt Status */ +#define   TSR_WRS(x)		(((x)&0x3)<<28)	/* WDT Reset Status */ +#define     WRS_NONE		0		/* No WDT reset occurred */ +#define     WRS_CORE		1		/* WDT forced core reset */ +#define     WRS_CHIP		2		/* WDT forced chip reset */ +#define     WRS_SYSTEM		3		/* WDT forced system reset */ +#define   TSR_PIS		0x08000000	/* PIT Interrupt Status */ +#define   TSR_FIS		0x04000000	/* FIT Interrupt Status */ +#define SPRN_UMMCR0	0x3A8	/* User Monitor Mode Control Register 0 */ +#define SPRN_UMMCR1	0x3AC	/* User Monitor Mode Control Register 0 */ +#define SPRN_UPMC1	0x3A9	/* User Performance Counter Register 1 */ +#define SPRN_UPMC2	0x3AA	/* User Performance Counter Register 2 */ +#define SPRN_UPMC3	0x3AD	/* User Performance Counter Register 3 */ +#define SPRN_UPMC4	0x3AE	/* User Performance Counter Register 4 */ +#define SPRN_USIA	0x3AB	/* User Sampled Instruction Address Register */ +#define SPRN_XER	0x001	/* Fixed Point Exception Register */ +#define SPRN_ZPR	0x3B0	/* Zone Protection Register */ + +/* Book E definitions */ +#define SPRN_DECAR	0x036	/* Decrementer Auto Reload Register */ +#define SPRN_CSRR0	0x03A	/* Critical SRR0 */ +#define SPRN_CSRR1	0x03B	/* Critical SRR0 */ +#define SPRN_IVPR	0x03F	/* Interrupt Vector Prefix Register */ +#define SPRN_USPRG0	0x100	/* User Special Purpose Register General 0 */ +#define SPRN_SPRG4R	0x104	/* Special Purpose Register General 4 Read */ +#define SPRN_SPRG5R	0x105	/* Special Purpose Register General 5 Read */ +#define SPRN_SPRG6R	0x106	/* Special Purpose Register General 6 Read */ +#define SPRN_SPRG7R	0x107	/* Special Purpose Register General 7 Read */ +#define SPRN_SPRG4W	0x114	/* Special Purpose Register General 4 Write */ +#define SPRN_SPRG5W	0x115	/* Special Purpose Register General 5 Write */ +#define SPRN_SPRG6W	0x116	/* Special Purpose Register General 6 Write */ +#define SPRN_SPRG7W	0x117	/* Special Purpose Register General 7 Write */ +#define SPRN_DBCR2	0x136	/* Debug Control Register 2 */ +#define SPRN_IAC3	0x13A	/* Instruction Address Compare 3 */ +#define SPRN_IAC4	0x13B	/* Instruction Address Compare 4 */ +#define SPRN_DVC1	0x13E	/* Data Value Compare Register 1 */ +#define SPRN_DVC2	0x13F	/* Data Value Compare Register 2 */ +#define SPRN_IVOR0	0x190	/* Interrupt Vector Offset Register 0 */ +#define SPRN_IVOR1	0x191	/* Interrupt Vector Offset Register 1 */ +#define SPRN_IVOR2	0x192	/* Interrupt Vector Offset Register 2 */ +#define SPRN_IVOR3	0x193	/* Interrupt Vector Offset Register 3 */ +#define SPRN_IVOR4	0x194	/* Interrupt Vector Offset Register 4 */ +#define SPRN_IVOR5	0x195	/* Interrupt Vector Offset Register 5 */ +#define SPRN_IVOR6	0x196	/* Interrupt Vector Offset Register 6 */ +#define SPRN_IVOR7	0x197	/* Interrupt Vector Offset Register 7 */ +#define SPRN_IVOR8	0x198	/* Interrupt Vector Offset Register 8 */ +#define SPRN_IVOR9	0x199	/* Interrupt Vector Offset Register 9 */ +#define SPRN_IVOR10	0x19a	/* Interrupt Vector Offset Register 10 */ +#define SPRN_IVOR11	0x19b	/* Interrupt Vector Offset Register 11 */ +#define SPRN_IVOR12	0x19c	/* Interrupt Vector Offset Register 12 */ +#define SPRN_IVOR13	0x19d	/* Interrupt Vector Offset Register 13 */ +#define SPRN_IVOR14	0x19e	/* Interrupt Vector Offset Register 14 */ +#define SPRN_IVOR15	0x19f	/* Interrupt Vector Offset Register 15 */ +#define SPRN_IVOR38	0x1b0	/* Interrupt Vector Offset Register 38 */ +#define SPRN_IVOR39	0x1b1	/* Interrupt Vector Offset Register 39 */ +#define SPRN_IVOR40	0x1b2	/* Interrupt Vector Offset Register 40 */ +#define SPRN_IVOR41	0x1b3	/* Interrupt Vector Offset Register 41 */ +#define SPRN_GIVOR2	0x1b8	/* Guest Interrupt Vector Offset Register 2 */ +#define SPRN_GIVOR3	0x1b9	/* Guest Interrupt Vector Offset Register 3 */ +#define SPRN_GIVOR4	0x1ba	/* Guest Interrupt Vector Offset Register 4 */ +#define SPRN_GIVOR8	0x1bb	/* Guest Interrupt Vector Offset Register 8 */ +#define SPRN_GIVOR13	0x1bc	/* Guest Interrupt Vector Offset Register 13 */ +#define SPRN_GIVOR14	0x1bd	/* Guest Interrupt Vector Offset Register 14 */ + +/* e500 definitions */ +#define SPRN_L1CFG0	0x203	/* L1 Cache Configuration Register 0 */ +#define SPRN_L1CFG1	0x204	/* L1 Cache Configuration Register 1 */ +#define SPRN_L2CFG0	0x207	/* L2 Cache Configuration Register 0 */ +#define SPRN_L1CSR0	0x3f2	/* L1 Data Cache Control and Status Register 0 */ +#define   L1CSR0_CPE		0x00010000	/* Data Cache Parity Enable */ +#define   L1CSR0_CUL		0x00000400	/* (D-)Cache Unable to Lock */ +#define   L1CSR0_DCLFR		0x00000100	/* D-Cache Lock Flash Reset */ +#define   L1CSR0_DCFI		0x00000002	/* Data Cache Flash Invalidate */ +#define   L1CSR0_DCE		0x00000001	/* Data Cache Enable */ +#define SPRN_L1CSR1	0x3f3	/* L1 Instruction Cache Control and Status Register 1 */ +#define   L1CSR1_CPE		0x00010000	/* Instruction Cache Parity Enable */ +#define   L1CSR1_ICUL		0x00000400	/* I-Cache Unable to Lock */ +#define   L1CSR1_ICLFR		0x00000100	/* I-Cache Lock Flash Reset */ +#define   L1CSR1_ICFI		0x00000002	/* Instruction Cache Flash Invalidate */ +#define   L1CSR1_ICE		0x00000001	/* Instruction Cache Enable */ +#define SPRN_L1CSR2	0x25e	/* L1 Data Cache Control and Status Register 2 */ +#define   L1CSR2_DCWS		0x40000000	/* Data Cache Write Shadow */ +#define SPRN_L2CSR0	0x3f9	/* L2 Data Cache Control and Status Register 0 */ +#define   L2CSR0_L2E		0x80000000	/* L2 Cache Enable */ +#define   L2CSR0_L2PE		0x40000000	/* L2 Cache Parity/ECC Enable */ +#define   L2CSR0_L2WP		0x1c000000	/* L2 I/D Way Partioning */ +#define   L2CSR0_L2CM		0x03000000	/* L2 Cache Coherency Mode */ +#define   L2CSR0_L2FI		0x00200000	/* L2 Cache Flash Invalidate */ +#define   L2CSR0_L2IO		0x00100000	/* L2 Cache Instruction Only */ +#define   L2CSR0_L2DO		0x00010000	/* L2 Cache Data Only */ +#define   L2CSR0_L2REP		0x00003000	/* L2 Line Replacement Algo */ + +/* e6500 */ +#define   L2CSR0_L2REP_SPLRUAGE	0x00000000	/* L2REP Streaming PLRU with Aging */ +#define   L2CSR0_L2REP_FIFO	0x00001000	/* L2REP FIFO */ +#define   L2CSR0_L2REP_SPLRU	0x00002000	/* L2REP Streaming PLRU */ +#define   L2CSR0_L2REP_PLRU	0x00003000	/* L2REP PLRU */ + +#define   L2CSR0_L2REP_MODE	L2CSR0_L2REP_SPLRUAGE + +#define   L2CSR0_L2FL		0x00000800	/* L2 Cache Flush */ +#define   L2CSR0_L2LFC		0x00000400	/* L2 Cache Lock Flash Clear */ +#define   L2CSR0_L2LOA		0x00000080	/* L2 Cache Lock Overflow Allocate */ +#define   L2CSR0_L2LO		0x00000020	/* L2 Cache Lock Overflow */ +#define SPRN_L2CSR1	0x3fa	/* L2 Data Cache Control and Status Register 1 */ + +#define SPRN_TLB0CFG	0x2B0	/* TLB 0 Config Register */ +#define SPRN_TLB1CFG	0x2B1	/* TLB 1 Config Register */ +#define   TLBnCFG_NENTRY_MASK	0x00000fff +#define SPRN_TLB0PS	0x158	/* TLB 0 Page Size Register */ +#define SPRN_TLB1PS	0x159	/* TLB 1 Page Size Register */ +#define SPRN_MMUCSR0	0x3f4	/* MMU control and status register 0 */ +#define SPRN_MMUCFG	0x3F7	/* MMU Configuration Register */ +#define MMUCFG_MAVN	0x00000003	/* MMU Architecture Version Number */ +#define MMUCFG_MAVN_V1	0x00000000	/* v1.0 */ +#define MMUCFG_MAVN_V2	0x00000001	/* v2.0 */ +#define SPRN_MAS0	0x270	/* MMU Assist Register 0 */ +#define SPRN_MAS1	0x271	/* MMU Assist Register 1 */ +#define SPRN_MAS2	0x272	/* MMU Assist Register 2 */ +#define SPRN_MAS3	0x273	/* MMU Assist Register 3 */ +#define SPRN_MAS4	0x274	/* MMU Assist Register 4 */ +#define SPRN_MAS5	0x275	/* MMU Assist Register 5 */ +#define SPRN_MAS6	0x276	/* MMU Assist Register 6 */ +#define SPRN_MAS7	0x3B0	/* MMU Assist Register 7 */ +#define SPRN_MAS8	0x155	/* MMU Assist Register 8 */ + +#define SPRN_IVOR32	0x210	/* Interrupt Vector Offset Register 32 */ +#define SPRN_IVOR33	0x211	/* Interrupt Vector Offset Register 33 */ +#define SPRN_IVOR34	0x212	/* Interrupt Vector Offset Register 34 */ +#define SPRN_IVOR35	0x213	/* Interrupt Vector Offset Register 35 */ +#define SPRN_IVOR36	0x214	/* Interrupt Vector Offset Register 36 */ +#define SPRN_IVOR37	0x215	/* Interrupt Vector Offset Register 37 */ +#define SPRN_SPEFSCR	0x200	/* SPE & Embedded FP Status & Control */ + +#define SPRN_MCSRR0	0x23a	/* Machine Check Save and Restore Register 0 */ +#define SPRN_MCSRR1	0x23b	/* Machine Check Save and Restore Register 1 */ +#define SPRN_BUCSR	0x3f5	/* Branch Control and Status Register */ +#define	  BUCSR_STAC_EN	0x01000000	/* Segment target addr cache enable */ +#define	  BUCSR_LS_EN	0x00400000	/* Link stack enable */ +#define	  BUCSR_BBFI	0x00000200	/* Branch buffer flash invalidate */ +#define	  BUCSR_BPEN	0x00000001	/* Branch prediction enable */ +#define   BUCSR_ENABLE (BUCSR_STAC_EN|BUCSR_LS_EN|BUCSR_BBFI|BUCSR_BPEN) +#define SPRN_BBEAR	0x201	/* Branch Buffer Entry Address Register */ +#define SPRN_BBTAR	0x202	/* Branch Buffer Target Address Register */ +#define SPRN_PID1	0x279	/* Process ID Register 1 */ +#define SPRN_PID2	0x27a	/* Process ID Register 2 */ +#define SPRN_MCSR	0x23c	/* Machine Check Syndrome register */ +#define SPRN_MCAR	0x23d	/* Machine Check Address register */ +#define MCSR_MCS	0x80000000	/* Machine Check Summary */ +#define MCSR_IB		0x40000000	/* Instruction PLB Error */ +#if defined(CONFIG_440) +#define MCSR_DRB	0x20000000	/* Data Read PLB Error */ +#define MCSR_DWB	0x10000000	/* Data Write PLB Error */ +#else +#define MCSR_DB		0x20000000	/* Data PLB Error */ +#endif /* defined(CONFIG_440) */ +#define MCSR_TLBP	0x08000000	/* TLB Parity Error */ +#define MCSR_ICP	0x04000000	/* I-Cache Parity Error */ +#define MCSR_DCSP	0x02000000	/* D-Cache Search Parity Error */ +#define MCSR_DCFP	0x01000000	/* D-Cache Flush Parity Error */ +#define MCSR_IMPE	0x00800000	/* Imprecise Machine Check Exception */ +#define ESR_ST		0x00800000	/* Store Operation */ + +#if defined(CONFIG_MPC86xx) +#define SPRN_MSSCR0	0x3f6 +#define SPRN_MSSSR0	0x3f7 +#endif + +#define SPRN_HDBCR0	0x3d0 +#define SPRN_HDBCR1	0x3d1 +#define SPRN_HDBCR2	0x3d2 +#define SPRN_HDBCR3	0x3d3 +#define SPRN_HDBCR4	0x3d4 +#define SPRN_HDBCR5	0x3d5 +#define SPRN_HDBCR6	0x3d6 +#define SPRN_HDBCR7	0x277 +#define SPRN_HDBCR8	0x278 + +/* Short-hand versions for a number of the above SPRNs */ + +#define CTR	SPRN_CTR	/* Counter Register */ +#define DAR	SPRN_DAR	/* Data Address Register */ +#define DABR	SPRN_DABR	/* Data Address Breakpoint Register */ +#define DAC1	SPRN_DAC1	/* Data Address Register 1 */ +#define DAC2	SPRN_DAC2	/* Data Address Register 2 */ +#define DBAT0L	SPRN_DBAT0L	/* Data BAT 0 Lower Register */ +#define DBAT0U	SPRN_DBAT0U	/* Data BAT 0 Upper Register */ +#define DBAT1L	SPRN_DBAT1L	/* Data BAT 1 Lower Register */ +#define DBAT1U	SPRN_DBAT1U	/* Data BAT 1 Upper Register */ +#define DBAT2L	SPRN_DBAT2L	/* Data BAT 2 Lower Register */ +#define DBAT2U	SPRN_DBAT2U	/* Data BAT 2 Upper Register */ +#define DBAT3L	SPRN_DBAT3L	/* Data BAT 3 Lower Register */ +#define DBAT3U	SPRN_DBAT3U	/* Data BAT 3 Upper Register */ +#define DBAT4L	SPRN_DBAT4L	/* Data BAT 4 Lower Register */ +#define DBAT4U	SPRN_DBAT4U	/* Data BAT 4 Upper Register */ +#define DBAT5L	SPRN_DBAT5L	/* Data BAT 5 Lower Register */ +#define DBAT5U	SPRN_DBAT5U	/* Data BAT 5 Upper Register */ +#define DBAT6L	SPRN_DBAT6L	/* Data BAT 6 Lower Register */ +#define DBAT6U	SPRN_DBAT6U	/* Data BAT 6 Upper Register */ +#define DBAT7L	SPRN_DBAT7L	/* Data BAT 7 Lower Register */ +#define DBAT7U	SPRN_DBAT7U	/* Data BAT 7 Upper Register */ +#define DBCR0	SPRN_DBCR0	/* Debug Control Register 0 */ +#define DBCR1	SPRN_DBCR1	/* Debug Control Register 1 */ +#define DBSR	SPRN_DBSR	/* Debug Status Register */ +#define DCMP	SPRN_DCMP	/* Data TLB Compare Register */ +#define DEC	SPRN_DEC	/* Decrement Register */ +#define DMISS	SPRN_DMISS	/* Data TLB Miss Register */ +#define DSISR	SPRN_DSISR	/* Data Storage Interrupt Status Register */ +#define EAR	SPRN_EAR	/* External Address Register */ +#define ESR	SPRN_ESR	/* Exception Syndrome Register */ +#define HASH1	SPRN_HASH1	/* Primary Hash Address Register */ +#define HASH2	SPRN_HASH2	/* Secondary Hash Address Register */ +#define HID0	SPRN_HID0	/* Hardware Implementation Register 0 */ +#define HID1	SPRN_HID1	/* Hardware Implementation Register 1 */ +#define IABR	SPRN_IABR	/* Instruction Address Breakpoint Register */ +#define IAC1	SPRN_IAC1	/* Instruction Address Register 1 */ +#define IAC2	SPRN_IAC2	/* Instruction Address Register 2 */ +#define IBAT0L	SPRN_IBAT0L	/* Instruction BAT 0 Lower Register */ +#define IBAT0U	SPRN_IBAT0U	/* Instruction BAT 0 Upper Register */ +#define IBAT1L	SPRN_IBAT1L	/* Instruction BAT 1 Lower Register */ +#define IBAT1U	SPRN_IBAT1U	/* Instruction BAT 1 Upper Register */ +#define IBAT2L	SPRN_IBAT2L	/* Instruction BAT 2 Lower Register */ +#define IBAT2U	SPRN_IBAT2U	/* Instruction BAT 2 Upper Register */ +#define IBAT3L	SPRN_IBAT3L	/* Instruction BAT 3 Lower Register */ +#define IBAT3U	SPRN_IBAT3U	/* Instruction BAT 3 Upper Register */ +#define IBAT4L	SPRN_IBAT4L	/* Instruction BAT 4 Lower Register */ +#define IBAT4U	SPRN_IBAT4U	/* Instruction BAT 4 Upper Register */ +#define IBAT5L	SPRN_IBAT5L	/* Instruction BAT 5 Lower Register */ +#define IBAT5U	SPRN_IBAT5U	/* Instruction BAT 5 Upper Register */ +#define IBAT6L	SPRN_IBAT6L	/* Instruction BAT 6 Lower Register */ +#define IBAT6U	SPRN_IBAT6U	/* Instruction BAT 6 Upper Register */ +#define IBAT7L	SPRN_IBAT7L	/* Instruction BAT 7 Lower Register */ +#define IBAT7U	SPRN_IBAT7U	/* Instruction BAT 7 Lower Register */ +#define ICMP	SPRN_ICMP	/* Instruction TLB Compare Register */ +#define IMISS	SPRN_IMISS	/* Instruction TLB Miss Register */ +#define IMMR	SPRN_IMMR	/* PPC 860/821 Internal Memory Map Register */ +#define LDSTCR	SPRN_LDSTCR	/* Load/Store Control Register */ +#define L2CR	SPRN_L2CR	/* PPC 750 L2 control register */ +#define LR	SPRN_LR +#define MBAR	SPRN_MBAR	/* System memory base address */ +#if defined(CONFIG_MPC86xx) +#define MSSCR0	SPRN_MSSCR0 +#endif +#if defined(CONFIG_E500) || defined(CONFIG_MPC86xx) +#define PIR	SPRN_PIR +#endif +#define SVR	SPRN_SVR	/* System-On-Chip Version Register */ +#define PVR	SPRN_PVR	/* Processor Version */ +#define RPA	SPRN_RPA	/* Required Physical Address Register */ +#define SDR1	SPRN_SDR1	/* MMU hash base register */ +#define SPR0	SPRN_SPRG0	/* Supervisor Private Registers */ +#define SPR1	SPRN_SPRG1 +#define SPR2	SPRN_SPRG2 +#define SPR3	SPRN_SPRG3 +#define SPRG0	SPRN_SPRG0 +#define SPRG1	SPRN_SPRG1 +#define SPRG2	SPRN_SPRG2 +#define SPRG3	SPRN_SPRG3 +#define SPRG4	SPRN_SPRG4 +#define SPRG5	SPRN_SPRG5 +#define SPRG6	SPRN_SPRG6 +#define SPRG7	SPRN_SPRG7 +#define SRR0	SPRN_SRR0	/* Save and Restore Register 0 */ +#define SRR1	SPRN_SRR1	/* Save and Restore Register 1 */ +#define SRR2	SPRN_SRR2	/* Save and Restore Register 2 */ +#define SRR3	SPRN_SRR3	/* Save and Restore Register 3 */ +#define SVR	SPRN_SVR	/* System Version Register */ +#define TBRL	SPRN_TBRL	/* Time Base Read Lower Register */ +#define TBRU	SPRN_TBRU	/* Time Base Read Upper Register */ +#define TBWL	SPRN_TBWL	/* Time Base Write Lower Register */ +#define TBWU	SPRN_TBWU	/* Time Base Write Upper Register */ +#define TCR	SPRN_TCR	/* Timer Control Register */ +#define TSR	SPRN_TSR	/* Timer Status Register */ +#define ICTC	1019 +#define THRM1	SPRN_THRM1	/* Thermal Management Register 1 */ +#define THRM2	SPRN_THRM2	/* Thermal Management Register 2 */ +#define THRM3	SPRN_THRM3	/* Thermal Management Register 3 */ +#define XER	SPRN_XER + +#define DECAR	SPRN_DECAR +#define CSRR0	SPRN_CSRR0 +#define CSRR1	SPRN_CSRR1 +#define IVPR	SPRN_IVPR +#define USPRG0	SPRN_USPRG +#define SPRG4R	SPRN_SPRG4R +#define SPRG5R	SPRN_SPRG5R +#define SPRG6R	SPRN_SPRG6R +#define SPRG7R	SPRN_SPRG7R +#define SPRG4W	SPRN_SPRG4W +#define SPRG5W	SPRN_SPRG5W +#define SPRG6W	SPRN_SPRG6W +#define SPRG7W	SPRN_SPRG7W +#define DEAR	SPRN_DEAR +#define DBCR2	SPRN_DBCR2 +#define IAC3	SPRN_IAC3 +#define IAC4	SPRN_IAC4 +#define DVC1	SPRN_DVC1 +#define DVC2	SPRN_DVC2 +#define IVOR0	SPRN_IVOR0 +#define IVOR1	SPRN_IVOR1 +#define IVOR2	SPRN_IVOR2 +#define IVOR3	SPRN_IVOR3 +#define IVOR4	SPRN_IVOR4 +#define IVOR5	SPRN_IVOR5 +#define IVOR6	SPRN_IVOR6 +#define IVOR7	SPRN_IVOR7 +#define IVOR8	SPRN_IVOR8 +#define IVOR9	SPRN_IVOR9 +#define IVOR10	SPRN_IVOR10 +#define IVOR11	SPRN_IVOR11 +#define IVOR12	SPRN_IVOR12 +#define IVOR13	SPRN_IVOR13 +#define IVOR14	SPRN_IVOR14 +#define IVOR15	SPRN_IVOR15 +#define IVOR32	SPRN_IVOR32 +#define IVOR33	SPRN_IVOR33 +#define IVOR34	SPRN_IVOR34 +#define IVOR35	SPRN_IVOR35 +#define MCSRR0	SPRN_MCSRR0 +#define MCSRR1	SPRN_MCSRR1 +#define L1CSR0	SPRN_L1CSR0 +#define L1CSR1	SPRN_L1CSR1 +#define L1CSR2	SPRN_L1CSR2 +#define L1CFG0	SPRN_L1CFG0 +#define L1CFG1	SPRN_L1CFG1 +#define L2CFG0	SPRN_L2CFG0 +#define L2CSR0	SPRN_L2CSR0 +#define L2CSR1	SPRN_L2CSR1 +#define MCSR	SPRN_MCSR +#define MMUCSR0	SPRN_MMUCSR0 +#define BUCSR	SPRN_BUCSR +#define PID0	SPRN_PID +#define PID1	SPRN_PID1 +#define PID2	SPRN_PID2 +#define MAS0	SPRN_MAS0 +#define MAS1	SPRN_MAS1 +#define MAS2	SPRN_MAS2 +#define MAS3	SPRN_MAS3 +#define MAS4	SPRN_MAS4 +#define MAS5	SPRN_MAS5 +#define MAS6	SPRN_MAS6 +#define MAS7	SPRN_MAS7 +#define MAS8 	SPRN_MAS8 + +#if defined(CONFIG_4xx) || defined(CONFIG_44x) || defined(CONFIG_MPC85xx) +#define DAR_DEAR DEAR +#else +#define DAR_DEAR DAR +#endif + +/* Device Control Registers */ + +#define DCRN_BEAR	0x090	/* Bus Error Address Register */ +#define DCRN_BESR	0x091	/* Bus Error Syndrome Register */ +#define   BESR_DSES	0x80000000	/* Data-Side Error Status */ +#define   BESR_DMES	0x40000000	/* DMA Error Status */ +#define   BESR_RWS	0x20000000	/* Read/Write Status */ +#define   BESR_ETMASK	0x1C000000	/* Error Type */ +#define     ET_PROT	0 +#define     ET_PARITY	1 +#define     ET_NCFG	2 +#define     ET_BUSERR	4 +#define     ET_BUSTO	6 +#define DCRN_DMACC0	0x0C4	/* DMA Chained Count Register 0 */ +#define DCRN_DMACC1	0x0CC	/* DMA Chained Count Register 1 */ +#define DCRN_DMACC2	0x0D4	/* DMA Chained Count Register 2 */ +#define DCRN_DMACC3	0x0DC	 /* DMA Chained Count Register 3 */ +#define DCRN_DMACR0	0x0C0	 /* DMA Channel Control Register 0 */ +#define DCRN_DMACR1	0x0C8	 /* DMA Channel Control Register 1 */ +#define DCRN_DMACR2	0x0D0	 /* DMA Channel Control Register 2 */ +#define DCRN_DMACR3	0x0D8	 /* DMA Channel Control Register 3 */ +#define DCRN_DMACT0	0x0C1	 /* DMA Count Register 0 */ +#define DCRN_DMACT1	0x0C9	 /* DMA Count Register 1 */ +#define DCRN_DMACT2	0x0D1	 /* DMA Count Register 2 */ +#define DCRN_DMACT3	0x0D9	 /* DMA Count Register 3 */ +#define DCRN_DMADA0	0x0C2	 /* DMA Destination Address Register 0 */ +#define DCRN_DMADA1	0x0CA	 /* DMA Destination Address Register 1 */ +#define DCRN_DMADA2	0x0D2	 /* DMA Destination Address Register 2 */ +#define DCRN_DMADA3	0x0DA	 /* DMA Destination Address Register 3 */ +#define DCRN_DMASA0	0x0C3	 /* DMA Source Address Register 0 */ +#define DCRN_DMASA1	0x0CB	 /* DMA Source Address Register 1 */ +#define DCRN_DMASA2	0x0D3	 /* DMA Source Address Register 2 */ +#define DCRN_DMASA3	0x0DB	 /* DMA Source Address Register 3 */ +#define DCRN_DMASR	0x0E0	 /* DMA Status Register */ +#define DCRN_EXIER	0x042	 /* External Interrupt Enable Register */ +#define   EXIER_CIE	0x80000000	/* Critical Interrupt Enable */ +#define   EXIER_SRIE	0x08000000	/* Serial Port Rx Int. Enable */ +#define   EXIER_STIE	0x04000000	/* Serial Port Tx Int. Enable */ +#define   EXIER_JRIE	0x02000000	/* JTAG Serial Port Rx Int. Enable */ +#define   EXIER_JTIE	0x01000000	/* JTAG Serial Port Tx Int. Enable */ +#define   EXIER_D0IE	0x00800000	/* DMA Channel 0 Interrupt Enable */ +#define   EXIER_D1IE	0x00400000	/* DMA Channel 1 Interrupt Enable */ +#define   EXIER_D2IE	0x00200000	/* DMA Channel 2 Interrupt Enable */ +#define   EXIER_D3IE	0x00100000	/* DMA Channel 3 Interrupt Enable */ +#define   EXIER_E0IE	0x00000010	/* External Interrupt 0 Enable */ +#define   EXIER_E1IE	0x00000008	/* External Interrupt 1 Enable */ +#define   EXIER_E2IE	0x00000004	/* External Interrupt 2 Enable */ +#define   EXIER_E3IE	0x00000002	/* External Interrupt 3 Enable */ +#define   EXIER_E4IE	0x00000001	/* External Interrupt 4 Enable */ +#define DCRN_EXISR	0x040	 /* External Interrupt Status Register */ +#define DCRN_IOCR	0x0A0	 /* Input/Output Configuration Register */ +#define   IOCR_E0TE	0x80000000 +#define   IOCR_E0LP	0x40000000 +#define   IOCR_E1TE	0x20000000 +#define   IOCR_E1LP	0x10000000 +#define   IOCR_E2TE	0x08000000 +#define   IOCR_E2LP	0x04000000 +#define   IOCR_E3TE	0x02000000 +#define   IOCR_E3LP	0x01000000 +#define   IOCR_E4TE	0x00800000 +#define   IOCR_E4LP	0x00400000 +#define   IOCR_EDT	0x00080000 +#define   IOCR_SOR	0x00040000 +#define   IOCR_EDO	0x00008000 +#define   IOCR_2XC	0x00004000 +#define   IOCR_ATC	0x00002000 +#define   IOCR_SPD	0x00001000 +#define   IOCR_BEM	0x00000800 +#define   IOCR_PTD	0x00000400 +#define   IOCR_ARE	0x00000080 +#define   IOCR_DRC	0x00000020 +#define   IOCR_RDM(x)	(((x) & 0x3) << 3) +#define   IOCR_TCS	0x00000004 +#define   IOCR_SCS	0x00000002 +#define   IOCR_SPC	0x00000001 + +/* System-On-Chip Version Register */ + +/* System-On-Chip Version Register (SVR) field extraction */ + +#define SVR_VER(svr)	(((svr) >> 16) & 0xFFFF) /* Version field */ +#define SVR_REV(svr)	(((svr) >>  0) & 0xFF)	 /* Revision field */ + +#define SVR_CID(svr)	(((svr) >> 28) & 0x0F)	 /* Company or manufacturer ID */ +#define SVR_SOCOP(svr)	(((svr) >> 22) & 0x3F)	 /* SOC integration options */ +#define SVR_SID(svr)	(((svr) >> 16) & 0x3F)	 /* SOC ID */ +#define SVR_PROC(svr)	(((svr) >> 12) & 0x0F)	 /* Process revision field */ +#define SVR_MFG(svr)	(((svr) >>  8) & 0x0F)	 /* Manufacturing revision */ +#define SVR_MJREV(svr)	(((svr) >>  4) & 0x0F)	 /* Major SOC design revision indicator */ +#define SVR_MNREV(svr)	(((svr) >>  0) & 0x0F)	 /* Minor SOC design revision indicator */ + +/* Processor Version Register */ + +/* Processor Version Register (PVR) field extraction */ + +#define PVR_VER(pvr)  (((pvr) >>  16) & 0xFFFF)	/* Version field */ +#define PVR_REV(pvr)  (((pvr) >>   0) & 0xFFFF)	/* Revison field */ + +/* + * AMCC has further subdivided the standard PowerPC 16-bit version and + * revision subfields of the PVR for the PowerPC 403s into the following: + */ + +#define PVR_FAM(pvr)	(((pvr) >> 20) & 0xFFF)	/* Family field */ +#define PVR_MEM(pvr)	(((pvr) >> 16) & 0xF)	/* Member field */ +#define PVR_CORE(pvr)	(((pvr) >> 12) & 0xF)	/* Core field */ +#define PVR_CFG(pvr)	(((pvr) >>  8) & 0xF)	/* Configuration field */ +#define PVR_MAJ(pvr)	(((pvr) >>  4) & 0xF)	/* Major revision field */ +#define PVR_MIN(pvr)	(((pvr) >>  0) & 0xF)	/* Minor revision field */ + +/* e600 core PVR fields */ + +#define PVR_E600_VER(pvr)	(((pvr) >> 15) & 0xFFFF) /* Version/type */ +#define PVR_E600_TECH(pvr)	(((pvr) >> 12) & 0xF)	 /* Technology */ +#define PVR_E600_MAJ(pvr)	(((pvr) >> 8) & 0xF)	 /* Major revision */ +#define PVR_E600_MIN(pvr)	(((pvr) >> 0) & 0xFF)	 /* Minor revision */ + +/* Processor Version Numbers */ + +#define PVR_403GA	0x00200000 +#define PVR_403GB	0x00200100 +#define PVR_403GC	0x00200200 +#define PVR_403GCX	0x00201400 +#define PVR_405GP	0x40110000 +#define PVR_405GP_RB	0x40110040 +#define PVR_405GP_RC	0x40110082 +#define PVR_405GP_RD	0x401100C4 +#define PVR_405GP_RE	0x40110145  /* same as pc405cr rev c */ +#define PVR_405EP_RA	0x51210950 +#define PVR_405GPR_RB	0x50910951 +#define PVR_405EZ_RA	0x41511460 +#define PVR_405EXR2_RA	0x12911471 /* 405EXr rev A/B without Security */ +#define PVR_405EX1_RA	0x12911477 /* 405EX rev A/B with Security */ +#define PVR_405EXR1_RC	0x1291147B /* 405EXr rev C with Security */ +#define PVR_405EXR2_RC	0x12911479 /* 405EXr rev C without Security */ +#define PVR_405EX1_RC	0x1291147F /* 405EX rev C with Security */ +#define PVR_405EX2_RC	0x1291147D /* 405EX rev C without Security */ +#define PVR_405EXR1_RD	0x12911472 /* 405EXr rev D with Security */ +#define PVR_405EXR2_RD	0x12911470 /* 405EXr rev D without Security */ +#define PVR_405EX1_RD	0x12911475 /* 405EX rev D with Security */ +#define PVR_405EX2_RD	0x12911473 /* 405EX rev D without Security */ +#define PVR_440GP_RB	0x40120440 +#define PVR_440GP_RC	0x40120481 +#define PVR_440EP_RA	0x42221850 +#define PVR_440EP_RB	0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */ +#define PVR_440EP_RC	0x422218D4 /* 440EP rev C and 440GR rev B have same PVR */ +#define PVR_440GR_RA	0x422218D3 /* 440EP rev B and 440GR rev A have same PVR */ +#define PVR_440GR_RB	0x422218D4 /* 440EP rev C and 440GR rev B have same PVR */ +#define PVR_440EPX1_RA	0x216218D0 /* 440EPX rev A with Security / Kasumi */ +#define PVR_440EPX2_RA	0x216218D4 /* 440EPX rev A without Security / Kasumi */ +#define PVR_440GRX1_RA	0x216218D0 /* 440GRX rev A with Security / Kasumi */ +#define PVR_440GRX2_RA	0x216218D4 /* 440GRX rev A without Security / Kasumi */ +#define PVR_440GX_RA	0x51B21850 +#define PVR_440GX_RB	0x51B21851 +#define PVR_440GX_RC	0x51B21892 +#define PVR_440GX_RF	0x51B21894 +#define PVR_405EP_RB	0x51210950 +#define PVR_440SP_6_RAB	0x53221850 /* 440SP rev A&B with RAID 6 support enabled	*/ +#define PVR_440SP_RAB	0x53321850 /* 440SP rev A&B without RAID 6 support	*/ +#define PVR_440SP_6_RC	0x53221891 /* 440SP rev C with RAID 6 support enabled	*/ +#define PVR_440SP_RC	0x53321891 /* 440SP rev C without RAID 6 support	*/ +#define PVR_440SPe_6_RA	0x53421890 /* 440SPe rev A with RAID 6 support enabled	*/ +#define PVR_440SPe_RA	0x53521890 /* 440SPe rev A without RAID 6 support	*/ +#define PVR_440SPe_6_RB	0x53421891 /* 440SPe rev B with RAID 6 support enabled	*/ +#define PVR_440SPe_RB	0x53521891 /* 440SPe rev B without RAID 6 support	*/ +#define PVR_460EX_SE_RA	0x130218A2 /* 460EX rev A with Security Engine	  */ +#define PVR_460EX_RA	0x130218A3 /* 460EX rev A without Security Engine */ +#define PVR_460EX_RB	0x130218A4 /* 460EX rev B with and without Sec Eng*/ +#define PVR_460GT_SE_RA	0x130218A0 /* 460GT rev A with Security Engine	  */ +#define PVR_460GT_RA	0x130218A1 /* 460GT rev A without Security Engine */ +#define PVR_460GT_RB	0x130218A5 /* 460GT rev B with and without Sec Eng*/ +#define PVR_460SX_RA    0x13541800 /* 460SX rev A                   */ +#define PVR_460SX_RA_V1 0x13541801 /* 460SX rev A Variant 1 Security disabled */ +#define PVR_460GX_RA    0x13541802 /* 460GX rev A                   */ +#define PVR_460GX_RA_V1 0x13541803 /* 460GX rev A Variant 1 Security disabled */ +#define PVR_APM821XX_RA 0x12C41C80 /* APM821XX rev A */ +#define PVR_601		0x00010000 +#define PVR_602		0x00050000 +#define PVR_603		0x00030000 +#define PVR_603e	0x00060000 +#define PVR_603ev	0x00070000 +#define PVR_603r	0x00071000 +#define PVR_604		0x00040000 +#define PVR_604e	0x00090000 +#define PVR_604r	0x000A0000 +#define PVR_620		0x00140000 +#define PVR_740		0x00080000 +#define PVR_750		PVR_740 +#define PVR_740P	0x10080000 +#define PVR_750P	PVR_740P +#define PVR_7400	0x000C0000 +#define PVR_7410	0x800C0000 +#define PVR_7450	0x80000000 + +#define PVR_85xx	0x80200000 +#define PVR_85xx_REV1	(PVR_85xx | 0x0010) +#define PVR_85xx_REV2	(PVR_85xx | 0x0020) +#define PVR_VER_E500_V1	0x8020 +#define PVR_VER_E500_V2	0x8021 +#define PVR_VER_E500MC	0x8023 +#define PVR_VER_E5500	0x8024 +#define PVR_VER_E6500	0x8040 + +#define PVR_86xx	0x80040000 + +#define PVR_VIRTEX5     0x7ff21912 + +/* + * For the 8xx processors, all of them report the same PVR family for + * the PowerPC core. The various versions of these processors must be + * differentiated by the version number in the Communication Processor + * Module (CPM). + */ +#define PVR_821		0x00500000 +#define PVR_823		PVR_821 +#define PVR_850		PVR_821 +#define PVR_860		PVR_821 +#define PVR_7400	0x000C0000 +#define PVR_8240	0x00810100 + +/* + * PowerQUICC II family processors report different PVR values depending + * on silicon process (HiP3, HiP4, HiP7, etc.) + */ +#define PVR_8260	PVR_8240 +#define PVR_8260_HIP3	0x00810101 +#define PVR_8260_HIP4	0x80811014 +#define PVR_8260_HIP7	0x80822011 +#define PVR_8260_HIP7R1 0x80822013 +#define PVR_8260_HIP7RA	0x80822014 + +/* + * MPC 52xx + */ +#define PVR_5200	0x80822011 +#define PVR_5200B	0x80822014 + +/* + * 405EX/EXr CHIP_21 Errata + */ +#ifdef CONFIG_SYS_4xx_CHIP_21_405EX_SECURITY +#define CONFIG_SYS_4xx_CHIP_21_ERRATA +#define CONFIG_405EX_CHIP21_PVR_REV_C	PVR_405EX1_RC +#define CONFIG_405EX_CHIP21_PVR_REV_D	PVR_405EX1_RD +#define CONFIG_405EX_CHIP21_ECID3_REV_D	0x0 +#endif + +#ifdef CONFIG_SYS_4xx_CHIP_21_405EX_NO_SECURITY +#define CONFIG_SYS_4xx_CHIP_21_ERRATA +#define CONFIG_405EX_CHIP21_PVR_REV_C	PVR_405EX2_RC +#define CONFIG_405EX_CHIP21_PVR_REV_D	PVR_405EX2_RD +#define CONFIG_405EX_CHIP21_ECID3_REV_D	0x1 +#endif + +#ifdef CONFIG_SYS_4xx_CHIP_21_405EXr_SECURITY +#define CONFIG_SYS_4xx_CHIP_21_ERRATA +#define CONFIG_405EX_CHIP21_PVR_REV_C	PVR_405EXR1_RC +#define CONFIG_405EX_CHIP21_PVR_REV_D	PVR_405EXR1_RD +#define CONFIG_405EX_CHIP21_ECID3_REV_D	0x2 +#endif + +#ifdef CONFIG_SYS_4xx_CHIP_21_405EXr_NO_SECURITY +#define CONFIG_SYS_4xx_CHIP_21_ERRATA +#define CONFIG_405EX_CHIP21_PVR_REV_C	PVR_405EXR2_RC +#define CONFIG_405EX_CHIP21_PVR_REV_D	PVR_405EXR2_RD +#define CONFIG_405EX_CHIP21_ECID3_REV_D	0x3 +#endif + +/* + * System Version Register + */ + +/* System Version Register (SVR) field extraction */ + +#define SVR_SUBVER(svr)	(((svr) >>  8) & 0xFF)	/* Process/MFG sub-version */ + +#define SVR_FAM(svr)	(((svr) >> 20) & 0xFFF)	/* Family field */ +#define SVR_MEM(svr)	(((svr) >> 16) & 0xF)	/* Member field */ + +#ifdef CONFIG_MPC8536 +#define SVR_MAJ(svr)	(((svr) >>  4) & 0x7)	/* Major revision field*/ +#else +#define SVR_MAJ(svr)	(((svr) >>  4) & 0xF)	/* Major revision field*/ +#endif +#define SVR_MIN(svr)	(((svr) >>  0) & 0xF)	/* Minor revision field*/ + +/* Some parts define SVR[0:23] as the SOC version */ +#define SVR_SOC_VER(svr) (((svr) >> 8) & 0xFFF7FF) /* SOC w/o E bit*/ + +/* whether MPC8xxxE (i.e. has SEC) */ +#if defined(CONFIG_MPC85xx) +#define IS_E_PROCESSOR(svr)	(svr & 0x80000) +#else +#if defined(CONFIG_MPC83xx) +#define IS_E_PROCESSOR(spridr)	(!(spridr & 0x00010000)) +#endif +#endif + +#define IS_SVR_REV(svr, maj, min) \ +	((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min)) + +/* + * SVR_SOC_VER() Version Values + */ + +#define SVR_8533	0x803400 +#define SVR_8535	0x803701 +#define SVR_8536	0x803700 +#define SVR_8540	0x803000 +#define SVR_8541	0x807200 +#define SVR_8543	0x803200 +#define SVR_8544	0x803401 +#define SVR_8545	0x803102 +#define SVR_8547	0x803101 +#define SVR_8548	0x803100 +#define SVR_8555	0x807100 +#define SVR_8560	0x807000 +#define SVR_8567	0x807501 +#define SVR_8568	0x807500 +#define SVR_8569	0x808000 +#define SVR_8572	0x80E000 +#define SVR_P1010	0x80F100 +#define SVR_P1011	0x80E500 +#define SVR_P1012	0x80E501 +#define SVR_P1013	0x80E700 +#define SVR_P1014	0x80F101 +#define SVR_P1017	0x80F700 +#define SVR_P1020	0x80E400 +#define SVR_P1021	0x80E401 +#define SVR_P1022	0x80E600 +#define SVR_P1023	0x80F600 +#define SVR_P1024	0x80E402 +#define SVR_P1025	0x80E403 +#define SVR_P2010	0x80E300 +#define SVR_P2020	0x80E200 +#define SVR_P2040	0x821000 +#define SVR_P2041	0x821001 +#define SVR_P3041	0x821103 +#define SVR_P4040	0x820100 +#define SVR_P4080	0x820000 +#define SVR_P5010	0x822100 +#define SVR_P5020	0x822000 +#define SVR_P5021	0X820500 +#define SVR_P5040	0x820400 +#define SVR_T4240	0x824000 +#define SVR_T4120	0x824001 +#define SVR_T4160	0x824100 +#define SVR_T4080	0x824102 +#define SVR_C291	0x850000 +#define SVR_C292	0x850020 +#define SVR_C293	0x850030 +#define SVR_B4860	0X868000 +#define SVR_G4860	0x868001 +#define SVR_G4060	0x868003 +#define SVR_B4440	0x868100 +#define SVR_G4440	0x868101 +#define SVR_B4420	0x868102 +#define SVR_B4220	0x868103 +#define SVR_T1040	0x852000 +#define SVR_T1041	0x852001 +#define SVR_T1042	0x852002 +#define SVR_T1020	0x852100 +#define SVR_T1021	0x852101 +#define SVR_T1022	0x852102 +#define SVR_T2080	0x853000 +#define SVR_T2081	0x853100 + +#define SVR_8610	0x80A000 +#define SVR_8641	0x809000 +#define SVR_8641D	0x809001 + +#define SVR_9130	0x860001 +#define SVR_9131	0x860000 +#define SVR_9132	0x861000 +#define SVR_9232	0x861400 + +#define SVR_Unknown	0xFFFFFF + +#define _GLOBAL(n)\ +	.globl n;\ +n: + +/* Macros for setting and retrieving special purpose registers */ + +#define stringify(s)	tostring(s) +#define tostring(s)	#s + +#define mfdcr(rn)	({unsigned int rval; \ +			asm volatile("mfdcr %0," stringify(rn) \ +				     : "=r" (rval)); rval;}) +#define mtdcr(rn, v)	asm volatile("mtdcr " stringify(rn) ",%0" : : "r" (v)) + +#define mfmsr()		({unsigned int rval; \ +			asm volatile("mfmsr %0" : "=r" (rval)); rval;}) +#define mtmsr(v)	asm volatile("mtmsr %0" : : "r" (v)) + +#define mfspr(rn)	({unsigned int rval; \ +			asm volatile("mfspr %0," stringify(rn) \ +				     : "=r" (rval)); rval;}) +#define mtspr(rn, v)	asm volatile("mtspr " stringify(rn) ",%0" : : "r" (v)) + +#define tlbie(v)	asm volatile("tlbie %0 \n sync" : : "r" (v)) + +/* Segment Registers */ + +#define SR0	0 +#define SR1	1 +#define SR2	2 +#define SR3	3 +#define SR4	4 +#define SR5	5 +#define SR6	6 +#define SR7	7 +#define SR8	8 +#define SR9	9 +#define SR10	10 +#define SR11	11 +#define SR12	12 +#define SR13	13 +#define SR14	14 +#define SR15	15 + +#ifndef __ASSEMBLY__ + +struct cpu_type { +	char name[15]; +	u32 soc_ver; +	u32 num_cores; +	u32 mask;	/* which cpu(s) actually exist */ +}; + +struct cpu_type *identify_cpu(u32 ver); +int fixup_cpu(void); + +int fsl_qoriq_core_to_cluster(unsigned int core); + +#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) +#define CPU_TYPE_ENTRY(n, v, nc) \ +	{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc), \ +	  .mask = (1 << (nc)) - 1 } +#define CPU_TYPE_ENTRY_MASK(n, v, nc, m) \ +	{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc), .mask = (m) } +#else +#if defined(CONFIG_MPC83xx) +#define CPU_TYPE_ENTRY(x) {#x, SPR_##x} +#endif +#endif + + +#ifndef CONFIG_MACH_SPECIFIC +extern int _machine; +extern int have_of; +#endif /* CONFIG_MACH_SPECIFIC */ + +/* what kind of prep workstation we are */ +extern int _prep_type; +/* + * This is used to identify the board type from a given PReP board + * vendor. Board revision is also made available. + */ +extern unsigned char ucSystemType; +extern unsigned char ucBoardRev; +extern unsigned char ucBoardRevMaj, ucBoardRevMin; + +struct task_struct; +void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp); +void release_thread(struct task_struct *); + +/* + * Create a new kernel thread. + */ +extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); + +/* + * Bus types + */ +#define EISA_bus 0 +#define EISA_bus__is_a_macro /* for versions in ksyms.c */ +#define MCA_bus 0 +#define MCA_bus__is_a_macro /* for versions in ksyms.c */ + +/* Lazy FPU handling on uni-processor */ +extern struct task_struct *last_task_used_math; +extern struct task_struct *last_task_used_altivec; + +/* + * this is the minimum allowable io space due to the location + * of the io areas on prep (first one at 0x80000000) but + * as soon as I get around to remapping the io areas with the BATs + * to match the mac we can raise this. -- Cort + */ +#define TASK_SIZE	(0x80000000UL) + +/* This decides where the kernel will search for a free chunk of vm + * space during mmap's. + */ +#define TASK_UNMAPPED_BASE	(TASK_SIZE / 8 * 3) + +typedef struct { +	unsigned long seg; +} mm_segment_t; + +struct thread_struct { +	unsigned long	ksp;		/* Kernel stack pointer */ +	unsigned long	wchan;		/* Event task is sleeping on */ +	struct pt_regs	*regs;		/* Pointer to saved register state */ +	mm_segment_t	fs;		/* for get_fs() validation */ +	void		*pgdir;		/* root of page-table tree */ +	signed long	last_syscall; +	double		fpr[32];	/* Complete floating point set */ +	unsigned long	fpscr_pad;	/* fpr ... fpscr must be contiguous */ +	unsigned long	fpscr;		/* Floating point status */ +#ifdef CONFIG_ALTIVEC +	vector128	vr[32];		/* Complete AltiVec set */ +	vector128	vscr;		/* AltiVec status */ +	unsigned long	vrsave; +#endif /* CONFIG_ALTIVEC */ +}; + +#define INIT_SP		(sizeof(init_stack) + (unsigned long) &init_stack) + +#define INIT_THREAD  { \ +	INIT_SP, /* ksp */ \ +	0, /* wchan */ \ +	(struct pt_regs *)INIT_SP - 1, /* regs */ \ +	KERNEL_DS, /*fs*/ \ +	swapper_pg_dir, /* pgdir */ \ +	0, /* last_syscall */ \ +	{0}, 0, 0 \ +} + +/* + * Note: the vm_start and vm_end fields here should *not* + * be in kernel space.	(Could vm_end == vm_start perhaps?) + */ +#define INIT_MMAP { &init_mm, 0, 0x1000, NULL, \ +		    PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, \ +		    1, NULL, NULL } + +/* + * Return saved PC of a blocked thread. For now, this is the "user" PC + */ +static inline unsigned long thread_saved_pc(struct thread_struct *t) +{ +	return (t->regs) ? t->regs->nip : 0; +} + +#define copy_segments(tsk, mm)		do { } while (0) +#define release_segments(mm)		do { } while (0) +#define forget_segments()		do { } while (0) + +unsigned long get_wchan(struct task_struct *p); + +#define KSTK_EIP(tsk)  ((tsk)->thread.regs->nip) +#define KSTK_ESP(tsk)  ((tsk)->thread.regs->gpr[1]) + +/* + * NOTE! The task struct and the stack go together + */ +#define THREAD_SIZE (2*PAGE_SIZE) +#define alloc_task_struct() \ +	((struct task_struct *) __get_free_pages(GFP_KERNEL,1)) +#define free_task_struct(p)	free_pages((unsigned long)(p),1) +#define get_task_struct(tsk)	  atomic_inc(&mem_map[MAP_NR(tsk)].count) + +/* in process.c - for early bootup debug -- Cort */ +int ll_printk(const char *, ...); +void ll_puts(const char *); + +#define init_task	(init_task_union.task) +#define init_stack	(init_task_union.stack) + +/* In misc.c */ +void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val); + +#endif /* ndef ASSEMBLY*/ + +#ifdef CONFIG_MACH_SPECIFIC +#if defined(CONFIG_8xx) +#define _machine _MACH_8xx +#define have_of 0 +#elif defined(CONFIG_OAK) +#define _machine _MACH_oak +#define have_of	0 +#elif defined(CONFIG_WALNUT) +#define _machine _MACH_walnut +#define have_of 0 +#elif defined(CONFIG_APUS) +#define _machine _MACH_apus +#define have_of 0 +#elif defined(CONFIG_GEMINI) +#define _machine _MACH_gemini +#define have_of 0 +#elif defined(CONFIG_MPC8260) +#define _machine _MACH_8260 +#define have_of 0 +#elif defined(CONFIG_SANDPOINT) +#define _machine _MACH_sandpoint +#elif defined(CONFIG_HIDDEN_DRAGON) +#define _machine _MACH_hidden_dragon +#define have_of 0 +#else +#error "Machine not defined correctly" +#endif +#endif /* CONFIG_MACH_SPECIFIC */ + +#if defined(CONFIG_MPC85xx) || defined(CONFIG_440) + #define EPAPR_MAGIC	(0x45504150) +#else + #define EPAPR_MAGIC	(0x65504150) +#endif + +#endif /* __ASM_PPC_PROCESSOR_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/ptrace.h b/roms/u-boot/arch/powerpc/include/asm/ptrace.h new file mode 100644 index 00000000..2d56de61 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/ptrace.h @@ -0,0 +1,105 @@ +#ifndef _PPC_PTRACE_H +#define _PPC_PTRACE_H + +/* + * This struct defines the way the registers are stored on the + * kernel stack during a system call or other kernel entry. + * + * this should only contain volatile regs + * since we can keep non-volatile in the thread_struct + * should set this up when only volatiles are saved + * by intr code. + * + * Since this is going on the stack, *CARE MUST BE TAKEN* to insure + * that the overall structure is a multiple of 16 bytes in length. + * + * Note that the offsets of the fields in this struct correspond with + * the PT_* values below.  This simplifies arch/powerpc/kernel/ptrace.c. + */ + +#ifndef __ASSEMBLY__ +#ifdef CONFIG_PPC64BRIDGE +#define PPC_REG unsigned long /*long*/ +#else +#define PPC_REG unsigned long +#endif +struct pt_regs { +	PPC_REG gpr[32]; +	PPC_REG nip; +	PPC_REG msr; +	PPC_REG orig_gpr3;	/* Used for restarting system calls */ +	PPC_REG ctr; +	PPC_REG link; +	PPC_REG xer; +	PPC_REG ccr; +	PPC_REG mq;		/* 601 only (not used at present) */ +				/* Used on APUS to hold IPL value. */ +	PPC_REG trap;		/* Reason for being here */ +	PPC_REG dar;		/* Fault registers */ +	PPC_REG dsisr; +	PPC_REG result;		/* Result of a system call */ +}; +#endif + +#define STACK_FRAME_OVERHEAD	16	/* size of minimum stack frame */ + +/* Size of stack frame allocated when calling signal handler. */ +#define __SIGNAL_FRAMESIZE	64 + +#define instruction_pointer(regs) ((regs)->nip) +#define user_mode(regs) (((regs)->msr & MSR_PR) != 0) + +/* + * Offsets used by 'ptrace' system call interface. + * These can't be changed without breaking binary compatibility + * with MkLinux, etc. + */ +#define PT_R0	0 +#define PT_R1	1 +#define PT_R2	2 +#define PT_R3	3 +#define PT_R4	4 +#define PT_R5	5 +#define PT_R6	6 +#define PT_R7	7 +#define PT_R8	8 +#define PT_R9	9 +#define PT_R10	10 +#define PT_R11	11 +#define PT_R12	12 +#define PT_R13	13 +#define PT_R14	14 +#define PT_R15	15 +#define PT_R16	16 +#define PT_R17	17 +#define PT_R18	18 +#define PT_R19	19 +#define PT_R20	20 +#define PT_R21	21 +#define PT_R22	22 +#define PT_R23	23 +#define PT_R24	24 +#define PT_R25	25 +#define PT_R26	26 +#define PT_R27	27 +#define PT_R28	28 +#define PT_R29	29 +#define PT_R30	30 +#define PT_R31	31 + +#define PT_NIP	32 +#define PT_MSR	33 +#ifdef __KERNEL__ +#define PT_ORIG_R3 34 +#endif +#define PT_CTR	35 +#define PT_LNK	36 +#define PT_XER	37 +#define PT_CCR	38 +#define PT_MQ	39 + +#define PT_FPR0	48	/* each FP reg occupies 2 slots in this space */ +#define PT_FPR31 (PT_FPR0 + 2*31) +#define PT_FPSCR (PT_FPR0 + 2*32 + 1) + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/sections.h b/roms/u-boot/arch/powerpc/include/asm/sections.h new file mode 100644 index 00000000..968f40e4 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/sections.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2012 The Chromium OS Authors. + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_POWERPC_SECTIONS_H +#define __ASM_POWERPC_SECTIONS_H + +#include <asm-generic/sections.h> + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/sigcontext.h b/roms/u-boot/arch/powerpc/include/asm/sigcontext.h new file mode 100644 index 00000000..715c868a --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/sigcontext.h @@ -0,0 +1,15 @@ +#ifndef _ASM_PPC_SIGCONTEXT_H +#define _ASM_PPC_SIGCONTEXT_H + +#include <asm/ptrace.h> + + +struct sigcontext_struct { +	unsigned long	_unused[4]; +	int		signal; +	unsigned long	handler; +	unsigned long	oldmask; +	struct pt_regs	*regs; +}; + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/signal.h b/roms/u-boot/arch/powerpc/include/asm/signal.h new file mode 100644 index 00000000..b11a28ef --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/signal.h @@ -0,0 +1,154 @@ +#ifndef _ASMPPC_SIGNAL_H +#define _ASMPPC_SIGNAL_H + +#include <linux/types.h> + +/* Avoid too many header ordering problems.  */ +struct siginfo; + +/* Most things should be clean enough to redefine this at will, if care +   is taken to make libc match.  */ + +#define _NSIG		64 +#define _NSIG_BPW	32 +#define _NSIG_WORDS	(_NSIG / _NSIG_BPW) + +typedef unsigned long old_sigset_t;		/* at least 32 bits */ + +typedef struct { +	unsigned long sig[_NSIG_WORDS]; +} sigset_t; + +#define SIGHUP		 1 +#define SIGINT		 2 +#define SIGQUIT		 3 +#define SIGILL		 4 +#define SIGTRAP		 5 +#define SIGABRT		 6 +#define SIGIOT		 6 +#define SIGBUS		 7 +#define SIGFPE		 8 +#define SIGKILL		 9 +#define SIGUSR1		10 +#define SIGSEGV		11 +#define SIGUSR2		12 +#define SIGPIPE		13 +#define SIGALRM		14 +#define SIGTERM		15 +#define SIGSTKFLT	16 +#define SIGCHLD		17 +#define SIGCONT		18 +#define SIGSTOP		19 +#define SIGTSTP		20 +#define SIGTTIN		21 +#define SIGTTOU		22 +#define SIGURG		23 +#define SIGXCPU		24 +#define SIGXFSZ		25 +#define SIGVTALRM	26 +#define SIGPROF		27 +#define SIGWINCH	28 +#define SIGIO		29 +#define SIGPOLL		SIGIO +/* +#define SIGLOST		29 +*/ +#define SIGPWR		30 +#define SIGSYS		31 +#define	SIGUNUSED	31 + +/* These should not be considered constants from userland.  */ +#define SIGRTMIN	32 +#define SIGRTMAX	(_NSIG-1) + +/* + * SA_FLAGS values: + * + * SA_ONSTACK is not currently supported, but will allow sigaltstack(2). + * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the + * SA_RESTART flag to get restarting signals (which were the default long ago) + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. + * SA_RESETHAND clears the handler when the signal is delivered. + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. + * SA_NODEFER prevents the current signal from being masked in the handler. + * + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single + * Unix names RESETHAND and NODEFER respectively. + */ +#define SA_NOCLDSTOP	0x00000001 +#define SA_NOCLDWAIT	0x00000002 /* not supported yet */ +#define SA_SIGINFO	0x00000004 +#define SA_ONSTACK	0x08000000 +#define SA_RESTART	0x10000000 +#define SA_NODEFER	0x40000000 +#define SA_RESETHAND	0x80000000 + +#define SA_NOMASK	SA_NODEFER +#define SA_ONESHOT	SA_RESETHAND +#define SA_INTERRUPT	0x20000000 /* dummy -- ignored */ + +#define SA_RESTORER	0x04000000 + +/* + * sigaltstack controls + */ +#define SS_ONSTACK	1 +#define SS_DISABLE	2 + +#define MINSIGSTKSZ	2048 +#define SIGSTKSZ	8192 +#ifdef __KERNEL__ + +/* + * These values of sa_flags are used only by the kernel as part of the + * irq handling routines. + * + * SA_INTERRUPT is also used by the irq handling routines. + * SA_SHIRQ is for shared interrupt support on PCI and EISA. + */ +#define SA_PROBE		SA_ONESHOT +#define SA_SAMPLE_RANDOM	SA_RESTART +#define SA_SHIRQ		0x04000000 +#endif + +#define SIG_BLOCK          0	/* for blocking signals */ +#define SIG_UNBLOCK        1	/* for unblocking signals */ +#define SIG_SETMASK        2	/* for setting the signal mask */ + +/* Type of a signal handler.  */ +typedef void (*__sighandler_t)(int); + +#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */ +#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */ +#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */ + +struct old_sigaction { +	__sighandler_t sa_handler; +	old_sigset_t sa_mask; +	unsigned long sa_flags; +	void (*sa_restorer)(void); +}; + +struct sigaction { +	__sighandler_t sa_handler; +	unsigned long sa_flags; +	void (*sa_restorer)(void); +	sigset_t sa_mask;		/* mask last for extensibility */ +}; + +struct k_sigaction { +	struct sigaction sa; +}; + +typedef struct sigaltstack { +	void *ss_sp; +	int ss_flags; +	size_t ss_size; +} stack_t; + +#ifdef __KERNEL__ +#include <asm/sigcontext.h> + +#endif + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/spl.h b/roms/u-boot/arch/powerpc/include/asm/spl.h new file mode 100644 index 00000000..ef58fd9b --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/spl.h @@ -0,0 +1,15 @@ +/* + * (C) Copyright 2012 + * Texas Instruments, <www.ti.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef	_ASM_SPL_H_ +#define	_ASM_SPL_H_ + +#define BOOT_DEVICE_NOR		1 + +/* Linker symbols */ +extern char __bss_start[], __bss_end[]; + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/status_led.h b/roms/u-boot/arch/powerpc/include/asm/status_led.h new file mode 100644 index 00000000..44161904 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/status_led.h @@ -0,0 +1,77 @@ +/* + * asm/status_led.h + * + * MPC8xx/MPC8260/MPC5xx based status led support functions + */ + +#ifndef __ASM_STATUS_LED_H__ +#define __ASM_STATUS_LED_H__ + +/* if not overriden */ +#ifndef CONFIG_BOARD_SPECIFIC_LED +# if defined(CONFIG_8xx) +#  include <mpc8xx.h> +# elif defined(CONFIG_MPC8260) +#  include <mpc8260.h> +# elif defined(CONFIG_5xx) +#  include <mpc5xx.h> +# else +#  error CPU specific Status LED header file missing. +#endif + +/* led_id_t is unsigned long mask */ +typedef unsigned long led_id_t; + +static inline void __led_init (led_id_t mask, int state) +{ +	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; + +#ifdef STATUS_LED_PAR +	immr->STATUS_LED_PAR &= ~mask; +#endif +#ifdef STATUS_LED_ODR +	immr->STATUS_LED_ODR &= ~mask; +#endif + +#if (STATUS_LED_ACTIVE == 0) +	if (state == STATUS_LED_ON) +		immr->STATUS_LED_DAT &= ~mask; +	else +		immr->STATUS_LED_DAT |= mask; +#else +	if (state == STATUS_LED_ON) +		immr->STATUS_LED_DAT |= mask; +	else +		immr->STATUS_LED_DAT &= ~mask; +#endif +#ifdef STATUS_LED_DIR +	immr->STATUS_LED_DIR |= mask; +#endif +} + +static inline void __led_toggle (led_id_t mask) +{ +	((immap_t *) CONFIG_SYS_IMMR)->STATUS_LED_DAT ^= mask; +} + +static inline void __led_set (led_id_t mask, int state) +{ +	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; + +#if (STATUS_LED_ACTIVE == 0) +	if (state == STATUS_LED_ON) +		immr->STATUS_LED_DAT &= ~mask; +	else +		immr->STATUS_LED_DAT |= mask; +#else +	if (state == STATUS_LED_ON) +		immr->STATUS_LED_DAT |= mask; +	else +		immr->STATUS_LED_DAT &= ~mask; +#endif + +} + +#endif + +#endif	/* __ASM_STATUS_LED_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/string.h b/roms/u-boot/arch/powerpc/include/asm/string.h new file mode 100644 index 00000000..036805ed --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/string.h @@ -0,0 +1,29 @@ +#ifndef _PPC_STRING_H_ +#define _PPC_STRING_H_ + +#define __HAVE_ARCH_STRCPY +#define __HAVE_ARCH_STRNCPY +#define __HAVE_ARCH_STRLEN +#define __HAVE_ARCH_STRCMP +#define __HAVE_ARCH_STRCAT +#define __HAVE_ARCH_MEMSET +#define __HAVE_ARCH_BCOPY +#define __HAVE_ARCH_MEMCPY +#define __HAVE_ARCH_MEMMOVE +#define __HAVE_ARCH_MEMCMP +#define __HAVE_ARCH_MEMCHR + +extern int strcasecmp(const char *, const char *); +extern int strncasecmp(const char *, const char *, __kernel_size_t); +extern char * strcpy(char *,const char *); +extern char * strncpy(char *,const char *, __kernel_size_t); +extern __kernel_size_t strlen(const char *); +extern int strcmp(const char *,const char *); +extern char * strcat(char *, const char *); +extern void * memset(void *,int,__kernel_size_t); +extern void * memcpy(void *,const void *,__kernel_size_t); +extern void * memmove(void *,const void *,__kernel_size_t); +extern int memcmp(const void *,const void *,__kernel_size_t); +extern void * memchr(const void *,int,__kernel_size_t); + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/types.h b/roms/u-boot/arch/powerpc/include/asm/types.h new file mode 100644 index 00000000..b27a6b75 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/types.h @@ -0,0 +1,58 @@ +#ifndef _PPC_TYPES_H +#define _PPC_TYPES_H + +#ifndef __ASSEMBLY__ + +typedef unsigned short umode_t; + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#if defined(__GNUC__) +__extension__ typedef __signed__ long long __s64; +__extension__ typedef unsigned long long __u64; +#endif + +typedef struct { +	__u32 u[4]; +} __attribute__((aligned(16))) vector128; + +#ifdef __KERNEL__ +/* + * These aren't exported outside the kernel to avoid name space clashes + */ +typedef signed char s8; +typedef unsigned char u8; + +typedef signed short s16; +typedef unsigned short u16; + +typedef signed int s32; +typedef unsigned int u32; + +typedef signed long long s64; +typedef unsigned long long u64; + +#define BITS_PER_LONG 32 + +/* DMA addresses are 32-bits wide */ +typedef u32 dma_addr_t; + +#ifdef CONFIG_PHYS_64BIT +typedef unsigned long long phys_addr_t; +typedef unsigned long long phys_size_t; +#else +typedef unsigned long phys_addr_t; +typedef unsigned long phys_size_t; +#endif + +#endif /* __KERNEL__ */ +#endif /* __ASSEMBLY__ */ + +#endif diff --git a/roms/u-boot/arch/powerpc/include/asm/u-boot.h b/roms/u-boot/arch/powerpc/include/asm/u-boot.h new file mode 100644 index 00000000..e1b566fa --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/u-boot.h @@ -0,0 +1,130 @@ +/* + * (C) Copyright 2000 - 2002 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + ******************************************************************** + * NOTE: This header file defines an interface to U-Boot. Including + * this (unmodified) header file in another file is considered normal + * use of U-Boot, and does *not* fall under the heading of "derived + * work". + ******************************************************************** + */ + +#ifndef __U_BOOT_H__ +#define __U_BOOT_H__ + +/* + * Board information passed to Linux kernel from U-Boot + * + * include/asm-ppc/u-boot.h + */ + +#ifdef CONFIG_SYS_GENERIC_BOARD +/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> +#else + +#ifndef __ASSEMBLY__ + +typedef struct bd_info { +	unsigned long	bi_memstart;	/* start of DRAM memory */ +	phys_size_t	bi_memsize;	/* size	 of DRAM memory in bytes */ +	unsigned long	bi_flashstart;	/* start of FLASH memory */ +	unsigned long	bi_flashsize;	/* size	 of FLASH memory */ +	unsigned long	bi_flashoffset; /* reserved area for startup monitor */ +	unsigned long	bi_sramstart;	/* start of SRAM memory */ +	unsigned long	bi_sramsize;	/* size	 of SRAM memory */ +#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_MPC8260) \ +	|| defined(CONFIG_E500) || defined(CONFIG_MPC86xx) +	unsigned long	bi_immr_base;	/* base of IMMR register */ +#endif +#if defined(CONFIG_MPC5xxx) +	unsigned long	bi_mbar_base;	/* base of internal registers */ +#endif +#if defined(CONFIG_MPC83xx) +	unsigned long	bi_immrbar; +#endif +	unsigned long	bi_bootflags;	/* boot / reboot flag (Unused) */ +	unsigned long	bi_ip_addr;	/* IP Address */ +	unsigned char	bi_enetaddr[6];	/* OLD: see README.enetaddr */ +	unsigned short	bi_ethspeed;	/* Ethernet speed in Mbps */ +	unsigned long	bi_intfreq;	/* Internal Freq, in MHz */ +	unsigned long	bi_busfreq;	/* Bus Freq, in MHz */ +#if defined(CONFIG_CPM2) +	unsigned long	bi_cpmfreq;	/* CPM_CLK Freq, in MHz */ +	unsigned long	bi_brgfreq;	/* BRG_CLK Freq, in MHz */ +	unsigned long	bi_sccfreq;	/* SCC_CLK Freq, in MHz */ +	unsigned long	bi_vco;		/* VCO Out from PLL, in MHz */ +#endif +#if defined(CONFIG_MPC512X) +	unsigned long	bi_ipsfreq;	/* IPS Bus Freq, in MHz */ +#endif /* CONFIG_MPC512X */ +#if defined(CONFIG_MPC5xxx) +	unsigned long	bi_ipbfreq;	/* IPB Bus Freq, in MHz */ +	unsigned long	bi_pcifreq;	/* PCI Bus Freq, in MHz */ +#endif +#if defined(CONFIG_405)   || \ +    defined(CONFIG_405GP) || \ +    defined(CONFIG_405EP) || \ +    defined(CONFIG_405EZ) || \ +    defined(CONFIG_405EX) || \ +    defined(CONFIG_440) +	unsigned char	bi_s_version[4];	/* Version of this structure */ +	unsigned char	bi_r_version[32];	/* Version of the ROM (AMCC) */ +	unsigned int	bi_procfreq;	/* CPU (Internal) Freq, in Hz */ +	unsigned int	bi_plb_busfreq;	/* PLB Bus speed, in Hz */ +	unsigned int	bi_pci_busfreq;	/* PCI Bus speed, in Hz */ +	unsigned char	bi_pci_enetaddr[6];	/* PCI Ethernet MAC address */ +#endif +#if defined(CONFIG_HYMOD) +	hymod_conf_t	bi_hymod_conf;	/* hymod configuration information */ +#endif + +#ifdef CONFIG_HAS_ETH1 +	unsigned char   bi_enet1addr[6];	/* OLD: see README.enetaddr */ +#endif +#ifdef CONFIG_HAS_ETH2 +	unsigned char	bi_enet2addr[6];	/* OLD: see README.enetaddr */ +#endif +#ifdef CONFIG_HAS_ETH3 +	unsigned char   bi_enet3addr[6];	/* OLD: see README.enetaddr */ +#endif +#ifdef CONFIG_HAS_ETH4 +	unsigned char   bi_enet4addr[6];	/* OLD: see README.enetaddr */ +#endif +#ifdef CONFIG_HAS_ETH5 +	unsigned char   bi_enet5addr[6];	/* OLD: see README.enetaddr */ +#endif + +#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \ +    defined(CONFIG_405EZ) || defined(CONFIG_440GX) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +	unsigned int	bi_opbfreq;		/* OPB clock in Hz */ +	int		bi_iic_fast[2];		/* Use fast i2c mode */ +#endif +#if defined(CONFIG_4xx) +#if defined(CONFIG_440GX) || \ +    defined(CONFIG_460EX) || defined(CONFIG_460GT) +	int		bi_phynum[4];           /* Determines phy mapping */ +	int		bi_phymode[4];          /* Determines phy mode */ +#elif defined(CONFIG_405EP) || defined(CONFIG_405EX) || defined(CONFIG_440) +	int		bi_phynum[2];           /* Determines phy mapping */ +	int		bi_phymode[2];          /* Determines phy mode */ +#else +	int		bi_phynum[1];           /* Determines phy mapping */ +	int		bi_phymode[1];          /* Determines phy mode */ +#endif +#endif /* defined(CONFIG_4xx) */ +} bd_t; + +#endif /* __ASSEMBLY__ */ + +#endif /* !CONFIG_SYS_GENERIC_BOARD */ + +/* For image.h:image_check_target_arch() */ +#define IH_ARCH_DEFAULT IH_ARCH_PPC + +#endif	/* __U_BOOT_H__ */ diff --git a/roms/u-boot/arch/powerpc/include/asm/unaligned.h b/roms/u-boot/arch/powerpc/include/asm/unaligned.h new file mode 100644 index 00000000..5f1b1e3c --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/unaligned.h @@ -0,0 +1,16 @@ +#ifndef _ASM_POWERPC_UNALIGNED_H +#define _ASM_POWERPC_UNALIGNED_H + +#ifdef __KERNEL__ + +/* + * The PowerPC can do unaligned accesses itself in big endian mode. + */ +#include <linux/unaligned/access_ok.h> +#include <linux/unaligned/generic.h> + +#define get_unaligned	__get_unaligned_be +#define put_unaligned	__put_unaligned_be + +#endif	/* __KERNEL__ */ +#endif	/* _ASM_POWERPC_UNALIGNED_H */ diff --git a/roms/u-boot/arch/powerpc/include/asm/xilinx_irq.h b/roms/u-boot/arch/powerpc/include/asm/xilinx_irq.h new file mode 100644 index 00000000..333a0372 --- /dev/null +++ b/roms/u-boot/arch/powerpc/include/asm/xilinx_irq.h @@ -0,0 +1,25 @@ +/* + * (C) Copyright 2008 + * Ricado Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es + * This work has been supported by: QTechnology  http://qtec.com/ + * Based on interrupts.c Wolfgang Denk-DENX Software Engineering-wd@denx.de + * SPDX-License-Identifier:	GPL-2.0+ +*/ +#ifndef XILINX_IRQ_H +#define XILINX_IRQ_H + +#define intc	XPAR_INTC_0_BASEADDR +#define ISR	(intc + (0 * 4))	/* Interrupt Status Register */ +#define IPR	(intc + (1 * 4))	/* Interrupt Pending Register */ +#define IER	(intc + (2 * 4))	/* Interrupt Enable Register */ +#define IAR	(intc + (3 * 4))	/* Interrupt Acknowledge Register */ +#define SIE	(intc + (4 * 4))	/* Set Interrupt Enable bits */ +#define CIE	(intc + (5 * 4))	/* Clear Interrupt Enable bits */ +#define IVR	(intc + (6 * 4))	/* Interrupt Vector Register */ +#define MER	(intc + (7 * 4))	/* Master Enable Register */ + +#define IRQ_MASK(irq)	(1 << (irq & 0x1f)) + +#define IRQ_MAX		XPAR_INTC_MAX_NUM_INTR_INPUTS + +#endif  | 
