* Patch by Rune Torgersen, 4 Jun 2003:
authorwdenk <wdenk>
Sun, 22 Jun 2003 17:18:28 +0000 (17:18 +0000)
committerwdenk <wdenk>
Sun, 22 Jun 2003 17:18:28 +0000 (17:18 +0000)
  add large memory support for MPC8266ADS board

* Patch by Richard Woodruff, 19 June 03:
  - Enabled standard u-boot device abstraction for ARM
  - Enabled console device for ARM
  - Initilized bi_baudrate for ARM

* Patch by Bill Hargen, 23 Apr 2003:
  fix byte order for 824x I2C addresses (write op)

CHANGELOG
board/mpc8266ads/mpc8266ads.c
common/devices.c
cpu/mpc824x/drivers/i2c/i2c1.c
lib_arm/board.c

index b7f49ae319399632b850f63fc8226c70cca4c1ac..ecf10b8a6df4211f5871c30de34b6da31e83f09e 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,17 @@
 Changes since U-Boot 0.3.1:
 ======================================================================
 
+* Patch by Rune Torgersen, 4 Jun 2003:
+  add large memory support for MPC8266ADS board
+  
+* Patch by Richard Woodruff, 19 June 03:
+  - Enabled standard u-boot device abstraction for ARM
+  - Enabled console device for ARM
+  - Initilized bi_baudrate for ARM
+
+* Patch by Bill Hargen, 23 Apr 2003:
+  fix byte order for 824x I2C addresses (write op)
+
 * Patch by Murray Jensen, 20 Jun 2003:
   - hymod update
   - cleanup (especially for gcc-3.x compilers)
index 501e610d5997d8349ef0ea523b793f542b93d211..c6c8d761cb5516854b22c6d5524a815eabf30925 100644 (file)
@@ -46,7 +46,7 @@
  *   PSDMR_BUFCMD adds a clock
  *   0            no extra clock
  */
-#define CONFIG_PBI             0
+#define CONFIG_PBI             PSDMR_PBI
 #define PESSIMISTIC_SDRAM      0
 #define EAMUX                  0       /* EST requires EAMUX */
 #define BUFCMD                 0
@@ -379,6 +379,25 @@ long int initdram(int board_type)
 
 
     sdram_size = 1 << (rows + cols + banks + width);
+    /* hack for high density memory (512MB per CS) */
+    /* !!!!! Will ONLY work with Page Based Interleave !!!!!
+             ( PSDMR[PBI] = 1 ) 
+    */
+    /* mamory actually has 11 column addresses, but the memory controller 
+       doesn't really care. 
+       the calculations that follow will however move the rows so that 
+       they are muxed one bit off if you use 11 bit columns. 
+       The solution is to tell the memory controller the correct size of the memory
+       but change the number of columns to 10 afterwards.
+       The 11th column addre will still be mucxed correctly onto the bus.
+
+       Also be aware that the MPC8266ADS board Rev B has not connected 
+       Row addres 13 to anything.
+
+       The fix is to connect ADD16 (from U37-47) to SADDR12 (U28-126)
+    */
+    if (cols > 10)
+           cols = 10;
 
 #if(CONFIG_PBI == 0)   /* bank-based interleaving */
     rowst = ((32 - 6) - (rows + cols + width)) * 2;
index 1f88fd5e34ddd611302a0ea2a04959db2632eb9c..4839eacbb16eb67210d9e6358d4f5739a4d7e9ea 100644 (file)
@@ -160,14 +160,16 @@ int devices_init (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       int i;
+#ifndef CONFIG_ARM     /* already relocated for current ARM implementation */
        ulong relocation_offset = gd->reloc_off;
+       int i;
 
        /* relocate device name pointers */
        for (i = 0; i < (sizeof (stdio_names) / sizeof (char *)); ++i) {
                stdio_names[i] = (char *) (((ulong) stdio_names[i]) +
                                                relocation_offset);
        }
+#endif
 
        /* Initialize the list */
        devlist = ListCreate (sizeof (device_t));
index 7a2eb666569cd999c11f9f1f26b483ea54354105..dc1c97ca0f631d4c8221bb0815505ddd65272692 100644 (file)
@@ -125,10 +125,10 @@ I2C_Status I2C_Initialize (unsigned char addr,
  * len is the length of data to send or receive
  * buffer is the address of the data buffer
  * stop = I2C_NO_STOP, don't signal STOP at end of transaction
- *        I2C_STOP, signal STOP at end of transaction
+ *       I2C_STOP, signal STOP at end of transaction
  * retry is the timeout retry value, currently ignored
  * rsta = I2C_NO_RESTART, this is not continuation of existing transaction
- *        I2C_RESTART, this is a continuation of existing transaction
+ *       I2C_RESTART, this is a continuation of existing transaction
  */
 I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int,
                                I2C_TRANSACTION_MODE act,
@@ -191,12 +191,12 @@ I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int,
        }
 
        /*
-         * We first have to contact the slave device and transmit the
-         * data address. Be careful about the STOP and restart stuff.
-         * We don't want to signal STOP after sending the data
-         * address, but this could be a continuation if the
-         * application didn't release the bus after the previous
-         * transaction, by not sending a STOP after it.
+        * We first have to contact the slave device and transmit the
+        * data address. Be careful about the STOP and restart stuff.
+        * We don't want to signal STOP after sending the data
+        * address, but this could be a continuation if the
+        * application didn't release the bus after the previous
+        * transaction, by not sending a STOP after it.
         */
        status = I2C_do_buffer (en_int, I2C_MASTER_XMIT, i2c_addr, 1,
                                data_addr_buffer, I2C_NO_STOP, retry, rsta);
@@ -231,10 +231,10 @@ I2C_Status I2C_do_transaction ( I2C_INTERRUPT_MODE en_int,
  * len is the length of data to send or receive
  * buffer is the address of the data buffer
  * stop = I2C_NO_STOP, don't signal STOP at end of transaction
- *        I2C_STOP, signal STOP at end of transaction
+ *       I2C_STOP, signal STOP at end of transaction
  * retry is the timeout retry value, currently ignored
  * rsta = I2C_NO_RESTART, this is not continuation of existing transaction
- *        I2C_RESTART, this is a continuation of existing transaction
+ *       I2C_RESTART, this is a continuation of existing transaction
  */
 static I2C_Status I2C_do_buffer (I2C_INTERRUPT_MODE en_int,
                                 I2C_TRANSACTION_MODE act,
@@ -518,9 +518,9 @@ static I2CStatus I2C_Timer_Event (unsigned int eumbbar,
  * function: I2C_Start
  *
  * description: Generate a START signal in the desired mode.
- *              I2C is the master.
+ *             I2C is the master.
  *
- *              Return I2CSUCCESS if no error.
+ *             Return I2CSUCCESS if no error.
  *
  * note:
  ****************************************************/
@@ -594,8 +594,8 @@ static I2CStatus I2C_Start (unsigned int eumbbar, unsigned char slave_addr, /* a
  * function: I2c_Stop
  *
  * description: Generate a STOP signal to terminate the master
- *              transaction.
- *              return I2CSUCCESS
+ *             transaction.
+ *             return I2CSUCCESS
  *
  **********************************************************/
 static I2CStatus I2C_Stop (unsigned int eumbbar)
@@ -621,10 +621,10 @@ static I2CStatus I2C_Stop (unsigned int eumbbar)
  * function: I2C_Master_Xmit
  *
  * description: Master sends one byte of data to
- *              slave target
+ *             slave target
  *
- *              return I2CSUCCESS if the byte transmitted.
- *              Otherwise no-zero
+ *             return I2CSUCCESS if the byte transmitted.
+ *             Otherwise no-zero
  *
  * Note: condition must meet when this function is called:
  *       I2CSR(MIF) == 1 && I2CSR(MCF)  == 1  && I2CSR(RXAK) == 0
@@ -669,9 +669,9 @@ static I2CStatus I2C_Master_Xmit (unsigned int eumbbar)
  * function: I2C_Master_Rcv
  *
  * description: master reads one byte data
- *              from slave source
+ *             from slave source
  *
- *              return I2CSUCCESS if no error
+ *             return I2CSUCCESS if no error
  *
  * Note: condition must meet when this function is called:
  *       I2CSR(MIF) == 1 && I2CSR(MCF) == 1 &&
@@ -736,10 +736,10 @@ static I2CStatus I2C_Master_Rcv (unsigned int eumbbar)
  * function: I2C_Slave_Xmit
  *
  * description: Slave sends one byte of data to
- *              requesting destination
+ *             requesting destination
  *
- *        return SUCCESS if the byte transmitted. Otherwise
- *        No-zero
+ *       return SUCCESS if the byte transmitted. Otherwise
+ *       No-zero
  *
  * Note: condition must meet when this function is called:
  *       I2CSR(MIF) == 1 && I2CSR(MCF) == 1 &&  I2CSR(RXAK) = 0
@@ -757,12 +757,12 @@ static I2CStatus I2C_Slave_Xmit (unsigned int eumbbar)
                        ByteToXmit = 0;
 
                        /*
-                         * do not toggle I2CCR(MTX). Doing so will
-                         * cause bus-hung since current Kahlua design
-                         * does not give master a way to detect slave
-                         * stop. It is always a good idea for master
-                         * to use timer to prevent the long long
-                         * delays
+                        * do not toggle I2CCR(MTX). Doing so will
+                        * cause bus-hung since current Kahlua design
+                        * does not give master a way to detect slave
+                        * stop. It is always a good idea for master
+                        * to use timer to prevent the long long
+                        * delays
                         */
 
                        return I2CBUFFEMPTY;
@@ -787,9 +787,9 @@ static I2CStatus I2C_Slave_Xmit (unsigned int eumbbar)
  * function: I2C_Slave_Rcv
  *
  * description: slave reads one byte data
- *              from master source
+ *             from master source
  *
- *              return I2CSUCCESS if no error otherwise non-zero
+ *             return I2CSUCCESS if no error otherwise non-zero
  *
  * Note: condition must meet when this function is called:
  *       I2CSR(MIF) == 1 && I2CSR(MCF) == 1 &&
@@ -834,8 +834,8 @@ static I2CStatus I2C_Slave_Rcv (unsigned int eumbbar)
  * function: I2C_Init
  *
  * description: Initialize I2C unit with desired frequency divider,
- *              master's listening address, with interrupt enabled
- *              or disabled.
+ *             master's listening address, with interrupt enabled
+ *             or disabled.
  *
  * note:
  ********************************************************/
@@ -912,7 +912,7 @@ static I2C_STAT I2C_Get_Stat (unsigned int eumbbar)
  * function: I2c_Set_Ctrl
  *
  * description: Change I2C Control bits,
- *              i.e., write to I2CCR
+ *             i.e., write to I2CCR
  *
  ********************************************/
 static void I2C_Set_Ctrl (unsigned int eumbbar, I2C_CTRL ctrl)
@@ -937,7 +937,7 @@ static void I2C_Set_Ctrl (unsigned int eumbbar, I2C_CTRL ctrl)
  * function: I2C_Get_Ctrl
  *
  * description: Query I2C Control bits,
- *              i.e., read I2CCR
+ *             i.e., read I2CCR
  *****************************************/
 static I2C_CTRL I2C_Get_Ctrl (unsigned int eumbbar)
 {
@@ -959,7 +959,7 @@ static I2C_CTRL I2C_Get_Ctrl (unsigned int eumbbar)
  * function: I2C_Slave_Addr
  *
  * description: Process slave address phase.
- *              return I2CSUCCESS if no error
+ *             return I2CSUCCESS if no error
  *
  * note: Precondition for calling this function:
  *       I2CSR(MIF) == 1 &&
@@ -1193,14 +1193,17 @@ int i2c_read (uchar chip, uint addr, int alen, uchar * buffer, int len)
 int i2c_write (uchar chip, uint addr, int alen, uchar * buffer, int len)
 {
        I2CStatus status;
-       unsigned char dummy_buffer[I2C_RXTX_LEN + 2];
+       uchar dummy_buffer[I2C_RXTX_LEN + 2];
+       uchar *p;
        int i;
 
-       dummy_buffer[0] = addr & 0xFF;
-       if (alen == 2)
-               dummy_buffer[1] = (addr >> 8) & 0xFF;
-       for (i = 0; i < len; i++)
-               dummy_buffer[i + alen] = buffer[i];
+       p = dummy_buffer;
+       /* fill in address in big endian order */
+       for (i=0; i<alen; ++i)
+               *p++ = (addr >> (i * 8)) & 0xFF;
+       /* fill in data */
+       for (i=0; i<len; ++i)
+               *p++ = *buffer;
 
        status = I2C_do_buffer (0, I2C_MASTER_XMIT, chip, alen + len,
                                dummy_buffer, I2C_STOP, 1, I2C_NO_RESTART);
index f169920c67d3da597850116b6f3fbfc5a96b5182..5192e649dd7f29555ab6faaaed39623efd5bdaa0 100644 (file)
@@ -27,7 +27,9 @@
 
 #include <common.h>
 #include <command.h>
+#include <malloc.h>
 #include <devices.h>
+#include <syscall.h>
 #include <version.h>
 #include <net.h>
 
@@ -101,8 +103,7 @@ static int init_baudrate (void)
 
        uchar tmp[64];  /* long enough for environment variables */
        int i = getenv_r ("baudrate", tmp, sizeof (tmp));
-
-       gd->baudrate = (i > 0)
+       gd->bd->bi_baudrate = gd->baudrate = (i > 0)
                        ? (int) simple_strtoul (tmp, NULL, 10)
                        : CONFIG_BAUDRATE;
 
@@ -186,6 +187,7 @@ init_fnc_t *init_sequence[] = {
        env_init,               /* initialize environment */
        init_baudrate,          /* initialze baudrate settings */
        serial_init,            /* serial communications setup */
+       console_init_f,         /* stage 1 init of console */
        display_banner,         /* say that we are here */
        dram_init,              /* configure available RAM banks */
        display_dram_config,
@@ -283,6 +285,15 @@ void start_armboot (void)
                }
        }
 
+       devices_init ();      /* get the devices list going. */
+
+       /* Syscalls are not implemented for ARM. But allocating
+        * this allows the console_init routines to work without #ifdefs
+        */
+       syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
+
+       console_init_r ();      /* fully init console as a device */
+
 #if defined(CONFIG_MISC_INIT_R)
        /* miscellaneous platform dependent initialisations */
        misc_init_r ();