From b97f0f63fa5227d384269515496cec2dfb9894bf Mon Sep 17 00:00:00 2001 From: Ulf Samuelsson Date: Tue, 31 Jul 2007 15:49:25 +0000 Subject: Add AVR32 kernel patches for linux-2.6.21.5 --- .../linux-2.6.21.5-003-atmel.1-avr32-updates.patch | 17772 +++++++++++++++++++ ...-006-wait-for-async-scanned-block-devices.patch | 55 + ...ux-2.6.21.5-007-ipmisensors-20070314-1214.patch | 1914 ++ 3 files changed, 19741 insertions(+) create mode 100644 toolchain/kernel-headers/linux-2.6.21.5-003-atmel.1-avr32-updates.patch create mode 100644 toolchain/kernel-headers/linux-2.6.21.5-006-wait-for-async-scanned-block-devices.patch create mode 100644 toolchain/kernel-headers/linux-2.6.21.5-007-ipmisensors-20070314-1214.patch diff --git a/toolchain/kernel-headers/linux-2.6.21.5-003-atmel.1-avr32-updates.patch b/toolchain/kernel-headers/linux-2.6.21.5-003-atmel.1-avr32-updates.patch new file mode 100644 index 000000000..a07c9f3f9 --- /dev/null +++ b/toolchain/kernel-headers/linux-2.6.21.5-003-atmel.1-avr32-updates.patch @@ -0,0 +1,17772 @@ +diff --git a/MAINTAINERS b/MAINTAINERS +index 277877a..a5bdfa6 100644 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -1434,6 +1434,11 @@ L: linux-scsi@vger.kernel.org + W: http://www.icp-vortex.com/ + S: Supported + ++GENERIC GPIO I2C DRIVER ++P: Haavard Skinnemoen ++M: hskinnemoen@atmel.com ++S: Supported ++ + GENERIC HDLC DRIVER, N2, C101, PCI200SYN and WANXL DRIVERS + P: Krzysztof Halasa + M: khc@pm.waw.pl +diff --git a/Makefile b/Makefile +index 7980f39..388b666 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 21 +-EXTRAVERSION = .3 ++EXTRAVERSION = .3.atmel.1 + NAME = Nocturnal Monster Puppy + + # *DOCUMENTATION* +diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig +index ce4013a..3956118 100644 +--- a/arch/avr32/Kconfig ++++ b/arch/avr32/Kconfig +@@ -57,9 +57,6 @@ config ARCH_HAS_ILOG2_U64 + bool + default n + +-config GENERIC_BUST_SPINLOCK +- bool +- + config GENERIC_HWEIGHT + bool + default y +@@ -68,6 +65,11 @@ config GENERIC_CALIBRATE_DELAY + bool + default y + ++config GENERIC_BUG ++ bool ++ default y ++ depends on BUG ++ + source "init/Kconfig" + + menu "System Type and features" +@@ -106,6 +108,9 @@ choice + config BOARD_ATSTK1000 + bool "ATSTK1000 evaluation board" + select BOARD_ATSTK1002 if CPU_AT32AP7000 ++ ++config BOARD_ATNGW100 ++ bool "ATNGW100 Network Gateway" + endchoice + + choice +@@ -116,6 +121,8 @@ config LOADER_U_BOOT + bool "U-Boot (or similar) bootloader" + endchoice + ++source "arch/avr32/mach-at32ap/Kconfig" ++ + config LOAD_ADDRESS + hex + default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y +@@ -164,6 +171,10 @@ config OWNERSHIP_TRACE + enabling Nexus-compliant debuggers to keep track of the PID of the + currently executing task. + ++config DW_DMAC ++ tristate "Synopsys DesignWare DMA Controller support" ++ default y if CPU_AT32AP7000 ++ + # FPU emulation goes here + + source "kernel/Kconfig.hz" +diff --git a/arch/avr32/Makefile b/arch/avr32/Makefile +index 7b842e9..eb72198 100644 +--- a/arch/avr32/Makefile ++++ b/arch/avr32/Makefile +@@ -16,7 +16,7 @@ AFLAGS += -mrelax -mno-pic + CFLAGS_MODULE += -mno-relax + LDFLAGS_vmlinux += --relax + +-cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000 ++cpuflags-$(CONFIG_CPU_AT32AP7000) += -mcpu=ap7000 + + CFLAGS += $(cpuflags-y) + AFLAGS += $(cpuflags-y) +@@ -27,9 +27,11 @@ head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o + 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_ATNGW100) += arch/avr32/boards/atngw100/ + core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/ + core-y += arch/avr32/kernel/ + core-y += arch/avr32/mm/ ++drivers-y += arch/avr32/drivers/ + libs-y += arch/avr32/lib/ + + archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap +diff --git a/arch/avr32/boards/atngw100/Makefile b/arch/avr32/boards/atngw100/Makefile +new file mode 100644 +index 0000000..c740aa1 +--- /dev/null ++++ b/arch/avr32/boards/atngw100/Makefile +@@ -0,0 +1 @@ ++obj-y += setup.o flash.o +diff --git a/arch/avr32/boards/atngw100/flash.c b/arch/avr32/boards/atngw100/flash.c +new file mode 100644 +index 0000000..f9b32a8 +--- /dev/null ++++ b/arch/avr32/boards/atngw100/flash.c +@@ -0,0 +1,95 @@ ++/* ++ * ATNGW100 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 ++#include ++#include ++#include ++#include ++ ++#include ++ ++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 atngw100_flash_init(void) ++{ ++ int ret; ++ ++ ret = smc_set_configuration(0, &flash_config); ++ if (ret < 0) { ++ printk(KERN_ERR "atngw100: failed to set NOR flash timing\n"); ++ return ret; ++ } ++ ++ platform_device_register(&flash_device); ++ ++ return 0; ++} ++device_initcall(atngw100_flash_init); +diff --git a/arch/avr32/boards/atngw100/setup.c b/arch/avr32/boards/atngw100/setup.c +new file mode 100644 +index 0000000..3cbdc2d +--- /dev/null ++++ b/arch/avr32/boards/atngw100/setup.c +@@ -0,0 +1,131 @@ ++/* ++ * Board-specific setup code for the ATNGW100 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 ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include ++#include ++ ++/* Initialized by bootloader-specific startup code. */ ++struct tag *bootloader_tags __initdata; ++ ++struct eth_addr { ++ u8 addr[6]; ++}; ++static struct eth_addr __initdata hw_addr[2]; ++static struct eth_platform_data __initdata eth_data[2]; ++ ++static struct spi_board_info spi0_board_info[] __initdata = { ++ { ++ .modalias = "mtd_dataflash", ++ .max_speed_hz = 10000000, ++ .chip_select = 0, ++ }, ++}; ++ ++static struct mci_platform_data __initdata mci0_data = { ++ .detect_pin = GPIO_PIN_PC(25), ++ .wp_pin = GPIO_PIN_PE(0), ++}; ++ ++/* ++ * The next two functions should go away as the boot loader is ++ * supposed to initialize the macb address registers with a valid ++ * ethernet address. But we need to keep it around for a while until ++ * we can be reasonably sure the boot loader does this. ++ * ++ * The phy_id is ignored as the driver will probe for it. ++ */ ++static int __init parse_tag_ethernet(struct tag *tag) ++{ ++ int i; ++ ++ i = tag->u.ethernet.mac_index; ++ if (i < ARRAY_SIZE(hw_addr)) ++ memcpy(hw_addr[i].addr, tag->u.ethernet.hw_address, ++ sizeof(hw_addr[i].addr)); ++ ++ return 0; ++} ++__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++ ++static void __init set_hw_addr(struct platform_device *pdev) ++{ ++ struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ const u8 *addr; ++ void __iomem *regs; ++ struct clk *pclk; ++ ++ if (!res) ++ return; ++ if (pdev->id >= ARRAY_SIZE(hw_addr)) ++ return; ++ ++ addr = hw_addr[pdev->id].addr; ++ if (!is_valid_ether_addr(addr)) ++ return; ++ ++ /* ++ * Since this is board-specific code, we'll cheat and use the ++ * physical address directly as we happen to know that it's ++ * the same as the virtual address. ++ */ ++ regs = (void __iomem __force *)res->start; ++ pclk = clk_get(&pdev->dev, "pclk"); ++ if (!pclk) ++ return; ++ ++ clk_enable(pclk); ++ __raw_writel((addr[3] << 24) | (addr[2] << 16) ++ | (addr[1] << 8) | addr[0], regs + 0x98); ++ __raw_writel((addr[5] << 8) | addr[4], regs + 0x9c); ++ clk_disable(pclk); ++ clk_put(pclk); ++} ++ ++struct platform_device *at32_usart_map[1]; ++unsigned int at32_nr_usarts = 1; ++ ++void __init setup_board(void) ++{ ++ at32_map_usart(1, 0); /* USART 1: /dev/ttyS0, DB9 */ ++ at32_setup_serial_console(0); ++} ++ ++static int __init atngw100_init(void) ++{ ++ /* ++ * ATNGW100 uses 16-bit SDRAM interface, so we don't need to ++ * reserve any pins for it. ++ */ ++ ++ at32_add_system_devices(); ++ ++ at32_add_device_usart(0); ++ ++ set_hw_addr(at32_add_device_eth(0, ð_data[0])); ++ set_hw_addr(at32_add_device_eth(1, ð_data[1])); ++ ++ at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); ++ at32_add_device_mci(0, &mci0_data); ++ at32_add_device_usba(0); ++ ++ return 0; ++} ++postcore_initcall(atngw100_init); +diff --git a/arch/avr32/boards/atstk1000/atstk1000.h b/arch/avr32/boards/atstk1000/atstk1000.h +new file mode 100644 +index 0000000..9a49ed0 +--- /dev/null ++++ b/arch/avr32/boards/atstk1000/atstk1000.h +@@ -0,0 +1,15 @@ ++/* ++ * ATSTK1000 setup code: Daughterboard interface ++ * ++ * Copyright (C) 2007 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. ++ */ ++#ifndef __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H ++#define __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H ++ ++extern struct atmel_lcdfb_info atstk1000_lcdc_data; ++ ++#endif /* __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H */ +diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c +index 5974768..84c22b2 100644 +--- a/arch/avr32/boards/atstk1000/atstk1002.c ++++ b/arch/avr32/boards/atstk1000/atstk1002.c +@@ -14,7 +14,12 @@ + #include + #include + #include ++ + #include ++#include ++#include ++ ++#include