diff --git a/target/linux/avr32-2.6/Makefile b/target/linux/avr32-2.6/Makefile index 465d96c93d..f58b9e8386 100644 --- a/target/linux/avr32-2.6/Makefile +++ b/target/linux/avr32-2.6/Makefile @@ -11,7 +11,7 @@ BOARD:=avr32 BOARDNAME:=Atmel AVR32 FEATURES:=squashfs -LINUX_VERSION:=2.6.21.5 +LINUX_VERSION:=2.6.22.1 define Target/Description Build firmware images for ATNGW100 board diff --git a/target/linux/avr32-2.6/config/default b/target/linux/avr32-2.6/config/default index 5bd7078c94..1c0f9645af 100644 --- a/target/linux/avr32-2.6/config/default +++ b/target/linux/avr32-2.6/config/default @@ -6,11 +6,25 @@ CONFIG_AP7000_16_BIT_SMC=y CONFIG_AVR32=y CONFIG_BOARD_ATNGW100=y # CONFIG_BOARD_ATSTK1000 is not set +# CONFIG_BROADCOM_PHY is not set # CONFIG_BT is not set CONFIG_CPU_AT32AP7000=y +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEBUG is not set +# CONFIG_CPU_FREQ_STAT is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_AT32AP=y CONFIG_DW_DMAC=y CONFIG_ENTRY_ADDRESS=0x90000000 +# CONFIG_FIXED_PHY is not set # CONFIG_GEN_RTC is not set +# CONFIG_GPIO_DEV is not set # CONFIG_HZ_100 is not set CONFIG_HZ=250 CONFIG_HZ_250=y @@ -18,6 +32,7 @@ CONFIG_HZ_250=y # CONFIG_I2C is not set # CONFIG_IDE is not set CONFIG_INITRAMFS_SOURCE="" +CONFIG_LEDS_GPIO=y CONFIG_MACB=y # CONFIG_MTD_ABSENT is not set CONFIG_MTD_BLKDEVS=y @@ -72,11 +87,13 @@ CONFIG_MTD=y # CONFIG_OWNERSHIP_TRACE is not set CONFIG_PHYS_OFFSET=0x10000000 CONFIG_PLATFORM_AT32AP=y +# CONFIG_QSEMI_PHY is not set # CONFIG_RTC is not set # CONFIG_SERIAL_8250 is not set CONFIG_SERIAL_ATMEL_CONSOLE=y # CONFIG_SERIAL_ATMEL_TTYAT is not set CONFIG_SERIAL_ATMEL=y +# CONFIG_SMSC_PHY is not set # CONFIG_SPI_AT25 is not set CONFIG_SPI_ATMEL=y # CONFIG_SPI_BITBANG is not set diff --git a/target/linux/avr32-2.6/patches/100-git_sync.patch b/target/linux/avr32-2.6/patches/100-git_sync.patch index 5c5cc8e7fb..7653c5ff0c 100644 --- a/target/linux/avr32-2.6/patches/100-git_sync.patch +++ b/target/linux/avr32-2.6/patches/100-git_sync.patch @@ -1,414 +1,360 @@ -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/flash.c avr32-git/arch/avr32/boards/atngw100/flash.c ---- linux-2.6.21.3/arch/avr32/boards/atngw100/flash.c 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/flash.c 2007-06-06 11:33:46.000000000 +0200 -@@ -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 -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/Makefile avr32-git/arch/avr32/boards/atngw100/Makefile ---- linux-2.6.21.3/arch/avr32/boards/atngw100/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/Makefile 2007-06-06 11:33:46.000000000 +0200 -@@ -0,0 +1 @@ -+obj-y += setup.o flash.o -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atngw100/setup.c avr32-git/arch/avr32/boards/atngw100/setup.c ---- linux-2.6.21.3/arch/avr32/boards/atngw100/setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atngw100/setup.c 2007-06-06 11:33:46.000000000 +0200 -@@ -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, -+ }, -+}; -+ +diff -x .git -Nur linux-2.6.22.1/arch/avr32/boards/atngw100/setup.c linux-avr32.git/arch/avr32/boards/atngw100/setup.c +--- linux-2.6.22.1/arch/avr32/boards/atngw100/setup.c 2007-07-10 20:56:30.000000000 +0200 ++++ linux-avr32.git/arch/avr32/boards/atngw100/setup.c 2007-07-12 13:59:49.000000000 +0200 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -21,6 +22,7 @@ + #include + #include + #include ++#include + + /* Initialized by bootloader-specific startup code. */ + struct tag *bootloader_tags __initdata; +@@ -39,6 +41,11 @@ + }, + }; + +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; + /* + * The next two functions should go away as the boot loader is + * supposed to initialize the macb address registers with a valid +@@ -100,8 +107,31 @@ + at32_setup_serial_console(0); + } + ++static const struct gpio_led ngw_leds[] = { ++ { .name = "sys", .gpio = GPIO_PIN_PA(16), .active_low = 1, ++ .default_trigger = "heartbeat", ++ }, ++ { .name = "a", .gpio = GPIO_PIN_PA(19), .active_low = 1, }, ++ { .name = "b", .gpio = GPIO_PIN_PE(19), .active_low = 1, }, ++}; + -+ 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)); ++static const struct gpio_led_platform_data ngw_led_data = { ++ .num_leds = ARRAY_SIZE(ngw_leds), ++ .leds = (void *) ngw_leds, ++}; + -+ return 0; -+} -+__tagtable(ATAG_ETHERNET, parse_tag_ethernet); ++static struct platform_device ngw_gpio_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = (void *) &ngw_led_data, ++ } ++}; + -+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; + static int __init atngw100_init(void) + { ++ unsigned i; + -+ 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)); + /* + * ATNGW100 uses 16-bit SDRAM interface, so we don't need to + * reserve any pins for it. +@@ -115,6 +145,14 @@ + 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); ++ at32_add_device_usba(0, NULL); + -+ return 0; -+} -+postcore_initcall(atngw100_init); -diff -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1000.h avr32-git/arch/avr32/boards/atstk1000/atstk1000.h ---- linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1000.h 1970-01-01 01:00:00.000000000 +0100 -+++ avr32-git/arch/avr32/boards/atstk1000/atstk1000.h 2007-06-06 11:33:46.000000000 +0200 -@@ -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 -Nur -x .gitignore -x .git linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1002.c avr32-git/arch/avr32/boards/atstk1000/atstk1002.c ---- linux-2.6.21.3/arch/avr32/boards/atstk1000/atstk1002.c 2007-05-24 23:22:47.000000000 +0200 -+++ avr32-git/arch/avr32/boards/atstk1000/atstk1002.c 2007-06-06 11:33:46.000000000 +0200 -@@ -16,6 +16,8 @@ ++ for (i = 0; i < ARRAY_SIZE(ngw_leds); i++) { ++ at32_select_gpio(ngw_leds[i].gpio, ++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); ++ } ++ platform_device_register(&ngw_gpio_leds); + + return 0; + } +diff -x .git -Nur linux-2.6.22.1/arch/avr32/boards/atstk1000/atstk1002.c linux-avr32.git/arch/avr32/boards/atstk1000/atstk1002.c +--- linux-2.6.22.1/arch/avr32/boards/atstk1000/atstk1002.c 2007-07-10 20:56:30.000000000 +0200 ++++ linux-avr32.git/arch/avr32/boards/atstk1000/atstk1002.c 2007-07-12 13:59:49.000000000 +0200 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + #include + #include #include - #include +@@ -27,7 +28,6 @@ -+#include