[PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

Subsystems: linux for powerpc (32-bit and 64-bit), linux for powerpc embedded ppc8xx and ppc83xx, the rest

STALE7354d

6 messages, 2 authors, 2006-06-30 · open the first message on its own page

[PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kim Phillips <hidden>
Date: 2006-06-29 02:13:29

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 <redacted>
Signed-off-by: Timur Tabi <redacted>
---

 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

Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kumar Gala <hidden>
Date: 2006-06-29 05:11:01

On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
quoted hunk
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 <redacted>
Signed-off-by: Timur Tabi <redacted>
---

 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?
quoted hunk
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

Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kim Phillips <hidden>
Date: 2006-06-29 14:58:48

On Thu, 29 Jun 2006 00:10:56 -0500
Kumar Gala [off-list ref] wrote:
On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
quoted
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>
quoted
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>
quoted
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

Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kumar Gala <hidden>
Date: 2006-06-29 16:38:09

On Jun 29, 2006, at 9:58 AM, Kim Phillips wrote:
On Thu, 29 Jun 2006 00:10:56 -0500
Kumar Gala [off-list ref] wrote:
quoted
On Jun 28, 2006, at 9:13 PM, Kim Phillips wrote:
quoted
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>
quoted
quoted
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>
quoted
quoted
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

Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kim Phillips <hidden>
Date: 2006-06-29 19:02:26

On Thu, 29 Jun 2006 11:38:04 -0500
Kumar Gala [off-list ref] wrote:
quoted
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..
quoted
<snip>
quoted
quoted
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

Re: [PATCH 1/3] Add support for the Freescale MPC8349E-mITX eval board

From: Kumar Gala <hidden>
Date: 2006-06-30 04:32:10

On Jun 29, 2006, at 2:02 PM, Kim Phillips wrote:
On Thu, 29 Jun 2006 11:38:04 -0500
Kumar Gala [off-list ref] wrote:
quoted
quoted
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.
quoted
quoted
<snip>
quoted
quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help