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>
---
 Makefile                         |    9 +++++-
 board/keymile/common/common.c    |    6 +++-
 board/keymile/km8xx/km8xx.c      |    7 ++++-
 cpu/mpc8xx/cpu_init.c            |    2 +
 cpu/mpc8xx/start.S               |    3 +-
 drivers/i2c/soft_i2c.c           |    3 ++
 include/commproc.h               |    2 +-
 include/configs/keymile-common.h |    2 +-
 include/configs/km8xx.h          |   54 ++++++++++++++++++++++++++++++-------
 lib_ppc/board.c                  |    3 +-
 10 files changed, 73 insertions(+), 18 deletions(-)

diff --git a/Makefile b/Makefile
index 70d60b5..9aaaf7a 100644
--- a/Makefile
+++ b/Makefile
@@ -921,6 +921,13 @@ IVMS8_config:      unconfig
                 }
        @$(MKCONFIG) -a IVMS8 ppc mpc8xx ivm

+kmsupx4_config:                unconfig
+       @mkdir -p $(obj)include
+       @{ echo "#define CONFIG_KMSUPX4" >>$(obj)include/config.h ; \
+               $(XECHO) "kmsupx board configuration" ; \
+               }
+       @$(MKCONFIG) -a km8xx ppc mpc8xx km8xx keymile
+
 KUP4K_config   :       unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc8xx kup4k kup

@@ -940,7 +947,7 @@ MBX860T_config:     unconfig
 mgsuvd_config:         unconfig
        @mkdir -p $(obj)include
        @{ echo "#define CONFIG_MGSUVD" >>$(obj)include/config.h ; \
-               $(XECHO) "mgsuvd configuration" ; \
+               $(XECHO) "mgsuvd board configuration" ; \
                }
        @$(MKCONFIG) -a km8xx ppc mpc8xx km8xx keymile

diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 1904482..3cf22a5 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -297,11 +297,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);
@@ -315,6 +318,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)
@@ -393,7 +397,7 @@ static void setports (int gpio)
 #endif
 #endif

-#if defined(CONFIG_MGSUVD)
+#if defined(CONFIG_MGSUVD) || defined(CONFIG_KMSUPX4)
 static void set_sda (int state)
 {
        I2C_SDA(state);
diff --git a/board/keymile/km8xx/km8xx.c b/board/keymile/km8xx/km8xx.c
index 02baf62..3f0e65f 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..7074f5d 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/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c
index a27de5a..06d2da2 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..745642d 100644
--- a/include/commproc.h
+++ b/include/commproc.h
@@ -1126,7 +1126,7 @@ typedef struct scc_enet {

 /* The MGSUVD Service Module uses SCC3 for Ethernet */

-#ifdef CONFIG_MGSUVD
+#if defined(CONFIG_MGSUVD) || defined(CONFIG_KMSUPX4)
 #define PROFF_ENET     PROFF_SCC3              /* Ethernet on SCC3 */
 #define CPM_CR_ENET    CPM_CR_CH_SCC3
 #define SCC_ENET       2
diff --git a/include/configs/keymile-common.h b/include/configs/keymile-common.h
index 80f9446..20f7bab 100644
--- a/include/configs/keymile-common.h
+++ b/include/configs/keymile-common.h
@@ -105,7 +105,7 @@
 #define CONFIG_I2C_MUX         1

 /* EEprom support */
-#if defined(CONFIG_MGCOGE) || defined(CONFIG_MGSUVD)
+#if defined(CONFIG_MGCOGE) || defined(CONFIG_MGSUVD) || defined(CONFIG_KMSUPX4)
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
 #else
 #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
diff --git a/include/configs/km8xx.h b/include/configs/km8xx.h
index 9088d6a..0ab75b4 100644
--- a/include/configs/km8xx.h
+++ b/include/configs/km8xx.h
@@ -32,13 +32,21 @@
  * High Level Configuration Options
  * (easy to change)
  */
-
+#if defined(CONFIG_MGSUVD)
 #define CONFIG_MPC866          1       /* This is a MPC866 CPU         */
 #define CONFIG_HOSTNAME                mgsuvd
-
+#else
+#define CONFIG_MPC852T         1       /* This is a MPC852 CPU         */
+#define CONFIG_HOSTNAME                kmsupx4
+#endif
+
 /* 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 */
@@ -46,8 +54,10 @@
 #define CONFIG_8xx_CONS_SMC1   1       /* Console is on SMC1           */
 #define CONFIG_SYS_SMC_RXBUFLEN                128

+#if defined(CONFIG_MGSUVD)
 #define CONFIG_SYS_CPM_BOOTCOUNT_ADDR  0x1eb0  /* In case of SMC relocation, 
the
                                         * default value is not working */
+#endif

 #define CONFIG_PREBOOT "echo;" \
        "echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;" \
@@ -57,6 +67,11 @@

 #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 CONFIG_EXTRA_ENV_SETTINGS                                      \
        CONFIG_KM_DEF_ENV                                               \
        "rootpath=/opt/eldk/ppc_8xx\0"                                  \
@@ -68,7 +83,7 @@
                "2432k(rootfs1),640k(var),768k(cfg)\0"                  \
        "partition=nor0,9 \0"                                           \
        "new_env=prot off F0060000 F009FFFF; era F0060000 F009FFFF \0"  \
-       "EEprom_ivm=pca9544a:70:4 \0"                                   \
+       CONFIG_ENV_IVM                                                  \
        ""

 #undef CONFIG_RTC_MPC8xx               /* MPC866 does not support RTC  */
@@ -121,14 +136,10 @@
 #define CONFIG_FLASH_CFI_DRIVER
 #define CONFIG_SYS_MAX_FLASH_SECT      256     /* max num of sects on one chip 
*/

-
-#define CONFIG_SYS_FLASH_ERASE_TOUT    120000  /* Timeout for Flash Erase (in 
ms)      */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Timeout for Flash Write (in 
ms)      */
-
-#define CONFIG_ENV_IS_IN_FLASH 1
-#define CONFIG_ENV_OFFSET      CONFIG_SYS_MONITOR_LEN
-#define CONFIG_ENV_SIZE        0x20000 /* Total Size of Environment    */
-#define CONFIG_ENV_SECT_SIZE   0x20000 /* Total Size of Environment Sector     
*/
+#define CONFIG_ENV_IS_IN_FLASH         1
+#define CONFIG_ENV_OFFSET              CONFIG_SYS_MONITOR_LEN
+#define CONFIG_ENV_SIZE                        0x20000 /* Total Size of 
Environment    */
+#define CONFIG_ENV_SECT_SIZE           0x20000 /* Total Size of Environment 
Sector     */

 /* Address and size of Redundant Environment Sector    */
 #define CONFIG_ENV_OFFSET_REDUND       (CONFIG_ENV_OFFSET+CONFIG_ENV_SECT_SIZE)
@@ -155,7 +166,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
@@ -177,7 +192,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
@@ -219,7 +238,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

 /*
@@ -234,8 +257,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
@@ -292,7 +320,11 @@

 /* 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
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index 61c29b5..4ad0234 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -753,7 +753,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

Reply via email to