LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 85xx PHY Platform Update
From: info @ 2005-10-24 14:49 UTC (permalink / raw)
  To: linuxppc-embedded

Andy, Kumar

I try this patch for RMC-G8500 from GDAtech, error message below:
---------------------------------------------------------------------------------
 [root@ppclinux linux-2.6.13]# make uImage
  CHK     include/linux/version.h
  CHK     include/linux/compile.h
  CHK     usr/initramfs_list
  CC      drivers/net/gianfar.o
drivers/net/gianfar.c: In function `gfar_probe':
drivers/net/gianfar.c:217: error: structure has no member named `phy_reg_addr'
drivers/net/gianfar.c: In function `init_phy':
drivers/net/gianfar.c:452: error: structure has no member named `phyid'
drivers/net/gianfar.c: In function `stop_gfar':
drivers/net/gianfar.c:636: error: structure has no member named `interruptPHY'
drivers/net/gianfar.c: In function `gfar_phy_startup_timer':
drivers/net/gianfar.c:1818: error: structure has no member named `interruptPHY'
drivers/net/gianfar.c:1826: error: structure has no member named `interruptPHY'
make[2]: *** [drivers/net/gianfar.o] Error 1
make[1]: *** [drivers/net] Error 2
make: *** [drivers] Error 2

---------------------------------------------------------------------------------
because???
 
 /* Internal interrupts are all Level Sensitive, and Positive Polarity */
diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h
--- a/include/linux/fsl_devices.h
+++ b/include/linux/fsl_devices.h
@@ -47,14 +47,19 @@
 struct gianfar_platform_data {
 	/* device specific information */
 	u32 device_flags;
-	u32 phy_reg_addr;
 
 	/* board specific information */
 	u32 board_flags;
-	u32 phy_flags;
-	u32 phyid;
-	u32 interruptPHY;
+	const char *bus_id;
 	u8 mac_addr[6];
+};
+


-------------------------------------------------------------------------------------------
<This patch updates the 85xx platform code to support the new PHY Layer.
<
<Signed-off-by: Andy Fleming <afleming at freescale.com>
<Signed-off-by: Kumar Gala <Kumar.gala at freescale.com>
<
<
<diff --git a/arch/ppc/platforms/85xx/mpc8540_ads.c b/arch/ppc/platforms/85xx/mpc8540_ads.c
<--- a/arch/ppc/platforms/85xx/mpc8540_ads.c
<+++ b/arch/ppc/platforms/85xx/mpc8540_ads.c
<@@ -53,6 +53,10 @@
< 
< #include <syslib/ppc85xx_setup.h>
< 
<+static const char *GFAR_PHY_0 = "phy0:0";
<+static const char *GFAR_PHY_1 = "phy0:1";
<+static const char *GFAR_PHY_3 = "phy0:3";
<+
< /* ************************************************************************
<  *
<  * Setup the architecture
<@@ -64,6 +68,7 @@ mpc8540ads_setup_arch(void)

^ permalink raw reply

* [PATCH 2.6.14-rc5 1/1] chrp_pegasos_eth: Added Marvell Discovery II SRAM support
From: Nicolas DET @ 2005-10-24 13:09 UTC (permalink / raw)
  To: Sven Luther, Andrew Morton, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 229 bytes --]

Added proper entry to support the Marvell MV64361 (Marvell Discovery II)
SRAM.

This feature may be used by the mv643xx_eth driver.

Signed-off-by: Nicolas DET <det.nicolas@free.fr>
Signed-off-by: Sven Luther <sl@bplan-gmbh.de>


[-- Attachment #2: chrp_pegasos_eth.2.6.14-rc5.patch --]
[-- Type: text/x-patch, Size: 4477 bytes --]

diff -Naur a/arch/ppc/platforms/chrp_pegasos_eth.c b/arch/ppc/platforms/chrp_pegasos_eth.c
--- a/arch/ppc/platforms/chrp_pegasos_eth.c	2005-10-24 14:48:16.087853000 +0200
+++ b/arch/ppc/platforms/chrp_pegasos_eth.c	2005-10-24 15:05:09.271853000 +0200
@@ -17,7 +17,20 @@
 #include <linux/mv643xx.h>
 #include <linux/pci.h>
 
-/* Pegasos 2 specific Marvell MV 64361 gigabit ethernet port setup */
+#define PEGASOS2_MARVELL_REGBASE 		(0xf1000000)
+#define PEGASOS2_MARVELL_REGSIZE 		(0x00004000)
+#define PEGASOS2_SRAM_BASE 			(0xf2000000)
+#define PEGASOS2_SRAM_SIZE			(256*1024)
+
+#define PEGASOS2_SRAM_BASE_ETH0			(PEGASOS2_SRAM_BASE)
+#define PEGASOS2_SRAM_BASE_ETH1			(PEGASOS2_SRAM_BASE_ETH0 + (PEGASOS2_SRAM_SIZE / 2) )
+
+
+#define PEGASOS2_SRAM_RXRING_SIZE		(PEGASOS2_SRAM_SIZE/4)
+#define PEGASOS2_SRAM_TXRING_SIZE		(PEGASOS2_SRAM_SIZE/4)
+
+#undef BE_VERBOSE
+
 static struct resource mv643xx_eth_shared_resources[] = {
 	[0] = {
 		.name	= "ethernet shared base",
@@ -44,7 +57,16 @@
 	},
 };
 
-static struct mv643xx_eth_platform_data eth0_pd;
+
+static struct mv643xx_eth_platform_data eth0_pd = {
+	.tx_sram_addr = PEGASOS2_SRAM_BASE_ETH0,
+	.tx_sram_size = PEGASOS2_SRAM_TXRING_SIZE,
+	.tx_queue_size = PEGASOS2_SRAM_TXRING_SIZE/16,
+
+	.rx_sram_addr = PEGASOS2_SRAM_BASE_ETH0 + PEGASOS2_SRAM_TXRING_SIZE,
+	.rx_sram_size = PEGASOS2_SRAM_RXRING_SIZE,
+	.rx_queue_size = PEGASOS2_SRAM_RXRING_SIZE/16,
+};
 
 static struct platform_device eth0_device = {
 	.name		= MV643XX_ETH_NAME,
@@ -65,7 +87,15 @@
 	},
 };
 
-static struct mv643xx_eth_platform_data eth1_pd;
+static struct mv643xx_eth_platform_data eth1_pd = {
+	.tx_sram_addr = PEGASOS2_SRAM_BASE_ETH1,
+	.tx_sram_size = PEGASOS2_SRAM_TXRING_SIZE,
+	.tx_queue_size = PEGASOS2_SRAM_TXRING_SIZE/16,
+	
+	.rx_sram_addr = PEGASOS2_SRAM_BASE_ETH1 + PEGASOS2_SRAM_TXRING_SIZE,
+	.rx_sram_size = PEGASOS2_SRAM_RXRING_SIZE,
+	.rx_queue_size = PEGASOS2_SRAM_RXRING_SIZE/16,
+};
 
 static struct platform_device eth1_device = {
 	.name		= MV643XX_ETH_NAME,
@@ -83,9 +113,61 @@
 	&eth1_device,
 };
 
+/***********/
+/***********/
+#define MV_READ(offset,val) 	{ val = readl(mv643xx_reg_base + offset); }
+#define MV_WRITE(offset,data) writel(data, mv643xx_reg_base + offset)
+
+static void __iomem *mv643xx_reg_base = NULL;
+
+
+static int Enable_SRAM(void)
+{
+	u32 ALong;
+	
+	if (mv643xx_reg_base == NULL)
+		mv643xx_reg_base = ioremap(PEGASOS2_MARVELL_REGBASE, PEGASOS2_MARVELL_REGSIZE);
+
+	if (mv643xx_reg_base == NULL)
+	return -ENOMEM;
+
+#ifdef BE_VERBOSE
+	printk("Pegasos II/Marvell MV64361: register remapped from %p to %p\n", (void *)PEGASOS2_MARVELL_REGBASE, (void *)mv643xx_reg_base);
+#endif
 
-int
-mv643xx_eth_add_pds(void)
+	MV_WRITE(MV64340_SRAM_CONFIG, 0);
+
+	MV_WRITE(MV64340_INTEGRATED_SRAM_BASE_ADDR, PEGASOS2_SRAM_BASE >> 16);
+
+	MV_READ(MV64340_BASE_ADDR_ENABLE, ALong);
+	ALong &= ~(1 << 19);
+	MV_WRITE(MV64340_BASE_ADDR_ENABLE, ALong);
+
+	ALong = 0x02;
+	ALong |= PEGASOS2_SRAM_BASE & 0xffff0000; 
+	MV_WRITE(MV643XX_ETH_BAR_4, ALong);
+
+	MV_WRITE(MV643XX_ETH_SIZE_REG_4, (PEGASOS2_SRAM_SIZE-1) & 0xffff0000);
+
+	MV_READ(MV643XX_ETH_BASE_ADDR_ENABLE_REG, ALong);
+	ALong &= ~(1 << 4);
+	MV_WRITE(MV643XX_ETH_BASE_ADDR_ENABLE_REG, ALong);
+
+#ifdef BE_VERBOSE
+	printk("Pegasos II/Marvell MV64361: register unmapped\n");
+	printk("Pegasos II/Marvell MV64361: SRAM at %p, size=%x\n", (void*) PEGASOS2_SRAM_BASE, PEGASOS2_SRAM_SIZE);
+#endif
+
+	iounmap(mv643xx_reg_base);
+	mv643xx_reg_base = NULL;
+
+	return 1;
+}
+
+
+/***********/
+/***********/
+int mv643xx_eth_add_pds(void)
 {
 	int ret = 0;
 	static struct pci_device_id pci_marvell_mv64360[] = {
@@ -93,9 +175,39 @@
 		{ }
 	};
 
-	if (pci_dev_present(pci_marvell_mv64360)) {
+#ifdef BE_VERBOSE
+	printk("Pegasos II/Marvell MV64361: init\n");
+#endif
+
+	if (pci_dev_present(pci_marvell_mv64360))
+	{
 		ret = platform_add_devices(mv643xx_eth_pd_devs, ARRAY_SIZE(mv643xx_eth_pd_devs));
+		
+		if ( Enable_SRAM() < 0)
+		{
+			eth0_pd.tx_sram_addr = 0;
+			eth0_pd.tx_sram_size = 0;
+			eth0_pd.rx_sram_addr = 0;
+			eth0_pd.rx_sram_size = 0;
+			
+			eth1_pd.tx_sram_addr = 0;
+			eth1_pd.tx_sram_size = 0;
+			eth1_pd.rx_sram_addr = 0;
+			eth1_pd.rx_sram_size = 0;
+			
+#ifdef BE_VERBOSE
+			printk("Pegasos II/Marvell MV64361: Can't enable the SRAM\n");
+#endif
+		}	
 	}
+	
+#ifdef BE_VERBOSE
+		
+	printk("Pegasos II/Marvell MV64361: init is over\n");
+#endif
+	
 	return ret;
 }
+
 device_initcall(mv643xx_eth_add_pds);
+

^ permalink raw reply

* Re: MPC8xx soft-float userspace ...
From: Matej Kupljen @ 2005-10-24  8:27 UTC (permalink / raw)
  To: Schaefer-Hutter, Peter; +Cc: linuxppc-embedded
In-Reply-To: <8E342283C2100540AAC5D103097054778A4189@rcexc.racoms.loc>

Hi

> While i was successful in compiling a glibc with -mcpu=860
> and soft-float (and without memset.S) there's still floating
> point in there. Does anybody have some pointers what else
> needs to be removed?

I had similar problems on MIPS.
Look at this threads:
http://sources.redhat.com/ml/crossgcc/2005-09/msg00054.html
http://sources.redhat.com/ml/crossgcc/2005-09/msg00063.html

BR,
Matej

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Brad Boyer @ 2005-10-23 17:44 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Andrew Morton, Linux/PPC Development, Geert Uytterhoeven,
	Olaf Hering
In-Reply-To: <1130055811.7919.61.camel@gaston>

On Sun, Oct 23, 2005 at 06:23:31PM +1000, Benjamin Herrenschmidt wrote:
> On Sun, 2005-10-23 at 10:23 +0200, Geert Uytterhoeven wrote:
> > On Sat, 22 Oct 2005, Olaf Hering wrote:
> > > SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
> > 
> > And on some CHRP.
> > 
> > You can no longer enable MESH when compiling for CHRP or when disabling ADB?
> > 
> > It's clearly visible my LongTrail died last year... :-(
> 
> Come on, Geert, I told you back then I was doing that :) You didn't
> complain and we figured out nobody around had any of these in working
> conditions anymore :)

Well, it really doesn't have anything to do with ADB. The problem is
actually the macio bus layer, but we don't have CONFIG_ options for
that. I've been working on getting the macio code running in 68k,
so I was thinking of introducing a CONFIG_MACIO. Would this be an
acceptable option? On 68k, I would just default it to yes if the
config has CONFIG_MAC, but it could be made a real question for ppc
since the platform stuff doesn't really let you select just a pci
powermac kernel anymore. Any comments?

I suppose if anyone still has one of those old CHRP machines, we
could probably get hydra supported by macio_asic to get some of the
other drivers working on it.

	Brad Boyer
	flar@allandria.com

^ permalink raw reply

* RE:Help needed Linux-2.6 - MPC8541
From: info @ 2005-10-23 15:39 UTC (permalink / raw)
  To: linuxppc-embedded

[-- Attachment #1: Type: text/plain, Size: 677 bytes --]

Junita

Sorry to disturbed you. I find your question in the http://ozlabs.org mail list.
Have you fixed the bug in gianfar_phy.c? 
tempval = gfar_read(&priv-> regs-> dmactrl);
tempval |= (DMACTRL_GRS | DMACTRL_GTS);
gfar_write(&priv-> regs-> dmactrl, tempval);

while (!(gfar_read(&priv-> regs-> ievent) & (IEVENT_GRSC | IEVENT_GTSC)))
cpu_relax();

/* Reset MAC layer */
gfar_write(&priv-> regs-> maccfg1, MACCFG1_SOFT_RESET);

I buy a RMC-G8500 card from GDAtech, I try to build linux-2.6.13.4 from kernel.org and meet the same problems as you had. I test the same code on freescale 8540_ADS board, it is good.Can you share some infomation of your progress?

Thank you!
Jian

[-- Attachment #2: Type: text/html, Size: 1819 bytes --]

^ permalink raw reply

* Re: [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-23 13:27 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1130061332.7919.63.camel@gaston>

Please don't test my last patch, it will breaks some page table code.

^ permalink raw reply

* Re: Newbie... in mailing lists...
From: David Woodhouse @ 2005-10-23 11:38 UTC (permalink / raw)
  To: Nathael PAJANI; +Cc: linuxppc-embedded
In-Reply-To: <1129621982.3830.310.camel@baythorne.infradead.org>

On Tue, 2005-10-18 at 08:53 +0100, David Woodhouse wrote:
> That's a problem with the archives; it's not your fault. If you look
> at the mailto: link at the top of that page, you see it looks like
> this:
> 
> mailto:linuxppc-embedded%40ozlabs.org?Subject=eldk%203.1.1%20ramdisk%20image%20problem&In-Reply-To=
> 
> Although it _attempts_ to set the In-Reply-To: header which would make
> your message appear to be a reply to the mail in the archive, it seems
> to be missing the actual message-id of that mail; it's just empty.

I filed this mailman bug along with a partial fix at
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=171567

-- 
dwmw2

^ permalink raw reply

* Re: [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-23 11:03 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1130061332.7919.63.camel@gaston>

On Sunday 23 October 2005 11:55, Benjamin Herrenschmidt wrote:
> On Sun, 2005-10-23 at 11:36 +0200, Rupert Eibauer wrote:
> > On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> > > Rupert Eibauer writes:
> > > 
> > > > What this patch actually does:
> > > > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
> > > 
> > > Why?  What does this gain us?  
> > 
> > I have I/O resources there which are not reachable in 32 bit mode.
> > 
> > > We still can't use RAM above the 4GB point AFAICS.
> > 
> > Does this mean the page tables do not support 63 bit?
> 
> Not with the current code. At least not for those CPUs.

I meant 36 bit, but I think you have guessed correctly what I mean.
CONFIG_PHYS_64BIT should really be named CONFIG_PHYS_36BIT.

I have put some more effort into understanding how the page tables work,
and came to the following patch. Maybe this addition makes my previous
patch more attractive to Paul.

Correctness not guaranted, I cannot test it on my hardware.

Rupert

--- pgtable.h.orig	Sun Oct 23 12:18:18 2005
+++ pgtable.h	Sun Oct 23 12:36:55 2005
@@ -446,11 +446,23 @@
 #define PFN_SHIFT_OFFSET	(PAGE_SHIFT)
 #endif
 
-#define pte_pfn(x)		(pte_val(x) >> PFN_SHIFT_OFFSET)
+#if !defined(CONFIG_PTE_64BIT) && defined(CONFIG_PHYS_64BIT)
+#define pfn_36bit_pte_bits(pfn)		((pfn >> (32 - 2 - PAGE_SHIFT) & 4) |\
+					((pfn >> (33 - 9 - PAGE_SHIFT)) & 0xe00))
+
+#define pte_36bit_pfn_bits(pte_val)	((((pte) & 4) << (32 - 2 - PAGE_SHIFT) |\
+					(((pte) & 0xe00) << (33 - 9 - PAGE_SHIFT))
+#else
+#define pfn_36bit_pte_bits(pfn)		0
+#define pte_36bit_pfn_bits(pte_val)	0
+#endif
+
+#define pte_pfn(x)		((pte_val(x) >> PFN_SHIFT_OFFSET) | \
+					((get_highbits_36(pte_val(x))) << (32 - PAGE_SHIFT)))
 #define pte_page(x)		pfn_to_page(pte_pfn(x))
 
 #define pfn_pte(pfn, prot)	__pte(((pte_basic_t)(pfn) << PFN_SHIFT_OFFSET) |\
-					pgprot_val(prot))
+					pgprot_val(prot) | pfn_36bit_pte_bits(pfn))
 #define mk_pte(page, prot)	pfn_pte(page_to_pfn(page), prot)
 
 /*

^ permalink raw reply

* Re: [PATCH][RFT] Extended BAT features, take 2
From: Benjamin Herrenschmidt @ 2005-10-23  9:55 UTC (permalink / raw)
  To: Rupert Eibauer; +Cc: linuxppc-dev
In-Reply-To: <200510231136.51548.rupert@ces.ch>

On Sun, 2005-10-23 at 11:36 +0200, Rupert Eibauer wrote:
> On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> > Rupert Eibauer writes:
> > 
> > > What this patch actually does:
> > > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
> > 
> > Why?  What does this gain us?  
> 
> I have I/O resources there which are not reachable in 32 bit mode.
> 
> > We still can't use RAM above the 4GB point AFAICS.
> 
> Does this mean the page tables do not support 63 bit?

Not with the current code. At least not for those CPUs.

Ben.

^ permalink raw reply

* Re: [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-23  9:36 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: linuxppc-dev
In-Reply-To: <17242.56232.293762.303684@cargo.ozlabs.ibm.com>

On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> Rupert Eibauer writes:
> 
> > What this patch actually does:
> > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
> 
> Why?  What does this gain us?  

I have I/O resources there which are not reachable in 32 bit mode.

> We still can't use RAM above the 4GB point AFAICS.

Does this mean the page tables do not support 63 bit?

Rupert

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-23  8:23 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Andrew Morton, Linux/PPC Development, Olaf Hering
In-Reply-To: <Pine.LNX.4.62.0510231021070.16077@numbat.sonytel.be>

On Sun, 2005-10-23 at 10:23 +0200, Geert Uytterhoeven wrote:
> On Sat, 22 Oct 2005, Olaf Hering wrote:
> > SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
> 
> And on some CHRP.
> 
> > --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> > +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> > @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
> >  
> >  config SCSI_MESH
> >  	tristate "MESH (Power Mac internal SCSI) support"
> > -	depends on PPC32 && PPC_PMAC && SCSI
> > +	depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
> >  	help
> >  	  Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
> >  	  SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
> 
> You can no longer enable MESH when compiling for CHRP or when disabling ADB?
> 
> It's clearly visible my LongTrail died last year... :-(

Come on, Geert, I told you back then I was doing that :) You didn't
complain and we figured out nobody around had any of these in working
conditions anymore :)

Ben.

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-23  8:22 UTC (permalink / raw)
  To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051023081240.GA20134@suse.de>


> > No. SMU machines too
> 
> arch/ppc64/configs/g5_defconfig has CONFIG_ADB_PMU enabled.
> It compiles ok with that option disabled.
> Is there a pmu in early G5 models?

Yes, but not newer ones and I intend to change the way all those low
level support options are dealt with anyway

Ben.

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Geert Uytterhoeven @ 2005-10-23  8:23 UTC (permalink / raw)
  To: Olaf Hering; +Cc: Andrew Morton, Linux/PPC Development
In-Reply-To: <20051022213037.GA6097@suse.de>

On Sat, 22 Oct 2005, Olaf Hering wrote:
> SCSI_MESH exists on old Macs, but the PB Lombard has an external connector

And on some CHRP.

> --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
>  
>  config SCSI_MESH
>  	tristate "MESH (Power Mac internal SCSI) support"
> -	depends on PPC32 && PPC_PMAC && SCSI
> +	depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
>  	help
>  	  Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
>  	  SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the

You can no longer enable MESH when compiling for CHRP or when disabling ADB?

It's clearly visible my LongTrail died last year... :-(

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Olaf Hering @ 2005-10-23  8:12 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <1130022347.7919.39.camel@gaston>

 On Sun, Oct 23, Benjamin Herrenschmidt wrote:

> On Sat, 2005-10-22 at 23:30 +0200, Olaf Hering wrote:
> > This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606
> > 
> > Hiding a few pmac specific drivers when ADB is disabled can not hurt:
> > 
> > AGP_UNINORTH exist only on systems with ADB_PMU
> 
> No. SMU machines too

arch/ppc64/configs/g5_defconfig has CONFIG_ADB_PMU enabled.
It compiles ok with that option disabled.
Is there a pmu in early G5 models?

-- 
short story of a lazy sysadmin:
 alias appserv=wotan

^ permalink raw reply

* Re: [PATCH][RFT] Extended BAT features, take 2
From: Paul Mackerras @ 2005-10-23  0:39 UTC (permalink / raw)
  To: Rupert Eibauer; +Cc: linuxppc-dev
In-Reply-To: <200510221554.03810.rupert@ces.ch>

Rupert Eibauer writes:

> What this patch actually does:
> - Make CONFIG_PHYS_64BIT selectable for the 6xx family

Why?  What does this gain us?  We still can't use RAM above the 4GB
point AFAICS.

Paul.

^ permalink raw reply

* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-22 23:05 UTC (permalink / raw)
  To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022213037.GA6097@suse.de>

On Sat, 2005-10-22 at 23:30 +0200, Olaf Hering wrote:
> This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606
> 
> Hiding a few pmac specific drivers when ADB is disabled can not hurt:
> 
> AGP_UNINORTH exist only on systems with ADB_PMU

No. SMU machines too

> I2C_KEYWEST is used by sound

Same comment. PMU and SMU based machines. Be careful of not breaking
ppc64 here :) I think those changes are definitely not welcome now. Wait
for the big ppc/ppc64 merge that's coming, a lot of stuff will be
consolidated and these will be much easier to do. Also, I'm seriously
considering removing the user setting for "CUDA based machiens" vs. "PMU
based machines". I may instead just enable machine generations
(PowerSurge, PowerStar, Gossamer, Core99, MacRISC2, MacRISC4)

> MACE exists only on systems with ADB_CUDA

Hrm... No old laptop with Mace ? Yah, I think that's ok.

> BMAC exists on old and new Macs

Yah, Cuda and PMU based.

> SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
> SERIAL_PMACZILOG exists on old and new Macs
> BLK_DEV_IDE_PMAC exists on old and new Macs

You missed SMU again... 

> APPLE_AIRPORT exist only on systems with ADB_PMU
> FB_CONTROL exists only on old Macs
> FB_PLATINUM exists only on old Macs
> FB_VALKYRIE exists only on old Macs
> FB_CT65550 exists only on old Macs

No, it's on old laptops which are PMU based

Anyway, I'm not fan of this patch at all. We should do that properly in
a different way after the merge.

Ben.

> 
> Signed-off-by: Olaf Hering <olh@suse.de>
> 
>  drivers/char/agp/Kconfig     |    2 +-
>  drivers/i2c/busses/Kconfig   |    2 +-
>  drivers/ide/Kconfig          |    2 +-
>  drivers/net/Kconfig          |    4 ++--
>  drivers/net/wireless/Kconfig |    2 +-
>  drivers/scsi/Kconfig         |    4 ++--
>  drivers/serial/Kconfig       |    2 +-
>  drivers/video/Kconfig        |    8 ++++----
>  8 files changed, 13 insertions(+), 13 deletions(-)
> 
> Index: linux-2.6.14-rc5/drivers/char/agp/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/char/agp/Kconfig
> +++ linux-2.6.14-rc5/drivers/char/agp/Kconfig
> @@ -147,7 +147,7 @@ config AGP_ALPHA_CORE
>  
>  config AGP_UNINORTH
>  	tristate "Apple UniNorth & U3 AGP support"
> -	depends on AGP && PPC_PMAC
> +	depends on AGP && PPC_PMAC && ADB_PMU
>  	help
>  	  This option gives you AGP support for Apple machines with a
>  	  UniNorth or U3 (Apple G5) bridge.
> Index: linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/i2c/busses/Kconfig
> +++ linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
> @@ -237,7 +237,7 @@ config I2C_IXP2000
>  
>  config I2C_KEYWEST
>  	tristate "Powermac Keywest I2C interface"
> -	depends on I2C && PPC_PMAC
> +	depends on I2C && PPC_PMAC && (ADB_CUDA || ADB_PMU)
>  	help
>  	  This supports the use of the I2C interface in the combo-I/O
>  	  chip on recent Apple machines.  Say Y if you have such a machine.
> Index: linux-2.6.14-rc5/drivers/net/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/net/Kconfig
> +++ linux-2.6.14-rc5/drivers/net/Kconfig
> @@ -178,7 +178,7 @@ source "drivers/net/arm/Kconfig"
>  
>  config MACE
>  	tristate "MACE (Power Mac ethernet) support"
> -	depends on NET_ETHERNET && PPC_PMAC && PPC32
> +	depends on NET_ETHERNET && PPC_PMAC && PPC32 && ADB_CUDA
>  	select CRC32
>  	help
>  	  Power Macintoshes and clones with Ethernet built-in on the
> @@ -201,7 +201,7 @@ config MACE_AAUI_PORT
>  
>  config BMAC
>  	tristate "BMAC (G3 ethernet) support"
> -	depends on NET_ETHERNET && PPC_PMAC && PPC32
> +	depends on NET_ETHERNET && PPC_PMAC && PPC32 && (ADB_CUDA || ADB_PMU)
>  	select CRC32
>  	help
>  	  Say Y for support of BMAC Ethernet interfaces. These are used on G3
> Index: linux-2.6.14-rc5/drivers/scsi/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
>  
>  config SCSI_MESH
>  	tristate "MESH (Power Mac internal SCSI) support"
> -	depends on PPC32 && PPC_PMAC && SCSI
> +	depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
>  	help
>  	  Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
>  	  SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
> @@ -1560,7 +1560,7 @@ config SCSI_MESH_RESET_DELAY_MS
>  
>  config SCSI_MAC53C94
>  	tristate "53C94 (Power Mac external SCSI) support"
> -	depends on PPC32 && PPC_PMAC && SCSI
> +	depends on PPC32 && PPC_PMAC && SCSI && ADB_CUDA
>  	help
>  	  On Power Macintoshes (and clones) with two SCSI buses, the external
>  	  SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
> Index: linux-2.6.14-rc5/drivers/serial/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/serial/Kconfig
> +++ linux-2.6.14-rc5/drivers/serial/Kconfig
> @@ -651,7 +651,7 @@ config SERIAL_68360
>  
>  config SERIAL_PMACZILOG
>  	tristate "PowerMac z85c30 ESCC support"
> -	depends on PPC_OF && PPC_PMAC
> +	depends on PPC_OF && PPC_PMAC && (ADB_CUDA || ADB_PMU)
>  	select SERIAL_CORE
>  	help
>  	  This driver supports the Zilog z85C30 serial ports found on
> Index: linux-2.6.14-rc5/drivers/ide/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/ide/Kconfig
> +++ linux-2.6.14-rc5/drivers/ide/Kconfig
> @@ -744,7 +744,7 @@ endif
>  
>  config BLK_DEV_IDE_PMAC
>  	bool "Builtin PowerMac IDE support"
> -	depends on PPC_PMAC && IDE=y
> +	depends on PPC_PMAC && IDE=y && (ADB_CUDA || ADB_PMU)
>  	help
>  	  This driver provides support for the built-in IDE controller on
>  	  most of the recent Apple Power Macintoshes and PowerBooks.
> Index: linux-2.6.14-rc5/drivers/net/wireless/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/net/wireless/Kconfig
> +++ linux-2.6.14-rc5/drivers/net/wireless/Kconfig
> @@ -281,7 +281,7 @@ config HERMES
>  
>  config APPLE_AIRPORT
>  	tristate "Apple Airport support (built-in)"
> -	depends on PPC_PMAC && HERMES
> +	depends on PPC_PMAC && HERMES && ADB_PMU
>  	help
>  	  Say Y here to support the Airport 802.11b wireless Ethernet hardware
>  	  built into the Macintosh iBook and other recent PowerPC-based
> Index: linux-2.6.14-rc5/drivers/video/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/video/Kconfig
> +++ linux-2.6.14-rc5/drivers/video/Kconfig
> @@ -359,7 +359,7 @@ config FB_OF
>  
>  config FB_CONTROL
>  	bool "Apple \"control\" display support"
> -	depends on (FB = y) && PPC_PMAC
> +	depends on (FB = y) && PPC_PMAC && ADB_CUDA
>  	select FB_CFB_FILLRECT
>  	select FB_CFB_COPYAREA
>  	select FB_CFB_IMAGEBLIT
> @@ -371,7 +371,7 @@ config FB_CONTROL
>  
>  config FB_PLATINUM
>  	bool "Apple \"platinum\" display support"
> -	depends on (FB = y) && PPC_PMAC
> +	depends on (FB = y) && PPC_PMAC && ADB_CUDA
>  	select FB_CFB_FILLRECT
>  	select FB_CFB_COPYAREA
>  	select FB_CFB_IMAGEBLIT
> @@ -383,7 +383,7 @@ config FB_PLATINUM
>  
>  config FB_VALKYRIE
>  	bool "Apple \"valkyrie\" display support"
> -	depends on (FB = y) && (MAC || PPC_PMAC)
> +	depends on (FB = y) && (MAC || (PPC_PMAC && ADB_CUDA))
>  	select FB_CFB_FILLRECT
>  	select FB_CFB_COPYAREA
>  	select FB_CFB_IMAGEBLIT
> @@ -395,7 +395,7 @@ config FB_VALKYRIE
>  
>  config FB_CT65550
>  	bool "Chips 65550 display support"
> -	depends on (FB = y) && PPC
> +	depends on (FB = y) && PPC_PMAC && ADB_CUDA
>  	select FB_CFB_FILLRECT
>  	select FB_CFB_COPYAREA
>  	select FB_CFB_IMAGEBLIT

^ permalink raw reply

* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Benjamin Herrenschmidt @ 2005-10-22 23:00 UTC (permalink / raw)
  To: Brad Boyer; +Cc: Andrew Morton, linuxppc-dev, Olaf Hering
In-Reply-To: <20051022210122.GA9638@pants.nu>

On Sat, 2005-10-22 at 14:01 -0700, Brad Boyer wrote:
> On Sat, Oct 22, 2005 at 09:46:26PM +0200, Olaf Hering wrote:
> > 
> > dmasound_pmac should depend on pmac specific .config options.
> > Since PMAC is always defined, but PMAC wont boot without either
> > CUDA or PMU, one of these options indicates that the kernel is
> > for a PowerMac.
> > CONFIG_PM can be selected unconditionally.
> 
> I disagree. I think a much better solution would be to change the
> code to be conditionalized internally on PMU support, rather than
> having #ifdef CONFIG_PM since the functions being called inside
> that protection are actually out of the PMU code, not the generic
> power management system. By doing this, you could for example
> have a kernel compiled for a 1st gen PCI PowerMac without any
> extra drivers. In this case, you have CUDA and AWACS, but there
> is no PMU support and no need for sleep notifiers.

The fix is a longer term issue. dmasound should stop using PMU specific
PM notifiers and those should finally be deprecated. Taht would require
converting dmasound to be a proper macio device, which is a pain, and
while we are at it, finally rewriting dmasound (and/or snd-powermac)
properly which is on my todolist since nobody appears to be up to it.

Ben.

^ permalink raw reply

* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Brad Boyer @ 2005-10-22 23:03 UTC (permalink / raw)
  To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022211906.GA5820@suse.de>

On Sat, Oct 22, 2005 at 11:19:06PM +0200, Olaf Hering wrote:
>  On Sat, Oct 22, Brad Boyer wrote:
> 
> > I disagree. I think a much better solution would be to change the
> > code to be conditionalized internally on PMU support, rather than
> > having #ifdef CONFIG_PM since the functions being called inside
> > that protection are actually out of the PMU code, not the generic
> > power management system. By doing this, you could for example
> > have a kernel compiled for a 1st gen PCI PowerMac without any
> > extra drivers. In this case, you have CUDA and AWACS, but there
> > is no PMU support and no need for sleep notifiers.
> 
> May patch would allow that, you need either CUDA or PMU support.

The problem is not that you need CUDA or PMU support. The real
problem is that if you have CONFIG_PM set and do not have
CONFIG_ADB_PMU set, the pmac sound drivers don't compile because
they have calls into the pmu code protected by #ifdef CONFIG_PM,
which isn't enough to ensure that those symbols actually exist.
That code gets into the kernel only if you have CONFIG_PM and
CONFIG_ADB_PMU both set. Your patch will still fail in the
following case:

CONFIG_PM set
CONFIG_CUDA set
CONFIG_ADB_PMU not set

If you enable either of the pmac sound drivers with this setup,
it will fail to compile with exactly the same error.

	Brad Boyer
	flar@allandria.com

^ permalink raw reply

* Add PCI support for TQM834x Boards
From: Wolfgang Denk @ 2005-10-22 22:36 UTC (permalink / raw)
  To: linuxppc-dev

The following patch (against latest 2.6 tree) adds  PCI  support  for
the TQ Systems TQM834x Boards. Verified on TQM8349L.

Note: for TQM834x board support actually to compile and  work,  three
previously submitted patches are required. See postings:

Sat, 22 Oct 2005   [PATCH 2.6] Add generic support for DS1377 RTC
Sat, 22 Oct 2005   [PATCH] Cleanup mpc83xx_restart() code
Sat, 22 Oct 2005   [Patch] Add support for TQM834x Boards


---
PCI support for the TQM834x boards.

Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>


---
commit 5108607a56824e025fda5efe9f68ff310545adb9
tree 4e3b67d3e9f4188f69de9715da68781fb7eebc84
parent 0af38510e829b6d397128269fe194898924ab534
author Rafal Jaworowski <raj@pollux.denx.de> Wed, 19 Oct 2005 12:32:42 +0200
committer Rafal Jaworowski <raj@pollux.denx.de> Wed, 19 Oct 2005 12:32:42 +0200

 arch/ppc/platforms/83xx/mpc834x_sys.c |    7 +++
 arch/ppc/platforms/83xx/tqm834x.c     |   37 ++++++++++-----
 arch/ppc/platforms/83xx/tqm834x.h     |   10 ++--
 arch/ppc/syslib/ppc83xx_pci.h         |   41 +++++++++++++++++
 arch/ppc/syslib/ppc83xx_setup.c       |   79 ++++++++++++++++++++++++++++-----
 arch/ppc/syslib/ppc83xx_setup.h       |    1 
 include/linux/pci_ids.h               |   10 ++++
 7 files changed, 157 insertions(+), 28 deletions(-)

diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c
--- a/arch/ppc/platforms/83xx/mpc834x_sys.c
+++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
@@ -364,6 +364,13 @@ platform_init(unsigned long r3, unsigned
 	ppc_md.progress = gen550_progress;
 #endif	/* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
 
+#ifdef CONFIG_PCI
+	ppc_md.pci_swizzle = common_swizzle;
+	ppc_md.pci_map_irq = mpc83xx_map_irq; 
+	ppc_md.pci_exclude_device = mpc83xx_exclude_device;
+	ppc_md.pcibios_fixup = mpc834x_pcibios_fixup;
+#endif /* CONFIG_PCI */
+
 	if (ppc_md.progress)
 		ppc_md.progress("mpc834x_sys_init(): exit", 0);
 
diff --git a/arch/ppc/platforms/83xx/tqm834x.c b/arch/ppc/platforms/83xx/tqm834x.c
--- a/arch/ppc/platforms/83xx/tqm834x.c
+++ b/arch/ppc/platforms/83xx/tqm834x.c
@@ -61,28 +61,33 @@ unsigned char __res[sizeof (bd_t)];
 
 #ifdef CONFIG_PCI
 int
-mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
+tqm834x_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
 {
+	int irq;
 	static char pci_irq_table[][4] =
 	    /*
 	     *      PCI IDSEL/INTPIN->INTLINE
 	     *       A      B      C      D
 	     */
 	{
-		{PIRQA, PIRQB,  PIRQC,  PIRQD}, /* idsel 0x11 */
-		{PIRQC, PIRQD,  PIRQA,  PIRQB}, /* idsel 0x12 */
-		{PIRQD, PIRQA,  PIRQB,  PIRQC}  /* idsel 0x13 */
+		{PIRQA, PIRQB,  PIRQC,  PIRQD}, /* idsel 0x1c */
+		{PIRQB, PIRQC,  PIRQD,  PIRQA}, /* idsel 0x1d */
+		{PIRQC, PIRQD,  0,  0}  	/* idsel 0x1e */
 	};
 
-	const long min_idsel = 0x11, max_idsel = 0x13, irqs_per_slot = 4;
-	return PCI_IRQ_TABLE_LOOKUP;
+	const long min_idsel = 0x1c, max_idsel = 0x1e, irqs_per_slot = 4;
+	irq = PCI_IRQ_TABLE_LOOKUP;
+	if (!irq)
+		irq = 0;
+	return (irq);
 }
 
 int
-mpc83xx_exclude_device(u_char bus, u_char devfn)
+tqm834x_exclude_device(u_char bus, u_char devfn)
 {
 	return PCIBIOS_SUCCESSFUL;
 }
+
 #endif /* CONFIG_PCI */
 
 /* ************************************************************************
@@ -190,19 +195,20 @@ tqm834x_init_IRQ(void)
 	u8 senses[8] = {
 		0,			/* EXT 0 */
 		0,			/* EXT 1 */
-		0,			/* EXT 2 */
-		0,			/* EXT 3 */
 #ifdef CONFIG_PCI
-		IRQ_SENSE_LEVEL,	/* EXT 4 */
+		IRQ_SENSE_LEVEL,	/* EXT 2 */
+		IRQ_SENSE_LEVEL,	/* EXT 3 */
+		0,			/* EXT 4 */
 		IRQ_SENSE_LEVEL,	/* EXT 5 */
 		IRQ_SENSE_LEVEL,	/* EXT 6 */
-		IRQ_SENSE_LEVEL,	/* EXT 7 */
 #else
+		0,			/* EXT 2 */
+		0,			/* EXT 3 */
 		0,			/* EXT 4 */
 		0,			/* EXT 5 */
 		0,			/* EXT 6 */
-		0,			/* EXT 7 */
 #endif
+		IRQ_SENSE_LEVEL,	/* EXT 7 */
 	};
 
 	ipic_init(binfo->bi_immr_base + 0x00700, 0, MPC83xx_IPIC_IRQ_OFFSET, senses, 8);
@@ -329,6 +335,13 @@ platform_init(unsigned long r3, unsigned
 	ppc_md.progress = gen550_progress;
 #endif	/* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
 
+#ifdef CONFIG_PCI
+	ppc_md.pci_swizzle = common_swizzle;
+	ppc_md.pci_map_irq = tqm834x_map_irq;
+	ppc_md.pci_exclude_device = tqm834x_exclude_device;
+	ppc_md.pcibios_fixup = mpc834x_pcibios_fixup;
+#endif /* CONFIG_PCI */
+
 	if (ppc_md.progress)
 		ppc_md.progress("tqm834x_init(): exit", 0);
 
diff --git a/arch/ppc/platforms/83xx/tqm834x.h b/arch/ppc/platforms/83xx/tqm834x.h
--- a/arch/ppc/platforms/83xx/tqm834x.h
+++ b/arch/ppc/platforms/83xx/tqm834x.h
@@ -24,15 +24,15 @@
 
 #define VIRT_IMMRBAR		((uint)0xfe000000)
 
-#define PIRQA	MPC83xx_IRQ_EXT4
-#define PIRQB	MPC83xx_IRQ_EXT5
+#define PIRQA	MPC83xx_IRQ_EXT2
+#define PIRQB	MPC83xx_IRQ_EXT3
 #define PIRQC	MPC83xx_IRQ_EXT6
-#define PIRQD	MPC83xx_IRQ_EXT7
+#define PIRQD	MPC83xx_IRQ_EXT5
 
 #define MPC83xx_PCI1_LOWER_IO	0x00000000
 #define MPC83xx_PCI1_UPPER_IO	0x00ffffff
-#define MPC83xx_PCI1_LOWER_MEM	0x80000000
-#define MPC83xx_PCI1_UPPER_MEM	0x9fffffff
+#define MPC83xx_PCI1_LOWER_MEM	0xc0000000
+#define MPC83xx_PCI1_UPPER_MEM	0xdfffffff
 #define MPC83xx_PCI1_IO_BASE	0xe2000000
 #define MPC83xx_PCI1_MEM_OFFSET	0x00000000
 #define MPC83xx_PCI1_IO_SIZE	0x01000000
diff --git a/arch/ppc/syslib/ppc83xx_pci.h b/arch/ppc/syslib/ppc83xx_pci.h
--- a/arch/ppc/syslib/ppc83xx_pci.h
+++ b/arch/ppc/syslib/ppc83xx_pci.h
@@ -25,6 +25,47 @@ typedef struct immr_clk {
 	u32 sccr; /* system clock control Register  */
 	u8 res0[0xF4];
 } immr_clk_t;
+#define SPMR_LBIUCM  0x80000000 /* LBIUCM  */
+#define SPMR_DDRCM   0x40000000 /* DDRCM  */
+#define SPMR_SVCOD   0x30000000 /* SVCOD  */
+#define SPMR_SPMF    0x0F000000 /* SPMF  */
+#define SPMR_CKID    0x00800000 /* CKID  */
+#define SPMR_CKID_SHIFT 23
+#define SPMR_COREPLL 0x007F0000 /* COREPLL  */
+#define SPMR_CEVCOD  0x000000C0 /* CEVCOD  */
+#define SPMR_CEPDF   0x00000020 /* CEPDF  */
+#define SPMR_CEPMF   0x0000001F /* CEPMF  */
+
+#define OCCR_PCICOE0 0x80000000 /* PCICOE0  */
+#define OCCR_PCICOE1 0x40000000 /* PCICOE1  */
+#define OCCR_PCICOE2 0x20000000 /* PCICOE2  */
+#define OCCR_PCICOE3 0x10000000 /* PCICOE3  */
+#define OCCR_PCICOE4 0x08000000 /* PCICOE4  */
+#define OCCR_PCICOE5 0x04000000 /* PCICOE5  */
+#define OCCR_PCICOE6 0x02000000 /* PCICOE6  */
+#define OCCR_PCICOE7 0x01000000 /* PCICOE7  */
+#define OCCR_PCICD0  0x00800000 /* PCICD0  */
+#define OCCR_PCICD1  0x00400000 /* PCICD1  */
+#define OCCR_PCICD2  0x00200000 /* PCICD2  */
+#define OCCR_PCICD3  0x00100000 /* PCICD3  */
+#define OCCR_PCICD4  0x00080000 /* PCICD4  */
+#define OCCR_PCICD5  0x00040000 /* PCICD5  */
+#define OCCR_PCICD6  0x00020000 /* PCICD6  */
+#define OCCR_PCICD7  0x00010000 /* PCICD7  */
+#define OCCR_PCI1CR  0x00000002 /* PCI1CR  */
+#define OCCR_PCI2CR  0x00000001 /* PCI2CR  */
+
+#define SCCR_TSEC1CM  0xc0000000 /* TSEC1CM  */
+#define SCCR_TSEC1CM_SHIFT 30
+#define SCCR_TSEC2CM  0x30000000 /* TSEC2CM  */
+#define SCCR_TSEC2CM_SHIFT 28
+#define SCCR_ENCCM    0x03000000 /* ENCCM  */
+#define SCCR_ENCCM_SHIFT 24
+#define SCCR_USBMPHCM 0x00c00000 /* USBMPHCM  */
+#define SCCR_USBMPHCM_SHIFT 22
+#define SCCR_USBDRCM  0x00300000 /* USBDRCM  */
+#define SCCR_USBDRCM_SHIFT 20
+#define SCCR_PCICM    0x00010000 /* PCICM  */
 
 /*
  * Sequencer
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c
--- a/arch/ppc/syslib/ppc83xx_setup.c
+++ b/arch/ppc/syslib/ppc83xx_setup.c
@@ -221,6 +221,7 @@ mpc83xx_setup_pci1(struct pci_controller
 	iounmap(ios);
 }
 
+#ifdef CONFIG_MPC83xx_PCI2
 void __init
 mpc83xx_setup_pci2(struct pci_controller *hose)
 {
@@ -278,8 +279,11 @@ mpc83xx_setup_pci2(struct pci_controller
 	iounmap(pci_ctrl);
 	iounmap(ios);
 }
+#endif
 
 /*
+ * NOTICE for the MPC83xx SYS Freescale evaluation board:
+ *
  * PCI buses can be enabled only if SYS board combinates with PIB
  * (Platform IO Board) board which provide 3 PCI slots. There is 2 PCI buses
  * and 3 PCI slots, so people must configure the routes between them before
@@ -287,10 +291,6 @@ mpc83xx_setup_pci2(struct pci_controller
  * can be accessed via I2C bus 2 and are configured by firmware. Refer to
  * Freescale to get more information about firmware configuration.
  */
-
-extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
-extern int mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel,
-		unsigned char pin);
 void __init
 mpc83xx_setup_hose(void)
 {
@@ -306,22 +306,46 @@ mpc83xx_setup_hose(void)
 			sizeof(immr_clk_t));
 
 	/*
-	 * Configure PCI controller and PCI_CLK_OUTPUT both in 66M mode
+	 * Configure PCI_CLK_OUTPUT
 	 */
 	val32 = clk->occr;
 	udelay(2000);
-	clk->occr = 0xff000000;
+	
+#ifdef CONFIG_TQM834x
+	/*
+	 * WARNING! only PCI_CLK_OUTPUT1 is enabled for the TQM834x as this is
+	 * the one line actually used for clocking all external PCI devices in
+	 * current setup of the STK85xx.  Enabling other PCI_CLK_OUTPUT lines
+	 * may lead to board's hang for unknown reasons - particularly
+	 * PCI_CLK_OUTPUT6 and PCI_CLK_OUTPUT7 are known to hang the board;
+	 * this issue is under investigation (18 oct 05)
+	 */
+	val32 = OCCR_PCICOE1; 
+#else
+	/* enable all PCI_CLK_OUTs */
+	val32 = (OCCR_PCICOE0 | OCCR_PCICOE1 | OCCR_PCICOE2 | OCCR_PCICOE3 \
+		 | OCCR_PCICOE4 | OCCR_PCICOE5 | OCCR_PCICOE6 | OCCR_PCICOE7);
+#endif
+	/* set frequency of the PCI and clock outputs for external devicesc
+	 * according to system clocking settings */
+	if (clk->spmr & SPMR_CKID) {
+		/* PCI Clock is 1/2 of CONFIG_83XX_CLKIN so need to set up OCCR
+		 * fields accordingly */
+		val32 |= (OCCR_PCI1CR | OCCR_PCI2CR);
+		
+		val32 |= (OCCR_PCICD0 | OCCR_PCICD1 | OCCR_PCICD2 \
+			  | OCCR_PCICD3 | OCCR_PCICD4 | OCCR_PCICD5 \
+			  | OCCR_PCICD6 | OCCR_PCICD7);
+	}
+	
+	clk->occr = val32;
 	udelay(2000);
-
 	iounmap(clk);
 
 	hose1 = pcibios_alloc_controller();
 	if(!hose1)
 		return;
 
-	ppc_md.pci_swizzle = common_swizzle;
-	ppc_md.pci_map_irq = mpc83xx_map_irq;
-
 	hose1->bus_offset = 0;
 	hose1->first_busno = 0;
 	hose1->last_busno = 0xff;
@@ -357,7 +381,6 @@ mpc83xx_setup_hose(void)
 			MPC83xx_PCI1_UPPER_MEM,
 			IORESOURCE_MEM, "PCI host bridge 1");
 
-	ppc_md.pci_exclude_device = mpc83xx_exclude_device;
 	hose1->last_busno = pciauto_bus_scan(hose1, hose1->first_busno);
 
 #ifdef CONFIG_MPC83xx_PCI2
@@ -395,4 +418,38 @@ mpc83xx_setup_hose(void)
 	hose2->last_busno = pciauto_bus_scan(hose2, hose2->first_busno);
 #endif /* CONFIG_MPC83xx_PCI2 */
 }
+
+
+void __init
+mpc834x_pcibios_fixup(void)
+{
+	struct pci_dev *dev = NULL;
+	unsigned int class;
+	int i;
+	
+	if ((dev = pci_find_device(PCI_VENDOR_ID_FREESCALE,
+				   PCI_DEVICE_ID_FREESCALE_MPC8349E, NULL))) {
+		class = dev->class >> 8;
+		if (class == PCI_CLASS_BRIDGE_OTHER) {
+			/*
+			 * at least rev 1.1 of the MPC8349E chip has the class
+			 * wrongly set in the host/PCI bridge config space
+			 * register; this leads to the host/PCI bridge being
+			 * treated as a regular client device, trying to assign
+			 * PCI resources to it etc.
+			 *
+			 */
+			dev->class = (PCI_CLASS_BRIDGE_HOST << 8) & ~0xf;
+
+			/* for some odd reasons the host/PCI bridge behaves
+			 * like an agent device and would claim PCI mem/io/irq
+			 * resources, so we make these resources inactive (i.e.
+			 * the bridge will not claim resources from itself)
+			 */
+			for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) 
+				dev->resource[i].flags = IORESOURCE_UNSET;
+		}
+	}	
+	
+}
 #endif /*CONFIG_PCI*/
diff --git a/arch/ppc/syslib/ppc83xx_setup.h b/arch/ppc/syslib/ppc83xx_setup.h
--- a/arch/ppc/syslib/ppc83xx_setup.h
+++ b/arch/ppc/syslib/ppc83xx_setup.h
@@ -36,6 +36,7 @@ extern void mpc83xx_restart(char *cmd);
 extern void mpc83xx_power_off(void);
 extern void mpc83xx_halt(void);
 extern void mpc83xx_setup_hose(void) __init;
+extern void mpc834x_pcibios_fixup(void);
 
 /* PCI config */
 #define PCI1_CFG_ADDR_OFFSET (0x8300)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2278,6 +2278,16 @@
 #define PCI_VENDOR_ID_TDI               0x192E
 #define PCI_DEVICE_ID_TDI_EHCI          0x0101
 
+#define PCI_VENDOR_ID_FREESCALE			0x1957
+#define PCI_DEVICE_ID_FREESCALE_MPC8349E	0x0080
+#define PCI_DEVICE_ID_FREESCALE_MPC8349		0x0081
+#define PCI_DEVICE_ID_FREESCALE_MPC8347E_1	0x0082
+#define PCI_DEVICE_ID_FREESCALE_MPC8347_1	0x0083
+#define PCI_DEVICE_ID_FREESCALE_MPC8347E_2	0x0084
+#define PCI_DEVICE_ID_FREESCALE_MPC8347_2	0x0085
+#define PCI_DEVICE_ID_FREESCALE_MPC8343E	0x0086
+#define PCI_DEVICE_ID_FREESCALE_MPC8343		0x0087
+
 #define PCI_VENDOR_ID_SYMPHONY		0x1c1c
 #define PCI_DEVICE_ID_SYMPHONY_101	0x0001
 


\f
!-------------------------------------------------------------flip-



Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
The first 90% of a project takes 90% of the time, the last 10%  takes
the other 90% of the time.

^ permalink raw reply

* [PATCH 2.6] Add generic support for DS1377 RTC
From: Wolfgang Denk @ 2005-10-22 21:05 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: lm-sensors


The following patch (against current Linux 2.6  tree)  moves  generic
DS1377  RTC  support from the "radstone_ppc7d" platform specific file
to it's proper place ("drivers/i2c/chips/ds1337.c") and makes it thus
common and available for other boards too.


---
Add common ds1337_get_rtc_time() and ds1337_set_rtc_time() routines.
Derived from radstone platform specific code.

Fix BIN2BCD month conversion.

Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>

---
commit 80387b45146a9e397c1fec1138f3eb3884c42ed8
tree 690680af98e271f64025a49c30b1bfcb5b5c465c
parent d85b5d8b85163f43dd2d7d62dbd3db630cbe2663
author Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:32:28 +0200
committer Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:32:28 +0200

 arch/ppc/platforms/radstone_ppc7d.c |   48 ++++++++---------------------------
 drivers/i2c/chips/ds1337.c          |   44 +++++++++++++++++++++++++++++++-
 2 files changed, 53 insertions(+), 39 deletions(-)

diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c
--- a/arch/ppc/platforms/radstone_ppc7d.c
+++ b/arch/ppc/platforms/radstone_ppc7d.c
@@ -1,6 +1,11 @@
 /*
  * arch/ppc/platforms/radstone_ppc7d.c
  *
+ * Copyright 2005 DENX Software Engineering
+ * ppc7d_get_rtc_time(), ppc7d_set_rtc_time() renamed
+ * to generic ds1337_get_rtc_time() and ds1337_set_rtc_time()
+ * and moved to ds1337.c
+ *
  * Board setup routines for the Radstone PPC7D boards.
  *
  * Author: James Chapman <jchapman@katalix.com>
@@ -74,10 +79,10 @@ static int ppc7d_has_alma;
 extern void gen550_progress(char *, unsigned short);
 extern void gen550_init(int, struct uart_port *);
 
-/* FIXME - move to h file */
-extern int ds1337_do_command(int id, int cmd, void *arg);
-#define DS1337_GET_DATE         0
-#define DS1337_SET_DATE         1
+/* Real Time Clock support.
+ * PPC7D has a DS1337 accessed by I2C. */
+extern ulong ds1337_get_rtc_time(void);
+extern int ds1337_set_rtc_time(unsigned long nowtime);
 
 /* residual data */
 unsigned char __res[sizeof(bd_t)];
@@ -1249,37 +1254,6 @@ static void __init ppc7d_setup_arch(void
 
 }
 
-/* Real Time Clock support.
- * PPC7D has a DS1337 accessed by I2C.
- */
-static ulong ppc7d_get_rtc_time(void)
-{
-        struct rtc_time tm;
-        int result;
-
-        spin_lock(&rtc_lock);
-        result = ds1337_do_command(0, DS1337_GET_DATE, &tm);
-        spin_unlock(&rtc_lock);
-
-        if (result == 0)
-                result = mktime(tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
-
-        return result;
-}
-
-static int ppc7d_set_rtc_time(unsigned long nowtime)
-{
-        struct rtc_time tm;
-        int result;
-
-        spin_lock(&rtc_lock);
-        to_tm(nowtime, &tm);
-        result = ds1337_do_command(0, DS1337_SET_DATE, &tm);
-        spin_unlock(&rtc_lock);
-
-        return result;
-}
-
 /* This kernel command line parameter can be used to have the target
  * wait for a JTAG debugger to attach. Of course, a JTAG debugger
  * with hardware breakpoint support can have the target stop at any
@@ -1336,8 +1310,8 @@ static void ppc7d_init2(void)
 	outb(data8, PPC7D_CPLD_LEDS);
 
         /* Hook up RTC. We couldn't do this earlier because we need the I2C subsystem */
-        ppc_md.set_rtc_time = ppc7d_set_rtc_time;
-        ppc_md.get_rtc_time = ppc7d_get_rtc_time;
+        ppc_md.set_rtc_time = ds1337_set_rtc_time;
+        ppc_md.get_rtc_time = ds1337_get_rtc_time;
 
 	pr_debug("%s: exit\n", __FUNCTION__);
 }
diff --git a/drivers/i2c/chips/ds1337.c b/drivers/i2c/chips/ds1337.c
--- a/drivers/i2c/chips/ds1337.c
+++ b/drivers/i2c/chips/ds1337.c
@@ -1,6 +1,10 @@
 /*
  *  linux/drivers/i2c/chips/ds1337.c
  *
+ *  Copyright 2005 DENX Software Engineering
+ *  Added ds1337_get_rtc_time and ds1337_set_rtc_time routines.
+ *  Based on radstone platform specific code.
+ * 
  *  Copyright (C) 2005 James Chapman <jchapman@katalix.com>
  *
  *	based on linux/drivers/acorn/char/pcf8583.c
@@ -21,6 +25,7 @@
 #include <linux/rtc.h>		/* get the user-level API */
 #include <linux/bcd.h>
 #include <linux/list.h>
+#include <asm/time.h>
 
 /* Device registers */
 #define DS1337_REG_HOUR		2
@@ -34,6 +39,8 @@
 #define DS1337_GET_DATE		0
 #define DS1337_SET_DATE		1
 
+extern spinlock_t rtc_lock;
+
 /*
  * Functions declaration
  */
@@ -164,9 +171,9 @@ static int ds1337_set_datetime(struct i2
 	buf[1] = BIN2BCD(dt->tm_sec);
 	buf[2] = BIN2BCD(dt->tm_min);
 	buf[3] = BIN2BCD(dt->tm_hour);
-	buf[4] = BIN2BCD(dt->tm_wday) + 1;
+	buf[4] = BIN2BCD(dt->tm_wday + 1);
 	buf[5] = BIN2BCD(dt->tm_mday);
-	buf[6] = BIN2BCD(dt->tm_mon) + 1;
+	buf[6] = BIN2BCD(dt->tm_mon + 1);
 	val = dt->tm_year;
 	if (val >= 100) {
 		val -= 100;
@@ -223,6 +230,37 @@ int ds1337_do_command(int bus, int cmd, 
 	return -ENODEV;
 }
 
+ulong ds1337_get_rtc_time(void)
+{
+	struct rtc_time tm;
+	int result;
+
+	spin_lock(&rtc_lock);
+	result = ds1337_do_command(0, DS1337_GET_DATE, &tm);
+	spin_unlock(&rtc_lock);
+
+	if (result == 0)
+		result = mktime(tm.tm_year + 1900, tm.tm_mon + 1,
+				tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+	return result;
+}
+
+int ds1337_set_rtc_time(unsigned long nowtime)
+{
+	struct rtc_time tm;
+	int result;
+
+	spin_lock(&rtc_lock);
+	to_tm(nowtime, &tm);
+	tm.tm_year -= 1900;
+	tm.tm_mon -= 1;
+	result = ds1337_do_command(0, DS1337_SET_DATE, &tm);
+	spin_unlock(&rtc_lock);
+
+	return result;
+}
+
 static int ds1337_attach_adapter(struct i2c_adapter *adapter)
 {
 	return i2c_probe(adapter, &addr_data, ds1337_detect);
@@ -375,6 +413,8 @@ MODULE_DESCRIPTION("DS1337 RTC driver");
 MODULE_LICENSE("GPL");
 
 EXPORT_SYMBOL_GPL(ds1337_do_command);
+EXPORT_SYMBOL_GPL(ds1337_get_rtc_time);
+EXPORT_SYMBOL_GPL(ds1337_set_rtc_time);
 
 module_init(ds1337_init);
 module_exit(ds1337_exit);


\f
!-------------------------------------------------------------flip-

^ permalink raw reply

* [Patch] Add support for TQM834x Boards
From: Wolfgang Denk @ 2005-10-22 22:06 UTC (permalink / raw)
  To: linuxppc-dev

The following patch (against latest 2.6 tree) adds support for the TQ
Systems TQM834x Boards. Verified on TQM8349L.

Note: for TQM834x board support actually to  compile  and  work,  two
previously submitted patches are required. See postings:

Sat, 22 Oct 2005   [PATCH 2.6] Add generic support for DS1377 RTC
Sat, 22 Oct 2005   [PATCH] Cleanup mpc83xx_restart() code


---
Add support for TQM834x boards.

Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>

---

 arch/ppc/Kconfig                   |   11 
 arch/ppc/configs/TQM834x_defconfig |  819 ++++++++++++++++++++++++++++++++++++
 arch/ppc/platforms/83xx/Makefile   |    1 
 arch/ppc/platforms/83xx/tqm834x.c  |  336 +++++++++++++++
 arch/ppc/platforms/83xx/tqm834x.h  |   40 ++
 drivers/mtd/maps/Kconfig           |    8 
 drivers/mtd/maps/Makefile          |    1 
 drivers/mtd/maps/tqm834x.c         |  298 +++++++++++++
 include/asm-ppc/mpc83xx.h          |    4 
 9 files changed, 1516 insertions(+), 2 deletions(-)

diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig
--- a/arch/ppc/Kconfig
+++ b/arch/ppc/Kconfig
@@ -690,6 +690,12 @@ config EV64360
 	help
 	  Select EV64360 if configuring a Marvell EV64360BP Evaluation
 	  platform.
+
+config TQM834x
+	bool "TQM834x"
+	help
+	  This option enables support for the TQM834x boards from TQ
+	  Components.
 endchoice
 
 config PQ2ADS
@@ -730,11 +736,11 @@ config 8272
 
 config 83xx
 	bool
-	default y if MPC834x_SYS
+	default y if MPC834x_SYS || TQM834x
 
 config MPC834x
 	bool
-	default y if MPC834x_SYS
+	default y if MPC834x_SYS || TQM834x
 
 config CPM2
 	bool
@@ -1170,6 +1176,7 @@ config PCI_DOMAINS
 config MPC83xx_PCI2
 	bool "  Supprt for 2nd PCI host controller"
 	depends on PCI && MPC834x
+	depends on !TQM834x
 	default y if MPC834x_SYS
 
 config PCI_QSPAN
diff --git a/arch/ppc/configs/TQM834x_defconfig b/arch/ppc/configs/TQM834x_defconfig
new file mode 100644
--- /dev/null
+++ b/arch/ppc/configs/TQM834x_defconfig
@@ -0,0 +1,819 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.14-rc4
+# Mon Oct 17 17:22:19 2005
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_HOTPLUG is not set
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+# CONFIG_EPOLL is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Processor
+#
+CONFIG_6xx=y
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_PPC_FPU=y
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_PPC_GEN550=y
+CONFIG_PPC_STD_MMU=y
+
+#
+# Platform options
+#
+# CONFIG_PPC_MULTIPLATFORM is not set
+# CONFIG_APUS is not set
+# CONFIG_KATANA is not set
+# CONFIG_WILLOW is not set
+# CONFIG_CPCI690 is not set
+# CONFIG_POWERPMC250 is not set
+# CONFIG_CHESTNUT is not set
+# CONFIG_SPRUCE is not set
+# CONFIG_HDPU is not set
+# CONFIG_EV64260 is not set
+# CONFIG_LOPEC is not set
+# CONFIG_MVME5100 is not set
+# CONFIG_PPLUS is not set
+# CONFIG_PRPMC750 is not set
+# CONFIG_PRPMC800 is not set
+# CONFIG_SANDPOINT is not set
+# CONFIG_RADSTONE_PPC7D is not set
+# CONFIG_PAL4 is not set
+# CONFIG_GEMINI is not set
+# CONFIG_EST8260 is not set
+# CONFIG_SBC82xx is not set
+# CONFIG_SBS8260 is not set
+# CONFIG_RPX8260 is not set
+# CONFIG_TQM8260 is not set
+# CONFIG_ADS8272 is not set
+# CONFIG_PQ2FADS is not set
+# CONFIG_LITE5200 is not set
+# CONFIG_MPC834x_SYS is not set
+# CONFIG_EV64360 is not set
+CONFIG_TQM834x=y
+CONFIG_83xx=y
+CONFIG_MPC834x=y
+# CONFIG_SMP is not set
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_PCI is not set
+# CONFIG_PCI_DOMAINS is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_RETRY=0
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_TQM834x=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=32768
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_LBD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Macintosh device drivers
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_GIANFAR=y
+# CONFIG_GFAR_NAPI is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=y
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_M41T00 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+CONFIG_SENSORS_LM75=y
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/arch/ppc/platforms/83xx/Makefile b/arch/ppc/platforms/83xx/Makefile
--- a/arch/ppc/platforms/83xx/Makefile
+++ b/arch/ppc/platforms/83xx/Makefile
@@ -2,3 +2,4 @@
 # Makefile for the PowerPC 83xx linux kernel.
 #
 obj-$(CONFIG_MPC834x_SYS)	+= mpc834x_sys.o
+obj-$(CONFIG_TQM834x)		+= tqm834x.o
diff --git a/arch/ppc/platforms/83xx/tqm834x.c b/arch/ppc/platforms/83xx/tqm834x.c
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/83xx/tqm834x.c
@@ -0,0 +1,336 @@
+/*
+ * arch/ppc/platforms/83xx/tqm834x.c
+ *
+ * TQ Components TQM834x board routines
+ *
+ * Copyright 2005 DENX Software Engineering
+ * Derived from mpc834x_sys.c
+ *
+ * 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 <linux/serial.h>
+#include <linux/tty.h>	/* for linux/serial_core.h */
+#include <linux/serial_core.h>
+#include <linux/initrd.h>
+#include <linux/module.h>
+#include <linux/fsl_devices.h>
+
+#include <asm/system.h>
+#include <asm/pgtable.h>
+#include <asm/page.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/pci-bridge.h>
+#include <asm/mpc83xx.h>
+#include <asm/irq.h>
+#include <asm/kgdb.h>
+#include <asm/ppc_sys.h>
+#include <mm/mmu_decl.h>
+
+#include <syslib/ppc83xx_setup.h>
+
+#ifndef CONFIG_PCI
+unsigned long isa_io_base = 0;
+unsigned long isa_mem_base = 0;
+#endif
+
+extern unsigned long total_memory;	/* in mm/init */
+
+unsigned char __res[sizeof (bd_t)];
+
+#ifdef CONFIG_PCI
+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
+	     */
+	{
+		{PIRQA, PIRQB,  PIRQC,  PIRQD}, /* idsel 0x11 */
+		{PIRQC, PIRQD,  PIRQA,  PIRQB}, /* idsel 0x12 */
+		{PIRQD, PIRQA,  PIRQB,  PIRQC}  /* idsel 0x13 */
+	};
+
+	const long min_idsel = 0x11, max_idsel = 0x13, irqs_per_slot = 4;
+	return PCI_IRQ_TABLE_LOOKUP;
+}
+
+int
+mpc83xx_exclude_device(u_char bus, u_char devfn)
+{
+	return PCIBIOS_SUCCESSFUL;
+}
+#endif /* CONFIG_PCI */
+
+/* ************************************************************************
+ *
+ * Setup the architecture
+ *
+ */
+static void __init
+tqm834x_setup_arch(void)
+{
+	bd_t *binfo = (bd_t *) __res;
+	unsigned int freq;
+	struct gianfar_platform_data *pdata;
+
+	/* get the core frequency */
+	freq = binfo->bi_intfreq;
+
+	/* Set loops_per_jiffy to a half-way reasonable value,
+	   for use until calibrate_delay gets called. */
+	loops_per_jiffy = freq / HZ;
+
+#ifdef CONFIG_PCI
+	/* setup PCI host bridges */
+	mpc83xx_setup_hose();
+#endif
+	mpc83xx_early_serial_map();
+
+	/* setup the board related information for the enet controllers */
+	pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1);
+	if (pdata) {
+		pdata->board_flags = FSL_GIANFAR_BRD_IS_REDUCED;
+		pdata->interruptPHY = MPC83xx_IRQ_EXT1;
+		pdata->phyid = 0;
+		/* fixup phy address */
+		pdata->phy_reg_addr += binfo->bi_immr_base;
+		memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
+	}
+
+	pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2);
+	if (pdata) {
+		pdata->board_flags = FSL_GIANFAR_BRD_IS_REDUCED;
+		pdata->interruptPHY = MPC83xx_IRQ_EXT1;
+		pdata->phyid = 1;
+		/* fixup phy address */
+		pdata->phy_reg_addr += binfo->bi_immr_base;
+		memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
+	}
+
+#ifdef CONFIG_BLK_DEV_INITRD
+	if (initrd_start)
+		ROOT_DEV = Root_RAM0;
+	else
+#endif
+#ifdef  CONFIG_ROOT_NFS
+		ROOT_DEV = Root_NFS;
+#else
+		ROOT_DEV = Root_HDA1;
+#endif
+}
+
+static void __init
+tqm834x_map_io(void)
+{
+	/* we steal the lowest ioremap addr for virt space */
+	io_block_mapping(VIRT_IMMRBAR, immrbar, 1024*1024, _PAGE_IO);
+}
+
+int
+tqm834x_show_cpuinfo(struct seq_file *m)
+{
+	uint pvid, svid, phid1;
+	bd_t *binfo = (bd_t *) __res;
+	unsigned int freq;
+
+	/* get the core frequency */
+	freq = binfo->bi_intfreq;
+
+	pvid = mfspr(SPRN_PVR);
+	svid = mfspr(SPRN_SVR);
+
+	seq_printf(m, "Vendor\t\t: Freescale Inc.\n");
+	seq_printf(m, "Machine\t\t: TQM%s\n", cur_ppc_sys_spec->ppc_sys_name);
+	seq_printf(m, "core clock\t: %d MHz\n"
+			"bus  clock\t: %d MHz\n",
+			(int)(binfo->bi_intfreq / 1000000),
+			(int)(binfo->bi_busfreq / 1000000));
+	seq_printf(m, "PVR\t\t: 0x%x\n", pvid);
+	seq_printf(m, "SVR\t\t: 0x%x\n", svid);
+
+	/* Display cpu Pll setting */
+	phid1 = mfspr(SPRN_HID1);
+	seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f));
+
+	/* Display the amount of memory */
+	seq_printf(m, "Memory\t\t: %d MB\n", (int)(binfo->bi_memsize / (1024 * 1024)));
+
+	return 0;
+}
+
+void __init
+tqm834x_init_IRQ(void)
+{
+	bd_t *binfo = (bd_t *) __res;
+
+	u8 senses[8] = {
+		0,			/* EXT 0 */
+		0,			/* EXT 1 */
+		0,			/* 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(binfo->bi_immr_base + 0x00700, 0, MPC83xx_IPIC_IRQ_OFFSET, senses, 8);
+
+	/* Initialize the default interrupt mapping priorities,
+	 * in case the boot rom changed something on us.
+	 */
+	ipic_set_default_priority();
+}
+
+#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1337)
+extern ulong ds1337_get_rtc_time(void);
+extern int ds1337_set_rtc_time(unsigned long nowtime);
+
+static int __init
+tqm834x_rtc_hookup(void)
+{
+	struct timespec	tv;
+
+        ppc_md.set_rtc_time = ds1337_set_rtc_time;
+        ppc_md.get_rtc_time = ds1337_get_rtc_time;
+
+	tv.tv_nsec = 0;
+	tv.tv_sec = (ppc_md.get_rtc_time)();
+	do_settimeofday(&tv);
+
+	return 0;
+}
+late_initcall(tqm834x_rtc_hookup);
+#endif
+
+static __inline__ void
+tqm834x_set_bat(void)
+{
+	/* we steal the lowest ioremap addr for virt space */
+	mb();
+	mtspr(SPRN_DBAT1U, VIRT_IMMRBAR | 0x1e);
+	mtspr(SPRN_DBAT1L, immrbar | 0x2a);
+	mb();
+}
+
+void __init
+platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
+	      unsigned long r6, unsigned long r7)
+{
+	bd_t *binfo = (bd_t *) __res;
+
+	/* parse_bootinfo must always be called first */
+	parse_bootinfo(find_bootinfo());
+
+	/*
+	 * If we were passed in a board information, copy it into the
+	 * residual data area.
+	 */
+	if (r3) {
+		memcpy((void *) __res, (void *) (r3 + KERNELBASE),
+		       sizeof (bd_t));
+	}
+
+#if defined(CONFIG_BLK_DEV_INITRD)
+	/*
+	 * If the init RAM disk has been configured in, and there's a valid
+	 * starting address for it, set it up.
+	 */
+	if (r4) {
+		initrd_start = r4 + KERNELBASE;
+		initrd_end = r5 + KERNELBASE;
+	}
+#endif /* CONFIG_BLK_DEV_INITRD */
+
+	/* Copy the kernel command line arguments to a safe place. */
+	if (r6) {
+		*(char *) (r7 + KERNELBASE) = 0;
+		strcpy(cmd_line, (char *) (r6 + KERNELBASE));
+	}
+
+	immrbar = binfo->bi_immr_base;
+
+	tqm834x_set_bat();
+
+#if defined(CONFIG_SERIAL_8250) && defined(CONFIG_SERIAL_TEXT_DEBUG)
+	{
+		struct uart_port p;
+
+		memset(&p, 0, sizeof (p));
+		p.iotype = SERIAL_IO_MEM;
+		p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500);
+		p.uartclk = binfo->bi_busfreq;
+
+		gen550_init(0, &p);
+
+		memset(&p, 0, sizeof (p));
+		p.iotype = SERIAL_IO_MEM;
+		p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600);
+		p.uartclk = binfo->bi_busfreq;
+
+		gen550_init(1, &p);
+	}
+#endif
+
+	identify_ppc_sys_by_id(mfspr(SPRN_SVR));
+
+	/* setup the PowerPC module struct */
+	ppc_md.setup_arch = tqm834x_setup_arch;
+	ppc_md.show_cpuinfo = tqm834x_show_cpuinfo;
+
+	ppc_md.init_IRQ = tqm834x_init_IRQ;
+	ppc_md.get_irq = ipic_get_irq;
+
+	ppc_md.restart = mpc83xx_restart;
+	ppc_md.power_off = mpc83xx_power_off;
+	ppc_md.halt = mpc83xx_halt;
+
+	ppc_md.find_end_of_memory = mpc83xx_find_end_of_memory;
+	ppc_md.setup_io_mappings  = tqm834x_map_io;
+
+	ppc_md.time_init = mpc83xx_time_init;
+	ppc_md.set_rtc_time = NULL;
+	ppc_md.get_rtc_time = NULL;
+	ppc_md.calibrate_decr = mpc83xx_calibrate_decr;
+
+	ppc_md.early_serial_map = mpc83xx_early_serial_map;
+#if defined(CONFIG_SERIAL_8250) && defined(CONFIG_SERIAL_TEXT_DEBUG)
+	ppc_md.progress = gen550_progress;
+#endif	/* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
+
+	if (ppc_md.progress)
+		ppc_md.progress("tqm834x_init(): exit", 0);
+
+	return;
+}
diff --git a/arch/ppc/platforms/83xx/tqm834x.h b/arch/ppc/platforms/83xx/tqm834x.h
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/83xx/tqm834x.h
@@ -0,0 +1,40 @@
+/*
+ * arch/ppc/platforms/83xx/tqm834x.h
+ *
+ * TQ Components TQM834x common board definitions
+ *
+ * Copyright 2005 DENX Software Engineering
+ * Derived from mpc834x_sys.h
+ *
+ * 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_TQM834X_H__
+#define __MACH_TQM834X_H__
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/seq_file.h>
+#include <syslib/ppc83xx_setup.h>
+#include <asm/ppcboot.h>
+
+#define VIRT_IMMRBAR		((uint)0xfe000000)
+
+#define PIRQA	MPC83xx_IRQ_EXT4
+#define PIRQB	MPC83xx_IRQ_EXT5
+#define PIRQC	MPC83xx_IRQ_EXT6
+#define PIRQD	MPC83xx_IRQ_EXT7
+
+#define MPC83xx_PCI1_LOWER_IO	0x00000000
+#define MPC83xx_PCI1_UPPER_IO	0x00ffffff
+#define MPC83xx_PCI1_LOWER_MEM	0x80000000
+#define MPC83xx_PCI1_UPPER_MEM	0x9fffffff
+#define MPC83xx_PCI1_IO_BASE	0xe2000000
+#define MPC83xx_PCI1_MEM_OFFSET	0x00000000
+#define MPC83xx_PCI1_IO_SIZE	0x01000000
+
+#endif                /* __MACH_TQM834X_H__ */
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -340,6 +340,14 @@ config MTD_REDWOOD
 	  Redwood board. If you have one of these boards and would like to
 	  use the flash chips on it, say 'Y'.
 
+config MTD_TQM834x
+	tristate "Flash device mapped on TQ Components TQM834x Boards"
+	depends on MTD_CFI && PPC32 && 83xx && TQM834x
+	help
+	  This enables access routines for the flash chips on the
+	  TQ Components TQM834x boards. If you have one of these boards
+	  and would like to use the flash chips on it, say 'Y'.
+
 config MTD_CSTM_MIPS_IXX
 	tristate "Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board"
 	depends on MIPS && MTD_CFI && MTD_JEDECPROBE && MTD_PARTITIONS
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -70,3 +70,4 @@ obj-$(CONFIG_MTD_DMV182)	+= dmv182.o
 obj-$(CONFIG_MTD_SHARP_SL)	+= sharpsl-flash.o
 obj-$(CONFIG_MTD_PLATRAM)	+= plat-ram.o
 obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
+obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
diff --git a/drivers/mtd/maps/tqm834x.c b/drivers/mtd/maps/tqm834x.c
new file mode 100644
--- /dev/null
+++ b/drivers/mtd/maps/tqm834x.c
@@ -0,0 +1,298 @@
+/*
+ * drivers/mtd/maps/tqm834x.c
+ *
+ * MTD mapping driver for TQM834x boards
+ *
+ * Copyright 2005 Wolfgang Denk, DENX Software Engineering, <wd@denx.de>.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <asm/io.h>
+#include <asm/ppcboot.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#if 0	/* Debugging turned off */
+# define debugk(fmt,args...)	printk(fmt ,##args)
+#else
+# define debugk(fmt,args...)
+#endif
+
+#define FLASH_BANK_MAX	2
+
+extern unsigned char __res[];
+
+/* trivial struct to describe partition information */
+struct mtd_part_def
+{
+	int nums;
+	unsigned char *type;
+	struct mtd_partition* mtd_part;
+};
+
+static struct mtd_info* mtd_banks[FLASH_BANK_MAX];
+static struct map_info* map_banks[FLASH_BANK_MAX];
+static struct mtd_part_def part_banks[FLASH_BANK_MAX];
+
+static unsigned long num_banks;
+static unsigned long start_scan_addr;
+
+#ifdef CONFIG_MTD_PARTITIONS
+/*
+ * The following defines the partition layout of TQM834x boards.
+ *
+ * See include/linux/mtd/partitions.h for definition of the
+ * mtd_partition structure.
+ *
+ * Assume minimal initial size of 4 MiB per bank, will be updated
+ * later in init_tqm834x_mtd() routine.
+ */
+
+/* Partition definition for the first flash bank which is always present. */
+static struct mtd_partition tqm834x_partitions_bank1[] = {
+	{
+		name:	"u-boot",		/* u-boot firmware	*/
+		offset:	0x00000000,
+		size:	0x00040000,		/* 256 KiB		*/
+		/*mask_flags: MTD_WRITEABLE,	 * force read-only	*/
+	},
+	{
+		name:	"env",			/* u-boot environment	*/
+		offset:	0x00040000,
+		size:	0x00020000,		/* 128 KiB		*/
+		/*mask_flags: MTD_WRITEABLE,	 * force read-only	*/
+	},
+	{
+		name:	"kernel",		/* linux kernel image	*/
+		offset:	0x00060000,
+		size:	0x00100000,		/* 1 MiB		*/
+		/*mask_flags: MTD_WRITEABLE,	 * force read-only	*/
+	},
+	{
+		name:	"initrd",		/* ramdisk image	*/
+		offset:	0x00160000,
+		size:	0x00200000,		/* 2 MiB		*/
+	},
+	{
+		name:	"user",			/* user data		*/
+		offset:	0x00360000,
+		size:	0x000a0000,		/* remaining space	*/
+		/* NOTE: this parttion size is re-calcated in		*/
+		/* init_tqm834x_mtd() to cover actual remaining space.	*/
+	},
+};
+
+/* Partition definition for the second flash bank which may be present on some
+ * TQM834x boards.
+ */
+static struct mtd_partition tqm834x_partitions_bank2[] = {
+	{
+		name:	"jffs2",		/* jffs2 filesystem	*/
+		offset:	0x00000000,
+		size:	0x00400000,		/* whole device		*/
+		/* NOTE: this parttion size is re-calcated in		*/
+		/* init_tqm834x_mtd() to cover actual device size.	*/
+	},
+};
+
+#endif	/* CONFIG_MTD_PARTITIONS */
+
+#define NB_OF(x)  (sizeof(x)/sizeof(x[0]))
+
+int __init init_tqm834x_mtd(void)
+{
+	int idx = 0, ret = 0;
+	unsigned long flash_addr, flash_size, mtd_size = 0;
+
+	/* pointer to TQM834x board info data */
+	bd_t *bd = (bd_t *)__res;
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+	int n;
+	char mtdid[4];
+	const char *part_probes[] = { "cmdlinepart", NULL };
+#endif
+
+	flash_addr = bd->bi_flashstart;
+	flash_size = bd->bi_flashsize;
+
+	/* request maximum flash size address space */
+	start_scan_addr = (unsigned long)ioremap(flash_addr, flash_size);
+	if (!start_scan_addr) {
+		printk("%s: Failed to ioremap address: 0x%lx\n",
+			__FUNCTION__, flash_addr);
+		return -EIO;
+	}
+
+	for(idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+		if (mtd_size >= flash_size)
+			break;
+
+		debugk ("%s: chip probing count %d\n", __FUNCTION__, idx);
+
+		map_banks[idx] = (struct map_info *)kmalloc(sizeof(struct map_info),
+							GFP_KERNEL);
+		if (map_banks[idx] == NULL) {
+			ret = -ENOMEM;
+			goto error_mem;
+		}
+		memset((void *)map_banks[idx], 0, sizeof(struct map_info));
+		map_banks[idx]->name = (char *)kmalloc(16, GFP_KERNEL);
+		if (map_banks[idx]->name == NULL) {
+			ret = -ENOMEM;
+			goto error_mem;
+		}
+		memset((void *)map_banks[idx]->name, 0, 16);
+
+		sprintf(map_banks[idx]->name, "TQM834x-%d", idx);
+		map_banks[idx]->size = flash_size;
+		map_banks[idx]->bankwidth = 4;
+
+		simple_map_init(map_banks[idx]);
+
+		map_banks[idx]->virt = (void __iomem *)
+			(start_scan_addr + ((idx > 0) ?
+			(mtd_banks[idx-1] ? mtd_banks[idx-1]->size : 0) : 0));
+		map_banks[idx]->phys =
+			flash_addr + ((idx > 0) ?
+			(mtd_banks[idx-1] ? mtd_banks[idx-1]->size : 0) : 0);
+
+		/* start to probe flash chips */
+		mtd_banks[idx] = do_map_probe("cfi_probe", map_banks[idx]);
+		if (mtd_banks[idx]) {
+			mtd_banks[idx]->owner = THIS_MODULE;
+			mtd_size += mtd_banks[idx]->size;
+			num_banks++;
+			debugk ("%s: bank %ld, name: %s, size: %d bytes \n",
+				__FUNCTION__, num_banks,
+				mtd_banks[idx]->name, mtd_banks[idx]->size);
+		}
+	}
+
+	/* no supported flash chips found */
+	if (!num_banks) {
+		printk("TQM834x: No supported flash chips found!\n");
+		ret = -ENXIO;
+		goto error_mem;
+	}
+
+#ifdef CONFIG_MTD_PARTITIONS
+	/*
+	 * Select static partition definitions
+	 */
+	n = NB_OF(tqm834x_partitions_bank1);
+	part_banks[0].mtd_part	= tqm834x_partitions_bank1;
+	part_banks[0].type	= "static image bank1";
+	part_banks[0].nums	= n;
+
+	/* update last partition size to cover actual remaining space */
+	tqm834x_partitions_bank1[n - 1].size =
+		mtd_banks[0]->size -
+		tqm834x_partitions_bank1[n - 1].offset;
+	
+	/* check if we have second bank? */
+	if (num_banks == 2) {
+		n = NB_OF(tqm834x_partitions_bank2);
+		part_banks[1].mtd_part	= tqm834x_partitions_bank2;
+		part_banks[1].type	= "static image bank2";
+		part_banks[1].nums	= n;
+
+		/* update last partition size to cover actual remaining space */
+		tqm834x_partitions_bank2[n - 1].size =
+			mtd_banks[1]->size -
+			tqm834x_partitions_bank2[n - 1].offset;
+	}
+
+	for(idx = 0; idx < num_banks ; idx++) {
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+		sprintf(mtdid, "%d", idx);
+		n = parse_mtd_partitions(mtd_banks[idx],
+				part_probes,
+				&part_banks[idx].mtd_part,
+				0);
+		debugk ("%s: %d command line partitions on bank %s\n",
+				__FUNCTION__, n, mtdid);
+		if (n > 0) {
+			part_banks[idx].type = "command line";
+			part_banks[idx].nums = n;
+		}
+#endif	/* CONFIG_MTD_CMDLINE_PARTS */
+		if (part_banks[idx].nums == 0) {
+			printk (KERN_NOTICE
+				"TQM834x flash bank %d: no partition info "
+				"available, registering whole device\n", idx);
+			add_mtd_device(mtd_banks[idx]);
+		} else {
+			printk (KERN_NOTICE 
+				"TQM834x flash bank %d: Using %s partition "
+				"definition\n", idx, part_banks[idx].type);
+			add_mtd_partitions (mtd_banks[idx],
+					part_banks[idx].mtd_part, 
+					part_banks[idx].nums);
+		}
+	}
+#else	/* ! CONFIG_MTD_PARTITIONS */
+	printk (KERN_NOTICE "TQM834x flash: registering %d flash banks "
+			"at once\n", num_banks);
+
+	for(idx = 0 ; idx < num_banks ; idx++) {
+		add_mtd_device(mtd_banks[idx]);
+	}
+#endif	/* CONFIG_MTD_PARTITIONS */
+
+	return 0;
+error_mem:
+	for (idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+		if (map_banks[idx] != NULL) {
+			if (map_banks[idx]->name != NULL) {
+				kfree(map_banks[idx]->name);
+				map_banks[idx]->name = NULL;
+			}
+			kfree(map_banks[idx]);
+			map_banks[idx] = NULL;
+		}
+	}
+
+	iounmap((void *)start_scan_addr);
+
+	return ret;
+}
+
+static void __exit cleanup_tqm834x_mtd(void)
+{
+	unsigned int idx = 0;
+	for(idx = 0 ; idx < num_banks ; idx++) {
+		/* destroy mtd_info previously allocated */
+		if (mtd_banks[idx]) {
+			del_mtd_partitions(mtd_banks[idx]);
+			map_destroy(mtd_banks[idx]);
+		}
+
+		/* release map_info not used anymore */
+		kfree(map_banks[idx]->name);
+		kfree(map_banks[idx]);
+	}
+
+	if (start_scan_addr) {
+		iounmap((void *)start_scan_addr);
+		start_scan_addr = 0;
+	}
+}
+
+module_init(init_tqm834x_mtd);
+module_exit(cleanup_tqm834x_mtd);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Wolfgang Denk <wd@denx.de>");
+MODULE_DESCRIPTION("MTD map driver for TQM834x boards");
diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
--- a/include/asm-ppc/mpc83xx.h
+++ b/include/asm-ppc/mpc83xx.h
@@ -26,6 +26,10 @@
 #include <platforms/83xx/mpc834x_sys.h>
 #endif
 
+#ifdef CONFIG_TQM834x
+#include <platforms/83xx/tqm834x.h>
+#endif
+
 #define _IO_BASE        isa_io_base
 #define _ISA_MEM_BASE   isa_mem_base
 #ifdef CONFIG_PCI

^ permalink raw reply

* [PATCH] pmu_register_sleep_notifier needs ADB_PMU
From: Olaf Hering @ 2005-10-22 21:32 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, linuxppc-dev


a simple patch for a pegsos user:
https://bugzilla.novell.com/show_bug.cgi?id=119606

arch/ppc/platforms/built-in.o(.init.text+0x10a4): In function `core99_wake_up':
: undefined reference to `pmu_register_sleep_notifier'
make[1]: *** [.tmp_vmlinux1] Error 1

Signed-off-by: Olaf Hering <olh@suse.de>

 arch/ppc/platforms/pmac_sleep.S |    2 +-
 arch/ppc/platforms/pmac_time.c  |    4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6.14-rc5/arch/ppc/platforms/pmac_sleep.S
===================================================================
--- linux-2.6.14-rc5.orig/arch/ppc/platforms/pmac_sleep.S
+++ linux-2.6.14-rc5/arch/ppc/platforms/pmac_sleep.S
@@ -46,7 +46,7 @@
 	.section .text
 	.align	5
 
-#if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC)
+#if (defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC)) && defined(CONFIG_ADB_PMU)
 
 /* This gets called by via-pmu.c late during the sleep process.
  * The PMU was already send the sleep command and will shut us down
Index: linux-2.6.14-rc5/arch/ppc/platforms/pmac_time.c
===================================================================
--- linux-2.6.14-rc5.orig/arch/ppc/platforms/pmac_time.c
+++ linux-2.6.14-rc5/arch/ppc/platforms/pmac_time.c
@@ -206,7 +206,7 @@ via_calibrate_decr(void)
 	return 1;
 }
 
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
 /*
  * Reset the time after a sleep.
  */
@@ -251,7 +251,7 @@ pmac_calibrate_decr(void)
 	struct device_node *cpu;
 	unsigned int freq, *fp;
 
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
 	pmu_register_sleep_notifier(&time_sleep_notifier);
 #endif /* CONFIG_PM */
 
-- 
short story of a lazy sysadmin:
 alias appserv=wotan

^ permalink raw reply

* [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Olaf Hering @ 2005-10-22 21:30 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, Andrew Morton; +Cc: linuxppc-dev


This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606

Hiding a few pmac specific drivers when ADB is disabled can not hurt:

AGP_UNINORTH exist only on systems with ADB_PMU
I2C_KEYWEST is used by sound
MACE exists only on systems with ADB_CUDA
BMAC exists on old and new Macs
SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
SERIAL_PMACZILOG exists on old and new Macs
BLK_DEV_IDE_PMAC exists on old and new Macs
APPLE_AIRPORT exist only on systems with ADB_PMU
FB_CONTROL exists only on old Macs
FB_PLATINUM exists only on old Macs
FB_VALKYRIE exists only on old Macs
FB_CT65550 exists only on old Macs



Signed-off-by: Olaf Hering <olh@suse.de>

 drivers/char/agp/Kconfig     |    2 +-
 drivers/i2c/busses/Kconfig   |    2 +-
 drivers/ide/Kconfig          |    2 +-
 drivers/net/Kconfig          |    4 ++--
 drivers/net/wireless/Kconfig |    2 +-
 drivers/scsi/Kconfig         |    4 ++--
 drivers/serial/Kconfig       |    2 +-
 drivers/video/Kconfig        |    8 ++++----
 8 files changed, 13 insertions(+), 13 deletions(-)

Index: linux-2.6.14-rc5/drivers/char/agp/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/char/agp/Kconfig
+++ linux-2.6.14-rc5/drivers/char/agp/Kconfig
@@ -147,7 +147,7 @@ config AGP_ALPHA_CORE
 
 config AGP_UNINORTH
 	tristate "Apple UniNorth & U3 AGP support"
-	depends on AGP && PPC_PMAC
+	depends on AGP && PPC_PMAC && ADB_PMU
 	help
 	  This option gives you AGP support for Apple machines with a
 	  UniNorth or U3 (Apple G5) bridge.
Index: linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/i2c/busses/Kconfig
+++ linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
@@ -237,7 +237,7 @@ config I2C_IXP2000
 
 config I2C_KEYWEST
 	tristate "Powermac Keywest I2C interface"
-	depends on I2C && PPC_PMAC
+	depends on I2C && PPC_PMAC && (ADB_CUDA || ADB_PMU)
 	help
 	  This supports the use of the I2C interface in the combo-I/O
 	  chip on recent Apple machines.  Say Y if you have such a machine.
Index: linux-2.6.14-rc5/drivers/net/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/net/Kconfig
+++ linux-2.6.14-rc5/drivers/net/Kconfig
@@ -178,7 +178,7 @@ source "drivers/net/arm/Kconfig"
 
 config MACE
 	tristate "MACE (Power Mac ethernet) support"
-	depends on NET_ETHERNET && PPC_PMAC && PPC32
+	depends on NET_ETHERNET && PPC_PMAC && PPC32 && ADB_CUDA
 	select CRC32
 	help
 	  Power Macintoshes and clones with Ethernet built-in on the
@@ -201,7 +201,7 @@ config MACE_AAUI_PORT
 
 config BMAC
 	tristate "BMAC (G3 ethernet) support"
-	depends on NET_ETHERNET && PPC_PMAC && PPC32
+	depends on NET_ETHERNET && PPC_PMAC && PPC32 && (ADB_CUDA || ADB_PMU)
 	select CRC32
 	help
 	  Say Y for support of BMAC Ethernet interfaces. These are used on G3
Index: linux-2.6.14-rc5/drivers/scsi/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
+++ linux-2.6.14-rc5/drivers/scsi/Kconfig
@@ -1529,7 +1529,7 @@ config SCSI_DEBUG
 
 config SCSI_MESH
 	tristate "MESH (Power Mac internal SCSI) support"
-	depends on PPC32 && PPC_PMAC && SCSI
+	depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
 	help
 	  Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
 	  SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
@@ -1560,7 +1560,7 @@ config SCSI_MESH_RESET_DELAY_MS
 
 config SCSI_MAC53C94
 	tristate "53C94 (Power Mac external SCSI) support"
-	depends on PPC32 && PPC_PMAC && SCSI
+	depends on PPC32 && PPC_PMAC && SCSI && ADB_CUDA
 	help
 	  On Power Macintoshes (and clones) with two SCSI buses, the external
 	  SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
Index: linux-2.6.14-rc5/drivers/serial/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/serial/Kconfig
+++ linux-2.6.14-rc5/drivers/serial/Kconfig
@@ -651,7 +651,7 @@ config SERIAL_68360
 
 config SERIAL_PMACZILOG
 	tristate "PowerMac z85c30 ESCC support"
-	depends on PPC_OF && PPC_PMAC
+	depends on PPC_OF && PPC_PMAC && (ADB_CUDA || ADB_PMU)
 	select SERIAL_CORE
 	help
 	  This driver supports the Zilog z85C30 serial ports found on
Index: linux-2.6.14-rc5/drivers/ide/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/ide/Kconfig
+++ linux-2.6.14-rc5/drivers/ide/Kconfig
@@ -744,7 +744,7 @@ endif
 
 config BLK_DEV_IDE_PMAC
 	bool "Builtin PowerMac IDE support"
-	depends on PPC_PMAC && IDE=y
+	depends on PPC_PMAC && IDE=y && (ADB_CUDA || ADB_PMU)
 	help
 	  This driver provides support for the built-in IDE controller on
 	  most of the recent Apple Power Macintoshes and PowerBooks.
Index: linux-2.6.14-rc5/drivers/net/wireless/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/net/wireless/Kconfig
+++ linux-2.6.14-rc5/drivers/net/wireless/Kconfig
@@ -281,7 +281,7 @@ config HERMES
 
 config APPLE_AIRPORT
 	tristate "Apple Airport support (built-in)"
-	depends on PPC_PMAC && HERMES
+	depends on PPC_PMAC && HERMES && ADB_PMU
 	help
 	  Say Y here to support the Airport 802.11b wireless Ethernet hardware
 	  built into the Macintosh iBook and other recent PowerPC-based
Index: linux-2.6.14-rc5/drivers/video/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/video/Kconfig
+++ linux-2.6.14-rc5/drivers/video/Kconfig
@@ -359,7 +359,7 @@ config FB_OF
 
 config FB_CONTROL
 	bool "Apple \"control\" display support"
-	depends on (FB = y) && PPC_PMAC
+	depends on (FB = y) && PPC_PMAC && ADB_CUDA
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
@@ -371,7 +371,7 @@ config FB_CONTROL
 
 config FB_PLATINUM
 	bool "Apple \"platinum\" display support"
-	depends on (FB = y) && PPC_PMAC
+	depends on (FB = y) && PPC_PMAC && ADB_CUDA
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
@@ -383,7 +383,7 @@ config FB_PLATINUM
 
 config FB_VALKYRIE
 	bool "Apple \"valkyrie\" display support"
-	depends on (FB = y) && (MAC || PPC_PMAC)
+	depends on (FB = y) && (MAC || (PPC_PMAC && ADB_CUDA))
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
@@ -395,7 +395,7 @@ config FB_VALKYRIE
 
 config FB_CT65550
 	bool "Chips 65550 display support"
-	depends on (FB = y) && PPC
+	depends on (FB = y) && PPC_PMAC && ADB_CUDA
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
-- 
short story of a lazy sysadmin:
 alias appserv=wotan

^ permalink raw reply

* [PATCH] Cleanup mpc83xx_restart() code
From: Wolfgang Denk @ 2005-10-22 21:28 UTC (permalink / raw)
  To: linuxppc-dev

The current Linux 2.6 mpc83xx_restart() routine which is supposed to
be common for all MPC83xx boards actually performs mpc834x_sys board
specific operations. This code was moved to
arch/ppc/platforms/83xx/mpc834x_sys.c, and mpc83xx_restart() was
replaced with generic MPC83xx reset code. Now mpc834x_sys uses it's
platform specific restart code and we can use common MPC83xx reset
code in other MPC83xx boards


---
ppc83xx common code cleanup, MPC834x_SYS platform specific code moved to
arch/ppc/platform/83xx/mpc834x_sys.c

Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>

---
commit 8176ad2d83c41be9697b475c8c0b975908cb7843
tree 16a5246f615529cf423b63231990723ab8a6bd13
parent 80387b45146a9e397c1fec1138f3eb3884c42ed8
author Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:35:07 +0200
committer Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:35:07 +0200

 arch/ppc/platforms/83xx/mpc834x_sys.c |   36 ++++++++++++++++++++++++
 arch/ppc/syslib/ppc83xx_setup.c       |   49 +++++++++++----------------------
 include/asm-ppc/mpc83xx.h             |   13 +++++++++
 3 files changed, 65 insertions(+), 33 deletions(-)

diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c
--- a/arch/ppc/platforms/83xx/mpc834x_sys.c
+++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
@@ -245,6 +245,40 @@ mpc834x_sys_set_bat(void)
 	mb();
 }
 
+void
+mpc83xx_sys_restart(char *cmd)
+{
+	volatile unsigned char __iomem *reg;
+	unsigned char tmp;
+
+	reg = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE);
+
+	local_irq_disable();
+
+	/*
+	 * Unlock the BCSR bits so a PRST will update the contents.
+	 * Otherwise the reset asserts but doesn't clear.
+	 */
+	tmp = in_8(reg + BCSR_MISC_REG3_OFF);
+	tmp |= BCSR_MISC_REG3_CNFLOCK; /* low true, high false */
+	out_8(reg + BCSR_MISC_REG3_OFF, tmp);
+
+	/*
+	 * Trigger a reset via a low->high transition of the
+	 * PORESET bit.
+	 */
+	tmp = in_8(reg + BCSR_MISC_REG2_OFF);
+	tmp &= ~BCSR_MISC_REG2_PORESET;
+	out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+
+	udelay(1);
+
+	tmp |= BCSR_MISC_REG2_PORESET;
+	out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+
+	for(;;);
+}
+
 void __init
 platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
 	      unsigned long r6, unsigned long r7)
@@ -313,7 +347,7 @@ platform_init(unsigned long r3, unsigned
 	ppc_md.init_IRQ = mpc834x_sys_init_IRQ;
 	ppc_md.get_irq = ipic_get_irq;
 
-	ppc_md.restart = mpc83xx_restart;
+	ppc_md.restart = mpc83xx_sys_restart;
 	ppc_md.power_off = mpc83xx_power_off;
 	ppc_md.halt = mpc83xx_halt;
 
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c
--- a/arch/ppc/syslib/ppc83xx_setup.c
+++ b/arch/ppc/syslib/ppc83xx_setup.c
@@ -63,13 +63,10 @@ mpc83xx_find_end_of_memory(void)
 long __init
 mpc83xx_time_init(void)
 {
-#define SPCR_OFFS   0x00000110
-#define SPCR_TBEN   0x00400000
-
 	bd_t *binfo = (bd_t *)__res;
-	u32 *spcr = ioremap(binfo->bi_immr_base + SPCR_OFFS, 4);
+	u32 *spcr = ioremap(binfo->bi_immr_base + MPC83xx_SPCR, 4);
 
-	*spcr |= SPCR_TBEN;
+	*spcr |= MPC83xx_SPCR_TBEN;
 
 	iounmap(spcr);
 
@@ -132,35 +129,23 @@ mpc83xx_early_serial_map(void)
 void
 mpc83xx_restart(char *cmd)
 {
-	volatile unsigned char __iomem *reg;
-	unsigned char tmp;
-
-	reg = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE);
-
-	local_irq_disable();
-
-	/*
-	 * Unlock the BCSR bits so a PRST will update the contents.
-	 * Otherwise the reset asserts but doesn't clear.
-	 */
-	tmp = in_8(reg + BCSR_MISC_REG3_OFF);
-	tmp |= BCSR_MISC_REG3_CNFLOCK; /* low true, high false */
-	out_8(reg + BCSR_MISC_REG3_OFF, tmp);
-
-	/*
-	 * Trigger a reset via a low->high transition of the
-	 * PORESET bit.
-	 */
-	tmp = in_8(reg + BCSR_MISC_REG2_OFF);
-	tmp &= ~BCSR_MISC_REG2_PORESET;
-	out_8(reg + BCSR_MISC_REG2_OFF, tmp);
-
-	udelay(1);
+	bd_t *binfo = (bd_t *)__res;
 
-	tmp |= BCSR_MISC_REG2_PORESET;
-	out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+	u32 *rcr = ioremap(binfo->bi_immr_base + MPC83xx_RCR, 4);
+	u32 *rpr = ioremap(binfo->bi_immr_base + MPC83xx_RPR, 4);
 
-	for(;;);
+	/* apply reset protect unlock command to
+	 * reset control protection  register */
+	*rpr = MPC83xx_RPR_RSTE;
+
+	/* apply software hard reset to
+	 * reset control register*/
+	*rcr = MPC83xx_RCR_SWHR;
+
+	/* not reached, but... */
+	iounmap(rcr);
+	iounmap(rpr);
+	for (;;) ;
 }
 
 void
diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
--- a/include/asm-ppc/mpc83xx.h
+++ b/include/asm-ppc/mpc83xx.h
@@ -95,6 +95,19 @@ extern unsigned char __res[];
 
 #define MPC83xx_CCSRBAR_SIZE	(1024*1024)
 
+/* system priority and configuration register */
+#define MPC83xx_SPCR            0x00000110
+#define MPC83xx_SPCR_TBEN       0x00400000
+
+/* reset protection register */
+#define MPC83xx_RPR		0x00000918
+#define MPC83xx_RPR_RSTE	0x52535445      /* "RSTE" in ASCII */
+
+/* reset control register*/
+#define MPC83xx_RCR		0x0000091c
+#define MPC83xx_RCR_SWHR	0x00000002      /* sw hard reset */
+#define MPC83xx_RCR_SWSR	0x00000001      /* sw soft reset */
+
 /* Let modules/drivers get at immrbar (physical) */
 extern phys_addr_t immrbar;
 


\f
!-------------------------------------------------------------flip-




Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
You can observe a lot just by watching.                  - Yogi Berra

^ permalink raw reply

* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Olaf Hering @ 2005-10-22 21:19 UTC (permalink / raw)
  To: Brad Boyer; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022210122.GA9638@pants.nu>

 On Sat, Oct 22, Brad Boyer wrote:

> I disagree. I think a much better solution would be to change the
> code to be conditionalized internally on PMU support, rather than
> having #ifdef CONFIG_PM since the functions being called inside
> that protection are actually out of the PMU code, not the generic
> power management system. By doing this, you could for example
> have a kernel compiled for a 1st gen PCI PowerMac without any
> extra drivers. In this case, you have CUDA and AWACS, but there
> is no PMU support and no need for sleep notifiers.

May patch would allow that, you need either CUDA or PMU support.

-- 
short story of a lazy sysadmin:
 alias appserv=wotan

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox