diff options
| author | John Rigby <jrigby@freescale.com> | 2008-01-28 12:28:53 -0500 |
|---|---|---|
| committer | Grant Likely <grant.likely@secretlab.ca> | 2008-02-06 16:03:10 -0500 |
| commit | e177edcd1505d5ac5f2edcd1f2df76946f4eae5d (patch) | |
| tree | ee7651ae790e57d376f0ff70350a38dc99690319 | |
| parent | 99e139126ab2e84be67969650f92eb37c12ab5cd (diff) | |
[POWERPC] mpc512x: Basic platform support
512x is very similar to 83xx and most
of this is patterned after code from 83xx.
New platform:
changed:
arch/powerpc/Kconfig
arch/powerpc/platforms/Kconfig
arch/powerpc/platforms/Kconfig.cputype
arch/powerpc/platforms/Makefile
new:
arch/powerpc/platforms/512x/*
include/asm-powerpc/mpc512x.h
Signed-off-by: John Rigby <jrigby@freescale.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
| -rw-r--r-- | arch/powerpc/Kconfig | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/Kconfig | 20 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/Makefile | 4 | ||||
| -rw-r--r-- | arch/powerpc/platforms/512x/mpc5121_ads.c | 104 | ||||
| -rw-r--r-- | arch/powerpc/platforms/Kconfig | 1 | ||||
| -rw-r--r-- | arch/powerpc/platforms/Kconfig.cputype | 6 | ||||
| -rw-r--r-- | arch/powerpc/platforms/Makefile | 1 | ||||
| -rw-r--r-- | include/asm-powerpc/mpc512x.h | 22 |
8 files changed, 156 insertions, 4 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2bf2f3f53029..88ea64bd991a 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -489,7 +489,7 @@ config PCI | |||
| 489 | bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ | 489 | bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \ |
| 490 | || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ | 490 | || PPC_MPC52xx || (EMBEDDED && (PPC_PSERIES || PPC_ISERIES)) \ |
| 491 | || PPC_PS3 || 44x | 491 | || PPC_PS3 || 44x |
| 492 | default y if !40x && !CPM2 && !8xx && !PPC_83xx \ | 492 | default y if !40x && !CPM2 && !8xx && !PPC_MPC512x && !PPC_83xx \ |
| 493 | && !PPC_85xx && !PPC_86xx | 493 | && !PPC_85xx && !PPC_86xx |
| 494 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx | 494 | default PCI_PERMEDIA if !4xx && !CPM2 && !8xx |
| 495 | default PCI_QSPAN if !4xx && !CPM2 && 8xx | 495 | default PCI_QSPAN if !4xx && !CPM2 && 8xx |
diff --git a/arch/powerpc/platforms/512x/Kconfig b/arch/powerpc/platforms/512x/Kconfig new file mode 100644 index 000000000000..c6fa49e23dc0 --- /dev/null +++ b/arch/powerpc/platforms/512x/Kconfig | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | config PPC_MPC512x | ||
| 2 | bool | ||
| 3 | select FSL_SOC | ||
| 4 | select IPIC | ||
| 5 | default n | ||
| 6 | |||
| 7 | config PPC_MPC5121 | ||
| 8 | bool | ||
| 9 | select PPC_MPC512x | ||
| 10 | default n | ||
| 11 | |||
| 12 | config MPC5121_ADS | ||
| 13 | bool "Freescale MPC5121E ADS" | ||
| 14 | depends on PPC_MULTIPLATFORM && PPC32 | ||
| 15 | select DEFAULT_UIMAGE | ||
| 16 | select WANT_DEVICE_TREE | ||
| 17 | select PPC_MPC5121 | ||
| 18 | help | ||
| 19 | This option enables support for the MPC5121E ADS board. | ||
| 20 | default n | ||
diff --git a/arch/powerpc/platforms/512x/Makefile b/arch/powerpc/platforms/512x/Makefile new file mode 100644 index 000000000000..232c89f2039a --- /dev/null +++ b/arch/powerpc/platforms/512x/Makefile | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | # | ||
| 2 | # Makefile for the Freescale PowerPC 512x linux kernel. | ||
| 3 | # | ||
| 4 | obj-$(CONFIG_MPC5121_ADS) += mpc5121_ads.o | ||
diff --git a/arch/powerpc/platforms/512x/mpc5121_ads.c b/arch/powerpc/platforms/512x/mpc5121_ads.c new file mode 100644 index 000000000000..50bd3a319022 --- /dev/null +++ b/arch/powerpc/platforms/512x/mpc5121_ads.c | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * Author: John Rigby, <jrigby@freescale.com>, Thur Mar 29 2007 | ||
| 5 | * | ||
| 6 | * Description: | ||
| 7 | * MPC5121 ADS board setup | ||
| 8 | * | ||
| 9 | * This is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/kernel.h> | ||
| 17 | #include <linux/io.h> | ||
| 18 | #include <linux/irq.h> | ||
| 19 | #include <linux/of_platform.h> | ||
| 20 | |||
| 21 | #include <asm/machdep.h> | ||
| 22 | #include <asm/ipic.h> | ||
| 23 | #include <asm/prom.h> | ||
| 24 | #include <asm/time.h> | ||
| 25 | |||
| 26 | /** | ||
| 27 | * mpc512x_find_ips_freq - Find the IPS bus frequency for a device | ||
| 28 | * @node: device node | ||
| 29 | * | ||
| 30 | * Returns IPS bus frequency, or 0 if the bus frequency cannot be found. | ||
| 31 | */ | ||
| 32 | unsigned long | ||
| 33 | mpc512x_find_ips_freq(struct device_node *node) | ||
| 34 | { | ||
| 35 | struct device_node *np; | ||
| 36 | const unsigned int *p_ips_freq = NULL; | ||
| 37 | |||
| 38 | of_node_get(node); | ||
| 39 | while (node) { | ||
| 40 | p_ips_freq = of_get_property(node, "bus-frequency", NULL); | ||
| 41 | if (p_ips_freq) | ||
| 42 | break; | ||
| 43 | |||
| 44 | np = of_get_parent(node); | ||
| 45 | of_node_put(node); | ||
| 46 | node = np; | ||
| 47 | } | ||
| 48 | if (node) | ||
| 49 | of_node_put(node); | ||
| 50 | |||
| 51 | return p_ips_freq ? *p_ips_freq : 0; | ||
| 52 | } | ||
| 53 | EXPORT_SYMBOL(mpc512x_find_ips_freq); | ||
| 54 | |||
| 55 | static struct of_device_id __initdata of_bus_ids[] = { | ||
| 56 | { .name = "soc", }, | ||
| 57 | { .name = "localbus", }, | ||
| 58 | {}, | ||
| 59 | }; | ||
| 60 | |||
| 61 | static void __init mpc5121_ads_declare_of_platform_devices(void) | ||
| 62 | { | ||
| 63 | /* Find every child of the SOC node and add it to of_platform */ | ||
| 64 | if (of_platform_bus_probe(NULL, of_bus_ids, NULL)) | ||
| 65 | printk(KERN_ERR __FILE__ ": " | ||
| 66 | "Error while probing of_platform bus\n"); | ||
| 67 | } | ||
| 68 | |||
| 69 | static void __init mpc5121_ads_init_IRQ(void) | ||
| 70 | { | ||
| 71 | struct device_node *np; | ||
| 72 | |||
| 73 | np = of_find_compatible_node(NULL, NULL, "fsl,ipic"); | ||
| 74 | if (!np) | ||
| 75 | return; | ||
| 76 | |||
| 77 | ipic_init(np, 0); | ||
| 78 | of_node_put(np); | ||
| 79 | |||
| 80 | /* | ||
| 81 | * Initialize the default interrupt mapping priorities, | ||
| 82 | * in case the boot rom changed something on us. | ||
| 83 | */ | ||
| 84 | ipic_set_default_priority(); | ||
| 85 | } | ||
| 86 | |||
| 87 | /* | ||
| 88 | * Called very early, MMU is off, device-tree isn't unflattened | ||
| 89 | */ | ||
| 90 | static int __init mpc5121_ads_probe(void) | ||
| 91 | { | ||
| 92 | unsigned long root = of_get_flat_dt_root(); | ||
| 93 | |||
| 94 | return of_flat_dt_is_compatible(root, "fsl,mpc5121ads"); | ||
| 95 | } | ||
| 96 | |||
| 97 | define_machine(mpc5121_ads) { | ||
| 98 | .name = "MPC5121 ADS", | ||
| 99 | .probe = mpc5121_ads_probe, | ||
| 100 | .init = mpc5121_ads_declare_of_platform_devices, | ||
| 101 | .init_IRQ = mpc5121_ads_init_IRQ, | ||
| 102 | .get_irq = ipic_get_irq, | ||
| 103 | .calibrate_decr = generic_calibrate_decr, | ||
| 104 | }; | ||
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig index fdce10c4f074..e2c952619805 100644 --- a/arch/powerpc/platforms/Kconfig +++ b/arch/powerpc/platforms/Kconfig | |||
| @@ -41,6 +41,7 @@ config CLASSIC32 | |||
| 41 | source "arch/powerpc/platforms/pseries/Kconfig" | 41 | source "arch/powerpc/platforms/pseries/Kconfig" |
| 42 | source "arch/powerpc/platforms/iseries/Kconfig" | 42 | source "arch/powerpc/platforms/iseries/Kconfig" |
| 43 | source "arch/powerpc/platforms/chrp/Kconfig" | 43 | source "arch/powerpc/platforms/chrp/Kconfig" |
| 44 | source "arch/powerpc/platforms/512x/Kconfig" | ||
| 44 | source "arch/powerpc/platforms/52xx/Kconfig" | 45 | source "arch/powerpc/platforms/52xx/Kconfig" |
| 45 | source "arch/powerpc/platforms/powermac/Kconfig" | 46 | source "arch/powerpc/platforms/powermac/Kconfig" |
| 46 | source "arch/powerpc/platforms/prep/Kconfig" | 47 | source "arch/powerpc/platforms/prep/Kconfig" |
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index 7fc41104d53e..51030ab2a023 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype | |||
| @@ -14,7 +14,7 @@ choice | |||
| 14 | There are five families of 32 bit PowerPC chips supported. | 14 | There are five families of 32 bit PowerPC chips supported. |
| 15 | The most common ones are the desktop and server CPUs (601, 603, | 15 | The most common ones are the desktop and server CPUs (601, 603, |
| 16 | 604, 740, 750, 74xx) CPUs from Freescale and IBM, with their | 16 | 604, 740, 750, 74xx) CPUs from Freescale and IBM, with their |
| 17 | embedded 52xx/82xx/83xx/86xx counterparts. | 17 | embedded 512x/52xx/82xx/83xx/86xx counterparts. |
| 18 | The other embeeded parts, namely 4xx, 8xx, e200 (55xx) and e500 | 18 | The other embeeded parts, namely 4xx, 8xx, e200 (55xx) and e500 |
| 19 | (85xx) each form a family of their own that is not compatible | 19 | (85xx) each form a family of their own that is not compatible |
| 20 | with the others. | 20 | with the others. |
| @@ -22,7 +22,7 @@ choice | |||
| 22 | If unsure, select 52xx/6xx/7xx/74xx/82xx/83xx/86xx. | 22 | If unsure, select 52xx/6xx/7xx/74xx/82xx/83xx/86xx. |
| 23 | 23 | ||
| 24 | config 6xx | 24 | config 6xx |
| 25 | bool "52xx/6xx/7xx/74xx/82xx/83xx/86xx" | 25 | bool "512x/52xx/6xx/7xx/74xx/82xx/83xx/86xx" |
| 26 | select PPC_FPU | 26 | select PPC_FPU |
| 27 | 27 | ||
| 28 | config PPC_85xx | 28 | config PPC_85xx |
| @@ -221,7 +221,7 @@ config NR_CPUS | |||
| 221 | 221 | ||
| 222 | config NOT_COHERENT_CACHE | 222 | config NOT_COHERENT_CACHE |
| 223 | bool | 223 | bool |
| 224 | depends on 4xx || 8xx || E200 | 224 | depends on 4xx || 8xx || E200 || PPC_MPC512x |
| 225 | default y | 225 | default y |
| 226 | 226 | ||
| 227 | config CHECK_CACHE_COHERENCY | 227 | config CHECK_CACHE_COHERENCY |
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile index 6d9079da5f5a..a984894466d9 100644 --- a/arch/powerpc/platforms/Makefile +++ b/arch/powerpc/platforms/Makefile | |||
| @@ -11,6 +11,7 @@ endif | |||
| 11 | obj-$(CONFIG_PPC_CHRP) += chrp/ | 11 | obj-$(CONFIG_PPC_CHRP) += chrp/ |
| 12 | obj-$(CONFIG_40x) += 40x/ | 12 | obj-$(CONFIG_40x) += 40x/ |
| 13 | obj-$(CONFIG_44x) += 44x/ | 13 | obj-$(CONFIG_44x) += 44x/ |
| 14 | obj-$(CONFIG_PPC_MPC512x) += 512x/ | ||
| 14 | obj-$(CONFIG_PPC_MPC52xx) += 52xx/ | 15 | obj-$(CONFIG_PPC_MPC52xx) += 52xx/ |
| 15 | obj-$(CONFIG_PPC_8xx) += 8xx/ | 16 | obj-$(CONFIG_PPC_8xx) += 8xx/ |
| 16 | obj-$(CONFIG_PPC_82xx) += 82xx/ | 17 | obj-$(CONFIG_PPC_82xx) += 82xx/ |
diff --git a/include/asm-powerpc/mpc512x.h b/include/asm-powerpc/mpc512x.h new file mode 100644 index 000000000000..c48a1658eeac --- /dev/null +++ b/include/asm-powerpc/mpc512x.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * Author: John Rigby, <jrigby@freescale.com>, Friday Apr 13 2007 | ||
| 5 | * | ||
| 6 | * Description: | ||
| 7 | * MPC5121 Prototypes and definitions | ||
| 8 | * | ||
| 9 | * This is free software; you can redistribute it and/or modify it | ||
| 10 | * under the terms of the GNU General Public License as published by | ||
| 11 | * the Free Software Foundation; either version 2 of the License, or | ||
| 12 | * (at your option) any later version. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef __ASM_POWERPC_MPC512x_H__ | ||
| 17 | #define __ASM_POWERPC_MPC512x_H__ | ||
| 18 | |||
| 19 | extern unsigned long mpc512x_find_ips_freq(struct device_node *node); | ||
| 20 | |||
| 21 | #endif /* __ASM_POWERPC_MPC512x_H__ */ | ||
| 22 | |||
