* [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
@ 2006-06-29 2:13 Kim Phillips
2006-06-29 5:10 ` Kumar Gala
0 siblings, 1 reply; 6+ messages in thread
From: Kim Phillips @ 2006-06-29 2:13 UTC (permalink / raw)
To: linuxppc-dev
Add support for the Freescale MPC8349E-mITX eval board
This is largely based on 8349 SYS code except that it uses the new rtc_class code in drivers/rtc instead of explicitly specifying the rtc chip. SATA is untested, as this is work in progress.
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Timur Tabi <timur@freescale.com>
---
arch/powerpc/platforms/83xx/Kconfig | 11 ++
arch/powerpc/platforms/83xx/Makefile | 1
arch/powerpc/platforms/83xx/misc.c | 52 +++++++++
arch/powerpc/platforms/83xx/mpc834x_itx.c | 166 +++++++++++++++++++++++++++++
arch/powerpc/platforms/83xx/mpc834x_itx.h | 23 ++++
arch/powerpc/platforms/83xx/mpc83xx.h | 5 +
include/asm-ppc/mpc83xx.h | 4 +
7 files changed, 261 insertions(+), 1 deletions(-)
create mode 100644 arch/powerpc/platforms/83xx/mpc834x_itx.c
create mode 100644 arch/powerpc/platforms/83xx/mpc834x_itx.h
3182b4a50027d17badab0c7b8dc2fd4d8fc307b0
diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/platforms/83xx/Kconfig
index 7675e67..5fe7b7f 100644
--- a/arch/powerpc/platforms/83xx/Kconfig
+++ b/arch/powerpc/platforms/83xx/Kconfig
@@ -16,12 +16,21 @@ config MPC834x_SYS
3 PCI slots. The PIBs PCI initialization is the bootloader's
responsiblilty.
+config MPC834x_ITX
+ bool "Freescale MPC834x ITX"
+ select DEFAULT_UIMAGE
+ help
+ This option enables support for the MPC 834x ITX evaluation board.
+
+ Be aware that PCI initialization is the bootloader's
+ responsiblilty.
+
endchoice
config MPC834x
bool
select PPC_UDBG_16550
select PPC_INDIRECT_PCI
- default y if MPC834x_SYS
+ default y if MPC834x_SYS || MPC834x_ITX
endmenu
diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/platforms/83xx/Makefile
index 5c72367..9387a11 100644
--- a/arch/powerpc/platforms/83xx/Makefile
+++ b/arch/powerpc/platforms/83xx/Makefile
@@ -4,3 +4,4 @@
obj-y := misc.o
obj-$(CONFIG_PCI) += pci.o
obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o
+obj-$(CONFIG_MPC834x_ITX) += mpc834x_itx.o
diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c
index 1455bce..568a8f7 100644
--- a/arch/powerpc/platforms/83xx/misc.c
+++ b/arch/powerpc/platforms/83xx/misc.c
@@ -53,3 +53,55 @@ long __init mpc83xx_time_init(void)
return 0;
}
+
+#ifdef CONFIG_RTC_CLASS
+int mpc83xx_set_rtc_time(struct rtc_time *tm)
+{
+ int err;
+ struct class_device *class_dev =
+ rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
+
+ if (class_dev == NULL) {
+ printk("%s: unable to open rtc device (%s)\n",
+ __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
+ return -ENODEV;
+ }
+
+ err = rtc_set_time(class_dev, tm);
+ if (err != 0)
+ dev_err(class_dev->dev,
+ "%s: unable to set the hardware clock\n",__FUNCTION__);
+
+ rtc_class_close(class_dev);
+
+ return 0;
+}
+
+void mpc83xx_get_rtc_time(struct rtc_time *tm)
+{
+ int err;
+ struct class_device *class_dev =
+ rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
+
+ if (class_dev == NULL) {
+ printk("%s: unable to open rtc device (%s)\n",
+ __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
+ return;
+ }
+
+ err = rtc_read_time(class_dev, tm);
+ if (err == 0) {
+ err = rtc_valid_tm(tm);
+ if (err != 0)
+ dev_err(class_dev->dev,
+ "%s: invalid date/time\n",__FUNCTION__);
+ }
+ else
+ dev_err(class_dev->dev,
+ "%s: unable to read the hardware clock\n",__FUNCTION__);
+
+ rtc_class_close(class_dev);
+
+ return;
+}
+#endif /* CONFIG_RTC_CLASS */
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c
new file mode 100644
index 0000000..0a3f58a
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c
@@ -0,0 +1,166 @@
+/*
+ * arch/powerpc/platforms/83xx/mpc834x_itx.c
+ *
+ * MPC834x ITX board specific routines
+ *
+ * Maintainer: Kumar Gala <galak@kernel.crashing.org>
+ *
+ * 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.
+ */
+
+#include <linux/config.h>
+#include <linux/stddef.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <linux/reboot.h>
+#include <linux/pci.h>
+#include <linux/kdev_t.h>
+#include <linux/major.h>
+#include <linux/console.h>
+#include <linux/delay.h>
+#include <linux/seq_file.h>
+#include <linux/root_dev.h>
+
+#include <asm/system.h>
+#include <asm/atomic.h>
+#include <asm/time.h>
+#include <asm/io.h>
+#include <asm/machdep.h>
+#include <asm/ipic.h>
+#include <asm/bootinfo.h>
+#include <asm/irq.h>
+#include <asm/prom.h>
+#include <asm/udbg.h>
+#include <sysdev/fsl_soc.h>
+
+#include "mpc83xx.h"
+
+#ifndef CONFIG_PCI
+unsigned long isa_io_base = 0;
+unsigned long isa_mem_base = 0;
+#endif
+
+#ifdef CONFIG_PCI
+static int
+mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
+{
+ static char pci_irq_table[][4] =
+ /*
+ * PCI IDSEL/INTPIN->INTLINE
+ * A B C D
+ */
+ {
+ {PIRQB, PIRQC, PIRQD, PIRQA}, /* idsel 0x0e */
+ {PIRQA, PIRQB, PIRQC, PIRQD}, /* idsel 0x0f */
+ {PIRQC, PIRQD, PIRQA, PIRQB}, /* idsel 0x10 */
+ };
+
+ const long min_idsel = 0x0e, max_idsel = 0x10, irqs_per_slot = 4;
+ return PCI_IRQ_TABLE_LOOKUP;
+}
+#endif /* CONFIG_PCI */
+
+/* ************************************************************************
+ *
+ * Setup the architecture
+ *
+ */
+static void __init mpc834x_itx_setup_arch(void)
+{
+ struct device_node *np;
+
+ if (ppc_md.progress)
+ ppc_md.progress("mpc834x_itx_setup_arch()", 0);
+
+ np = of_find_node_by_type(NULL, "cpu");
+ if (np != 0) {
+ unsigned int *fp =
+ (int *)get_property(np, "clock-frequency", NULL);
+ if (fp != 0)
+ loops_per_jiffy = *fp / HZ;
+ else
+ loops_per_jiffy = 50000000 / HZ;
+ of_node_put(np);
+ }
+#ifdef CONFIG_PCI
+ for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
+ add_bridge(np);
+
+ ppc_md.pci_swizzle = common_swizzle;
+ ppc_md.pci_map_irq = mpc83xx_map_irq;
+ ppc_md.pci_exclude_device = mpc83xx_exclude_device;
+#endif
+
+#ifdef CONFIG_ROOT_NFS
+ ROOT_DEV = Root_NFS;
+#else
+ ROOT_DEV = Root_HDA1;
+#endif
+}
+
+void __init mpc834x_itx_init_IRQ(void)
+{
+ u8 senses[8] = {
+ 0, /* EXT 0 */
+ IRQ_SENSE_LEVEL, /* EXT 1 */
+ IRQ_SENSE_LEVEL, /* EXT 2 */
+ 0, /* EXT 3 */
+#ifdef CONFIG_PCI
+ IRQ_SENSE_LEVEL, /* EXT 4 */
+ IRQ_SENSE_LEVEL, /* EXT 5 */
+ IRQ_SENSE_LEVEL, /* EXT 6 */
+ IRQ_SENSE_LEVEL, /* EXT 7 */
+#else
+ 0, /* EXT 4 */
+ 0, /* EXT 5 */
+ 0, /* EXT 6 */
+ 0, /* EXT 7 */
+#endif
+ };
+
+ ipic_init(get_immrbase() + 0x00700, 0, 0, senses, 8);
+
+ /* Initialize the default interrupt mapping priorities,
+ * in case the boot rom changed something on us.
+ */
+ ipic_set_default_priority();
+}
+
+#ifdef CONFIG_RTC_CLASS
+static int __init mpc834x_rtc_hookup(void)
+{
+ ppc_md.get_rtc_time = mpc83xx_get_rtc_time;
+ ppc_md.set_rtc_time = mpc83xx_set_rtc_time;
+
+ return 0;
+}
+
+late_initcall(mpc834x_rtc_hookup);
+#endif
+
+/*
+ * Called very early, MMU is off, device-tree isn't unflattened
+ */
+static int __init mpc834x_itx_probe(void)
+{
+ /* We always match for now, eventually we should look at the flat
+ dev tree to ensure this is the board we are suppose to run on
+ */
+ return 1;
+}
+
+define_machine(mpc834x_itx) {
+ .name = "MPC834x ITX",
+ .probe = mpc834x_itx_probe,
+ .setup_arch = mpc834x_itx_setup_arch,
+ .init_IRQ = mpc834x_itx_init_IRQ,
+ .get_irq = ipic_get_irq,
+ .restart = mpc83xx_restart,
+ .time_init = mpc83xx_time_init,
+ .calibrate_decr = generic_calibrate_decr,
+ .progress = udbg_progress,
+};
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.h b/arch/powerpc/platforms/83xx/mpc834x_itx.h
new file mode 100644
index 0000000..174ca4e
--- /dev/null
+++ b/arch/powerpc/platforms/83xx/mpc834x_itx.h
@@ -0,0 +1,23 @@
+/*
+ * arch/powerpc/platforms/83xx/mpc834x_itx.h
+ *
+ * MPC834X ITX common board definitions
+ *
+ * Maintainer: Kumar Gala <galak@kernel.crashing.org>
+ *
+ * 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.
+ *
+ */
+
+#ifndef __MACH_MPC83XX_ITX_H__
+#define __MACH_MPC83XX_ITX_H__
+
+#define PIRQA MPC83xx_IRQ_EXT4
+#define PIRQB MPC83xx_IRQ_EXT5
+#define PIRQC MPC83xx_IRQ_EXT6
+#define PIRQD MPC83xx_IRQ_EXT7
+
+#endif /* __MACH_MPC83XX_ITX_H__ */
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h
index 01cae10..532a084 100644
--- a/arch/powerpc/platforms/83xx/mpc83xx.h
+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
@@ -3,6 +3,7 @@
#include <linux/init.h>
#include <linux/device.h>
+#include <linux/rtc.h>
/*
* Declaration for the various functions exported by the
@@ -13,5 +14,9 @@ extern int add_bridge(struct device_node
extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
extern void mpc83xx_restart(char *cmd);
extern long mpc83xx_time_init(void);
+#ifdef CONFIG_RTC_CLASS
+extern int mpc83xx_set_rtc_time(struct rtc_time *tm);
+extern void mpc83xx_get_rtc_time(struct rtc_time *tm);
+#endif
#endif /* __MPC83XX_H__ */
diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
index 02ed2c3..80076be 100644
--- a/include/asm-ppc/mpc83xx.h
+++ b/include/asm-ppc/mpc83xx.h
@@ -25,6 +25,10 @@
#include <platforms/83xx/mpc834x_sys.h>
#endif
+#ifdef CONFIG_MPC834x_ITX
+#include <platforms/83xx/mpc834x_itx.h>
+#endif
+
#define _IO_BASE isa_io_base
#define _ISA_MEM_BASE isa_mem_base
#ifdef CONFIG_PCI
--
1.2.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
2006-06-29 2:13 [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board Kim Phillips
@ 2006-06-29 5:10 ` Kumar Gala
2006-06-29 14:58 ` Kim Phillips
0 siblings, 1 reply; 6+ messages in thread
From: Kumar Gala @ 2006-06-29 5:10 UTC (permalink / raw)
To: Kim Phillips; +Cc: linuxppc-dev
On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
> Add support for the Freescale MPC8349E-mITX eval board
>
> This is largely based on 8349 SYS code except that it uses the new
> rtc_class code in drivers/rtc instead of explicitly specifying the
> rtc chip. SATA is untested, as this is work in progress.
>
> Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
> Signed-off-by: Timur Tabi <timur@freescale.com>
> ---
>
> arch/powerpc/platforms/83xx/Kconfig | 11 ++
> arch/powerpc/platforms/83xx/Makefile | 1
> arch/powerpc/platforms/83xx/misc.c | 52 +++++++++
> arch/powerpc/platforms/83xx/mpc834x_itx.c | 166 ++++++++++++++++++
> +++++++++++
> arch/powerpc/platforms/83xx/mpc834x_itx.h | 23 ++++
> arch/powerpc/platforms/83xx/mpc83xx.h | 5 +
> include/asm-ppc/mpc83xx.h | 4 +
> 7 files changed, 261 insertions(+), 1 deletions(-)
> create mode 100644 arch/powerpc/platforms/83xx/mpc834x_itx.c
> create mode 100644 arch/powerpc/platforms/83xx/mpc834x_itx.h
>
> 3182b4a50027d17badab0c7b8dc2fd4d8fc307b0
> diff --git a/arch/powerpc/platforms/83xx/Kconfig b/arch/powerpc/
> platforms/83xx/Kconfig
> index 7675e67..5fe7b7f 100644
> --- a/arch/powerpc/platforms/83xx/Kconfig
> +++ b/arch/powerpc/platforms/83xx/Kconfig
> @@ -16,12 +16,21 @@ config MPC834x_SYS
> 3 PCI slots. The PIBs PCI initialization is the bootloader's
> responsiblilty.
>
> +config MPC834x_ITX
> + bool "Freescale MPC834x ITX"
> + select DEFAULT_UIMAGE
> + help
> + This option enables support for the MPC 834x ITX evaluation board.
> +
> + Be aware that PCI initialization is the bootloader's
> + responsiblilty.
> +
> endchoice
>
> config MPC834x
> bool
> select PPC_UDBG_16550
> select PPC_INDIRECT_PCI
> - default y if MPC834x_SYS
> + default y if MPC834x_SYS || MPC834x_ITX
>
> endmenu
> diff --git a/arch/powerpc/platforms/83xx/Makefile b/arch/powerpc/
> platforms/83xx/Makefile
> index 5c72367..9387a11 100644
> --- a/arch/powerpc/platforms/83xx/Makefile
> +++ b/arch/powerpc/platforms/83xx/Makefile
> @@ -4,3 +4,4 @@
> obj-y := misc.o
> obj-$(CONFIG_PCI) += pci.o
> obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o
> +obj-$(CONFIG_MPC834x_ITX) += mpc834x_itx.o
> diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/
> platforms/83xx/misc.c
> index 1455bce..568a8f7 100644
> --- a/arch/powerpc/platforms/83xx/misc.c
> +++ b/arch/powerpc/platforms/83xx/misc.c
> @@ -53,3 +53,55 @@ long __init mpc83xx_time_init(void)
>
> return 0;
> }
> +
> +#ifdef CONFIG_RTC_CLASS
> +int mpc83xx_set_rtc_time(struct rtc_time *tm)
> +{
> + int err;
> + struct class_device *class_dev =
> + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
> +
> + if (class_dev == NULL) {
> + printk("%s: unable to open rtc device (%s)\n",
> + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
> + return -ENODEV;
> + }
> +
> + err = rtc_set_time(class_dev, tm);
> + if (err != 0)
> + dev_err(class_dev->dev,
> + "%s: unable to set the hardware clock\n",__FUNCTION__);
> +
> + rtc_class_close(class_dev);
> +
> + return 0;
> +}
> +
> +void mpc83xx_get_rtc_time(struct rtc_time *tm)
> +{
> + int err;
> + struct class_device *class_dev =
> + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
> +
> + if (class_dev == NULL) {
> + printk("%s: unable to open rtc device (%s)\n",
> + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
> + return;
> + }
> +
> + err = rtc_read_time(class_dev, tm);
> + if (err == 0) {
> + err = rtc_valid_tm(tm);
> + if (err != 0)
> + dev_err(class_dev->dev,
> + "%s: invalid date/time\n",__FUNCTION__);
> + }
> + else
> + dev_err(class_dev->dev,
> + "%s: unable to read the hardware clock\n",__FUNCTION__);
> +
> + rtc_class_close(class_dev);
> +
> + return;
> +}
> +#endif /* CONFIG_RTC_CLASS */
What is this trying to accomplish? What RTC chip is on 834x ITC and
how's it connected?
> diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/
> powerpc/platforms/83xx/mpc834x_itx.c
> new file mode 100644
> index 0000000..0a3f58a
> --- /dev/null
> +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c
> @@ -0,0 +1,166 @@
> +/*
> + * arch/powerpc/platforms/83xx/mpc834x_itx.c
> + *
> + * MPC834x ITX board specific routines
> + *
> + * Maintainer: Kumar Gala <galak@kernel.crashing.org>
> + *
> + * 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.
> + */
> +
> +#include <linux/config.h>
> +#include <linux/stddef.h>
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/errno.h>
> +#include <linux/reboot.h>
> +#include <linux/pci.h>
> +#include <linux/kdev_t.h>
> +#include <linux/major.h>
> +#include <linux/console.h>
> +#include <linux/delay.h>
> +#include <linux/seq_file.h>
> +#include <linux/root_dev.h>
> +
> +#include <asm/system.h>
> +#include <asm/atomic.h>
> +#include <asm/time.h>
> +#include <asm/io.h>
> +#include <asm/machdep.h>
> +#include <asm/ipic.h>
> +#include <asm/bootinfo.h>
> +#include <asm/irq.h>
> +#include <asm/prom.h>
> +#include <asm/udbg.h>
> +#include <sysdev/fsl_soc.h>
> +
> +#include "mpc83xx.h"
> +
> +#ifndef CONFIG_PCI
> +unsigned long isa_io_base = 0;
> +unsigned long isa_mem_base = 0;
> +#endif
> +
> +#ifdef CONFIG_PCI
> +static int
> +mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned
> char pin)
> +{
> + static char pci_irq_table[][4] =
> + /*
> + * PCI IDSEL/INTPIN->INTLINE
> + * A B C D
> + */
> + {
> + {PIRQB, PIRQC, PIRQD, PIRQA}, /* idsel 0x0e */
> + {PIRQA, PIRQB, PIRQC, PIRQD}, /* idsel 0x0f */
> + {PIRQC, PIRQD, PIRQA, PIRQB}, /* idsel 0x10 */
> + };
> +
> + const long min_idsel = 0x0e, max_idsel = 0x10, irqs_per_slot = 4;
> + return PCI_IRQ_TABLE_LOOKUP;
> +}
> +#endif /* CONFIG_PCI */
> +
> +/*
> **********************************************************************
> **
> + *
> + * Setup the architecture
> + *
> + */
> +static void __init mpc834x_itx_setup_arch(void)
> +{
> + struct device_node *np;
> +
> + if (ppc_md.progress)
> + ppc_md.progress("mpc834x_itx_setup_arch()", 0);
> +
> + np = of_find_node_by_type(NULL, "cpu");
> + if (np != 0) {
> + unsigned int *fp =
> + (int *)get_property(np, "clock-frequency", NULL);
> + if (fp != 0)
> + loops_per_jiffy = *fp / HZ;
> + else
> + loops_per_jiffy = 50000000 / HZ;
> + of_node_put(np);
> + }
> +#ifdef CONFIG_PCI
> + for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
> + add_bridge(np);
> +
> + ppc_md.pci_swizzle = common_swizzle;
> + ppc_md.pci_map_irq = mpc83xx_map_irq;
> + ppc_md.pci_exclude_device = mpc83xx_exclude_device;
> +#endif
> +
> +#ifdef CONFIG_ROOT_NFS
> + ROOT_DEV = Root_NFS;
> +#else
> + ROOT_DEV = Root_HDA1;
> +#endif
> +}
> +
> +void __init mpc834x_itx_init_IRQ(void)
> +{
> + u8 senses[8] = {
> + 0, /* EXT 0 */
> + IRQ_SENSE_LEVEL, /* EXT 1 */
> + IRQ_SENSE_LEVEL, /* EXT 2 */
> + 0, /* EXT 3 */
> +#ifdef CONFIG_PCI
> + IRQ_SENSE_LEVEL, /* EXT 4 */
> + IRQ_SENSE_LEVEL, /* EXT 5 */
> + IRQ_SENSE_LEVEL, /* EXT 6 */
> + IRQ_SENSE_LEVEL, /* EXT 7 */
> +#else
> + 0, /* EXT 4 */
> + 0, /* EXT 5 */
> + 0, /* EXT 6 */
> + 0, /* EXT 7 */
> +#endif
> + };
> +
> + ipic_init(get_immrbase() + 0x00700, 0, 0, senses, 8);
> +
> + /* Initialize the default interrupt mapping priorities,
> + * in case the boot rom changed something on us.
> + */
> + ipic_set_default_priority();
> +}
> +
> +#ifdef CONFIG_RTC_CLASS
> +static int __init mpc834x_rtc_hookup(void)
> +{
> + ppc_md.get_rtc_time = mpc83xx_get_rtc_time;
> + ppc_md.set_rtc_time = mpc83xx_set_rtc_time;
> +
> + return 0;
> +}
> +
> +late_initcall(mpc834x_rtc_hookup);
> +#endif
> +
> +/*
> + * Called very early, MMU is off, device-tree isn't unflattened
> + */
> +static int __init mpc834x_itx_probe(void)
> +{
> + /* We always match for now, eventually we should look at the flat
> + dev tree to ensure this is the board we are suppose to run on
> + */
> + return 1;
> +}
> +
> +define_machine(mpc834x_itx) {
> + .name = "MPC834x ITX",
> + .probe = mpc834x_itx_probe,
> + .setup_arch = mpc834x_itx_setup_arch,
> + .init_IRQ = mpc834x_itx_init_IRQ,
> + .get_irq = ipic_get_irq,
> + .restart = mpc83xx_restart,
> + .time_init = mpc83xx_time_init,
> + .calibrate_decr = generic_calibrate_decr,
> + .progress = udbg_progress,
> +};
> diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.h b/arch/
> powerpc/platforms/83xx/mpc834x_itx.h
> new file mode 100644
> index 0000000..174ca4e
> --- /dev/null
> +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.h
> @@ -0,0 +1,23 @@
> +/*
> + * arch/powerpc/platforms/83xx/mpc834x_itx.h
> + *
> + * MPC834X ITX common board definitions
> + *
> + * Maintainer: Kumar Gala <galak@kernel.crashing.org>
> + *
> + * 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.
> + *
> + */
> +
> +#ifndef __MACH_MPC83XX_ITX_H__
> +#define __MACH_MPC83XX_ITX_H__
> +
> +#define PIRQA MPC83xx_IRQ_EXT4
> +#define PIRQB MPC83xx_IRQ_EXT5
> +#define PIRQC MPC83xx_IRQ_EXT6
> +#define PIRQD MPC83xx_IRQ_EXT7
> +
> +#endif /* __MACH_MPC83XX_ITX_H__ */
> diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/
> platforms/83xx/mpc83xx.h
> index 01cae10..532a084 100644
> --- a/arch/powerpc/platforms/83xx/mpc83xx.h
> +++ b/arch/powerpc/platforms/83xx/mpc83xx.h
> @@ -3,6 +3,7 @@
>
> #include <linux/init.h>
> #include <linux/device.h>
> +#include <linux/rtc.h>
>
> /*
> * Declaration for the various functions exported by the
> @@ -13,5 +14,9 @@ extern int add_bridge(struct device_node
> extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
> extern void mpc83xx_restart(char *cmd);
> extern long mpc83xx_time_init(void);
> +#ifdef CONFIG_RTC_CLASS
> +extern int mpc83xx_set_rtc_time(struct rtc_time *tm);
> +extern void mpc83xx_get_rtc_time(struct rtc_time *tm);
> +#endif
>
> #endif /* __MPC83XX_H__ */
> diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
> index 02ed2c3..80076be 100644
> --- a/include/asm-ppc/mpc83xx.h
> +++ b/include/asm-ppc/mpc83xx.h
> @@ -25,6 +25,10 @@
> #include <platforms/83xx/mpc834x_sys.h>
> #endif
>
> +#ifdef CONFIG_MPC834x_ITX
> +#include <platforms/83xx/mpc834x_itx.h>
> +#endif
> +
This shouldn't be needed, its a hold over from arch/ppc
> #define _IO_BASE isa_io_base
> #define _ISA_MEM_BASE isa_mem_base
> #ifdef CONFIG_PCI
> --
> 1.2.4
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
2006-06-29 5:10 ` Kumar Gala
@ 2006-06-29 14:58 ` Kim Phillips
2006-06-29 16:38 ` Kumar Gala
0 siblings, 1 reply; 6+ messages in thread
From: Kim Phillips @ 2006-06-29 14:58 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
On Thu, 29 Jun 2006 00:10:56 -0500
Kumar Gala <galak@kernel.crashing.org> wrote:
>
> On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
>
> > Add support for the Freescale MPC8349E-mITX eval board
> >
> > This is largely based on 8349 SYS code except that it uses the new
> > rtc_class code in drivers/rtc instead of explicitly specifying the
> > rtc chip. SATA is untested, as this is work in progress.
> >
I forgot to mention the 5-port switch is also unsupported at this time..
<snip>
> > diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/
> > platforms/83xx/misc.c
> > index 1455bce..568a8f7 100644
> > --- a/arch/powerpc/platforms/83xx/misc.c
> > +++ b/arch/powerpc/platforms/83xx/misc.c
> > @@ -53,3 +53,55 @@ long __init mpc83xx_time_init(void)
> >
> > return 0;
> > }
> > +
> > +#ifdef CONFIG_RTC_CLASS
> > +int mpc83xx_set_rtc_time(struct rtc_time *tm)
> > +{
> > + int err;
> > + struct class_device *class_dev =
> > + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
> > +
> > + if (class_dev == NULL) {
> > + printk("%s: unable to open rtc device (%s)\n",
> > + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
> > + return -ENODEV;
> > + }
> > +
> > + err = rtc_set_time(class_dev, tm);
> > + if (err != 0)
> > + dev_err(class_dev->dev,
> > + "%s: unable to set the hardware clock\n",__FUNCTION__);
> > +
> > + rtc_class_close(class_dev);
> > +
> > + return 0;
> > +}
> > +
> > +void mpc83xx_get_rtc_time(struct rtc_time *tm)
> > +{
> > + int err;
> > + struct class_device *class_dev =
> > + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
> > +
> > + if (class_dev == NULL) {
> > + printk("%s: unable to open rtc device (%s)\n",
> > + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
> > + return;
> > + }
> > +
> > + err = rtc_read_time(class_dev, tm);
> > + if (err == 0) {
> > + err = rtc_valid_tm(tm);
> > + if (err != 0)
> > + dev_err(class_dev->dev,
> > + "%s: invalid date/time\n",__FUNCTION__);
> > + }
> > + else
> > + dev_err(class_dev->dev,
> > + "%s: unable to read the hardware clock\n",__FUNCTION__);
> > +
> > + rtc_class_close(class_dev);
> > +
> > + return;
> > +}
> > +#endif /* CONFIG_RTC_CLASS */
>
> What is this trying to accomplish? What RTC chip is on 834x ITC and
> how's it connected?
It removes rtc chip-specific code from the platform code. It accomplishes this by using the new "RTC-framework" glue.
The board has a Dallas DS1339. The driver in drivers/i2c/chips is apparently obsolete, and there is a new way of doing all things i2c-rtc. See:
http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1abb0dc92d706e8c73c7a62ca813738fe2259a7f
The defconfig I sent out has CONFIG_RTC_DRV_DS1307 set. The code works well and I have an upcoming patch to carry the i2c 'force' option in from the device tree, which instructs the i2c code to do a better job of identifying the ds133x chips from the ds130x chips. btw, setting system time from RTC on startup is now user-configurable.
<snip>
> > diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
> > index 02ed2c3..80076be 100644
> > --- a/include/asm-ppc/mpc83xx.h
> > +++ b/include/asm-ppc/mpc83xx.h
> > @@ -25,6 +25,10 @@
> > #include <platforms/83xx/mpc834x_sys.h>
> > #endif
> >
> > +#ifdef CONFIG_MPC834x_ITX
> > +#include <platforms/83xx/mpc834x_itx.h>
> > +#endif
> > +
>
> This shouldn't be needed, its a hold over from arch/ppc
>
Unfortunately it won't build without it.
Kim
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
2006-06-29 14:58 ` Kim Phillips
@ 2006-06-29 16:38 ` Kumar Gala
2006-06-29 19:02 ` Kim Phillips
0 siblings, 1 reply; 6+ messages in thread
From: Kumar Gala @ 2006-06-29 16:38 UTC (permalink / raw)
To: Kim Phillips; +Cc: linuxppc-dev
On Jun 29, 2006, at 9:58 AM, Kim Phillips wrote:
> On Thu, 29 Jun 2006 00:10:56 -0500
> Kumar Gala <galak@kernel.crashing.org> wrote:
>
>>
>> On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
>>
>>> Add support for the Freescale MPC8349E-mITX eval board
>>>
>>> This is largely based on 8349 SYS code except that it uses the new
>>> rtc_class code in drivers/rtc instead of explicitly specifying the
>>> rtc chip. SATA is untested, as this is work in progress.
>>>
>
> I forgot to mention the 5-port switch is also unsupported at this
> time..
>
> <snip>
>>> diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/
>>> platforms/83xx/misc.c
>>> index 1455bce..568a8f7 100644
>>> --- a/arch/powerpc/platforms/83xx/misc.c
>>> +++ b/arch/powerpc/platforms/83xx/misc.c
>>> @@ -53,3 +53,55 @@ long __init mpc83xx_time_init(void)
>>>
>>> return 0;
>>> }
>>> +
>>> +#ifdef CONFIG_RTC_CLASS
>>> +int mpc83xx_set_rtc_time(struct rtc_time *tm)
>>> +{
>>> + int err;
>>> + struct class_device *class_dev =
>>> + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
>>> +
>>> + if (class_dev == NULL) {
>>> + printk("%s: unable to open rtc device (%s)\n",
>>> + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
>>> + return -ENODEV;
>>> + }
>>> +
>>> + err = rtc_set_time(class_dev, tm);
>>> + if (err != 0)
>>> + dev_err(class_dev->dev,
>>> + "%s: unable to set the hardware clock\n",__FUNCTION__);
>>> +
>>> + rtc_class_close(class_dev);
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +void mpc83xx_get_rtc_time(struct rtc_time *tm)
>>> +{
>>> + int err;
>>> + struct class_device *class_dev =
>>> + rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
>>> +
>>> + if (class_dev == NULL) {
>>> + printk("%s: unable to open rtc device (%s)\n",
>>> + __FUNCTION__, CONFIG_RTC_HCTOSYS_DEVICE);
>>> + return;
>>> + }
>>> +
>>> + err = rtc_read_time(class_dev, tm);
>>> + if (err == 0) {
>>> + err = rtc_valid_tm(tm);
>>> + if (err != 0)
>>> + dev_err(class_dev->dev,
>>> + "%s: invalid date/time\n",__FUNCTION__);
>>> + }
>>> + else
>>> + dev_err(class_dev->dev,
>>> + "%s: unable to read the hardware clock\n",__FUNCTION__);
>>> +
>>> + rtc_class_close(class_dev);
>>> +
>>> + return;
>>> +}
>>> +#endif /* CONFIG_RTC_CLASS */
>>
>> What is this trying to accomplish? What RTC chip is on 834x ITC and
>> how's it connected?
>
> It removes rtc chip-specific code from the platform code. It
> accomplishes this by using the new "RTC-framework" glue.
I'm aware of the new RTC framework.
This code seems pretty generic for any RTC using the new framework.
If so, we should put it somewhere more generic like setup.c
> The board has a Dallas DS1339. The driver in drivers/i2c/chips is
> apparently obsolete, and there is a new way of doing all things i2c-
> rtc. See:
>
> http://kernel.org/git/?p=linux/kernel/git/torvalds/
> linux-2.6.git;a=commit;h=1abb0dc92d706e8c73c7a62ca813738fe2259a7f
>
> The defconfig I sent out has CONFIG_RTC_DRV_DS1307 set. The code
> works well and I have an upcoming patch to carry the i2c 'force'
> option in from the device tree, which instructs the i2c code to do
> a better job of identifying the ds133x chips from the ds130x
> chips. btw, setting system time from RTC on startup is now user-
> configurable.
I was wondering about that.
> <snip>
>>> diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
>>> index 02ed2c3..80076be 100644
>>> --- a/include/asm-ppc/mpc83xx.h
>>> +++ b/include/asm-ppc/mpc83xx.h
>>> @@ -25,6 +25,10 @@
>>> #include <platforms/83xx/mpc834x_sys.h>
>>> #endif
>>>
>>> +#ifdef CONFIG_MPC834x_ITX
>>> +#include <platforms/83xx/mpc834x_itx.h>
>>> +#endif
>>> +
>>
>> This shouldn't be needed, its a hold over from arch/ppc
>>
> Unfortunately it won't build without it.
What's the build error?
- kumar
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
2006-06-29 16:38 ` Kumar Gala
@ 2006-06-29 19:02 ` Kim Phillips
2006-06-30 4:32 ` Kumar Gala
0 siblings, 1 reply; 6+ messages in thread
From: Kim Phillips @ 2006-06-29 19:02 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
On Thu, 29 Jun 2006 11:38:04 -0500
Kumar Gala <galak@kernel.crashing.org> wrote:
>
> > It removes rtc chip-specific code from the platform code. It
> > accomplishes this by using the new "RTC-framework" glue.
>
> I'm aware of the new RTC framework.
>
> This code seems pretty generic for any RTC using the new framework.
> If so, we should put it somewhere more generic like setup.c
>
yeah, I'd like to clean up some more of the existing rtc specific code and do that in one fell swoop..
> > <snip>
> >>> diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
> >>> index 02ed2c3..80076be 100644
> >>> --- a/include/asm-ppc/mpc83xx.h
> >>> +++ b/include/asm-ppc/mpc83xx.h
> >>> @@ -25,6 +25,10 @@
> >>> #include <platforms/83xx/mpc834x_sys.h>
> >>> #endif
> >>>
> >>> +#ifdef CONFIG_MPC834x_ITX
> >>> +#include <platforms/83xx/mpc834x_itx.h>
> >>> +#endif
> >>> +
> >>
> >> This shouldn't be needed, its a hold over from arch/ppc
> >>
> > Unfortunately it won't build without it.
>
> What's the build error?
>
..
CC arch/powerpc/platforms/83xx/mpc834x_itx.o
arch/powerpc/platforms/83xx/mpc834x_itx.c: In function `mpc83xx_map_irq':
arch/powerpc/platforms/83xx/mpc834x_itx.c:57: error: `PIRQB' undeclared (first use in this function)
..
which reminds me of wanting to adopt Benh's new irq stuff..
Kim
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board
2006-06-29 19:02 ` Kim Phillips
@ 2006-06-30 4:32 ` Kumar Gala
0 siblings, 0 replies; 6+ messages in thread
From: Kumar Gala @ 2006-06-30 4:32 UTC (permalink / raw)
To: Kim Phillips; +Cc: linuxppc-dev
On Jun 29, 2006, at 2:02 PM, Kim Phillips wrote:
> On Thu, 29 Jun 2006 11:38:04 -0500
> Kumar Gala <galak@kernel.crashing.org> wrote:
>
>>
>>> It removes rtc chip-specific code from the platform code. It
>>> accomplishes this by using the new "RTC-framework" glue.
>>
>> I'm aware of the new RTC framework.
>>
>> This code seems pretty generic for any RTC using the new framework.
>> If so, we should put it somewhere more generic like setup.c
>>
> yeah, I'd like to clean up some more of the existing rtc specific
> code and do that in one fell swoop..
well we can drop the rtc code for now and get the ITX base into the
tree.
>>> <snip>
>>>>> diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
>>>>> index 02ed2c3..80076be 100644
>>>>> --- a/include/asm-ppc/mpc83xx.h
>>>>> +++ b/include/asm-ppc/mpc83xx.h
>>>>> @@ -25,6 +25,10 @@
>>>>> #include <platforms/83xx/mpc834x_sys.h>
>>>>> #endif
>>>>>
>>>>> +#ifdef CONFIG_MPC834x_ITX
>>>>> +#include <platforms/83xx/mpc834x_itx.h>
>>>>> +#endif
>>>>> +
>>>>
>>>> This shouldn't be needed, its a hold over from arch/ppc
>>>>
>>> Unfortunately it won't build without it.
>>
>> What's the build error?
>>
> ..
> CC arch/powerpc/platforms/83xx/mpc834x_itx.o
> arch/powerpc/platforms/83xx/mpc834x_itx.c: In function
> `mpc83xx_map_irq':
> arch/powerpc/platforms/83xx/mpc834x_itx.c:57: error: `PIRQB'
> undeclared (first use in this function)
> ..
Include the header in mpc834x_itc.c since its what's using it.
- k
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-06-30 4:32 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-29 2:13 [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board Kim Phillips
2006-06-29 5:10 ` Kumar Gala
2006-06-29 14:58 ` Kim Phillips
2006-06-29 16:38 ` Kumar Gala
2006-06-29 19:02 ` Kim Phillips
2006-06-30 4:32 ` Kumar Gala
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox