diff mbox series

[1/3] arm/km: add support for SUSE2

Message ID 20200113143403.9408-1-holger.brunck@ch.abb.com
State Accepted
Commit 0e1c0f361edf590fcea9fcab6333d1a142934eeb
Delegated to: Tom Rini
Headers show
Series [1/3] arm/km: add support for SUSE2 | expand

Commit Message

Holger Brunck Jan. 13, 2020, 2:34 p.m. UTC
This board is similar to SUV31, but the FPGA is reset concept is quite
different.

Signed-off-by: Holger Brunck <holger.brunck@ch.abb.com>
CC: Valentin Longchamp <valentin.longchamp@ch.abb.com>
CC: Stefan Roese <sr@denx.de>
---
 board/keymile/km_arm/Kconfig       | 12 +++++++
 board/keymile/km_arm/MAINTAINERS   |  1 +
 board/keymile/km_arm/fpga_config.c | 15 ++++++--
 configs/kmsuse2_defconfig          | 58 ++++++++++++++++++++++++++++++
 include/configs/km_kirkwood.h      |  8 +++++
 scripts/config_whitelist.txt       |  1 +
 6 files changed, 93 insertions(+), 2 deletions(-)
 create mode 100644 configs/kmsuse2_defconfig

Comments

Stefan Roese Jan. 14, 2020, 8:01 a.m. UTC | #1
Hi Holger,

On 13.01.20 15:34, Holger Brunck wrote:
> This board is similar to SUV31, but the FPGA is reset concept is quite
> different.
> 
> Signed-off-by: Holger Brunck <holger.brunck@ch.abb.com>
> CC: Valentin Longchamp <valentin.longchamp@ch.abb.com>
> CC: Stefan Roese <sr@denx.de>
> ---
>   board/keymile/km_arm/Kconfig       | 12 +++++++
>   board/keymile/km_arm/MAINTAINERS   |  1 +
>   board/keymile/km_arm/fpga_config.c | 15 ++++++--
>   configs/kmsuse2_defconfig          | 58 ++++++++++++++++++++++++++++++
>   include/configs/km_kirkwood.h      |  8 +++++
>   scripts/config_whitelist.txt       |  1 +
>   6 files changed, 93 insertions(+), 2 deletions(-)
>   create mode 100644 configs/kmsuse2_defconfig
> 
> diff --git a/board/keymile/km_arm/Kconfig b/board/keymile/km_arm/Kconfig
> index be6b162815..4b21db8573 100644
> --- a/board/keymile/km_arm/Kconfig
> +++ b/board/keymile/km_arm/Kconfig
> @@ -7,6 +7,18 @@ config KM_FPGA_CONFIG
>   	help
>   	  Include capability to change FPGA configuration.
>   
> +config KM_FPGA_FORCE_CONFIG
> +	bool "FPGA reconfiguration"
> +	default n
> +	help
> +	  If yes we force to reconfigure the FPGA always
> +
> +config KM_FPGA_NO_RESET
> +	bool "FPGA skip reset"
> +	default n
> +	help
> +	  If yes we skip triggering a reset of the FPGA
> +
>   config KM_ENV_IS_IN_SPI_NOR
>   	bool "Environment in SPI NOR"
>   	default n
> diff --git a/board/keymile/km_arm/MAINTAINERS b/board/keymile/km_arm/MAINTAINERS
> index 17926017c3..538f90f48b 100644
> --- a/board/keymile/km_arm/MAINTAINERS
> +++ b/board/keymile/km_arm/MAINTAINERS
> @@ -9,4 +9,5 @@ F:	configs/km_kirkwood_pci_defconfig
>   F:	configs/kmcoge5un_defconfig
>   F:	configs/kmnusa_defconfig
>   F:	configs/kmsugp1_defconfig
> +F:	configs/kmsuse2_defconfig
>   F:	configs/kmsuv31_defconfig
> diff --git a/board/keymile/km_arm/fpga_config.c b/board/keymile/km_arm/fpga_config.c
> index 051e167fd5..99bea009fa 100644
> --- a/board/keymile/km_arm/fpga_config.c
> +++ b/board/keymile/km_arm/fpga_config.c
> @@ -82,6 +82,7 @@ static int boco_set_bits(u8 reg, u8 flags)
>   #define FPGA_INIT_B	0x10
>   #define FPGA_DONE	0x20
>   
> +#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
>   static int fpga_done(void)
>   {
>   	int ret = 0;
> @@ -100,13 +101,16 @@ static int fpga_done(void)
>   
>   	return regval & FPGA_DONE ? 1 : 0;
>   }
> +#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
>   
> -int skip;
> +static int skip;
>   
>   int trigger_fpga_config(void)
>   {
>   	int ret = 0;
>   
> +	skip = 0;
> +#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
>   	/* if the FPGA is already configured, we do not want to
>   	 * reconfigure it */
>   	skip = 0;
> @@ -115,6 +119,7 @@ int trigger_fpga_config(void)
>   		skip = 1;
>   		return 0;
>   	}
> +#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
>   
>   	if (check_boco2()) {
>   		/* we have a BOCO2, this has to be triggered here */
> @@ -188,7 +193,13 @@ int wait_for_fpga_config(void)
>   	return 0;
>   }
>   
> -#if defined(KM_PCIE_RESET_MPP7)
> +#if defined(CONFIG_KM_FPGA_NO_RESET)
> +int fpga_reset(void)
> +{
> +	/* no dedicated reset pin for FPGA */
> +	return 0;
> +}
> +#elif defined(KM_PCIE_RESET_MPP7)
>   
>   #define KM_PEX_RST_GPIO_PIN	7
>   int fpga_reset(void)
> diff --git a/configs/kmsuse2_defconfig b/configs/kmsuse2_defconfig
> new file mode 100644
> index 0000000000..e6726ebd0c
> --- /dev/null
> +++ b/configs/kmsuse2_defconfig
> @@ -0,0 +1,58 @@
> +CONFIG_ARM=y
> +CONFIG_SYS_DCACHE_OFF=y
> +CONFIG_ARCH_CPU_INIT=y
> +CONFIG_KIRKWOOD=y
> +CONFIG_SYS_TEXT_BASE=0x07d00000
> +CONFIG_TARGET_KM_KIRKWOOD=y
> +CONFIG_KM_FPGA_CONFIG=y
> +CONFIG_KM_FPGA_FORCE_CONFIG=y
> +CONFIG_KM_FPGA_NO_RESET=y
> +CONFIG_KM_ENV_IS_IN_SPI_NOR=y
> +CONFIG_ENV_SIZE=0x2000
> +CONFIG_ENV_OFFSET=0xC0000
> +CONFIG_ENV_SECT_SIZE=0x10000
> +CONFIG_IDENT_STRING="\nABB SUSE2"
> +CONFIG_SYS_EXTRA_OPTIONS="KM_SUSE2"
> +CONFIG_MISC_INIT_R=y
> +CONFIG_VERSION_VARIABLE=y
> +# CONFIG_DISPLAY_BOARDINFO is not set
> +CONFIG_HUSH_PARSER=y
> +CONFIG_AUTOBOOT_KEYED=y
> +CONFIG_AUTOBOOT_PROMPT="Hit <SPACE> key to stop autoboot in %2ds\n"
> +CONFIG_AUTOBOOT_STOP_STR=" "
> +CONFIG_CMD_ASKENV=y
> +CONFIG_CMD_GREPENV=y
> +CONFIG_CMD_EEPROM=y
> +# CONFIG_CMD_FLASH is not set
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_NAND=y
> +CONFIG_CMD_DHCP=y
> +CONFIG_CMD_MII=y
> +CONFIG_CMD_PING=y
> +CONFIG_CMD_JFFS2=y
> +CONFIG_CMD_MTDPARTS=y
> +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand"
> +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:-(ubi0);"
> +CONFIG_CMD_UBI=y
> +# CONFIG_CMD_UBIFS is not set
> +CONFIG_OF_CONTROL=y
> +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-km_kirkwood"
> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> +CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
> +CONFIG_ENV_OFFSET_REDUND=0xD0000
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> +CONFIG_BOOTCOUNT_LIMIT=y
> +CONFIG_BOOTCOUNT_RAM=y
> +CONFIG_BOOTCOUNT_BOOTLIMIT=3
> +# CONFIG_MMC is not set
> +CONFIG_MTD=y
> +CONFIG_MTD_RAW_NAND=y
> +CONFIG_SF_DEFAULT_SPEED=8100000
> +CONFIG_SPI_FLASH_STMICRO=y
> +CONFIG_SPI_FLASH_MACRONIX=y
> +CONFIG_MVGBE=y
> +CONFIG_MII=y
> +CONFIG_SYS_NS16550=y
> +CONFIG_SPI=y
> +CONFIG_KIRKWOOD_SPI=y
> +CONFIG_BCH=y
> diff --git a/include/configs/km_kirkwood.h b/include/configs/km_kirkwood.h
> index 064097a631..ea24964f54 100644
> --- a/include/configs/km_kirkwood.h
> +++ b/include/configs/km_kirkwood.h
> @@ -65,6 +65,14 @@
>   #define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
>   #define CONFIG_KM_UBI_PART_BOOT_OPTS		",2048"
>   #define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
> +
> +/* KM_SUSE2 */
> +#elif defined(CONFIG_KM_SUSE2)
> +#define CONFIG_HOSTNAME			"kmsuse2"
> +#undef CONFIG_SYS_KWD_CONFIG
> +#define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
> +#define CONFIG_KM_UBI_PART_BOOT_OPTS		",2048"
> +#define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
>   #else
>   #error ("Board unsupported")
>   #endif
> diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
> index cd154738a4..4524350403 100644
> --- a/scripts/config_whitelist.txt
> +++ b/scripts/config_whitelist.txt
> @@ -943,6 +943,7 @@ CONFIG_KM_NEW_ENV
>   CONFIG_KM_NUSA
>   CONFIG_KM_ROOTFSSIZE
>   CONFIG_KM_SUGP1
> +CONFIG_KM_SUSE2
>   CONFIG_KM_SUV31
>   CONFIG_KM_UBI_LINUX_MTD
>   CONFIG_KM_UBI_PARTITION_NAME_APP
> 

I understand that the board is very similar to SUV31. Can't you add some
runtime detection of this board and use one U-Boot binary on both boards
instead?

Otherwise:

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan
Holger Brunck Jan. 14, 2020, 8:44 a.m. UTC | #2
Hi Stefan,

> On 13.01.20 15:34, Holger Brunck wrote:
> > This board is similar to SUV31, but the FPGA is reset concept is quite
> > different.
> >
> > Signed-off-by: Holger Brunck <holger.brunck@ch.abb.com>
> > CC: Valentin Longchamp <valentin.longchamp@ch.abb.com>
> > CC: Stefan Roese <sr@denx.de>
> > ---
> >   board/keymile/km_arm/Kconfig       | 12 +++++++
> >   board/keymile/km_arm/MAINTAINERS   |  1 +
> >   board/keymile/km_arm/fpga_config.c | 15 ++++++--
> >   configs/kmsuse2_defconfig          | 58 ++++++++++++++++++++++++++++++
> >   include/configs/km_kirkwood.h      |  8 +++++
> >   scripts/config_whitelist.txt       |  1 +
> >   6 files changed, 93 insertions(+), 2 deletions(-)
> >   create mode 100644 configs/kmsuse2_defconfig
> >
> > diff --git a/board/keymile/km_arm/Kconfig
> > b/board/keymile/km_arm/Kconfig index be6b162815..4b21db8573 100644
> > --- a/board/keymile/km_arm/Kconfig
> > +++ b/board/keymile/km_arm/Kconfig
> > @@ -7,6 +7,18 @@ config KM_FPGA_CONFIG
> >       help
> >         Include capability to change FPGA configuration.
> >
> > +config KM_FPGA_FORCE_CONFIG
> > +     bool "FPGA reconfiguration"
> > +     default n
> > +     help
> > +       If yes we force to reconfigure the FPGA always
> > +
> > +config KM_FPGA_NO_RESET
> > +     bool "FPGA skip reset"
> > +     default n
> > +     help
> > +       If yes we skip triggering a reset of the FPGA
> > +
> >   config KM_ENV_IS_IN_SPI_NOR
> >       bool "Environment in SPI NOR"
> >       default n
> > diff --git a/board/keymile/km_arm/MAINTAINERS
> > b/board/keymile/km_arm/MAINTAINERS
> > index 17926017c3..538f90f48b 100644
> > --- a/board/keymile/km_arm/MAINTAINERS
> > +++ b/board/keymile/km_arm/MAINTAINERS
> > @@ -9,4 +9,5 @@ F:    configs/km_kirkwood_pci_defconfig
> >   F:  configs/kmcoge5un_defconfig
> >   F:  configs/kmnusa_defconfig
> >   F:  configs/kmsugp1_defconfig
> > +F:   configs/kmsuse2_defconfig
> >   F:  configs/kmsuv31_defconfig
> > diff --git a/board/keymile/km_arm/fpga_config.c
> > b/board/keymile/km_arm/fpga_config.c
> > index 051e167fd5..99bea009fa 100644
> > --- a/board/keymile/km_arm/fpga_config.c
> > +++ b/board/keymile/km_arm/fpga_config.c
> > @@ -82,6 +82,7 @@ static int boco_set_bits(u8 reg, u8 flags)
> >   #define FPGA_INIT_B 0x10
> >   #define FPGA_DONE   0x20
> >
> > +#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
> >   static int fpga_done(void)
> >   {
> >       int ret = 0;
> > @@ -100,13 +101,16 @@ static int fpga_done(void)
> >
> >       return regval & FPGA_DONE ? 1 : 0;
> >   }
> > +#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
> >
> > -int skip;
> > +static int skip;
> >
> >   int trigger_fpga_config(void)
> >   {
> >       int ret = 0;
> >
> > +     skip = 0;
> > +#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
> >       /* if the FPGA is already configured, we do not want to
> >        * reconfigure it */
> >       skip = 0;
> > @@ -115,6 +119,7 @@ int trigger_fpga_config(void)
> >               skip = 1;
> >               return 0;
> >       }
> > +#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
> >
> >       if (check_boco2()) {
> >               /* we have a BOCO2, this has to be triggered here */ @@
> > -188,7 +193,13 @@ int wait_for_fpga_config(void)
> >       return 0;
> >   }
> >
> > -#if defined(KM_PCIE_RESET_MPP7)
> > +#if defined(CONFIG_KM_FPGA_NO_RESET)
> > +int fpga_reset(void)
> > +{
> > +     /* no dedicated reset pin for FPGA */
> > +     return 0;
> > +}
> > +#elif defined(KM_PCIE_RESET_MPP7)
> >
> >   #define KM_PEX_RST_GPIO_PIN 7
> >   int fpga_reset(void)
> > diff --git a/configs/kmsuse2_defconfig b/configs/kmsuse2_defconfig new
> > file mode 100644 index 0000000000..e6726ebd0c
> > --- /dev/null
> > +++ b/configs/kmsuse2_defconfig
> > @@ -0,0 +1,58 @@
> > +CONFIG_ARM=y
> > +CONFIG_SYS_DCACHE_OFF=y
> > +CONFIG_ARCH_CPU_INIT=y
> > +CONFIG_KIRKWOOD=y
> > +CONFIG_SYS_TEXT_BASE=0x07d00000
> > +CONFIG_TARGET_KM_KIRKWOOD=y
> > +CONFIG_KM_FPGA_CONFIG=y
> > +CONFIG_KM_FPGA_FORCE_CONFIG=y
> > +CONFIG_KM_FPGA_NO_RESET=y
> > +CONFIG_KM_ENV_IS_IN_SPI_NOR=y
> > +CONFIG_ENV_SIZE=0x2000
> > +CONFIG_ENV_OFFSET=0xC0000
> > +CONFIG_ENV_SECT_SIZE=0x10000
> > +CONFIG_IDENT_STRING="\nABB SUSE2"
> > +CONFIG_SYS_EXTRA_OPTIONS="KM_SUSE2"
> > +CONFIG_MISC_INIT_R=y
> > +CONFIG_VERSION_VARIABLE=y
> > +# CONFIG_DISPLAY_BOARDINFO is not set CONFIG_HUSH_PARSER=y
> > +CONFIG_AUTOBOOT_KEYED=y CONFIG_AUTOBOOT_PROMPT="Hit
> <SPACE> key to
> > +stop autoboot in %2ds\n"
> > +CONFIG_AUTOBOOT_STOP_STR=" "
> > +CONFIG_CMD_ASKENV=y
> > +CONFIG_CMD_GREPENV=y
> > +CONFIG_CMD_EEPROM=y
> > +# CONFIG_CMD_FLASH is not set
> > +CONFIG_CMD_I2C=y
> > +CONFIG_CMD_NAND=y
> > +CONFIG_CMD_DHCP=y
> > +CONFIG_CMD_MII=y
> > +CONFIG_CMD_PING=y
> > +CONFIG_CMD_JFFS2=y
> > +CONFIG_CMD_MTDPARTS=y
> > +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand"
> > +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:-(ubi0);"
> > +CONFIG_CMD_UBI=y
> > +# CONFIG_CMD_UBIFS is not set
> > +CONFIG_OF_CONTROL=y
> > +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-km_kirkwood"
> > +CONFIG_ENV_IS_IN_SPI_FLASH=y
> > +CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
> > +CONFIG_ENV_OFFSET_REDUND=0xD0000
> > +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> > +CONFIG_BOOTCOUNT_LIMIT=y
> > +CONFIG_BOOTCOUNT_RAM=y
> > +CONFIG_BOOTCOUNT_BOOTLIMIT=3
> > +# CONFIG_MMC is not set
> > +CONFIG_MTD=y
> > +CONFIG_MTD_RAW_NAND=y
> > +CONFIG_SF_DEFAULT_SPEED=8100000
> > +CONFIG_SPI_FLASH_STMICRO=y
> > +CONFIG_SPI_FLASH_MACRONIX=y
> > +CONFIG_MVGBE=y
> > +CONFIG_MII=y
> > +CONFIG_SYS_NS16550=y
> > +CONFIG_SPI=y
> > +CONFIG_KIRKWOOD_SPI=y
> > +CONFIG_BCH=y
> > diff --git a/include/configs/km_kirkwood.h
> > b/include/configs/km_kirkwood.h index 064097a631..ea24964f54 100644
> > --- a/include/configs/km_kirkwood.h
> > +++ b/include/configs/km_kirkwood.h
> > @@ -65,6 +65,14 @@
> >   #define CONFIG_SYS_KWD_CONFIG
> $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
> >   #define CONFIG_KM_UBI_PART_BOOT_OPTS                ",2048"
> >   #define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
> > +
> > +/* KM_SUSE2 */
> > +#elif defined(CONFIG_KM_SUSE2)
> > +#define CONFIG_HOSTNAME                      "kmsuse2"
> > +#undef CONFIG_SYS_KWD_CONFIG
> > +#define CONFIG_SYS_KWD_CONFIG
> $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
> > +#define CONFIG_KM_UBI_PART_BOOT_OPTS         ",2048"
> > +#define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
> >   #else
> >   #error ("Board unsupported")
> >   #endif
> > diff --git a/scripts/config_whitelist.txt
> > b/scripts/config_whitelist.txt index cd154738a4..4524350403 100644
> > --- a/scripts/config_whitelist.txt
> > +++ b/scripts/config_whitelist.txt
> > @@ -943,6 +943,7 @@ CONFIG_KM_NEW_ENV
> >   CONFIG_KM_NUSA
> >   CONFIG_KM_ROOTFSSIZE
> >   CONFIG_KM_SUGP1
> > +CONFIG_KM_SUSE2
> >   CONFIG_KM_SUV31
> >   CONFIG_KM_UBI_LINUX_MTD
> >   CONFIG_KM_UBI_PARTITION_NAME_APP
> >
> 
> I understand that the board is very similar to SUV31. Can't you add some
> runtime detection of this board and use one U-Boot binary on both boards
> instead?
> 

yes would be better if we would keep SUV31. But in the 3/3 of this series I remove SUV31 as this board is unsupported. I could squash these two if you prefer this, but I thought in this way it's more clear.

Best regards
Holger
Stefan Roese Jan. 14, 2020, 8:49 a.m. UTC | #3
Hi Holger,

On 14.01.20 09:44, Holger Brunck wrote:

<snip>

>> I understand that the board is very similar to SUV31. Can't you add some
>> runtime detection of this board and use one U-Boot binary on both boards
>> instead?
>>
> 
> yes would be better if we would keep SUV31. But in the 3/3 of this series I remove SUV31 as this board is unsupported. I could squash these two if you prefer this, but I thought in this way it's more clear.

That's okay. Just keep it as is.

Thanks,
Stefan
Tom Rini Jan. 23, 2020, 10:01 p.m. UTC | #4
On Mon, Jan 13, 2020 at 03:34:01PM +0100, Holger Brunck wrote:

> This board is similar to SUV31, but the FPGA is reset concept is quite
> different.
> 
> Signed-off-by: Holger Brunck <holger.brunck@ch.abb.com>
> CC: Valentin Longchamp <valentin.longchamp@ch.abb.com>
> CC: Stefan Roese <sr@denx.de>
> Reviewed-by: Stefan Roese <sr@denx.de>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/board/keymile/km_arm/Kconfig b/board/keymile/km_arm/Kconfig
index be6b162815..4b21db8573 100644
--- a/board/keymile/km_arm/Kconfig
+++ b/board/keymile/km_arm/Kconfig
@@ -7,6 +7,18 @@  config KM_FPGA_CONFIG
 	help
 	  Include capability to change FPGA configuration.
 
+config KM_FPGA_FORCE_CONFIG
+	bool "FPGA reconfiguration"
+	default n
+	help
+	  If yes we force to reconfigure the FPGA always
+
+config KM_FPGA_NO_RESET
+	bool "FPGA skip reset"
+	default n
+	help
+	  If yes we skip triggering a reset of the FPGA
+
 config KM_ENV_IS_IN_SPI_NOR
 	bool "Environment in SPI NOR"
 	default n
diff --git a/board/keymile/km_arm/MAINTAINERS b/board/keymile/km_arm/MAINTAINERS
index 17926017c3..538f90f48b 100644
--- a/board/keymile/km_arm/MAINTAINERS
+++ b/board/keymile/km_arm/MAINTAINERS
@@ -9,4 +9,5 @@  F:	configs/km_kirkwood_pci_defconfig
 F:	configs/kmcoge5un_defconfig
 F:	configs/kmnusa_defconfig
 F:	configs/kmsugp1_defconfig
+F:	configs/kmsuse2_defconfig
 F:	configs/kmsuv31_defconfig
diff --git a/board/keymile/km_arm/fpga_config.c b/board/keymile/km_arm/fpga_config.c
index 051e167fd5..99bea009fa 100644
--- a/board/keymile/km_arm/fpga_config.c
+++ b/board/keymile/km_arm/fpga_config.c
@@ -82,6 +82,7 @@  static int boco_set_bits(u8 reg, u8 flags)
 #define FPGA_INIT_B	0x10
 #define FPGA_DONE	0x20
 
+#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
 static int fpga_done(void)
 {
 	int ret = 0;
@@ -100,13 +101,16 @@  static int fpga_done(void)
 
 	return regval & FPGA_DONE ? 1 : 0;
 }
+#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
 
-int skip;
+static int skip;
 
 int trigger_fpga_config(void)
 {
 	int ret = 0;
 
+	skip = 0;
+#ifndef CONFIG_KM_FPGA_FORCE_CONFIG
 	/* if the FPGA is already configured, we do not want to
 	 * reconfigure it */
 	skip = 0;
@@ -115,6 +119,7 @@  int trigger_fpga_config(void)
 		skip = 1;
 		return 0;
 	}
+#endif /* CONFIG_KM_FPGA_FORCE_CONFIG */
 
 	if (check_boco2()) {
 		/* we have a BOCO2, this has to be triggered here */
@@ -188,7 +193,13 @@  int wait_for_fpga_config(void)
 	return 0;
 }
 
-#if defined(KM_PCIE_RESET_MPP7)
+#if defined(CONFIG_KM_FPGA_NO_RESET)
+int fpga_reset(void)
+{
+	/* no dedicated reset pin for FPGA */
+	return 0;
+}
+#elif defined(KM_PCIE_RESET_MPP7)
 
 #define KM_PEX_RST_GPIO_PIN	7
 int fpga_reset(void)
diff --git a/configs/kmsuse2_defconfig b/configs/kmsuse2_defconfig
new file mode 100644
index 0000000000..e6726ebd0c
--- /dev/null
+++ b/configs/kmsuse2_defconfig
@@ -0,0 +1,58 @@ 
+CONFIG_ARM=y
+CONFIG_SYS_DCACHE_OFF=y
+CONFIG_ARCH_CPU_INIT=y
+CONFIG_KIRKWOOD=y
+CONFIG_SYS_TEXT_BASE=0x07d00000
+CONFIG_TARGET_KM_KIRKWOOD=y
+CONFIG_KM_FPGA_CONFIG=y
+CONFIG_KM_FPGA_FORCE_CONFIG=y
+CONFIG_KM_FPGA_NO_RESET=y
+CONFIG_KM_ENV_IS_IN_SPI_NOR=y
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xC0000
+CONFIG_ENV_SECT_SIZE=0x10000
+CONFIG_IDENT_STRING="\nABB SUSE2"
+CONFIG_SYS_EXTRA_OPTIONS="KM_SUSE2"
+CONFIG_MISC_INIT_R=y
+CONFIG_VERSION_VARIABLE=y
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_HUSH_PARSER=y
+CONFIG_AUTOBOOT_KEYED=y
+CONFIG_AUTOBOOT_PROMPT="Hit <SPACE> key to stop autoboot in %2ds\n"
+CONFIG_AUTOBOOT_STOP_STR=" "
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_EEPROM=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_I2C=y
+CONFIG_CMD_NAND=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_JFFS2=y
+CONFIG_CMD_MTDPARTS=y
+CONFIG_MTDIDS_DEFAULT="nand0=orion_nand"
+CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:-(ubi0);"
+CONFIG_CMD_UBI=y
+# CONFIG_CMD_UBIFS is not set
+CONFIG_OF_CONTROL=y
+CONFIG_DEFAULT_DEVICE_TREE="kirkwood-km_kirkwood"
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
+CONFIG_ENV_OFFSET_REDUND=0xD0000
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_BOOTCOUNT_LIMIT=y
+CONFIG_BOOTCOUNT_RAM=y
+CONFIG_BOOTCOUNT_BOOTLIMIT=3
+# CONFIG_MMC is not set
+CONFIG_MTD=y
+CONFIG_MTD_RAW_NAND=y
+CONFIG_SF_DEFAULT_SPEED=8100000
+CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_MVGBE=y
+CONFIG_MII=y
+CONFIG_SYS_NS16550=y
+CONFIG_SPI=y
+CONFIG_KIRKWOOD_SPI=y
+CONFIG_BCH=y
diff --git a/include/configs/km_kirkwood.h b/include/configs/km_kirkwood.h
index 064097a631..ea24964f54 100644
--- a/include/configs/km_kirkwood.h
+++ b/include/configs/km_kirkwood.h
@@ -65,6 +65,14 @@ 
 #define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
 #define CONFIG_KM_UBI_PART_BOOT_OPTS		",2048"
 #define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
+
+/* KM_SUSE2 */
+#elif defined(CONFIG_KM_SUSE2)
+#define CONFIG_HOSTNAME			"kmsuse2"
+#undef CONFIG_SYS_KWD_CONFIG
+#define CONFIG_SYS_KWD_CONFIG $(CONFIG_BOARDDIR)/kwbimage_128M16_1.cfg
+#define CONFIG_KM_UBI_PART_BOOT_OPTS		",2048"
+#define CONFIG_SYS_NAND_NO_SUBPAGE_WRITE
 #else
 #error ("Board unsupported")
 #endif
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index cd154738a4..4524350403 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -943,6 +943,7 @@  CONFIG_KM_NEW_ENV
 CONFIG_KM_NUSA
 CONFIG_KM_ROOTFSSIZE
 CONFIG_KM_SUGP1
+CONFIG_KM_SUSE2
 CONFIG_KM_SUV31
 CONFIG_KM_UBI_LINUX_MTD
 CONFIG_KM_UBI_PARTITION_NAME_APP