blob: 3194f8c6533b5272356be0f17ffe767061e60121 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Simon Glass4a56f102015-01-27 22:13:47 -07002/*
3 * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
Simon Glass4a56f102015-01-27 22:13:47 -07004 */
5
6#include <common.h>
7#include <mmc.h>
8#include <pci_ids.h>
Bin Meng947391c2015-07-30 03:49:18 -07009#include <asm/irq.h>
Bin Mengdc597802015-10-11 21:37:43 -070010#include <asm/mrccache.h>
Simon Glass4a56f102015-01-27 22:13:47 -070011#include <asm/post.h>
Bin Mengb11494c2017-10-12 05:07:57 -070012#include <asm/arch/iomap.h>
13
14/* GPIO SUS */
15#define GPIO_SUS_PAD_BASE (IO_BASE_ADDRESS + IO_BASE_OFFSET_GPSSUS)
16#define GPIO_SUS_DFX5_CONF0 0x150
17#define BYT_TRIG_LVL BIT(24)
18#define BYT_TRIG_POS BIT(25)
Simon Glass4a56f102015-01-27 22:13:47 -070019
Simon Glassa815df72015-08-04 12:34:02 -060020#ifndef CONFIG_EFI_APP
Simon Glass4a56f102015-01-27 22:13:47 -070021int arch_cpu_init(void)
22{
Simon Glass4a56f102015-01-27 22:13:47 -070023 post_code(POST_CPU_INIT);
Simon Glass4a56f102015-01-27 22:13:47 -070024
Masahiro Yamada17103212016-09-06 22:17:36 +090025 return x86_cpu_init_f();
Simon Glass4a56f102015-01-27 22:13:47 -070026}
Bin Meng947391c2015-07-30 03:49:18 -070027
28int arch_misc_init(void)
29{
Simon Glass5cc82b82015-08-10 07:05:12 -060030 if (!ll_boot_init())
31 return 0;
Simon Glass888697a2015-08-10 07:05:10 -060032
Bin Mengdc597802015-10-11 21:37:43 -070033#ifdef CONFIG_ENABLE_MRC_CACHE
34 /*
35 * We intend not to check any return value here, as even MRC cache
36 * is not saved successfully, it is not a severe error that will
37 * prevent system from continuing to boot.
38 */
39 mrccache_save();
40#endif
41
Bin Mengb11494c2017-10-12 05:07:57 -070042 /*
43 * For some unknown reason, FSP (gold4) for BayTrail configures
44 * the GPIO DFX5 PAD to enable level interrupt (bit 24 and 25).
45 * This does not cause any issue when Linux kernel runs w/ or w/o
46 * the pinctrl driver for BayTrail. However this causes unstable
47 * S3 resume if the pinctrl driver is included in the kernel build.
48 * As this pin keeps generating interrupts during an S3 resume,
49 * and there is no IRQ requester in the kernel to handle it, the
50 * kernel seems to hang and does not continue resuming.
51 *
52 * Clear the mysterious interrupt bits for this pin.
53 */
54 clrbits_le32(GPIO_SUS_PAD_BASE + GPIO_SUS_DFX5_CONF0,
55 BYT_TRIG_LVL | BYT_TRIG_POS);
56
Simon Glass754f55e2016-01-19 21:32:26 -070057 return 0;
Bin Meng947391c2015-07-30 03:49:18 -070058}
Bin Mengdc597802015-10-11 21:37:43 -070059
Simon Glassa815df72015-08-04 12:34:02 -060060#endif
Bin Meng71d7c2f2015-10-11 21:37:45 -070061
62void reset_cpu(ulong addr)
63{
64 /* cold reset */
65 x86_full_reset();
66}