Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx

Conflicts:
	drivers/usb/host/ehci-pci.c

Signed-off-by: Wolfgang Denk <wd@denx.de>
diff --git a/drivers/misc/fsl_law.c b/drivers/misc/fsl_law.c
index 031c974..3233ff2 100644
--- a/drivers/misc/fsl_law.c
+++ b/drivers/misc/fsl_law.c
@@ -24,6 +24,7 @@
  */
 
 #include <common.h>
+#include <linux/compiler.h>
 #include <asm/fsl_law.h>
 #include <asm/io.h>
 
@@ -246,6 +247,25 @@
 #error FSL_HW_NUM_LAWS can not be greater than 32 w/o code changes
 #endif
 
+	/* 
+	 * Any LAWs that were set up before we booted assume they are meant to
+	 * be around and mark them used.
+	 */
+	for (i = 0; i < FSL_HW_NUM_LAWS; i++) {
+		u32 lawar = in_be32(LAWAR_ADDR(i));
+		
+		if (lawar & LAW_EN)
+			gd->used_laws |= (1 << i);
+	}
+
+#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+	/*
+	 * in NAND boot we've already parsed the law_table and setup those LAWs
+	 * so don't do it again.
+	 */
+	return;
+#endif
+
 	for (i = 0; i < num_law_entries; i++) {
 		if (law_table[i].index == -1)
 			set_next_law(law_table[i].addr, law_table[i].size,
diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
index 9c8fe62..9a91b9e 100644
--- a/drivers/net/tsec.c
+++ b/drivers/net/tsec.c
@@ -1810,6 +1810,28 @@
 	},
 };
 
+struct phy_info phy_info_AR8021 =  {
+        0x4dd04,
+        "AR8021",
+        4,
+        (struct phy_cmd[]) { /* config */
+                {MII_BMCR, BMCR_RESET, NULL},
+                {MII_BMCR, BMCR_ANENABLE|BMCR_ANRESTART, NULL},
+                {0x1d, 0x05, NULL},
+                {0x1e, 0x3D47, NULL},
+                {miim_end,}
+        },
+        (struct phy_cmd[]) { /* startup */
+                {MII_BMSR, miim_read, NULL},
+                {MII_BMSR, miim_read, &mii_parse_sr},
+                {MII_BMSR, miim_read, &mii_parse_link},
+                {miim_end,}
+        },
+        (struct phy_cmd[]) { /* shutdown */
+                {miim_end,}
+        }
+};
+
 static struct phy_info *phy_info[] = {
 	&phy_info_cis8204,
 	&phy_info_cis8201,
@@ -1832,6 +1854,7 @@
 	&phy_info_VSC8221,
 	&phy_info_dp83865,
 	&phy_info_rtl8211b,
+	&phy_info_AR8021,
 	&phy_info_generic,	/* must be last; has ID 0 and 32 bit mask */
 	NULL
 };
diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
index dc34bd6..ab461b4 100644
--- a/drivers/pci/fsl_pci_init.c
+++ b/drivers/pci/fsl_pci_init.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007-2010 Freescale Semiconductor, Inc.
+ * Copyright 2007-2011 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 published by the Free
@@ -223,6 +223,7 @@
 	u32 cfg_data = (u32)&((ccsr_fsl_pci_t *)pci_info->regs)->cfg_data;
 	u16 temp16;
 	u32 temp32;
+	u32 block_rev;
 	int enabled, r, inbound = 0;
 	u16 ltssm;
 	u8 temp8, pcie_cap;
@@ -232,13 +233,20 @@
 
 	/* Initialize ATMU registers based on hose regions and flags */
 	volatile pot_t *po = &pci->pot[1];	/* skip 0 */
-	volatile pit_t *pi = &pci->pit[2];	/* ranges from: 3 to 1 */
+	volatile pit_t *pi;
 
 	u64 out_hi = 0, out_lo = -1ULL;
 	u32 pcicsrbar, pcicsrbar_sz;
 
 	pci_setup_indirect(hose, cfg_addr, cfg_data);
 
+	block_rev = in_be32(&pci->block_rev1);
+	if (PEX_IP_BLK_REV_2_2 <= block_rev) {
+		pi = &pci->pit[2];	/* 0xDC0 */
+	} else {
+		pi = &pci->pit[3];	/* 0xDE0 */
+	}
+
 	/* Handle setup of outbound windows first */
 	for (r = 0; r < hose->region_count; r++) {
 		unsigned long flags = hose->regions[r].flags;
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index 2b68f7b..4abe5e3 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -29,6 +29,7 @@
 static struct pci_device_id ehci_pci_ids[] = {
 	/* Please add supported PCI EHCI controller ids here */
 	{0x1033, 0x00E0},	/* NEC */
+	{0x10B9, 0x5239},	/* ULI1575 PCI EHCI module ids */
 	{0x12D8, 0x400F},	/* Pericom */
 	{0, 0}
 };