x86: Switch to use DM sysreset driver
This converts all x86 boards over to DM sysreset. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
7bb6028768
commit
b37b7b2063
|
@ -118,6 +118,8 @@ config X86
|
||||||
imply DM_SPI_FLASH
|
imply DM_SPI_FLASH
|
||||||
imply DM_USB
|
imply DM_USB
|
||||||
imply DM_VIDEO
|
imply DM_VIDEO
|
||||||
|
imply SYSRESET
|
||||||
|
imply SYSRESET_X86
|
||||||
imply CMD_FPGA_LOADMK
|
imply CMD_FPGA_LOADMK
|
||||||
imply CMD_GETTIME
|
imply CMD_GETTIME
|
||||||
imply CMD_IO
|
imply CMD_IO
|
||||||
|
|
|
@ -55,9 +55,3 @@ int arch_misc_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
/* cold reset */
|
|
||||||
x86_full_reset();
|
|
||||||
}
|
|
||||||
|
|
|
@ -27,9 +27,3 @@ int arch_misc_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
/* cold reset */
|
|
||||||
x86_full_reset();
|
|
||||||
}
|
|
||||||
|
|
|
@ -75,37 +75,11 @@ int x86_init_cache(void)
|
||||||
}
|
}
|
||||||
int init_cache(void) __attribute__((weak, alias("x86_init_cache")));
|
int init_cache(void) __attribute__((weak, alias("x86_init_cache")));
|
||||||
|
|
||||||
int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
||||||
{
|
|
||||||
printf("resetting ...\n");
|
|
||||||
|
|
||||||
/* wait 50 ms */
|
|
||||||
udelay(50000);
|
|
||||||
disable_interrupts();
|
|
||||||
reset_cpu(0);
|
|
||||||
|
|
||||||
/*NOTREACHED*/
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void flush_cache(unsigned long dummy1, unsigned long dummy2)
|
void flush_cache(unsigned long dummy1, unsigned long dummy2)
|
||||||
{
|
{
|
||||||
asm("wbinvd\n");
|
asm("wbinvd\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
__weak void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
/* Do a hard reset through the chipset's reset control register */
|
|
||||||
outb(SYS_RST | RST_CPU, IO_PORT_RESET);
|
|
||||||
for (;;)
|
|
||||||
cpu_hlt();
|
|
||||||
}
|
|
||||||
|
|
||||||
void x86_full_reset(void)
|
|
||||||
{
|
|
||||||
outb(FULL_RST | SYS_RST | RST_CPU, IO_PORT_RESET);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define these functions to allow ehch-hcd to function */
|
/* Define these functions to allow ehch-hcd to function */
|
||||||
void flush_dcache_range(unsigned long start, unsigned long stop)
|
void flush_dcache_range(unsigned long start, unsigned long stop)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <sysreset.h>
|
||||||
#include <asm/pci.h>
|
#include <asm/pci.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
|
@ -138,17 +139,17 @@ int intel_early_me_init_done(struct udevice *dev, struct udevice *me_dev,
|
||||||
case ME_HFS_ACK_RESET:
|
case ME_HFS_ACK_RESET:
|
||||||
/* Non-power cycle reset */
|
/* Non-power cycle reset */
|
||||||
set_global_reset(dev, 0);
|
set_global_reset(dev, 0);
|
||||||
reset_cpu(0);
|
sysreset_walk_halt(SYSRESET_COLD);
|
||||||
break;
|
break;
|
||||||
case ME_HFS_ACK_PWR_CYCLE:
|
case ME_HFS_ACK_PWR_CYCLE:
|
||||||
/* Power cycle reset */
|
/* Power cycle reset */
|
||||||
set_global_reset(dev, 0);
|
set_global_reset(dev, 0);
|
||||||
x86_full_reset();
|
sysreset_walk_halt(SYSRESET_COLD);
|
||||||
break;
|
break;
|
||||||
case ME_HFS_ACK_GBL_RESET:
|
case ME_HFS_ACK_GBL_RESET:
|
||||||
/* Global reset */
|
/* Global reset */
|
||||||
set_global_reset(dev, 1);
|
set_global_reset(dev, 1);
|
||||||
x86_full_reset();
|
sysreset_walk_halt(SYSRESET_COLD);
|
||||||
break;
|
break;
|
||||||
case ME_HFS_ACK_S3:
|
case ME_HFS_ACK_S3:
|
||||||
case ME_HFS_ACK_S4:
|
case ME_HFS_ACK_S4:
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <spi.h>
|
#include <spi.h>
|
||||||
#include <spi_flash.h>
|
#include <spi_flash.h>
|
||||||
#include <syscon.h>
|
#include <syscon.h>
|
||||||
|
#include <sysreset.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
|
@ -497,7 +498,7 @@ int dram_init(void)
|
||||||
/* If MRC data is not found we cannot continue S3 resume. */
|
/* If MRC data is not found we cannot continue S3 resume. */
|
||||||
if (pei_data->boot_mode == PEI_BOOT_RESUME && !pei_data->mrc_input) {
|
if (pei_data->boot_mode == PEI_BOOT_RESUME && !pei_data->mrc_input) {
|
||||||
debug("Giving up in sdram_initialize: No MRC data\n");
|
debug("Giving up in sdram_initialize: No MRC data\n");
|
||||||
reset_cpu(0);
|
sysreset_walk_halt(SYSRESET_COLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pass console handler in pei_data */
|
/* Pass console handler in pei_data */
|
||||||
|
|
|
@ -156,12 +156,6 @@ int print_cpuinfo(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
/* cold reset */
|
|
||||||
x86_full_reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
int arch_early_init_r(void)
|
int arch_early_init_r(void)
|
||||||
{
|
{
|
||||||
qemu_chipset_init();
|
qemu_chipset_init();
|
||||||
|
|
|
@ -270,12 +270,6 @@ int print_cpuinfo(void)
|
||||||
return default_print_cpuinfo();
|
return default_print_cpuinfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
/* cold reset */
|
|
||||||
x86_full_reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void quark_pcie_init(void)
|
static void quark_pcie_init(void)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/scu.h>
|
|
||||||
#include <asm/u-boot-x86.h>
|
#include <asm/u-boot-x86.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -24,8 +23,3 @@ int print_cpuinfo(void)
|
||||||
{
|
{
|
||||||
return default_print_cpuinfo();
|
return default_print_cpuinfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cpu(ulong addr)
|
|
||||||
{
|
|
||||||
scu_ipc_simple_command(IPCMSG_COLD_RESET, 0);
|
|
||||||
}
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <dt-bindings/interrupt-router/intel-irq.h>
|
#include <dt-bindings/interrupt-router/intel-irq.h>
|
||||||
|
|
||||||
#include "skeleton.dtsi"
|
#include "skeleton.dtsi"
|
||||||
|
#include "reset.dtsi"
|
||||||
#include "rtc.dtsi"
|
#include "rtc.dtsi"
|
||||||
#include "tsc_timer.dtsi"
|
#include "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -85,4 +85,9 @@
|
||||||
compatible = "intel,scu-ipc";
|
compatible = "intel,scu-ipc";
|
||||||
reg = <0xff009000 0x1000>;
|
reg = <0xff009000 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
reset {
|
||||||
|
compatible = "intel,reset-tangier";
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,4 +23,9 @@
|
||||||
serial: serial {
|
serial: serial {
|
||||||
compatible = "efi,uart";
|
compatible = "efi,uart";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
reset {
|
||||||
|
compatible = "efi,reset";
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <dt-bindings/interrupt-router/intel-irq.h>
|
#include <dt-bindings/interrupt-router/intel-irq.h>
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
/include/ "coreboot_fb.dtsi"
|
/include/ "coreboot_fb.dtsi"
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
/include/ "skeleton.dtsi"
|
/include/ "skeleton.dtsi"
|
||||||
/include/ "serial.dtsi"
|
/include/ "serial.dtsi"
|
||||||
/include/ "keyboard.dtsi"
|
/include/ "keyboard.dtsi"
|
||||||
|
/include/ "reset.dtsi"
|
||||||
/include/ "rtc.dtsi"
|
/include/ "rtc.dtsi"
|
||||||
/include/ "tsc_timer.dtsi"
|
/include/ "tsc_timer.dtsi"
|
||||||
|
|
||||||
|
|
6
arch/x86/dts/reset.dtsi
Normal file
6
arch/x86/dts/reset.dtsi
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
/ {
|
||||||
|
reset {
|
||||||
|
compatible = "x86,reset";
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
|
};
|
|
@ -43,11 +43,6 @@ enum {
|
||||||
FULL_RST = 1 << 3, /* full power cycle */
|
FULL_RST = 1 << 3, /* full power cycle */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* x86_full_reset() - reset everything: perform a full power cycle
|
|
||||||
*/
|
|
||||||
void x86_full_reset(void);
|
|
||||||
|
|
||||||
static inline __attribute__((always_inline)) void cpu_hlt(void)
|
static inline __attribute__((always_inline)) void cpu_hlt(void)
|
||||||
{
|
{
|
||||||
asm("hlt");
|
asm("hlt");
|
||||||
|
|
|
@ -40,7 +40,6 @@ int x86_cleanup_before_linux(void);
|
||||||
void x86_enable_caches(void);
|
void x86_enable_caches(void);
|
||||||
void x86_disable_caches(void);
|
void x86_disable_caches(void);
|
||||||
int x86_init_cache(void);
|
int x86_init_cache(void);
|
||||||
void reset_cpu(ulong addr);
|
|
||||||
ulong board_get_usable_ram_top(ulong total_size);
|
ulong board_get_usable_ram_top(ulong total_size);
|
||||||
int default_print_cpuinfo(void);
|
int default_print_cpuinfo(void);
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
CONFIG_SYS_MALLOC_F_LEN=0x2000
|
||||||
CONFIG_SPL_SERIAL_SUPPORT=y
|
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||||
|
CONFIG_SPL_DRIVERS_MISC_SUPPORT=y
|
||||||
CONFIG_DEBUG_UART_BOARD_INIT=y
|
CONFIG_DEBUG_UART_BOARD_INIT=y
|
||||||
CONFIG_DEBUG_UART_BASE=0x3f8
|
CONFIG_DEBUG_UART_BASE=0x3f8
|
||||||
CONFIG_DEBUG_UART_CLOCK=1843200
|
CONFIG_DEBUG_UART_CLOCK=1843200
|
||||||
|
|
Loading…
Reference in New Issue
Block a user