2018-05-06 21:58:06 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0+
|
2015-01-28 05:13:47 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <common.h>
|
2019-12-28 17:44:56 +00:00
|
|
|
#include <init.h>
|
2015-01-28 05:13:47 +00:00
|
|
|
#include <mmc.h>
|
|
|
|
#include <pci_ids.h>
|
2015-07-30 10:49:18 +00:00
|
|
|
#include <asm/irq.h>
|
2015-10-12 04:37:43 +00:00
|
|
|
#include <asm/mrccache.h>
|
2015-01-28 05:13:47 +00:00
|
|
|
#include <asm/post.h>
|
2017-10-12 12:07:57 +00:00
|
|
|
#include <asm/arch/iomap.h>
|
|
|
|
|
|
|
|
/* GPIO SUS */
|
|
|
|
#define GPIO_SUS_PAD_BASE (IO_BASE_ADDRESS + IO_BASE_OFFSET_GPSSUS)
|
|
|
|
#define GPIO_SUS_DFX5_CONF0 0x150
|
|
|
|
#define BYT_TRIG_LVL BIT(24)
|
|
|
|
#define BYT_TRIG_POS BIT(25)
|
2015-01-28 05:13:47 +00:00
|
|
|
|
|
|
|
int arch_cpu_init(void)
|
|
|
|
{
|
|
|
|
post_code(POST_CPU_INIT);
|
|
|
|
|
2016-09-06 13:17:36 +00:00
|
|
|
return x86_cpu_init_f();
|
2015-01-28 05:13:47 +00:00
|
|
|
}
|
2015-07-30 10:49:18 +00:00
|
|
|
|
|
|
|
int arch_misc_init(void)
|
|
|
|
{
|
2015-08-10 13:05:12 +00:00
|
|
|
if (!ll_boot_init())
|
|
|
|
return 0;
|
2015-08-10 13:05:10 +00:00
|
|
|
|
2015-10-12 04:37:43 +00:00
|
|
|
#ifdef CONFIG_ENABLE_MRC_CACHE
|
|
|
|
/*
|
|
|
|
* We intend not to check any return value here, as even MRC cache
|
|
|
|
* is not saved successfully, it is not a severe error that will
|
|
|
|
* prevent system from continuing to boot.
|
|
|
|
*/
|
|
|
|
mrccache_save();
|
|
|
|
#endif
|
|
|
|
|
2017-10-12 12:07:57 +00:00
|
|
|
/*
|
|
|
|
* For some unknown reason, FSP (gold4) for BayTrail configures
|
|
|
|
* the GPIO DFX5 PAD to enable level interrupt (bit 24 and 25).
|
|
|
|
* This does not cause any issue when Linux kernel runs w/ or w/o
|
|
|
|
* the pinctrl driver for BayTrail. However this causes unstable
|
|
|
|
* S3 resume if the pinctrl driver is included in the kernel build.
|
|
|
|
* As this pin keeps generating interrupts during an S3 resume,
|
|
|
|
* and there is no IRQ requester in the kernel to handle it, the
|
|
|
|
* kernel seems to hang and does not continue resuming.
|
|
|
|
*
|
|
|
|
* Clear the mysterious interrupt bits for this pin.
|
|
|
|
*/
|
|
|
|
clrbits_le32(GPIO_SUS_PAD_BASE + GPIO_SUS_DFX5_CONF0,
|
|
|
|
BYT_TRIG_LVL | BYT_TRIG_POS);
|
|
|
|
|
2016-01-20 04:32:26 +00:00
|
|
|
return 0;
|
2015-07-30 10:49:18 +00:00
|
|
|
}
|