diff options
| -rw-r--r-- | board/freescale/common/pq-mds-pib.c | 101 | ||||
| -rw-r--r-- | board/freescale/common/pq-mds-pib.h | 9 | ||||
| -rw-r--r-- | board/mpc832xemds/Makefile | 2 | ||||
| -rw-r--r-- | board/mpc832xemds/mpc832xemds.c | 11 | ||||
| -rw-r--r-- | board/mpc832xemds/pci.c | 40 | ||||
| -rw-r--r-- | board/mpc8360emds/Makefile | 2 | ||||
| -rw-r--r-- | board/mpc8360emds/mpc8360emds.c | 11 | ||||
| -rw-r--r-- | board/mpc8360emds/pci.c | 40 | ||||
| -rw-r--r-- | include/configs/MPC832XEMDS.h | 3 | ||||
| -rw-r--r-- | include/configs/MPC8360EMDS.h | 7 | 
10 files changed, 142 insertions, 84 deletions
| diff --git a/board/freescale/common/pq-mds-pib.c b/board/freescale/common/pq-mds-pib.c new file mode 100644 index 000000000..9799117a9 --- /dev/null +++ b/board/freescale/common/pq-mds-pib.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2007 Freescale Semiconductor, Inc. + * + * Tony Li <tony.li@freescale.com> + * + * 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; + */ + +#include <common.h> +#include <i2c.h> +#include <asm/io.h> + +#include "pq-mds-pib.h" + +int pib_init(void) +{ +	u8 val8; +	u8 orig_i2c_bus; + +	/* Switch temporarily to I2C bus #2 */ +	orig_i2c_bus = i2c_get_bus_num(); +	i2c_set_bus_num(1); +#if defined(CONFIG_PCI) && !defined(CONFIG_PCISLAVE) +	/* Assign PIB PMC slot to desired PCI bus */ +	val8 = 0; +	i2c_write(0x23, 0x6, 1, &val8, 1); +	i2c_write(0x23, 0x7, 1, &val8, 1); +	val8 = 0xff; +	i2c_write(0x23, 0x2, 1, &val8, 1); +	i2c_write(0x23, 0x3, 1, &val8, 1); + +	val8 = 0; +	i2c_write(0x26, 0x6, 1, &val8, 1); +	val8 = 0x34; +	i2c_write(0x26, 0x7, 1, &val8, 1); +#if defined(CONFIG_MPC832XEMDS) +	val8 = 0xf9;            /* PMC2, PMC3 slot to PCI bus */ +#else +	val8 = 0xf3;		/* PMC1, PMC2, PMC3 slot to PCI bus */ +#endif +	i2c_write(0x26, 0x2, 1, &val8, 1); +	val8 = 0xff; +	i2c_write(0x26, 0x3, 1, &val8, 1); + +	val8 = 0; +	i2c_write(0x27, 0x6, 1, &val8, 1); +	i2c_write(0x27, 0x7, 1, &val8, 1); +	val8 = 0xff; +	i2c_write(0x27, 0x2, 1, &val8, 1); +	val8 = 0xef; +	i2c_write(0x27, 0x3, 1, &val8, 1); + +	eieio(); + +#if defined(CONFIG_MPC832XEMDS) +	printf("PCI 32bit bus on PMC2 &PMC3\n"); +#else +	printf("PCI 32bit bus on PMC1 & PMC2 &PMC3\n"); +#endif +#endif + +#if defined(CONFIG_PQ_MDS_PIB_ATM) +#if defined(CONFIG_MPC8360EMDS) +	val8 = 0; +	i2c_write(0x20, 0x6, 1, &val8, 1); +	i2c_write(0x20, 0x7, 1, &val8, 1); + +	val8 = 0xdf; +	i2c_write(0x20, 0x2, 1, &val8, 1); +	val8 = 0xf7; +	i2c_write(0x20, 0x3, 1, &val8, 1); + +	eieio(); + +	printf("QOC3 ATM card on PMC0\n"); +#elif defined(CONFIG_MPC832XEMDS) +	val = 0; +	i2c_write(0x26, 0x7, 1, &val, 1); +	val = 0xf7; +	i2c_write(0x26, 0x3, 1, &val, 1); + +	val = 0; +	i2c_write(0x21, 0x6, 1, &val, 1); +	i2c_write(0x21, 0x7, 1, &val, 1); + +	val = 0xdf; +	i2c_write(0x21, 0x2, 1, &val, 1); +	val = 0xef; +	i2c_write(0x21, 0x3, 1, &val, 1); + +	eieio(); + +	printf("QOC3 ATM card on PMC1\n"); +#endif +#endif +	/* Reset to original I2C bus */ +	i2c_set_bus_num(orig_i2c_bus); +	return 0; +} diff --git a/board/freescale/common/pq-mds-pib.h b/board/freescale/common/pq-mds-pib.h new file mode 100644 index 000000000..67066fd11 --- /dev/null +++ b/board/freescale/common/pq-mds-pib.h @@ -0,0 +1,9 @@ +/* + * Copyright (C) 2007 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; + */ + +extern int pib_init(void); diff --git a/board/mpc832xemds/Makefile b/board/mpc832xemds/Makefile index 5ec7a871d..4da74b827 100644 --- a/board/mpc832xemds/Makefile +++ b/board/mpc832xemds/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).a -COBJS	:= $(BOARD).o pci.o +COBJS	:= $(BOARD).o pci.o ../freescale/common/pq-mds-pib.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS)) diff --git a/board/mpc832xemds/mpc832xemds.c b/board/mpc832xemds/mpc832xemds.c index f70783e73..207fcdf8b 100644 --- a/board/mpc832xemds/mpc832xemds.c +++ b/board/mpc832xemds/mpc832xemds.c @@ -32,6 +32,9 @@  #elif defined(CONFIG_OF_LIBFDT)  #include <libfdt.h>  #endif +#if defined(CONFIG_PQ_MDS_PIB) +#include "../freescale/common/pq-mds-pib.h" +#endif  const qe_iop_conf_t qe_iop_conf_tab[] = {  	/* ETH3 */ @@ -88,6 +91,14 @@ int board_early_init_f(void)  	return 0;  } +int board_early_init_r(void) +{ +#ifdef CONFIG_PQ_MDS_PIB +	pib_init(); +#endif +	return 0; +} +  int fixed_sdram(void);  long int initdram(int board_type) diff --git a/board/mpc832xemds/pci.c b/board/mpc832xemds/pci.c index c2f61ea6a..6bc35c70f 100644 --- a/board/mpc832xemds/pci.c +++ b/board/mpc832xemds/pci.c @@ -131,7 +131,6 @@ void pci_init_board(void)  	volatile pcictrl83xx_t *pci_ctrl;  	volatile pciconf83xx_t *pci_conf; -	u8 val8, orig_i2c_bus;  	u16 reg16;  	u32 val32;  	u32 dev; @@ -200,43 +199,6 @@ void pci_init_board(void)  	    PIWAR_IWS_2G;  	/* -	 * Assign PIB PMC slot to desired PCI bus -	 */ - -	/* Switch temporarily to I2C bus #2 */ -	orig_i2c_bus = i2c_get_bus_num(); -	i2c_set_bus_num(1); - -	val8 = 0; -	i2c_write(0x23, 0x6, 1, &val8, 1); -	i2c_write(0x23, 0x7, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x23, 0x2, 1, &val8, 1); -	i2c_write(0x23, 0x3, 1, &val8, 1); - -	val8 = 0; -	i2c_write(0x26, 0x6, 1, &val8, 1); -	val8 = 0x34; -	i2c_write(0x26, 0x7, 1, &val8, 1); - -	val8 = 0xf9;		/* PMC2, PMC3 slot to PCI bus */ -	i2c_write(0x26, 0x2, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x26, 0x3, 1, &val8, 1); - -	val8 = 0; -	i2c_write(0x27, 0x6, 1, &val8, 1); -	i2c_write(0x27, 0x7, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x27, 0x2, 1, &val8, 1); -	val8 = 0xef; -	i2c_write(0x27, 0x3, 1, &val8, 1); -	asm("eieio"); - -	/* Reset to original I2C bus */ -	i2c_set_bus_num(orig_i2c_bus); - -	/*  	 * Release PCI RST Output signal  	 */  	udelay(2000); @@ -292,8 +254,6 @@ void pci_init_board(void)  	pci_hose_write_config_byte(&hose[0], dev, PCI_LATENCY_TIMER, 0x80);  	pci_hose_write_config_byte(&hose[0], dev, PCI_CACHE_LINE_SIZE, 0x08); -	printf("PCI 32bit bus on PMC2 & PMC3\n"); -  	/*  	 * Hose scan.  	 */ diff --git a/board/mpc8360emds/Makefile b/board/mpc8360emds/Makefile index 5ec7a871d..4da74b827 100644 --- a/board/mpc8360emds/Makefile +++ b/board/mpc8360emds/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).a -COBJS	:= $(BOARD).o pci.o +COBJS	:= $(BOARD).o pci.o ../freescale/common/pq-mds-pib.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS)) diff --git a/board/mpc8360emds/mpc8360emds.c b/board/mpc8360emds/mpc8360emds.c index 386173351..d6d0f4e25 100644 --- a/board/mpc8360emds/mpc8360emds.c +++ b/board/mpc8360emds/mpc8360emds.c @@ -30,6 +30,9 @@  #elif defined(CONFIG_OF_LIBFDT)  #include <libfdt.h>  #endif +#if defined(CONFIG_PQ_MDS_PIB) +#include "../freescale/common/pq-mds-pib.h" +#endif  const qe_iop_conf_t qe_iop_conf_tab[] = {  	/* GETH1 */ @@ -106,6 +109,14 @@ int board_early_init_f(void)  	return 0;  } +int board_early_init_r(void) +{ +#ifdef CONFIG_PQ_MDS_PIB +	pib_init(); +#endif +	return 0; +} +  #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRC)  extern void ddr_enable_ecc(unsigned int dram_size);  #endif diff --git a/board/mpc8360emds/pci.c b/board/mpc8360emds/pci.c index 79812853e..cf7ef9044 100644 --- a/board/mpc8360emds/pci.c +++ b/board/mpc8360emds/pci.c @@ -131,7 +131,6 @@ void pci_init_board(void)  	volatile pcictrl83xx_t *pci_ctrl;  	volatile pciconf83xx_t *pci_conf; -	u8 val8, orig_i2c_bus;  	u16 reg16;  	u32 val32;  	u32 dev; @@ -200,43 +199,6 @@ void pci_init_board(void)  	    PIWAR_IWS_2G;  	/* -	 * Assign PIB PMC slot to desired PCI bus -	 */ - -	/* Switch temporarily to I2C bus #2 */ -	orig_i2c_bus = i2c_get_bus_num(); -	i2c_set_bus_num(1); - -	val8 = 0; -	i2c_write(0x23, 0x6, 1, &val8, 1); -	i2c_write(0x23, 0x7, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x23, 0x2, 1, &val8, 1); -	i2c_write(0x23, 0x3, 1, &val8, 1); - -	val8 = 0; -	i2c_write(0x26, 0x6, 1, &val8, 1); -	val8 = 0x34; -	i2c_write(0x26, 0x7, 1, &val8, 1); - -	val8 = 0xf3;		/*PMC1, PMC2, PMC3 slot to PCI bus */ -	i2c_write(0x26, 0x2, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x26, 0x3, 1, &val8, 1); - -	val8 = 0; -	i2c_write(0x27, 0x6, 1, &val8, 1); -	i2c_write(0x27, 0x7, 1, &val8, 1); -	val8 = 0xff; -	i2c_write(0x27, 0x2, 1, &val8, 1); -	val8 = 0xef; -	i2c_write(0x27, 0x3, 1, &val8, 1); -	asm("eieio"); - -	/* Reset to original I2C bus */ -	i2c_set_bus_num(orig_i2c_bus); - -	/*  	 * Release PCI RST Output signal  	 */  	udelay(2000); @@ -292,8 +254,6 @@ void pci_init_board(void)  	pci_hose_write_config_byte(&hose[0], dev, PCI_LATENCY_TIMER, 0x80);  	pci_hose_write_config_byte(&hose[0], dev, PCI_CACHE_LINE_SIZE, 0x08); -	printf("PCI 32bit bus on PMC1 & PMC2 & PMC3\n"); -  	/*  	 * Hose scan.  	 */ diff --git a/include/configs/MPC832XEMDS.h b/include/configs/MPC832XEMDS.h index e8c6b7502..efc317288 100644 --- a/include/configs/MPC832XEMDS.h +++ b/include/configs/MPC832XEMDS.h @@ -30,6 +30,8 @@  #define CONFIG_MPC83XX		1	/* MPC83xx family */  #define CONFIG_MPC832X		1	/* MPC832x CPU specific */  #define CONFIG_MPC832XEMDS	1	/* MPC832XEMDS board specific */ +#undef CONFIG_PQ_MDS_PIB /* POWERQUICC MDS Platform IO Board */ +#undef CONFIG_PQ_MDS_PIB_ATM	/* QOC3 ATM card */  /*   * System Clock Setup @@ -87,6 +89,7 @@  #define CFG_SICRL		0x00000000  #define CONFIG_BOARD_EARLY_INIT_F	/* call board_pre_init */ +#define CONFIG_BOARD_EARLY_INIT_R  /*   * IMMR new address diff --git a/include/configs/MPC8360EMDS.h b/include/configs/MPC8360EMDS.h index 4b32a140e..094b66e7c 100644 --- a/include/configs/MPC8360EMDS.h +++ b/include/configs/MPC8360EMDS.h @@ -32,6 +32,8 @@  #define CONFIG_MPC83XX		1 /* MPC83XX family */  #define CONFIG_MPC8360		1 /* MPC8360 CPU specific */  #define CONFIG_MPC8360EMDS	1 /* MPC8360EMDS board specific */ +#undef CONFIG_PQ_MDS_PIB /* POWERQUICC MDS Platform IO Board */ +#undef CONFIG_PQ_MDS_PIB_ATM /* QOC3 ATM card */  /*   * System Clock Setup @@ -88,6 +90,7 @@  #define CFG_SICRL		0x40000000  #define CONFIG_BOARD_EARLY_INIT_F /* call board_pre_init */ +#define CONFIG_BOARD_EARLY_INIT_R  /*   * IMMR new address @@ -309,13 +312,13 @@  /*   * CS4 on Local Bus, to PIB   */ -#define CFG_BR4_PRELIM	0xf8008801 /* CS4 base address at 0xf8008000 */ +#define CFG_BR4_PRELIM	0xf8010801 /* CS4 base address at 0xf8010000 */  #define CFG_OR4_PRELIM	0xffffe9f7 /* size 32KB, port size 8bit, GPCM */  /*   * CS5 on Local Bus, to PIB   */ -#define CFG_BR5_PRELIM	0xf8010801 /* CS5 base address at 0xf8010000 */ +#define CFG_BR5_PRELIM	0xf8008801 /* CS5 base address at 0xf8008000 */  #define CFG_OR5_PRELIM	0xffffe9f7 /* size 32KB, port size 8bit, GPCM */  /* |