[U-Boot] [PATCH 2/7] MSCC: Add support for Jaguar2 SOC family

Daniel Schwierzeck daniel.schwierzeck at gmail.com
Sun Jan 6 18:41:00 UTC 2019



Am 06.01.19 um 18:23 schrieb Horatiu Vultur:
> As the Ocelot and Luton SoCs, this family of SoCs are found
> in Microsemi Switches solution.
> 
> Signed-off-by: Horatiu Vultur <horatiu.vultur at microchip.com>
> ---
>  arch/mips/mach-mscc/Kconfig                        |   9 +
>  arch/mips/mach-mscc/cpu.c                          |   7 +
>  arch/mips/mach-mscc/dram.c                         |   2 +-
>  arch/mips/mach-mscc/include/mach/common.h          |   5 +
>  arch/mips/mach-mscc/include/mach/ddr.h             |  40 ++-
>  arch/mips/mach-mscc/include/mach/jr2/jr2.h         |  24 ++
>  .../mach-mscc/include/mach/jr2/jr2_devcpu_gcb.h    |  20 ++
>  .../include/mach/jr2/jr2_devcpu_gcb_miim_regs.h    |  25 ++
>  .../mips/mach-mscc/include/mach/jr2/jr2_icpu_cfg.h | 321 +++++++++++++++++++++
>  arch/mips/mach-mscc/reset.c                        |  17 ++
>  10 files changed, 462 insertions(+), 8 deletions(-)
>  create mode 100644 arch/mips/mach-mscc/include/mach/jr2/jr2.h
>  create mode 100644 arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb.h
>  create mode 100644 arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb_miim_regs.h
>  create mode 100644 arch/mips/mach-mscc/include/mach/jr2/jr2_icpu_cfg.h
> 
> diff --git a/arch/mips/mach-mscc/Kconfig b/arch/mips/mach-mscc/Kconfig
> index 37ef432..fc6aa03 100644
> --- a/arch/mips/mach-mscc/Kconfig
> +++ b/arch/mips/mach-mscc/Kconfig
> @@ -33,6 +33,13 @@ config SOC_LUTON
>  	help
>  	  This supports MSCC Luton family of SOCs.
>  
> +config SOC_JR2
> +	bool "Jaguar2 SOC Family"
> +	select SOC_VCOREIII
> +	select DESIGNWARE_SPI
> +	help
> +	  This supports MSCC Jaguar2 family of SOCs.
> +
>  endchoice
>  
>  config SYS_CONFIG_NAME
> @@ -65,4 +72,6 @@ source "board/mscc/ocelot/Kconfig"
>  
>  source "board/mscc/luton/Kconfig"
>  
> +source "board/mscc/jr2/Kconfig"
> +
>  endmenu
> diff --git a/arch/mips/mach-mscc/cpu.c b/arch/mips/mach-mscc/cpu.c
> index 5be8ff6..4729b7a 100644
> --- a/arch/mips/mach-mscc/cpu.c
> +++ b/arch/mips/mach-mscc/cpu.c
> @@ -87,8 +87,15 @@ int mach_cpu_init(void)
>  	       ICPU_SPI_MST_CFG_CS_DESELECT_TIME(0x19) +
>  	       ICPU_SPI_MST_CFG_CLK_DIV(9), BASE_CFG + ICPU_SPI_MST_CFG);
>  #else
> +#ifdef CONFIG_SOC_OCELOT
>  	writel(ICPU_SPI_MST_CFG_CS_DESELECT_TIME(0x19) +
>  	       ICPU_SPI_MST_CFG_CLK_DIV(9), BASE_CFG + ICPU_SPI_MST_CFG);
> +#endif
> +#ifdef CONFIG_SOC_JR2
> +	writel(ICPU_SPI_MST_CFG_FAST_READ_ENA +
> +	       ICPU_SPI_MST_CFG_CS_DESELECT_TIME(0x19) +
> +	       ICPU_SPI_MST_CFG_CLK_DIV(14), BASE_CFG + ICPU_SPI_MST_CFG);
> +#endif
>  	/*
>  	 * Legacy and mainline linux kernel expect that the
>  	 * interruption map was set as it was done by redboot.
> diff --git a/arch/mips/mach-mscc/dram.c b/arch/mips/mach-mscc/dram.c
> index 309007c..8002e07 100644
> --- a/arch/mips/mach-mscc/dram.c
> +++ b/arch/mips/mach-mscc/dram.c
> @@ -19,7 +19,7 @@ static inline int vcoreiii_train_bytelane(void)
>  
>  	ret = hal_vcoreiii_train_bytelane(0);
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  	if (ret)
>  		return ret;
>  	ret = hal_vcoreiii_train_bytelane(1);
> diff --git a/arch/mips/mach-mscc/include/mach/common.h b/arch/mips/mach-mscc/include/mach/common.h
> index d18ae78..9cb2fbb 100644
> --- a/arch/mips/mach-mscc/include/mach/common.h
> +++ b/arch/mips/mach-mscc/include/mach/common.h
> @@ -16,6 +16,11 @@
>  #include <mach/luton/luton_devcpu_gcb.h>
>  #include <mach/luton/luton_devcpu_gcb_miim_regs.h>
>  #include <mach/luton/luton_icpu_cfg.h>
> +#elif defined(CONFIG_SOC_JR2)
> +#include <mach/jr2/jr2.h>
> +#include <mach/jr2/jr2_devcpu_gcb.h>
> +#include <mach/jr2/jr2_devcpu_gcb_miim_regs.h>
> +#include <mach/jr2/jr2_icpu_cfg.h>
>  #else
>  #error Unsupported platform
>  #endif
> diff --git a/arch/mips/mach-mscc/include/mach/ddr.h b/arch/mips/mach-mscc/include/mach/ddr.h
> index f445e63..29a5363 100644
> --- a/arch/mips/mach-mscc/include/mach/ddr.h
> +++ b/arch/mips/mach-mscc/include/mach/ddr.h
> @@ -161,7 +161,7 @@
>  
>  #endif
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  #define MIPS_VCOREIII_MEMORY_16BIT 1
>  #endif
>  
> @@ -239,7 +239,7 @@
>  	ICPU_MEMCTRL_CFG_MSB_ROW_ADDR(VC3_MPAR_row_addr_cnt - 1) |	\
>  	ICPU_MEMCTRL_CFG_MSB_COL_ADDR(VC3_MPAR_col_addr_cnt - 1)
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  #define MSCC_MEMPARM_PERIOD					\
>  	ICPU_MEMCTRL_REF_PERIOD_MAX_PEND_REF(8) |		\
>  	ICPU_MEMCTRL_REF_PERIOD_REF_PERIOD(VC3_MPAR_tREFI)
> @@ -378,7 +378,7 @@ static inline void memphy_soft_reset(void)
>  	PAUSE();
>  }
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  static u8 training_data[] = { 0xfe, 0x11, 0x33, 0x55, 0x77, 0x99, 0xbb, 0xdd };
>  
>  static inline void sleep_100ns(u32 val)
> @@ -398,6 +398,7 @@ static inline void sleep_100ns(u32 val)
>  		;
>  }
>  
> +#if defined(CONFIG_SOC_OCELOT)
>  static inline void hal_vcoreiii_ddr_reset_assert(void)
>  {
>  	/* DDR has reset pin on GPIO 19 toggle Low-High to release */
> @@ -448,6 +449,28 @@ static inline void hal_vcoreiii_ddr_failed(void)
>  
>  	panic("DDR init failed\n");
>  }
> +#else				/* JR2 */
> +static inline void hal_vcoreiii_ddr_reset_assert(void)
> +{
> +	/* Ensure the memory controller physical iface is forced reset */
> +	writel(readl(BASE_CFG + ICPU_MEMPHY_CFG) |
> +	       ICPU_MEMPHY_CFG_PHY_RST, BASE_CFG + ICPU_MEMPHY_CFG);
> +
> +	/* Ensure the memory controller is forced reset */
> +	writel(readl(BASE_CFG + ICPU_RESET) |
> +	       ICPU_RESET_MEM_RST_FORCE, BASE_CFG + ICPU_RESET);
> +}
> +
> +static inline void hal_vcoreiii_ddr_reset_release(void) {}

do you use that anywhere or in any upcoming patches? Otherwise it's dead
code and should be removed

> +
> +static inline void hal_vcoreiii_ddr_failed(void)
> +{
> +	writel(0, BASE_CFG + ICPU_RESET);
> +	writel(PERF_SOFT_RST_SOFT_CHIP_RST, BASE_CFG + PERF_SOFT_RST);
> +
> +	panic("DDR init failed\n");
> +}
> +#endif
>  
>  /*
>   * DDR memory sanity checking done, possibly enable ECC.
> @@ -738,7 +761,7 @@ static inline void hal_vcoreiii_init_memctl(void)
>  	/* Wait for ZCAL to clear */
>  	while (readl(BASE_CFG + ICPU_MEMPHY_ZCAL) & ICPU_MEMPHY_ZCAL_ZCAL_ENA)
>  		;
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  	/* Check no ZCAL_ERR */
>  	if (readl(BASE_CFG + ICPU_MEMPHY_ZCAL_STAT)
>  	    & ICPU_MEMPHY_ZCAL_STAT_ZCAL_ERR)
> @@ -752,7 +775,7 @@ static inline void hal_vcoreiii_init_memctl(void)
>  	writel(MSCC_MEMPARM_MEMCFG, BASE_CFG + ICPU_MEMCTRL_CFG);
>  	writel(MSCC_MEMPARM_PERIOD, BASE_CFG + ICPU_MEMCTRL_REF_PERIOD);
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  	writel(MSCC_MEMPARM_TIMING0, BASE_CFG + ICPU_MEMCTRL_TIMING0);
>  #else /* Luton */
>  	clrbits_le32(BASE_CFG + ICPU_MEMCTRL_TIMING0, ((1 << 20) - 1));
> @@ -767,7 +790,7 @@ static inline void hal_vcoreiii_init_memctl(void)
>  	writel(MSCC_MEMPARM_MR2, BASE_CFG + ICPU_MEMCTRL_MR2_VAL);
>  	writel(MSCC_MEMPARM_MR3, BASE_CFG + ICPU_MEMCTRL_MR3_VAL);
>  
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT)
>  	/* Termination setup - enable ODT */
>  	writel(ICPU_MEMCTRL_TERMRES_CTRL_LOCAL_ODT_RD_ENA |
>  	       /* Assert ODT0 for any write */
> @@ -778,6 +801,9 @@ static inline void hal_vcoreiii_init_memctl(void)
>  	hal_vcoreiii_ddr_reset_release();
>  
>  	writel(readl(BASE_CFG + ICPU_GPR(7)) + 1, BASE_CFG + ICPU_GPR(7));
> +#elif defined(CONFIG_SOC_JR2)
> +	writel(ICPU_MEMCTRL_TERMRES_CTRL_ODT_WR_ENA(3),
> +	       BASE_CFG + ICPU_MEMCTRL_TERMRES_CTRL);
>  #else				/* Luton */
>  	/* Termination setup - disable ODT */
>  	writel(0, BASE_CFG + ICPU_MEMCTRL_TERMRES_CTRL);
> @@ -796,7 +822,7 @@ static inline void hal_vcoreiii_wait_memctl(void)
>  
>  	/* Settle...? */
>  	sleep_100ns(10000);
> -#ifdef CONFIG_SOC_OCELOT
> +#if defined(CONFIG_SOC_OCELOT) || defined(CONFIG_SOC_JR2)
>  	/* Establish data contents in DDR RAM for training */
>  
>  	__raw_writel(0xcacafefe, ((void __iomem *)MSCC_DDR_TO));
> diff --git a/arch/mips/mach-mscc/include/mach/jr2/jr2.h b/arch/mips/mach-mscc/include/mach/jr2/jr2.h
> new file mode 100644
> index 0000000..67244f6
> --- /dev/null
> +++ b/arch/mips/mach-mscc/include/mach/jr2/jr2.h
> @@ -0,0 +1,24 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Microsemi Jaguar2 Switch driver
> + *
> + * Copyright (c) 2018 Microsemi Corporation
> + */
> +
> +#ifndef _MSCC_JR2_H_
> +#define _MSCC_JR2_H_
> +
> +#include <linux/bitops.h>
> +#include <dm.h>
> +
> +/*
> + * Target offset base(s)
> + */
> +#define MSCC_IO_ORIGIN1_OFFSET 0x70000000
> +#define MSCC_IO_ORIGIN1_SIZE   0x00200000
> +#define MSCC_IO_ORIGIN2_OFFSET 0x71000000
> +#define MSCC_IO_ORIGIN2_SIZE   0x01000000
> +#define BASE_CFG        ((void __iomem *)0x70000000)
> +#define BASE_DEVCPU_GCB ((void __iomem *)0x71010000)
> +
> +#endif
> diff --git a/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb.h b/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb.h
> new file mode 100644
> index 0000000..4a1228d
> --- /dev/null
> +++ b/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb.h
> @@ -0,0 +1,20 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2018 Microsemi Corporation
> + */
> +
> +#ifndef _MSCC_JR2_DEVCPU_GCB_H_
> +#define _MSCC_JR2_DEVCPU_GCB_H_
> +
> +#define PERF_GPR                                          0x4
> +
> +#define PERF_SOFT_RST                                     0x8
> +
> +#define PERF_SOFT_RST_SOFT_NON_CFG_RST                    BIT(2)
> +#define PERF_SOFT_RST_SOFT_SWC_RST                        BIT(1)
> +#define PERF_SOFT_RST_SOFT_CHIP_RST                       BIT(0)
> +
> +#define GPIO_GPIO_ALT(x)                                  (0x78 + 4 * (x))
> +#define GPIO_GPIO_ALT1(x)                                 (0x80 + 4 * (x))
> +
> +#endif
> diff --git a/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb_miim_regs.h b/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb_miim_regs.h
> new file mode 100644
> index 0000000..3c84edc
> --- /dev/null
> +++ b/arch/mips/mach-mscc/include/mach/jr2/jr2_devcpu_gcb_miim_regs.h
> @@ -0,0 +1,25 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2018 Microsemi Corporation
> + */
> +
> +#ifndef _MSCC_JR2_DEVCPU_GCB_MIIM_REGS_H_
> +#define _MSCC_JR2_DEVCPU_GCB_MIIM_REGS_H_
> +
> +#define MIIM_MII_STATUS(gi)  (0xc8 + (gi * 36))
> +#define MIIM_MII_CMD(gi)     (0xd0 + (gi * 36))
> +#define MIIM_MII_DATA(gi)    (0xd4 + (gi * 36))
> +
> +#define  MSCC_F_MII_STATUS_MIIM_STAT_BUSY(x)  ((x) ? BIT(3) : 0)
> +
> +#define MSCC_F_MII_CMD_MIIM_CMD_VLD(x)        ((x) ? BIT(31) : 0)
> +#define MSCC_F_MII_CMD_MIIM_CMD_PHYAD(x)      (GENMASK(29, 25) & ((x) << 25))
> +#define MSCC_F_MII_CMD_MIIM_CMD_REGAD(x)      (GENMASK(24, 20) & ((x) << 20))
> +#define MSCC_F_MII_CMD_MIIM_CMD_WRDATA(x)     (GENMASK(19, 4) & ((x) << 4))
> +#define MSCC_F_MII_CMD_MIIM_CMD_OPR_FIELD(x)  (GENMASK(2, 1) & ((x) << 1))
> +#define MSCC_F_MII_CMD_MIIM_CMD_SCAN(x)       ((x) ? BIT(0) : 0)
> +
> +#define MSCC_M_MII_DATA_MIIM_DATA_SUCCESS     GENMASK(17, 16)
> +#define MSCC_X_MII_DATA_MIIM_DATA_RDDATA(x)   (((x) >> 0) & GENMASK(15, 0))
> +
> +#endif
> diff --git a/arch/mips/mach-mscc/include/mach/jr2/jr2_icpu_cfg.h b/arch/mips/mach-mscc/include/mach/jr2/jr2_icpu_cfg.h
> new file mode 100644
> index 0000000..6e0bbe2
> --- /dev/null
> +++ b/arch/mips/mach-mscc/include/mach/jr2/jr2_icpu_cfg.h
> @@ -0,0 +1,321 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2018 Microsemi Corporation
> + */
> +
> +#ifndef _MSCC_JR2_ICPU_CFG_H_
> +#define _MSCC_JR2_ICPU_CFG_H_
> +
> +#define ICPU_GPR(x)                                       (0x4 * (x))
> +#define ICPU_GPR_RSZ                                      0x4
> +
> +#define ICPU_RESET                                        0x20
> +
> +#define ICPU_RESET_CORE_RST_CPU_ONLY                      BIT(3)
> +#define ICPU_RESET_CORE_RST_PROTECT                       BIT(2)
> +#define ICPU_RESET_CORE_RST_FORCE                         BIT(1)
> +#define ICPU_RESET_MEM_RST_FORCE                          BIT(0)
> +
> +#define ICPU_GENERAL_CTRL                                 0x24
> +
> +#define ICPU_GENERAL_CTRL_CPU_BUSIF_SLEEP_DIS             BIT(15)
> +#define ICPU_GENERAL_CTRL_CPU_BUSIF_WERR_ENA              BIT(14)
> +#define ICPU_GENERAL_CTRL_CPU_8051_IROM_ENA               BIT(13)
> +#define ICPU_GENERAL_CTRL_CPU_MIPS_DIS                    BIT(12)
> +#define ICPU_GENERAL_CTRL_IF_MIIM_SLV_ENA                 BIT(11)
> +#define ICPU_GENERAL_CTRL_IF_PI_SLV_DONEPOL               BIT(10)
> +#define ICPU_GENERAL_CTRL_IF_PI_MST_ENA                   BIT(9)
> +#define ICPU_GENERAL_CTRL_IF_PI_SLV_ENA                   BIT(8)
> +#define ICPU_GENERAL_CTRL_IF_SI_OWNER(x)                  (((x) << 6) & GENMASK(7, 6))
> +#define ICPU_GENERAL_CTRL_IF_SI_OWNER_M                   GENMASK(7, 6)
> +#define ICPU_GENERAL_CTRL_IF_SI_OWNER_X(x)                (((x) & GENMASK(7, 6)) >> 4)
> +#define ICPU_GENERAL_CTRL_IF_SI1_OWNER(x)                 (((x) << 4) & GENMASK(5, 4))
> +#define ICPU_GENERAL_CTRL_IF_SI1_OWNER_M                  GENMASK(5, 4)
> +#define ICPU_GENERAL_CTRL_IF_SI1_OWNER_X(x)               (((x) & GENMASK(5, 4)) >> 4)
> +#define ICPU_GENERAL_CTRL_SSI_MST_CONTENTION              BIT(3)
> +#define ICPU_GENERAL_CTRL_CPU_BE_ENA                      BIT(2)
> +#define ICPU_GENERAL_CTRL_CPU_DIS                         BIT(1)
> +#define ICPU_GENERAL_CTRL_BOOT_MODE_ENA                   BIT(0)
> +
> +#define ICPU_SPI_MST_CFG                                  0x3c
> +
> +#define ICPU_SPI_MST_CFG_A32B_ENA                         BIT(11)
> +#define ICPU_SPI_MST_CFG_FAST_READ_ENA                    BIT(10)
> +#define ICPU_SPI_MST_CFG_CS_DESELECT_TIME(x)              (((x) << 5) & GENMASK(9, 5))
> +#define ICPU_SPI_MST_CFG_CS_DESELECT_TIME_M               GENMASK(9, 5)
> +#define ICPU_SPI_MST_CFG_CS_DESELECT_TIME_X(x)            (((x) & GENMASK(9, 5)) >> 5)
> +#define ICPU_SPI_MST_CFG_CLK_DIV(x)                       ((x) & GENMASK(4, 0))
> +#define ICPU_SPI_MST_CFG_CLK_DIV_M                        GENMASK(4, 0)
> +
> +#define ICPU_SW_MODE                                      0x50
> +
> +#define ICPU_SW_MODE_SW_PIN_CTRL_MODE                     BIT(13)
> +#define ICPU_SW_MODE_SW_SPI_SCK                           BIT(12)
> +#define ICPU_SW_MODE_SW_SPI_SCK_OE                        BIT(11)
> +#define ICPU_SW_MODE_SW_SPI_SDO                           BIT(10)
> +#define ICPU_SW_MODE_SW_SPI_SDO_OE                        BIT(9)
> +#define ICPU_SW_MODE_SW_SPI_CS(x)                         (((x) << 5) & GENMASK(8, 5))
> +#define ICPU_SW_MODE_SW_SPI_CS_M                          GENMASK(8, 5)
> +#define ICPU_SW_MODE_SW_SPI_CS_X(x)                       (((x) & GENMASK(8, 5)) >> 5)
> +#define ICPU_SW_MODE_SW_SPI_CS_OE(x)                      (((x) << 1) & GENMASK(4, 1))
> +#define ICPU_SW_MODE_SW_SPI_CS_OE_M                       GENMASK(4, 1)
> +#define ICPU_SW_MODE_SW_SPI_CS_OE_X(x)                    (((x) & GENMASK(4, 1)) >> 1)
> +#define ICPU_SW_MODE_SW_SPI_SDI                           BIT(0)
> +
> +#define ICPU_INTR_ENA                                     0x88
> +
> +#define ICPU_DST_INTR_MAP(x)                              (0x98 + 0x4 * (x))
> +#define ICPU_DST_INTR_MAP_RSZ                             0x4
> +
> +#define ICPU_TIMER_TICK_DIV                               0x108
> +
> +#define ICPU_TIMER_VALUE(x)                               (0x10c + 0x4 * (x))
> +#define ICPU_TIMER_VALUE_RSZ                              0x4
> +
> +#define ICPU_TIMER_CTRL(x)                                (0x124 + 0x4 * (x))
> +#define ICPU_TIMER_CTRL_RSZ                               0x4
> +
> +#define ICPU_TIMER_CTRL_MAX_FREQ_ENA                      BIT(3)
> +#define ICPU_TIMER_CTRL_ONE_SHOT_ENA                      BIT(2)
> +#define ICPU_TIMER_CTRL_TIMER_ENA                         BIT(1)
> +#define ICPU_TIMER_CTRL_FORCE_RELOAD                      BIT(0)
> +
> +#define ICPU_MEMCTRL_CTRL                                 0x130
> +
> +#define ICPU_MEMCTRL_CTRL_PWR_DOWN                        BIT(3)
> +#define ICPU_MEMCTRL_CTRL_MDSET                           BIT(2)
> +#define ICPU_MEMCTRL_CTRL_STALL_REF_ENA                   BIT(1)
> +#define ICPU_MEMCTRL_CTRL_INITIALIZE                      BIT(0)
> +
> +#define ICPU_MEMCTRL_CFG                                  0x134
> +
> +#define ICPU_MEMCTRL_CFG_DDR_512MBYTE_PLUS                BIT(16)
> +#define ICPU_MEMCTRL_CFG_DDR_ECC_ERR_ENA                  BIT(15)
> +#define ICPU_MEMCTRL_CFG_DDR_ECC_COR_ENA                  BIT(14)
> +#define ICPU_MEMCTRL_CFG_DDR_ECC_ENA                      BIT(13)
> +#define ICPU_MEMCTRL_CFG_DDR_WIDTH                        BIT(12)
> +#define ICPU_MEMCTRL_CFG_DDR_MODE                         BIT(11)
> +#define ICPU_MEMCTRL_CFG_BURST_SIZE                       BIT(10)
> +#define ICPU_MEMCTRL_CFG_BURST_LEN                        BIT(9)
> +#define ICPU_MEMCTRL_CFG_BANK_CNT                         BIT(8)
> +#define ICPU_MEMCTRL_CFG_MSB_ROW_ADDR(x)                  (((x) << 4) & GENMASK(7, 4))
> +#define ICPU_MEMCTRL_CFG_MSB_ROW_ADDR_M                   GENMASK(7, 4)
> +#define ICPU_MEMCTRL_CFG_MSB_ROW_ADDR_X(x)                (((x) & GENMASK(7, 4)) >> 4)
> +#define ICPU_MEMCTRL_CFG_MSB_COL_ADDR(x)                  ((x) & GENMASK(3, 0))
> +#define ICPU_MEMCTRL_CFG_MSB_COL_ADDR_M                   GENMASK(3, 0)
> +
> +#define ICPU_MEMCTRL_STAT                                 0x138
> +
> +#define ICPU_MEMCTRL_STAT_RDATA_MASKED                    BIT(5)
> +#define ICPU_MEMCTRL_STAT_RDATA_DUMMY                     BIT(4)
> +#define ICPU_MEMCTRL_STAT_RDATA_ECC_ERR                   BIT(3)
> +#define ICPU_MEMCTRL_STAT_RDATA_ECC_COR                   BIT(2)
> +#define ICPU_MEMCTRL_STAT_PWR_DOWN_ACK                    BIT(1)
> +#define ICPU_MEMCTRL_STAT_INIT_DONE                       BIT(0)
> +
> +#define ICPU_MEMCTRL_REF_PERIOD                           0x13c
> +
> +#define ICPU_MEMCTRL_REF_PERIOD_MAX_PEND_REF(x)           (((x) << 16) & GENMASK(19, 16))
> +#define ICPU_MEMCTRL_REF_PERIOD_MAX_PEND_REF_M            GENMASK(19, 16)
> +#define ICPU_MEMCTRL_REF_PERIOD_MAX_PEND_REF_X(x)         (((x) & GENMASK(19, 16)) >> 16)
> +#define ICPU_MEMCTRL_REF_PERIOD_REF_PERIOD(x)             ((x) & GENMASK(15, 0))
> +#define ICPU_MEMCTRL_REF_PERIOD_REF_PERIOD_M              GENMASK(15, 0)
> +
> +#define ICPU_MEMCTRL_ZQCAL                                0x140
> +
> +#define ICPU_MEMCTRL_ZQCAL_ZQCAL_LONG                     BIT(1)
> +#define ICPU_MEMCTRL_ZQCAL_ZQCAL_SHORT                    BIT(0)
> +
> +#define ICPU_MEMCTRL_TIMING0                              0x144
> +
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_WR_DLY(x)              (((x) << 28) & GENMASK(31, 28))
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_WR_DLY_M               GENMASK(31, 28)
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_WR_DLY_X(x)            (((x) & GENMASK(31, 28)) >> 28)
> +#define ICPU_MEMCTRL_TIMING0_WR_CS_CHANGE_DLY(x)          (((x) << 24) & GENMASK(27, 24))
> +#define ICPU_MEMCTRL_TIMING0_WR_CS_CHANGE_DLY_M           GENMASK(27, 24)
> +#define ICPU_MEMCTRL_TIMING0_WR_CS_CHANGE_DLY_X(x)        (((x) & GENMASK(27, 24)) >> 24)
> +#define ICPU_MEMCTRL_TIMING0_RD_CS_CHANGE_DLY(x)          (((x) << 20) & GENMASK(23, 20))
> +#define ICPU_MEMCTRL_TIMING0_RD_CS_CHANGE_DLY_M           GENMASK(23, 20)
> +#define ICPU_MEMCTRL_TIMING0_RD_CS_CHANGE_DLY_X(x)        (((x) & GENMASK(23, 20)) >> 20)
> +#define ICPU_MEMCTRL_TIMING0_RAS_TO_PRECH_DLY(x)          (((x) << 16) & GENMASK(19, 16))
> +#define ICPU_MEMCTRL_TIMING0_RAS_TO_PRECH_DLY_M           GENMASK(19, 16)
> +#define ICPU_MEMCTRL_TIMING0_RAS_TO_PRECH_DLY_X(x)        (((x) & GENMASK(19, 16)) >> 16)
> +#define ICPU_MEMCTRL_TIMING0_WR_TO_PRECH_DLY(x)           (((x) << 12) & GENMASK(15, 12))
> +#define ICPU_MEMCTRL_TIMING0_WR_TO_PRECH_DLY_M            GENMASK(15, 12)
> +#define ICPU_MEMCTRL_TIMING0_WR_TO_PRECH_DLY_X(x)         (((x) & GENMASK(15, 12)) >> 12)
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_PRECH_DLY(x)           (((x) << 8) & GENMASK(11, 8))
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_PRECH_DLY_M            GENMASK(11, 8)
> +#define ICPU_MEMCTRL_TIMING0_RD_TO_PRECH_DLY_X(x)         (((x) & GENMASK(11, 8)) >> 8)
> +#define ICPU_MEMCTRL_TIMING0_WR_DATA_XFR_DLY(x)           (((x) << 4) & GENMASK(7, 4))
> +#define ICPU_MEMCTRL_TIMING0_WR_DATA_XFR_DLY_M            GENMASK(7, 4)
> +#define ICPU_MEMCTRL_TIMING0_WR_DATA_XFR_DLY_X(x)         (((x) & GENMASK(7, 4)) >> 4)
> +#define ICPU_MEMCTRL_TIMING0_RD_DATA_XFR_DLY(x)           ((x) & GENMASK(3, 0))
> +#define ICPU_MEMCTRL_TIMING0_RD_DATA_XFR_DLY_M            GENMASK(3, 0)
> +
> +#define ICPU_MEMCTRL_TIMING1                              0x148
> +
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_SAME_BANK_DLY(x)  (((x) << 24) & GENMASK(31, 24))
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_SAME_BANK_DLY_M   GENMASK(31, 24)
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_SAME_BANK_DLY_X(x) (((x) & GENMASK(31, 24)) >> 24)
> +#define ICPU_MEMCTRL_TIMING1_BANK8_FAW_DLY(x)             (((x) << 16) & GENMASK(23, 16))
> +#define ICPU_MEMCTRL_TIMING1_BANK8_FAW_DLY_M              GENMASK(23, 16)
> +#define ICPU_MEMCTRL_TIMING1_BANK8_FAW_DLY_X(x)           (((x) & GENMASK(23, 16)) >> 16)
> +#define ICPU_MEMCTRL_TIMING1_PRECH_TO_RAS_DLY(x)          (((x) << 12) & GENMASK(15, 12))
> +#define ICPU_MEMCTRL_TIMING1_PRECH_TO_RAS_DLY_M           GENMASK(15, 12)
> +#define ICPU_MEMCTRL_TIMING1_PRECH_TO_RAS_DLY_X(x)        (((x) & GENMASK(15, 12)) >> 12)
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_DLY(x)            (((x) << 8) & GENMASK(11, 8))
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_DLY_M             GENMASK(11, 8)
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_RAS_DLY_X(x)          (((x) & GENMASK(11, 8)) >> 8)
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_CAS_DLY(x)            (((x) << 4) & GENMASK(7, 4))
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_CAS_DLY_M             GENMASK(7, 4)
> +#define ICPU_MEMCTRL_TIMING1_RAS_TO_CAS_DLY_X(x)          (((x) & GENMASK(7, 4)) >> 4)
> +#define ICPU_MEMCTRL_TIMING1_WR_TO_RD_DLY(x)              ((x) & GENMASK(3, 0))
> +#define ICPU_MEMCTRL_TIMING1_WR_TO_RD_DLY_M               GENMASK(3, 0)
> +
> +#define ICPU_MEMCTRL_TIMING2                              0x14c
> +
> +#define ICPU_MEMCTRL_TIMING2_PRECH_ALL_DLY(x)             (((x) << 28) & GENMASK(31, 28))
> +#define ICPU_MEMCTRL_TIMING2_PRECH_ALL_DLY_M              GENMASK(31, 28)
> +#define ICPU_MEMCTRL_TIMING2_PRECH_ALL_DLY_X(x)           (((x) & GENMASK(31, 28)) >> 28)
> +#define ICPU_MEMCTRL_TIMING2_MDSET_DLY(x)                 (((x) << 24) & GENMASK(27, 24))
> +#define ICPU_MEMCTRL_TIMING2_MDSET_DLY_M                  GENMASK(27, 24)
> +#define ICPU_MEMCTRL_TIMING2_MDSET_DLY_X(x)               (((x) & GENMASK(27, 24)) >> 24)
> +#define ICPU_MEMCTRL_TIMING2_REF_DLY(x)                   (((x) << 16) & GENMASK(23, 16))
> +#define ICPU_MEMCTRL_TIMING2_REF_DLY_M                    GENMASK(23, 16)
> +#define ICPU_MEMCTRL_TIMING2_REF_DLY_X(x)                 (((x) & GENMASK(23, 16)) >> 16)
> +#define ICPU_MEMCTRL_TIMING2_INIT_DLY(x)                  ((x) & GENMASK(15, 0))
> +#define ICPU_MEMCTRL_TIMING2_INIT_DLY_M                   GENMASK(15, 0)
> +
> +#define ICPU_MEMCTRL_TIMING3                              0x150
> +
> +#define ICPU_MEMCTRL_TIMING3_RMW_DLY(x)                   (((x) << 16) & GENMASK(19, 16))
> +#define ICPU_MEMCTRL_TIMING3_RMW_DLY_M                    GENMASK(19, 16)
> +#define ICPU_MEMCTRL_TIMING3_RMW_DLY_X(x)                 (((x) & GENMASK(19, 16)) >> 16)
> +#define ICPU_MEMCTRL_TIMING3_ODT_RD_DLY(x)                (((x) << 12) & GENMASK(15, 12))
> +#define ICPU_MEMCTRL_TIMING3_ODT_RD_DLY_M                 GENMASK(15, 12)
> +#define ICPU_MEMCTRL_TIMING3_ODT_RD_DLY_X(x)              (((x) & GENMASK(15, 12)) >> 12)
> +#define ICPU_MEMCTRL_TIMING3_ODT_WR_DLY(x)                (((x) << 8) & GENMASK(11, 8))
> +#define ICPU_MEMCTRL_TIMING3_ODT_WR_DLY_M                 GENMASK(11, 8)
> +#define ICPU_MEMCTRL_TIMING3_ODT_WR_DLY_X(x)              (((x) & GENMASK(11, 8)) >> 8)
> +#define ICPU_MEMCTRL_TIMING3_LOCAL_ODT_RD_DLY(x)          (((x) << 4) & GENMASK(7, 4))
> +#define ICPU_MEMCTRL_TIMING3_LOCAL_ODT_RD_DLY_M           GENMASK(7, 4)
> +#define ICPU_MEMCTRL_TIMING3_LOCAL_ODT_RD_DLY_X(x)        (((x) & GENMASK(7, 4)) >> 4)
> +#define ICPU_MEMCTRL_TIMING3_WR_TO_RD_CS_CHANGE_DLY(x)    ((x) & GENMASK(3, 0))
> +#define ICPU_MEMCTRL_TIMING3_WR_TO_RD_CS_CHANGE_DLY_M     GENMASK(3, 0)
> +
> +#define ICPU_MEMCTRL_TIMING4                              0x154
> +
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_INIT_DLY(x)            (((x) << 20) & GENMASK(31, 20))
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_INIT_DLY_M             GENMASK(31, 20)
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_INIT_DLY_X(x)          (((x) & GENMASK(31, 20)) >> 20)
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_LONG_DLY(x)            (((x) << 8) & GENMASK(19, 8))
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_LONG_DLY_M             GENMASK(19, 8)
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_LONG_DLY_X(x)          (((x) & GENMASK(19, 8)) >> 8)
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_SHORT_DLY(x)           ((x) & GENMASK(7, 0))
> +#define ICPU_MEMCTRL_TIMING4_ZQCAL_SHORT_DLY_M            GENMASK(7, 0)
> +
> +#define ICPU_MEMCTRL_MR0_VAL                              0x158
> +
> +#define ICPU_MEMCTRL_MR1_VAL                              0x15c
> +
> +#define ICPU_MEMCTRL_MR2_VAL                              0x160
> +
> +#define ICPU_MEMCTRL_MR3_VAL                              0x164
> +
> +#define ICPU_MEMCTRL_TERMRES_CTRL                         0x168
> +
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_RD_EXT              BIT(11)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_RD_ENA(x)           (((x) << 7) & GENMASK(10, 7))
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_RD_ENA_M            GENMASK(10, 7)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_RD_ENA_X(x)         (((x) & GENMASK(10, 7)) >> 7)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_WR_EXT              BIT(6)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_WR_ENA(x)           (((x) << 2) & GENMASK(5, 2))
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_WR_ENA_M            GENMASK(5, 2)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_ODT_WR_ENA_X(x)         (((x) & GENMASK(5, 2)) >> 2)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_LOCAL_ODT_RD_EXT        BIT(1)
> +#define ICPU_MEMCTRL_TERMRES_CTRL_LOCAL_ODT_RD_ENA        BIT(0)
> +
> +#define ICPU_MEMCTRL_DFT                                  0x16c
> +
> +#define ICPU_MEMCTRL_DFT_DDRDFT_LBW                       BIT(7)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_GATE_ENA                  BIT(6)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_TERM_ENA                  BIT(5)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_A10                       BIT(4)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_STAT                      BIT(3)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_MODE(x)                   (((x) << 1) & GENMASK(2, 1))
> +#define ICPU_MEMCTRL_DFT_DDRDFT_MODE_M                    GENMASK(2, 1)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_MODE_X(x)                 (((x) & GENMASK(2, 1)) >> 1)
> +#define ICPU_MEMCTRL_DFT_DDRDFT_ENA                       BIT(0)
> +
> +#define ICPU_MEMCTRL_DQS_DLY(x)                           (0x170 + 0x4 * (x))
> +#define ICPU_MEMCTRL_DQS_DLY_RSZ                          0x4
> +
> +#define ICPU_MEMCTRL_DQS_DLY_TRAIN_DQ_ENA                 BIT(11)
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM1(x)              (((x) << 8) & GENMASK(10, 8))
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM1_M               GENMASK(10, 8)
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM1_X(x)            (((x) & GENMASK(10, 8)) >> 8)
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM0(x)              (((x) << 5) & GENMASK(7, 5))
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM0_M               GENMASK(7, 5)
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_TRM0_X(x)            (((x) & GENMASK(7, 5)) >> 5)
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY(x)                   ((x) & GENMASK(4, 0))
> +#define ICPU_MEMCTRL_DQS_DLY_DQS_DLY_M                    GENMASK(4, 0)
> +
> +#define ICPU_MEMCTRL_DQS_AUTO                             (0x178 + 0x4 * (x))
> +#define ICPU_MEMCTRL_DQS_AUTO_RSZ                         0x4
> +
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_DRIFT(x)                (((x) << 6) & GENMASK(7, 6))
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_DRIFT_M                 GENMASK(7, 6)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_DRIFT_X(x)              (((x) & GENMASK(7, 6)) >> 6)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_OVERFLOW                BIT(5)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_UNDERFLOW               BIT(4)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_AUTO_SRC                BIT(3)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_AUTO_UP                 BIT(2)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_AUTO_DOWN               BIT(1)
> +#define ICPU_MEMCTRL_DQS_AUTO_DQS_AUTO_ENA                BIT(0)
> +
> +#define ICPU_MEMPHY_CFG                                   0x180
> +
> +#define ICPU_MEMPHY_CFG_PHY_FLUSH_DIS                     BIT(10)
> +#define ICPU_MEMPHY_CFG_PHY_RD_ADJ_DIS                    BIT(9)
> +#define ICPU_MEMPHY_CFG_PHY_DQS_EXT                       BIT(8)
> +#define ICPU_MEMPHY_CFG_PHY_FIFO_RST                      BIT(7)
> +#define ICPU_MEMPHY_CFG_PHY_DLL_BL_RST                    BIT(6)
> +#define ICPU_MEMPHY_CFG_PHY_DLL_CL_RST                    BIT(5)
> +#define ICPU_MEMPHY_CFG_PHY_ODT_OE                        BIT(4)
> +#define ICPU_MEMPHY_CFG_PHY_CK_OE                         BIT(3)
> +#define ICPU_MEMPHY_CFG_PHY_CL_OE                         BIT(2)
> +#define ICPU_MEMPHY_CFG_PHY_SSTL_ENA                      BIT(1)
> +#define ICPU_MEMPHY_CFG_PHY_RST                           BIT(0)
> +
> +#define ICPU_MEMPHY_ZCAL                                  0x1a8
> +
> +#define ICPU_MEMPHY_ZCAL_ZCAL_CLK_SEL                     BIT(9)
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG_ODT(x)                 (((x) << 5) & GENMASK(8, 5))
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG_ODT_M                  GENMASK(8, 5)
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG_ODT_X(x)               (((x) & GENMASK(8, 5)) >> 5)
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG(x)                     (((x) << 1) & GENMASK(4, 1))
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG_M                      GENMASK(4, 1)
> +#define ICPU_MEMPHY_ZCAL_ZCAL_PROG_X(x)                   (((x) & GENMASK(4, 1)) >> 1)
> +#define ICPU_MEMPHY_ZCAL_ZCAL_ENA                         BIT(0)
> +//
> +#define ICPU_MEMPHY_ZCAL_STAT                             0x1ac
> +
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_ZCTRL(x)               (((x) << 12) & GENMASK(31, 12))
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_ZCTRL_M                GENMASK(31, 12)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_ZCTRL_X(x)             (((x) & GENMASK(31, 12)) >> 12)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPU(x)          (((x) << 8) & GENMASK(9, 8))
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPU_M           GENMASK(9, 8)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPU_X(x)        (((x) & GENMASK(9, 8)) >> 8)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPD(x)          (((x) << 6) & GENMASK(7, 6))
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPD_M           GENMASK(7, 6)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_ODTPD_X(x)        (((x) & GENMASK(7, 6)) >> 6)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PU(x)             (((x) << 4) & GENMASK(5, 4))
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PU_M              GENMASK(5, 4)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PU_X(x)           (((x) & GENMASK(5, 4)) >> 4)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PD(x)             (((x) << 2) & GENMASK(3, 2))
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PD_M              GENMASK(3, 2)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_STAT_PD_X(x)           (((x) & GENMASK(3, 2)) >> 2)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_ERR                    BIT(1)
> +#define ICPU_MEMPHY_ZCAL_STAT_ZCAL_DONE                   BIT(0)
> +
> +#endif
> diff --git a/arch/mips/mach-mscc/reset.c b/arch/mips/mach-mscc/reset.c
> index 390bbd0..e0e610a 100644
> --- a/arch/mips/mach-mscc/reset.c
> +++ b/arch/mips/mach-mscc/reset.c
> @@ -12,6 +12,22 @@
>  
>  void _machine_restart(void)
>  {
> +#if defined(CONFIG_SOC_JR2)
> +	register u32 reg = readl(BASE_CFG + ICPU_GENERAL_CTRL);
> +	/* Set owner */
> +	reg &= ~ICPU_GENERAL_CTRL_IF_SI_OWNER_M;
> +	reg |= ICPU_GENERAL_CTRL_IF_SI_OWNER(1);
> +	/* Set boot mode */
> +	reg |= ICPU_GENERAL_CTRL_BOOT_MODE_ENA;
> +	writel(reg, BASE_CFG + ICPU_GENERAL_CTRL);
> +	/* Read back in order to make BOOT mode setting active */
> +	reg = readl(BASE_CFG + ICPU_GENERAL_CTRL);
> +	/* Reset CPU only - still executing _here_. but from cache */
> +	writel(readl(BASE_CFG + ICPU_RESET) |
> +	       ICPU_RESET_CORE_RST_CPU_ONLY |
> +	       ICPU_RESET_CORE_RST_FORCE,
> +	       BASE_CFG + ICPU_RESET);
> +#else

not relevant for this series but you should seriously consider to
implemenent a a sysreset driver. Then you could drop this ifdeffery
respectively don't need to implement the _machine_restart() at all.
Or if you create a syscon/reset-controller driver, you could even use
the generic sysreset-syscon driver. Don't you have to implement such
drivers in your Linux port?

>  	register u32 resetbits = PERF_SOFT_RST_SOFT_CHIP_RST;
>  	(void)readl(BASE_DEVCPU_GCB + PERF_SOFT_RST);
>  
> @@ -24,6 +40,7 @@ void _machine_restart(void)
>  
>  	/* Do the global reset */
>  	writel(resetbits, BASE_DEVCPU_GCB + PERF_SOFT_RST);
> +#endif
>  
>  	while (1)
>  		; /* NOP */
> 

-- 
- Daniel


More information about the U-Boot mailing list