[kernel] r13723 - in dists/trunk/linux-2.6/debian: . patches/features/arm patches/series

Martin Michlmayr tbm at alioth.debian.org
Wed Jun 3 21:15:31 UTC 2009


Author: tbm
Date: Wed Jun  3 21:15:30 2009
New Revision: 13723

Log:
Kirkwood: clock gating for unused peripherals

Added:
   dists/trunk/linux-2.6/debian/patches/features/arm/clock_gating.patch
   dists/trunk/linux-2.6/debian/patches/features/arm/nand-setup.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/base

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Wed Jun  3 20:59:47 2009	(r13722)
+++ dists/trunk/linux-2.6/debian/changelog	Wed Jun  3 21:15:30 2009	(r13723)
@@ -48,6 +48,7 @@
     - alternative copy_to_user: more precise fallback threshold
     - lower overhead with alternative copy_to_user for small copies
     - Kirkwood: Add CPU idle driver
+    - Kirkwood: clock gating for unused peripherals
 
   [ Aurelien Jarno ]
   * [mips(el)/sb1-bcm91250a] Set CONFIG_SCSI_AIC7XXX=y, it is needed

Added: dists/trunk/linux-2.6/debian/patches/features/arm/clock_gating.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/arm/clock_gating.patch	Wed Jun  3 21:15:30 2009	(r13723)
@@ -0,0 +1,236 @@
+From: Rabeeh Khoury <rabeeh at marvell.com>
+Date: Sun, 22 Mar 2009 15:30:32 +0000 (+0200)
+Subject: [ARM] Kirkwood: clock gating for unused peripherals
+X-Git-Url:
+http://git.marvell.com/?p=orion.git;a=commitdiff_plain;h=80d8a1c2acd885a69259640fa6d789b714c9f7b9
+
+[ARM] Kirkwood: clock gating for unused peripherals
+
+To save power:
+
+1. Enabling clock gating of unused peripherals
+
+2. PLL and PHY of the units are also disabled (when possible.
+
+Signed-off-by: Rabeeh Khoury <rabeeh at marvell.com>
+Signed-off-by: Nicolas Pitre <nico at marvell.com>
+---
+
+diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
+index 6e3eb1a..d127731 100644
+--- a/arch/arm/mach-kirkwood/common.c
++++ b/arch/arm/mach-kirkwood/common.c
+@@ -55,6 +55,13 @@ void __init kirkwood_map_io(void)
+ 	iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc));
+ }
+ 
++/*
++ * Default clock control bits.  Any bit _not_ set in this variable
++ * will be cleared from the hardware after platform devices have been
++ * registered.  Some reserved bits must be set to 1.
++ */
++unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED;
++	
+ 
+ /*****************************************************************************
+  * EHCI
+@@ -96,6 +103,7 @@ static struct platform_device kirkwood_ehci = {
+ 
+ void __init kirkwood_ehci_init(void)
+ {
++	kirkwood_clk_ctrl |= CGC_USB0;
+ 	platform_device_register(&kirkwood_ehci);
+ }
+ 
+@@ -152,6 +160,7 @@ static struct platform_device kirkwood_ge00 = {
+ 
+ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
+ {
++	kirkwood_clk_ctrl |= CGC_GE0;
+ 	eth_data->shared = &kirkwood_ge00_shared;
+ 	kirkwood_ge00.dev.platform_data = eth_data;
+ 
+@@ -213,6 +222,7 @@ static struct platform_device kirkwood_ge01 = {
+ 
+ void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data)
+ {
++	kirkwood_clk_ctrl |= CGC_GE1;
+ 	eth_data->shared = &kirkwood_ge01_shared;
+ 	kirkwood_ge01.dev.platform_data = eth_data;
+ 
+@@ -287,6 +297,7 @@ static struct platform_device kirkwood_nand_flash = {
+ void __init kirkwood_nand_init(struct mtd_partition *parts, int nr_parts,
+ 			       int chip_delay)
+ {
++	kirkwood_clk_ctrl |= CGC_RUNIT;
+ 	kirkwood_nand_data.parts = parts;
+ 	kirkwood_nand_data.nr_parts = nr_parts;
+ 	kirkwood_nand_data.chip_delay = chip_delay;
+@@ -338,6 +349,9 @@ static struct platform_device kirkwood_sata = {
+ 
+ void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data)
+ {
++	kirkwood_clk_ctrl |= CGC_SATA0;
++	if (sata_data->n_ports > 1)
++		kirkwood_clk_ctrl |= CGC_SATA1;
+ 	sata_data->dram = &kirkwood_mbus_dram_info;
+ 	kirkwood_sata.dev.platform_data = sata_data;
+ 	platform_device_register(&kirkwood_sata);
+@@ -383,6 +397,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data)
+ 	else
+ 		mvsdio_data->clock = 200000000;
+ 	mvsdio_data->dram = &kirkwood_mbus_dram_info;
++	kirkwood_clk_ctrl |= CGC_SDIO;
+ 	kirkwood_sdio.dev.platform_data = mvsdio_data;
+ 	platform_device_register(&kirkwood_sdio);
+ }
+@@ -414,6 +429,7 @@ static struct platform_device kirkwood_spi = {
+ 
+ void __init kirkwood_spi_init()
+ {
++	kirkwood_clk_ctrl |= CGC_RUNIT;
+ 	platform_device_register(&kirkwood_spi);
+ }
+ 
+@@ -634,6 +650,7 @@ static struct platform_device kirkwood_xor01_channel = {
+ 
+ static void __init kirkwood_xor0_init(void)
+ {
++	kirkwood_clk_ctrl |= CGC_XOR0;
+ 	platform_device_register(&kirkwood_xor0_shared);
+ 
+ 	/*
+@@ -732,6 +749,7 @@ static struct platform_device kirkwood_xor11_channel = {
+ 
+ static void __init kirkwood_xor1_init(void)
+ {
++	kirkwood_clk_ctrl |= CGC_XOR1;
+ 	platform_device_register(&kirkwood_xor1_shared);
+ 
+ 	/*
+@@ -844,3 +862,44 @@ void __init kirkwood_init(void)
+ 	kirkwood_xor0_init();
+ 	kirkwood_xor1_init();
+ }
++
++static int __init kirkwood_clock_gate(void)
++{
++	unsigned int curr = readl(CLOCK_GATING_CTRL);
++
++	printk(KERN_DEBUG "Gating clock of unused units\n");
++	printk(KERN_DEBUG "before: 0x%08x\n", curr);
++
++	/* Make sure those units are accessible */
++	writel(curr | CGC_SATA0 | CGC_SATA1 | CGC_PEX0, CLOCK_GATING_CTRL);
++
++	/* For SATA: first shutdown the phy */
++	if (!(kirkwood_clk_ctrl & CGC_SATA0)) {
++		/* Disable PLL and IVREF */
++		writel(readl(SATA0_PHY_MODE_2) & ~0xf, SATA0_PHY_MODE_2);
++		/* Disable PHY */
++		writel(readl(SATA0_IF_CTRL) | 0x200, SATA0_IF_CTRL);
++	}
++	if (!(kirkwood_clk_ctrl & CGC_SATA1)) {
++		/* Disable PLL and IVREF */
++		writel(readl(SATA1_PHY_MODE_2) & ~0xf, SATA1_PHY_MODE_2);
++		/* Disable PHY */
++		writel(readl(SATA1_IF_CTRL) | 0x200, SATA1_IF_CTRL);
++	}
++	
++	/* For PCIe: first shutdown the phy */
++	if (!(kirkwood_clk_ctrl & CGC_PEX0)) {
++		writel(readl(PCIE_LINK_CTRL) | 0x10, PCIE_LINK_CTRL);
++		while (1)
++			if (readl(PCIE_STATUS) & 0x1)
++				break;
++		writel(readl(PCIE_LINK_CTRL) & ~0x10, PCIE_LINK_CTRL);
++	}
++
++	/* Now gate clock the required units */
++	writel(kirkwood_clk_ctrl, CLOCK_GATING_CTRL);
++	printk(KERN_DEBUG " after: 0x%08x\n", readl(CLOCK_GATING_CTRL));
++
++	return 0;
++}
++late_initcall(kirkwood_clock_gate);
+diff --git a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h
+index 4f7029f..00d96ab 100644
+--- a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h
++++ b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h
+@@ -39,4 +39,22 @@
+ #define L2_CONFIG_REG		(BRIDGE_VIRT_BASE | 0x0128)
+ #define L2_WRITETHROUGH		0x00000010
+ 
++#define CLOCK_GATING_CTRL	(BRIDGE_VIRT_BASE | 0x11c)
++#define CGC_GE0			(1 << 0)
++#define CGC_PEX0		(1 << 2)
++#define CGC_USB0		(1 << 3)
++#define CGC_SDIO		(1 << 4)
++#define CGC_TSU			(1 << 5)
++#define CGC_DUNIT		(1 << 6)
++#define CGC_RUNIT		(1 << 7)
++#define CGC_XOR0		(1 << 8)
++#define CGC_AUDIO		(1 << 9)
++#define CGC_SATA0		(1 << 14)
++#define CGC_SATA1		(1 << 15)
++#define CGC_XOR1		(1 << 16)
++#define CGC_CRYPTO		(1 << 17)
++#define CGC_GE1			(1 << 19)
++#define CGC_TDM			(1 << 20)
++#define CGC_RESERVED		((1 << 18) | (0x6 << 21))
++
+ #endif
+diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h
+index b3e1395..fa87ce6 100644
+--- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h
++++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h
+@@ -65,6 +65,8 @@
+ #define BRIDGE_VIRT_BASE	(KIRKWOOD_REGS_VIRT_BASE | 0x20000)
+ 
+ #define PCIE_VIRT_BASE		(KIRKWOOD_REGS_VIRT_BASE | 0x40000)
++#define PCIE_LINK_CTRL		(PCIE_VIRT_BASE | 0x70)
++#define PCIE_STATUS		(PCIE_VIRT_BASE | 0x1a04)
+ 
+ #define USB_PHYS_BASE		(KIRKWOOD_REGS_PHYS_BASE | 0x50000)
+ 
+@@ -81,6 +83,11 @@
+ #define GE01_PHYS_BASE		(KIRKWOOD_REGS_PHYS_BASE | 0x74000)
+ 
+ #define SATA_PHYS_BASE		(KIRKWOOD_REGS_PHYS_BASE | 0x80000)
++#define SATA_VIRT_BASE		(KIRKWOOD_REGS_VIRT_BASE | 0x80000)
++#define SATA0_IF_CTRL		(SATA_VIRT_BASE | 0x2050)
++#define SATA0_PHY_MODE_2	(SATA_VIRT_BASE | 0x2330)
++#define SATA1_IF_CTRL		(SATA_VIRT_BASE | 0x4050)
++#define SATA1_PHY_MODE_2	(SATA_VIRT_BASE | 0x4330)
+ 
+ #define SDIO_PHYS_BASE		(KIRKWOOD_REGS_PHYS_BASE | 0x90000)
+ 
+diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c
+index 73fccac..d90b9aa 100644
+--- a/arch/arm/mach-kirkwood/pcie.c
++++ b/arch/arm/mach-kirkwood/pcie.c
+@@ -14,6 +14,7 @@
+ #include <asm/irq.h>
+ #include <asm/mach/pci.h>
+ #include <plat/pcie.h>
++#include <mach/bridge-regs.h>
+ #include "common.h"
+ 
+ 
+@@ -95,6 +96,7 @@ static struct pci_ops pcie_ops = {
+ static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)
+ {
+ 	struct resource *res;
++	extern unsigned int kirkwood_clk_ctrl;
+ 
+ 	/*
+ 	 * Generic PCIe unit setup.
+@@ -133,6 +135,8 @@ static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)
+ 	sys->resource[2] = NULL;
+ 	sys->io_offset = 0;
+ 
++	kirkwood_clk_ctrl |= CGC_PEX0;
++
+ 	return 1;
+ }
+ 

Added: dists/trunk/linux-2.6/debian/patches/features/arm/nand-setup.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/arm/nand-setup.patch	Wed Jun  3 21:15:30 2009	(r13723)
@@ -0,0 +1,313 @@
+From: Nicolas Pitre <nico at cam.org>
+Date: Mon, 1 Jun 2009 19:36:36 +0000 (-0400)
+Subject: [ARM] Kirkwood: rationalize NAND setup a bit
+X-Git-Url:
+http://git.marvell.com/?p=orion.git;a=commitdiff_plain;h=3ac7b8d83d92c33647ce21f655931b5cabbcbfd7
+
+[ARM] Kirkwood: rationalize NAND setup a bit
+
+Common resource and platform device structures are moved to common.c
+and only the partition table and chip delay remains a per board
+parameter.
+
+Signed-off-by: Nicolas Pitre <nico at marvell.com>
+---
+
+diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
+index be1ca28..6e3eb1a 100644
+--- a/arch/arm/mach-kirkwood/common.c
++++ b/arch/arm/mach-kirkwood/common.c
+@@ -16,6 +16,7 @@
+ #include <linux/mv643xx_eth.h>
+ #include <linux/mv643xx_i2c.h>
+ #include <linux/ata_platform.h>
++#include <linux/mtd/nand.h>
+ #include <linux/spi/orion_spi.h>
+ #include <net/dsa.h>
+ #include <asm/page.h>
+@@ -258,6 +259,42 @@ void __init kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq)
+ 
+ 
+ /*****************************************************************************
++ * NAND flash
++ ****************************************************************************/
++static struct resource kirkwood_nand_resource = {
++	.flags		= IORESOURCE_MEM,
++	.start		= KIRKWOOD_NAND_MEM_PHYS_BASE,
++	.end		= KIRKWOOD_NAND_MEM_PHYS_BASE +
++				KIRKWOOD_NAND_MEM_SIZE - 1,
++};
++
++static struct orion_nand_data kirkwood_nand_data = {
++	.cle		= 0,
++	.ale		= 1,
++	.width		= 8,
++};
++
++static struct platform_device kirkwood_nand_flash = {
++	.name		= "orion_nand",
++	.id		= -1,
++	.dev		= {
++		.platform_data	= &kirkwood_nand_data,
++	},
++	.resource	= &kirkwood_nand_resource,
++	.num_resources	= 1,
++};
++
++void __init kirkwood_nand_init(struct mtd_partition *parts, int nr_parts,
++			       int chip_delay)
++{
++	kirkwood_nand_data.parts = parts;
++	kirkwood_nand_data.nr_parts = nr_parts;
++	kirkwood_nand_data.chip_delay = chip_delay;
++	platform_device_register(&kirkwood_nand_flash);
++}
++
++
++/*****************************************************************************
+  * SoC RTC
+  ****************************************************************************/
+ static struct resource kirkwood_rtc_resource = {
+diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
+index 6ee8840..9de5256 100644
+--- a/arch/arm/mach-kirkwood/common.h
++++ b/arch/arm/mach-kirkwood/common.h
+@@ -15,6 +15,7 @@ struct dsa_platform_data;
+ struct mv643xx_eth_platform_data;
+ struct mv_sata_platform_data;
+ struct mvsdio_platform_data;
++struct mtd_partition;
+ 
+ /*
+  * Basic Kirkwood init functions used early by machine-setup.
+@@ -40,9 +41,11 @@ void kirkwood_spi_init(void);
+ void kirkwood_i2c_init(void);
+ void kirkwood_uart0_init(void);
+ void kirkwood_uart1_init(void);
++void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay);
+ 
+ extern int kirkwood_tclk;
+ extern struct sys_timer kirkwood_timer;
+ 
++#define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x)
+ 
+ #endif
+diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c
+index 5505d58..39bdf4b 100644
+--- a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c
++++ b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c
+@@ -11,14 +11,12 @@
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+-#include <linux/mtd/nand.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/ata_platform.h>
+ #include <linux/mv643xx_eth.h>
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <mach/kirkwood.h>
+-#include <plat/orion_nand.h>
+ #include <plat/mvsdio.h>
+ #include "common.h"
+ #include "mpp.h"
+@@ -39,32 +37,6 @@ static struct mtd_partition db88f6281_nand_parts[] = {
+ 	},
+ };
+ 
+-static struct resource db88f6281_nand_resource = {
+-	.flags		= IORESOURCE_MEM,
+-	.start		= KIRKWOOD_NAND_MEM_PHYS_BASE,
+-	.end		= KIRKWOOD_NAND_MEM_PHYS_BASE +
+-			  KIRKWOOD_NAND_MEM_SIZE - 1,
+-};
+-
+-static struct orion_nand_data db88f6281_nand_data = {
+-	.parts		= db88f6281_nand_parts,
+-	.nr_parts	= ARRAY_SIZE(db88f6281_nand_parts),
+-	.cle		= 0,
+-	.ale		= 1,
+-	.width		= 8,
+-	.chip_delay	= 25,
+-};
+-
+-static struct platform_device db88f6281_nand_flash = {
+-	.name		= "orion_nand",
+-	.id		= -1,
+-	.dev		= {
+-		.platform_data	= &db88f6281_nand_data,
+-	},
+-	.resource	= &db88f6281_nand_resource,
+-	.num_resources	= 1,
+-};
+-
+ static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
+ 	.phy_addr	= MV643XX_ETH_PHY_ADDR(8),
+ };
+@@ -92,13 +64,12 @@ static void __init db88f6281_init(void)
+ 	kirkwood_init();
+ 	kirkwood_mpp_conf(db88f6281_mpp_config);
+ 
++	kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25);
+ 	kirkwood_ehci_init();
+ 	kirkwood_ge00_init(&db88f6281_ge00_data);
+ 	kirkwood_sata_init(&db88f6281_sata_data);
+ 	kirkwood_uart0_init();
+ 	kirkwood_sdio_init(&db88f6281_mvsdio_data);
+-	
+-	platform_device_register(&db88f6281_nand_flash);
+ }
+ 
+ static int __init db88f6281_pci_init(void)
+diff --git a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c
+index 2f0e4ef..8bf4153 100644
+--- a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c
++++ b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c
+@@ -11,8 +11,6 @@
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+-#include <linux/mtd/nand.h>
+-#include <linux/mtd/partitions.h>
+ #include <linux/ata_platform.h>
+ #include <linux/mv643xx_eth.h>
+ #include <linux/spi/flash.h>
+diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c
+index 31e996d..31708dd 100644
+--- a/arch/arm/mach-kirkwood/rd88f6281-setup.c
++++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c
+@@ -12,7 +12,6 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/irq.h>
+-#include <linux/mtd/nand.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/ata_platform.h>
+ #include <linux/mv643xx_eth.h>
+@@ -22,7 +21,6 @@
+ #include <asm/mach/arch.h>
+ #include <mach/kirkwood.h>
+ #include <plat/mvsdio.h>
+-#include <plat/orion_nand.h>
+ #include "common.h"
+ #include "mpp.h"
+ 
+@@ -42,32 +40,6 @@ static struct mtd_partition rd88f6281_nand_parts[] = {
+ 	},
+ };
+ 
+-static struct resource rd88f6281_nand_resource = {
+-	.flags		= IORESOURCE_MEM,
+-	.start		= KIRKWOOD_NAND_MEM_PHYS_BASE,
+-	.end		= KIRKWOOD_NAND_MEM_PHYS_BASE +
+-			  KIRKWOOD_NAND_MEM_SIZE - 1,
+-};
+-
+-static struct orion_nand_data rd88f6281_nand_data = {
+-	.parts		= rd88f6281_nand_parts,
+-	.nr_parts	= ARRAY_SIZE(rd88f6281_nand_parts),
+-	.cle		= 0,
+-	.ale		= 1,
+-	.width		= 8,
+-	.chip_delay	= 25,
+-};
+-
+-static struct platform_device rd88f6281_nand_flash = {
+-	.name		= "orion_nand",
+-	.id		= -1,
+-	.dev		= {
+-		.platform_data	= &rd88f6281_nand_data,
+-	},
+-	.resource	= &rd88f6281_nand_resource,
+-	.num_resources	= 1,
+-};
+-
+ static struct mv643xx_eth_platform_data rd88f6281_ge00_data = {
+ 	.phy_addr	= MV643XX_ETH_PHY_NONE,
+ 	.speed		= SPEED_1000,
+@@ -114,6 +86,7 @@ static void __init rd88f6281_init(void)
+ 	kirkwood_init();
+ 	kirkwood_mpp_conf(rd88f6281_mpp_config);
+ 
++	kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25);
+ 	kirkwood_ehci_init();
+ 
+ 	kirkwood_ge00_init(&rd88f6281_ge00_data);
+@@ -129,8 +102,6 @@ static void __init rd88f6281_init(void)
+ 	kirkwood_sata_init(&rd88f6281_sata_data);
+ 	kirkwood_sdio_init(&rd88f6281_mvsdio_data);
+ 	kirkwood_uart0_init();
+-
+-	platform_device_register(&rd88f6281_nand_flash);
+ }
+ 
+ static int __init rd88f6281_pci_init(void)
+diff --git a/arch/arm/mach-kirkwood/sheevaplug-setup.c b/arch/arm/mach-kirkwood/sheevaplug-setup.c
+index 831e4a5..93ea64c 100644
+--- a/arch/arm/mach-kirkwood/sheevaplug-setup.c
++++ b/arch/arm/mach-kirkwood/sheevaplug-setup.c
+@@ -11,7 +11,6 @@
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+-#include <linux/mtd/nand.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/mv643xx_eth.h>
+ #include <linux/gpio.h>
+@@ -20,7 +19,6 @@
+ #include <asm/mach/arch.h>
+ #include <mach/kirkwood.h>
+ #include <plat/mvsdio.h>
+-#include <plat/orion_nand.h>
+ #include "common.h"
+ #include "mpp.h"
+ 
+@@ -40,32 +38,6 @@ static struct mtd_partition sheevaplug_nand_parts[] = {
+ 	},
+ };
+ 
+-static struct resource sheevaplug_nand_resource = {
+-	.flags		= IORESOURCE_MEM,
+-	.start		= KIRKWOOD_NAND_MEM_PHYS_BASE,
+-	.end		= KIRKWOOD_NAND_MEM_PHYS_BASE +
+-			  KIRKWOOD_NAND_MEM_SIZE - 1,
+-};
+-
+-static struct orion_nand_data sheevaplug_nand_data = {
+-	.parts		= sheevaplug_nand_parts,
+-	.nr_parts	= ARRAY_SIZE(sheevaplug_nand_parts),
+-	.cle		= 0,
+-	.ale		= 1,
+-	.width		= 8,
+-	.chip_delay	= 25,
+-};
+-
+-static struct platform_device sheevaplug_nand_flash = {
+-	.name		= "orion_nand",
+-	.id		= -1,
+-	.dev		= {
+-		.platform_data	= &sheevaplug_nand_data,
+-	},
+-	.resource	= &sheevaplug_nand_resource,
+-	.num_resources	= 1,
+-};
+-
+ static struct mv643xx_eth_platform_data sheevaplug_ge00_data = {
+ 	.phy_addr	= MV643XX_ETH_PHY_ADDR(0),
+ };
+@@ -111,6 +83,7 @@ static void __init sheevaplug_init(void)
+ 	kirkwood_mpp_conf(sheevaplug_mpp_config);
+ 
+ 	kirkwood_uart0_init();
++	kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25);
+ 
+ 	if (gpio_request(29, "USB Power Enable") != 0 ||
+ 	    gpio_direction_output(29, 1) != 0)
+@@ -120,7 +93,6 @@ static void __init sheevaplug_init(void)
+ 	kirkwood_ge00_init(&sheevaplug_ge00_data);
+ 	kirkwood_sdio_init(&sheevaplug_mvsdio_data);
+ 
+-	platform_device_register(&sheevaplug_nand_flash);
+ 	platform_device_register(&sheevaplug_leds);
+ }
+ 

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Wed Jun  3 20:59:47 2009	(r13722)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Wed Jun  3 21:15:30 2009	(r13723)
@@ -29,6 +29,8 @@
 + features/arm/alternative-copy-user.patch
 + features/arm/lower_overhead_with_alternative.patch
 + features/arm/copy_to_user-better_threshold.patch
++ features/arm/nand-setup.patch
++ features/arm/clock_gating.patch
 + bugfix/all/mvsdio-platform.patch
 + bugfix/all/mvsdio-ignore-high-speed.patch
 + bugfix/all/mvsdio-config-failure.patch



More information about the Kernel-svn-changes mailing list