]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
arm/km: use spi claim bus to switch between SPI and NAND
authorValentin Longchamp <valentin.longchamp@keymile.com>
Wed, 13 Jun 2012 03:01:03 +0000 (03:01 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Sat, 7 Jul 2012 12:07:33 +0000 (14:07 +0200)
We overwrite these weak functions from the kirkwood spi code to
use our own method to be able to switch between the SPI NOR and
the NAND flash. This is needed e.g. to update the u-boot. The former
command do_spi_toggle can therefore be removed. And the usage of
this command is removed from the u-boot update command in the
u-boot environment.

Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com>
Signed-off-by: Prafulla Wadaskar <prafulla@marvell.com>
cc: Holger Brunck <holger.brunck@keymile.com>
cc: Prafulla Wadaskar <prafulla@marvell.com>

board/keymile/km_arm/km_arm.c
include/configs/km/km_arm.h

index ed12b5c5d8c9fd5905e22c7bb32b22d8a98fc05b..cb3402b8f96723bde044918f6468a8a7e3d137a3 100644 (file)
@@ -33,6 +33,7 @@
 #include <nand.h>
 #include <netdev.h>
 #include <miiphy.h>
+#include <spi.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/kirkwood.h>
@@ -284,48 +285,17 @@ int board_init(void)
        return 0;
 }
 
-#if defined(CONFIG_CMD_SF)
-int do_spi_toggle(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int board_spi_claim_bus(struct spi_slave *slave)
 {
-       u32 tmp;
-       if (argc < 2)
-               return cmd_usage(cmdtp);
-
-       if ((strcmp(argv[1], "off") == 0)) {
-               printf("SPI FLASH disabled, NAND enabled\n");
-               /* Multi-Purpose Pins Functionality configuration */
-               kwmpp_config[0] = MPP0_NF_IO2;
-               kwmpp_config[1] = MPP1_NF_IO3;
-               kwmpp_config[2] = MPP2_NF_IO4;
-               kwmpp_config[3] = MPP3_NF_IO5;
-
-               kirkwood_mpp_conf(kwmpp_config, NULL);
-               tmp = readl(KW_GPIO0_BASE);
-               writel(tmp | FLASH_GPIO_PIN , KW_GPIO0_BASE);
-       } else if ((strcmp(argv[1], "on") == 0)) {
-               printf("SPI FLASH enabled, NAND disabled\n");
-               /* Multi-Purpose Pins Functionality configuration */
-               kwmpp_config[0] = MPP0_SPI_SCn;
-               kwmpp_config[1] = MPP1_SPI_MOSI;
-               kwmpp_config[2] = MPP2_SPI_SCK;
-               kwmpp_config[3] = MPP3_SPI_MISO;
-
-               kirkwood_mpp_conf(kwmpp_config, NULL);
-               tmp = readl(KW_GPIO0_BASE);
-               writel(tmp & (~FLASH_GPIO_PIN) , KW_GPIO0_BASE);
-       } else {
-               return cmd_usage(cmdtp);
-       }
+       kw_gpio_set_value(KM_FLASH_GPIO_PIN, 0);
 
        return 0;
 }
 
-U_BOOT_CMD(
-       spitoggle,      2,      0,      do_spi_toggle,
-       "En-/disable SPI FLASH access",
-       "<on|off> - Enable (on) or disable (off) SPI FLASH access\n"
-       );
-#endif
+void board_spi_release_bus(struct spi_slave *slave)
+{
+       kw_gpio_set_value(KM_FLASH_GPIO_PIN, 1);
+}
 
 int dram_init(void)
 {
index 4a0b80e292dc774ef1452e47238112ae28c75518..b14093f4f3dbce181afb58abe8fad8319465d083 100644 (file)
@@ -227,7 +227,11 @@ int get_scl(void);
 #define CONFIG_SPI_FLASH
 #define CONFIG_SPI_FLASH_STMICRO
 
+/* SPI bus claim MPP configuration */
+#define CONFIG_SYS_KW_SPI_MPP  0x0
+
 #define FLASH_GPIO_PIN                 0x00010000
+#define KM_FLASH_GPIO_PIN      16
 
 #ifndef MTDIDS_DEFAULT
 # define MTDIDS_DEFAULT                "nand0=orion_nand"
@@ -241,9 +245,8 @@ int get_scl(void);
 
 #define        CONFIG_KM_UPDATE_UBOOT                                          \
        "update="                                                       \
-               "spi on;sf probe 0;sf erase 0 +${filesize};"            \
-               "sf write ${load_addr_r} 0 ${filesize};"                \
-               "spi off\0"
+               "sf probe 0;sf erase 0 +${filesize};"                   \
+               "sf write ${load_addr_r} 0 ${filesize};\0"
 
 /*
  * Default environment variables