soc/mediatek/mt8192: eint: unmask eint event mask register

eint event mask register is used to mask eint wakeup source on mt8192.
All wakeup sources are masked by default. Since most MediaTek SoCs do
not have this design, we can't modify the kernel eint upstream driver to
solve the issue 'Can't wake using power button (cros_ec) or touchpad'.
So we add a driver here to unmask all wakeup sources.

BUG=b:169024614

Signed-off-by: G.Pangao <gtk_pangao@mediatek.com>
Change-Id: I8ee80bf8302c146e09b74e9f6c6c49f501d7c1c4
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46409
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
G.Pangao 2020-09-30 11:04:08 +08:00 committed by Hung-Te Lin
parent 4b9b44696d
commit 142e6f5ecf
4 changed files with 33 additions and 0 deletions

View File

@ -2,6 +2,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8192),y)
bootblock-y += ../common/auxadc.c
bootblock-y += bootblock.c
bootblock-y += eint_event.c
bootblock-y += flash_controller.c
bootblock-y += ../common/gpio.c gpio.c
bootblock-y += ../common/i2c.c i2c.c

View File

@ -1,6 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <bootblock_common.h>
#include <soc/eint_event.h>
#include <soc/mmu_operations.h>
#include <soc/mt6315.h>
#include <soc/mt6359p.h>
@ -18,4 +19,5 @@ void bootblock_soc_init(void)
mt6359p_init();
mt6315_init();
rtc_boot();
unmask_eint_event_mask();
}

View File

@ -0,0 +1,10 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <soc/eint_event.h>
void unmask_eint_event_mask(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(mtk_eint_event->eint_event_mask_clr); i++)
write32(&mtk_eint_event->eint_event_mask_clr[i], 0xffffffff);
}

View File

@ -0,0 +1,20 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef SOC_MEDIATEK_MT8192_EINT_EVENT_H
#define SOC_MEDIATEK_MT8192_EINT_EVENT_H
#include <device/mmio.h>
#include <soc/addressmap.h>
/* eint event mask cler register */
struct eint_event_reg {
uint32_t eint_event_mask_clr[7];
};
/* eint_base + 0x880 is eint_event_mask_clr register with access type W1C. */
static struct eint_event_reg *const mtk_eint_event = (void *)(EINT_BASE + 0x880);
/* unmask eint event, eint can wakeup by spm */
void unmask_eint_event_mask(void);
#endif