]> git.sur5r.net Git - u-boot/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-nand-flash
authorWolfgang Denk <wd@denx.de>
Tue, 12 Jan 2010 22:42:32 +0000 (23:42 +0100)
committerWolfgang Denk <wd@denx.de>
Tue, 12 Jan 2010 22:42:32 +0000 (23:42 +0100)
77 files changed:
MAINTAINERS
MAKEALL
Makefile
board/atum8548/atum8548.c
board/davinci/da830evm/da830evm.c
board/esd/vme8349/pci.c
board/esd/vme8349/vme8349.c
board/esd/vme8349/vme8349pin.h [new file with mode: 0644]
board/freescale/mpc8315erdb/config.mk
board/freescale/mpc8315erdb/mpc8315erdb.c
board/freescale/mpc8315erdb/sdram.c
board/freescale/mpc8536ds/mpc8536ds.c
board/freescale/mpc8544ds/mpc8544ds.c
board/freescale/mpc8548cds/mpc8548cds.c
board/freescale/mpc8568mds/mpc8568mds.c
board/freescale/mpc8569mds/mpc8569mds.c
board/freescale/mpc8572ds/mpc8572ds.c
board/freescale/mpc8572ds/tlb.c
board/freescale/mpc8610hpcd/mpc8610hpcd.c
board/freescale/p1_p2_rdb/p1_p2_rdb.c
board/freescale/p1_p2_rdb/pci.c
board/freescale/p1_p2_rdb/tlb.c
board/freescale/p2020ds/p2020ds.c
board/freescale/p2020ds/tlb.c
board/tqc/tqm85xx/tqm85xx.c
cpu/mpc83xx/cpu_init.c
cpu/mpc83xx/spd_sdram.c
cpu/mpc85xx/cpu_init.c
cpu/mpc85xx/fdt.c
cpu/mpc85xx/mp.c
cpu/mpc85xx/release.S
cpu/mpc85xx/speed.c
cpu/mpc85xx/start.S
cpu/mpc85xx/tlb.c
cpu/mpc8xxx/ddr/ctrl_regs.c
cpu/mpc8xxx/ddr/options.c
cpu/mpc8xxx/pci_cfg.c
doc/README.mpc8315erdb
drivers/net/tsec.c
drivers/pci/fsl_pci_init.c
drivers/usb/host/Makefile
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-ppc4xx.c [new file with mode: 0644]
drivers/usb/musb/Makefile
drivers/usb/musb/blackfin_usb.c [new file with mode: 0644]
drivers/usb/musb/blackfin_usb.h [new file with mode: 0644]
drivers/usb/musb/da8xx.c [new file with mode: 0644]
drivers/usb/musb/da8xx.h [new file with mode: 0644]
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_core.h
drivers/usb/musb/musb_hcd.c
drivers/usb/musb/musb_hcd.h
drivers/usb/musb/omap3.c
include/asm-arm/arch-davinci/gpio_defs.h
include/asm-blackfin/mach-common/bits/usb.h [new file with mode: 0644]
include/asm-ppc/config.h
include/asm-ppc/fsl_ddr_sdram.h
include/asm-ppc/fsl_law.h
include/asm-ppc/fsl_pci.h
include/asm-ppc/global_data.h
include/asm-ppc/immap_83xx.h
include/asm-ppc/immap_85xx.h
include/asm-ppc/immap_86xx.h
include/asm-ppc/mmu.h
include/asm-ppc/processor.h
include/configs/ATUM8548.h
include/configs/MPC8315ERDB.h
include/configs/MPC8569MDS.h
include/configs/MPC8572DS.h
include/configs/P1_P2_RDB.h
include/configs/P2020DS.h
include/configs/da830evm.h
include/configs/kmeter1.h
include/configs/sequoia.h
include/configs/vme8349.h
include/tsec.h
include/usb.h

index 9734b1d0958954b896b73d849b16bf66276ed547..48db504dad42c4c65640e1919704fba9325a027b 100644 (file)
@@ -36,6 +36,7 @@ Reinhard Arlt <reinhard.arlt@esd-electronics.com>
        mecp5200        MPC5200
        pf5200          MPC5200
 
+       caddy2          MPC8349
        vme8349         MPC8349
 
        CPCI750         PPC750FX/GX
diff --git a/MAKEALL b/MAKEALL
index ab1bb6fdf26158acb0bc1c9eefb0adadf28d6f14..a6d0f20f46cfcfc12508e498df55ef364a6ee70f 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -358,10 +358,12 @@ LIST_8260="               \
 #########################################################################
 
 LIST_83xx="            \
+       caddy2          \
        kmeter1         \
        MPC8313ERDB_33  \
        MPC8313ERDB_NAND_66     \
        MPC8315ERDB     \
+       MPC8315ERDB_NAND        \
        MPC8323ERDB     \
        MPC832XEMDS     \
        MPC832XEMDS_ATM \
index ed6156f51fc2aaba194f55e1794fa6acec699556..1abe64aa5953c2f4fd42820799004d53c5aafdf5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2261,8 +2261,12 @@ MPC8313ERDB_NAND_66_config: unconfig
                echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk ; \
        fi ;
 
+MPC8315ERDB_NAND_config \
 MPC8315ERDB_config: unconfig
-       @$(MKCONFIG) -a MPC8315ERDB ppc mpc83xx mpc8315erdb freescale
+       @if [ "$(findstring _NAND_,$@)" ] ; then \
+               ln -sf mpc8313erdb nand_spl/board/freescale/mpc8315erdb ; \
+       fi ;
+       @$(MKCONFIG) -t $(@:_config=) MPC8315ERDB ppc mpc83xx mpc8315erdb freescale
 
 MPC8323ERDB_config:    unconfig
        @$(MKCONFIG) -a MPC8323ERDB ppc mpc83xx mpc8323erdb freescale
@@ -2396,8 +2400,9 @@ SIMPC8313_SP_config: unconfig
 TQM834x_config:        unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc83xx tqm834x tqc
 
+caddy2_config \
 vme8349_config:                unconfig
-       @$(MKCONFIG) $(@:_config=) ppc mpc83xx vme8349 esd
+       @$(MKCONFIG) -t $(@:_config=) vme8349 ppc mpc83xx vme8349 esd
 
 #########################################################################
 ## MPC85xx Systems
index a220ad4d7af483b0cd7710333feac7a0a99045b7..da6cf47433d07c1e67be562828228f889fc3bd19 100644 (file)
@@ -170,22 +170,26 @@ static struct pci_controller pci2_hose;
 static struct pci_controller pcie1_hose;
 #endif
 
-int first_free_busno=0;
-
-void
-pci_init_board(void)
+void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       struct fsl_pci_info pci_info[3];
+       u32 devdisr, pordevsr, io_sel;
+       u32 porpllsr, pci_agent, pci_speed, pci_32, pci_arb, pci_clk_sel;
+       int first_free_busno = 0;
+       int num = 0;
+
+       int pcie_ep, pcie_configured;
 
-       uint devdisr = gur->devdisr;
-       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       porpllsr = in_be32(&gur->porpllsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
 
-       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-               devdisr, io_sel, host_agent);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
        /* explicitly set 'Clock out select register' to echo SYSCLK input to our CPLD */
-       gur->clkocr  |= MPC85xx_ATUM_CLKOCR;
+       setbits_be32(&gur->clkocr, MPC85xx_ATUM_CLKOCR);
 
        if (io_sel & 1) {
                if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
@@ -199,145 +203,79 @@ pci_init_board(void)
        }
 
 #ifdef CONFIG_PCIE1
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE1 connected to slot as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+#ifdef CONFIG_SYS_PCIE1_MEM_BUS2
                /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BASE,
-                              CONFIG_SYS_PCIE1_MEM_PHYS,
-                              CONFIG_SYS_PCIE1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_IO_BASE,
-                              CONFIG_SYS_PCIE1_IO_PHYS,
-                              CONFIG_SYS_PCIE1_IO_SIZE,
-                              PCI_REGION_IO);
-
-#ifdef CONFIG_SYS_PCIE1_MEM_BASE2
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BASE2,
+               pci_set_region(&pcie1_hose.regions[0],
+                              CONFIG_SYS_PCIE1_MEM_BUS2,
                               CONFIG_SYS_PCIE1_MEM_PHYS2,
                               CONFIG_SYS_PCIE1_MEM_SIZE2,
                               PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
 
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno=hose->last_busno+1;
-               printf("    PCIE1 on bus %02x - %02x\n",
-                      hose->first_busno,hose->last_busno);
+               pcie1_hose.region_count = 1;
+#endif
+               printf ("    PCIE1 connected to Slot as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
 
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
                printf ("    PCIE1: disabled\n");
        }
 
- }
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
 
 #ifdef CONFIG_PCI1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       struct pci_region *r = hose->regions;
-
-       uint pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI_1, host_agent);
-       uint pci_speed = 33333000; /*get_clock_freq (); PCI PSPEED in [4:5] */
-       uint pci_32 = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;      /* PORDEVSR[15] */
-       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
-       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+       pci_speed = 33333000; /*get_clock_freq (); PCI PSPEED in [4:5] */
+       pci_32 = pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;        /* PORDEVSR[15] */
+       pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;
+       pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
 
        if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
-               printf ("\n    PCI1: %d bit, %s MHz, %s, %s, %s (base address %x)\n",
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
+               printf ("\n    PCI1: %d bit, %s MHz, %s, %s, %s (base address %lx)\n",
                        (pci_32) ? 32 : 64,
                        (pci_speed == 33333000) ? "33" :
                        (pci_speed == 66666000) ? "66" : "unknown",
                        pci_clk_sel ? "sync" : "async",
                        pci_agent ? "agent" : "host",
                        pci_arb ? "arbiter" : "external-arbiter",
-                       (uint)pci
-                       );
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_MEM_BASE,
-                              CONFIG_SYS_PCI1_MEM_PHYS,
-                              CONFIG_SYS_PCI1_MEM_SIZE,
-                              PCI_REGION_MEM);
+                       pci_info[num].regs);
 
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_IO_BASE,
-                              CONFIG_SYS_PCI1_IO_PHYS,
-                              CONFIG_SYS_PCI1_IO_SIZE,
-                              PCI_REGION_IO);
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("PCI1 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
        } else {
-               printf ("    PCI1: disabled\n");
+               printf ("    PCI: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */
 #endif
 
 #ifdef CONFIG_PCI2
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI2_ADDR;
-       struct pci_controller *hose = &pci2_hose;
-       struct pci_region *r = hose->regions;
-
        if (!(devdisr & MPC85xx_DEVDISR_PCI2)) {
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI2_MEM_BASE,
-                              CONFIG_SYS_PCI2_MEM_PHYS,
-                              CONFIG_SYS_PCI2_MEM_SIZE,
-                              PCI_REGION_MEM);
+               SET_STD_PCI_INFO(pci_info[num], 2);
+               pci_agent = fsl_setup_hose(&pci2_hose, pci_info[num].regs);
 
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI2_IO_BASE,
-                              CONFIG_SYS_PCI2_IO_PHYS,
-                              CONFIG_SYS_PCI2_IO_SIZE,
-                              PCI_REGION_IO);
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("PCI2 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+               puts ("    PCI2\n");
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
        } else {
                printf ("    PCI2: disabled\n");
        }
-}
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI2;
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI2); /* disable */
 #endif
 }
 
index bb8cc3c928bce09decc4ce9b8c5d31de58a5f242..7cf601301b68f0e382b58f43fcfed33f577c0167 100644 (file)
@@ -65,6 +65,11 @@ const struct pinmux_config i2c_pins[] = {
        { pinmux[9], 2, 4 }
 };
 
+/* USB0_DRVVBUS pin muxer settings */
+const struct pinmux_config usb_pins[] = {
+       { pinmux[9], 1, 1 }
+};
+
 int board_init(void)
 {
 #ifndef CONFIG_USE_IRQ
@@ -118,6 +123,9 @@ int board_init(void)
        if (davinci_configure_pin_mux(i2c_pins, ARRAY_SIZE(i2c_pins)) != 0)
                return 1;
 
+       if (davinci_configure_pin_mux(usb_pins, ARRAY_SIZE(usb_pins)) != 0)
+               return 1;
+
        /* enable the console UART */
        writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST |
                DAVINCI_UART_PWREMU_MGMT_UTRST),
index d15203c145d7a53295572c8557899ad9e5d7f041..94fd32a6fa5f7434b6f748463d6690e1d8c4759b 100644 (file)
@@ -2,6 +2,9 @@
  * pci.c -- esd VME8349 PCI board support.
  * Copyright (c) 2006 Wind River Systems, Inc.
  * Copyright (C) 2006-2009 Freescale Semiconductor, Inc.
+ * Copyright (c) 2009 esd gmbh.
+ *
+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
  *
  * Based on MPC8349 PCI support but w/o PIB related code.
  *
@@ -32,6 +35,7 @@
 #include <pci.h>
 #include <i2c.h>
 #include <asm/fsl_i2c.h>
+#include "vme8349pin.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -93,17 +97,22 @@ pci_init_board(void)
        udelay(2000);
 
        /*
-        * Assert/deassert PCI reset
+        * Assert/deassert VME reset
         */
-       setbits_be32(&immr->gpio[0].dat, 0x00800000);
-       setbits_be32(&immr->gpio[0].dir, 0x00800000);
-       setbits_be32(&immr->gpio[1].dir, 0x08800000);
+       clrsetbits_be32(&immr->gpio[1].dat,
+                       GPIO2_TSI_POWERUP_RESET_N | GPIO2_TSI_PLL_RESET_N,
+                       GPIO2_VME_RESET_N  | GPIO2_L_RESET_EN_N);
+       setbits_be32(&immr->gpio[1].dir, GPIO2_TSI_PLL_RESET_N |
+                    GPIO2_TSI_POWERUP_RESET_N |
+                    GPIO2_VME_RESET_N |
+                    GPIO2_L_RESET_EN_N);
+       clrbits_be32(&immr->gpio[1].dir, GPIO2_V_SCON);
        udelay(200);
-       setbits_be32(&immr->gpio[1].dat, 0x08000000);
+       setbits_be32(&immr->gpio[1].dat, GPIO2_TSI_PLL_RESET_N);
        udelay(200);
-       setbits_be32(&immr->gpio[1].dat, 0x08800000);
+       setbits_be32(&immr->gpio[1].dat, GPIO2_TSI_POWERUP_RESET_N);
        udelay(600000);
-       clrbits_be32(&immr->gpio[1].dat, 0x00100000);
+       clrbits_be32(&immr->gpio[1].dat, GPIO2_L_RESET_EN_N);
 
        /* Configure PCI Local Access Windows */
        pci_law[0].bar = CONFIG_SYS_PCI1_MEM_PHYS & LAWBAR_BAR;
@@ -114,6 +123,14 @@ pci_init_board(void)
 
        udelay(2000);
 
-       if (monarch == 0)
+       if (monarch == 0) {
                mpc83xx_pci_init(1, reg, 0);
+       } else {
+               /*
+                * Release PCI RST Output signal
+                */
+               out_be32(&immr->pci_ctrl[0].gcr, 0);
+               udelay(2000);
+               out_be32(&immr->pci_ctrl[0].gcr, 1);
+       }
 }
index e3bc15112dc057979dbf94552420336f415d2dbe..b0ebad72b2f24399c9f0f82a7583665b3b9a08aa 100644 (file)
 #endif
 #include <asm/io.h>
 #include <asm/mmu.h>
+#include <spd.h>
+#include <spd_sdram.h>
+#include <i2c.h>
+#include <netdev.h>
 
 void ddr_enable_ecc(unsigned int dram_size);
 
-int fixed_sdram(void)
-{
-       volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
-       u32 msize = 0;
-       u32 ddr_size;
-       u32 ddr_size_log2;
-
-       msize = CONFIG_SYS_DDR_SIZE;
-       for (ddr_size = msize << 20, ddr_size_log2 = 0;
-            (ddr_size > 1);
-            ddr_size = ddr_size>>1, ddr_size_log2++) {
-               if (ddr_size & 1)
-                       return -1;
-       }
-
-       im->sysconf.ddrlaw[0].bar = CONFIG_SYS_DDR_SDRAM_BASE & 0xfffff000;
-       im->sysconf.ddrlaw[0].ar  = LAWAR_EN | ((ddr_size_log2 - 1) &
-                                               LAWAR_SIZE);
-
-#if (CONFIG_SYS_DDR_SIZE == 512)
-       im->ddr.csbnds[0].csbnds = 0x0000001f;
-#else
-#warning Currently any DDR size other than 512MiB is not supported
-#endif
-       im->ddr.cs_config[0]     = CONFIG_SYS_DDR_CONFIG | 0x00330000;
-
-       /* currently we use only one CS, so disable the other banks */
-       im->ddr.csbnds[1].csbnds = 0x00000000;
-       im->ddr.csbnds[2].csbnds = 0x00000000;
-       im->ddr.csbnds[3].csbnds = 0x00000000;
-       im->ddr.cs_config[1] = 0;
-       im->ddr.cs_config[2] = 0;
-       im->ddr.cs_config[3] = 0;
-
-       im->ddr.timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0;
-       im->ddr.timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1;
-       im->ddr.timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2;
-       im->ddr.timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3;
-
-       im->ddr.sdram_cfg = CONFIG_SYS_DDR_SDRAM_CFG;
-       im->ddr.sdram_cfg2 = CONFIG_SYS_DDR_SDRAM_CFG2;
-       im->ddr.sdram_mode = CONFIG_SYS_DDR_MODE;
-       im->ddr.sdram_mode2 = CONFIG_SYS_DDR_MODE2;
-
-       im->ddr.sdram_interval = CONFIG_SYS_DDR_INTERVAL;
-       sync();
-       udelay(200);
-
-       /* enable DDR controller */
-       im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN;
-
-       return msize;
-}
-
 phys_size_t initdram(int board_type)
 {
        volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
@@ -103,10 +53,10 @@ phys_size_t initdram(int board_type)
        if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32)im)
                return -1;
 
-       /* DDR SDRAM - Main SODIMM */
+       /* DDR SDRAM - Main memory */
        im->sysconf.ddrlaw[0].bar = CONFIG_SYS_DDR_BASE & LAWBAR_BAR;
 
-       msize = fixed_sdram();
+       msize = spd_sdram();
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
        /*
@@ -124,17 +74,148 @@ phys_size_t initdram(int board_type)
 
 int checkboard(void)
 {
-       puts("Board: esd VME8349\n");
+#ifdef VME_CADDY2
+       puts("Board: esd VME-CADDY/2\n");
+#else
+       puts("Board: esd VME-CPU/8349\n");
+#endif
 
        return 0;
 }
 
+#ifdef VME_CADDY2
+int board_eth_init(bd_t *bis)
+{
+       return pci_eth_init(bis);
+}
+#endif
+
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
        ft_cpu_setup(blob, bd);
+
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
 #endif
 }
 #endif
+
+int misc_init_r()
+{
+       immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
+
+       clrsetbits_be32(&im->lbus.lcrr, LBCR_LDIS, 0);
+
+       return 0;
+}
+
+/*
+ * Provide SPD values for spd_sdram(). Both boards (VME-CADDY/2
+ * and VME-CADDY/2) have different SDRAM configurations.
+ */
+#ifdef VME_CADDY2
+#define SMALL_RAM      0xff
+#define LARGE_RAM      0x00
+#else
+#define SMALL_RAM      0x00
+#define LARGE_RAM      0xff
+#endif
+
+#define SPD_VAL(a, b)  (((a) & SMALL_RAM) | ((b) & LARGE_RAM))
+
+static spd_eeprom_t default_spd_eeprom = {
+       SPD_VAL(0x80, 0x80),    /* 00 use 128 Bytes */
+       SPD_VAL(0x07, 0x07),    /* 01 use 128 Bytes */
+       SPD_MEMTYPE_DDR2,       /* 02 type is DDR2 */
+       SPD_VAL(0x0d, 0x0d),    /* 03 rows: 13 */
+       SPD_VAL(0x09, 0x0a),    /* 04 cols:  9 / 10 */
+       SPD_VAL(0x00, 0x00),    /* 05 */
+       SPD_VAL(0x40, 0x40),    /* 06 */
+       SPD_VAL(0x00, 0x00),    /* 07 */
+       SPD_VAL(0x05, 0x05),    /* 08 */
+       SPD_VAL(0x30, 0x30),    /* 09 */
+       SPD_VAL(0x45, 0x45),    /* 10 */
+       SPD_VAL(0x02, 0x02),    /* 11 ecc used */
+       SPD_VAL(0x82, 0x82),    /* 12 */
+       SPD_VAL(0x10, 0x10),    /* 13 */
+       SPD_VAL(0x08, 0x08),    /* 14 */
+       SPD_VAL(0x00, 0x00),    /* 15 */
+       SPD_VAL(0x0c, 0x0c),    /* 16 */
+       SPD_VAL(0x04, 0x08),    /* 17 banks: 4 / 8 */
+       SPD_VAL(0x38, 0x38),    /* 18 */
+       SPD_VAL(0x00, 0x00),    /* 19 */
+       SPD_VAL(0x02, 0x02),    /* 20 */
+       SPD_VAL(0x00, 0x00),    /* 21 */
+       SPD_VAL(0x03, 0x03),    /* 22 */
+       SPD_VAL(0x3d, 0x3d),    /* 23 */
+       SPD_VAL(0x45, 0x45),    /* 24 */
+       SPD_VAL(0x50, 0x50),    /* 25 */
+       SPD_VAL(0x45, 0x45),    /* 26 */
+       SPD_VAL(0x3c, 0x3c),    /* 27 */
+       SPD_VAL(0x28, 0x28),    /* 28 */
+       SPD_VAL(0x3c, 0x3c),    /* 29 */
+       SPD_VAL(0x2d, 0x2d),    /* 30 */
+       SPD_VAL(0x20, 0x80),    /* 31 */
+       SPD_VAL(0x20, 0x20),    /* 32 */
+       SPD_VAL(0x27, 0x27),    /* 33 */
+       SPD_VAL(0x10, 0x10),    /* 34 */
+       SPD_VAL(0x17, 0x17),    /* 35 */
+       SPD_VAL(0x3c, 0x3c),    /* 36 */
+       SPD_VAL(0x1e, 0x1e),    /* 37 */
+       SPD_VAL(0x1e, 0x1e),    /* 38 */
+       SPD_VAL(0x00, 0x00),    /* 39 */
+       SPD_VAL(0x00, 0x06),    /* 40 */
+       SPD_VAL(0x37, 0x37),    /* 41 */
+       SPD_VAL(0x4b, 0x7f),    /* 42 */
+       SPD_VAL(0x80, 0x80),    /* 43 */
+       SPD_VAL(0x18, 0x18),    /* 44 */
+       SPD_VAL(0x22, 0x22),    /* 45 */
+       SPD_VAL(0x00, 0x00),    /* 46 */
+       { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+       SPD_VAL(0x10, 0x10),    /* 62 */
+       SPD_VAL(0x7e, 0x1d),    /* 63 */
+       { 'e', 's', 'd', '-', 'g', 'm', 'b', 'h' },
+       SPD_VAL(0x00, 0x00),    /* 72 */
+#ifdef VME_CADDY2
+       { "vme-caddy/2 ram   " }
+#else
+       { "vme-cpu/2 ram     " }
+#endif
+};
+
+int vme8349_read_spd(uchar chip, uint addr, int alen, uchar *buffer, int len)
+{
+       int old_bus = I2C_GET_BUS();
+       unsigned int l, sum;
+       int valid = 0;
+
+       I2C_SET_BUS(0);
+
+       if (i2c_read(chip, addr, alen, buffer, len) == 0)
+               if (memcmp(&buffer[64], &default_spd_eeprom.mid[0], 8) == 0) {
+                       sum = 0;
+                       for (l = 0; l < 63; l++)
+                               sum = (sum + buffer[l]) & 0xff;
+                       if (sum == buffer[63])
+                               valid = 1;
+                       else
+                               printf("Invalid checksum in EEPROM %02x %02x\n",
+                                      sum, buffer[63]);
+               }
+
+       if (valid == 0) {
+               memcpy(buffer, (void *)&default_spd_eeprom, len);
+               sum = 0;
+               for (l = 0; l < 63; l++)
+                       sum = (sum + buffer[l]) & 0xff;
+               if (sum != buffer[63])
+                       printf("Invalid checksum in FLASH %02x %02x\n",
+                              sum, buffer[63]);
+               buffer[63] = sum;
+       }
+
+       I2C_SET_BUS(old_bus);
+
+       return 0;
+}
diff --git a/board/esd/vme8349/vme8349pin.h b/board/esd/vme8349/vme8349pin.h
new file mode 100644 (file)
index 0000000..d1fd1b2
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * vme8349pin.h -- esd VME8349 MPC8349 I/O pin definition.
+ * Copyright (c) 2009 esd gmbh.
+ *
+ * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
+ *
+ * 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
+ *
+ */
+
+#ifndef __VME8349PIN_H__
+#define __VME8349PIN_H__
+
+#define GPIO2_V_SCON           0x80000000 /* In:  from tsi148 1: is syscon */
+#define GPIO2_VME_RESET_N      0x20000000 /* Out: to tsi148                */
+#define GPIO2_TSI_PLL_RESET_N  0x08000000 /* Out: to tsi148                */
+#define GPIO2_TSI_POWERUP_RESET_N 0x00800000 /* Out: to tsi148              */
+#define GPIO2_L_RESET_EN_N     0x00100000 /* Out: 0:vme can assert cpu lrst*/
+
+#endif /* of ifndef __VME8349PIN_H__ */
index f76826495ef6a4fff49dafd222ad01d713693793..bf972fbe56fbabbb816a050f3c71d640c88cbc47 100644 (file)
@@ -1 +1,9 @@
+ifndef NAND_SPL
+ifeq ($(CONFIG_MK_NAND), y)
+TEXT_BASE = $(CONFIG_RAMBOOT_TEXT_BASE)
+endif
+endif
+
+ifndef TEXT_BASE
 TEXT_BASE = 0xFE000000
+endif
index dea4d6fe7afdd45c2cd6511f79b396dc2ca347d7..d5e71dc522ff4acb8b931697f360e5a36ca1bb59 100644 (file)
@@ -32,6 +32,8 @@
 #include <mpc83xx.h>
 #include <netdev.h>
 #include <asm/io.h>
+#include <ns16550.h>
+#include <nand.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -45,6 +47,8 @@ int board_early_init_f(void)
        return 0;
 }
 
+#ifndef CONFIG_NAND_SPL
+
 static u8 read_board_info(void)
 {
        u8 val8;
@@ -220,3 +224,41 @@ int board_eth_init(bd_t *bis)
        cpu_eth_init(bis);      /* Initialize TSECs first */
        return pci_eth_init(bis);
 }
+
+#else /* CONFIG_NAND_SPL */
+
+int checkboard(void)
+{
+       puts("Board: Freescale MPC8315ERDB\n");
+       return 0;
+}
+
+void board_init_f(ulong bootflag)
+{
+       board_early_init_f();
+       NS16550_init((NS16550_t)(CONFIG_SYS_IMMR + 0x4500),
+                    CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE);
+       puts("NAND boot... ");
+       init_timebase();
+       initdram(0);
+       relocate_code(CONFIG_SYS_NAND_U_BOOT_RELOC + 0x10000, (gd_t *)gd,
+                     CONFIG_SYS_NAND_U_BOOT_RELOC);
+}
+
+void board_init_r(gd_t *gd, ulong dest_addr)
+{
+       nand_boot();
+}
+
+void putc(char c)
+{
+       if (gd->flags & GD_FLG_SILENT)
+               return;
+
+       if (c == '\n')
+               NS16550_putc((NS16550_t)(CONFIG_SYS_IMMR + 0x4500), '\r');
+
+       NS16550_putc((NS16550_t)(CONFIG_SYS_IMMR + 0x4500), c);
+}
+
+#endif /* CONFIG_NAND_SPL */
index ead7b1e0de45f68fd4f2dabb9aeb95b13ca48b5a..fe8ec1eab848e79ec06cf8f05a301b1510336937 100644 (file)
@@ -54,6 +54,7 @@ static void resume_from_sleep(void)
  * This is useful for faster booting in configs where the RAM is unlikely
  * to be changed, or for things like NAND booting where space is tight.
  */
+#ifndef CONFIG_SYS_RAMBOOT
 static long fixed_sdram(void)
 {
        volatile immap_t *im = (volatile immap_t *)CONFIG_SYS_IMMR;
@@ -68,7 +69,7 @@ static long fixed_sdram(void)
         * Erratum DDR3 requires a 50ms delay after clearing DDRCDR[DDR_cfg],
         * or the DDR2 controller may fail to initialize correctly.
         */
-       udelay(50000);
+       __udelay(50000);
 
        im->ddr.csbnds[0].csbnds = (msize - 1) >> 24;
        im->ddr.cs_config[0] = CONFIG_SYS_DDR_CS0_CONFIG;
@@ -100,6 +101,12 @@ static long fixed_sdram(void)
 
        return msize;
 }
+#else
+static long fixed_sdram(void)
+{
+       return CONFIG_SYS_DDR_SIZE * 1024 * 1024;
+}
+#endif /* CONFIG_SYS_RAMBOOT */
 
 phys_size_t initdram(int board_type)
 {
index da729166b14af4cc79d2d6fc65588bbc77fd5ba1..f8292cf378953df96d101995286686f86b574c94 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Freescale Semiconductor.
+ * Copyright 2008-2009 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -189,20 +189,26 @@ static struct pci_controller pcie2_hose;
 static struct pci_controller pcie3_hose;
 #endif
 
-int first_free_busno=0;
-
-void
-pci_init_board(void)
+#ifdef CONFIG_PCI
+void pci_init_board(void)
 {
-       volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       uint devdisr = gur->devdisr;
-       uint sdrs2_io_sel =
-               (gur->pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;
-       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+       ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       struct fsl_pci_info pci_info[4];
+       u32 devdisr, pordevsr, io_sel, sdrs2_io_sel;
+       u32 porpllsr, pci_agent, pci_speed, pci_32, pci_arb, pci_clk_sel;
+       int first_free_busno = 0;
+       int num = 0;
+
+       int pcie_ep, pcie_configured;
 
-       debug("   pci_init_board: devdisr=%x, sdrs2_io_sel=%x, io_sel=%x,\
-               host_agent=%x\n", devdisr, sdrs2_io_sel, io_sel, host_agent);
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       porpllsr = in_be32(&gur->porpllsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+       sdrs2_io_sel = (pordevsr & MPC85xx_PORDEVSR_SRDS2_IO_SEL) >> 27;
+
+       debug("   pci_init_board: devdisr=%x, sdrs2_io_sel=%x, io_sel=%x\n",
+               devdisr, sdrs2_io_sel, io_sel);
 
        if (sdrs2_io_sel == 7)
                printf("    Serdes2 disalbed\n");
@@ -212,233 +218,102 @@ pci_init_board(void)
        } else if (sdrs2_io_sel == 6)
                printf("    eTSEC1 is in sgmii mode.\n");
 
+       puts("\n");
 #ifdef CONFIG_PCIE3
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE3_ADDR;
-       struct pci_controller *hose = &pcie3_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_3, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
 
-       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE3 connected to Slot3 as %s (base address %x)",
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE3)){
+               SET_STD_PCIE_INFO(pci_info[num], 3);
+               pcie_ep = fsl_setup_hose(&pcie3_hose, pci_info[num].regs);
+               printf ("    PCIE3 connected to Slot3 as %s (base address %lx)\n",
                        pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE3_MEM_BUS,
-                              CONFIG_SYS_PCIE3_MEM_PHYS,
-                              CONFIG_SYS_PCIE3_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE3_IO_BUS,
-                              CONFIG_SYS_PCIE3_IO_PHYS,
-                              CONFIG_SYS_PCIE3_IO_SIZE,
-                              PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno=hose->last_busno+1;
-               printf ("    PCIE3 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+                       pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie3_hose, first_free_busno);
        } else {
                printf ("    PCIE3: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE3; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE3); /* disable */
 #endif
 
 #ifdef CONFIG_PCIE1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE1 connected to Slot1 as %s (base address %x)",
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+               printf ("    PCIE1 connected to Slot1 as %s (base address %lx)\n",
                        pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BUS,
-                              CONFIG_SYS_PCIE1_MEM_PHYS,
-                              CONFIG_SYS_PCIE1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_IO_BUS,
-                              CONFIG_SYS_PCIE1_IO_PHYS,
-                              CONFIG_SYS_PCIE1_IO_SIZE,
-                              PCI_REGION_IO);
-
-#ifdef CONFIG_SYS_PCIE1_MEM_BUS2
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BUS2,
-                              CONFIG_SYS_PCIE1_MEM_PHYS2,
-                              CONFIG_SYS_PCIE1_MEM_SIZE2,
-                              PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno=hose->last_busno+1;
-               printf("    PCIE1 on bus %02x - %02x\n",
-                      hose->first_busno,hose->last_busno);
-
+                       pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
                printf ("    PCIE1: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
 
 #ifdef CONFIG_PCIE2
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE2_ADDR;
-       struct pci_controller *hose = &pcie2_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
 
-       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE2 connected to Slot 2 as %s (base address %x)",
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE2)){
+               SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
+               printf ("    PCIE2 connected to Slot 2 as %s (base address %lx)\n",
                        pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE2_MEM_BUS,
-                              CONFIG_SYS_PCIE2_MEM_PHYS,
-                              CONFIG_SYS_PCIE2_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE2_IO_BUS,
-                              CONFIG_SYS_PCIE2_IO_PHYS,
-                              CONFIG_SYS_PCIE2_IO_SIZE,
-                              PCI_REGION_IO);
-
-#ifdef CONFIG_SYS_PCIE2_MEM_BUS2
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE2_MEM_BUS2,
-                              CONFIG_SYS_PCIE2_MEM_PHYS2,
-                              CONFIG_SYS_PCIE2_MEM_SIZE2,
-                              PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("    PCIE2 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
-
+                       pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie2_hose, first_free_busno);
        } else {
                printf ("    PCIE2: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE2; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE2); /* disable */
 #endif
 
 #ifdef CONFIG_PCI1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       struct pci_region *r = hose->regions;
-
-       uint pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI, host_agent);
-       uint pci_speed = 66666000; /*get_clock_freq (); PCI PSPEED in [4:5] */
-       uint pci_32 = 1;
-       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
-       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+       pci_speed = 66666000;
+       pci_32 = 1;
+       pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;
+       pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
 
        if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
-               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %x)\n",
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
+               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %lx)\n",
                        (pci_32) ? 32 : 64,
                        (pci_speed == 33333000) ? "33" :
                        (pci_speed == 66666000) ? "66" : "unknown",
                        pci_clk_sel ? "sync" : "async",
                        pci_agent ? "agent" : "host",
                        pci_arb ? "arbiter" : "external-arbiter",
-                       (uint)pci
-                       );
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_MEM_BUS,
-                              CONFIG_SYS_PCI1_MEM_PHYS,
-                              CONFIG_SYS_PCI1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_IO_BUS,
-                              CONFIG_SYS_PCI1_IO_PHYS,
-                              CONFIG_SYS_PCI1_IO_SIZE,
-                              PCI_REGION_IO);
-
-#ifdef CONFIG_SYS_PCI1_MEM_BUS2
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_MEM_BUS2,
-                              CONFIG_SYS_PCI1_MEM_PHYS2,
-                              CONFIG_SYS_PCI1_MEM_SIZE2,
-                              PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
+                       pci_info[num].regs);
 
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("PCI on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
        } else {
                printf ("    PCI: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */
 #endif
 }
+#endif
 
 int board_early_init_r(void)
 {
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
-       const u8 flash_esel = 1;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
 
        /*
         * Remap Boot flash + PROMJET region to caching-inhibited
index 244a197049c1dc0a9005df3ecb75bb4484967fd2..35a8063c9bf2b5dde64fbc4b4d8503606ebfa91c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Freescale Semiconductor, Inc.
+ * Copyright 2007,2009 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -101,18 +101,23 @@ static struct pci_controller pcie2_hose;
 static struct pci_controller pcie3_hose;
 #endif
 
-int first_free_busno=0;
-
-void
-pci_init_board(void)
+void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       uint devdisr = gur->devdisr;
-       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
+       struct fsl_pci_info pci_info[4];
+       u32 devdisr, pordevsr, io_sel;
+       u32 porpllsr, pci_agent, pci_speed, pci_32, pci_arb, pci_clk_sel;
+       int first_free_busno = 0;
+       int num = 0;
+
+       int pcie_ep, pcie_configured;
 
-       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-               devdisr, io_sel, host_agent);
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       porpllsr = in_be32(&gur->porpllsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
+
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
        if (io_sel & 1) {
                if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
@@ -120,55 +125,29 @@ pci_init_board(void)
                if (!(gur->pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS))
                        printf ("    eTSEC3 is in sgmii mode.\n");
        }
+       puts("\n");
 
 #ifdef CONFIG_PCIE3
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE3_ADDR;
-       struct pci_controller *hose = &pcie3_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_3, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
-       struct pci_region *r = hose->regions;
-
-       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE3 connected to ULI as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE3_MEM_BUS,
-                              CONFIG_SYS_PCIE3_MEM_PHYS,
-                              CONFIG_SYS_PCIE3_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE3_IO_BUS,
-                              CONFIG_SYS_PCIE3_IO_PHYS,
-                              CONFIG_SYS_PCIE3_IO_SIZE,
-                              PCI_REGION_IO);
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
 
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE3)){
+               SET_STD_PCIE_INFO(pci_info[num], 3);
+               pcie_ep = fsl_setup_hose(&pcie3_hose, pci_info[num].regs);
 #ifdef CONFIG_SYS_PCIE3_MEM_BUS2
                /* outbound memory */
-               pci_set_region(r++,
+               pci_set_region(&pcie3_hose.regions[0],
                               CONFIG_SYS_PCIE3_MEM_BUS2,
                               CONFIG_SYS_PCIE3_MEM_PHYS2,
                               CONFIG_SYS_PCIE3_MEM_SIZE2,
                               PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
 
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno=hose->last_busno+1;
-               printf ("    PCIE3 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+               pcie3_hose.region_count = 1;
+#endif
+               printf ("    PCIE3 connected to ULI as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie3_hose, first_free_busno);
 
                /*
                 * Activate ULI1575 legacy chip by performing a fake
@@ -178,187 +157,99 @@ pci_init_board(void)
        } else {
                printf ("    PCIE3: disabled\n");
        }
-
- }
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE3; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE3); /* disable */
 #endif
 
 #ifdef CONFIG_PCIE1
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE1 connected to Slot2 as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BUS,
-                              CONFIG_SYS_PCIE1_MEM_PHYS,
-                              CONFIG_SYS_PCIE1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_IO_BUS,
-                              CONFIG_SYS_PCIE1_IO_PHYS,
-                              CONFIG_SYS_PCIE1_IO_SIZE,
-                              PCI_REGION_IO);
-
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
 #ifdef CONFIG_SYS_PCIE1_MEM_BUS2
                /* outbound memory */
-               pci_set_region(r++,
+               pci_set_region(&pcie1_hose.regions[0],
                               CONFIG_SYS_PCIE1_MEM_BUS2,
                               CONFIG_SYS_PCIE1_MEM_PHYS2,
                               CONFIG_SYS_PCIE1_MEM_SIZE2,
                               PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
 
-               first_free_busno=hose->last_busno+1;
-               printf("    PCIE1 on bus %02x - %02x\n",
-                      hose->first_busno,hose->last_busno);
+               pcie1_hose.region_count = 1;
+#endif
+               printf ("    PCIE1 connected to Slot 2 as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
 
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
                printf ("    PCIE1: disabled\n");
        }
 
- }
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
 
 #ifdef CONFIG_PCIE2
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE2_ADDR;
-       struct pci_controller *hose = &pcie2_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
-       struct pci_region *r = hose->regions;
-
-       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE2 connected to Slot 1 as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE2_MEM_BUS,
-                              CONFIG_SYS_PCIE2_MEM_PHYS,
-                              CONFIG_SYS_PCIE2_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE2_IO_BUS,
-                              CONFIG_SYS_PCIE2_IO_PHYS,
-                              CONFIG_SYS_PCIE2_IO_SIZE,
-                              PCI_REGION_IO);
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
 
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE2)){
+               SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
 #ifdef CONFIG_SYS_PCIE2_MEM_BUS2
                /* outbound memory */
-               pci_set_region(r++,
+               pci_set_region(&pcie2_hose.regions[0],
                               CONFIG_SYS_PCIE2_MEM_BUS2,
                               CONFIG_SYS_PCIE2_MEM_PHYS2,
                               CONFIG_SYS_PCIE2_MEM_SIZE2,
                               PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("    PCIE2 on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
 
+               pcie2_hose.region_count = 1;
+#endif
+               printf ("    PCIE2 connected to Slot 1 as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie2_hose, first_free_busno);
        } else {
                printf ("    PCIE2: disabled\n");
        }
 
- }
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE2; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE2); /* disable */
 #endif
 
-
 #ifdef CONFIG_PCI1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       struct pci_region *r = hose->regions;
-
-       uint pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI, host_agent);
-       uint pci_speed = 66666000; /*get_clock_freq (); PCI PSPEED in [4:5] */
-       uint pci_32 = 1;
-       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
-       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
-
+       pci_speed = 66666000;
+       pci_32 = 1;
+       pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;
+       pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
 
        if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
-               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %x)\n",
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
+               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %lx)\n",
                        (pci_32) ? 32 : 64,
                        (pci_speed == 33333000) ? "33" :
                        (pci_speed == 66666000) ? "66" : "unknown",
                        pci_clk_sel ? "sync" : "async",
                        pci_agent ? "agent" : "host",
                        pci_arb ? "arbiter" : "external-arbiter",
-                       (uint)pci
-                       );
+                       pci_info[num].regs);
 
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_MEM_BUS,
-                              CONFIG_SYS_PCI1_MEM_PHYS,
-                              CONFIG_SYS_PCI1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_IO_BUS,
-                              CONFIG_SYS_PCI1_IO_PHYS,
-                              CONFIG_SYS_PCI1_IO_SIZE,
-                              PCI_REGION_IO);
-
-#ifdef CONFIG_SYS_PCIE3_MEM_BUS2
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE3_MEM_BUS2,
-                              CONFIG_SYS_PCIE3_MEM_PHYS2,
-                              CONFIG_SYS_PCIE3_MEM_SIZE2,
-                              PCI_REGION_MEM);
-#endif
-               hose->region_count = r - hose->regions;
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("PCI on bus %02x - %02x\n",
-                       hose->first_busno,hose->last_busno);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
        } else {
                printf ("    PCI: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */
 #endif
 }
 
index 73e7c210935c9af770fa53ca0197ae6bab25dbda..38cbc8bac1b172792dbed94a2664fcb252810a79 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004, 2007 Freescale Semiconductor.
+ * Copyright 2004, 2007, 200 Freescale Semiconductor, Inc.
  *
  * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
  *
@@ -262,62 +262,47 @@ static struct pci_controller pci2_hose;
 static struct pci_controller pcie1_hose;
 #endif /* CONFIG_PCIE1 */
 
-int first_free_busno=0;
-
-void
-pci_init_board(void)
+void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
-
-
-#ifdef CONFIG_PCI1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       struct pci_region *r = hose->regions;
+       struct fsl_pci_info pci_info[4];
+       u32 devdisr, pordevsr, io_sel;
+       u32 porpllsr, pci_agent, pci_speed, pci_32, pci_arb, pci_clk_sel;
+       int first_free_busno = 0;
+       int num = 0;
 
-       uint pci_32 = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;      /* PORDEVSR[15] */
-       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
-       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+       int pcie_ep, pcie_configured;
 
-       uint pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI_1, host_agent);
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       porpllsr = in_be32(&gur->porpllsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
 
-       uint pci_speed = get_clock_freq ();     /* PCI PSPEED in [4:5] */
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
-       if (!(gur->devdisr & MPC85xx_DEVDISR_PCI1)) {
-               printf ("    PCI: %d bit, %s MHz, %s, %s, %s\n",
+#ifdef CONFIG_PCI1
+       pci_speed = get_clock_freq ();  /* PCI PSPEED in [4:5] */
+       pci_32 = pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;        /* PORDEVSR[15] */
+       pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;
+       pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
+
+       if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
+               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %lx)\n",
                        (pci_32) ? 32 : 64,
                        (pci_speed == 33333000) ? "33" :
                        (pci_speed == 66666000) ? "66" : "unknown",
                        pci_clk_sel ? "sync" : "async",
                        pci_agent ? "agent" : "host",
-                       pci_arb ? "arbiter" : "external-arbiter"
-                       );
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_MEM_BUS,
-                              CONFIG_SYS_PCI1_MEM_PHYS,
-                              CONFIG_SYS_PCI1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCI1_IO_BUS,
-                              CONFIG_SYS_PCI1_IO_PHYS,
-                              CONFIG_SYS_PCI1_IO_SIZE,
-                              PCI_REGION_IO);
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno=hose->last_busno+1;
-               printf ("PCI on bus %02x - %02x\n",hose->first_busno,hose->last_busno);
+                       pci_arb ? "arbiter" : "external-arbiter",
+                       pci_info[num].regs);
+
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
+
 #ifdef CONFIG_PCIX_CHECK
-               if (!(gur->pordevsr & MPC85xx_PORDEVSR_PCI1)) {
+               if (!(pordevsr & MPC85xx_PORDEVSR_PCI1)) {
                        /* PCI-X init */
                        if (CONFIG_SYS_CLK_FREQ < 66000000)
                                printf("PCI-X will only work at 66 MHz\n");
@@ -330,14 +315,15 @@ pci_init_board(void)
        } else {
                printf ("    PCI: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */
 #endif
 
 #ifdef CONFIG_PCI2
 {
-       uint pci2_clk_sel = gur->porpllsr & 0x4000;     /* PORPLLSR[17] */
+       uint pci2_clk_sel = porpllsr & 0x4000;  /* PORPLLSR[17] */
        uint pci_dual = get_pci_dual ();        /* PCI DUAL in CM_PCI[3] */
        if (pci_dual) {
                printf ("    PCI2: 32 bit, 66 MHz, %s\n",
@@ -347,60 +333,29 @@ pci_init_board(void)
        }
 }
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI2; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI2); /* disable */
 #endif /* CONFIG_PCI2 */
 
 #ifdef CONFIG_PCIE1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-
-       if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE connected to slot as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_MEM_BUS,
-                              CONFIG_SYS_PCIE1_MEM_PHYS,
-                              CONFIG_SYS_PCIE1_MEM_SIZE,
-                              PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                              CONFIG_SYS_PCIE1_IO_BUS,
-                              CONFIG_SYS_PCIE1_IO_PHYS,
-                              CONFIG_SYS_PCIE1_IO_SIZE,
-                              PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               printf ("PCIE on bus %d - %d\n",hose->first_busno,hose->last_busno);
-
-               first_free_busno=hose->last_busno+1;
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+               printf ("    PCIE1 connected to Slot as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
 
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
-               printf ("    PCIE: disabled\n");
+               printf ("    PCIE1: disabled\n");
        }
- }
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
-
 }
 
 int last_stage_init(void)
index e2dc69ea933dca055d69d9c48aed0372070f9562..60e22de4b9687e344fa1b47b8381505f49771fef 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Freescale Semiconductor.
+ * Copyright 2007,2009 Freescale Semiconductor, Inc.
  *
  * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
  *
@@ -311,8 +311,6 @@ static struct pci_controller pci1_hose = {
 static struct pci_controller pcie1_hose;
 #endif  /* CONFIG_PCIE1 */
 
-int first_free_busno = 0;
-
 /*
  * pib_init() -- Initialize the PCA9555 IO expander on the PIB board
  */
@@ -356,117 +354,72 @@ pib_init(void)
 }
 
 #ifdef CONFIG_PCI
-void
-pci_init_board(void)
+void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
-
-#ifdef CONFIG_PCI1
-{
-       pib_init();
-
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       struct pci_region *r = hose->regions;
+       struct fsl_pci_info pci_info[2];
+       u32 devdisr, pordevsr, io_sel;
+       u32 porpllsr, pci_agent, pci_speed, pci_32, pci_arb, pci_clk_sel;
+       int first_free_busno = 0;
+       int num = 0;
 
-       uint pci_32 = 1;      /* PORDEVSR[15] */
-       uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;       /* PORDEVSR[14] */
-       uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;   /* PORPLLSR[16] */
+       int pcie_ep, pcie_configured;
 
-       uint pci_agent = (host_agent == 3) || (host_agent == 4 ) || (host_agent == 6);
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       porpllsr = in_be32(&gur->porpllsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
 
-       uint pci_speed = 66666000;
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
-       if (!(gur->devdisr & MPC85xx_DEVDISR_PCI1)) {
-               printf ("    PCI: %d bit, %s MHz, %s, %s, %s\n",
+#ifdef CONFIG_PCI1
+       pci_speed = 66666000;
+       pci_32 = 1;
+       pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;
+       pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
+
+       if (!(devdisr & MPC85xx_DEVDISR_PCI1)) {
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
+               printf ("\n    PCI: %d bit, %s MHz, %s, %s, %s (base address %lx)\n",
                        (pci_32) ? 32 : 64,
                        (pci_speed == 33333000) ? "33" :
                        (pci_speed == 66666000) ? "66" : "unknown",
                        pci_clk_sel ? "sync" : "async",
                        pci_agent ? "agent" : "host",
-                       pci_arb ? "arbiter" : "external-arbiter"
-                       );
-
-               /* outbound memory */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCI1_MEM_BUS,
-                               CONFIG_SYS_PCI1_MEM_PHYS,
-                               CONFIG_SYS_PCI1_MEM_SIZE,
-                               PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCI1_IO_BUS,
-                               CONFIG_SYS_PCI1_IO_PHYS,
-                               CONFIG_SYS_PCI1_IO_SIZE,
-                               PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno = first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               first_free_busno = hose->last_busno+1;
-               printf ("PCI on bus %02x - %02x\n",hose->first_busno,hose->last_busno);
+                       pci_arb ? "arbiter" : "external-arbiter",
+                       pci_info[num].regs);
+
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
        } else {
-       printf ("    PCI: disabled\n");
+               printf ("    PCI: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */
 #endif
 
 #ifdef CONFIG_PCIE1
-{
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       struct pci_region *r = hose->regions;
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-
-       if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE connected to slot as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCIE1_MEM_BUS,
-                               CONFIG_SYS_PCIE1_MEM_PHYS,
-                               CONFIG_SYS_PCIE1_MEM_SIZE,
-                               PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCIE1_IO_BUS,
-                               CONFIG_SYS_PCIE1_IO_PHYS,
-                               CONFIG_SYS_PCIE1_IO_SIZE,
-                               PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno=first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               printf ("PCIE on bus %02x - %02x\n",hose->first_busno,hose->last_busno);
-
-               first_free_busno=hose->last_busno+1;
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+               printf ("    PCIE1 connected to Slot as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
 
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
-               printf ("    PCIE: disabled\n");
+               printf ("    PCIE1: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
 }
 #endif /* CONFIG_PCI */
index cdd7813011a5b1ea2e9865f79f8c1a3d8b03df8c..56854caa8d4eaf56400d1b80e89c12adcdacc77d 100644 (file)
@@ -437,6 +437,11 @@ int board_mmc_init(bd_t *bd)
                console_assign(stdin, "eserial1");
                printf("Switched to UART1 (initial log has been printed to "
                       "UART0).\n");
+
+               clrsetbits_be32(&gur->plppar1, PLPPAR1_UART0_BIT_MASK,
+                                              PLPPAR1_ESDHC_4BITS_VAL);
+               clrsetbits_be32(&gur->plpdir1, PLPDIR1_UART0_BIT_MASK,
+                                              PLPDIR1_ESDHC_4BITS_VAL);
                bcsr6 |= BCSR6_SD_CARD_4BITS;
        } else {
                printf("should be disabled.\n");
@@ -483,6 +488,15 @@ static void fdt_board_fixup_esdhc(void *blob, bd_t *bd)
                        break;
                }
        }
+
+       if (hwconfig_subarg_cmp("esdhc", "mode", "4-bits")) {
+               off = fdt_node_offset_by_compatible(blob, -1, "fsl,esdhc");
+               if (off < 0) {
+                       printf("WARNING: could not find esdhc node\n");
+                       return;
+               }
+               fdt_delprop(blob, off, "sdhci,1-bit-only");
+       }
 }
 #else
 static inline void fdt_board_fixup_esdhc(void *blob, bd_t *bd) {}
@@ -514,77 +528,43 @@ static void fdt_board_fixup_qe_usb(void *blob, bd_t *bd)
 static struct pci_controller pcie1_hose;
 #endif  /* CONFIG_PCIE1 */
 
-int first_free_busno = 0;
-
 #ifdef CONFIG_PCI
-void
-pci_init_board(void)
-{
-       volatile ccsr_gur_t *gur;
-       uint io_sel;
-       uint host_agent;
-
-       gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
-       io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
-
-#ifdef CONFIG_PCIE1
+void pci_init_board(void)
 {
-       volatile ccsr_fsl_pci_t *pci;
-       struct pci_controller *hose;
-       int pcie_ep;
-       struct pci_region *r;
-       int pcie_configured;
-
-       pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       hose = &pcie1_hose;
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       r = hose->regions;
-       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-
-       if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){
-               printf ("\n    PCIE connected to slot as %s (base address %x)",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-
-               if (pci->pme_msg_det) {
-                       pci->pme_msg_det = 0xffffffff;
-                       debug (" with errors.  Clearing. Now 0x%08x",
-                               pci->pme_msg_det);
-               }
-               printf ("\n");
-
-               /* outbound memory */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCIE1_MEM_BUS,
-                               CONFIG_SYS_PCIE1_MEM_PHYS,
-                               CONFIG_SYS_PCIE1_MEM_SIZE,
-                               PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                               CONFIG_SYS_PCIE1_IO_BUS,
-                               CONFIG_SYS_PCIE1_IO_PHYS,
-                               CONFIG_SYS_PCIE1_IO_SIZE,
-                               PCI_REGION_IO);
+       volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+       struct fsl_pci_info pci_info[1];
+       u32 devdisr, pordevsr, io_sel;
+       int first_free_busno = 0;
+       int num = 0;
 
-               hose->region_count = r - hose->regions;
+       int pcie_ep, pcie_configured;
 
-               hose->first_busno=first_free_busno;
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
 
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-               printf ("PCIE on bus %02x - %02x\n",
-                               hose->first_busno,hose->last_busno);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
-               first_free_busno=hose->last_busno+1;
+#ifdef CONFIG_PCIE1
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
+       if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+               printf ("    PCIE1 connected to Slot as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
        } else {
-               printf ("    PCIE: disabled\n");
+               printf ("    PCIE1: disabled\n");
        }
-}
+
+       puts("\n");
 #else
-       gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */
+       setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */
 #endif
+
 }
 #endif /* CONFIG_PCI */
 
index 933dd127ec922d68b0a008cfaf3f25183a795c50..64e164b1a0d93e458f7b0bf5e96ce716c46e994f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007-2008 Freescale Semiconductor, Inc.
+ * Copyright 2007-2009 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -165,7 +165,7 @@ void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
        struct fsl_pci_info pci_info[3];
-       u32 devdisr, pordevsr, io_sel, host_agent, temp32;
+       u32 devdisr, pordevsr, io_sel, temp32;
        int first_free_busno = 0;
        int num = 0;
 
@@ -174,10 +174,8 @@ void pci_init_board(void)
        devdisr = in_be32(&gur->devdisr);
        pordevsr = in_be32(&gur->pordevsr);
        io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       host_agent = (in_be32(&gur->porbmsr) & MPC85xx_PORBMSR_HA) >> 16;
 
-       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-                       devdisr, io_sel, host_agent);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
        if (!(pordevsr & MPC85xx_PORDEVSR_SGMII1_DIS))
                printf ("    eTSEC1 is in sgmii mode.\n");
@@ -190,11 +188,11 @@ void pci_init_board(void)
 
        puts("\n");
 #ifdef CONFIG_PCIE3
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_3, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE3)){
                SET_STD_PCIE_INFO(pci_info[num], 3);
+               pcie_ep = fsl_setup_hose(&pcie3_hose, pci_info[num].regs);
                printf ("    PCIE3 connected to ULI as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -222,11 +220,11 @@ void pci_init_board(void)
 #endif
 
 #ifdef CONFIG_PCIE2
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE2)){
                SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
                printf ("    PCIE2 connected to Slot 1 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -242,11 +240,11 @@ void pci_init_board(void)
 #endif
 
 #ifdef CONFIG_PCIE1
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
                SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
                printf ("    PCIE1 connected to Slot 2 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -266,7 +264,7 @@ void pci_init_board(void)
 int board_early_init_r(void)
 {
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
-       const u8 flash_esel = 2;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
 
        /*
         * Remap Boot flash + PROMJET region to caching-inhibited
index d832f89742fe8cafec4234055e46e8e512ee3c91..6a2a0b57f530f179bdedc005cd9e13cf21444e59 100644 (file)
@@ -44,7 +44,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
        /* TLB 1 */
        /* *I*** - Covers boot page */
        SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
-                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                      0, 0, BOOKE_PAGESZ_4K, 1),
 
        /* *I*G* - CCSRBAR */
index f42c3167224d5f843476b81b00554fc42760538b..2d4b9addb67bbda0581d6ccec96d945455d232ad 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Freescale Semiconductor, Inc.
+ * Copyright 2007,2009 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -224,158 +224,83 @@ static struct pci_controller pcie1_hose;
 static struct pci_controller pcie2_hose;
 #endif
 
-int first_free_busno = 0;
-
 void pci_init_board(void)
 {
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_CCSRBAR;
        volatile ccsr_gur_t *gur = &immap->im_gur;
-       uint devdisr = gur->devdisr;
-       uint io_sel = (gur->pordevsr & MPC8610_PORDEVSR_IO_SEL)
-               >> MPC8610_PORDEVSR_IO_SEL_SHIFT;
-       uint host_agent = (gur->porbmsr & MPC8610_PORBMSR_HA)
-               >> MPC8610_PORBMSR_HA_SHIFT;
+       struct fsl_pci_info pci_info[3];
+       u32 devdisr, pordevsr, io_sel;
+       int first_free_busno = 0;
+       int num = 0;
+
+       int pci_agent, pcie_ep, pcie_configured;
+
+       devdisr = in_be32(&gur->devdisr);
+       pordevsr = in_be32(&gur->pordevsr);
+       io_sel = (pordevsr & MPC8610_PORDEVSR_IO_SEL)
+                       >> MPC8610_PORDEVSR_IO_SEL_SHIFT;
 
-       printf( " pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-               devdisr, io_sel, host_agent);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
 #ifdef CONFIG_PCIE1
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR;
-       struct pci_controller *hose = &pcie1_hose;
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
-       struct pci_region *r = hose->regions;
-
-       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE1)) {
-               printf(" PCIe 1 connected to Uli as %s (base address %x)\n",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det)
-                       pci->pme_msg_det = 0xffffffff;
-
-               /* outbound memory */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCIE1_MEM_BUS,
-                        CONFIG_SYS_PCIE1_MEM_PHYS,
-                        CONFIG_SYS_PCIE1_MEM_SIZE,
-                        PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCIE1_IO_BUS,
-                        CONFIG_SYS_PCIE1_IO_PHYS,
-                        CONFIG_SYS_PCIE1_IO_SIZE,
-                        PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno = first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno = hose->last_busno + 1;
-               printf(" PCI-Express 1 on bus %02x - %02x\n",
-                       hose->first_busno, hose->last_busno);
-
-       } else
-               puts(" PCI-Express 1: Disabled\n");
- }
-#else
-       puts("PCI-Express 1: Disabled\n");
-#endif /* CONFIG_PCIE1 */
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
+
+       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE1)){
+               SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
+               printf ("    PCIE1 connected to ULI as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
+
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie1_hose, first_free_busno);
+       } else {
+               printf ("    PCIE1: disabled\n");
+       }
 
+       puts("\n");
+#else
+       setbits_be32(&gur->devdisr, MPC86xx_DEVDISR_PCIE1); /* disable */
+#endif
 
 #ifdef CONFIG_PCIE2
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE2_ADDR;
-       struct pci_controller *hose = &pcie2_hose;
-       struct pci_region *r = hose->regions;
-
-       int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
-
-       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE2)) {
-               printf(" PCI-Express 2 connected to slot as %s" \
-                       " (base address %x)\n",
-                       pcie_ep ? "End Point" : "Root Complex",
-                       (uint)pci);
-               if (pci->pme_msg_det)
-                       pci->pme_msg_det = 0xffffffff;
-
-               /* outbound memory */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCIE2_MEM_BUS,
-                        CONFIG_SYS_PCIE2_MEM_PHYS,
-                        CONFIG_SYS_PCIE2_MEM_SIZE,
-                        PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCIE2_IO_BUS,
-                        CONFIG_SYS_PCIE2_IO_PHYS,
-                        CONFIG_SYS_PCIE2_IO_SIZE,
-                        PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno = first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno = hose->last_busno + 1;
-               printf(" PCI-Express 2 on bus %02x - %02x\n",
-                       hose->first_busno, hose->last_busno);
-       } else
-               puts(" PCI-Express 2: Disabled\n");
- }
-#else
-       puts("PCI-Express 2: Disabled\n");
-#endif /* CONFIG_PCIE2 */
+       pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
+
+       if (pcie_configured && !(devdisr & MPC86xx_DEVDISR_PCIE2)){
+               SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
+               printf ("    PCIE2 connected to Slot as %s (base addr %lx)\n",
+                               pcie_ep ? "End Point" : "Root Complex",
+                               pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pcie2_hose, first_free_busno);
+       } else {
+               printf ("    PCIE2: disabled\n");
+       }
 
+       puts("\n");
+#else
+       setbits_be32(&gur->devdisr, MPC86xx_DEVDISR_PCIE2); /* disable */
+#endif
 
 #ifdef CONFIG_PCI1
- {
-       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR;
-       struct pci_controller *hose = &pci1_hose;
-       int pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI_1, host_agent);
-       struct pci_region *r = hose->regions;
-
-       if ( !(devdisr & MPC86xx_DEVDISR_PCI1)) {
+       if (!(devdisr & MPC86xx_DEVDISR_PCI1)) {
+               SET_STD_PCI_INFO(pci_info[num], 1);
+               pci_agent = fsl_setup_hose(&pci1_hose, pci_info[num].regs);
                printf(" PCI connected to PCI slots as %s" \
-                       " (base address %x)\n",
+                       " (base address %lx)\n",
                        pci_agent ? "Agent" : "Host",
-                       (uint)pci);
-
-               /* outbound memory */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCI1_MEM_BUS,
-                        CONFIG_SYS_PCI1_MEM_PHYS,
-                        CONFIG_SYS_PCI1_MEM_SIZE,
-                        PCI_REGION_MEM);
-
-               /* outbound io */
-               pci_set_region(r++,
-                        CONFIG_SYS_PCI1_IO_BUS,
-                        CONFIG_SYS_PCI1_IO_PHYS,
-                        CONFIG_SYS_PCI1_IO_SIZE,
-                        PCI_REGION_IO);
-
-               hose->region_count = r - hose->regions;
-
-               hose->first_busno = first_free_busno;
-
-               fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
-
-               first_free_busno = hose->last_busno + 1;
-               printf(" PCI on bus %02x - %02x\n",
-                       hose->first_busno, hose->last_busno);
-
+                       pci_info[num].regs);
+               first_free_busno = fsl_pci_init_port(&pci_info[num++],
+                                       &pci1_hose, first_free_busno);
+       } else {
+               printf ("    PCI: disabled\n");
+       }
 
-       } else
-               puts(" PCI: Disabled\n");
- }
-#endif /* CONFIG_PCI1 */
+       puts("\n");
+#else
+       setbits_be32(&gur->devdisr, MPC86xx_DEVDISR_PCI1); /* disable */
+#endif
 }
 
 #if defined(CONFIG_OF_BOARD_SETUP)
index 4c03468a2453533f96c10662f9fb67231dff1798..3af660e775306710682a233e20512160f858368a 100644 (file)
@@ -131,7 +131,7 @@ int checkboard (void)
 int board_early_init_r(void)
 {
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
-       const u8 flash_esel = 2;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
 
        /*
         * Remap Boot flash region to caching-inhibited
index 4c08f9efa0beab77236cd1bacb87142928e35158..6fd6963f0cfd05d9598da84ad1955331321c6a73 100644 (file)
@@ -43,7 +43,7 @@ void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
        struct fsl_pci_info pci_info[2];
-       u32 devdisr, pordevsr, io_sel, host_agent;
+       u32 devdisr, pordevsr, io_sel;
        int first_free_busno = 0;
        int num = 0;
 
@@ -52,21 +52,19 @@ void pci_init_board(void)
        devdisr = in_be32(&gur->devdisr);
        pordevsr = in_be32(&gur->pordevsr);
        io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       host_agent = (in_be32(&gur->porbmsr) & MPC85xx_PORBMSR_HA) >> 16;
 
-       debug ("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-                       devdisr, io_sel, host_agent);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
        if (!(pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
                printf ("    eTSEC2 is in sgmii mode.\n");
 
        puts("\n");
 #ifdef CONFIG_PCIE2
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
                SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
                printf("    PCIE2 connected to Slot 1 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -81,11 +79,11 @@ void pci_init_board(void)
 #endif
 
 #ifdef CONFIG_PCIE1
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){
                SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
                printf("    PCIE1 connected to Slot 2 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
index 0009913eaa8be77e385d2260fe227ce823bd7d01..93d0bf7bc7e2b97fa67da7dc47eccc1e6e06cfa7 100644 (file)
@@ -44,7 +44,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
        /* TLB 1 */
        /* *I*** - Covers boot page */
        SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
-                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                        0, 0, BOOKE_PAGESZ_4K, 1),
 
        /* *I*G* - CCSRBAR */
index e38c0145edc6a3be6116248d5e01fb18f4c3bc8f..599caa235d182e03348c0b4abe957b995eadce06 100644 (file)
@@ -197,7 +197,7 @@ void pci_init_board(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
        struct fsl_pci_info pci_info[3];
-       u32 devdisr, pordevsr, io_sel, host_agent;
+       u32 devdisr, pordevsr, io_sel;
        int first_free_busno = 0;
        int num = 0;
 
@@ -206,10 +206,8 @@ void pci_init_board(void)
        devdisr = in_be32(&gur->devdisr);
        pordevsr = in_be32(&gur->pordevsr);
        io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       host_agent = (in_be32(&gur->porbmsr) & MPC85xx_PORBMSR_HA) >> 16;
 
-       debug("   pci_init_board: devdisr=%x, io_sel=%x, host_agent=%x\n",
-                       devdisr, io_sel, host_agent);
+       debug ("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel);
 
        if (!(pordevsr & MPC85xx_PORDEVSR_SGMII2_DIS))
                printf("    eTSEC2 is in sgmii mode.\n");
@@ -218,11 +216,11 @@ void pci_init_board(void)
 
        puts("\n");
 #ifdef CONFIG_PCIE2
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_2, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_2, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE2)) {
                SET_STD_PCIE_INFO(pci_info[num], 2);
+               pcie_ep = fsl_setup_hose(&pcie2_hose, pci_info[num].regs);
                printf("    PCIE2 connected to ULI as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -258,11 +256,11 @@ void pci_init_board(void)
 #endif
 
 #ifdef CONFIG_PCIE3
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_3, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_3, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE3)) {
                SET_STD_PCIE_INFO(pci_info[num], 3);
+               pcie_ep = fsl_setup_hose(&pcie3_hose, pci_info[num].regs);
                printf("    PCIE3 connected to Slot 1 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -277,11 +275,11 @@ void pci_init_board(void)
 #endif
 
 #ifdef CONFIG_PCIE1
-       pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
        pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
        if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)) {
                SET_STD_PCIE_INFO(pci_info[num], 1);
+               pcie_ep = fsl_setup_hose(&pcie1_hose, pci_info[num].regs);
                printf("    PCIE1 connected to Slot 2 as %s (base addr %lx)\n",
                                pcie_ep ? "End Point" : "Root Complex",
                                pci_info[num].regs);
@@ -300,7 +298,7 @@ void pci_init_board(void)
 int board_early_init_r(void)
 {
        const unsigned int flashbase = CONFIG_SYS_FLASH_BASE;
-       const u8 flash_esel = 2;
+       const u8 flash_esel = find_tlb_idx((void *)flashbase, 1);
 
        /*
         * Remap Boot flash + PROMJET region to caching-inhibited
index b2e562aeb10f2aa97e751be7dc5563a05e523b4c..36ad086d0893a7de1df4ff2af1622e537e671a67 100644 (file)
@@ -47,7 +47,7 @@ struct fsl_e_tlb_entry tlb_table[] = {
        /* TLB 1 */
        /* *I*** - Covers boot page */
        SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
-                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
                      0, 0, BOOKE_PAGESZ_4K, 1),
 
        /* *I*G* - CCSRBAR */
index 3931ec5036f93fbd49843f25c2924f5ab41a15d4..aa7827e1ec6febc121ff9f285e9e2b2a82a71692 100644 (file)
@@ -549,7 +549,6 @@ static inline void init_pci1(void)
 {
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 #ifdef CONFIG_PCI1
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
        volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *)CONFIG_SYS_PCI1_ADDR;
        struct pci_controller *hose = &pci1_hose;
        struct pci_region *r = hose->regions;
@@ -561,7 +560,7 @@ static inline void init_pci1(void)
        /* PORPLLSR[16] */
        uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;
 
-       uint pci_agent = is_fsl_pci_agent(LAW_TRGT_IF_PCI_1, host_agent);
+       int pci_agent = fsl_setup_hose(hose, CONFIG_SYS_PCI1_ADDR);
 
        uint pci_speed = CONFIG_SYS_CLK_FREQ;   /* PCI PSPEED in [4:5] */
 
@@ -626,14 +625,15 @@ static inline void init_pcie1(void)
        volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 #ifdef CONFIG_PCIE1
        uint io_sel = (gur->pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19;
-       uint host_agent = (gur->porbmsr & MPC85xx_PORBMSR_HA) >> 16;
        volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *)CONFIG_SYS_PCIE1_ADDR;
        struct pci_controller *hose = &pcie1_hose;
-       int pcie_ep = is_fsl_pci_agent(LAW_TRGT_IF_PCIE_1, host_agent);
+       int pcie_ep;
        struct pci_region *r = hose->regions;
 
        int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel);
 
+       pcie_ep = fsl_setup_hose(hose, CONFIG_SYS_PCIE1_ADDR);
+
        if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){
                printf ("PCIe:  %s, base address %x",
                        pcie_ep ? "End point" : "Root complex", (uint)pci);
index 0d6a5fec97bdc72a8f35e96f19e95db5c2ac6f58..75b45222bdabab92064c81345c1373d4ffba6c44 100644 (file)
@@ -69,6 +69,12 @@ void cpu_init_f (volatile immap_t * im)
 #endif
 #ifdef CONFIG_SYS_ACR_RPTCNT /* Arbiter repeat count */
                (ACR_RPTCNT << ACR_RPTCNT_SHIFT) |
+#endif
+#ifdef CONFIG_SYS_ACR_APARK    /* Arbiter address parking mode */
+               (ACR_APARK << ACR_APARK_SHIFT) |
+#endif
+#ifdef CONFIG_SYS_ACR_PARKM    /* Arbiter parking master */
+               (ACR_PARKM << ACR_PARKM_SHIFT) |
 #endif
                0;
        __be32 acr_val =
@@ -77,6 +83,12 @@ void cpu_init_f (volatile immap_t * im)
 #endif
 #ifdef CONFIG_SYS_ACR_RPTCNT /* Arbiter repeat count */
                (CONFIG_SYS_ACR_RPTCNT << ACR_RPTCNT_SHIFT) |
+#endif
+#ifdef CONFIG_SYS_ACR_APARK    /* Arbiter address parking mode */
+               (CONFIG_SYS_ACR_APARK << ACR_APARK_SHIFT) |
+#endif
+#ifdef CONFIG_SYS_ACR_PARKM    /* Arbiter parking master */
+               (CONFIG_SYS_ACR_PARKM << ACR_PARKM_SHIFT) |
 #endif
                0;
        __be32 spcr_mask =
index 0f611804a0712e1b41db6e2b5da35b3d3d0293ee..44aaa9abc2130b9b046f06698e93493f6e4fb9bd 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <common.h>
 #include <asm/processor.h>
+#include <asm/io.h>
 #include <i2c.h>
 #include <spd.h>
 #include <asm/mmu.h>
@@ -150,6 +151,14 @@ long int spd_sdram()
        unsigned int ddrc_ecc_enable;
        unsigned int pvr = get_pvr();
 
+       /*
+        * First disable the memory controller (could be enabled
+        * by the debugger)
+        */
+       clrsetbits_be32(&ddr->sdram_cfg, SDRAM_CFG_MEM_EN, 0);
+       sync();
+       isync();
+
        /* Read SPD parameters with I2C */
        CONFIG_SYS_READ_SPD(SPD_EEPROM_ADDRESS, 0, 1, (uchar *) & spd, sizeof (spd));
 #ifdef SPD_DEBUG
index 0041a60df967c0c51ee97c004a038a50e6ad9238..e0126d331af8f93ba1801401728a72fa7bcd2e87 100644 (file)
@@ -246,6 +246,7 @@ void cpu_init_f (void)
 #ifdef CONFIG_FSL_CORENET
        corenet_tb_init();
 #endif
+       init_used_tlb_cams();
 }
 
 
@@ -357,6 +358,11 @@ int cpu_init_r(void)
        while (mfspr(SPRN_L2CSR0) & (L2CSR0_L2FI|L2CSR0_L2LFC))
                ;
 
+#ifdef CONFIG_SYS_CACHE_STASHING
+       /* set stash id to (coreID) * 2 + 32 + L2 (1) */
+       mtspr(SPRN_L2CSR1, (32 + 1));
+#endif
+
        /* enable the cache */
        mtspr(SPRN_L2CSR0, CONFIG_SYS_INIT_L2CSR0);
 
index de2dcac816c145b767595c762ad8a42a54ed1edc..af0e78e07f7e53af304ec36274721089cced2ac9 100644 (file)
@@ -197,6 +197,15 @@ static inline void ft_fixup_l2cache(void *blob)
                        goto next;
                }
 
+#ifdef CONFIG_SYS_CACHE_STASHING
+               {
+                       u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0);
+                       if (reg)
+                               fdt_setprop_cell(blob, l2_off, "cache-stash-id",
+                                        (*reg * 2) + 32 + 1);
+               }
+#endif
+
                fdt_setprop(blob, l2_off, "cache-unified", NULL, 0);
                fdt_setprop_cell(blob, l2_off, "cache-block-size", line_size);
                fdt_setprop_cell(blob, l2_off, "cache-size", size);
@@ -252,6 +261,15 @@ static inline void ft_fixup_cache(void *blob)
                fdt_setprop_cell(blob, off, "d-cache-size", dsize);
                fdt_setprop_cell(blob, off, "d-cache-sets", dnum_sets);
 
+#ifdef CONFIG_SYS_CACHE_STASHING
+               {
+                       u32 *reg = (u32 *)fdt_getprop(blob, off, "reg", 0);
+                       if (reg)
+                               fdt_setprop_cell(blob, off, "cache-stash-id",
+                                        (*reg * 2) + 32 + 0);
+               }
+#endif
+
                /* i-side config */
                isize = (l1cfg1 & 0x7ff) * 1024;
                inum_ways = ((l1cfg1 >> 11) & 0xff) + 1;
@@ -279,6 +297,40 @@ void fdt_add_enet_stashing(void *fdt)
        do_fixup_by_compat_u32(fdt, "gianfar", "rx-stash-idx", 0, 1);
 }
 
+#if defined(CONFIG_SYS_DPAA_FMAN) || defined(CONFIG_SYS_DPAA_PME)
+static void ft_fixup_clks(void *blob, const char *alias, unsigned long freq)
+{
+       const char *path = fdt_get_alias(blob, alias);
+
+       int off = fdt_path_offset(blob, path);
+
+       if (off >= 0) {
+               off = fdt_setprop_cell(blob, off, "clock-frequency", freq);
+               if (off > 0)
+                       printf("WARNING enable to set clock-frequency "
+                               "for %s: %s\n", alias, fdt_strerror(off));
+       }
+}
+
+static void ft_fixup_dpaa_clks(void *blob)
+{
+       sys_info_t sysinfo;
+
+       get_sys_info(&sysinfo);
+       ft_fixup_clks(blob, "fman0", sysinfo.freqFMan[0]);
+
+#if (CONFIG_SYS_NUM_FMAN == 2)
+       ft_fixup_clks(blob, "fman1", sysinfo.freqFMan[1]);
+#endif
+
+#ifdef CONFIG_SYS_DPAA_PME
+       ft_fixup_clks(blob, "pme", sysinfo.freqPME);
+#endif
+}
+#else
+#define ft_fixup_dpaa_clks(x)
+#endif
+
 void ft_cpu_setup(void *blob, bd_t *bd)
 {
        int off;
@@ -342,4 +394,6 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 #if defined(CONFIG_FSL_ESDHC)
        fdt_fixup_esdhc(blob, bd);
 #endif
+
+       ft_fixup_dpaa_clks(blob);
 }
index 7626eb8e728459d14a19f02415303455be08aa75..6530cb176b4564858ee83823ddc6812a8aaaf821 100644 (file)
@@ -165,6 +165,9 @@ static void plat_mp_up(unsigned long bootpg)
        e = find_law(bootpg);
        out_be32(&ccm->bstrar, LAW_EN | e.trgt_id << 20 | LAW_SIZE_4K);
 
+       /* readback to sync write */
+       in_be32(&ccm->bstrar);
+
        /* disable time base at the platform */
        out_be32(&rcpm->ctbenrl, cpu_up_mask);
 
@@ -309,7 +312,7 @@ void setup_mp(void)
                disable_tlb(i);
 
                set_tlb(1, CONFIG_BPTR_VIRT_ADDR, bootpg, /* tlb, epn, rpn */
-                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I, /* perms, wimge */
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, /* perms, wimge */
                        0, i, BOOKE_PAGESZ_4K, 1); /* ts, esel, tsize, iprot */
 
                memcpy((void *)CONFIG_BPTR_VIRT_ADDR, (void *)fixup, 4096);
index 433ff0254487fd4bdede65a08cd8d88ed89f5790..00c4c547fd91e45cc6e0f036f8421687aa2557ad 100644 (file)
@@ -99,6 +99,13 @@ __secondary_start_page:
        slwi    r8,r4,5
        add     r10,r3,r8
 
+#if defined(CONFIG_E500MC) && defined(CONFIG_SYS_CACHE_STASHING)
+       /* set stash id to (coreID) * 2 + 32 + L1 CT (0) */
+       slwi    r8,r4,1
+       addi    r8,r8,32
+       mtspr   L1CSR2,r8
+#endif
+
 #ifdef CONFIG_BACKSIDE_L2_CACHE
        /* Enable/invalidate the L2 cache */
        msync
@@ -110,6 +117,12 @@ __secondary_start_page:
        and.    r1,r3,r2
        bne     1b
 
+#ifdef CONFIG_SYS_CACHE_STASHING
+       /* set stash id to (coreID) * 2 + 32 + L2 (1) */
+       addi    r3,r8,1
+       mtspr   SPRN_L2CSR1,r3
+#endif
+
        lis     r3,CONFIG_SYS_INIT_L2CSR0@h
        ori     r3,r3,CONFIG_SYS_INIT_L2CSR0@l
        mtspr   SPRN_L2CSR0,r3
@@ -153,8 +166,8 @@ __secondary_start_page:
        lis     r11,(MAS1_VALID|MAS1_IPROT)@h
        ori     r11,r11,(MAS1_TS|MAS1_TSIZE(BOOKE_PAGESZ_4K))@l
        mtspr   SPRN_MAS1,r11
-       oris    r11,r13,(MAS2_I)@h
-       ori     r11,r13,(MAS2_I)@l
+       oris    r11,r13,(MAS2_I|MAS2_G)@h
+       ori     r11,r13,(MAS2_I|MAS2_G)@l
        mtspr   SPRN_MAS2,r11
        oris    r11,r13,(MAS3_SX|MAS3_SW|MAS3_SR)@h
        ori     r11,r13,(MAS3_SX|MAS3_SW|MAS3_SR)@l
index 7959082404ba9470cd355642d4676c00f75cabaf..2103e2edf1192fcaddfadaa0b3dc786a8956c3e0 100644 (file)
@@ -103,21 +103,21 @@ void get_sys_info (sys_info_t * sysInfo)
 
 #ifdef CONFIG_SYS_DPAA_PME
        if (rcw_tmp & PME_CLK_SEL)
-               sysInfo->freqPME = freqCC_PLL[2] / 2;
-       else
                sysInfo->freqPME = sysInfo->freqSystemBus / 2;
+       else
+               sysInfo->freqPME = freqCC_PLL[2] / 2;
 #endif
 
 #ifdef CONFIG_SYS_DPAA_FMAN
        if (rcw_tmp & FM1_CLK_SEL)
-               sysInfo->freqFMan[0] = freqCC_PLL[2] / 2;
-       else
                sysInfo->freqFMan[0] = sysInfo->freqSystemBus / 2;
+       else
+               sysInfo->freqFMan[0] = freqCC_PLL[2] / 2;
 #if (CONFIG_SYS_NUM_FMAN) == 2
        if (rcw_tmp & FM2_CLK_SEL)
-               sysInfo->freqFMan[1] = freqCC_PLL[2] / 2;
-       else
                sysInfo->freqFMan[1] = sysInfo->freqSystemBus / 2;
+       else
+               sysInfo->freqFMan[1] = freqCC_PLL[2] / 2;
 #endif
 #endif
 
index 6a865283d484a5a00fddb6b69aa9d8c30320d9ca..7e60e67c3a434341f9dc753664f35c3f751f2636 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004, 2007-2009 Freescale Semiconductor.
+ * Copyright 2004, 2007-2009 Freescale Semiconductor, Inc.
  * Copyright (C) 2003  Motorola,Inc.
  *
  * See file CREDITS for list of people who contributed to this
@@ -102,6 +102,12 @@ _start_e500:
         *
         */
 
+#if defined(CONFIG_E500MC) && defined(CONFIG_SYS_CACHE_STASHING)
+       /* set stash id to (coreID) * 2 + 32 + L1 CT (0) */
+       li      r2,(32 + 0)
+       mtspr   L1CSR2,r2
+#endif
+
        lis     r2,L1CSR0_CPE@H /* enable parity */
        ori     r2,r2,L1CSR0_DCE
        mtspr   L1CSR0,r2       /* enable L1 Dcache */
index ea5deb2971fcdf158e9bab50d976184d0f10d5ec..b3037aceaf0616f1bdfca2ac394a30e8d825c26f 100644 (file)
@@ -56,12 +56,74 @@ void init_tlbs(void)
 }
 
 #ifndef CONFIG_NAND_SPL
+static inline void use_tlb_cam(u8 idx)
+{
+       int i = idx / 32;
+       int bit = idx % 32;
+
+       gd->used_tlb_cams[i] |= (1 << bit);
+}
+
+static inline void free_tlb_cam(u8 idx)
+{
+       int i = idx / 32;
+       int bit = idx % 32;
+
+       gd->used_tlb_cams[i] &= ~(1 << bit);
+}
+
+void init_used_tlb_cams(void)
+{
+       int i;
+       unsigned int num_cam = mfspr(SPRN_TLB1CFG) & 0xfff;
+
+       for (i = 0; i < ((CONFIG_SYS_NUM_TLBCAMS+31)/32); i++)
+               gd->used_tlb_cams[i] = 0;
+
+       /* walk all the entries */
+       for (i = 0; i < num_cam; i++) {
+               u32 _mas1;
+
+               mtspr(MAS0, FSL_BOOKE_MAS0(1, i, 0));
+
+               asm volatile("tlbre;isync");
+               _mas1 = mfspr(MAS1);
+
+               /* if the entry isn't valid skip it */
+               if ((_mas1 & MAS1_VALID))
+                       use_tlb_cam(i);
+       }
+}
+
+int find_free_tlbcam(void)
+{
+       int i;
+       u32 idx;
+
+       for (i = 0; i < ((CONFIG_SYS_NUM_TLBCAMS+31)/32); i++) {
+               idx = ffz(gd->used_tlb_cams[i]);
+
+               if (idx != 32)
+                       break;
+       }
+
+       idx += i * 32;
+
+       if (idx >= CONFIG_SYS_NUM_TLBCAMS)
+               return -1;
+
+       return idx;
+}
+
 void set_tlb(u8 tlb, u32 epn, u64 rpn,
             u8 perms, u8 wimge,
             u8 ts, u8 esel, u8 tsize, u8 iprot)
 {
        u32 _mas0, _mas1, _mas2, _mas3, _mas7;
 
+       if (tlb == 1)
+               use_tlb_cam(esel);
+
        _mas0 = FSL_BOOKE_MAS0(tlb, esel, 0);
        _mas1 = FSL_BOOKE_MAS1(1, iprot, 0, ts, tsize);
        _mas2 = FSL_BOOKE_MAS2(epn, wimge);
@@ -80,6 +142,8 @@ void disable_tlb(u8 esel)
 {
        u32 _mas0, _mas1, _mas2, _mas3, _mas7;
 
+       free_tlb_cam(esel);
+
        _mas0 = FSL_BOOKE_MAS0(1, esel, 0);
        _mas1 = 0;
        _mas2 = 0;
@@ -163,14 +227,10 @@ void init_addr_map(void)
 }
 #endif
 
-#ifndef CONFIG_SYS_DDR_TLB_START
-#define CONFIG_SYS_DDR_TLB_START 8
-#endif
-
 unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg)
 {
+       int i;
        unsigned int tlb_size;
-       unsigned int ram_tlb_index = CONFIG_SYS_DDR_TLB_START;
        unsigned int ram_tlb_address = (unsigned int)CONFIG_SYS_DDR_SDRAM_BASE;
        unsigned int max_cam = (mfspr(SPRN_TLB1CFG) >> 16) & 0xf;
        u64 size, memsize = (u64)memsize_in_meg << 20;
@@ -180,10 +240,14 @@ unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg)
        /* Convert (4^max) kB to (2^max) bytes */
        max_cam = max_cam * 2 + 10;
 
-       for (; size && ram_tlb_index < 16; ram_tlb_index++) {
+       for (i = 0; size && i < 8; i++) {
+               int ram_tlb_index = find_free_tlbcam();
                u32 camsize = __ilog2_u64(size) & ~1U;
                u32 align = __ilog2(ram_tlb_address) & ~1U;
 
+               if (ram_tlb_index == -1)
+                       break;
+
                if (align == -2) align = max_cam;
                if (camsize > align)
                        camsize = align;
index 250504145045b0bb8c55daba0add464eb91cacd9..adc4f6ee37ada73ed46d87ee33e085358b372e60 100644 (file)
@@ -188,12 +188,13 @@ static void set_timing_cfg_0(fsl_ddr_cfg_regs_t *ddr)
         * The DDR3 spec has not tXARD,
         * we use the tXP instead of it.
         * tXP=max(3nCK, 7.5ns) for DDR3.
-        * we use the tXP=6
         * spec has not the tAXPD, we use
         * tAXPD=8, need design to confirm.
         */
-       act_pd_exit_mclk = 6;
-       pre_pd_exit_mclk = 6;
+       int tXP = max((get_memory_clk_period_ps() * 3), 7500); /* unit=ps */
+       act_pd_exit_mclk = picos_to_mclk(tXP);
+       /* Mode register MR0[A12] is '1' - fast exit */
+       pre_pd_exit_mclk = act_pd_exit_mclk;
        taxpd_mclk = 8;
        tmrd_mclk = 4;
 #else /* CONFIG_FSL_DDR2 */
@@ -575,18 +576,22 @@ static void set_ddr_sdram_cfg_2(fsl_ddr_cfg_regs_t *ddr,
 }
 
 /* DDR SDRAM Mode configuration 2 (DDR_SDRAM_MODE_2) */
-static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr)
+static void set_ddr_sdram_mode_2(fsl_ddr_cfg_regs_t *ddr,
+                               const memctl_options_t *popts)
 {
        unsigned short esdmode2 = 0;    /* Extended SDRAM mode 2 */
        unsigned short esdmode3 = 0;    /* Extended SDRAM mode 3 */
 
 #if defined(CONFIG_FSL_DDR3)
-       unsigned int rtt_wr = 2;        /* 120 ohm Rtt_WR */
+       unsigned int rtt_wr = 0;        /* Rtt_WR - dynamic ODT off */
        unsigned int srt = 0;   /* self-refresh temerature, normal range */
        unsigned int asr = 0;   /* auto self-refresh disable */
        unsigned int cwl = compute_cas_write_latency() - 5;
        unsigned int pasr = 0;  /* partial array self refresh disable */
 
+       if (popts->rtt_override)
+               rtt_wr = popts->rtt_wr_override_value;
+
        esdmode2 = (0
                | ((rtt_wr & 0x3) << 9)
                | ((srt & 0x1) << 7)
@@ -1001,8 +1006,8 @@ static void set_ddr_zq_cntl(fsl_ddr_cfg_regs_t *ddr, unsigned int zq_en)
 }
 
 /* DDR Write Leveling Control (DDR_WRLVL_CNTL) */
-static void set_ddr_wrlvl_cntl(fsl_ddr_cfg_regs_t *ddr,
-                              unsigned int wrlvl_en)
+static void set_ddr_wrlvl_cntl(fsl_ddr_cfg_regs_t *ddr, unsigned int wrlvl_en,
+                               const memctl_options_t *popts)
 {
        /*
         * First DQS pulse rising edge after margining mode
@@ -1029,8 +1034,9 @@ static void set_ddr_wrlvl_cntl(fsl_ddr_cfg_regs_t *ddr,
                /* tWL_DQSEN min = 25 nCK, we set it 32 */
                wrlvl_dqsen = 0x5;
                /*
-                * Write leveling sample time at least need 14 clocks
-                * due to tWLO = 9, we set it 15 clocks
+                * Write leveling sample time at least need 6 clocks
+                * higher than tWLO to allow enough time for progagation
+                * delay and sampling the prime data bits.
                 */
                wrlvl_smpl = 0xf;
                /*
@@ -1043,9 +1049,16 @@ static void set_ddr_wrlvl_cntl(fsl_ddr_cfg_regs_t *ddr,
                 * Write leveling start time
                 * The value use for the DQS_ADJUST for the first sample
                 * when write leveling is enabled.
-                * we set it 1 clock delay
                 */
                wrlvl_start = 0x8;
+               /*
+                * Override the write leveling sample and start time
+                * according to specific board
+                */
+               if (popts->wrlvl_override) {
+                       wrlvl_smpl = popts->wrlvl_sample;
+                       wrlvl_start = popts->wrlvl_start;
+               }
        }
 
        ddr->ddr_wrlvl_cntl = (0
@@ -1184,7 +1197,10 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,
                        /* Don't set up boundaries for other CS
                         * other than CS0, if bank interleaving
                         * is enabled and not CS2+CS3 interleaved.
+                        * But we need to set the ODT_RD_CFG and
+                        * ODT_WR_CFG for CS1_CONFIG here.
                         */
+                       set_csn_config(i, ddr, popts, dimm_params);
                        break;
                }
 
@@ -1321,7 +1337,7 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,
        set_ddr_sdram_cfg_2(ddr, popts);
        set_ddr_sdram_mode(ddr, popts, common_dimm,
                                cas_latency, additive_latency);
-       set_ddr_sdram_mode_2(ddr);
+       set_ddr_sdram_mode_2(ddr, popts);
        set_ddr_sdram_interval(ddr, popts, common_dimm);
        set_ddr_data_init(ddr);
        set_ddr_sdram_clk_cntl(ddr, popts);
@@ -1331,7 +1347,7 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,
        set_timing_cfg_5(ddr);
 
        set_ddr_zq_cntl(ddr, zq_en);
-       set_ddr_wrlvl_cntl(ddr, wrlvl_en);
+       set_ddr_wrlvl_cntl(ddr, wrlvl_en, popts);
 
        set_ddr_sr_cntr(ddr, sr_it);
 
index 2e030c11a3b8e18ce277ee723a3225df28349598..3dcd33ddf20d80b12d1abad1b4847f4f4841155a 100644 (file)
@@ -198,6 +198,7 @@ unsigned int populate_memctl_options(int all_DIMMs_registered,
         * meet the tQDSS under different loading.
         */
        popts->wrlvl_en = 1;
+       popts->wrlvl_override = 0;
 #endif
 
        /*
index 9c7d92c4d9390b258ac35a02b78d6629ddf27100..d53781b62b30eb37d9158f5dcda4efed6b093eda 100644 (file)
 #include <pci.h>
 
 struct pci_info {
-       u16     agent;
        u16     cfg;
 };
 
-/* The agent field is a bit mask in which each bit represents the value of
- * cfg_host_agt[] signal and the bit is set of the given interface would be
- * in agent/end-point mode for the given interface.
- *
- * The same idea is true of the cfg field.  The bit will be set if the
- * interface would be enabled based on the value of cfg_IO_ports[] signal
+/* The cfg field is a bit mask in which each bit represents the value of
+ * cfg_IO_ports[] signal and the bit is set if the interface would be
+ * enabled based on the value of cfg_IO_ports[] signal
  *
  * On MPC86xx/PQ3 based systems:
- *   we extract cfg_host_agt from GUTS register PORBMSR
  *   we extract cfg_IO_ports from GUTS register PORDEVSR
  *
  * cfg_IO_ports only exist on systems w/PCIe (we set cfg 0 for systems
@@ -48,7 +43,6 @@ struct pci_info {
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI] = {
-               .agent = (1 << 0) | (1 << 2),
                .cfg =   0,
        },
 };
@@ -56,7 +50,6 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI] = {
-               .agent = (1 << 0),
                .cfg =   0,
        },
 };
@@ -64,19 +57,15 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI] = {
-               .agent = (1 << 6),
                .cfg =   0,
        },
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 5),
                .cfg =   (1 << 2) | (1 << 3) | (1 << 5) | (1 << 7),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 3),
                .cfg =   (1 << 5) | (1 << 7),
        },
        [LAW_TRGT_IF_PCIE_3] = {
-               .agent = (1 << 1),
                .cfg =   (1 << 7),
        },
 };
@@ -84,20 +73,16 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI] = {
-               .agent = (1 << 6),
                .cfg =   0,
        },
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 5),
                .cfg =   (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) |
                         (1 << 6) | (1 << 7),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 3),
                .cfg =   (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7),
        },
        [LAW_TRGT_IF_PCIE_3] = {
-               .agent = (1 << 1),
                .cfg =   (1 << 6) | (1 << 7),
        },
 };
@@ -105,16 +90,13 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI_1] = {
-               .agent = (1 << 4) | (1 << 6),
                .cfg =   0,
        },
        [LAW_TRGT_IF_PCI_2] = {
-               .agent = (1 << 4) | (1 << 6),
                .cfg =   0,
        },
        /* PCI_2 is always host and we dont use iosel to determine enable/disable */
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 2),
                .cfg =   (1 << 3) | (1 << 4) | (1 << 7),
        },
 };
@@ -122,11 +104,9 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI] = {
-               .agent = (1 << 0) | (1 << 4) | (1 << 6),
                .cfg =   0,
        },
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 2) | (1 << 4),
                .cfg =   (1 << 3) | (1 << 4) | (1 << 7),
        },
 };
@@ -134,7 +114,6 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 6),
                .cfg =   (1 << 0) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) |
                         (1 << 8) | (1 << 0xc) | (1 << 0xf),
        },
@@ -143,16 +122,13 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5),
                .cfg =   (1 << 2) | (1 << 3) | (1 << 7) |
                         (1 << 0xb) | (1 << 0xc) | (1 << 0xf),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 0) | (1 << 2) | (1 << 4) | (1 << 6),
                .cfg =   (1 << 3) | (1 << 7),
        },
        [LAW_TRGT_IF_PCIE_3] = {
-               .agent = (1 << 0) | (1 << 3) | (1 << 5) | (1 << 6),
                .cfg =   (1 << 7),
        },
 };
@@ -160,15 +136,12 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCI_1] = {
-               .agent = (1 << 4) | (1 << 5) | (1 << 6),
                .cfg =   0,
        },
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 2) | (1 << 5),
                .cfg =   (1 << 1) | (1 << 4),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 0) | (1 << 1) | (1 << 4),
                .cfg =   (1 << 0) | (1 << 4),
        },
 };
@@ -176,7 +149,6 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = 0, /* we dont use agent on 8641 */
                .cfg =   (1 << 2) | (1 << 3) | (1 << 5) | (1 << 6) |
                         (1 << 7) | (1 << 0xe) | (1 << 0xf),
        },
@@ -185,11 +157,9 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 1),
                .cfg =   (1 << 0) | (1 << 6) | (1 << 0xe) | (1 << 0xf),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 0) | (1 << 2),
                .cfg =   (1 << 0xe),
        },
 };
@@ -197,29 +167,24 @@ static struct pci_info pci_config_info[] =
 static struct pci_info pci_config_info[] =
 {
        [LAW_TRGT_IF_PCIE_1] = {
-               .agent = (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5),
                .cfg =   (1 << 0) | (1 << 2) | (1 << 4) | (1 << 6) |
                         (1 << 0xd) | (1 << 0xe) | (1 << 0xf),
        },
        [LAW_TRGT_IF_PCIE_2] = {
-               .agent = (1 << 0) | (1 << 2) | (1 << 4) | (1 << 6),
                .cfg =   (1 << 2) | (1 << 0xe),
        },
        [LAW_TRGT_IF_PCIE_3] = {
-               .agent = (1 << 0) | (1 << 3) | (1 << 5) | (1 << 6),
                .cfg =   (1 << 2) | (1 << 4),
        },
 };
+#elif defined(CONFIG_FSL_CORENET)
 #else
 #error Need to define pci_config_info for processor
 #endif
 
-int is_fsl_pci_agent(enum law_trgt_if trgt, u32 host_agent)
-{
-       return ((1 << host_agent) & pci_config_info[trgt].agent);
-}
-
+#ifndef CONFIG_FSL_CORENET
 int is_fsl_pci_cfg(enum law_trgt_if trgt, u32 io_sel)
 {
        return ((1 << io_sel) & pci_config_info[trgt].cfg);
 }
+#endif
index 7d476d0018a7903ed74ddac7dbe06085cfe815f1..b32132d0533eba9a5004cc9341008be6ff9e5f73 100644 (file)
@@ -15,6 +15,18 @@ Freescale MPC8315ERDB Board
          4321            4321
        (where the '*' indicates the position of the tab of the switch.)
 
+       To boot the image at the beginning of NAND flash, use these
+       DIP switch settings for S3 S4:
+
+       +------+        +------+
+       | *    |        |  *** |
+       |  *** |        | *    |
+       +------+ ON     +------+ ON
+         4321            4321
+       (where the '*' indicates the position of the tab of the switch.)
+
+       When booting from NAND, use u-boot-nand.bin, not u-boot.bin.
+
 2.     Memory Map
        The memory map looks like this:
 
@@ -26,6 +38,9 @@ Freescale MPC8315ERDB Board
        0xe060_0000     0xe060_7fff     NAND FLASH (CS1) 32K
        0xfe00_0000     0xfe7f_ffff     NOR FLASH (CS0)  8M
 
+       When booting from NAND, NAND flash is CS0 and NOR flash
+       is CS1.
+
 3.     Definitions
 
 3.1    Explanation of NEW definitions in:
@@ -43,13 +58,15 @@ Freescale MPC8315ERDB Board
 
        export CROSS_COMPILE=your-cross-compiler-prefix-
        make distclean
-       make MPC8315ERDB_config
+       make MPC8315ERDB_config (or MPC8315ERDB_NAND_config for u-boot-nand.bin)
        make all
 
 5.     Downloading and Flashing Images
 
 5.1    Reflash U-boot Image using U-boot
 
+       NOR flash:
+
        tftp 40000 u-boot.bin
        protect off all
        erase fe000000 fe1fffff
@@ -60,6 +77,15 @@ Freescale MPC8315ERDB Board
        You have to supply the correct byte count with 'xxxx'
        from the TFTP result log.
 
+       NAND flash:
+
+       =>tftpboot $loadaddr <filename>
+       =>nand erase 0 0x80000
+       =>nand write $loadaddr 0 0x80000
+
+       ...where 0x80000 is the filesize rounded up to
+       the next 0x20000 increment.
+
 5.2    Downloading and Booting Linux Kernel
 
        Ensure that all networking-related environment variables are set
@@ -76,5 +102,4 @@ Freescale MPC8315ERDB Board
 
 6      Notes
 
-       Booting from NAND flash is not yet supported.
        The console baudrate for MPC8315ERDB is 115200bps.
index 3f74118dbe69e65a6a414727afbc64b75276e68f..d8b6619ae0d47bc9eab8dc0e07404a715eeb9546 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the GNU Public License, Version 2, incorporated
  * herein by reference.
  *
- * Copyright (C) 2004-2009 Freescale Semiconductor, Inc.
+ * Copyright 2004-2009 Freescale Semiconductor, Inc.
  * (C) Copyright 2003, Motorola, Inc.
  * author Andy Fleming
  *
@@ -80,7 +80,7 @@ static struct tsec_info_struct tsec_info[] = {
 #ifdef CONFIG_MPC85XX_FEC
        {
                .regs = (tsec_t *)(TSEC_BASE_ADDR + 0x2000),
-               .miiregs = (tsec_t *)(TSEC_BASE_ADDR),
+               .miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR),
                .devname = CONFIG_MPC85XX_FEC_NAME,
                .phyaddr = FEC_PHY_ADDR,
                .flags = FEC_FLAGS
@@ -133,6 +133,7 @@ int tsec_initialize(bd_t * bis, struct tsec_info_struct *tsec_info)
        privlist[num_tsecs++] = priv;
        priv->regs = tsec_info->regs;
        priv->phyregs = tsec_info->miiregs;
+       priv->phyregs_sgmii = tsec_info->miiregs_sgmii;
 
        priv->phyaddr = tsec_info->phyaddr;
        priv->flags = tsec_info->flags;
@@ -219,7 +220,7 @@ int tsec_init(struct eth_device *dev, bd_t * bd)
 }
 
 /* Writes the given phy's reg with value, using the specified MDIO regs */
-static void tsec_local_mdio_write(volatile tsec_t *phyregs, uint addr,
+static void tsec_local_mdio_write(volatile tsec_mdio_t *phyregs, uint addr,
                uint reg, uint value)
 {
        int timeout = 1000000;
@@ -242,7 +243,7 @@ static void tsec_local_mdio_write(volatile tsec_t *phyregs, uint addr,
  * notvalid bit cleared), and the bus to cease activity (miimind
  * busy bit cleared), and then returns the value
  */
-uint tsec_local_mdio_read(volatile tsec_t *phyregs, uint phyid, uint regnum)
+uint tsec_local_mdio_read(volatile tsec_mdio_t *phyregs, uint phyid, uint regnum)
 {
        uint value;
 
@@ -287,11 +288,11 @@ static void tsec_configure_serdes(struct tsec_private *priv)
 {
        /* Access TBI PHY registers at given TSEC register offset as opposed to the
         * register offset used for external PHY accesses */
-       tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_ANA,
+       tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa, TBI_ANA,
                        TBIANA_SETTINGS);
-       tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_TBICON,
+       tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa, TBI_TBICON,
                        TBICON_CLK_SELECT);
-       tsec_local_mdio_write(priv->regs, priv->regs->tbipa, TBI_CR,
+       tsec_local_mdio_write(priv->phyregs_sgmii, priv->regs->tbipa, TBI_CR,
                        TBICR_SETTINGS);
 }
 
@@ -303,12 +304,10 @@ static int init_phy(struct eth_device *dev)
 {
        struct tsec_private *priv = (struct tsec_private *)dev->priv;
        struct phy_info *curphy;
-       volatile tsec_t *phyregs = priv->phyregs;
        volatile tsec_t *regs = priv->regs;
 
        /* Assign a Physical address to the TBI */
        regs->tbipa = CONFIG_SYS_TBIPA_VALUE;
-       phyregs->tbipa = CONFIG_SYS_TBIPA_VALUE;
        asm("sync");
 
        /* Reset MII (due to new addresses) */
@@ -733,7 +732,7 @@ uint mii_parse_dm9161_scsr(uint mii_reg, struct tsec_private * priv)
 uint mii_cis8204_fixled(uint mii_reg, struct tsec_private * priv)
 {
        uint phyid;
-       volatile tsec_t *regbase = priv->phyregs;
+       volatile tsec_mdio_t *regbase = priv->phyregs;
        int timeout = 1000000;
 
        for (phyid = 0; phyid < 4; phyid++) {
@@ -1766,7 +1765,7 @@ void phy_run_commands(struct tsec_private *priv, struct phy_cmd *cmd)
 {
        int i;
        uint result;
-       volatile tsec_t *phyregs = priv->phyregs;
+       volatile tsec_mdio_t *phyregs = priv->phyregs;
 
        phyregs->miimcfg = MIIMCFG_RESET;
 
index 170cc257cd35de8687b616adea6efc531660225e..fe57926d7ea66bb8250c4e5942c2379f19e26c0b 100644 (file)
@@ -86,6 +86,15 @@ static void set_inbound_window(volatile pit_t *pi,
        out_be32(&pi->piwar, flag | sz);
 }
 
+int fsl_setup_hose(struct pci_controller *hose, unsigned long addr)
+{
+       volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) addr;
+
+       pci_setup_indirect(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
+
+       return fsl_is_pci_agent(hose);
+}
+
 static int fsl_pci_setup_inbound_windows(struct pci_controller *hose,
                                         u64 out_lo, u8 pcie_cap,
                                         volatile pit_t *pi)
index 940d4a8b91c62ac418159468f6f701de06ad5886..255679a186298a4f141230f7bd5064b25d40a3df 100644 (file)
@@ -36,6 +36,7 @@ COBJS-$(CONFIG_USB_SL811HS) += sl811-hcd.o
 # echi
 COBJS-$(CONFIG_USB_EHCI) += ehci-hcd.o
 COBJS-$(CONFIG_USB_EHCI_FSL) += ehci-fsl.o
+COBJS-$(CONFIG_USB_EHCI_PPC4XX) += ehci-ppc4xx.o
 COBJS-$(CONFIG_USB_EHCI_IXP4XX) += ehci-ixp.o
 COBJS-$(CONFIG_USB_EHCI_KIRKWOOD) += ehci-kirkwood.o
 COBJS-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
index ba85991e864ad940adc28a080f9068a1130ae485..9ebeb4f23dd2f4e2a31abd85a1751f30d522edc4 100644 (file)
@@ -708,6 +708,9 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
                                 * root
                                 */
                                wait_ms(50);
+                               /* terminate the reset */
+                               ehci_writel(status_reg, reg & ~EHCI_PS_PR);
+                               wait_ms(2);
                                portreset |= 1 << le16_to_cpu(req->index);
                        }
                        break;
diff --git a/drivers/usb/host/ehci-ppc4xx.c b/drivers/usb/host/ehci-ppc4xx.c
new file mode 100644 (file)
index 0000000..946a0a0
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * (C) Copyright 2010, Chris Zhang <chris@seamicro.com>
+ *
+ * Author: Chris Zhang <chris@seamicro.com>
+ * This code is based on ehci freescale driver
+ *
+ * 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
+ */
+#include <common.h>
+#include <usb.h>
+
+#include "ehci.h"
+#include "ehci-core.h"
+
+/*
+ * Create the appropriate control structures to manage
+ * a new EHCI host controller.
+ */
+int ehci_hcd_init(void)
+{
+       hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR);
+       hcor = (struct ehci_hcor *)((uint32_t) hccr +
+               HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+       usb_dev_init();
+       return 0;
+}
+
+/*
+ * Destroy the appropriate control structures corresponding
+ * the the EHCI host controller.
+ */
+int ehci_hcd_stop(void)
+{
+       return 0;
+}
index f2ccd9fe06536a0fd9e0238019e4b15619b75aa4..397f5fe7a3853829500faa4f98a494fd6bb60269 100644 (file)
@@ -27,8 +27,10 @@ LIB  := $(obj)libusb_musb.a
 
 COBJS-$(CONFIG_MUSB_HCD) += musb_hcd.o musb_core.o
 COBJS-$(CONFIG_MUSB_UDC) += musb_udc.o musb_core.o
+COBJS-$(CONFIG_USB_BLACKFIN) += blackfin_usb.o
 COBJS-$(CONFIG_USB_DAVINCI) += davinci.o
 COBJS-$(CONFIG_USB_OMAP3) += omap3.o
+COBJS-$(CONFIG_USB_DA8XX) += da8xx.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/usb/musb/blackfin_usb.c b/drivers/usb/musb/blackfin_usb.c
new file mode 100644 (file)
index 0000000..38aceb2
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Blackfin MUSB HCD (Host Controller Driver) for u-boot
+ *
+ * Copyright (c) 2008-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+
+#include <usb.h>
+
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/usb.h>
+
+#include "musb_core.h"
+
+/* MUSB platform configuration */
+struct musb_config musb_cfg = {
+       .regs       = (struct musb_regs *)USB_FADDR,
+       .timeout    = 0x3FFFFFF,
+       .musb_speed = 0,
+};
+
+/*
+ * This function read or write data to endpoint fifo
+ * Blackfin use DMA polling method to avoid buffer alignment issues
+ *
+ * ep          - Endpoint number
+ * length      - Number of bytes to write to FIFO
+ * fifo_data   - Pointer to data buffer to be read/write
+ * is_write    - Flag for read or write
+ */
+void rw_fifo(u8 ep, u32 length, void *fifo_data, int is_write)
+{
+       struct bfin_musb_dma_regs *regs;
+       u32 val = (u32)fifo_data;
+
+       blackfin_dcache_flush_invalidate_range(fifo_data, fifo_data + length);
+
+       regs = (void *)USB_DMA_INTERRUPT;
+       regs += ep;
+
+       /* Setup DMA address register */
+       bfin_write16(&regs->addr_low, val);
+       SSYNC();
+
+       bfin_write16(&regs->addr_high, val >> 16);
+       SSYNC();
+
+       /* Setup DMA count register */
+       bfin_write16(&regs->count_low, length);
+       bfin_write16(&regs->count_high, 0);
+       SSYNC();
+
+       /* Enable the DMA */
+       val = (ep << 4) | DMA_ENA | INT_ENA;
+       if (is_write)
+               val |= DIRECTION;
+       bfin_write16(&regs->control, val);
+       SSYNC();
+
+       /* Wait for compelete */
+       while (!(bfin_read_USB_DMA_INTERRUPT() & (1 << ep)))
+               continue;
+
+       /* acknowledge dma interrupt */
+       bfin_write_USB_DMA_INTERRUPT(1 << ep);
+       SSYNC();
+
+       /* Reset DMA */
+       bfin_write16(&regs->control, 0);
+       SSYNC();
+}
+
+void write_fifo(u8 ep, u32 length, void *fifo_data)
+{
+       rw_fifo(ep, length, fifo_data, 1);
+}
+
+void read_fifo(u8 ep, u32 length, void *fifo_data)
+{
+       rw_fifo(ep, length, fifo_data, 0);
+}
+
+
+/*
+ * CPU and board-specific MUSB initializations.  Aliased function
+ * signals caller to move on.
+ */
+static void __def_musb_init(void)
+{
+}
+void board_musb_init(void) __attribute__((weak, alias("__def_musb_init")));
+
+int musb_platform_init(void)
+{
+       /* board specific initialization */
+       board_musb_init();
+
+       if (ANOMALY_05000346) {
+               bfin_write_USB_APHY_CALIB(ANOMALY_05000346_value);
+               SSYNC();
+       }
+
+       if (ANOMALY_05000347) {
+               bfin_write_USB_APHY_CNTRL(0x0);
+               SSYNC();
+       }
+
+       /* Configure PLL oscillator register */
+       bfin_write_USB_PLLOSC_CTRL(0x30a8);
+       SSYNC();
+
+       bfin_write_USB_SRP_CLKDIV((get_sclk()/1000) / 32 - 1);
+       SSYNC();
+
+       bfin_write_USB_EP_NI0_RXMAXP(64);
+       SSYNC();
+
+       bfin_write_USB_EP_NI0_TXMAXP(64);
+       SSYNC();
+
+       /* Route INTRUSB/INTR_RX/INTR_TX to USB_INT0*/
+       bfin_write_USB_GLOBINTR(0x7);
+       SSYNC();
+
+       bfin_write_USB_GLOBAL_CTL(GLOBAL_ENA | EP1_TX_ENA | EP2_TX_ENA |
+                               EP3_TX_ENA | EP4_TX_ENA | EP5_TX_ENA |
+                               EP6_TX_ENA | EP7_TX_ENA | EP1_RX_ENA |
+                               EP2_RX_ENA | EP3_RX_ENA | EP4_RX_ENA |
+                               EP5_RX_ENA | EP6_RX_ENA | EP7_RX_ENA);
+       SSYNC();
+
+       return 0;
+}
+
+/*
+ * This function performs Blackfin platform specific deinitialization for usb.
+*/
+void musb_platform_deinit(void)
+{
+}
diff --git a/drivers/usb/musb/blackfin_usb.h b/drivers/usb/musb/blackfin_usb.h
new file mode 100644 (file)
index 0000000..ab26ca2
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Blackfin MUSB HCD (Host Controller Driver) for u-boot
+ *
+ * Copyright (c) 2008-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __BLACKFIN_USB_H__
+#define __BLACKFIN_USB_H__
+
+#include <linux/types.h>
+
+/* Every register is 32bit aligned, but only 16bits in size */
+#define ureg(name) u16 name; u16 __pad_##name;
+
+#define musb_regs musb_regs
+struct musb_regs {
+       /* common registers */
+       ureg(faddr)
+       ureg(power)
+       ureg(intrtx)
+       ureg(intrrx)
+       ureg(intrtxe)
+       ureg(intrrxe)
+       ureg(intrusb)
+       ureg(intrusbe)
+       ureg(frame)
+       ureg(index)
+       ureg(testmode)
+       ureg(globintr)
+       ureg(global_ctl)
+       u32     reserved0[3];
+       /* indexed registers */
+       ureg(txmaxp)
+       ureg(txcsr)
+       ureg(rxmaxp)
+       ureg(rxcsr)
+       ureg(rxcount)
+       ureg(txtype)
+       ureg(txinterval)
+       ureg(rxtype)
+       ureg(rxinterval)
+       u32     reserved1;
+       ureg(txcount)
+       u32     reserved2[5];
+       /* fifo */
+       u16     fifox[32];
+       /* OTG, dynamic FIFO, version & vendor registers */
+       u32     reserved3[16];
+       ureg(devctl)
+       ureg(vbus_irq)
+       ureg(vbus_mask)
+       u32 reserved4[15];
+       ureg(linkinfo)
+       ureg(vplen)
+       ureg(hseof1)
+       ureg(fseof1)
+       ureg(lseof1)
+       u32 reserved5[41];
+       /* target address registers */
+       struct musb_tar_regs {
+               ureg(txmaxp)
+               ureg(txcsr)
+               ureg(rxmaxp)
+               ureg(rxcsr)
+               ureg(rxcount)
+               ureg(txtype)
+               ureg(txinternal)
+               ureg(rxtype)
+               ureg(rxinternal)
+               u32     reserved6;
+               ureg(txcount)
+               u32 reserved7[5];
+       } tar[8];
+} __attribute__((packed));
+
+struct bfin_musb_dma_regs {
+       ureg(interrupt);
+       ureg(control);
+       ureg(addr_low);
+       ureg(addr_high);
+       ureg(count_low);
+       ureg(count_high);
+       ureg(pad);
+};
+
+#undef ureg
+
+/* EP5-EP7 are the only ones with 1024 byte FIFOs which BULK really needs */
+#define MUSB_BULK_EP 5
+
+/* Blackfin FIFO's are static */
+#define MUSB_NO_DYNAMIC_FIFO
+
+/* No HUB support :( */
+#define MUSB_NO_MULTIPOINT
+
+#endif
diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
new file mode 100644 (file)
index 0000000..40bfe44
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * da8xx.c - TI's DA8xx platform specific usb wrapper functions.
+ *
+ * Author: Ajay Kumar Gupta <ajay.gupta@ti.com>
+ *
+ * Based on drivers/usb/musb/davinci.c
+ *
+ * Copyright (C) 2009 Texas Instruments Incorporated
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include <common.h>
+
+#include "da8xx.h"
+
+/* MUSB platform configuration */
+struct musb_config musb_cfg = {
+       (struct musb_regs *)DA8XX_USB_OTG_CORE_BASE,
+       DA8XX_USB_OTG_TIMEOUT,
+       0
+};
+
+/*
+ * This function enables VBUS by driving the GPIO Bank4 Pin 15 high.
+ */
+static void enable_vbus(void)
+{
+       u32 value;
+
+       /* configure GPIO bank4 pin 15 in output direction */
+       value = readl(&davinci_gpio_bank45->dir);
+       writel((value & (~DA8XX_USB_VBUS_GPIO)), &davinci_gpio_bank45->dir);
+
+       /* set GPIO bank4 pin 15 high to drive VBUS */
+       value = readl(&davinci_gpio_bank45->set_data);
+       writel((value | DA8XX_USB_VBUS_GPIO), &davinci_gpio_bank45->set_data);
+}
+
+/*
+ * Enable the usb0 phy. This initialization procedure is explained in
+ * the DA8xx USB user guide document.
+ */
+static u8 phy_on(void)
+{
+       u32 timeout;
+       u32 cfgchip2;
+
+       cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
+
+       cfgchip2 &= ~(CFGCHIP2_RESET | CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN |
+                     CFGCHIP2_OTGMODE | CFGCHIP2_REFFREQ);
+       cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON |
+                   CFGCHIP2_REFFREQ_24MHZ;
+
+       writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
+
+       /* wait until the usb phy pll locks */
+       timeout = musb_cfg.timeout;
+       while (timeout--)
+               if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD)
+                       return 1;
+
+       /* USB phy was not turned on */
+       return 0;
+}
+
+/*
+ * Disable the usb phy
+ */
+static void phy_off(void)
+{
+       u32 cfgchip2;
+
+       /*
+        * Power down the on-chip PHY.
+        */
+       cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
+       cfgchip2 &= ~CFGCHIP2_PHY_PLLON;
+       cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN;
+       writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
+}
+
+/*
+ * This function performs DA8xx platform specific initialization for usb0.
+ */
+int musb_platform_init(void)
+{
+       u32  revision;
+
+       /* enable psc for usb2.0 */
+       lpsc_on(33);
+
+       /* enable usb vbus */
+       enable_vbus();
+
+       /* reset the controller */
+       writel(0x1, &da8xx_usb_regs->control);
+       udelay(5000);
+
+       /* start the on-chip usb phy and its pll */
+       if (phy_on() == 0)
+               return -1;
+
+       /* Returns zero if e.g. not clocked */
+       revision = readl(&da8xx_usb_regs->revision);
+       if (revision == 0)
+               return -1;
+
+       /* Disable all interrupts */
+       writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
+               DA8XX_USB_RXINT_MASK), &da8xx_usb_regs->intmsk_set);
+       return 0;
+}
+
+/*
+ * This function performs DA8xx platform specific deinitialization for usb0.
+ */
+void musb_platform_deinit(void)
+{
+       /* Turn of the phy */
+       phy_off();
+
+       /* flush any interrupts */
+       writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
+               DA8XX_USB_RXINT_MASK), &da8xx_usb_regs->intmsk_clr);
+       writel(0, &da8xx_usb_regs->eoi);
+}
diff --git a/drivers/usb/musb/da8xx.h b/drivers/usb/musb/da8xx.h
new file mode 100644 (file)
index 0000000..93234f0
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * da8xx.h -- TI's DA8xx platform specific usb wrapper definitions.
+ *
+ * Author: Ajay Kumar Gupta <ajay.gupta@ti.com>
+ *
+ * Based on drivers/usb/musb/davinci.h
+ *
+ * Copyright (C) 2009 Texas Instruments Incorporated
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef __DA8XX_MUSB_H__
+#define __DA8XX_MUSB_H__
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/gpio_defs.h>
+#include "musb_core.h"
+
+/* Base address of da8xx usb0 wrapper */
+#define DA8XX_USB_OTG_BASE  0x01E00000
+
+/* Base address of da8xx musb core */
+#define DA8XX_USB_OTG_CORE_BASE (DA8XX_USB_OTG_BASE + 0x400)
+
+/* Timeout for DA8xx usb module */
+#define DA8XX_USB_OTG_TIMEOUT 0x3FFFFFF
+
+/*
+ * DA8xx platform USB wrapper register overlay.
+ */
+struct da8xx_usb_regs {
+       dv_reg  revision;
+       dv_reg  control;
+       dv_reg  status;
+       dv_reg  emulation;
+       dv_reg  mode;
+       dv_reg  autoreq;
+       dv_reg  srpfixtime;
+       dv_reg  teardown;
+       dv_reg  intsrc;
+       dv_reg  intsrc_set;
+       dv_reg  intsrc_clr;
+       dv_reg  intmsk;
+       dv_reg  intmsk_set;
+       dv_reg  intmsk_clr;
+       dv_reg  intsrcmsk;
+       dv_reg  eoi;
+       dv_reg  intvector;
+       dv_reg  grndis_size[4];
+};
+
+#define da8xx_usb_regs ((struct da8xx_usb_regs *)DA8XX_USB_OTG_BASE)
+
+/* DA8XX interrupt bits definitions */
+#define DA8XX_USB_TX_ENDPTS_MASK  0x1f /* ep0 + 4 tx */
+#define DA8XX_USB_RX_ENDPTS_MASK  0x1e /* 4 rx */
+#define DA8XX_USB_TXINT_SHIFT    0
+#define DA8XX_USB_RXINT_SHIFT    8
+
+#define DA8XX_USB_USBINT_MASK    0x01ff0000    /* 8 Mentor, DRVVBUS */
+#define DA8XX_USB_TXINT_MASK \
+               (DA8XX_USB_TX_ENDPTS_MASK << DA8XX_USB_TXINT_SHIFT)
+#define DA8XX_USB_RXINT_MASK \
+               (DA8XX_USB_RX_ENDPTS_MASK << DA8XX_USB_RXINT_SHIFT)
+
+/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */
+#define CFGCHIP2_PHYCLKGD      (1 << 17)
+#define CFGCHIP2_VBUSSENSE     (1 << 16)
+#define CFGCHIP2_RESET         (1 << 15)
+#define CFGCHIP2_OTGMODE       (3 << 13)
+#define CFGCHIP2_NO_OVERRIDE   (0 << 13)
+#define CFGCHIP2_FORCE_HOST    (1 << 13)
+#define CFGCHIP2_FORCE_DEVICE  (2 << 13)
+#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13)
+#define CFGCHIP2_USB1PHYCLKMUX (1 << 12)
+#define CFGCHIP2_USB2PHYCLKMUX (1 << 11)
+#define CFGCHIP2_PHYPWRDN      (1 << 10)
+#define CFGCHIP2_OTGPWRDN      (1 << 9)
+#define CFGCHIP2_DATPOL        (1 << 8)
+#define CFGCHIP2_USB1SUSPENDM  (1 << 7)
+#define CFGCHIP2_PHY_PLLON     (1 << 6)        /* override PLL suspend */
+#define CFGCHIP2_SESENDEN      (1 << 5)        /* Vsess_end comparator */
+#define CFGCHIP2_VBDTCTEN      (1 << 4)        /* Vbus comparator */
+#define CFGCHIP2_REFFREQ       (0xf << 0)
+#define CFGCHIP2_REFFREQ_12MHZ (1 << 0)
+#define CFGCHIP2_REFFREQ_24MHZ (2 << 0)
+#define CFGCHIP2_REFFREQ_48MHZ (3 << 0)
+
+#define DA8XX_USB_VBUS_GPIO    (1 << 15)
+#endif /* __DA8XX_MUSB_H__ */
+
index 22f3dba0cfc4c1f69e58f46cb4a9398c27febf76..7766069bfcfdb25ca04551783c61f2f560df428a 100644 (file)
@@ -50,6 +50,16 @@ void musb_start(void)
 #endif
 }
 
+#ifdef MUSB_NO_DYNAMIC_FIFO
+# define config_fifo(dir, idx, addr)
+#else
+# define config_fifo(dir, idx, addr) \
+       do { \
+               writeb(idx, &musbr->dir##fifosz); \
+               writew(fifoaddr >> 3, &musbr->dir##fifoadd); \
+       } while (0)
+#endif
+
 /*
  * This function configures the endpoint configuration. The musb hcd or musb
  * device implementation can use this function to configure the endpoints
@@ -74,8 +84,7 @@ void musb_configure_ep(struct musb_epinfo *epinfo, u8 cnt)
                writeb(epinfo->epnum, &musbr->index);
                if (epinfo->epdir) {
                        /* Configure fifo size and fifo base address */
-                       writeb(idx, &musbr->txfifosz);
-                       writew(fifoaddr >> 3, &musbr->txfifoadd);
+                       config_fifo(tx, idx, fifoaddr);
 
                        csr = readw(&musbr->txcsr);
 #if defined(CONFIG_MUSB_HCD)
@@ -88,8 +97,7 @@ void musb_configure_ep(struct musb_epinfo *epinfo, u8 cnt)
                                        &musbr->txcsr);
                } else {
                        /* Configure fifo size and fifo base address */
-                       writeb(idx, &musbr->rxfifosz);
-                       writew(fifoaddr >> 3, &musbr->rxfifoadd);
+                       config_fifo(rx, idx, fifoaddr);
 
                        csr = readw(&musbr->rxcsr);
 #if defined(CONFIG_MUSB_HCD)
@@ -113,6 +121,7 @@ void musb_configure_ep(struct musb_epinfo *epinfo, u8 cnt)
  * length      - number of bytes to write to FIFO
  * fifo_data   - Pointer to data buffer that contains the data to write
  */
+__attribute__((weak))
 void write_fifo(u8 ep, u32 length, void *fifo_data)
 {
        u8  *data = (u8 *)fifo_data;
@@ -132,6 +141,7 @@ void write_fifo(u8 ep, u32 length, void *fifo_data)
  * length       - number of bytes to read from FIFO
  * fifo_data    - pointer to data buffer into which data is read
  */
+__attribute__((weak))
 void read_fifo(u8 ep, u32 length, void *fifo_data)
 {
        u8  *data = (u8 *)fifo_data;
index 15c7f49a350dbdfd70e2fb9bb20843bf3d8ca58f..f0f0301bd1f70ec986a87bce6c0207532810a132 100644 (file)
 #include <usb_defs.h>
 #include <asm/io.h>
 
+#ifdef CONFIG_USB_BLACKFIN
+# include "blackfin_usb.h"
+#endif
+
 #define MUSB_EP0_FIFOSIZE      64      /* This is non-configurable */
 
 /* EP0 */
@@ -71,6 +75,7 @@ struct musb_epN_regs {
 };
 
 /* Mentor USB core register overlay structure */
+#ifndef musb_regs
 struct musb_regs {
        /* common registers */
        u8      faddr;
@@ -137,7 +142,8 @@ struct musb_regs {
                struct musb_epN_regs epN;
        } ep[16];
 
-} __attribute__((aligned(32)));
+} __attribute__((packed, aligned(32)));
+#endif
 
 /*
  * MUSB Register bits
@@ -347,4 +353,14 @@ extern void musb_configure_ep(struct musb_epinfo *epinfo, u8 cnt);
 extern void write_fifo(u8 ep, u32 length, void *fifo_data);
 extern void read_fifo(u8 ep, u32 length, void *fifo_data);
 
+#if defined(CONFIG_USB_BLACKFIN)
+/* Every USB register is accessed as a 16-bit even if the value itself
+ * is only 8-bits in size.  Fun stuff.
+ */
+# undef  readb
+# define readb(addr)     (u8)bfin_read16(addr)
+# undef  writeb
+# define writeb(b, addr) bfin_write16(addr, b)
+#endif
+
 #endif /* __MUSB_HDRC_DEFS_H__ */
index 555d2dc1b09a4972e9829651b16bec3daaaab3fb..dd2aa7f27c1be2c231acbc857336fde6f4def0c3 100644 (file)
@@ -35,6 +35,106 @@ static struct musb_epinfo epinfo[3] = {
        {MUSB_INTR_EP, 0, 64}   /* EP2 - Interrupt IN - 64 Bytes */
 };
 
+/* --- Virtual Root Hub ---------------------------------------------------- */
+#ifdef MUSB_NO_MULTIPOINT
+static int rh_devnum;
+static u32 port_status;
+
+/* Device descriptor */
+static u8 root_hub_dev_des[] = {
+       0x12,                   /*  __u8  bLength; */
+       0x01,                   /*  __u8  bDescriptorType; Device */
+       0x00,                   /*  __u16 bcdUSB; v1.1 */
+       0x02,
+       0x09,                   /*  __u8  bDeviceClass; HUB_CLASSCODE */
+       0x00,                   /*  __u8  bDeviceSubClass; */
+       0x00,                   /*  __u8  bDeviceProtocol; */
+       0x08,                   /*  __u8  bMaxPacketSize0; 8 Bytes */
+       0x00,                   /*  __u16 idVendor; */
+       0x00,
+       0x00,                   /*  __u16 idProduct; */
+       0x00,
+       0x00,                   /*  __u16 bcdDevice; */
+       0x00,
+       0x00,                   /*  __u8  iManufacturer; */
+       0x01,                   /*  __u8  iProduct; */
+       0x00,                   /*  __u8  iSerialNumber; */
+       0x01                    /*  __u8  bNumConfigurations; */
+};
+
+/* Configuration descriptor */
+static u8 root_hub_config_des[] = {
+       0x09,                   /*  __u8  bLength; */
+       0x02,                   /*  __u8  bDescriptorType; Configuration */
+       0x19,                   /*  __u16 wTotalLength; */
+       0x00,
+       0x01,                   /*  __u8  bNumInterfaces; */
+       0x01,                   /*  __u8  bConfigurationValue; */
+       0x00,                   /*  __u8  iConfiguration; */
+       0x40,                   /*  __u8  bmAttributes;
+                                  Bit 7: Bus-powered, 6: Self-powered, 5 Remote-wakwup, 4..0: resvd */
+       0x00,                   /*  __u8  MaxPower; */
+
+       /* interface */
+       0x09,                   /*  __u8  if_bLength; */
+       0x04,                   /*  __u8  if_bDescriptorType; Interface */
+       0x00,                   /*  __u8  if_bInterfaceNumber; */
+       0x00,                   /*  __u8  if_bAlternateSetting; */
+       0x01,                   /*  __u8  if_bNumEndpoints; */
+       0x09,                   /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
+       0x00,                   /*  __u8  if_bInterfaceSubClass; */
+       0x00,                   /*  __u8  if_bInterfaceProtocol; */
+       0x00,                   /*  __u8  if_iInterface; */
+
+       /* endpoint */
+       0x07,                   /*  __u8  ep_bLength; */
+       0x05,                   /*  __u8  ep_bDescriptorType; Endpoint */
+       0x81,                   /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
+       0x03,                   /*  __u8  ep_bmAttributes; Interrupt */
+       0x00,                   /*  __u16 ep_wMaxPacketSize; ((MAX_ROOT_PORTS + 1) / 8 */
+       0x02,
+       0xff                    /*  __u8  ep_bInterval; 255 ms */
+};
+
+static unsigned char root_hub_str_index0[] = {
+       0x04,                   /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       0x09,                   /*  __u8  lang ID */
+       0x04,                   /*  __u8  lang ID */
+};
+
+static unsigned char root_hub_str_index1[] = {
+       0x1c,                   /*  __u8  bLength; */
+       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
+       'M',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'U',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'S',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'B',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'R',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'o',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       't',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       ' ',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'H',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'u',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+       'b',                    /*  __u8  Unicode */
+       0,                      /*  __u8  Unicode */
+};
+#endif
+
 /*
  * This function writes the data toggle value.
  */
@@ -402,13 +502,334 @@ static void config_hub_port(struct usb_device *dev, u8 ep)
                if (dev->parent->children[chid] == dev)
                        break;
 
+#ifndef MUSB_NO_MULTIPOINT
        /* configure the hub address and the port address */
        writeb(hub, &musbr->tar[ep].txhubaddr);
        writeb((chid + 1), &musbr->tar[ep].txhubport);
        writeb(hub, &musbr->tar[ep].rxhubaddr);
        writeb((chid + 1), &musbr->tar[ep].rxhubport);
+#endif
+}
+
+#ifdef MUSB_NO_MULTIPOINT
+
+static void musb_port_reset(int do_reset)
+{
+       u8 power = readb(&musbr->power);
+
+       if (do_reset) {
+               power &= 0xf0;
+               writeb(power | MUSB_POWER_RESET, &musbr->power);
+               port_status |= USB_PORT_STAT_RESET;
+               port_status &= ~USB_PORT_STAT_ENABLE;
+               udelay(30000);
+       } else {
+               writeb(power & ~MUSB_POWER_RESET, &musbr->power);
+
+               power = readb(&musbr->power);
+               if (power & MUSB_POWER_HSMODE)
+                       port_status |= USB_PORT_STAT_HIGH_SPEED;
+
+               port_status &= ~(USB_PORT_STAT_RESET | (USB_PORT_STAT_C_CONNECTION << 16));
+               port_status |= USB_PORT_STAT_ENABLE
+                       | (USB_PORT_STAT_C_RESET << 16)
+                       | (USB_PORT_STAT_C_ENABLE << 16);
+       }
 }
 
+/*
+ * root hub control
+ */
+static int musb_submit_rh_msg(struct usb_device *dev, unsigned long pipe,
+                             void *buffer, int transfer_len,
+                             struct devrequest *cmd)
+{
+       int leni = transfer_len;
+       int len = 0;
+       int stat = 0;
+       u32 datab[4];
+       u8 *data_buf = (u8 *) datab;
+       u16 bmRType_bReq;
+       u16 wValue;
+       u16 wIndex;
+       u16 wLength;
+       u16 int_usb;
+
+       if ((pipe & PIPE_INTERRUPT) == PIPE_INTERRUPT) {
+               debug("Root-Hub submit IRQ: NOT implemented\n");
+               return 0;
+       }
+
+       bmRType_bReq = cmd->requesttype | (cmd->request << 8);
+       wValue = swap_16(cmd->value);
+       wIndex = swap_16(cmd->index);
+       wLength = swap_16(cmd->length);
+
+       debug("--- HUB ----------------------------------------\n");
+       debug("submit rh urb, req=%x val=%#x index=%#x len=%d\n",
+           bmRType_bReq, wValue, wIndex, wLength);
+       debug("------------------------------------------------\n");
+
+       switch (bmRType_bReq) {
+       case RH_GET_STATUS:
+               debug("RH_GET_STATUS\n");
+
+               *(__u16 *) data_buf = swap_16(1);
+               len = 2;
+               break;
+
+       case RH_GET_STATUS | RH_INTERFACE:
+               debug("RH_GET_STATUS | RH_INTERFACE\n");
+
+               *(__u16 *) data_buf = swap_16(0);
+               len = 2;
+               break;
+
+       case RH_GET_STATUS | RH_ENDPOINT:
+               debug("RH_GET_STATUS | RH_ENDPOINT\n");
+
+               *(__u16 *) data_buf = swap_16(0);
+               len = 2;
+               break;
+
+       case RH_GET_STATUS | RH_CLASS:
+               debug("RH_GET_STATUS | RH_CLASS\n");
+
+               *(__u32 *) data_buf = swap_32(0);
+               len = 4;
+               break;
+
+       case RH_GET_STATUS | RH_OTHER | RH_CLASS:
+               debug("RH_GET_STATUS | RH_OTHER | RH_CLASS\n");
+
+               int_usb = readw(&musbr->intrusb);
+               if (int_usb & MUSB_INTR_CONNECT) {
+                       port_status |= USB_PORT_STAT_CONNECTION
+                               | (USB_PORT_STAT_C_CONNECTION << 16);
+                       port_status |= USB_PORT_STAT_HIGH_SPEED
+                               | USB_PORT_STAT_ENABLE;
+               }
+
+               if (port_status & USB_PORT_STAT_RESET)
+                       musb_port_reset(0);
+
+               *(__u32 *) data_buf = swap_32(port_status);
+               len = 4;
+               break;
+
+       case RH_CLEAR_FEATURE | RH_ENDPOINT:
+               debug("RH_CLEAR_FEATURE | RH_ENDPOINT\n");
+
+               switch (wValue) {
+               case RH_ENDPOINT_STALL:
+                       debug("C_HUB_ENDPOINT_STALL\n");
+                       len = 0;
+                       break;
+               }
+               port_status &= ~(1 << wValue);
+               break;
+
+       case RH_CLEAR_FEATURE | RH_CLASS:
+               debug("RH_CLEAR_FEATURE | RH_CLASS\n");
+
+               switch (wValue) {
+               case RH_C_HUB_LOCAL_POWER:
+                       debug("C_HUB_LOCAL_POWER\n");
+                       len = 0;
+                       break;
+
+               case RH_C_HUB_OVER_CURRENT:
+                       debug("C_HUB_OVER_CURRENT\n");
+                       len = 0;
+                       break;
+               }
+               port_status &= ~(1 << wValue);
+               break;
+
+       case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
+               debug("RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS\n");
+
+               switch (wValue) {
+               case RH_PORT_ENABLE:
+                       len = 0;
+                       break;
+
+               case RH_PORT_SUSPEND:
+                       len = 0;
+                       break;
+
+               case RH_PORT_POWER:
+                       len = 0;
+                       break;
+
+               case RH_C_PORT_CONNECTION:
+                       len = 0;
+                       break;
+
+               case RH_C_PORT_ENABLE:
+                       len = 0;
+                       break;
+
+               case RH_C_PORT_SUSPEND:
+                       len = 0;
+                       break;
+
+               case RH_C_PORT_OVER_CURRENT:
+                       len = 0;
+                       break;
+
+               case RH_C_PORT_RESET:
+                       len = 0;
+                       break;
+
+               default:
+                       debug("invalid wValue\n");
+                       stat = USB_ST_STALLED;
+               }
+
+               port_status &= ~(1 << wValue);
+               break;
+
+       case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
+               debug("RH_SET_FEATURE | RH_OTHER | RH_CLASS\n");
+
+               switch (wValue) {
+               case RH_PORT_SUSPEND:
+                       len = 0;
+                       break;
+
+               case RH_PORT_RESET:
+                       musb_port_reset(1);
+                       len = 0;
+                       break;
+
+               case RH_PORT_POWER:
+                       len = 0;
+                       break;
+
+               case RH_PORT_ENABLE:
+                       len = 0;
+                       break;
+
+               default:
+                       debug("invalid wValue\n");
+                       stat = USB_ST_STALLED;
+               }
+
+               port_status |= 1 << wValue;
+               break;
+
+       case RH_SET_ADDRESS:
+               debug("RH_SET_ADDRESS\n");
+
+               rh_devnum = wValue;
+               len = 0;
+               break;
+
+       case RH_GET_DESCRIPTOR:
+               debug("RH_GET_DESCRIPTOR: %x, %d\n", wValue, wLength);
+
+               switch (wValue) {
+               case (USB_DT_DEVICE << 8):      /* device descriptor */
+                       len = min_t(unsigned int,
+                                   leni, min_t(unsigned int,
+                                               sizeof(root_hub_dev_des),
+                                               wLength));
+                       data_buf = root_hub_dev_des;
+                       break;
+
+               case (USB_DT_CONFIG << 8):      /* configuration descriptor */
+                       len = min_t(unsigned int,
+                                   leni, min_t(unsigned int,
+                                               sizeof(root_hub_config_des),
+                                               wLength));
+                       data_buf = root_hub_config_des;
+                       break;
+
+               case ((USB_DT_STRING << 8) | 0x00):     /* string 0 descriptors */
+                       len = min_t(unsigned int,
+                                   leni, min_t(unsigned int,
+                                               sizeof(root_hub_str_index0),
+                                               wLength));
+                       data_buf = root_hub_str_index0;
+                       break;
+
+               case ((USB_DT_STRING << 8) | 0x01):     /* string 1 descriptors */
+                       len = min_t(unsigned int,
+                                   leni, min_t(unsigned int,
+                                               sizeof(root_hub_str_index1),
+                                               wLength));
+                       data_buf = root_hub_str_index1;
+                       break;
+
+               default:
+                       debug("invalid wValue\n");
+                       stat = USB_ST_STALLED;
+               }
+
+               break;
+
+       case RH_GET_DESCRIPTOR | RH_CLASS:
+               debug("RH_GET_DESCRIPTOR | RH_CLASS\n");
+
+               data_buf[0] = 0x09;     /* min length; */
+               data_buf[1] = 0x29;
+               data_buf[2] = 0x1;      /* 1 port */
+               data_buf[3] = 0x01;     /* per-port power switching */
+               data_buf[3] |= 0x10;    /* no overcurrent reporting */
+
+               /* Corresponds to data_buf[4-7] */
+               data_buf[4] = 0;
+               data_buf[5] = 5;
+               data_buf[6] = 0;
+               data_buf[7] = 0x02;
+               data_buf[8] = 0xff;
+
+               len = min_t(unsigned int, leni,
+                           min_t(unsigned int, data_buf[0], wLength));
+               break;
+
+       case RH_GET_CONFIGURATION:
+               debug("RH_GET_CONFIGURATION\n");
+
+               *(__u8 *) data_buf = 0x01;
+               len = 1;
+               break;
+
+       case RH_SET_CONFIGURATION:
+               debug("RH_SET_CONFIGURATION\n");
+
+               len = 0;
+               break;
+
+       default:
+               debug("*** *** *** unsupported root hub command *** *** ***\n");
+               stat = USB_ST_STALLED;
+       }
+
+       len = min_t(int, len, leni);
+       if (buffer != data_buf)
+               memcpy(buffer, data_buf, len);
+
+       dev->act_len = len;
+       dev->status = stat;
+       debug("dev act_len %d, status %d\n", dev->act_len, dev->status);
+
+       return stat;
+}
+
+static void musb_rh_init(void)
+{
+       rh_devnum = 0;
+       port_status = 0;
+}
+
+#else
+
+static void musb_rh_init(void) {}
+
+#endif
+
 /*
  * do a control transfer
  */
@@ -419,13 +840,21 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
        u16 csr;
        u8  devspeed;
 
+#ifdef MUSB_NO_MULTIPOINT
+       /* Control message is for the HUB? */
+       if (devnum == rh_devnum)
+               return musb_submit_rh_msg(dev, pipe, buffer, len, setup);
+#endif
+
        /* select control endpoint */
        writeb(MUSB_CONTROL_EP, &musbr->index);
        csr = readw(&musbr->txcsr);
 
+#ifndef MUSB_NO_MULTIPOINT
        /* target addr and (for multipoint) hub addr/port */
        writeb(devnum, &musbr->tar[MUSB_CONTROL_EP].txfuncaddr);
        writeb(devnum, &musbr->tar[MUSB_CONTROL_EP].rxfuncaddr);
+#endif
 
        /* configure the hub address and the port number as required */
        devspeed = get_dev_speed(dev);
@@ -435,10 +864,12 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
                writeb(devspeed << 6, &musbr->txtype);
        } else {
                writeb(musb_cfg.musb_speed << 6, &musbr->txtype);
+#ifndef MUSB_NO_MULTIPOINT
                writeb(0, &musbr->tar[MUSB_CONTROL_EP].txhubaddr);
                writeb(0, &musbr->tar[MUSB_CONTROL_EP].txhubport);
                writeb(0, &musbr->tar[MUSB_CONTROL_EP].rxhubaddr);
                writeb(0, &musbr->tar[MUSB_CONTROL_EP].rxhubport);
+#endif
        }
 
        /* Control transfer setup phase */
@@ -497,7 +928,9 @@ int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
 {
        int dir_out = usb_pipeout(pipe);
        int ep = usb_pipeendpoint(pipe);
+#ifndef MUSB_NO_MULTIPOINT
        int devnum = usb_pipedevice(pipe);
+#endif
        u8  type;
        u16 csr;
        u32 txlen = 0;
@@ -507,11 +940,13 @@ int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
        /* select bulk endpoint */
        writeb(MUSB_BULK_EP, &musbr->index);
 
+#ifndef MUSB_NO_MULTIPOINT
        /* write the address of the device */
        if (dir_out)
                writeb(devnum, &musbr->tar[MUSB_BULK_EP].txfuncaddr);
        else
                writeb(devnum, &musbr->tar[MUSB_BULK_EP].rxfuncaddr);
+#endif
 
        /* configure the hub address and the port number as required */
        devspeed = get_dev_speed(dev);
@@ -524,6 +959,7 @@ int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
                 */
                config_hub_port(dev, MUSB_BULK_EP);
        } else {
+#ifndef MUSB_NO_MULTIPOINT
                if (dir_out) {
                        writeb(0, &musbr->tar[MUSB_BULK_EP].txhubaddr);
                        writeb(0, &musbr->tar[MUSB_BULK_EP].txhubport);
@@ -531,6 +967,7 @@ int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
                        writeb(0, &musbr->tar[MUSB_BULK_EP].rxhubaddr);
                        writeb(0, &musbr->tar[MUSB_BULK_EP].rxhubport);
                }
+#endif
                devspeed = musb_cfg.musb_speed;
        }
 
@@ -590,7 +1027,8 @@ int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
                                        (len-txlen) : dev->epmaxpacketin[ep];
 
                        /* Set the ReqPkt bit */
-                       writew(MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
+                       csr = readw(&musbr->rxcsr);
+                       writew(csr | MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
 
                        /* Wait until the RxPktRdy bit is set */
                        if (!wait_until_rxep_ready(dev, MUSB_BULK_EP)) {
@@ -634,6 +1072,8 @@ int usb_lowlevel_init(void)
        u8  power;
        u32 timeout;
 
+       musb_rh_init();
+
        if (musb_platform_init() == -1)
                return -1;
 
@@ -696,7 +1136,9 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
 {
        int dir_out = usb_pipeout(pipe);
        int ep = usb_pipeendpoint(pipe);
+#ifndef MUSB_NO_MULTIPOINT
        int devnum = usb_pipedevice(pipe);
+#endif
        u8  type;
        u16 csr;
        u32 txlen = 0;
@@ -706,11 +1148,13 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
        /* select interrupt endpoint */
        writeb(MUSB_INTR_EP, &musbr->index);
 
+#ifndef MUSB_NO_MULTIPOINT
        /* write the address of the device */
        if (dir_out)
                writeb(devnum, &musbr->tar[MUSB_INTR_EP].txfuncaddr);
        else
                writeb(devnum, &musbr->tar[MUSB_INTR_EP].rxfuncaddr);
+#endif
 
        /* configure the hub address and the port number as required */
        devspeed = get_dev_speed(dev);
@@ -723,6 +1167,7 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
                 */
                config_hub_port(dev, MUSB_INTR_EP);
        } else {
+#ifndef MUSB_NO_MULTIPOINT
                if (dir_out) {
                        writeb(0, &musbr->tar[MUSB_INTR_EP].txhubaddr);
                        writeb(0, &musbr->tar[MUSB_INTR_EP].txhubport);
@@ -730,6 +1175,7 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
                        writeb(0, &musbr->tar[MUSB_INTR_EP].rxhubaddr);
                        writeb(0, &musbr->tar[MUSB_INTR_EP].rxhubport);
                }
+#endif
                devspeed = musb_cfg.musb_speed;
        }
 
@@ -755,7 +1201,8 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
                                        (len-txlen) : dev->epmaxpacketin[ep];
 
                        /* Set the ReqPkt bit */
-                       writew(MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
+                       csr = readw(&musbr->rxcsr);
+                       writew(csr | MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
 
                        /* Wait until the RxPktRdy bit is set */
                        if (!wait_until_rxep_ready(dev, MUSB_INTR_EP)) {
index 17e9091a0aa7228cf00e5eb8556d10aeb0fa425d..dde7d37722e123a73673f56e658f7c839ac4bc36 100644 (file)
@@ -38,7 +38,9 @@ extern unsigned char new[];
 #define MUSB_CONTROL_EP 0
 
 /* This defines the endpoint number used for bulk transfer */
-#define MUSB_BULK_EP 1
+#ifndef MUSB_BULK_EP
+# define MUSB_BULK_EP 1
+#endif
 
 /* This defines the endpoint number used for interrupt transfer */
 #define MUSB_INTR_EP 2
@@ -48,6 +50,61 @@ extern unsigned char new[];
        ((readb(&musbr->power) & MUSB_POWER_HSMODE) \
                >> MUSB_POWER_HSMODE_SHIFT)
 
+#define min_t(type, x, y)      \
+       ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; })
+
+/* USB HUB CONSTANTS (not OHCI-specific; see hub.h) */
+
+/* destination of request */
+#define RH_INTERFACE              0x01
+#define RH_ENDPOINT               0x02
+#define RH_OTHER                  0x03
+
+#define RH_CLASS                  0x20
+#define RH_VENDOR                 0x40
+
+/* Requests: bRequest << 8 | bmRequestType */
+#define RH_GET_STATUS          0x0080
+#define RH_CLEAR_FEATURE       0x0100
+#define RH_SET_FEATURE         0x0300
+#define RH_SET_ADDRESS         0x0500
+#define RH_GET_DESCRIPTOR      0x0680
+#define RH_SET_DESCRIPTOR      0x0700
+#define RH_GET_CONFIGURATION   0x0880
+#define RH_SET_CONFIGURATION   0x0900
+#define RH_GET_STATE           0x0280
+#define RH_GET_INTERFACE       0x0A80
+#define RH_SET_INTERFACE       0x0B00
+#define RH_SYNC_FRAME          0x0C80
+/* Our Vendor Specific Request */
+#define RH_SET_EP              0x2000
+
+/* Hub port features */
+#define RH_PORT_CONNECTION        0x00
+#define RH_PORT_ENABLE            0x01
+#define RH_PORT_SUSPEND                   0x02
+#define RH_PORT_OVER_CURRENT      0x03
+#define RH_PORT_RESET             0x04
+#define RH_PORT_POWER             0x08
+#define RH_PORT_LOW_SPEED         0x09
+
+#define RH_C_PORT_CONNECTION      0x10
+#define RH_C_PORT_ENABLE          0x11
+#define RH_C_PORT_SUSPEND         0x12
+#define RH_C_PORT_OVER_CURRENT    0x13
+#define RH_C_PORT_RESET                   0x14
+
+/* Hub features */
+#define RH_C_HUB_LOCAL_POWER      0x00
+#define RH_C_HUB_OVER_CURRENT     0x01
+
+#define RH_DEVICE_REMOTE_WAKEUP           0x00
+#define RH_ENDPOINT_STALL         0x01
+
+#define RH_ACK                    0x01
+#define RH_REQ_ERR                -1
+#define RH_NACK                           0x00
+
 /* extern functions */
 extern int musb_platform_init(void);
 extern void musb_platform_deinit(void);
index ea98c3cac172efe82037cfb84a9bdcf5f65a9cef..3bfd0a085f8e353376bb8218534ccb59f900fe36 100644 (file)
@@ -123,7 +123,10 @@ int musb_platform_init(void)
        }
 
        ret = platform_needs_initialization;
+
+#ifdef CONFIG_TWL4030_USB
 end:
+#endif
        return ret;
 
 }
index ff629761b58ffe7660733b555cd984b57749c3d0..1be2ac266041ba3b205aca83d69880d32c066652 100644 (file)
 #ifndef _GPIO_DEFS_H_
 #define _GPIO_DEFS_H_
 
+#ifndef CONFIG_SOC_DA8XX
 #define DAVINCI_GPIO_BINTEN    0x01C67008
 #define DAVINCI_GPIO_BANK01    0x01C67010
 #define DAVINCI_GPIO_BANK23    0x01C67038
 #define DAVINCI_GPIO_BANK45    0x01C67060
 #define DAVINCI_GPIO_BANK67    0x01C67088
 
+#else /* CONFIG_SOC_DA8XX */
+#define DAVINCI_GPIO_BINTEN    0x01E26008
+#define DAVINCI_GPIO_BANK01    0x01E26010
+#define DAVINCI_GPIO_BANK23    0x01E26038
+#define DAVINCI_GPIO_BANK45    0x01E26060
+#define DAVINCI_GPIO_BANK67    0x01E26088
+#endif /* CONFIG_SOC_DA8XX */
+
 struct davinci_gpio {
        unsigned int dir;
        unsigned int out_data;
@@ -49,4 +58,9 @@ struct davinci_gpio_bank {
        unsigned long base;
 };
 
+#define davinci_gpio_bank01 ((struct davinci_gpio *)DAVINCI_GPIO_BANK01)
+#define davinci_gpio_bank23 ((struct davinci_gpio *)DAVINCI_GPIO_BANK23)
+#define davinci_gpio_bank45 ((struct davinci_gpio *)DAVINCI_GPIO_BANK45)
+#define davinci_gpio_bank67 ((struct davinci_gpio *)DAVINCI_GPIO_BANK67)
+
 #endif
diff --git a/include/asm-blackfin/mach-common/bits/usb.h b/include/asm-blackfin/mach-common/bits/usb.h
new file mode 100644 (file)
index 0000000..c639058
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * USB Masks
+ */
+
+#ifndef __BFIN_PERIPHERAL_USB__
+#define __BFIN_PERIPHERAL_USB__
+
+/* Bit masks for USB_FADDR */
+
+#define FUNCTION_ADDRESS       0x7f    /* Function address */
+
+/* Bit masks for USB_POWER */
+
+#define ENABLE_SUSPENDM                0x1     /* enable SuspendM output */
+#define SUSPEND_MODE           0x2     /* Suspend Mode indicator */
+#define RESUME_MODE            0x4     /* DMA Mode */
+#define RESET                  0x8     /* Reset indicator */
+#define HS_MODE                        0x10    /* High Speed mode indicator */
+#define HS_ENABLE              0x20    /* high Speed Enable */
+#define SOFT_CONN              0x40    /* Soft connect */
+#define ISO_UPDATE             0x80    /* Isochronous update */
+
+/* Bit masks for USB_INTRTX */
+
+#define EP0_TX                 0x1     /* Tx Endpoint 0 interrupt */
+#define EP1_TX                 0x2     /* Tx Endpoint 1 interrupt */
+#define EP2_TX                 0x4     /* Tx Endpoint 2 interrupt */
+#define EP3_TX                 0x8     /* Tx Endpoint 3 interrupt */
+#define EP4_TX                 0x10    /* Tx Endpoint 4 interrupt */
+#define EP5_TX                 0x20    /* Tx Endpoint 5 interrupt */
+#define EP6_TX                 0x40    /* Tx Endpoint 6 interrupt */
+#define EP7_TX                 0x80    /* Tx Endpoint 7 interrupt */
+
+/* Bit masks for USB_INTRRX */
+
+#define EP1_RX                 0x2     /* Rx Endpoint 1 interrupt */
+#define EP2_RX                 0x4     /* Rx Endpoint 2 interrupt */
+#define EP3_RX                 0x8     /* Rx Endpoint 3 interrupt */
+#define EP4_RX                 0x10    /* Rx Endpoint 4 interrupt */
+#define EP5_RX                 0x20    /* Rx Endpoint 5 interrupt */
+#define EP6_RX                 0x40    /* Rx Endpoint 6 interrupt */
+#define EP7_RX                 0x80    /* Rx Endpoint 7 interrupt */
+
+/* Bit masks for USB_INTRTXE */
+
+#define EP0_TX_E               0x1     /* Endpoint 0 interrupt Enable */
+#define EP1_TX_E               0x2     /* Tx Endpoint 1 interrupt enable */
+#define EP2_TX_E               0x4     /* Tx Endpoint 2 interrupt enable */
+#define EP3_TX_E               0x8     /* Tx Endpoint 3 interrupt enable */
+#define EP4_TX_E               0x10    /* Tx Endpoint 4 interrupt enable */
+#define EP5_TX_E               0x20    /* Tx Endpoint 5 interrupt enable */
+#define EP6_TX_E               0x40    /* Tx Endpoint 6 interrupt enable */
+#define EP7_TX_E               0x80    /* Tx Endpoint 7 interrupt enable */
+
+/* Bit masks for USB_INTRRXE */
+
+#define EP1_RX_E               0x02    /* Rx Endpoint 1 interrupt enable */
+#define EP2_RX_E               0x04    /* Rx Endpoint 2 interrupt enable */
+#define EP3_RX_E               0x08    /* Rx Endpoint 3 interrupt enable */
+#define EP4_RX_E               0x10    /* Rx Endpoint 4 interrupt enable */
+#define EP5_RX_E               0x20    /* Rx Endpoint 5 interrupt enable */
+#define EP6_RX_E               0x40    /* Rx Endpoint 6 interrupt enable */
+#define EP7_RX_E               0x80    /* Rx Endpoint 7 interrupt enable */
+
+/* Bit masks for USB_INTRUSB */
+
+#define SUSPEND_B              0x01    /* Suspend indicator */
+#define RESUME_B               0x02    /* Resume indicator */
+#define RESET_OR_BABLE_B       0x04    /* Reset/babble indicator */
+#define SOF_B                  0x08    /* Start of frame */
+#define CONN_B                 0x10    /* Connection indicator */
+#define DISCON_B               0x20    /* Disconnect indicator */
+#define SESSION_REQ_B          0x40    /* Session Request */
+#define VBUS_ERROR_B           0x80    /* Vbus threshold indicator */
+
+/* Bit masks for USB_INTRUSBE */
+
+#define SUSPEND_BE             0x01    /* Suspend indicator int enable */
+#define RESUME_BE              0x02    /* Resume indicator int enable */
+#define RESET_OR_BABLE_BE      0x04    /* Reset/babble indicator int enable */
+#define SOF_BE                 0x08    /* Start of frame int enable */
+#define CONN_BE                        0x10    /* Connection indicator int enable */
+#define DISCON_BE              0x20    /* Disconnect indicator int enable */
+#define SESSION_REQ_BE         0x40    /* Session Request int enable */
+#define VBUS_ERROR_BE          0x80    /* Vbus threshold indicator int enable */
+
+/* Bit masks for USB_FRAME */
+
+#define FRAME_NUMBER           0x7ff   /* Frame number */
+
+/* Bit masks for USB_INDEX */
+
+#define SELECTED_ENDPOINT      0xf     /* selected endpoint */
+
+/* Bit masks for USB_GLOBAL_CTL */
+
+#define GLOBAL_ENA             0x0001  /* enables USB module */
+#define EP1_TX_ENA             0x0002  /* Transmit endpoint 1 enable */
+#define EP2_TX_ENA             0x0004  /* Transmit endpoint 2 enable */
+#define EP3_TX_ENA             0x0008  /* Transmit endpoint 3 enable */
+#define EP4_TX_ENA             0x0010  /* Transmit endpoint 4 enable */
+#define EP5_TX_ENA             0x0020  /* Transmit endpoint 5 enable */
+#define EP6_TX_ENA             0x0040  /* Transmit endpoint 6 enable */
+#define EP7_TX_ENA             0x0080  /* Transmit endpoint 7 enable */
+#define EP1_RX_ENA             0x0100  /* Receive endpoint 1 enable */
+#define EP2_RX_ENA             0x0200  /* Receive endpoint 2 enable */
+#define EP3_RX_ENA             0x0400  /* Receive endpoint 3 enable */
+#define EP4_RX_ENA             0x0800  /* Receive endpoint 4 enable */
+#define EP5_RX_ENA             0x1000  /* Receive endpoint 5 enable */
+#define EP6_RX_ENA             0x2000  /* Receive endpoint 6 enable */
+#define EP7_RX_ENA             0x4000  /* Receive endpoint 7 enable */
+
+/* Bit masks for USB_OTG_DEV_CTL */
+
+#define SESSION                        0x1     /* session indicator */
+#define HOST_REQ               0x2     /* Host negotiation request */
+#define HOST_MODE              0x4     /* indicates USBDRC is a host */
+#define VBUS0                  0x8     /* Vbus level indicator[0] */
+#define VBUS1                  0x10    /* Vbus level indicator[1] */
+#define LSDEV                  0x20    /* Low-speed indicator */
+#define FSDEV                  0x40    /* Full or High-speed indicator */
+#define B_DEVICE               0x80    /* A' or 'B' device indicator */
+
+/* Bit masks for USB_OTG_VBUS_IRQ */
+
+#define DRIVE_VBUS_ON          0x1     /* indicator to drive VBUS control circuit */
+#define DRIVE_VBUS_OFF         0x2     /* indicator to shut off charge pump */
+#define CHRG_VBUS_START                0x4     /* indicator for external circuit to start charging VBUS */
+#define CHRG_VBUS_END          0x8     /* indicator for external circuit to end charging VBUS */
+#define DISCHRG_VBUS_START     0x10    /* indicator to start discharging VBUS */
+#define DISCHRG_VBUS_END       0x20    /* indicator to stop discharging VBUS */
+
+/* Bit masks for USB_OTG_VBUS_MASK */
+
+#define DRIVE_VBUS_ON_ENA      0x01    /* enable DRIVE_VBUS_ON interrupt */
+#define DRIVE_VBUS_OFF_ENA     0x02    /* enable DRIVE_VBUS_OFF interrupt */
+#define CHRG_VBUS_START_ENA    0x04    /* enable CHRG_VBUS_START interrupt */
+#define CHRG_VBUS_END_ENA      0x08    /* enable CHRG_VBUS_END interrupt */
+#define DISCHRG_VBUS_START_ENA 0x10    /* enable DISCHRG_VBUS_START interrupt */
+#define DISCHRG_VBUS_END_ENA   0x20    /* enable DISCHRG_VBUS_END interrupt */
+
+/* Bit masks for USB_CSR0 */
+
+#define RXPKTRDY               0x1     /* data packet receive indicator */
+#define TXPKTRDY               0x2     /* data packet in FIFO indicator */
+#define STALL_SENT             0x4     /* STALL handshake sent */
+#define DATAEND                        0x8     /* Data end indicator */
+#define SETUPEND               0x10    /* Setup end */
+#define SENDSTALL              0x20    /* Send STALL handshake */
+#define SERVICED_RXPKTRDY      0x40    /* used to clear the RxPktRdy bit */
+#define SERVICED_SETUPEND      0x80    /* used to clear the SetupEnd bit */
+#define FLUSHFIFO              0x100   /* flush endpoint FIFO */
+#define STALL_RECEIVED_H       0x4     /* STALL handshake received host mode */
+#define SETUPPKT_H             0x8     /* send Setup token host mode */
+#define ERROR_H                        0x10    /* timeout error indicator host mode */
+#define REQPKT_H               0x20    /* Request an IN transaction host mode */
+#define STATUSPKT_H            0x40    /* Status stage transaction host mode */
+#define NAK_TIMEOUT_H          0x80    /* EP0 halted after a NAK host mode */
+
+/* Bit masks for USB_COUNT0 */
+
+#define EP0_RX_COUNT           0x7f    /* number of received bytes in EP0 FIFO */
+
+/* Bit masks for USB_NAKLIMIT0 */
+
+#define EP0_NAK_LIMIT          0x1f    /* frames/micro frames count after which EP0 timeouts */
+
+/* Bit masks for USB_TX_MAX_PACKET */
+
+#define MAX_PACKET_SIZE_T      0x7ff   /* maximum data pay load in a frame */
+
+/* Bit masks for USB_RX_MAX_PACKET */
+
+#define MAX_PACKET_SIZE_R      0x7ff   /* maximum data pay load in a frame */
+
+/* Bit masks for USB_TXCSR */
+
+#define TXPKTRDY_T             0x1     /* data packet in FIFO indicator */
+#define FIFO_NOT_EMPTY_T       0x2     /* FIFO not empty */
+#define UNDERRUN_T             0x4     /* TxPktRdy not set for an IN token */
+#define FLUSHFIFO_T            0x8     /* flush endpoint FIFO */
+#define STALL_SEND_T           0x10    /* issue a Stall handshake */
+#define STALL_SENT_T           0x20    /* Stall handshake transmitted */
+#define CLEAR_DATATOGGLE_T     0x40    /* clear endpoint data toggle */
+#define INCOMPTX_T             0x80    /* indicates that a large packet is split */
+#define DMAREQMODE_T           0x400   /* DMA mode (0 or 1) selection */
+#define FORCE_DATATOGGLE_T     0x800   /* Force data toggle */
+#define DMAREQ_ENA_T           0x1000  /* Enable DMA request for Tx EP */
+#define ISO_T                  0x4000  /* enable Isochronous transfers */
+#define AUTOSET_T              0x8000  /* allows TxPktRdy to be set automatically */
+#define ERROR_TH               0x4     /* error condition host mode */
+#define STALL_RECEIVED_TH      0x20    /* Stall handshake received host mode */
+#define NAK_TIMEOUT_TH         0x80    /* NAK timeout host mode */
+
+/* Bit masks for USB_TXCOUNT */
+
+#define TX_COUNT               0x1fff  /* Byte len for the selected endpoint Tx FIFO */
+
+/* Bit masks for USB_RXCSR */
+
+#define RXPKTRDY_R             0x1     /* data packet in FIFO indicator */
+#define FIFO_FULL_R            0x2     /* FIFO not empty */
+#define OVERRUN_R              0x4     /* TxPktRdy not set for an IN token */
+#define DATAERROR_R            0x8     /* Out packet cannot be loaded into Rx FIFO */
+#define FLUSHFIFO_R            0x10    /* flush endpoint FIFO */
+#define STALL_SEND_R           0x20    /* issue a Stall handshake */
+#define STALL_SENT_R           0x40    /* Stall handshake transmitted */
+#define CLEAR_DATATOGGLE_R     0x80    /* clear endpoint data toggle */
+#define INCOMPRX_R             0x100   /* indicates that a large packet is split */
+#define DMAREQMODE_R           0x800   /* DMA mode (0 or 1) selection */
+#define DISNYET_R              0x1000  /* disable Nyet handshakes */
+#define DMAREQ_ENA_R           0x2000  /* Enable DMA request for Tx EP */
+#define ISO_R                  0x4000  /* enable Isochronous transfers */
+#define AUTOCLEAR_R            0x8000  /* allows TxPktRdy to be set automatically */
+#define ERROR_RH               0x4     /* TxPktRdy not set for an IN token host mode */
+#define REQPKT_RH              0x20    /* request an IN transaction host mode */
+#define STALL_RECEIVED_RH      0x40    /* Stall handshake received host mode */
+#define INCOMPRX_RH            0x100   /* large packet is split host mode */
+#define DMAREQMODE_RH          0x800   /* DMA mode (0 or 1) selection host mode */
+#define AUTOREQ_RH             0x4000  /* sets ReqPkt automatically host mode */
+
+/* Bit masks for USB_RXCOUNT */
+
+#define RX_COUNT               0x1fff  /* Packet byte len in the Rx FIFO */
+
+/* Bit masks for USB_TXTYPE */
+
+#define TARGET_EP_NO_T         0xf     /* EP number */
+#define PROTOCOL_T             0xc     /* transfer type */
+
+/* Bit masks for USB_TXINTERVAL */
+
+#define TX_POLL_INTERVAL       0xff    /* polling interval for selected Tx EP */
+
+/* Bit masks for USB_RXTYPE */
+
+#define TARGET_EP_NO_R         0xf     /* EP number */
+#define PROTOCOL_R             0xc     /* transfer type */
+
+/* Bit masks for USB_RXINTERVAL */
+
+#define RX_POLL_INTERVAL       0xff    /* polling interval for selected Rx EP */
+
+/* Bit masks for USB_DMA_INTERRUPT */
+
+#define DMA0_INT               0x1     /* DMA0 pending interrupt */
+#define DMA1_INT               0x2     /* DMA1 pending interrupt */
+#define DMA2_INT               0x4     /* DMA2 pending interrupt */
+#define DMA3_INT               0x8     /* DMA3 pending interrupt */
+#define DMA4_INT               0x10    /* DMA4 pending interrupt */
+#define DMA5_INT               0x20    /* DMA5 pending interrupt */
+#define DMA6_INT               0x40    /* DMA6 pending interrupt */
+#define DMA7_INT               0x80    /* DMA7 pending interrupt */
+
+/* Bit masks for USB_DMAxCONTROL */
+
+#define DMA_ENA                        0x1     /* DMA enable */
+#define DIRECTION              0x2     /* direction of DMA transfer */
+#define MODE                   0x4     /* DMA Bus error */
+#define INT_ENA                        0x8     /* Interrupt enable */
+#define EPNUM                  0xf0    /* EP number */
+#define BUSERROR               0x100   /* DMA Bus error */
+
+#endif
index af0853b0d7e9fd5f65377992dce354369cbb0a36..796707eaf749592618c7d3d4fd344b97d2689274 100644 (file)
 #endif
 #endif
 
+/* Enable TSEC2.0 for the platforms that have it if we are using TSEC */
+#if defined(CONFIG_TSEC_ENET) && \
+    (defined(CONFIG_P1020) || defined(CONFIG_P1011))
+#define CONFIG_TSECV2
+#endif
+
+/* Number of TLB CAM entries we have on FSL Book-E chips */
+#if defined(CONFIG_E500MC)
+#define CONFIG_SYS_NUM_TLBCAMS 64
+#elif defined(CONFIG_E500)
+#define CONFIG_SYS_NUM_TLBCAMS 16
+#endif
+
 /* Relocation to SDRAM works on all PPC boards */
 #define CONFIG_RELOC_FIXUP_WORKS
 
index 69b857b41cd1eb31f65e9b133d50a250927848f8..3216a506331eacb9169767f520b703a7b9f06ca9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Freescale Semiconductor, Inc.
+ * Copyright 2008-2009 Freescale Semiconductor, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -177,6 +177,11 @@ typedef struct memctl_options_s {
        unsigned int clk_adjust;                /* */
        unsigned int cpo_override;
        unsigned int write_data_delay;          /* DQS adjust */
+
+       unsigned int wrlvl_override;
+       unsigned int wrlvl_sample;              /* Write leveling */
+       unsigned int wrlvl_start;
+
        unsigned int half_strength_driver_enable;
        unsigned int twoT_en;
        unsigned int threeT_en;
@@ -187,6 +192,7 @@ typedef struct memctl_options_s {
        /* Rtt impedance */
        unsigned int rtt_override;              /* rtt_override enable */
        unsigned int rtt_override_value;        /* that is Rtt_Nom for DDR3 */
+       unsigned int rtt_wr_override_value;     /* this is Rtt_WR for DDR3 */
 
        /* Automatic self refresh */
        unsigned int auto_self_refresh_en;
index 31bb7545b5343eadb8700f95f83f0092b9fccec8..34c56a259a653c57fa9a822dc86c1100f529e697 100644 (file)
@@ -46,6 +46,8 @@ enum law_size {
        LAW_SIZE_32G,
 };
 
+#define law_size_bits(sz)      (__ilog2_u64(sz) - 1)
+
 #ifdef CONFIG_FSL_CORENET
 enum law_trgt_if {
        LAW_TRGT_IF_PCIE_1 = 0x00,
@@ -78,6 +80,7 @@ enum law_trgt_if {
        LAW_TRGT_IF_CCSR = 0x08,
        LAW_TRGT_IF_DDR_INTRLV = 0x0b,
        LAW_TRGT_IF_RIO = 0x0c,
+       LAW_TRGT_IF_RIO_2 = 0x0d,
        LAW_TRGT_IF_DDR = 0x0f,
        LAW_TRGT_IF_DDR_2 = 0x16,       /* 2nd controller */
 };
index a5f72f5cd5f2591b81d91a2ef061a98c452e6cee..db61e7e9cbfe135b87c8dee9c140b0fd3da4735f 100644 (file)
@@ -1,4 +1,5 @@
-/* (C) Copyright 2007 Freescale Semiconductor, Inc.
+/*
+ * Copyright 2007,2009 Freescale Semiconductor, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -22,9 +23,9 @@
 
 #include <asm/fsl_law.h>
 
-int is_fsl_pci_agent(enum law_trgt_if trgt, u32 host_agent);
 int is_fsl_pci_cfg(enum law_trgt_if trgt, u32 io_sel);
 
+int fsl_setup_hose(struct pci_controller *hose, unsigned long addr);
 int fsl_is_pci_agent(struct pci_controller *hose);
 void fsl_pci_init(struct pci_controller *hose, u32 cfg_addr, u32 cfg_data);
 void fsl_pci_config_unlock(struct pci_controller *hose);
index 55e7e2066d8e69cce2b082ab71cc50b48c8586e8..3f119187464fc0696596c9022cfd46c0d81654ea 100644 (file)
@@ -107,6 +107,9 @@ typedef     struct  global_data {
 #if defined(CONFIG_FSL_LAW)
        u32 used_laws;
 #endif
+#if defined(CONFIG_E500)
+       u32 used_tlb_cams[(CONFIG_SYS_NUM_TLBCAMS+31)/32];
+#endif
 #if defined(CONFIG_MPC5xxx)
        unsigned long   ipb_clk;
        unsigned long   pci_clk;
index c60a7d21c3244da5849a8f6dd53805a4e6e8c42a..6b42a73f3f6fc802c7c82ae3fc4a3c41ea299ed9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2004-2009 Freescale Semiconductor, Inc.
+ * Copyright 2004-2009 Freescale Semiconductor, Inc.
  *
  * MPC83xx Internal Memory Map
  *
@@ -868,4 +868,10 @@ typedef struct immap {
 #endif
 #define CONFIG_SYS_MPC83xx_USB_ADDR \
                        (CONFIG_SYS_IMMR + CONFIG_SYS_MPC83xx_USB_OFFSET)
+
+#define CONFIG_SYS_TSEC1_OFFSET                0x24000
+#define CONFIG_SYS_MDIO1_OFFSET                0x24000
+
+#define TSEC_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
+#define MDIO_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET)
 #endif                         /* __IMMAP_83xx__ */
index 41942954b80ba18b2fa124739e2f7ba91268885a..957ad76a7964d09728456260a3a5c60f1885f154 100644 (file)
@@ -6,6 +6,23 @@
  * Copyright(c) 2002,2003 Motorola Inc.
  * Xianghua Xiao (x.xiao@motorola.com)
  *
+ * 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
  */
 
 #ifndef __IMMAP_85xx__
@@ -1545,6 +1562,78 @@ typedef struct par_io {
        u8      res[8];
 } par_io_t;
 
+#ifdef CONFIG_SYS_FSL_CPC
+/*
+ * Define a single offset that is the start of all the CPC register
+ * blocks - if there is more than one CPC, we expect these to be
+ * contiguous 4k regions
+ */
+
+typedef struct cpc_corenet {
+       u32     cpccsr0;        /* Config/status reg */
+       u32     res1;
+       u32     cpccfg0;        /* Configuration register */
+       u32     res2;
+       u32     cpcewcr0;       /* External Write reg 0 */
+       u32     cpcewabr0;      /* External write base reg 0 */
+       u32     res3[2];
+       u32     cpcewcr1;       /* External Write reg 1 */
+       u32     cpcewabr1;      /* External write base reg 1 */
+       u32     res4[54];
+       u32     cpcsrcr1;       /* SRAM control reg 1 */
+       u32     cpcsrcr0;       /* SRAM control reg 0 */
+       u32     res5[62];
+       struct {
+               u32     id;     /* partition ID */
+               u32     res;
+               u32     alloc;  /* partition allocation */
+               u32     way;    /* partition way */
+       } partition_regs[16];
+       u32     res6[704];
+       u32     cpcerrinjhi;    /* Error injection high */
+       u32     cpcerrinjlo;    /* Error injection lo */
+       u32     cpcerrinjctl;   /* Error injection control */
+       u32     res7[5];
+       u32     cpccaptdatahi;  /* capture data high */
+       u32     cpccaptdatalo;  /* capture data low */
+       u32     cpcaptecc;      /* capture ECC */
+       u32     res8[5];
+       u32     cpcerrdet;      /* error detect */
+       u32     cpcerrdis;      /* error disable */
+       u32     cpcerrinten;    /* errir interrupt enable */
+       u32     cpcerrattr;     /* error attribute */
+       u32     cpcerreaddr;    /* error extended address */
+       u32     cpcerraddr;     /* error address */
+       u32     cpcerrctl;      /* error control */
+       u32     res9[105];      /* pad out to 4k */
+} cpc_corenet_t;
+
+#define CPC_CSR0_CE    0x80000000      /* Cache Enable */
+#define CPC_CSR0_PE    0x40000000      /* Enable ECC */
+#define CPC_CSR0_FI    0x00200000      /* Cache Flash Invalidate */
+#define CPC_CSR0_WT    0x00080000      /* Write-through mode */
+#define CPC_CSR0_FL    0x00000800      /* Hardware cache flush */
+#define CPC_CSR0_LFC   0x00000400      /* Cache Lock Flash Clear */
+#define CPC_CFG0_SZ_MASK       0x00003fff
+#define CPC_CFG0_SZ_K(x)       ((x & CPC_CFG0_SZ_MASK) << 6)
+#define CPC_CFG0_NUM_WAYS(x)   (((x >> 14) & 0x1f) + 1)
+#define CPC_CFG0_LINE_SZ(x)    ((((x >> 23) & 0x3) + 1) * 32)
+#define CPC_SRCR1_SRBARU_MASK  0x0000ffff
+#define CPC_SRCR1_SRBARU(x)    (((unsigned long long)x >> 32) \
+                                & CPC_SRCR1_SRBARU_MASK)
+#define        CPC_SRCR0_SRBARL_MASK   0xffff8000
+#define CPC_SRCR0_SRBARL(x)    (x & CPC_SRCR0_SRBARL_MASK)
+#define CPC_SRCR0_INTLVEN      0x00000100
+#define CPC_SRCR0_SRAMSZ_1_WAY 0x00000000
+#define CPC_SRCR0_SRAMSZ_2_WAY 0x00000002
+#define CPC_SRCR0_SRAMSZ_4_WAY 0x00000004
+#define CPC_SRCR0_SRAMSZ_8_WAY 0x00000006
+#define CPC_SRCR0_SRAMSZ_16_WAY        0x00000008
+#define CPC_SRCR0_SRAMSZ_32_WAY        0x0000000a
+#define CPC_SRCR0_SRAMEN       0x00000001
+#define        CPC_ERRDIS_TMHITDIS     0x00000080      /* multi-way hit disable */
+#endif /* CONFIG_SYS_FSL_CPC */
+
 /* Global Utilities Block */
 #ifdef CONFIG_FSL_CORENET
 typedef struct ccsr_gur {
@@ -1847,17 +1936,86 @@ typedef struct ccsr_gur {
 } ccsr_gur_t;
 #endif
 
+typedef struct serdes_corenet {
+       struct {
+               u32     rstctl; /* Reset Control Register */
+#define SRDS_RSTCTL_RST                0x80000000
+#define SRDS_RSTCTL_RSTDONE    0x40000000
+#define SRDS_RSTCTL_RSTERR     0x20000000
+               u32     pllcr0; /* PLL Control Register 0 */
+               u32     pllcr1; /* PLL Control Register 1 */
+#define SRDS_PLLCR1_PLL_BWSEL  0x08000000
+               u32     res[5];
+       } bank[3];
+       u32     res1[12];
+       u32     srdstcalcr;     /* TX Calibration Control */
+       u32     res2[3];
+       u32     srdsrcalcr;     /* RX Calibration Control */
+       u32     res3[3];
+       u32     srdsgr0;        /* General Register 0 */
+       u32     res4[11];
+       u32     srdspccr0;      /* Protocol Converter Config 0 */
+       u32     srdspccr1;      /* Protocol Converter Config 1 */
+       u32     srdspccr2;      /* Protocol Converter Config 2 */
+#define SRDS_PCCR2_RST_XGMII1          0x00800000
+#define SRDS_PCCR2_RST_XGMII2          0x00400000
+       u32     res5[197];
+       struct {
+               u32     gcr0;   /* General Control Register 0 */
+#define SRDS_GCR0_RRST                 0x00400000
+#define SRDS_GCR0_1STLANE              0x00010000
+               u32     gcr1;   /* General Control Register 1 */
+#define SRDS_GCR1_REIDL_CTL_MASK       0x001f0000
+#define SRDS_GCR1_REIDL_CTL_PCIE       0x00100000
+#define SRDS_GCR1_REIDL_CTL_SRIO       0x00000000
+#define SRDS_GCR1_REIDL_CTL_SGMII      0x00040000
+#define SRDS_GCR1_OPAD_CTL             0x04000000
+               u32     res1[4];
+               u32     tecr0;  /* TX Equalization Control Reg 0 */
+#define SRDS_TECR0_TEQ_TYPE_MASK       0x30000000
+#define SRDS_TECR0_TEQ_TYPE_2LVL       0x10000000
+               u32     res3;
+               u32     ttlcr0; /* Transition Tracking Loop Ctrl 0 */
+               u32     res4[7];
+       } lane[24];
+       u32 res6[384];
+} serdes_corenet_t;
+
+enum {
+       FSL_SRDS_B1_LANE_A = 0,
+       FSL_SRDS_B1_LANE_B = 1,
+       FSL_SRDS_B1_LANE_C = 2,
+       FSL_SRDS_B1_LANE_D = 3,
+       FSL_SRDS_B1_LANE_E = 4,
+       FSL_SRDS_B1_LANE_F = 5,
+       FSL_SRDS_B1_LANE_G = 6,
+       FSL_SRDS_B1_LANE_H = 7,
+       FSL_SRDS_B1_LANE_I = 8,
+       FSL_SRDS_B1_LANE_J = 9,
+       FSL_SRDS_B2_LANE_A = 16,
+       FSL_SRDS_B2_LANE_B = 17,
+       FSL_SRDS_B2_LANE_C = 18,
+       FSL_SRDS_B2_LANE_D = 19,
+       FSL_SRDS_B3_LANE_A = 20,
+       FSL_SRDS_B3_LANE_B = 21,
+       FSL_SRDS_B3_LANE_C = 22,
+       FSL_SRDS_B3_LANE_D = 23,
+};
+
 #ifdef CONFIG_FSL_CORENET
 #define CONFIG_SYS_FSL_CORENET_CCM_OFFSET      0x0000
 #define CONFIG_SYS_MPC85xx_DDR_OFFSET          0x8000
 #define CONFIG_SYS_MPC85xx_DDR2_OFFSET         0x9000
 #define CONFIG_SYS_FSL_CORENET_CLK_OFFSET      0xE1000
 #define CONFIG_SYS_FSL_CORENET_RCPM_OFFSET     0xE2000
+#define CONFIG_SYS_FSL_CORENET_SERDES_OFFSET   0xEA000
+#define CONFIG_SYS_FSL_CPC_OFFSET              0x10000
 #define CONFIG_SYS_MPC85xx_DMA_OFFSET          0x100000
 #define CONFIG_SYS_MPC85xx_ESPI_OFFSET         0x110000
 #define CONFIG_SYS_MPC85xx_ESDHC_OFFSET                0x114000
 #define CONFIG_SYS_MPC85xx_LBC_OFFSET          0x124000
 #define CONFIG_SYS_MPC85xx_GPIO_OFFSET         0x130000
+#define CONFIG_SYS_MPC85xx_USB_OFFSET          0x210000
 #define CONFIG_SYS_FSL_CORENET_QMAN_OFFSET     0x318000
 #define CONFIG_SYS_FSL_CORENET_BMAN_OFFSET     0x31a000
 #else
@@ -1874,6 +2032,12 @@ typedef struct ccsr_gur {
 #define CONFIG_SYS_MPC85xx_L2_OFFSET           0x20000
 #define CONFIG_SYS_MPC85xx_DMA_OFFSET          0x21000
 #define CONFIG_SYS_MPC85xx_USB_OFFSET          0x22000
+#ifdef CONFIG_TSECV2
+#define CONFIG_SYS_TSEC1_OFFSET                        0xB0000
+#else
+#define CONFIG_SYS_TSEC1_OFFSET                        0x24000
+#endif
+#define CONFIG_SYS_MDIO1_OFFSET                        0x24000
 #define CONFIG_SYS_MPC85xx_ESDHC_OFFSET                0x2e000
 #define CONFIG_SYS_MPC85xx_SERDES2_OFFSET      0xE3100
 #define CONFIG_SYS_MPC85xx_SERDES1_OFFSET      0xE3000
@@ -1883,6 +2047,8 @@ typedef struct ccsr_gur {
 #define CONFIG_SYS_MPC85xx_PIC_OFFSET          0x40000
 #define CONFIG_SYS_MPC85xx_GUTS_OFFSET         0xE0000
 
+#define CONFIG_SYS_FSL_CPC_ADDR        \
+       (CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_CPC_OFFSET)
 #define CONFIG_SYS_FSL_CORENET_QMAN_ADDR \
        (CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_QMAN_OFFSET)
 #define CONFIG_SYS_FSL_CORENET_BMAN_ADDR \
@@ -1929,7 +2095,12 @@ typedef struct ccsr_gur {
        (CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SERDES2_OFFSET)
 #define CONFIG_SYS_MPC85xx_SERDES2_ADDR \
        (CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_SERDES2_OFFSET)
+#define CONFIG_SYS_FSL_CORENET_SERDES_ADDR \
+       (CONFIG_SYS_IMMR + CONFIG_SYS_FSL_CORENET_SERDES_OFFSET)
 #define CONFIG_SYS_MPC85xx_USB_ADDR \
        (CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_USB_OFFSET)
 
+#define TSEC_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
+#define MDIO_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET)
+
 #endif /*__IMMAP_85xx__*/
index fdfc654f294b31c2e71e27822e74c0add0fd0f8f..098f25384b7b5ee568beb96f43f71a83f62a60b7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * MPC86xx Internal Memory Map
  *
- * Copyright(c) 2004 Freescale Semiconductor
+ * Copyright 2004 Freescale Semiconductor
  * Jeff Brown (Jeffrey@freescale.com)
  * Srikanth Srinivasan (srikanth.srinivasan@freescale.com)
  *
@@ -1298,4 +1298,10 @@ extern immap_t  *immr;
 #define CONFIG_SYS_MPC86xx_DMA_OFFSET  (0x21000)
 #define CONFIG_SYS_MPC86xx_DMA_ADDR    (CONFIG_SYS_IMMR + CONFIG_SYS_MPC86xx_DMA_OFFSET)
 
+#define CONFIG_SYS_TSEC1_OFFSET                0x24000
+#define CONFIG_SYS_MDIO1_OFFSET                0x24000
+
+#define TSEC_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
+#define MDIO_BASE_ADDR         (CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET)
+
 #endif /*__IMMAP_86xx__*/
index ec22a5058e1c0b2b829284246c8cf7bcec374b76..fd1024947d94e58e3725f4505198a142fd357e3f 100644 (file)
@@ -479,6 +479,8 @@ extern void disable_tlb(u8 esel);
 extern void invalidate_tlb(u8 tlb);
 extern void init_tlbs(void);
 extern int find_tlb_idx(void *addr, u8 tlbsel);
+extern void init_used_tlb_cams(void);
+extern int find_free_tlbcam(void);
 
 extern unsigned int setup_ddr_tlbs(unsigned int memsize_in_meg);
 
index f61778f864b5248da6133fe3a21592ea087b8342..c6da4116308c28c1cb198eb30b7c75b7ebdfe267 100644 (file)
 #endif
 #endif
 
+#define IS_SVR_REV(svr, maj, min) \
+       ((SVR_MAJ(svr) == maj) && (SVR_MIN(svr) == min))
+
 /*
  * SVR_SOC_VER() Version Values
  */
index 91369a71e11342cfdcbafc0d313d964ee024dbfa..49a86fd4ccfd54cd2c99fe12892ef1ff76ddffbf 100644 (file)
  */
 #define CONFIG_SYS_PCI_PHYS            0x80000000      /* 1G PCI TLB */
 
-#define CONFIG_SYS_PCI1_MEM_BASE       0x80000000
-#define CONFIG_SYS_PCI1_MEM_PHYS       CONFIG_SYS_PCI1_MEM_BASE
+#define CONFIG_SYS_PCI1_MEM_BUS                0x80000000
+#define CONFIG_SYS_PCI1_MEM_PHYS       CONFIG_SYS_PCI1_MEM_BUS
 #define CONFIG_SYS_PCI1_MEM_SIZE       0x20000000      /* 512M */
-#define CONFIG_SYS_PCI1_IO_BASE        0x00000000
+#define CONFIG_SYS_PCI1_IO_BUS 0x00000000
 #define CONFIG_SYS_PCI1_IO_PHYS        0xe2000000
 #define CONFIG_SYS_PCI1_IO_SIZE        0x00100000      /* 1M */
 
 #ifdef CONFIG_PCI2
-#define CONFIG_SYS_PCI2_MEM_BASE       0xC0000000
-#define CONFIG_SYS_PCI2_MEM_PHYS       CONFIG_SYS_PCI2_MEM_BASE
+#define CONFIG_SYS_PCI2_MEM_BUS                0xC0000000
+#define CONFIG_SYS_PCI2_MEM_PHYS       CONFIG_SYS_PCI2_MEM_BUS
 #define CONFIG_SYS_PCI2_MEM_SIZE       0x20000000      /* 512M */
-#define CONFIG_SYS_PCI2_IO_BASE        0x00000000
+#define CONFIG_SYS_PCI2_IO_BUS 0x00000000
 #define CONFIG_SYS_PCI2_IO_PHYS        0xe2800000
 #define CONFIG_SYS_PCI2_IO_SIZE        0x00100000      /* 1M */
 #endif
 
 #ifdef CONFIG_PCIE1
-#define CONFIG_SYS_PCIE1_MEM_BASE      0xa0000000
-#define CONFIG_SYS_PCIE1_MEM_PHYS      CONFIG_SYS_PCIE1_MEM_BASE
+#define CONFIG_SYS_PCIE1_MEM_BUS       0xa0000000
+#define CONFIG_SYS_PCIE1_MEM_PHYS      CONFIG_SYS_PCIE1_MEM_BUS
 #define CONFIG_SYS_PCIE1_MEM_SIZE      0x20000000      /* 512M */
-#define CONFIG_SYS_PCIE1_IO_BASE       0x00000000
+#define CONFIG_SYS_PCIE1_IO_BUS                0x00000000
 #define CONFIG_SYS_PCIE1_IO_PHYS       0xe3000000
 #define CONFIG_SYS_PCIE1_IO_SIZE       0x00100000      /*   1M */
 #endif
index 79376b3c570cbe4769ff8c6d3c67c7b69b848706..cfed4ca9f88564b30f8eea2ba4b2bb912be0463b 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
+#ifdef CONFIG_MK_NAND
+#define CONFIG_NAND_U_BOOT             1
+#define CONFIG_RAMBOOT_TEXT_BASE       0x00100000
+#endif
+
 /*
  * High Level Configuration Options
  */
        HRCWL_SVCOD_DIV_2 |\
        HRCWL_CSB_TO_CLKIN_2X1 |\
        HRCWL_CORE_TO_CSB_3X1)
-#define CONFIG_SYS_HRCW_HIGH (\
+#define CONFIG_SYS_HRCW_HIGH_BASE (\
        HRCWH_PCI_HOST |\
        HRCWH_PCI1_ARBITER_ENABLE |\
        HRCWH_CORE_ENABLE |\
-       HRCWH_FROM_0X00000100 |\
        HRCWH_BOOTSEQ_DISABLE |\
        HRCWH_SW_WATCHDOG_DISABLE |\
-       HRCWH_ROM_LOC_LOCAL_16BIT |\
-       HRCWH_RL_EXT_LEGACY |\
        HRCWH_TSEC1M_IN_RGMII |\
        HRCWH_TSEC2M_IN_RGMII |\
        HRCWH_BIG_ENDIAN |\
        HRCWH_LALE_NORMAL)
 
+#ifdef CONFIG_NAND_SPL
+#define CONFIG_SYS_HRCW_HIGH (CONFIG_SYS_HRCW_HIGH_BASE |\
+                      HRCWH_FROM_0XFFF00100 |\
+                      HRCWH_ROM_LOC_NAND_SP_8BIT |\
+                      HRCWH_RL_EXT_NAND)
+#else
+#define CONFIG_SYS_HRCW_HIGH (CONFIG_SYS_HRCW_HIGH_BASE |\
+                      HRCWH_FROM_0X00000100 |\
+                      HRCWH_ROM_LOC_LOCAL_16BIT |\
+                      HRCWH_RL_EXT_LEGACY)
+#endif
+
 /*
  * System IO Config
  */
  */
 #define CONFIG_SYS_IMMR                0xE0000000
 
+#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CONFIG_DEFAULT_IMMR    CONFIG_SYS_IMMR
+#endif
+
 /*
  * Arbiter Setup
  */
  */
 #define CONFIG_SYS_MONITOR_BASE        TEXT_BASE /* start of monitor */
 
-#if (CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE)
-#define CONFIG_SYS_RAMBOOT
-#else
-#undef CONFIG_SYS_RAMBOOT
-#endif
-
 #define CONFIG_SYS_MONITOR_LEN         (384 * 1024) /* Reserve 384 kB for Mon */
 #define CONFIG_SYS_MALLOC_LEN          (512 * 1024) /* Reserved for malloc */
 
 #define CONFIG_SYS_LBLAWBAR0_PRELIM    CONFIG_SYS_FLASH_BASE /* Window base at flash base */
 #define CONFIG_SYS_LBLAWAR0_PRELIM     0x80000016 /* 8MB window size */
 
-#define CONFIG_SYS_BR0_PRELIM          ( CONFIG_SYS_FLASH_BASE /* Flash Base address */ \
+#define CONFIG_SYS_NOR_BR_PRELIM       (CONFIG_SYS_FLASH_BASE \
                                | (2 << BR_PS_SHIFT)    /* 16 bit port size */ \
                                | BR_V )                /* valid */
-#define CONFIG_SYS_OR0_PRELIM          ( (~(CONFIG_SYS_FLASH_SIZE - 1) << 20) \
+#define CONFIG_SYS_NOR_OR_PRELIM       ((~(CONFIG_SYS_FLASH_SIZE - 1) << 20) \
                                | OR_UPM_XAM \
                                | OR_GPCM_CSNT \
                                | OR_GPCM_ACS_DIV2 \
 /*
  * NAND Flash on the Local Bus
  */
-#define CONFIG_SYS_NAND_BASE           0xE0600000      /* 0xE0600000 */
+
+#ifdef CONFIG_NAND_SPL
+#define CONFIG_SYS_NAND_BASE           0xFFF00000
+#else
+#define CONFIG_SYS_NAND_BASE           0xE0600000
+#endif
+
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_MTD_NAND_VERIFY_WRITE   1
 #define CONFIG_CMD_NAND                        1
 #define CONFIG_NAND_FSL_ELBC           1
+#define CONFIG_SYS_NAND_BLOCK_SIZE 16384
+
+#define CONFIG_SYS_NAND_U_BOOT_SIZE  (512 << 10)
+#define CONFIG_SYS_NAND_U_BOOT_DST   0x00100000
+#define CONFIG_SYS_NAND_U_BOOT_START 0x00100100
+#define CONFIG_SYS_NAND_U_BOOT_OFFS  16384
+#define CONFIG_SYS_NAND_U_BOOT_RELOC 0x00010000
 
-#define CONFIG_SYS_BR1_PRELIM  ( CONFIG_SYS_NAND_BASE \
+#define CONFIG_SYS_NAND_BR_PRELIM      (CONFIG_SYS_NAND_BASE \
                                | (2<<BR_DECC_SHIFT)    /* Use HW ECC */ \
                                | BR_PS_8               /* Port Size = 8 bit */ \
                                | BR_MS_FCM             /* MSEL = FCM */ \
                                | BR_V )                /* valid */
-#define CONFIG_SYS_OR1_PRELIM  ( 0xFFFF8000            /* length 32K */ \
+#define CONFIG_SYS_NAND_OR_PRELIM      (0xFFFF8000     /* length 32K */ \
                                | OR_FCM_CSCT \
                                | OR_FCM_CST \
                                | OR_FCM_CHT \
                                | OR_FCM_EHTR )
                                /* 0xFFFF8396 */
 
+#ifdef CONFIG_NAND_U_BOOT
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_NAND_BR_PRELIM
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_NAND_OR_PRELIM
+#define CONFIG_SYS_BR1_PRELIM CONFIG_SYS_NOR_BR_PRELIM
+#define CONFIG_SYS_OR1_PRELIM CONFIG_SYS_NOR_OR_PRELIM
+#else
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_NOR_BR_PRELIM
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_NOR_OR_PRELIM
+#define CONFIG_SYS_BR1_PRELIM CONFIG_SYS_NAND_BR_PRELIM
+#define CONFIG_SYS_OR1_PRELIM CONFIG_SYS_NAND_OR_PRELIM
+#endif
+
 #define CONFIG_SYS_LBLAWBAR1_PRELIM    CONFIG_SYS_NAND_BASE
 #define CONFIG_SYS_LBLAWAR1_PRELIM     0x8000000E      /* 32KB  */
 
+#define CONFIG_SYS_NAND_LBLAWBAR_PRELIM CONFIG_SYS_LBLAWBAR1_PRELIM
+#define CONFIG_SYS_NAND_LBLAWAR_PRELIM CONFIG_SYS_LBLAWAR1_PRELIM
+
+#if CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE && \
+       !defined(CONFIG_NAND_SPL)
+#define CONFIG_SYS_RAMBOOT
+#else
+#undef CONFIG_SYS_RAMBOOT
+#endif
+
 /*
  * Serial Port
  */
 #define CONFIG_SYS_NS16550
 #define CONFIG_SYS_NS16550_SERIAL
 #define CONFIG_SYS_NS16550_REG_SIZE    1
-#define CONFIG_SYS_NS16550_CLK         get_bus_freq(0)
+#define CONFIG_SYS_NS16550_CLK         (CONFIG_83XX_CLKIN * 2)
 
 #define CONFIG_SYS_BAUDRATE_TABLE  \
        {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
 /*
  * Environment
  */
-#ifndef CONFIG_SYS_RAMBOOT
+#if defined(CONFIG_NAND_U_BOOT)
+       #define CONFIG_ENV_IS_IN_NAND   1
+       #define CONFIG_ENV_OFFSET               (512 * 1024)
+       #define CONFIG_ENV_SECT_SIZE    CONFIG_SYS_NAND_BLOCK_SIZE
+       #define CONFIG_ENV_SIZE         CONFIG_ENV_SECT_SIZE
+       #define CONFIG_ENV_SIZE_REDUND  CONFIG_ENV_SIZE
+       #define CONFIG_ENV_RANGE        (CONFIG_ENV_SECT_SIZE * 4)
+       #define CONFIG_ENV_OFFSET_REDUND        (CONFIG_ENV_OFFSET + \
+                                                CONFIG_ENV_RANGE)
+#elif !defined(CONFIG_SYS_RAMBOOT)
        #define CONFIG_ENV_IS_IN_FLASH  1
        #define CONFIG_ENV_ADDR         (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
        #define CONFIG_ENV_SECT_SIZE    0x10000 /* 64K(one sector) for env */
 #define CONFIG_CMD_DATE
 #define CONFIG_CMD_PCI
 
-#if defined(CONFIG_SYS_RAMBOOT)
+#if defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_NAND_U_BOOT)
     #undef CONFIG_CMD_SAVEENV
     #undef CONFIG_CMD_LOADS
 #endif
 
 /* FLASH: icache cacheable, but dcache-inhibit and guarded */
 #define CONFIG_SYS_IBAT2L      (CONFIG_SYS_FLASH_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
-#define CONFIG_SYS_IBAT2U      (CONFIG_SYS_FLASH_BASE | BATU_BL_8M | BATU_VS | BATU_VP)
+#define CONFIG_SYS_IBAT2U      (CONFIG_SYS_FLASH_BASE | BATU_BL_32M | \
+                                BATU_VS | BATU_VP)
 #define CONFIG_SYS_DBAT2L      (CONFIG_SYS_FLASH_BASE | BATL_PP_10 | \
                        BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
 #define CONFIG_SYS_DBAT2U      CONFIG_SYS_IBAT2U
index 1e659e27a76a0c714ca66d48b6b3cf53b67737ca..e16f0e147b095e44f0295845d44172192db19af3 100644 (file)
@@ -277,6 +277,10 @@ extern unsigned long get_clock_freq(void);
 #define PLPDIR1_I2C_BIT_MASK           0x0000000F
 #define PLPDIR1_I2C2_VAL               0x0000000F
 #define PLPDIR1_ESDHC_VAL              0x00000006
+#define PLPPAR1_UART0_BIT_MASK         0x00000fc0
+#define PLPPAR1_ESDHC_4BITS_VAL                0x00000a80
+#define PLPDIR1_UART0_BIT_MASK         0x00000fc0
+#define PLPDIR1_ESDHC_4BITS_VAL                0x00000a80
 
 /*
  * General PCI
index 41e4a6e8a5d8fa077796a0502d2691955155056a..78b73695bc38843fd48f036b701ecbc679a295ca 100644 (file)
@@ -98,7 +98,6 @@ extern unsigned long get_board_ddr_clk(unsigned long dummy);
 #define CONFIG_SYS_PCIE1_ADDR          (CONFIG_SYS_CCSRBAR+0xa000)
 
 /* DDR Setup */
-#define CONFIG_SYS_DDR_TLB_START 9
 #define CONFIG_VERY_BIG_RAM
 #define CONFIG_FSL_DDR2
 #undef CONFIG_FSL_DDR_INTERACTIVE
index ddfe7aabdcf9977585bf178548b40f817498fbe1..15bfeefa46cb5f84022cb5cab8de73464d827f60 100644 (file)
@@ -149,8 +149,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #define CONFIG_SYS_DDR_ERR_DIS         0x00000000
 #define CONFIG_SYS_DDR_SBE             0x00FF0000
 
-#define CONFIG_SYS_DDR_TLB_START 9
-
 /*
  * Memory map
  *
index df9ab34e80fbeee799eefa6e72d793f31aea6fd7..f4509bd090a7782b9dcc77cf1120e03563d567f3 100644 (file)
@@ -101,7 +101,6 @@ extern unsigned long calculate_board_ddr_clk(unsigned long dummy);
 #define CONFIG_SYS_PCIE1_ADDR          (CONFIG_SYS_CCSRBAR+0xa000)
 
 /* DDR Setup */
-#define CONFIG_SYS_DDR_TLB_START 9
 #define CONFIG_VERY_BIG_RAM
 #define CONFIG_FSL_DDR3                1
 #undef CONFIG_FSL_DDR_INTERACTIVE
index 38e2ce1f1c60f987520ceeb9be36d56ac49352e0..432cd57a70a40b7c9b9a35f80b2dccdf2331cf89 100644 (file)
 #define CONFIG_SYS_ENV_SPI_MAX_HZ      CONFIG_SF_DEFAULT_SPEED
 #endif
 
+/*
+ * USB configuration
+ */
+#define CONFIG_USB_DA8XX       /* Platform hookup to MUSB controller */
+#define CONFIG_MUSB_HCD
 
 /*
  * U-Boot general configuration
 #endif
 
 #ifdef CONFIG_USB_DA8XX
-#define CONFIG_CMD_USB         /* include support for usb      */
-#define CONFIG_CMD_STORAGE     /* include support for usb      */
-#define CONFIG_CMD_FAT         /* include support for FAT/storage*/
-#define CONFIG_DOS_PARTITION   /* include support for FAT/storage*/
-#endif
 
+#ifdef CONFIG_MUSB_HCD         /* include support for usb host */
+#define CONFIG_CMD_USB         /* include support for usb cmd */
+
+#define CONFIG_USB_STORAGE     /* MSC class support */
+#define CONFIG_CMD_STORAGE     /* inclue support for usb-storage cmd */
+#define CONFIG_CMD_FAT         /* inclue support for FAT/storage */
+#define CONFIG_DOS_PARTITION   /* inclue support for FAT/storage */
+
+#ifdef CONFIG_USB_KEYBOARD     /* HID class support */
+#define CONFIG_SYS_USB_EVENT_POLL
+#define CONFIG_PREBOOT "usb start"
+#endif /* CONFIG_USB_KEYBOARD */
+
+#endif /* CONFIG_MUSB_HCD */
+
+#ifdef CONFIG_MUSB_UDC
+/* USB device configuration */
+#define CONFIG_USB_DEVICE              1
+#define CONFIG_USB_TTY                 1
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV   1
+/* Change these to suit your needs */
+#define CONFIG_USBD_VENDORID           0x0451
+#define CONFIG_USBD_PRODUCTID          0x5678
+#define CONFIG_USBD_MANUFACTURER       "Texas Instruments"
+#define CONFIG_USBD_PRODUCT_NAME       "DA830EVM"
+#endif /* CONFIG_MUSB_UDC */
+
+#endif /* CONFIG_USB_DA8XX */
 #endif /* __CONFIG_H */
index bec08dab1fffa32dc6551dc8b41d00a3213513b0..b0233265058a72c41b826cb996a56d7d11914885 100644 (file)
  */
 #define CONFIG_SYS_IMMR                0xE0000000
 
+/*
+ * Bus Arbitration Configuration Register (ACR)
+ */
+#define CONFIG_SYS_ACR_PIPE_DEP 3       /* pipeline depth 4 transactions */
+#define CONFIG_SYS_ACR_RPTCNT   3       /* 4 consecutive transactions */
+#define CONFIG_SYS_ACR_APARK    0       /* park bus to master (below) */
+#define CONFIG_SYS_ACR_PARKM    3       /* parking master = QuiccEngine */
+
 /*
  * DDR Setup
  */
index 5788d581afae2fa95deaa54b6695a6ff862a8536..568d9fc0cd5e3c2736da32225dcab64c32ab5840 100644 (file)
 
 /* USB */
 #ifdef CONFIG_440EPX
+
+#undef CONFIG_USB_EHCI /* OHCI by default */
+
+#ifdef CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_PPC4XX
+#define CONFIG_SYS_PPC4XX_USB_ADDR     0xe0000300
+#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
+#define CONFIG_EHCI_MMIO_BIG_ENDIAN
+#define CONFIG_EHCI_DESC_BIG_ENDIAN
+#ifdef CONFIG_4xx_DCACHE
+#define CONFIG_EHCI_DCACHE
+#endif
+#else /* CONFIG_USB_EHCI */
 #define CONFIG_USB_OHCI_NEW
-#define CONFIG_USB_STORAGE
 #define CONFIG_SYS_OHCI_BE_CONTROLLER
 
 #undef CONFIG_SYS_USB_OHCI_BOARD_INIT
 #define CONFIG_SYS_USB_OHCI_REGS_BASE  CONFIG_SYS_USB_HOST
 #define CONFIG_SYS_USB_OHCI_SLOT_NAME  "ppc440"
 #define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15
+#endif
 
+#define CONFIG_USB_STORAGE
 /* Comment this out to enable USB 1.1 device */
 #define USB_2_0_DEVICE
 
index f9db73b2dcdf3fbd38d08fcfff176aa229ed449d..dbc15b297f9131f123a6068901db58cc26aaa807 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
+/*
+ * Top level Makefile configuration choices
+ */
+#ifdef CONFIG_MK_caddy2
+#define VME_CADDY2
+#endif
+
 /*
  * High Level Configuration Options
  */
@@ -43,6 +50,8 @@
 #define CONFIG_MPC8349         1       /* MPC8349 specific */
 #define CONFIG_VME8349         1       /* ESD VME8349 board specific */
 
+#define CONFIG_MISC_INIT_R
+
 #define CONFIG_PCI
 /* Don't enable PCI2 on vme834x - it doesn't exist physically. */
 #undef CONFIG_MPC83XX_PCI2             /* support for 2nd PCI controller */
@@ -75,7 +84,9 @@
  */
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_DDR_ECC_CMD             /* use DDR ECC user commands */
-#undef CONFIG_SPD_EEPROM               /* dont use SPD EEPROM for DDR setup*/
+#define CONFIG_SPD_EEPROM
+#define SPD_EEPROM_ADDRESS             0x54
+#define CONFIG_SYS_READ_SPD            vme8349_read_spd
 #define CONFIG_SYS_83XX_DDR_USES_CS0   /* esd; Fsl board uses CS2/CS3 */
 
 /*
 #define CONFIG_SYS_DDR_SDRAM_CLK_CNTL  (DDR_SDRAM_CLK_CNTL_SS_EN | \
                                         DDR_SDRAM_CLK_CNTL_CLK_ADJUST_075)
 #define CONFIG_DDR_2T_TIMING
-
-/*
- * Manually set up DDR parameters
- */
-#define CONFIG_SYS_DDR_SIZE            512     /* MB */
-
-#if (CONFIG_SYS_DDR_SIZE == 512)
-#define CONFIG_SYS_DDR_CONFIG          (CSCONFIG_EN | CSCONFIG_ROW_BIT_13 | \
-                                        CSCONFIG_COL_BIT_10 | \
-                                        CSCONFIG_BANK_BIT_3)
-#endif
-
-/*
- * Manually set up DDR parameters
- */
-#define CONFIG_SYS_DDR_TIMING_0                0x00220802
-#define CONFIG_SYS_DDR_TIMING_1                0x39377322
-#define CONFIG_SYS_DDR_TIMING_2                0x2f9848ca      /* P9-45, tuning? */
-#define CONFIG_SYS_DDR_TIMING_3                0x00000000
-#define CONFIG_SYS_DDR_CONTROL         0xc2000000      /* unbuf,no DYN_PWR */
-#define CONFIG_SYS_DDR_MODE            0x07940242
-#define CONFIG_SYS_DDR_MODE2           0x00000000
-/* autocharge,no open page */
-#define CONFIG_SYS_DDR_INTERVAL                0x04060100
-#define CONFIG_SYS_DDR_SDRAM_CFG       0x63000000
-#define CONFIG_SYS_DDR_SDRAM_CFG2      0x04061000
+#define CONFIG_SYS_DDRCDR              0x80080001
 
 /*
  * FLASH on the Local Bus
  */
 #define CONFIG_SYS_FLASH_CFI
 #define CONFIG_FLASH_CFI_DRIVER                                /* use the CFI driver */
-#define CONFIG_SYS_FLASH_BASE          0xf8000000      /* start of FLASH   */
-#define CONFIG_SYS_FLASH_SIZE           128            /* flash size in MB */
-/* #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE */
+#ifdef VME_CADDY2
+#define CONFIG_SYS_FLASH_BASE          0xffc00000      /* start of FLASH   */
+#define CONFIG_SYS_FLASH_SIZE          4               /* flash size in MB */
+#define CONFIG_SYS_BR0_PRELIM          (CONFIG_SYS_FLASH_BASE | \
+                                        (2 << BR_PS_SHIFT) |   /*  32bit */ \
+                                        BR_V)                  /* valid */
 
+#define CONFIG_SYS_OR0_PRELIM          0xffc06ff7      /*   4 MB flash size */
+#define CONFIG_SYS_LBLAWBAR0_PRELIM    CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_LBLAWAR0_PRELIM     0x80000015      /*   4 MB window size */
+#else
+#define CONFIG_SYS_FLASH_BASE          0xf8000000      /* start of FLASH   */
+#define CONFIG_SYS_FLASH_SIZE          128             /* flash size in MB */
 #define CONFIG_SYS_BR0_PRELIM          (CONFIG_SYS_FLASH_BASE | \
                                         (2 << BR_PS_SHIFT) |   /*  32bit */ \
                                         BR_V)                  /* valid */
 
-#define CONFIG_SYS_OR0_PRELIM          0xF8006FF7      /* 128 MB flash size */
+#define CONFIG_SYS_OR0_PRELIM          0xf8006ff7      /* 128 MB flash size */
 #define CONFIG_SYS_LBLAWBAR0_PRELIM    CONFIG_SYS_FLASH_BASE
-#define CONFIG_SYS_LBLAWAR0_PRELIM     0x8000001A      /* 128 MB window size */
+#define CONFIG_SYS_LBLAWAR0_PRELIM     0x8000001a      /* 128 MB window size */
+#endif
+/* #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE */
 
 #define CONFIG_SYS_BR1_PRELIM          (0xf0000000 | 0x00001801)
-#define CONFIG_SYS_OR1_PRELIM          (0xffff8000 | 0x00000200)
+#define CONFIG_SYS_OR1_PRELIM          (0xfffc0008 | 0x00000200)
 #define CONFIG_SYS_LBLAWBAR1_PRELIM    0xf0000000
-#define CONFIG_SYS_LBLAWAR1_PRELIM     (0x80000000 | 0x0000000e)
+#define CONFIG_SYS_LBLAWAR1_PRELIM     (0x80000000 | 0x00000011)
 
 #define CONFIG_SYS_MAX_FLASH_BANKS     1       /* number of banks */
 #define CONFIG_SYS_MAX_FLASH_SECT      1024    /* sectors per device*/
 #if (CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE)
 #define CONFIG_SYS_RAMBOOT
 #else
-#undef  CONFIG_SYS_RAMBOOT
+#undef CONFIG_SYS_RAMBOOT
 #endif
 
 #define CONFIG_SYS_INIT_RAM_LOCK       1
 
 /*
  * Local Bus LCRR and LBCR regs
- *    LCRR:  DLL bypass, Clock divider is 4
+ *    LCRR:  no DLL bypass, Clock divider is 4
  * External Local Bus rate is
  *    CLKIN * HRCWL_CSB_TO_CLKIN / HRCWL_LCL_BUS_TO_SCB_CLK / LCRR_CLKDIV
  */
-#define CONFIG_SYS_LCRR_DBYP   LCRR_DBYP
 #define CONFIG_SYS_LCRR_CLKDIV LCRR_CLKDIV_4
 #define CONFIG_SYS_LBC_LBCR    0x00000000
 
 #undef PCI_ONE_PCI1
 #endif
 
-#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
-#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
-
+#ifndef VME_CADDY2
 #define CONFIG_NET_MULTI
+#endif
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
 
 #undef CONFIG_EEPRO100
 #undef CONFIG_TULIP
        #define PCI_IDSEL_NUMBER        0xFIXME
 #endif
 
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x1957  /* Freescale */
+
 #endif /* CONFIG_PCI */
 
 /*
  * TSEC configuration
  */
+#ifdef VME_CADDY2
+#define CONFIG_E1000
+#else
 #define CONFIG_TSEC_ENET               /* TSEC ethernet support */
+#endif
 
 #if defined(CONFIG_TSEC_ENET)
 #ifndef CONFIG_NET_MULTI
 #define CONFIG_NET_MULTI
 #endif
 
-#define CONFIG_GMII                   /* MII PHY management */
+#define CONFIG_GMII                    /* MII PHY management */
 #define CONFIG_TSEC1
 #define CONFIG_TSEC1_NAME      "TSEC0"
 #define CONFIG_TSEC2
 
 #endif /* CONFIG_TSEC_ENET */
 
+#if defined(CONFIG_E1000)
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI
+#endif
+#endif
+
 /*
  * Environment
  */
 #define CONFIG_BOOTDELAY       6       /* -1 disables auto-boot */
 #undef  CONFIG_BOOTARGS                        /* boot command will set bootargs */
 
-#define CONFIG_BAUDRATE         115200
+#define CONFIG_BAUDRATE         9600
 
 #define        CONFIG_EXTRA_ENV_SETTINGS                                       \
        "netdev=eth0\0"                                                 \
 
 #define CONFIG_BOOTCOMMAND     "run flash_self"
 
+#ifndef __ASSEMBLY__
+int vme8349_read_spd(unsigned char chip, unsigned int addr, int alen,
+                    unsigned char *buffer, int len);
+#endif
+
 #endif /* __CONFIG_H */
index 0ac303406060565543825748f9edb6177dd8d683..f56723a153508d7f9f85384616bb891992f203dd 100644 (file)
@@ -7,7 +7,7 @@
  *  terms of the GNU Public License, Version 2, incorporated
  *  herein by reference.
  *
- * Copyright 2004, 2007 Freescale Semiconductor, Inc.
+ * Copyright 2004, 2007, 2009  Freescale Semiconductor, Inc.
  * (C) Copyright 2003, Motorola, Inc.
  * maintained by Xianghua Xiao (x.xiao@motorola.com)
  * author Andy Fleming
 #include <net.h>
 #include <config.h>
 
-#ifndef CONFIG_SYS_TSEC1_OFFSET
-    #define CONFIG_SYS_TSEC1_OFFSET    (0x24000)
-#endif
-
-#define TSEC_SIZE      0x01000
-
-/* FIXME:  Should these be pushed back to 83xx and 85xx config files? */
-#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) \
-       || defined(CONFIG_MPC83xx)
-    #define TSEC_BASE_ADDR     (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET)
-#endif
+#define TSEC_SIZE              0x01000
+#define TSEC_MDIO_OFFSET       0x01000
 
 #define STD_TSEC_INFO(num) \
 {                      \
        .regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)), \
-       .miiregs = (tsec_t *)TSEC_BASE_ADDR, \
+       .miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR), \
+       .miiregs_sgmii = (tsec_mdio_t *)(MDIO_BASE_ADDR \
+                                        + (num - 1) * TSEC_MDIO_OFFSET), \
        .devname = CONFIG_TSEC##num##_NAME, \
        .phyaddr = TSEC##num##_PHY_ADDR, \
        .flags = TSEC##num##_FLAGS \
@@ -44,7 +37,9 @@
 #define SET_STD_TSEC_INFO(x, num) \
 {                      \
        x.regs = (tsec_t *)(TSEC_BASE_ADDR + ((num - 1) * TSEC_SIZE)); \
-       x.miiregs = (tsec_t *)TSEC_BASE_ADDR; \
+       x.miiregs = (tsec_mdio_t *)(MDIO_BASE_ADDR); \
+       x.miiregs_sgmii = (tsec_mdio_t *)(MDIO_BASE_ADDR \
+                                         + (num - 1) * TSEC_MDIO_OFFSET); \
        x.devname = CONFIG_TSEC##num##_NAME; \
        x.phyaddr = TSEC##num##_PHY_ADDR; \
        x.flags = TSEC##num##_FLAGS;\
@@ -461,6 +456,22 @@ typedef struct tsec_hash_regs
        uint    res2[24];
 } tsec_hash_t;
 
+typedef struct tsec_mdio {
+       uint    res1[4];
+       uint    ieventm;
+       uint    imaskm;
+       uint    res2;
+       uint    emapm;
+       uint    res3[320];
+       uint    miimcfg;        /* MII Management: Configuration */
+       uint    miimcom;        /* MII Management: Command */
+       uint    miimadd;        /* MII Management: Address */
+       uint    miimcon;        /* MII Management: Control */
+       uint    miimstat;       /* MII Management: Status */
+       uint    miimind;        /* MII Management: Indicators */
+       uint    res4[690];
+} tsec_mdio_t;
+
 typedef struct tsec
 {
        /* General Control and Status Registers (0x2_n000) */
@@ -526,12 +537,7 @@ typedef struct tsec
 
        uint    res51c;
 
-       uint    miimcfg;        /* MII Management: Configuration */
-       uint    miimcom;        /* MII Management: Command */
-       uint    miimadd;        /* MII Management: Address */
-       uint    miimcon;        /* MII Management: Control */
-       uint    miimstat;       /* MII Management: Status */
-       uint    miimind;        /* MII Management: Indicators */
+       uint    resmdio[6];
 
        uint    res538;
 
@@ -571,7 +577,8 @@ typedef struct tsec
 
 struct tsec_private {
        volatile tsec_t *regs;
-       volatile tsec_t *phyregs;
+       volatile tsec_mdio_t *phyregs;
+       volatile tsec_mdio_t *phyregs_sgmii;
        struct phy_info *phyinfo;
        uint phyaddr;
        u32 flags;
@@ -630,7 +637,8 @@ struct phy_info {
 
 struct tsec_info_struct {
        tsec_t *regs;
-       tsec_t *miiregs;
+       tsec_mdio_t *miiregs;
+       tsec_mdio_t *miiregs_sgmii;
        char *devname;
        unsigned int phyaddr;
        u32 flags;
index 1cc3e4229daed2c528da4e16d73e601a616a15ea..a1f09d4d7ae1e48c0ecee71629ba624e340bbe90 100644 (file)
@@ -132,7 +132,8 @@ struct usb_device {
        defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \
        defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
        defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
-       defined(CONFIG_USB_OMAP3)
+       defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \
+       defined(CONFIG_USB_BLACKFIN)
 
 int usb_lowlevel_init(void);
 int usb_lowlevel_stop(void);