aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-kirkwood/common.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2010-08-16 13:42:58 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-08-16 13:42:58 -0400
commite4862f2f6f5653dfb67f3ba2b6f0bc74516ed51a (patch)
tree1db5a0540a4eecfad9b7daee476b985e82ddc810 /arch/arm/mach-kirkwood/common.c
parentec62dbd7eb8e3dddb221da89ecbcea0fc3dee8c1 (diff)
parentb2c1e07b81a126e5846dfc3d36f559d861df59f4 (diff)
Merge branch 'for-2.6.36' into for-2.6.37
Fairly simple conflicts, the most serious ones are the i.MX ones which I suspect now need another rename. Conflicts: arch/arm/mach-mx2/clock_imx27.c arch/arm/mach-mx2/devices.c arch/arm/mach-omap2/board-rx51-peripherals.c arch/arm/mach-omap2/board-zoom2.c sound/soc/fsl/mpc5200_dma.c sound/soc/fsl/mpc5200_dma.h sound/soc/fsl/mpc8610_hpcd.c sound/soc/pxa/spitz.c
Diffstat (limited to 'arch/arm/mach-kirkwood/common.c')
-rw-r--r--arch/arm/mach-kirkwood/common.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
index 07690132cdbf..0f6ee32678ef 100644
--- a/arch/arm/mach-kirkwood/common.c
+++ b/arch/arm/mach-kirkwood/common.c
@@ -45,6 +45,11 @@ static struct map_desc kirkwood_io_desc[] __initdata = {
45 .length = KIRKWOOD_PCIE_IO_SIZE, 45 .length = KIRKWOOD_PCIE_IO_SIZE,
46 .type = MT_DEVICE, 46 .type = MT_DEVICE,
47 }, { 47 }, {
48 .virtual = KIRKWOOD_PCIE1_IO_VIRT_BASE,
49 .pfn = __phys_to_pfn(KIRKWOOD_PCIE1_IO_PHYS_BASE),
50 .length = KIRKWOOD_PCIE1_IO_SIZE,
51 .type = MT_DEVICE,
52 }, {
48 .virtual = KIRKWOOD_REGS_VIRT_BASE, 53 .virtual = KIRKWOOD_REGS_VIRT_BASE,
49 .pfn = __phys_to_pfn(KIRKWOOD_REGS_PHYS_BASE), 54 .pfn = __phys_to_pfn(KIRKWOOD_REGS_PHYS_BASE),
50 .length = KIRKWOOD_REGS_SIZE, 55 .length = KIRKWOOD_REGS_SIZE,
@@ -403,7 +408,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data)
403 u32 dev, rev; 408 u32 dev, rev;
404 409
405 kirkwood_pcie_id(&dev, &rev); 410 kirkwood_pcie_id(&dev, &rev);
406 if (rev == 0) /* catch all Kirkwood Z0's */ 411 if (rev == 0 && dev != MV88F6282_DEV_ID) /* catch all Kirkwood Z0's */
407 mvsdio_data->clock = 100000000; 412 mvsdio_data->clock = 100000000;
408 else 413 else
409 mvsdio_data->clock = 200000000; 414 mvsdio_data->clock = 200000000;
@@ -848,8 +853,10 @@ int __init kirkwood_find_tclk(void)
848 u32 dev, rev; 853 u32 dev, rev;
849 854
850 kirkwood_pcie_id(&dev, &rev); 855 kirkwood_pcie_id(&dev, &rev);
851 if (dev == MV88F6281_DEV_ID && (rev == MV88F6281_REV_A0 || 856
852 rev == MV88F6281_REV_A1)) 857 if ((dev == MV88F6281_DEV_ID && (rev == MV88F6281_REV_A0 ||
858 rev == MV88F6281_REV_A1)) ||
859 (dev == MV88F6282_DEV_ID))
853 return 200000000; 860 return 200000000;
854 861
855 return 166666667; 862 return 166666667;
@@ -934,13 +941,22 @@ static char * __init kirkwood_id(void)
934 return "MV88F6192-Z0"; 941 return "MV88F6192-Z0";
935 else if (rev == MV88F6192_REV_A0) 942 else if (rev == MV88F6192_REV_A0)
936 return "MV88F6192-A0"; 943 return "MV88F6192-A0";
944 else if (rev == MV88F6192_REV_A1)
945 return "MV88F6192-A1";
937 else 946 else
938 return "MV88F6192-Rev-Unsupported"; 947 return "MV88F6192-Rev-Unsupported";
939 } else if (dev == MV88F6180_DEV_ID) { 948 } else if (dev == MV88F6180_DEV_ID) {
940 if (rev == MV88F6180_REV_A0) 949 if (rev == MV88F6180_REV_A0)
941 return "MV88F6180-Rev-A0"; 950 return "MV88F6180-Rev-A0";
951 else if (rev == MV88F6180_REV_A1)
952 return "MV88F6180-Rev-A1";
942 else 953 else
943 return "MV88F6180-Rev-Unsupported"; 954 return "MV88F6180-Rev-Unsupported";
955 } else if (dev == MV88F6282_DEV_ID) {
956 if (rev == MV88F6282_REV_A0)
957 return "MV88F6282-Rev-A0";
958 else
959 return "MV88F6282-Rev-Unsupported";
944 } else { 960 } else {
945 return "Device-Unknown"; 961 return "Device-Unknown";
946 } 962 }
@@ -993,12 +1009,14 @@ void __init kirkwood_init(void)
993static int __init kirkwood_clock_gate(void) 1009static int __init kirkwood_clock_gate(void)
994{ 1010{
995 unsigned int curr = readl(CLOCK_GATING_CTRL); 1011 unsigned int curr = readl(CLOCK_GATING_CTRL);
1012 u32 dev, rev;
996 1013
1014 kirkwood_pcie_id(&dev, &rev);
997 printk(KERN_DEBUG "Gating clock of unused units\n"); 1015 printk(KERN_DEBUG "Gating clock of unused units\n");
998 printk(KERN_DEBUG "before: 0x%08x\n", curr); 1016 printk(KERN_DEBUG "before: 0x%08x\n", curr);
999 1017
1000 /* Make sure those units are accessible */ 1018 /* Make sure those units are accessible */
1001 writel(curr | CGC_SATA0 | CGC_SATA1 | CGC_PEX0, CLOCK_GATING_CTRL); 1019 writel(curr | CGC_SATA0 | CGC_SATA1 | CGC_PEX0 | CGC_PEX1, CLOCK_GATING_CTRL);
1002 1020
1003 /* For SATA: first shutdown the phy */ 1021 /* For SATA: first shutdown the phy */
1004 if (!(kirkwood_clk_ctrl & CGC_SATA0)) { 1022 if (!(kirkwood_clk_ctrl & CGC_SATA0)) {
@@ -1023,6 +1041,18 @@ static int __init kirkwood_clock_gate(void)
1023 writel(readl(PCIE_LINK_CTRL) & ~0x10, PCIE_LINK_CTRL); 1041 writel(readl(PCIE_LINK_CTRL) & ~0x10, PCIE_LINK_CTRL);
1024 } 1042 }
1025 1043
1044 /* For PCIe 1: first shutdown the phy */
1045 if (dev == MV88F6282_DEV_ID) {
1046 if (!(kirkwood_clk_ctrl & CGC_PEX1)) {
1047 writel(readl(PCIE1_LINK_CTRL) | 0x10, PCIE1_LINK_CTRL);
1048 while (1)
1049 if (readl(PCIE1_STATUS) & 0x1)
1050 break;
1051 writel(readl(PCIE1_LINK_CTRL) & ~0x10, PCIE1_LINK_CTRL);
1052 }
1053 } else /* keep this bit set for devices that don't have PCIe1 */
1054 kirkwood_clk_ctrl |= CGC_PEX1;
1055
1026 /* Now gate clock the required units */ 1056 /* Now gate clock the required units */
1027 writel(kirkwood_clk_ctrl, CLOCK_GATING_CTRL); 1057 writel(kirkwood_clk_ctrl, CLOCK_GATING_CTRL);
1028 printk(KERN_DEBUG " after: 0x%08x\n", readl(CLOCK_GATING_CTRL)); 1058 printk(KERN_DEBUG " after: 0x%08x\n", readl(CLOCK_GATING_CTRL));