Merge with /home/stefan/git/u-boot/zeus
authorStefan Roese <sr@denx.de>
Tue, 14 Aug 2007 13:00:42 +0000 (15:00 +0200)
committerStefan Roese <sr@denx.de>
Tue, 14 Aug 2007 13:00:42 +0000 (15:00 +0200)
1  2 
MAINTAINERS
MAKEALL
Makefile
include/ppc405.h
post/cpu/ppc4xx/uart.c

diff --combined MAINTAINERS
index 8dc46ad67f8537f8735574f546c713b90db95925,853afeb4d36259f2beabdffef4b1f3d6ae588e11..eec50a8d366686e039fa8421f89cc628a42f9f9f
@@@ -160,11 -160,6 +160,11 @@@ Matthias Fuchs <matthias.fuchs@esd-elec
        WUH405                  PPC405EP
        CMS700                  PPC405EP
  
 +Niklaus Giger <niklaus.giger@netstal.com>
 +
 +        HCU4                    PPC405GPr
 +        HCU5                    PPC440EPx
 +
  Frank Gottschling <fgottschling@eltec.de>
  
        MHPC                    MPC8xx
@@@ -253,6 -248,7 +253,7 @@@ Tolunay Orkun <torkun@nextio.com
  John Otken <jotken@softadvances.com>
  
        luan                    PPC440SP
+       taihu                   PPC405EP
  
  Keith Outwater <Keith_Outwater@mvis.com>
  
@@@ -297,6 -293,7 +298,7 @@@ Stefan Roese <sr@denx.de
        walnut                  PPC405GP
        yellowstone             PPC440GR
        yosemite                PPC440EP
+       zeus                    PPC405EP
  
        P3M750                  PPC750FX/GX/GL
  
diff --combined MAKEALL
index 61a4d4570d293375425f99b6efd407fcc1e9d01e,00cb6b5351c8038ee935c7f1801e5c733680903e..8d1830f05caec01e642feffc8ff9809d70575abc
+++ b/MAKEALL
@@@ -82,16 -82,16 +82,17 @@@ LIST_4xx=" 
        CPCI405DT       CPCI440         CPCIISER4       CRAYL1          \
        csb272          csb472          DASA_SIM        DP405           \
        DU405           ebony           ERIC            EXBITGEN        \
 -      G2000           HH405           HUB405          JSE             \
 -      KAREF           katmai          luan            lwmon5          \
 -      METROBOX        MIP405          MIP405T         ML2             \
 -      ml300           ocotea          OCRTC           ORSG            \
 -      p3p440          PCI405          pcs440ep        PIP405          \
 -      PLU405          PMC405          PPChameleonEVB  sbc405          \
 -      sc3             sequoia         sequoia_nand    taihu           \
 -      taishan         VOH405          VOM405          W7OLMC          \
 -      W7OLMG          walnut          WUH405          XPEDITE1K       \
 -      yellowstone     yosemite        yucca           zeus            \
 +      G2000           HH405           hcu4            hcu5            \
 +      HUB405          JSE             KAREF           katmai          \
 +      luan            lwmon5          METROBOX        MIP405          \
 +      MIP405T         ML2             ml300           ocotea          \
 +      OCRTC           ORSG            p3p440          PCI405          \
 +      pcs440ep        PIP405          PLU405          PMC405          \
 +      PPChameleonEVB  sbc405          sc3             sequoia         \
-       sequoia_nand    taishan         VOH405          VOM405          \
-       W7OLMC          W7OLMG          walnut          WUH405          \
-       XPEDITE1K       yellowstone     yosemite        yucca           \
++      sequoia_nand    taihu           taishan         VOH405          \
++      VOM405          W7OLMC          W7OLMG          walnut          \
++      WUH405          XPEDITE1K       yellowstone     yosemite        \
++      yucca           zeus                                            \
  "
  
  #########################################################################
diff --combined Makefile
index 8282c71d1540a0fa0171855332866c1b60ffcec3,d75f8fdddb8e39457f70d82c7b1109919536e554..a647d54be2ac45fb42f84c96421ab24caf5817a1
+++ b/Makefile
@@@ -1040,7 -1040,7 +1040,7 @@@ ADCIOP_config:  unconfi
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx adciop esd
  
  alpr_config:  unconfig
 -      @./mkconfig $(@:_config=) ppc ppc4xx alpr prodrive
 +      @$(MKCONFIG) $(@:_config=) ppc ppc4xx alpr prodrive
  
  AP1000_config:unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx ap1000 amirix
@@@ -1134,12 -1134,6 +1134,12 @@@ EXBITGEN_config:      unconfi
  G2000_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx g2000
  
 +hcu4_config:  unconfig
 +      @$(MKCONFIG) $(@:_config=) ppc ppc4xx hcu4 netstal
 +
 +hcu5_config:  unconfig
 +      @$(MKCONFIG) $(@:_config=) ppc ppc4xx hcu5 netstal
 +
  HH405_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx hh405 esd
  
@@@ -1258,8 -1252,11 +1258,11 @@@ rainier_nand_config: unconfi
        @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
  
  sc3_config:unconfig
 -      @./mkconfig $(@:_config=) ppc ppc4xx sc3
 +      @$(MKCONFIG) $(@:_config=) ppc ppc4xx sc3
  
+ taihu_config: unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx taihu amcc
  taishan_config:       unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx taishan amcc
  
@@@ -1297,6 -1294,9 +1300,9 @@@ yellowstone_config: unconfi
  yucca_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx yucca amcc
  
+ zeus_config:  unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx zeus
  #########################################################################
  ## MPC8220 Systems
  #########################################################################
diff --combined include/ppc405.h
index e4522e7cc977d0ec345f2876c065dfa128cc779c,4fc52833d4015625534ebc144973f95795d77e9f..0c7bf3e6def81bcc10e0e328c877529e1ebcd78e
  #define PLLMR1_266_66_33_33 (PLL_FBKDIV_8  |  \
                              PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
                              PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
+ #define PLLMR0_333_111_55_37 (PLL_CPUDIV_1 | PLL_PLBDIV_3 |  \
+                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |  \
+                             PLL_MALDIV_1 | PLL_PCIDIV_3)
+ #define PLLMR1_333_111_55_37 (PLL_FBKDIV_10  |  \
+                             PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
+                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_HI)
+ #define PLLMR0_333_111_55_111 (PLL_CPUDIV_1 | PLL_PLBDIV_3 |  \
+                             PLL_OPBDIV_2 | PLL_EXTBUSDIV_2 |  \
+                             PLL_MALDIV_1 | PLL_PCIDIV_1)
+ #define PLLMR1_333_111_55_111 (PLL_FBKDIV_10  |  \
+                             PLL_FWDDIVA_3 | PLL_FWDDIVB_3 |  \
+                             PLL_TUNE_15_M_40 | PLL_TUNE_VCO_HI)
  
  /*
   * PLL Voltage Controlled Oscillator (VCO) definitions
  #define CPR_CLKUPD_ENDVCH_EN   0x20000000     /* Enable CPR Sys. Div. Changes */
  #define CPR_PERD0_SPIDV_MASK   0x000F0000     /* SPI Clock Divider */
  
 +#define PLLC_SRC_MASK          0x20000000     /* PLL feedback source */
 +
  #define PLLD_FBDV_MASK         0x1F000000     /* PLL feedback divider value */
  #define PLLD_FWDVA_MASK        0x000F0000     /* PLL forward divider A value */
  #define PLLD_FWDVB_MASK        0x00000700     /* PLL forward divider B value */
  #define mtebc(reg, data)  mtdcr(ebccfga,reg);mtdcr(ebccfgd,data)
  #define mfebc(reg, data)  mtdcr(ebccfga,reg);data = mfdcr(ebccfgd)
  
+ #define mtsdram(reg, data)    do { mtdcr(memcfga,reg);mtdcr(memcfgd,data); } while (0)
+ #define mfsdram(reg, data)    do { mtdcr(memcfga,reg);data = mfdcr(memcfgd); } while (0)
  
  #ifndef __ASSEMBLY__
  
diff --combined post/cpu/ppc4xx/uart.c
index 0aeed75ae6ff93a4142ec3e1dbfd59a397b6bad2,0cffda5fca2b57de188edecf52cc2cef9dce67c6..5f14967fee945e5b665412d5b9f0c0e13af62d81
  
  #if CONFIG_POST & CFG_POST_UART
  
+ /*
+  * This table defines the UART's that should be tested and can
+  * be overridden in the board config file
+  */
+ #ifndef CFG_POST_UART_TABLE
+ #define CFG_POST_UART_TABLE   {UART0_BASE, UART1_BASE, UART2_BASE, UART3_BASE}
+ #endif
  #include <asm/processor.h>
  #include <serial.h>
  
+ #if defined(CONFIG_440)
+ #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
+     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
  #define UART0_BASE  CFG_PERIPHERAL_BASE + 0x00000300
  #define UART1_BASE  CFG_PERIPHERAL_BASE + 0x00000400
  #define UART2_BASE  CFG_PERIPHERAL_BASE + 0x00000500
  #define UART3_BASE  CFG_PERIPHERAL_BASE + 0x00000600
+ #else
+ #define UART0_BASE  CFG_PERIPHERAL_BASE + 0x00000200
+ #define UART1_BASE  CFG_PERIPHERAL_BASE + 0x00000300
+ #endif
  
+ #if defined(CONFIG_440SP) || defined(CONFIG_440SPE)
+ #define UART2_BASE  CFG_PERIPHERAL_BASE + 0x00000600
+ #endif
+ #if defined(CONFIG_440GP)
+ #define CR0_MASK        0x3fff0000
+ #define CR0_EXTCLK_ENA  0x00600000
+ #define CR0_UDIV_POS    16
+ #define UDIV_SUBTRACT 1
+ #define UART0_SDR     cntrl0
+ #define MFREG(a, d)   d = mfdcr(a)
+ #define MTREG(a, d)   mtdcr(a, d)
+ #else /* #if defined(CONFIG_440GP) */
+ /* all other 440 PPC's access clock divider via sdr register */
  #define CR0_MASK        0xdfffffff
  #define CR0_EXTCLK_ENA  0x00800000
  #define CR0_UDIV_POS    0
  #define UDIV_SUBTRACT 0
  #define UART0_SDR     sdr_uart0
  #define UART1_SDR     sdr_uart1
+ #if defined(CONFIG_440EP) || defined(CONFIG_440EPx) || \
+     defined(CONFIG_440GR) || defined(CONFIG_440GRx) || \
+     defined(CONFIG_440SP) || defined(CONFIG_440SPe)
  #define UART2_SDR     sdr_uart2
+ #endif
+ #if defined(CONFIG_440EP) || defined(CONFIG_440EPx) || \
+     defined(CONFIG_440GR) || defined(CONFIG_440GRx)
  #define UART3_SDR     sdr_uart3
+ #endif
  #define MFREG(a, d)   mfsdr(a, d)
  #define MTREG(a, d)   mtsdr(a, d)
+ #endif /* #if defined(CONFIG_440GP) */
+ #elif defined(CONFIG_405EP) || defined(CONFIG_405EZ)
+ #define UART0_BASE      0xef600300
+ #define UART1_BASE      0xef600400
+ #define UCR0_MASK       0x0000007f
+ #define UCR1_MASK       0x00007f00
+ #define UCR0_UDIV_POS   0
+ #define UCR1_UDIV_POS   8
+ #define UDIV_MAX        127
+ #else /* CONFIG_405GP || CONFIG_405CR */
+ #define UART0_BASE      0xef600300
+ #define UART1_BASE      0xef600400
+ #define CR0_MASK        0x00001fff
+ #define CR0_EXTCLK_ENA  0x000000c0
+ #define CR0_UDIV_POS    1
+ #define UDIV_MAX        32
+ #endif
  
  #define UART_RBR    0x00
  #define UART_THR    0x00
  #define UART_DLM    0x01
  
  /*
-   Line Status Register.
- */
+  * Line Status Register.
 */
  #define asyncLSRDataReady1            0x01
  #define asyncLSROverrunError1         0x02
  #define asyncLSRParityError1          0x04
  
  DECLARE_GLOBAL_DATA_PTR;
  
++<<<<<<< master
 +#if !defined(CFG_EXT_SERIAL_CLOCK)
 +static void serial_divs (int baudrate, unsigned long *pudiv,
 +                       unsigned short *pbdiv)
 +{
 +      sys_info_t sysinfo;
 +      unsigned long div;              /* total divisor udiv * bdiv */
 +      unsigned long umin;             /* minimum udiv */
 +      unsigned short diff;            /* smallest diff */
 +      unsigned long udiv;             /* best udiv */
 +      unsigned short idiff;           /* current diff */
 +      unsigned short ibdiv;           /* current bdiv */
 +      unsigned long i;
 +      unsigned long est;              /* current estimate */
 +
 +      get_sys_info(&sysinfo);
 +
 +      udiv = 32;                      /* Assume lowest possible serial clk */
 +      div = sysinfo.freqPLB / (16 * baudrate); /* total divisor */
 +      umin = sysinfo.pllOpbDiv << 1;  /* 2 x OPB divisor */
 +      diff = 32;                      /* highest possible */
 +
 +      /* i is the test udiv value -- start with the largest
 +       * possible (32) to minimize serial clock and constrain
 +       * search to umin.
 +       */
 +      for (i = 32; i > umin; i--) {
 +              ibdiv = div / i;
 +              est = i * ibdiv;
 +              idiff = (est > div) ? (est-div) : (div-est);
 +              if (idiff == 0) {
 +                      udiv = i;
 +                      break;  /* can't do better */
 +              } else if (idiff < diff) {
 +                      udiv = i;       /* best so far */
 +                      diff = idiff;   /* update lowest diff*/
 +              }
 +      }
 +
 +      *pudiv = udiv;
 +      *pbdiv = div / udiv;
 +}
 +#endif
 +
++=======
+ #if defined(CONFIG_440)
++>>>>>>> zeus
  static int uart_post_init (unsigned long dev_base)
  {
        unsigned long reg;
        return 0;
  }
  
+ #else /* CONFIG_440 */
+ static int uart_post_init (unsigned long dev_base)
+ {
+       unsigned long reg;
+       unsigned long tmp;
+       unsigned long clk;
+       unsigned long udiv;
+       unsigned short bdiv;
+       volatile char val;
+       int i;
+       for (i = 0; i < 3500; i++) {
+               if (in8 (dev_base + UART_LSR) & asyncLSRTxHoldEmpty1)
+                       break;
+               udelay (100);
+       }
+ #if defined(CONFIG_405EZ)
+       serial_divs(gd->baudrate, &udiv, &bdiv);
+       clk = tmp = reg = 0;
+ #else
+ #ifdef CONFIG_405EP
+       reg = mfdcr(cpc0_ucr) & ~(UCR0_MASK | UCR1_MASK);
+       clk = gd->cpu_clk;
+       tmp = CFG_BASE_BAUD * 16;
+       udiv = (clk + tmp / 2) / tmp;
+       if (udiv > UDIV_MAX)                    /* max. n bits for udiv */
+               udiv = UDIV_MAX;
+       reg |= (udiv) << UCR0_UDIV_POS;         /* set the UART divisor */
+       reg |= (udiv) << UCR1_UDIV_POS;         /* set the UART divisor */
+       mtdcr (cpc0_ucr, reg);
+ #else /* CONFIG_405EP */
+       reg = mfdcr(cntrl0) & ~CR0_MASK;
+ #ifdef CFG_EXT_SERIAL_CLOCK
+       clk = CFG_EXT_SERIAL_CLOCK;
+       udiv = 1;
+       reg |= CR0_EXTCLK_ENA;
+ #else
+       clk = gd->cpu_clk;
+ #ifdef CFG_405_UART_ERRATA_59
+       udiv = 31;                      /* Errata 59: stuck at 31 */
+ #else
+       tmp = CFG_BASE_BAUD * 16;
+       udiv = (clk + tmp / 2) / tmp;
+       if (udiv > UDIV_MAX)                    /* max. n bits for udiv */
+               udiv = UDIV_MAX;
+ #endif
+ #endif
+       reg |= (udiv - 1) << CR0_UDIV_POS;      /* set the UART divisor */
+       mtdcr (cntrl0, reg);
+ #endif /* CONFIG_405EP */
+       tmp = gd->baudrate * udiv * 16;
+       bdiv = (clk + tmp / 2) / tmp;
+ #endif /* CONFIG_405EZ */
+       out8(dev_base + UART_LCR, 0x80);        /* set DLAB bit */
+       out8(dev_base + UART_DLL, bdiv);        /* set baudrate divisor */
+       out8(dev_base + UART_DLM, bdiv >> 8);   /* set baudrate divisor */
+       out8(dev_base + UART_LCR, 0x03);        /* clear DLAB; set 8 bits, no parity */
+       out8(dev_base + UART_FCR, 0x00);        /* disable FIFO */
+       out8(dev_base + UART_MCR, 0x10);        /* enable loopback mode */
+       val = in8(dev_base + UART_LSR); /* clear line status */
+       val = in8(dev_base + UART_RBR); /* read receive buffer */
+       out8(dev_base + UART_SCR, 0x00);        /* set scratchpad */
+       out8(dev_base + UART_IER, 0x00);        /* set interrupt enable reg */
+       return (0);
+ }
+ #endif /* CONFIG_440 */
  static void uart_post_putc (unsigned long dev_base, char c)
  {
        int i;
@@@ -241,9 -323,7 +369,7 @@@ done
  int uart_post_test (int flags)
  {
        int i, res = 0;
-       static unsigned long base[] = {
-               UART0_BASE, UART1_BASE, UART2_BASE, UART3_BASE
-       };
+       static unsigned long base[] = CFG_POST_UART_TABLE;
  
        for (i = 0; i < sizeof (base) / sizeof (base[0]); i++) {
                if (test_ctlr (base[i], i))