This patch adds support for the kmsupx4 board from Keymile, based on a Freescale MPC852T CPU
- serial console on SMC1 - 32 MB SDRAM - 32 MB NOR Flash - Ethernet over SCC3 - I2C bitbang Signed-off-by: Heiko Schocher <h...@denx.de> --- MAINTAINERS | 1 + MAKEALL | 1 + Makefile | 3 ++ board/keymile/common/common.c | 6 ++++- board/keymile/km8xx/km8xx.c | 7 +++++- cpu/mpc8xx/cpu_init.c | 2 + cpu/mpc8xx/start.S | 3 +- drivers/hwmon/lm75.c | 2 + drivers/i2c/soft_i2c.c | 3 ++ include/commproc.h | 8 +++--- include/configs/km8xx.h | 46 ++++++++++++++++++++++++++++++++--------- include/configs/kmsupx4.h | 38 +++++++++++++++++++++++++++++++++ include/configs/mgsuvd.h | 1 + lib_ppc/board.c | 3 +- 14 files changed, 106 insertions(+), 18 deletions(-) create mode 100644 include/configs/kmsupx4.h diff --git a/MAINTAINERS b/MAINTAINERS index 38feac8..ef53e7b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -380,6 +380,7 @@ Heiko Schocher <h...@denx.de> ids8247 MPC8247 jupiter MPC5200 kmeter1 MPC8360 + kmsupx4 MPC852T mgcoge MPC8247 mgsuvd MPC852 mucmc52 MPC5200 diff --git a/MAKEALL b/MAKEALL index cf05133..508b81c 100755 --- a/MAKEALL +++ b/MAKEALL @@ -117,6 +117,7 @@ LIST_8xx=" \ KUP4X \ LANTEC \ lwmon \ + kmsupx4 \ MBX \ MBX860T \ mgsuvd \ diff --git a/Makefile b/Makefile index c867d12..b7cd3f2 100644 --- a/Makefile +++ b/Makefile @@ -921,6 +921,9 @@ IVMS8_config: unconfig } @$(MKCONFIG) -a IVMS8 ppc mpc8xx ivm +kmsupx4_config: unconfig + @$(MKCONFIG) $(@:_config=) ppc mpc8xx km8xx keymile + KUP4K_config : unconfig @$(MKCONFIG) $(@:_config=) ppc mpc8xx kup4k kup diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c index 48ce613..b2bd7fd 100644 --- a/board/keymile/common/common.c +++ b/board/keymile/common/common.c @@ -295,11 +295,14 @@ int ivm_analyze_eeprom (unsigned char *buf, int len) int ivm_read_eeprom (void) { +#if defined(CONFIG_I2C_MUX) I2C_MUX_DEVICE *dev = NULL; +#endif uchar i2c_buffer[CONFIG_SYS_IVM_EEPROM_MAX_LEN]; uchar *buf; unsigned dev_addr = CONFIG_SYS_IVM_EEPROM_ADR; +#if defined(CONFIG_I2C_MUX) /* First init the Bus, select the Bus */ #if defined(CONFIG_SYS_I2C_IVM_BUS) dev = i2c_mux_ident_muxstring ((uchar *)CONFIG_SYS_I2C_IVM_BUS); @@ -313,6 +316,7 @@ int ivm_read_eeprom (void) return -1; } i2c_set_bus_num (dev->busid); +#endif buf = (unsigned char *) getenv ("EEprom_ivm_addr"); if (buf != NULL) @@ -390,7 +394,7 @@ static void setports (int gpio) #endif #endif -#if defined(CONFIG_MGSUVD) +#if defined(CONFIG_KM8XX) static void set_sda (int state) { I2C_SDA(state); diff --git a/board/keymile/km8xx/km8xx.c b/board/keymile/km8xx/km8xx.c index e7bfa31..845d3f2 100644 --- a/board/keymile/km8xx/km8xx.c +++ b/board/keymile/km8xx/km8xx.c @@ -61,7 +61,12 @@ const uint sdram_table[] = int checkboard (void) { - puts ("Board: Keymile mgsuvd"); + puts ("Board: Keymile "); +#if defined(CONFIG_KMSUPX4) + puts ("kmsupx4"); +#else + puts ("mgsuvd"); +#endif if (ethernet_present ()) puts (" with PIGGY."); puts ("\n"); diff --git a/cpu/mpc8xx/cpu_init.c b/cpu/mpc8xx/cpu_init.c index eb0091b..050008e 100644 --- a/cpu/mpc8xx/cpu_init.c +++ b/cpu/mpc8xx/cpu_init.c @@ -119,11 +119,13 @@ void cpu_init_f (volatile immap_t * immr) * Memory Controller: */ +#if !defined(CONFIG_KMSUPX4) /* perform BR0 reset that MPC850 Rev. A can't guarantee */ reg = memctl->memc_br0; reg &= BR_PS_MSK; /* Clear everything except Port Size bits */ reg |= BR_V; /* then add just the "Bank Valid" bit */ memctl->memc_br0 = reg; +#endif /* Map banks 0 (and maybe 1) to the FLASH banks 0 (and 1) at * preliminary addresses - these have to be modified later diff --git a/cpu/mpc8xx/start.S b/cpu/mpc8xx/start.S index 45c902e..352af16 100644 --- a/cpu/mpc8xx/start.S +++ b/cpu/mpc8xx/start.S @@ -142,7 +142,8 @@ boot_warm: lis r3, idc_disa...@h /* Disable data cache */ mtspr DC_CST, r3 -#if !(defined(CONFIG_IP860) || defined(CONFIG_PCU_E) || defined (CONFIG_FLAGADM)) +#if !(defined(CONFIG_IP860) || defined(CONFIG_PCU_E) || \ + defined (CONFIG_FLAGADM) || defined(CONFIG_KMSUPX4)) /* On IP860 and PCU E, * we cannot enable IC yet */ diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c index ecfc345..156338b 100644 --- a/drivers/hwmon/lm75.c +++ b/drivers/hwmon/lm75.c @@ -159,6 +159,7 @@ int dtt_init (void) /* switch to correct I2C bus */ old_bus = I2C_GET_BUS(); +#if defined(CONFIG_I2C_MUX) if ((gd->flags & GD_FLG_RELOC) != GD_FLG_RELOC) { uchar *tmp = (uchar *)getenv("dtt_bus"); if (tmp == NULL) @@ -170,6 +171,7 @@ int dtt_init (void) } else { I2C_SET_BUS(CONFIG_SYS_DTT_BUS_NUM); } +#endif for (i = 0; i < sizeof(sensors); i++) { if (_dtt_init(sensors[i]) != 0) diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c index da6cec1..f273c67 100644 --- a/drivers/i2c/soft_i2c.c +++ b/drivers/i2c/soft_i2c.c @@ -43,6 +43,9 @@ #ifdef CONFIG_MPC866 /* only valid for MPC866 */ #include <asm/io.h> #endif +#ifdef CONFIG_MPC852T /* only valid for MPC852T */ +#include <asm/io.h> +#endif #include <i2c.h> /* #define DEBUG_I2C */ diff --git a/include/commproc.h b/include/commproc.h index 12decfe..9d28abc 100644 --- a/include/commproc.h +++ b/include/commproc.h @@ -1122,11 +1122,11 @@ typedef struct scc_enet { #define SICR_ENET_CLKRT ((uint)0x0000003d) #endif /* CONFIG_MBX */ -/*** MGSUVD *********************************************************/ +/*** KM8XX *********************************************************/ -/* The MGSUVD Service Module uses SCC3 for Ethernet */ +/* The KM8XX Service Module uses SCC3 for Ethernet */ -#ifdef CONFIG_MGSUVD +#ifdef CONFIG_KM8XX #define PROFF_ENET PROFF_SCC3 /* Ethernet on SCC3 */ #define CPM_CR_ENET CPM_CR_CH_SCC3 #define SCC_ENET 2 @@ -1145,7 +1145,7 @@ typedef struct scc_enet { */ #define SICR_ENET_MASK ((uint)0x00FF0000) #define SICR_ENET_CLKRT ((uint)0x00250000) -#endif /* CONFIG_MGSUVD */ +#endif /* CONFIG_KM8XX */ /*** MHPC ********************************************************/ diff --git a/include/configs/km8xx.h b/include/configs/km8xx.h index 1cb7756..344e1ad 100644 --- a/include/configs/km8xx.h +++ b/include/configs/km8xx.h @@ -32,12 +32,15 @@ * High Level Configuration Options * (easy to change) */ - -#define CONFIG_MPC866 1 /* This is a MPC866 CPU */ +#define CONFIG_KM8XX 1 /* on a km8xx board */ /* include common defines/options for all Keymile boards */ #include "keymile-common.h" +#if defined(CONFIG_KMSUPX4) +#undef CONFIG_I2C_MUX /* no I2C mux on this board */ +#endif + #define CONFIG_8xx_GCLK_FREQ 66000000 #define CONFIG_SYS_SMC_UCODE_PATCH 1 /* Relocate SMC1 */ @@ -59,7 +62,16 @@ #define BOOTFLASH_START F0000000 #define CONFIG_PRAM 512 /* protected RAM [KBytes] */ +#if defined(CONFIG_MGSUVD) #define CONFIG_ENV_IVM "EEprom_ivm=pca9544a:70:4 \0" +#else +#define CONFIG_ENV_IVM "" +#endif + +#define MTDIDS_DEFAULT "nor0=app" +#define MTDPARTS_DEFAULT \ + "mtdparts=app:384k(u-boot),128k(env),128k(envred),128k(free)," \ + "1536k(esw0),8704k(rootfs0),1536k(esw1),2432k(rootfs1),640k(var),768k(cfg)" #define CONFIG_EXTRA_ENV_SETTINGS \ CONFIG_KM_DEF_ENV \ @@ -67,9 +79,7 @@ "addcon=setenv bootargs ${bootargs} " \ "console=ttyCPM0,${baudrate}\0" \ "mtdids=nor0=app \0" \ - "mtdparts=mtdparts=app:384k(u-boot),128k(env),128k(envred)," \ - "128k(free),1536k(esw0),8704k(rootfs0),1536k(esw1)," \ - "2432k(rootfs1),640k(var),768k(cfg)\0" \ + "mtdparts=" MK_STR(MTDPARTS_DEFAULT) "\0" \ "partition=nor0,9 \0" \ "new_env=prot off F0060000 F009FFFF; era F0060000 F009FFFF \0" \ CONFIG_ENV_IVM \ @@ -159,7 +169,11 @@ * SIUMCR - SIU Module Configuration 11-6 *----------------------------------------------------------------------- */ +#if defined(CONFIG_MGSUVD) #define CONFIG_SYS_SIUMCR 0x00610480 +#else +#define CONFIG_SYS_SIUMCR 0x00610400 +#endif /*----------------------------------------------------------------------- * TBSCR - Time Base Status and Control 11-26 @@ -181,7 +195,11 @@ * Set clock output, timebase and RTC source and divider, * power management and some other internal clocks */ +#if defined(CONFIG_MGSUVD) #define SCCR_MASK 0x01800000 +#else +#define SCCR_MASK 0x00000000 +#endif #define CONFIG_SYS_SCCR 0x01800000 #define CONFIG_SYS_DER 0 @@ -223,7 +241,11 @@ #define CONFIG_SYS_MPTPR 0x0200 /* PTB=16, AMB=001, FIXME 1 RAS precharge cycles, 1 READ loop cycle (not used), 1 Write loop Cycle (not used), 1 Timer Loop Cycle */ +#if defined(CONFIG_MGSUVD) #define CONFIG_SYS_MBMR 0x10964111 +#else +#define CONFIG_SYS_MBMR 0x20964111 +#endif #define CONFIG_SYS_MAR 0x00000088 /* @@ -238,8 +260,13 @@ /* GPIO/PIGGY on CS3 initialization values */ #define CONFIG_SYS_PIGGY_BASE (0x30000000) +#if defined(CONFIG_MGSUVD) #define CONFIG_SYS_OR3_PRELIM (0xfe000d24) #define CONFIG_SYS_BR3_PRELIM (0x30000401) +#else +#define CONFIG_SYS_OR3_PRELIM (0xf8000d26) +#define CONFIG_SYS_BR3_PRELIM (0x30000401) +#endif /* * Internal Definitions @@ -298,15 +325,14 @@ /* I2C SYSMON (LM75, AD7414 is almost compatible) */ #define CONFIG_DTT_LM75 1 /* ON Semi's LM75 */ +#if defined(CONFIG_MGSUVD) #define CONFIG_DTT_SENSORS {0, 2, 4, 6} /* Sensor addresses */ +#else +#define CONFIG_DTT_SENSORS {0} /* Sensor addresses */ +#endif #define CONFIG_SYS_DTT_MAX_TEMP 70 #define CONFIG_SYS_DTT_LOW_TEMP -30 #define CONFIG_SYS_DTT_HYSTERESIS 3 #define CONFIG_SYS_DTT_BUS_NUM (CONFIG_SYS_MAX_I2C_BUS) -#define MTDIDS_DEFAULT "nor0=app" -#define MTDPARTS_DEFAULT ( \ - "mtdparts=app:384k(u-boot),128k(env),128k(envred),128k(free)," \ - "1536k(esw0),8704k(rootfs0),1536k(esw1),2432k(rootfs1),640k(var),768k(cfg)") - #endif /* __CONFIG_KM8XX_H */ diff --git a/include/configs/kmsupx4.h b/include/configs/kmsupx4.h new file mode 100644 index 0000000..f8f5c58 --- /dev/null +++ b/include/configs/kmsupx4.h @@ -0,0 +1,38 @@ +/* + * (C) Copyright 2009 + * Heiko Schocher, DENX Software Engineering, h...@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * board/config.h - configuration options, board specific + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_MPC852T 1 /* This is a MPC852T CPU */ +#define CONFIG_KMSUPX4 1 /* ...on a kmsupx4 board */ +#define CONFIG_HOSTNAME kmsupx4 + +/* include common defines/options for all Keymile 8xx boards */ +#include "km8xx.h" + +#endif /* __CONFIG_H */ diff --git a/include/configs/mgsuvd.h b/include/configs/mgsuvd.h index 960d6c7..1618f7d 100644 --- a/include/configs/mgsuvd.h +++ b/include/configs/mgsuvd.h @@ -28,6 +28,7 @@ #ifndef __CONFIG_H #define __CONFIG_H +#define CONFIG_MPC866 1 /* This is a MPC866 CPU */ #define CONFIG_MGSUVD 1 /* ...on a mgsuvd board */ #define CONFIG_HOSTNAME mgsuvd diff --git a/lib_ppc/board.c b/lib_ppc/board.c index d90607d..70cdaa5 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -737,7 +737,8 @@ void board_init_r (gd_t *id, ulong dest_addr) WATCHDOG_RESET(); #if defined(CONFIG_IP860) || defined(CONFIG_PCU_E) || \ - defined (CONFIG_FLAGADM) || defined(CONFIG_MPC83XX) + defined (CONFIG_FLAGADM) || defined(CONFIG_MPC83XX) || \ + defined (CONFIG_KMSUPX4) icache_enable (); /* it's time to enable the instruction cache */ #endif -- 1.6.0.6 -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot