blob: 4a1c13caa5629990ae8a051fad691a71d852be4c [file] [log] [blame]
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +08001/* SPDX-License-Identifier: GPL-2.0-only */
2
3/*
4 * This file is created based on MT8186 Functional Specification
5 * Chapter number: 5.6, 5.8
6 */
7
Rex-BC Chen0d508922021-11-04 13:56:56 +08008#include <assert.h>
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +08009#include <device/mmio.h>
10#include <soc/addressmap.h>
Rex-BC Chena6b3af92021-09-23 20:21:18 +080011#include <soc/flash_controller_common.h>
Rex-BC Chen0d508922021-11-04 13:56:56 +080012#include <soc/gpio.h>
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080013#include <soc/spi.h>
14
Rex-BC Chen0d508922021-11-04 13:56:56 +080015struct pad_func {
16 gpio_t gpio;
17 u8 func;
18};
19
20#define PAD_FUNC(name, func) {GPIO(name), PAD_##name##_FUNC_##func}
21
22static const struct pad_func nor_pinmux[SPI_NOR_GPIO_SET_NUM][4] = {
23 /* GPIO 36 ~ 39 */
24 [SPI_NOR_GPIO_SET0] = {
25 PAD_FUNC(SPI0_CLK, SPINOR_CK),
26 PAD_FUNC(SPI0_CSB, SPINOR_CS),
27 PAD_FUNC(SPI0_MO, SPINOR_IO0),
28 PAD_FUNC(SPI0_MI, SPINOR_IO1),
29 },
30 /* GPIO 61 ~ 64 */
31 [SPI_NOR_GPIO_SET1] = {
32 PAD_FUNC(TDM_RX_BCK, SPINOR_CK),
33 PAD_FUNC(TDM_RX_MCLK, SPINOR_CS),
34 PAD_FUNC(TDM_RX_DATA0, SPINOR_IO0),
35 PAD_FUNC(TDM_RX_DATA1, SPINOR_IO1),
36 },
37};
38
39void mtk_snfc_init(int gpio_set)
40{
41 const struct pad_func *ptr = NULL;
42
43 assert(gpio_set < SPI_NOR_GPIO_SET_NUM);
44
45 ptr = nor_pinmux[gpio_set];
46 for (size_t i = 0; i < ARRAY_SIZE(nor_pinmux[gpio_set]); i++) {
47 gpio_set_pull(ptr[i].gpio, GPIO_PULL_ENABLE, GPIO_PULL_UP);
48 gpio_set_mode(ptr[i].gpio, ptr[i].func);
49 }
50}
51
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080052static const struct spi_ctrlr spi_flash_ctrlr = {
53 .max_xfer_size = 65535,
Rex-BC Chena6b3af92021-09-23 20:21:18 +080054 .flash_probe = mtk_spi_flash_probe,
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080055};
56
57const struct spi_ctrlr_buses spi_ctrlr_bus_map[] = {
58 {
59 .ctrlr = &spi_flash_ctrlr,
Rex-BC Chena6b3af92021-09-23 20:21:18 +080060 .bus_start = CONFIG_BOOT_DEVICE_SPI_FLASH_BUS,
61 .bus_end = CONFIG_BOOT_DEVICE_SPI_FLASH_BUS,
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080062 },
63};
64
65const size_t spi_ctrlr_bus_map_count = ARRAY_SIZE(spi_ctrlr_bus_map);