]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_universe.c
dm: tpm: Convert LPC driver to driver model
[karo-tx-uboot.git] / common / cmd_universe.c
index a8febff02aad29ae0ebaaf39282e609ab7faf13b..c9310363f10edb53ea1b81e910fd41dc7b0ba513 100644 (file)
@@ -1,23 +1,7 @@
 /*
  * (C) Copyright 2003 Stefan Roese, stefan.roese@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
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -28,8 +12,6 @@
 
 #include <universe.h>
 
-#if (CONFIG_COMMANDS & CFG_CMD_UNIVERSE)
-
 #define PCI_VENDOR PCI_VENDOR_ID_TUNDRA
 #define PCI_DEVICE PCI_DEVICE_ID_TUNDRA_CA91C042
 
@@ -48,7 +30,7 @@ static UNI_DEV   *dev;
 
 int universe_init(void)
 {
-       int j, result, lastError = 0;
+       int j, result;
        pci_dev_t busdevfn;
        unsigned int val;
 
@@ -72,6 +54,9 @@ int universe_init(void)
        dev->busdevfn = busdevfn;
 
        pci_read_config_dword(busdevfn, PCI_BASE_ADDRESS_1, &val);
+       if (val & 1) {
+               pci_read_config_dword(busdevfn, PCI_BASE_ADDRESS_0, &val);
+       }
        val &= ~0xf;
        dev->uregs = (UNIVERSE *)val;
 
@@ -102,7 +87,13 @@ int universe_init(void)
         *   Arbitration Mode
         *   DTACK Enable
         */
-       writel(0x15060000, &dev->uregs->misc_ctl);
+       writel(0x15040000 | (readl(&dev->uregs->misc_ctl) & 0x00020000), &dev->uregs->misc_ctl);
+
+       if (readl(&dev->uregs->misc_ctl) & 0x00020000) {
+               debug ("System Controller!\n"); /* test-only */
+       } else {
+               debug ("Not System Controller!\n"); /* test-only */
+       }
 
        /*
         * Lets turn off interrupts
@@ -114,12 +105,12 @@ int universe_init(void)
        writel(0x0000, &dev->uregs->lint_map1);  /* Map all ints to 0 */
        eieio();
 
+       return 0;
+
  break_30:
        free(dev);
  break_20:
-       lastError = result;
-
-       return 0;
+       return result;
 }
 
 
@@ -193,13 +184,13 @@ int universe_pci_slave_window(unsigned int pciAddr, unsigned int vmeAddr, int si
 
        switch (pms & PCI_MS_Mxx) {
        case PCI_MS_MEM:
-               ctl = 0x00000000;
+               ctl |= 0x00000000;
                break;
        case PCI_MS_IO:
-               ctl = 0x00000001;
+               ctl |= 0x00000001;
                break;
        case PCI_MS_CONFIG:
-               ctl = 0x00000002;
+               ctl |= 0x00000002;
                break;
        }
 
@@ -278,13 +269,13 @@ int universe_vme_slave_window(unsigned int vmeAddr, unsigned int pciAddr, int si
 
        switch (pms & PCI_MS_Mxx) {
        case PCI_MS_MEM:
-               ctl = 0x00000000;
+               ctl |= 0x00000000;
                break;
        case PCI_MS_IO:
-               ctl = 0x00000001;
+               ctl |= 0x00000001;
                break;
        case PCI_MS_CONFIG:
-               ctl = 0x00000002;
+               ctl |= 0x00000002;
                break;
        }
 
@@ -308,7 +299,7 @@ int universe_vme_slave_window(unsigned int vmeAddr, unsigned int pciAddr, int si
 /*
  * Tundra Universe configuration
  */
-int do_universe(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_universe(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        ulong addr1 = 0, addr2 = 0, size = 0, vam = 0, pms = 0, vdw = 0;
        char cmd = 'x';
@@ -355,7 +346,7 @@ int do_universe(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(
        universe,       8,      1,      do_universe,
-       "universe- initialize and configure Turndra Universe\n",
+       "initialize and configure Turndra Universe",
        "init\n"
        "    - initialize universe\n"
        "universe vme [vme_addr] [pci_addr] [size] [vam] [pms]\n"
@@ -373,7 +364,5 @@ U_BOOT_CMD(
        "                                      03 -> Configuration Space\n"
        "    [vdw] = VMEbus Maximum Datawidth: 01 -> D8 Data Width\n"
        "                                      02 -> D16 Data Width\n"
-       "                                      03 -> D32 Data Width\n"
+       "                                      03 -> D32 Data Width"
 );
-
-#endif /* (CONFIG_COMMANDS & CFG_CMD_UNIVERSE) */