summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-11-16 14:02:32 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-11-16 14:02:32 +0100
commit9749c2f16f61048a66a98a95b6a1e88d4f491cf0 (patch)
tree529b4a220e337e6450d810b88c49c08c32f65ed6 /arch
parent856f60dbd157126241cf9033514137849bb5ca22 (diff)
parent4104dd917388943f5b0ae87d1360738675c338b0 (diff)
downloadbarebox-9749c2f16f61048a66a98a95b6a1e88d4f491cf0.tar.gz
barebox-9749c2f16f61048a66a98a95b6a1e88d4f491cf0.tar.xz
Merge branch 'for-next/mtd'
Conflicts: arch/arm/configs/at91sam9x5ek_defconfig
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/at91sam9x5ek/init.c3
-rw-r--r--arch/arm/boards/usb-a926x/init.c21
-rw-r--r--arch/arm/configs/at91sam9x5ek_defconfig12
-rw-r--r--arch/arm/configs/usb_a9263_128mib_defconfig3
-rw-r--r--arch/arm/configs/usb_a9263_defconfig3
-rw-r--r--arch/arm/mach-at91/at91sam9x5_devices.c16
-rw-r--r--arch/arm/mach-at91/include/mach/board.h4
7 files changed, 53 insertions, 9 deletions
diff --git a/arch/arm/boards/at91sam9x5ek/init.c b/arch/arm/boards/at91sam9x5ek/init.c
index 2536477316..562657751a 100644
--- a/arch/arm/boards/at91sam9x5ek/init.c
+++ b/arch/arm/boards/at91sam9x5ek/init.c
@@ -56,6 +56,9 @@ static struct atmel_nand_data nand_pdata = {
.det_pin = 0,
.rdy_pin = AT91_PIN_PD5,
.enable_pin = AT91_PIN_PD4,
+ .ecc_mode = NAND_ECC_HW,
+ .pmecc_sector_size = 512,
+ .pmecc_corr_cap = 2,
#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
.bus_width_16 = 1,
#endif
diff --git a/arch/arm/boards/usb-a926x/init.c b/arch/arm/boards/usb-a926x/init.c
index 7b946a37d2..9708aaa277 100644
--- a/arch/arm/boards/usb-a926x/init.c
+++ b/arch/arm/boards/usb-a926x/init.c
@@ -39,6 +39,7 @@
#include <mach/at91_rstc.h>
#include <gpio_keys.h>
#include <readkey.h>
+#include <spi/spi.h>
static void usb_a9260_set_board_type(void)
{
@@ -148,6 +149,25 @@ static void usb_a9260_phy_reset(void)
AT91_RSTC_URSTEN);
}
+static const struct spi_board_info usb_a9263_spi_devices[] = {
+ {
+ .name = "mtd_dataflash",
+ .chip_select = 0,
+ .max_speed_hz = 15 * 1000 * 1000,
+ .bus_num = 0,
+ }
+};
+
+static void usb_a9260_add_spi(void)
+{
+ if (!machine_is_usb_a9263())
+ return;
+
+ spi_register_board_info(usb_a9263_spi_devices,
+ ARRAY_SIZE(usb_a9263_spi_devices));
+ at91_add_device_spi(0, NULL);
+}
+
#if defined(CONFIG_MCI_ATMEL)
static struct atmel_mci_platform_data __initdata usb_a9260_mci_data = {
.bus_width = 4,
@@ -314,6 +334,7 @@ static int usb_a9260_devices_init(void)
usb_a9260_phy_reset();
at91_add_device_eth(0, &macb_pdata);
usb_a9260_add_device_mci();
+ usb_a9260_add_spi();
at91_add_device_usbh_ohci(&ek_usbh_data);
ek_add_device_udc();
ek_add_led();
diff --git a/arch/arm/configs/at91sam9x5ek_defconfig b/arch/arm/configs/at91sam9x5ek_defconfig
index 6c3534849b..0df86310ab 100644
--- a/arch/arm/configs/at91sam9x5ek_defconfig
+++ b/arch/arm/configs/at91sam9x5ek_defconfig
@@ -24,11 +24,10 @@ CONFIG_CMD_SAVEENV=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_PRINTENV=y
CONFIG_CMD_READLINE=y
+CONFIG_CMD_TFTP=y
CONFIG_CMD_ECHO_E=y
CONFIG_CMD_LOADB=y
CONFIG_CMD_MEMINFO=y
-CONFIG_CMD_MTEST=y
-CONFIG_CMD_MTEST_ALTERNATIVE=y
CONFIG_CMD_FLASH=y
CONFIG_CMD_BOOTM_SHOW_TYPE=y
CONFIG_CMD_BOOTM_INITRD=y
@@ -39,6 +38,8 @@ CONFIG_CMD_UIMAGE=y
CONFIG_CMD_RESET=y
CONFIG_CMD_GO=y
CONFIG_CMD_OFTREE=y
+CONFIG_CMD_MTEST=y
+CONFIG_CMD_MTEST_ALTERNATIVE=y
CONFIG_CMD_TIMEOUT=y
CONFIG_CMD_PARTITION=y
CONFIG_CMD_GPIO=y
@@ -49,8 +50,6 @@ CONFIG_NET=y
CONFIG_NET_DHCP=y
CONFIG_NET_NFS=y
CONFIG_NET_PING=y
-CONFIG_CMD_TFTP=y
-CONFIG_FS_TFTP=y
CONFIG_NET_NETCONSOLE=y
CONFIG_DRIVER_NET_MACB=y
CONFIG_DRIVER_SPI_ATMEL=y
@@ -61,10 +60,11 @@ CONFIG_MTD=y
# CONFIG_MTD_OOB_DEVICE is not set
CONFIG_MTD_DATAFLASH=y
CONFIG_NAND=y
-# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_SOFT is not set
# CONFIG_NAND_ECC_HW_SYNDROME is not set
# CONFIG_NAND_ECC_HW_NONE is not set
CONFIG_NAND_ATMEL=y
+CONFIG_NAND_ATMEL_PMECC=y
CONFIG_UBI=y
CONFIG_MCI=y
CONFIG_MCI_STARTUP=y
@@ -78,6 +78,8 @@ CONFIG_W1=y
CONFIG_W1_MASTER_GPIO=y
CONFIG_W1_SLAVE_DS2431=y
CONFIG_W1_SLAVE_DS2433=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_FS_TFTP=y
CONFIG_FS_FAT=y
CONFIG_FS_FAT_WRITE=y
CONFIG_FS_FAT_LFN=y
diff --git a/arch/arm/configs/usb_a9263_128mib_defconfig b/arch/arm/configs/usb_a9263_128mib_defconfig
index 87f708f0b1..71774f9bee 100644
--- a/arch/arm/configs/usb_a9263_128mib_defconfig
+++ b/arch/arm/configs/usb_a9263_128mib_defconfig
@@ -64,9 +64,10 @@ CONFIG_FS_TFTP=y
CONFIG_NET_NETCONSOLE=y
CONFIG_NET_RESOLV=y
CONFIG_DRIVER_NET_MACB=y
-# CONFIG_SPI is not set
+CONFIG_DRIVER_SPI_ATMEL=y
CONFIG_MTD=y
# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_MTD_DATAFLASH=y
CONFIG_NAND=y
# CONFIG_NAND_ECC_HW is not set
# CONFIG_NAND_ECC_HW_SYNDROME is not set
diff --git a/arch/arm/configs/usb_a9263_defconfig b/arch/arm/configs/usb_a9263_defconfig
index 9bfb7e79b2..251c654af1 100644
--- a/arch/arm/configs/usb_a9263_defconfig
+++ b/arch/arm/configs/usb_a9263_defconfig
@@ -63,9 +63,10 @@ CONFIG_FS_TFTP=y
CONFIG_NET_NETCONSOLE=y
CONFIG_NET_RESOLV=y
CONFIG_DRIVER_NET_MACB=y
-# CONFIG_SPI is not set
+CONFIG_DRIVER_SPI_ATMEL=y
CONFIG_MTD=y
# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_MTD_DATAFLASH=y
CONFIG_NAND=y
# CONFIG_NAND_ECC_HW is not set
# CONFIG_NAND_ECC_HW_SYNDROME is not set
diff --git a/arch/arm/mach-at91/at91sam9x5_devices.c b/arch/arm/mach-at91/at91sam9x5_devices.c
index 14fcb1e6af..b804b41344 100644
--- a/arch/arm/mach-at91/at91sam9x5_devices.c
+++ b/arch/arm/mach-at91/at91sam9x5_devices.c
@@ -198,9 +198,19 @@ static struct resource nand_resources[] = {
},
[1] = {
.start = AT91_BASE_SYS + AT91_PMECC,
- .end = AT91_BASE_SYS + AT91_PMECC + 512 - 1,
+ .end = AT91_BASE_SYS + AT91_PMECC + 0x600 - 1,
.flags = IORESOURCE_MEM,
- }
+ },
+ [2] = {
+ .start = AT91_BASE_SYS + AT91_PMERRLOC,
+ .end = AT91_BASE_SYS + AT91_PMERRLOC + 0x200 - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ [3] = {
+ .start = AT91SAM9X5_ROM_BASE,
+ .end = AT91SAM9X5_ROM_BASE + AT91SAM9X5_ROM_SIZE - 1,
+ .flags = IORESOURCE_MEM,
+ },
};
void __init at91_add_device_nand(struct atmel_nand_data *data)
@@ -213,6 +223,8 @@ void __init at91_add_device_nand(struct atmel_nand_data *data)
csa = at91_sys_read(AT91_MATRIX_EBICSA);
at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_CS3A_SMC_NANDFLASH);
+ data->pmecc_lookup_table_offset = 0x8000;
+
/* enable pin */
if (data->enable_pin)
at91_set_gpio_output(data->enable_pin, 1);
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h
index 1ce07628e9..dcea9f3954 100644
--- a/arch/arm/mach-at91/include/mach/board.h
+++ b/arch/arm/mach-at91/include/mach/board.h
@@ -54,6 +54,10 @@ struct atmel_nand_data {
u8 bus_width_16; /* buswidth is 16 bit */
u8 ecc_mode; /* NAND_ECC_* */
u8 on_flash_bbt; /* Use flash based bbt */
+
+ u8 pmecc_corr_cap;
+ u16 pmecc_sector_size;
+ u32 pmecc_lookup_table_offset;
};
void at91_add_device_nand(struct atmel_nand_data *data);