aboutsummaryrefslogtreecommitdiffstats
path: root/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-2.6.18/avr32-network-gateway-support.patch')
-rw-r--r--packages/linux/linux-2.6.18/avr32-network-gateway-support.patch233
1 files changed, 233 insertions, 0 deletions
diff --git a/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch
new file mode 100644
index 0000000000..420e859bd4
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch
@@ -0,0 +1,233 @@
+From 16655aecb1a151c1f1707c64a571cd06e6a194af Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon, 30 Oct 2006 09:35:44 +0100
+Subject: [PATCH] Add support for the AVR32 Network Gateway
+---
+ arch/avr32/Kconfig | 3 +
+ arch/avr32/Makefile | 1
+ arch/avr32/boards/atngw/Makefile | 1
+ arch/avr32/boards/atngw/flash.c | 95 +++++++++++++++++++++++++++++++++++++++
+ arch/avr32/boards/atngw/setup.c | 81 +++++++++++++++++++++++++++++++++
+ 5 files changed, 181 insertions(+)
+
+Index: linux-2.6.18/arch/avr32/Kconfig
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100
++++ linux-2.6.18/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100
+@@ -97,6 +97,9 @@
+ config BOARD_ATSTK1000
+ bool "ATSTK1000 evaluation board"
+ select BOARD_ATSTK1002 if CPU_AT32AP7000
++
++config BOARD_ATNGW
++ bool "AVR32 Network Gateway"
+ endchoice
+
+ choice
+Index: linux-2.6.18/arch/avr32/Makefile
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100
++++ linux-2.6.18/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100
+@@ -27,6 +27,7 @@
+ head-y += arch/avr32/kernel/head.o
+ core-$(CONFIG_PLATFORM_AT32AP) += arch/avr32/mach-at32ap/
+ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/
++core-$(CONFIG_BOARD_ATNGW) += arch/avr32/boards/atngw/
+ core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
+ core-y += arch/avr32/kernel/
+ core-y += arch/avr32/mm/
+Index: linux-2.6.18/arch/avr32/boards/atngw/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/Makefile 2006-12-13 09:45:34.000000000 +0100
+@@ -0,0 +1 @@
++obj-y += setup.o flash.o
+Index: linux-2.6.18/arch/avr32/boards/atngw/flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/flash.c 2006-12-13 09:45:34.000000000 +0100
+@@ -0,0 +1,95 @@
++/*
++ * ATNGW board-specific flash initialization
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/arch/smc.h>
++
++static struct smc_config flash_config __initdata = {
++ .ncs_read_setup = 0,
++ .nrd_setup = 40,
++ .ncs_write_setup = 0,
++ .nwe_setup = 10,
++
++ .ncs_read_pulse = 80,
++ .nrd_pulse = 40,
++ .ncs_write_pulse = 65,
++ .nwe_pulse = 55,
++
++ .read_cycle = 120,
++ .write_cycle = 120,
++
++ .bus_width = 2,
++ .nrd_controlled = 1,
++ .nwe_controlled = 1,
++ .byte_write = 1,
++};
++
++static struct mtd_partition flash_parts[] = {
++ {
++ .name = "u-boot",
++ .offset = 0x00000000,
++ .size = 0x00020000, /* 128 KiB */
++ .mask_flags = MTD_WRITEABLE,
++ },
++ {
++ .name = "root",
++ .offset = 0x00020000,
++ .size = 0x007d0000,
++ },
++ {
++ .name = "env",
++ .offset = 0x007f0000,
++ .size = 0x00010000,
++ .mask_flags = MTD_WRITEABLE,
++ },
++};
++
++static struct physmap_flash_data flash_data = {
++ .width = 2,
++ .nr_parts = ARRAY_SIZE(flash_parts),
++ .parts = flash_parts,
++};
++
++static struct resource flash_resource = {
++ .start = 0x00000000,
++ .end = 0x007fffff,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device flash_device = {
++ .name = "physmap-flash",
++ .id = 0,
++ .resource = &flash_resource,
++ .num_resources = 1,
++ .dev = {
++ .platform_data = &flash_data,
++ },
++};
++
++/* This needs to be called after the SMC has been initialized */
++static int __init atngw_flash_init(void)
++{
++ int ret;
++
++ ret = smc_set_configuration(0, &flash_config);
++ if (ret < 0) {
++ printk(KERN_ERR "atngw: failed to set NOR flash timing\n");
++ return ret;
++ }
++
++ platform_device_register(&flash_device);
++
++ return 0;
++}
++device_initcall(atngw_flash_init);
+Index: linux-2.6.18/arch/avr32/boards/atngw/setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/setup.c 2006-12-13 09:59:44.000000000 +0100
+@@ -0,0 +1,84 @@
++/*
++ * Board-specific setup code for the Atmel Network Gateway
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/bootmem.h>
++#include <linux/device.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/linkage.h>
++#include <linux/spi/spi.h>
++
++#include <asm/setup.h>
++
++#include <asm/arch/at32ap7000.h>
++#include <asm/arch/board.h>
++#include <asm/arch/init.h>
++
++/* Initialized by bootloader-specific startup code. */
++struct tag *bootloader_tags __initdata;
++
++static struct eth_platform_data __initdata eth_data[2];
++
++static struct spi_board_info spi_board_info[] __initdata = {
++ {
++ .modalias = "mtd_dataflash",
++ .controller_data = (void *)GPIO_PIN_PA(3),
++ .max_speed_hz = 66000000,
++ .bus_num = 0,
++ .chip_select = 0,
++ },
++};
++
++static int __init parse_tag_ethernet(struct tag *tag)
++{
++ int i;
++
++ i = tag->u.ethernet.mac_index;
++ if (i < ARRAY_SIZE(eth_data)) {
++ eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr;
++ memcpy(&eth_data[i].hw_addr, tag->u.ethernet.hw_address,
++ sizeof(eth_data[i].hw_addr));
++ eth_data[i].valid = 1;
++ }
++ return 0;
++}
++__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
++
++void __init setup_board(void)
++{
++ at32_map_usart(1, 0); /* /dev/ttyS0 */
++
++ at32_setup_serial_console(0);
++}
++
++static int __init atngw_init(void)
++{
++ at32_add_system_devices();
++
++ at32_add_device_usart(0);
++
++ if (eth_data[0].valid)
++ at32_add_device_eth(0, &eth_data[0]);
++ if (eth_data[1].valid)
++ at32_add_device_eth(1, &eth_data[1]);
++
++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
++
++ at32_add_device_spi(0);
++ at32_add_device_mmci(0);
++ at32_add_device_usb(0);
++
++ return 0;
++}
++postcore_initcall(atngw_init);
++
++void board_setup_fbmem(unsigned long fbmem_start, unsigned long fbmem_size)
++{
++
++}