* Patch by Seb James, 30 Jun 2003:
authorwdenk <wdenk>
Mon, 30 Jun 2003 16:24:52 +0000 (16:24 +0000)
committerwdenk <wdenk>
Mon, 30 Jun 2003 16:24:52 +0000 (16:24 +0000)
  Improve documentation of I2C configuration in README

* Fix problems with previous log buffer "fixes"

* Fix minor help text issues

* "log append" did not append a newline

CHANGELOG
README
common/cmd_bmp.c
common/cmd_log.c
include/version.h

index 64e093335be28d478744f031c976d18cac08064c..c5802b5ba0792656cc8902fd9a4fa6d67d074b72 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,16 @@
+======================================================================
+Changes for U-Boot 0.4.2:
+======================================================================
+
+* Patch by Seb James, 30 Jun 2003:
+  Improve documentation of I2C configuration in README
+
+* Fix problems with previous log buffer "fixes"
+
+* Fix minor help text issues
+
+* "log append" did not append a newline
+
 ======================================================================
 Changes for U-Boot 0.4.1:
 ======================================================================
diff --git a/README b/README
index 668c4e0bfd4ab0a3ffa740f26dd95ff13575216a..4a767e3ad2e7abca753d4ceb55da0300d636cb18 100644 (file)
--- a/README
+++ b/README
@@ -653,6 +653,9 @@ The following options need to be configured:
                CONFIG_RTC_DS1338       - use Maxim, Inc. DS1338 RTC
                CONFIG_RTC_DS164x       - use Dallas DS164x RTC
 
+               Note that if the RTC uses I2C, then the I2C interface
+               must also be configured. See I2C Support, below.
+
 - Timestamp Support:
 
                When CONFIG_TIMESTAMP is selected, the timestamp
@@ -904,29 +907,48 @@ The following options need to be configured:
 
 - I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C
 
-               Enables I2C serial bus commands.  If this is selected,
-               either CONFIG_HARD_I2C or CONFIG_SOFT_I2C must be defined
-               to include the appropriate I2C driver.
+               These enable I2C serial bus commands. Defining either of
+               (but not both of) CONFIG_HARD_I2C or CONFIG_SOFT_I2C will 
+               include the appropriate I2C driver for the selected cpu. 
 
-               See also: common/cmd_i2c.c for a description of the
+               This will allow you to use i2c commands at the u-boot 
+               command line (as long as you set CFG_CMD_I2C in 
+               CONFIG_COMMANDS) and communicate with i2c based realtime
+               clock chips. See common/cmd_i2c.c for a description of the
                command line interface.
 
+               CONFIG_HARD_I2C selects the CPM hardware driver for I2C. 
+
+               CONFIG_SOFT_I2C configures u-boot to use a software (aka 
+               bit-banging) driver instead of CPM or similar hardware
+               support for I2C.
 
-               CONFIG_HARD_I2C
+               There are several other quantities that must also be 
+               defined when you define CONFIG_HARD_I2C or CONFIG_SOFT_I2C.
 
-               Selects the CPM hardware driver for I2C.
+               In both cases you will need to define CFG_I2C_SPEED
+               to be the frequency (in Hz) at which you wish your i2c bus 
+               to run and CFG_I2C_SLAVE to be the address of this node (ie 
+               the cpu's i2c node address). 
+               
+               Now, the u-boot i2c code for the mpc8xx (cpu/mpc8xx/i2c.c)
+               sets the cpu up as a master node and so its address should
+               therefore be cleared to 0 (See, eg, MPC823e User's Manual
+               p.16-473). So, set CFG_I2C_SLAVE to 0.  
 
-               CONFIG_SOFT_I2C
+               That's all that's required for CONFIG_HARD_I2C. 
 
-               Use software (aka bit-banging) driver instead of CPM
-               or similar hardware support for I2C.  This is configured
-               via the following defines.
+               If you use the software i2c interface (CONFIG_SOFT_I2C)
+               then the following macros need to be defined (examples are
+               from include/configs/lwmon.h):
 
                I2C_INIT
 
-               (Optional). Any commands necessary to enable I2C
+               (Optional). Any commands necessary to enable the I2C
                controller or configure ports.
 
+               eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |=  PB_SCL)
+
                I2C_PORT
 
                (Only for MPC8260 CPU). The I/O port to use (the code
@@ -939,32 +961,49 @@ The following options need to be configured:
                (driven).  If the data line is open collector, this
                define can be null.
 
+               eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |=  PB_SDA)
+
                I2C_TRISTATE
 
                The code necessary to make the I2C data line tri-stated
                (inactive).  If the data line is open collector, this
                define can be null.
 
+               eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
+
                I2C_READ
 
                Code that returns TRUE if the I2C data line is high,
                FALSE if it is low.
 
+               eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
+
                I2C_SDA(bit)
 
                If <bit> is TRUE, sets the I2C data line high. If it
                is FALSE, it clears it (low).
 
+               eg: #define I2C_SDA(bit) \
+                        if(bit) immr->im_cpm.cp_pbdat |=  PB_SDA; \
+                        else    immr->im_cpm.cp_pbdat &= ~PB_SDA
+
                I2C_SCL(bit)
 
                If <bit> is TRUE, sets the I2C clock line high. If it
                is FALSE, it clears it (low).
 
+               eg: #define I2C_SCL(bit) \
+                        if(bit) immr->im_cpm.cp_pbdat |=  PB_SCL; \
+                        else    immr->im_cpm.cp_pbdat &= ~PB_SCL 
+
                I2C_DELAY
 
                This delay is invoked four times per clock cycle so this
                controls the rate of data transfer.  The data rate thus
-               is 1 / (I2C_DELAY * 4).
+               is 1 / (I2C_DELAY * 4). Often defined to be something
+               like: 
+               
+               #define I2C_DELAY  udelay(2)
 
                CFG_I2C_INIT_BOARD
 
index 6e813c625eba0f5dcbd5daeb2cae45bb5efaa7ac..69f6fa6585dab549eec473287726a292a798bfe6 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * (C) Copyright 2002
- * Dtlev Zundel, DENX Software Engineering, dzu@denx.de.
+ * Detlev Zundel, DENX Software Engineering, dzu@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
index 8132570773fc77e4946362497f74e09178330ddc..534c67e88706b643229e1fa6f2d2defcd5699fa2 100644 (file)
@@ -74,22 +74,26 @@ static unsigned long *ext_logged_chars;
 void logbuff_init_ptrs (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
+       unsigned long *ext_tag;
        char *s;
 
        log_buf = (unsigned char *)(gd->bd->bi_memsize-LOGBUFF_LEN);
-       ext_log_start = (unsigned long *)(log_buf)-3;
+       ext_tag = (unsigned long *)(log_buf)-4;
+       ext_log_start = (unsigned long *)(log_buf)-3;
        ext_log_size = (unsigned long *)(log_buf)-2;
        ext_logged_chars = (unsigned long *)(log_buf)-1;
 #ifdef CONFIG_POST
        /* The post routines have setup the word so we can simply test it */
-       if (post_word_load () & POST_POWERON) {
+       if ((post_word_load () & 0xffff) == POST_POWERON) {
                logged_chars = log_size = log_start = 0;
+               *ext_tag = LOGBUFF_MAGIC;
        }
 #else
        /* No post routines, so we do our own checking                    */
        if (post_word_load () != LOGBUFF_MAGIC) {
                logged_chars = log_size = log_start = 0;
                post_word_store (LOGBUFF_MAGIC);
+               *ext_tag = LOGBUFF_MAGIC;
        }
 #endif
        /* Initialize default loglevel if present */
@@ -162,12 +166,8 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        if (strcmp(argv[1],"append") == 0) {
                /* Log concatenation of all arguments separated by spaces */
                for (i=2; i<argc; i++) {
-                       if (i<argc-1) {
-                               logbuff_printk (argv[i]);
-                               logbuff_putc (' ');
-                       } else {
-                               logbuff_puts (argv[i]);
-                       }
+                       logbuff_printk (argv[i]);
+                       logbuff_putc ((i<argc-1) ? ' ' : '\n');
                }
                return 0;
        }
@@ -205,7 +205,7 @@ int do_log (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 cmd_tbl_t U_BOOT_CMD(LOG) = MK_CMD_ENTRY(
        "log",     255, 1,      do_log,
        "log     - manipulate logbuffer\n",
-       "log info   - show pointer details\n"
+       "info   - show pointer details\n"
        "log reset  - clear contents\n"
        "log show   - show contents\n"
        "log append <msg> - append <msg> to the logbuffer\n"
index fee1b692b2f0b53346b34d25d942789f6004fb97..9d0dbb3cb4928fb8d24d031fdefe85e849eb41fd 100644 (file)
@@ -24,6 +24,6 @@
 #ifndef        __VERSION_H__
 #define        __VERSION_H__
 
-#define        U_BOOT_VERSION  "U-Boot 0.4.1"
+#define        U_BOOT_VERSION  "U-Boot 0.4.2"
 
 #endif /* __VERSION_H__ */