Add support for Linux 3.14 for the Atmel's AT91 platform. Signed-off-by: Florian Fainelli <florian@openwrt.org> SVN-Revision: 42414master
parent
035f68e858
commit
892d571d07
@ -0,0 +1,125 @@ |
||||
/* |
||||
* lmu5000.dst - Device Tree file for CalAmp LMU5000 board |
||||
* |
||||
* Copyright (C) 2013 Adam Porter <porter.adam@gmail.com> |
||||
* |
||||
* Licensed under GPLv2. |
||||
*/ |
||||
/dts-v1/; |
||||
#include "at91sam9g20.dtsi" |
||||
|
||||
/ { |
||||
model = "CalAmp LMU5000"; |
||||
compatible = "calamp,lmu5000", "atmel,at91sam9g20", "atmel,at91sam9"; |
||||
|
||||
chosen { |
||||
bootargs = "mem=64M console=ttyS0,115200 rootfstype=jffs2"; |
||||
}; |
||||
|
||||
memory { |
||||
reg = <0x20000000 0x4000000>; |
||||
}; |
||||
|
||||
clocks { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
ranges; |
||||
|
||||
main_clock: clock@0 { |
||||
compatible = "atmel,osc", "fixed-clock"; |
||||
clock-frequency = <18432000>; |
||||
}; |
||||
}; |
||||
|
||||
ahb { |
||||
apb { |
||||
pinctrl@fffff400 { |
||||
board { |
||||
pinctrl_pck0_as_mck: pck0_as_mck { |
||||
atmel,pins = |
||||
<2 1 0x2 0x0>; /* PC1 periph B */ |
||||
}; |
||||
|
||||
}; |
||||
}; |
||||
|
||||
dbgu: serial@fffff200 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
usart0: serial@fffb0000 { |
||||
pinctrl-0 = |
||||
<&pinctrl_usart0 |
||||
&pinctrl_usart0_rts |
||||
&pinctrl_usart0_cts |
||||
&pinctrl_usart0_dtr_dsr |
||||
&pinctrl_usart0_dcd |
||||
&pinctrl_usart0_ri>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
usart2: serial@fffb8000 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
uart0: serial@fffd4000 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
uart1: serial@fffd8000 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
macb0: ethernet@fffc4000 { |
||||
phy-mode = "mii"; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
usb1: gadget@fffa4000 { |
||||
atmel,vbus-gpio = <&pioC 5 0>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
ssc0: ssc@fffbc000 { |
||||
status = "okay"; |
||||
pinctrl-0 = <&pinctrl_ssc0_tx>; |
||||
}; |
||||
|
||||
watchdog@fffffd40 { |
||||
status = "okay"; |
||||
}; |
||||
}; |
||||
|
||||
nand0: nand@40000000 { |
||||
nand-bus-width = <8>; |
||||
nand-ecc-mode = "soft"; |
||||
nand-on-flash-bbt; |
||||
status = "okay"; |
||||
|
||||
kernel@0 { |
||||
label = "kernel"; |
||||
reg = <0x0 0x400000>; |
||||
}; |
||||
|
||||
rootfs@400000 { |
||||
label = "rootfs"; |
||||
reg = <0x400000 0x3C00000>; |
||||
}; |
||||
|
||||
user1@4000000 { |
||||
label = "user1"; |
||||
reg = <0x4000000 0x2000000>; |
||||
}; |
||||
|
||||
user2@6000000 { |
||||
label = "user2"; |
||||
reg = <0x6000000 0x2000000>; |
||||
}; |
||||
}; |
||||
|
||||
usb0: ohci@00500000 { |
||||
num-ports = <2>; |
||||
status = "okay"; |
||||
}; |
||||
}; |
||||
}; |
@ -0,0 +1,219 @@ |
||||
/*
|
||||
* Copyright (C) 2008 I2SE GmbH |
||||
* Copyright (C) 2010 IEQualize GmbH |
||||
* Copyright (C) 2010-2011 Michael Heimpold |
||||
* |
||||
* 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/fb.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 <video/atmel_lcdc.h> |
||||
|
||||
#include "sam9_smc.h" |
||||
#include "generic.h" |
||||
|
||||
#include <linux/atmel_serial.h> |
||||
|
||||
|
||||
static void __init tqma9263_map_io(void) |
||||
{ |
||||
unsigned pins; |
||||
|
||||
/* Initialize processor: 18.432 MHz crystal */ |
||||
at91_initialize(18432000); |
||||
|
||||
/* DGBU on ttyS0. (Rx & Tx only) */ |
||||
at91_register_uart(0, 0, 0); |
||||
|
||||
/* USART0 on ttyS1 */ |
||||
pins = ATMEL_UART_CTS | ATMEL_UART_RTS | |
||||
ATMEL_UART_DSR | ATMEL_UART_DTR | |
||||
ATMEL_UART_DCD | ATMEL_UART_RI; |
||||
at91_register_uart(AT91SAM9263_ID_US0, 1, pins); |
||||
|
||||
/* USART1 on ttyS2 */ |
||||
pins = ATMEL_UART_RTS; |
||||
at91_register_uart(AT91SAM9263_ID_US1, 2, pins); |
||||
|
||||
/* USART2 on ttyS3 */ |
||||
pins = ATMEL_UART_RTS; |
||||
at91_register_uart(AT91SAM9263_ID_US2, 3, pins); |
||||
|
||||
/* set serial console to ttyS0 (ie, DBGU) */ |
||||
at91_set_serial_console(0); |
||||
} |
||||
|
||||
|
||||
/*
|
||||
* USB Host port |
||||
*/ |
||||
static struct at91_usbh_data __initdata tqma9263_usbh_data = { |
||||
.ports = 2, |
||||
.vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 }, |
||||
.vbus_pin_active_low = 0, |
||||
}; |
||||
|
||||
|
||||
/*
|
||||
* USB Device port |
||||
*/ |
||||
static struct at91_udc_data __initdata tqma9263_udc_data = { |
||||
.vbus_pin = AT91_PIN_PA25, |
||||
.pullup_pin = 0, /* pull-up driven by UDC */ |
||||
}; |
||||
|
||||
|
||||
/*
|
||||
* MCI (SD/MMC) |
||||
*/ |
||||
static struct at91_mmc_data __initdata tqma9263_mmc_data = { |
||||
.wire4 = 1, |
||||
.det_pin = AT91_PIN_PE18, |
||||
.wp_pin = AT91_PIN_PB28, |
||||
}; |
||||
|
||||
|
||||
/*
|
||||
* MACB Ethernet device |
||||
*/ |
||||
static struct macb_platform_data __initdata tqma9263_macb_data = { |
||||
.phy_irq_pin = AT91_PIN_PE31, |
||||
.is_rmii = 1, |
||||
}; |
||||
|
||||
|
||||
/*
|
||||
* I2C devices |
||||
*/ |
||||
static struct i2c_board_info __initdata tqma9263_i2c_devices[] = { |
||||
{ |
||||
I2C_BOARD_INFO("pcf8563", 0x51), |
||||
}, |
||||
{ |
||||
I2C_BOARD_INFO("24c04", 0x52), |
||||
}, |
||||
}; |
||||
|
||||
|
||||
/*
|
||||
* NAND flash |
||||
*/ |
||||
static struct mtd_partition __initdata tqma9263_nand_partition[] = { |
||||
{ |
||||
.name = "uboot", |
||||
.offset = 0, |
||||
.size = 3 * SZ_128K, |
||||
}, |
||||
{ |
||||
.name = "uboot-env", |
||||
.offset = MTDPART_OFS_NXTBLK, |
||||
.size = SZ_128K, |
||||
}, |
||||
{ |
||||
.name = "linux", |
||||
.offset = MTDPART_OFS_NXTBLK, |
||||
.size = SZ_2M, |
||||
}, |
||||
{ |
||||
.name = "rootfs", |
||||
.offset = MTDPART_OFS_NXTBLK, |
||||
.size = MTDPART_SIZ_FULL, |
||||
}, |
||||
}; |
||||
|
||||
static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
||||
{ |
||||
*num_partitions = ARRAY_SIZE(tqma9263_nand_partition); |
||||
return tqma9263_nand_partition; |
||||
} |
||||
|
||||
static struct atmel_nand_data __initdata tqma9263_nand_data = { |
||||
.ale = 21, |
||||
.cle = 22, |
||||
.rdy_pin = AT91_PIN_PD14, |
||||
.enable_pin = AT91_PIN_PD15, |
||||
}; |
||||
|
||||
static struct sam9_smc_config __initdata tqma9263_nand_smc_config = { |
||||
.ncs_read_setup = 0, |
||||
.nrd_setup = 1, |
||||
.ncs_write_setup = 0, |
||||
.nwe_setup = 1, |
||||
|
||||
.ncs_read_pulse = 3, |
||||
.nrd_pulse = 3, |
||||
.ncs_write_pulse = 3, |
||||
.nwe_pulse = 3, |
||||
|
||||
.read_cycle = 5, |
||||
.write_cycle = 5, |
||||
|
||||
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8, |
||||
.tdf_cycles = 2, |
||||
}; |
||||
|
||||
static void __init tqma9263_add_device_nand(void) |
||||
{ |
||||
/* configure chip-select 3 (NAND) */ |
||||
sam9_smc_configure(0, 3, &tqma9263_nand_smc_config); |
||||
|
||||
at91_add_device_nand(&tqma9263_nand_data); |
||||
} |
||||
|
||||
|
||||
static void __init tqma9263_board_init(void) |
||||
{ |
||||
/* Serial */ |
||||
at91_add_device_serial(); |
||||
/* USB Host */ |
||||
at91_add_device_usbh(&tqma9263_usbh_data); |
||||
/* USB Device */ |
||||
at91_add_device_udc(&tqma9263_udc_data); |
||||
/* MMC */ |
||||
at91_add_device_mmc(1, &tqma9263_mmc_data); |
||||
/* I2C */ |
||||
at91_add_device_i2c(tqma9263_i2c_devices, ARRAY_SIZE(tqma9263_i2c_devices)); |
||||
/* Ethernet */ |
||||
at91_add_device_eth(&tqma9263_macb_data); |
||||
/* NAND flash */ |
||||
tqma9263_add_device_nand(); |
||||
} |
||||
|
||||
MACHINE_START(TQMA9263, "TQ Components TQMa9263") |
||||
/* Maintainer: Michael Heimpold */ |
||||
.timer = &at91sam926x_timer, |
||||
.map_io = tqma9263_map_io, |
||||
.init_irq = at91_init_irq_default, |
||||
.init_machine = tqma9263_board_init, |
||||
MACHINE_END |
@ -0,0 +1,122 @@ |
||||
/*
|
||||
*
|
||||
* Copyright (C) 2007 OpenWrt.org |
||||
*
|
||||
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
||||
* |
||||
* Atmel AT91 flash partition table. (Modified by Hamish Guthrie). |
||||
* Based on ar7 map by Felix Fietkau. |
||||
* |
||||
*/ |
||||
|
||||
#include <linux/kernel.h> |
||||
#include <linux/slab.h> |
||||
|
||||
#include <linux/mtd/mtd.h> |
||||
#include <linux/mtd/partitions.h> |
||||
#include <linux/bootmem.h> |
||||
#include <linux/squashfs_fs.h> |
||||
|
||||
static struct mtd_partition at91_parts[6]; |
||||
|
||||
static int create_mtd_partitions(struct mtd_info *master,
|
||||
struct mtd_partition **pparts,
|
||||
unsigned long origin) |
||||
{ |
||||
unsigned int offset, len; |
||||
unsigned int pre_size = 0x42000, root_max = 0x362400; |
||||
unsigned char buf[512]; |
||||
struct squashfs_super_block *sb = (struct squashfs_super_block *) buf; |
||||
|
||||
printk("Parsing AT91 partition map...\n"); |
||||
|
||||
at91_parts[0].name = "loaders"; |
||||
at91_parts[0].offset = 0; |
||||
at91_parts[0].size = 0x21000; |
||||
at91_parts[0].mask_flags = MTD_WRITEABLE; |
||||
|
||||
at91_parts[1].name = "ubparams"; |
||||
at91_parts[1].offset = 0x21000; |
||||
at91_parts[1].size = 0x8400; |
||||
at91_parts[1].mask_flags = 0; |
||||
|
||||
at91_parts[2].name = "kernel"; |
||||
at91_parts[2].offset = pre_size; |
||||
at91_parts[2].size = 0; |
||||
at91_parts[2].mask_flags = 0; |
||||
|
||||
at91_parts[3].name = "rootfs"; |
||||
at91_parts[3].offset = 0; |
||||
at91_parts[3].size = 0; |
||||
at91_parts[3].mask_flags = 0; |
||||
|
||||
for(offset = pre_size; offset < root_max; offset += master->erasesize) { |
||||
|
||||
memset(&buf, 0xe5, sizeof(buf)); |
||||
|
||||
if (master->read(master, offset, sizeof(buf), &len, buf) || len != sizeof(buf)) |
||||
break; |
||||
|
||||
if (*((__u32 *) buf) == SQUASHFS_MAGIC) { |
||||
printk(KERN_INFO "%s: Filesystem type: squashfs, size=0x%x\n", |
||||
master->name, (u32) sb->bytes_used); |
||||
|
||||
at91_parts[3].size = sb->bytes_used; |
||||
at91_parts[3].offset = offset; |
||||
len = at91_parts[3].offset + at91_parts[3].size; |
||||
len = ((len / (master->erasesize * 8)) + 1) * master->erasesize * 8; |
||||
at91_parts[3].size = len - at91_parts[3].offset; |
||||
at91_parts[2].size = offset - at91_parts[2].offset; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
if (at91_parts[3].size == 0) { |
||||
printk(KERN_NOTICE "%s: Couldn't find root filesystem\n", master->name); |
||||
return -1; |
||||
} |
||||
|
||||
at91_parts[4].name = "rootfs_data"; |
||||
at91_parts[4].offset = root_max; |
||||
at91_parts[4].size = master->size - root_max; |
||||
at91_parts[4].mask_flags = 0; |
||||
|
||||
at91_parts[5].name = "complete"; |
||||
at91_parts[5].offset = 0; |
||||
at91_parts[5].size = master->size; |
||||
at91_parts[5].mask_flags = 0; |
||||
|
||||
*pparts = at91_parts; |
||||
return 6; |
||||
} |
||||
|
||||
static struct mtd_part_parser at91_parser = { |
||||
.owner = THIS_MODULE, |
||||
.parse_fn = create_mtd_partitions, |
||||
.name = "at91part", |
||||
}; |
||||
|
||||
static int __init at91_parser_init(void) |
||||
{ |
||||
register_mtd_parser(&at91_parser); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
module_init(at91_parser_init); |
||||
|
||||
MODULE_LICENSE("GPL"); |
||||
MODULE_AUTHOR("Felix Fietkau, Eugene Konev, Hamish Guthrie"); |
||||
MODULE_DESCRIPTION("MTD partitioning for Atmel at91"); |
@ -0,0 +1,10 @@ |
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -23,6 +23,7 @@ dtb-$(CONFIG_ARCH_AT91) += tny_a9g20.dtb
|
||||
dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb
|
||||
# sam9g45
|
||||
dtb-$(CONFIG_ARCH_AT91) += at91sam9m10g45ek.dtb
|
||||
+dtb-$(CONFIG_ARCH_AT91) += lmu5000.dtb
|
||||
dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb
|
||||
# sam9n12
|
||||
dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb
|
@ -0,0 +1,29 @@ |
||||
Index: linux-3.14.16/arch/arm/mach-at91/Kconfig.non_dt
|
||||
===================================================================
|
||||
--- linux-3.14.16.orig/arch/arm/mach-at91/Kconfig.non_dt 2014-08-31 13:36:59.849640477 -0700
|
||||
+++ linux-3.14.16/arch/arm/mach-at91/Kconfig.non_dt 2014-08-31 13:36:59.845640477 -0700
|
||||
@@ -281,6 +281,12 @@
|
||||
Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
|
||||
<http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>
|
||||
|
||||
+config MACH_TQMA9263
|
||||
+ bool "TQ Components TQMa9263 board"
|
||||
+ help
|
||||
+ Select this if you are using the an TQ Components TQMa9263 board.
|
||||
+ <http://www.tq-components.com/>
|
||||
+
|
||||
endif
|
||||
|
||||
# ----------------------------------------------------------
|
||||
Index: linux-3.14.16/arch/arm/mach-at91/Makefile
|
||||
===================================================================
|
||||
--- linux-3.14.16.orig/arch/arm/mach-at91/Makefile 2014-08-31 13:36:59.849640477 -0700
|
||||
+++ linux-3.14.16/arch/arm/mach-at91/Makefile 2014-08-31 13:37:27.125639720 -0700
|
||||
@@ -62,6 +62,7 @@
|
||||
|
||||
# AT91SAM9263 board-specific support
|
||||
obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
|
||||
+obj-$(CONFIG_MACH_TQMA9263) += board-tqma9263.o
|
||||
|
||||
# AT91SAM9RL board-specific support
|
||||
obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
|
@ -0,0 +1,11 @@ |
||||
--- a/arch/arm/mach-at91/at91sam9260_devices.c
|
||||
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
|
||||
@@ -507,7 +507,7 @@ static struct platform_device at91sam926
|
||||
.num_resources = ARRAY_SIZE(spi1_resources),
|
||||
};
|
||||
|
||||
-static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB3, AT91_PIN_PC5, AT91_PIN_PC4, AT91_PIN_PC3 };
|
||||
+static const unsigned spi1_standard_cs[2] = { AT91_PIN_PB3, AT91_PIN_PC5 };
|
||||
|
||||
void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||
{
|
@ -0,0 +1,60 @@ |
||||
--- a/arch/arm/mach-at91/board-flexibity.c
|
||||
+++ b/arch/arm/mach-at91/board-flexibity.c
|
||||
@@ -89,49 +89,49 @@ static struct gpio_led flexibity_leds[]
|
||||
.name = "usb1:green",
|
||||
.gpio = AT91_PIN_PA12,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb1:red",
|
||||
.gpio = AT91_PIN_PA13,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb2:green",
|
||||
.gpio = AT91_PIN_PB26,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb2:red",
|
||||
.gpio = AT91_PIN_PB27,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb3:green",
|
||||
.gpio = AT91_PIN_PC8,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb3:red",
|
||||
.gpio = AT91_PIN_PC6,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb4:green",
|
||||
.gpio = AT91_PIN_PB4,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
},
|
||||
{
|
||||
.name = "usb4:red",
|
||||
.gpio = AT91_PIN_PB5,
|
||||
.active_low = 1,
|
||||
- .default_trigger = "default-on",
|
||||
+ .default_trigger = "heartbeat",
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in new issue