diff -Nur linux-2.6.33.orig/arch/arm/include/asm/setup.h linux-2.6.33/arch/arm/include/asm/setup.h
--- linux-2.6.33.orig/arch/arm/include/asm/setup.h	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/include/asm/setup.h	2010-02-27 19:32:30.150085477 +0100
@@ -18,6 +18,8 @@
 
 #define COMMAND_LINE_SIZE 1024
 
+const char *get_system_type(void);
+
 /* The list ends with an ATAG_NONE node. */
 #define ATAG_NONE	0x00000000
 
diff -Nur linux-2.6.33.orig/arch/arm/Kconfig linux-2.6.33/arch/arm/Kconfig
--- linux-2.6.33.orig/arch/arm/Kconfig	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/Kconfig	2010-02-27 20:23:52.139866005 +0100
@@ -19,6 +19,8 @@
 	select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
 	select HAVE_GENERIC_DMA_COHERENT
 	select HAVE_KERNEL_GZIP
+	select HAVE_KERNEL_BZIP2
+	select HAVE_KERNEL_LZMA
 	select HAVE_KERNEL_LZO
 	help
 	  The ARM series is a line of low-power-consumption RISC chip designs
diff -Nur linux-2.6.33.orig/arch/arm/kernel/setup.c linux-2.6.33/arch/arm/kernel/setup.c
--- linux-2.6.33.orig/arch/arm/kernel/setup.c	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/kernel/setup.c	2010-02-27 19:32:30.212085837 +0100
@@ -807,8 +807,12 @@
 
 static int c_show(struct seq_file *m, void *v)
 {
+	unsigned long n = (unsigned long) v - 1;
 	int i;
 
+	if (n == 0)
+		seq_printf(m, "system type\t\t: %s\n", get_system_type());
+
 	seq_printf(m, "Processor\t: %s rev %d (%s)\n",
 		   cpu_name, read_cpuid_id() & 15, elf_platform);
 
diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.33/arch/arm/mach-at91/at91sam9260_devices.c
--- linux-2.6.33.orig/arch/arm/mach-at91/at91sam9260_devices.c	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/mach-at91/at91sam9260_devices.c	2010-02-27 19:32:30.233294964 +0100
@@ -454,7 +454,15 @@
 	.sda_is_open_drain	= 1,
 	.scl_pin		= AT91_PIN_PA24,
 	.scl_is_open_drain	= 1,
+#if defined(CONFIG_MACH_FOXG20)
+	/* Some I2C devices are limited to 100 kHz and i2c-gpio.h
+	 * says "frequency is (500 / udelay) kHz" so 5 is best (and is
+	 * used in i2c-gpio.c)
+	 */
+	.udelay			= 5,		/* ~100 kHz */
+#else
 	.udelay			= 2,		/* ~100 kHz */
+#endif
 };
 
 static struct platform_device at91sam9260_twi_device = {
diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.33/arch/arm/mach-at91/board-foxg20.c
--- linux-2.6.33.orig/arch/arm/mach-at91/board-foxg20.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.33/arch/arm/mach-at91/board-foxg20.c	2010-02-27 19:32:30.235748629 +0100
@@ -0,0 +1,376 @@
+/*
+ *  Copyright (C) 2005 SAN People
+ *  Copyright (C) 2008 Atmel
+ *  Copyright (C) 2010 Lee McLoughlin - lee@lmmrtech.com
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/at73c213.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/clk.h>
+#include <linux/w1-gpio.h>
+
+#include <mach/hardware.h>
+#include <asm/setup.h>
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <mach/board.h>
+#include <mach/gpio.h>
+#include <mach/at91sam9_smc.h>
+
+#include "sam9_smc.h"
+#include "generic.h"
+
+/*
+ * The FOX hardware comes as the "Netus" board with just the cpu, ram,
+ * dataflash and two header connectors. This is plugged into the Fox board
+ * which provides the ethernet, usb, rtc, leds, switch, ...
+ * Other version of the Fox board are planned which could contain
+ * both NAND and sound (WM8731).
+ *
+ * By default USART4 and USART5 are not enabled (freeing up those pins
+ * for general use)
+ *
+ * Note: Enabling the NAND without a NAND device present doesn't cause
+ * any issues as on boot the probe will fail.
+ */
+/* #define FOXG20_NAND */
+/* #define FOXG20_WM8731 */
+/* #define FOX_USART4 */
+/* #define FOX_USART5 */
+
+const char *get_system_type(void)
+{
+        return "FoxBoard FOXG20";
+}
+
+static void __init foxg20_map_io(void)
+{
+	/* Initialize processor: 18.432 MHz crystal */
+	at91sam9260_initialize(18432000);
+
+	/* DBGU on ttyS0. (Rx & Tx only) */
+	at91_register_uart(0, 0, 0);
+
+	/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
+	at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
+			   | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD
+			   | ATMEL_UART_RI);
+
+	/* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
+	at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
+
+	/* USART2 on ttyS3. (Rx & Tx only) */
+	at91_register_uart(AT91SAM9260_ID_US2, 3, 0);
+
+	/* USART3 on ttyS4. (Rx, Tx, RTS, CTS) */
+	at91_register_uart(AT91SAM9260_ID_US3, 4, ATMEL_UART_CTS | ATMEL_UART_RTS);
+
+#if defined(FOX_USART4)
+	/* USART4 on ttyS5. (Rx & Tx only) */
+	at91_register_uart(AT91SAM9260_ID_US4, 5, 0);
+#endif
+
+#if defined(FOX_USART5)
+	/* USART5 on ttyS6. (Rx & Tx only) */
+	at91_register_uart(AT91SAM9260_ID_US5, 6, 0);
+#endif
+
+	/* set serial console to ttyS0 (ie, DBGU) */
+	at91_set_serial_console(0);
+}
+
+static void __init foxg20_init_irq(void)
+{
+	at91sam9260_init_interrupts(NULL);
+}
+
+
+/*
+ * USB Host port
+ */
+static struct at91_usbh_data __initdata foxg20_usbh_data = {
+	.ports		= 2,
+};
+
+/*
+ * USB Device port
+ */
+static struct at91_udc_data __initdata foxg20_udc_data = {
+	.vbus_pin	= AT91_PIN_PC6,
+	.pullup_pin	= 0,		/* pull-up driven by UDC */
+};
+
+
+/*
+ * SPI devices.
+ */
+static struct spi_board_info foxg20_spi_devices[] = {
+#if !defined(CONFIG_MMC_AT91)
+	{	
+		.modalias	= "mtd_dataflash",
+		.chip_select	= 1,
+		.max_speed_hz	= 15 * 1000 * 1000,
+		.bus_num	= 0,
+	},
+#endif
+};
+
+
+/*
+ * MACB Ethernet device
+ */
+static struct at91_eth_data __initdata foxg20_macb_data = {
+	.phy_irq_pin	= AT91_PIN_PA7,
+	.is_rmii	= 1,
+};
+
+
+#ifdef FOXG20_NAND
+/* The Fox doesn't have NAND memory */
+/*
+ * NAND flash
+ */
+static struct mtd_partition __initdata foxg20_nand_partition[] = {
+	{
+		.name   = "Bootstrap",
+		.offset = 0,
+		.size   = 4 * SZ_1M,
+	},
+	{
+		.name	= "Partition 1",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= 60 * SZ_1M,
+	},
+	{
+		.name	= "Partition 2",
+		.offset	= MTDPART_OFS_NXTBLK,
+		.size	= MTDPART_SIZ_FULL,
+	},
+};
+
+static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
+{
+	*num_partitions = ARRAY_SIZE(foxg20_nand_partition);
+	return foxg20_nand_partition;
+}
+
+/* det_pin is not connected */
+static struct atmel_nand_data __initdata foxg20_nand_data = {
+	.ale		= 21,
+	.cle		= 22,
+	.rdy_pin	= AT91_PIN_PC13,
+	.enable_pin	= AT91_PIN_PC14,
+	.partition_info	= nand_partitions,
+#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
+	.bus_width_16	= 1,
+#else
+	.bus_width_16	= 0,
+#endif
+};
+
+static struct sam9_smc_config __initdata foxg20_nand_smc_config = {
+	.ncs_read_setup		= 0,
+	.nrd_setup		= 2,
+	.ncs_write_setup	= 0,
+	.nwe_setup		= 2,
+
+	.ncs_read_pulse		= 4,
+	.nrd_pulse		= 4,
+	.ncs_write_pulse	= 4,
+	.nwe_pulse		= 4,
+
+	.read_cycle		= 7,
+	.write_cycle		= 7,
+
+	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
+	.tdf_cycles		= 3,
+};
+
+static void __init foxg20_add_device_nand(void)
+{
+	/* setup bus-width (8 or 16) */
+	if (foxg20_nand_data.bus_width_16)
+		foxg20_nand_smc_config.mode |= AT91_SMC_DBW_16;
+	else
+		foxg20_nand_smc_config.mode |= AT91_SMC_DBW_8;
+
+	/* configure chip-select 3 (NAND) */
+	sam9_smc_configure(3, &foxg20_nand_smc_config);
+
+	at91_add_device_nand(&foxg20_nand_data);
+}
+#endif
+
+
+/*
+ * MCI (SD/MMC)
+ * det_pin, wp_pin and vcc_pin are not connected
+ */
+static struct at91_mmc_data __initdata foxg20_mmc_data = {
+	.slot_b		= 1,
+	.wire4		= 1,
+};
+
+
+/*
+ * LEDs
+ */
+static struct gpio_led foxg20_leds[] = {
+	{	/* user led, red */
+		.name			= "user_led",
+		.gpio			= AT91_PIN_PC7,
+		.active_low		= 0,
+		.default_trigger	= "heartbeat",
+	},
+};
+
+
+/*
+ * GPIO Buttons
+ */
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
+static struct gpio_keys_button foxg20_buttons[] = {
+	{
+		.gpio		= AT91_PIN_PC4,
+		.code		= BTN_1,
+		.desc		= "Button 1",
+		.active_low	= 1,
+		.wakeup		= 1,
+	},
+};
+
+static struct gpio_keys_platform_data foxg20_button_data = {
+	.buttons	= foxg20_buttons,
+	.nbuttons	= ARRAY_SIZE(foxg20_buttons),
+};
+
+static struct platform_device foxg20_button_device = {
+	.name		= "gpio-keys",
+	.id		= -1,
+	.num_resources	= 0,
+	.dev		= {
+		.platform_data	= &foxg20_button_data,
+	}
+};
+
+static void __init foxg20_add_device_buttons(void)
+{
+	at91_set_gpio_input(AT91_PIN_PC4, 1);	/* btn1 */
+	at91_set_deglitch(AT91_PIN_PC4, 1);
+
+	platform_device_register(&foxg20_button_device);
+}
+#else
+static void __init foxg20_add_device_buttons(void) {}
+#endif
+
+
+#if !defined(FOXG20_WM8731)
+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
+static struct w1_gpio_platform_data w1_gpio_pdata = {
+	/* If you choose to use a pin other than PB16 it needs to be 3.3V */
+        .pin            = AT91_PIN_PB16,
+        .is_open_drain  = 1,
+};
+
+static struct platform_device w1_device = {
+        .name                   = "w1-gpio",
+        .id                     = -1,
+        .dev.platform_data      = &w1_gpio_pdata,
+};
+
+static void __init at91_add_device_w1(void)
+{
+        at91_set_GPIO_periph(w1_gpio_pdata.pin, 1);
+        at91_set_multi_drive(w1_gpio_pdata.pin, 1);
+        platform_device_register(&w1_device);
+}
+
+#endif
+#endif
+
+
+static struct i2c_board_info __initdata foxg20_i2c_devices[] = {
+	{
+		I2C_BOARD_INFO("24c512", 0x50),
+#ifdef FOXG20_WM8731
+		I2C_BOARD_INFO("wm8731", 0x1b),
+#endif
+	},
+};
+
+
+static void __init foxg20_board_init(void)
+{
+	/* Serial */
+	at91_add_device_serial();
+	/* USB Host */
+	at91_add_device_usbh(&foxg20_usbh_data);
+	/* USB Device */
+	at91_add_device_udc(&foxg20_udc_data);
+	/* SPI */
+	at91_add_device_spi(foxg20_spi_devices, ARRAY_SIZE(foxg20_spi_devices));
+#ifdef FOXG20_NAND
+	/* The Fox doesn't have NAND memory */
+	/* NAND */
+	foxg20_add_device_nand();
+#endif
+	/* Ethernet */
+	at91_add_device_eth(&foxg20_macb_data);
+	/* MMC */
+	at91_add_device_mmc(0, &foxg20_mmc_data);
+	/* I2C */
+	at91_add_device_i2c(foxg20_i2c_devices, ARRAY_SIZE(foxg20_i2c_devices));
+	/* LEDs */
+	at91_gpio_leds(foxg20_leds, ARRAY_SIZE(foxg20_leds));
+	/* Push Buttons */
+	foxg20_add_device_buttons();
+#ifdef FOXG20_WM8731
+	/* The Fox doesn't have this sound chip */
+	/* PCK0 provides MCLK to the WM8731 */
+	at91_set_B_periph(AT91_PIN_PC1, 0);
+	/* SSC (for WM8731) */
+	at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX);
+#else
+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
+	at91_add_device_w1();
+#endif
+#endif
+}
+
+MACHINE_START(AT91SAM9G20EK, "Acme Systems FOXG20")
+	/* Maintainer: Lee McLoughlin */
+	.phys_io	= AT91_BASE_SYS,
+	.io_pg_offst	= (AT91_VA_BASE_SYS >> 18) & 0xfffc,
+	.boot_params	= AT91_SDRAM_BASE + 0x100,
+	.timer		= &at91sam926x_timer,
+	.map_io		= foxg20_map_io,
+	.init_irq	= foxg20_init_irq,
+	.init_machine	= foxg20_board_init,
+MACHINE_END
diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Kconfig linux-2.6.33/arch/arm/mach-at91/Kconfig
--- linux-2.6.33.orig/arch/arm/mach-at91/Kconfig	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/mach-at91/Kconfig	2010-02-27 20:22:57.467867560 +0100
@@ -354,6 +354,15 @@
 	  Select this if you are using a Eukrea Electromatique's
 	  CPU9G20 Board <http://www.eukrea.com/>
 
+config MACH_FOXG20
+	bool "Acme Systems FOX G20"
+	select HAVE_AT91_DATAFLASH_CARD
+	select HAVE_NAND_ATMEL_BUSWIDTH_16
+	depends on ARCH_AT91SAM9G20
+	help
+	  Select this if you are using Acme Systems
+	  FOX Board G20 <http://netus.acmesystems.it>
+
 endif
 
 # ----------------------------------------------------------
diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Makefile linux-2.6.33/arch/arm/mach-at91/Makefile
--- linux-2.6.33.orig/arch/arm/mach-at91/Makefile	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/arch/arm/mach-at91/Makefile	2010-02-27 19:32:30.295749847 +0100
@@ -66,6 +66,9 @@
 # AT91SAM9G45 board-specific support
 obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o
 
+# FOXG20 board-specific support
+obj-$(CONFIG_MACH_FOXG20) += board-foxg20.o
+
 # AT91CAP9 board-specific support
 obj-$(CONFIG_MACH_AT91CAP9ADK)	+= board-cap9adk.o
 
diff -Nur linux-2.6.33.orig/drivers/mmc/host/at91_mci.c linux-2.6.33/drivers/mmc/host/at91_mci.c
--- linux-2.6.33.orig/drivers/mmc/host/at91_mci.c	2010-02-24 19:52:17.000000000 +0100
+++ linux-2.6.33/drivers/mmc/host/at91_mci.c	2010-02-27 19:32:30.295749847 +0100
@@ -461,7 +461,7 @@
 	at91_mci_write(host, AT91_MCI_DTOR, AT91_MCI_DTOMUL_1M | AT91_MCI_DTOCYC);
 	mr = AT91_MCI_PDCMODE | 0x34a;
 
-	if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
+	if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
 		mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF;
 
 	at91_mci_write(host, AT91_MCI_MR, mr);
@@ -1017,7 +1017,7 @@
 	host->bus_mode = 0;
 	host->board = pdev->dev.platform_data;
 	if (host->board->wire4) {
-		if (cpu_is_at91sam9260() || cpu_is_at91sam9263())
+		if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20())
 			mmc->caps |= MMC_CAP_4_BIT_DATA;
 		else
 			dev_warn(&pdev->dev, "4 wire bus mode not supported"