soc/mediatek/mt8189: Add EINT support

Add support for configuring GPIO pull settings for external
interrupts (EINT).

BUG=b:379008996
BRANCH=none
TEST=build pass

Signed-off-by: ot_chhao.chang <ot_chhao.chang@mediatek.com>
Change-Id: I0a8e0a45eb4466d893405684f560b84e7a992630
Reviewed-on: https://review.coreboot.org/c/coreboot/+/87337
Reviewed-by: Yidi Lin <yidilin@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
This commit is contained in:
ot_chhao.chang 2024-12-05 15:21:28 +08:00 committed by Yidi Lin
commit 644dea4a47
3 changed files with 234 additions and 1 deletions

View file

@ -3,7 +3,7 @@
ifeq ($(CONFIG_SOC_MEDIATEK_MT8189),y)
all-y += ../common/flash_controller.c
all-y += ../common/gpio.c ../common/gpio_op.c gpio.c
all-y += ../common/gpio.c ../common/gpio_op.c ../common/gpio_eint_v2.c gpio.c gpio_eint.c
all-$(CONFIG_SPI_FLASH) += spi.c
all-y += ../common/timer_prepare.c timer.c
all-y += ../common/uart.c

View file

@ -0,0 +1,225 @@
/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
/*
* This file is created based on MT8189_EINT_Datasheet
* Chapter number: 1
*/
#include <commonlib/bsd/helpers.h>
#include <soc/gpio_eint_v2.h>
const struct eint_info eint_data[] = {
[0] = { EINT_E, 0 },
[1] = { EINT_E, 1 },
[2] = { EINT_E, 2 },
[3] = { EINT_E, 3 },
[4] = { EINT_E, 4 },
[5] = { EINT_E, 5 },
[6] = { EINT_E, 6 },
[7] = { EINT_E, 7 },
[8] = { EINT_E, 8 },
[9] = { EINT_E, 9 },
[10] = { EINT_E, 10 },
[11] = { EINT_E, 11 },
[12] = { EINT_S, 0 },
[13] = { EINT_S, 1 },
[14] = { EINT_S, 2 },
[15] = { EINT_S, 3 },
[16] = { EINT_S, 4 },
[17] = { EINT_S, 5 },
[18] = { EINT_E, 12 },
[19] = { EINT_E, 13 },
[20] = { EINT_E, 14 },
[21] = { EINT_E, 15 },
[22] = { EINT_E, 16 },
[23] = { EINT_E, 17 },
[24] = { EINT_E, 18 },
[25] = { EINT_W, 0 },
[26] = { EINT_W, 1 },
[27] = { EINT_S, 6 },
[28] = { EINT_S, 7 },
[29] = { EINT_W, 2 },
[30] = { EINT_S, 8 },
[31] = { EINT_S, 9 },
[32] = { EINT_S, 10 },
[33] = { EINT_S, 11 },
[34] = { EINT_S, 12 },
[35] = { EINT_S, 13 },
[36] = { EINT_S, 14 },
[37] = { EINT_S, 15 },
[38] = { EINT_S, 16 },
[39] = { EINT_S, 17 },
[40] = { EINT_S, 18 },
[41] = { EINT_S, 19 },
[42] = { EINT_S, 20 },
[43] = { EINT_S, 21 },
[44] = { EINT_E, 19 },
[45] = { EINT_E, 20 },
[46] = { EINT_E, 21 },
[47] = { EINT_E, 22 },
[48] = { EINT_W, 3 },
[49] = { EINT_W, 4 },
[50] = { EINT_W, 5 },
[51] = { EINT_E, 23 },
[52] = { EINT_E, 24 },
[53] = { EINT_E, 25 },
[54] = { EINT_E, 26 },
[55] = { EINT_W, 6 },
[56] = { EINT_W, 7 },
[57] = { EINT_S, 22 },
[58] = { EINT_S, 23 },
[59] = { EINT_S, 24 },
[60] = { EINT_S, 25 },
[61] = { EINT_S, 26 },
[62] = { EINT_S, 27 },
[63] = { EINT_S, 28 },
[64] = { EINT_S, 29 },
[65] = { EINT_E, 27 },
[66] = { EINT_E, 28 },
[67] = { EINT_E, 29 },
[68] = { EINT_E, 30 },
[69] = { EINT_S, 30 },
[70] = { EINT_S, 31 },
[71] = { EINT_S, 32 },
[72] = { EINT_S, 33 },
[73] = { EINT_S, 34 },
[74] = { EINT_S, 35 },
[75] = { EINT_S, 36 },
[76] = { EINT_S, 37 },
[77] = { EINT_E, 31 },
[78] = { EINT_E, 32 },
[79] = { EINT_E, 33 },
[80] = { EINT_E, 34 },
[81] = { EINT_S, 38 },
[82] = { EINT_S, 39 },
[83] = { EINT_S, 40 },
[84] = { EINT_E, 35 },
[85] = { EINT_E, 36 },
[86] = { EINT_E, 37 },
[87] = { EINT_E, 38 },
[88] = { EINT_W, 8 },
[89] = { EINT_W, 9 },
[90] = { EINT_W, 10 },
[91] = { EINT_W, 11 },
[92] = { EINT_W, 12 },
[93] = { EINT_W, 13 },
[94] = { EINT_W, 14 },
[95] = { EINT_W, 15 },
[96] = { EINT_W, 16 },
[97] = { EINT_W, 17 },
[98] = { EINT_W, 18 },
[99] = { EINT_W, 19 },
[100] = { EINT_W, 20 },
[101] = { EINT_W, 21 },
[102] = { EINT_W, 22 },
[103] = { EINT_E, 39 },
[104] = { EINT_E, 40 },
[105] = { EINT_E, 41 },
[106] = { EINT_E, 42 },
[107] = { EINT_E, 43 },
[108] = { EINT_E, 44 },
[109] = { EINT_E, 45 },
[110] = { EINT_E, 46 },
[111] = { EINT_E, 47 },
[112] = { EINT_E, 48 },
[113] = { EINT_E, 49 },
[114] = { EINT_E, 50 },
[115] = { EINT_S, 41 },
[116] = { EINT_S, 42 },
[117] = { EINT_S, 43 },
[118] = { EINT_S, 44 },
[119] = { EINT_S, 45 },
[120] = { EINT_S, 46 },
[121] = { EINT_S, 47 },
[122] = { EINT_S, 48 },
[123] = { EINT_S, 49 },
[124] = { EINT_S, 50 },
[125] = { EINT_S, 51 },
[126] = { EINT_S, 52 },
[127] = { EINT_S, 53 },
[128] = { EINT_S, 54 },
[129] = { EINT_S, 55 },
[130] = { EINT_S, 56 },
[131] = { EINT_S, 57 },
[132] = { EINT_S, 58 },
[133] = { EINT_S, 59 },
[134] = { EINT_S, 60 },
[135] = { EINT_S, 61 },
[136] = { EINT_S, 62 },
[137] = { EINT_S, 63 },
[138] = { EINT_S, 64 },
[139] = { EINT_S, 65 },
[140] = { EINT_S, 66 },
[141] = { EINT_S, 67 },
[142] = { EINT_S, 68 },
[143] = { EINT_S, 69 },
[144] = { EINT_S, 70 },
[145] = { EINT_S, 71 },
[146] = { EINT_S, 72 },
[147] = { EINT_S, 73 },
[148] = { EINT_S, 74 },
[149] = { EINT_S, 75 },
[150] = { EINT_S, 76 },
[151] = { EINT_S, 77 },
[152] = { EINT_S, 78 },
[153] = { EINT_S, 79 },
[154] = { EINT_S, 80 },
[155] = { EINT_S, 81 },
[156] = { EINT_W, 23 },
[157] = { EINT_W, 24 },
[158] = { EINT_W, 25 },
[159] = { EINT_N, 0 },
[160] = { EINT_W, 26 },
[161] = { EINT_W, 27 },
[162] = { EINT_W, 28 },
[163] = { EINT_N, 1 },
[164] = { EINT_W, 29 },
[165] = { EINT_W, 30 },
[166] = { EINT_N, 2 },
[167] = { EINT_W, 31 },
[168] = { EINT_S, 82 },
[169] = { EINT_S, 83 },
[170] = { EINT_S, 84 },
[171] = { EINT_S, 85 },
[172] = { EINT_S, 86 },
[173] = { EINT_S, 87 },
[174] = { EINT_N, 3 },
[175] = { EINT_N, 4 },
[176] = { EINT_N, 5 },
[177] = { EINT_N, 6 },
[178] = { EINT_N, 7 },
[179] = { EINT_N, 8 },
[180] = { EINT_W, 32 },
[181] = { EINT_W, 33 },
[182] = { EINT_C, 0 },
[183] = { EINT_C, 1 },
[184] = { EINT_C, 2 },
[185] = { EINT_C, 3 },
[186] = { EINT_C, 4 },
[187] = { EINT_C, 5 },
[188] = { EINT_C, 6 },
[189] = { EINT_C, 7 },
[190] = { EINT_C, 8 },
[191] = { EINT_C, 9 },
[192] = { EINT_C, 10 },
[193] = { EINT_C, 11 },
[194] = { EINT_C, 12 },
[195] = { EINT_C, 13 },
[196] = { EINT_C, 14 },
[197] = { EINT_C, 15 },
[198] = { EINT_C, 16 },
[199] = { EINT_C, 17 },
[200] = { EINT_C, 18 },
[201] = { EINT_C, 19 },
[202] = { EINT_C, 20 },
[203] = { EINT_C, 21 },
[204] = { EINT_C, 22 },
[205] = { EINT_C, 23 },
[206] = { EINT_C, 24 },
[207] = { EINT_C, 25 },
[208] = { EINT_C, 26 },
[209] = { EINT_C, 27 },
};
_Static_assert(ARRAY_SIZE(eint_data) == 210, "Incorrect eint_data size");
const size_t eint_data_len = ARRAY_SIZE(eint_data);

View file

@ -7,6 +7,14 @@ enum {
IO_PHYS = 0x10000000,
};
enum {
EINT_E_BASE = IO_PHYS + 0x01CE0000,
EINT_S_BASE = IO_PHYS + 0x01DE0000,
EINT_W_BASE = IO_PHYS + 0x01E60000,
EINT_N_BASE = IO_PHYS + 0x01F00000,
EINT_C_BASE = IO_PHYS + 0x0C01E000,
};
enum {
CKSYS_BASE = IO_PHYS + 0x00000000,
INFRACFG_AO_BASE = IO_PHYS + 0x00001000,