1 /* SPDX-License-Identifier: GPL-2.0-only OR MIT */
3 #include <device/mmio.h>
4 #include <device/resource.h>
6 #include <soc/addressmap.h>
7 #include <soc/early_init.h>
9 #include <soc/pcie_common.h>
11 #define PCIE_REG_BASE_PORT0 0x112f0000
13 static const struct pad_func pcie_pins
[2][3] = {
15 PAD_FUNC_UP(PCIE_WAKE_N
, WAKEN
),
16 PAD_FUNC_UP(PCIE_PERESET_N
, PERSTN
),
17 PAD_FUNC_UP(PCIE_CLKREQ_N
, CLKREQN
),
20 PAD_FUNC_UP(CMMCLK0
, PERSTN_1
),
21 PAD_FUNC_UP(CMMCLK1
, CLKREQN_1
),
22 PAD_FUNC_UP(CMMCLK2
, WAKEN_1
),
26 static void mtk_pcie_set_pinmux(uint8_t port
)
28 const struct pad_func
*pins
= pcie_pins
[port
];
31 for (i
= 0; i
< ARRAY_SIZE(pcie_pins
[port
]); i
++) {
32 gpio_set_mode(pins
[i
].gpio
, pins
[i
].func
);
33 gpio_set_pull(pins
[i
].gpio
, GPIO_PULL_ENABLE
, pins
[i
].select
);
37 void mtk_pcie_pre_init(void)
39 mtk_pcie_set_pinmux(0);
41 /* Assert all reset signals at early stage */
42 mtk_pcie_reset(PCIE_REG_BASE_PORT0
, true);
44 early_init_save_time(EARLY_INIT_PCIE
);