blob: ada794f1e0ea2c19a6360490e038193ee2c4640c [file] [log] [blame]
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +08001/* SPDX-License-Identifier: GPL-2.0-only */
2
Rex-BC Chen362a4812021-12-02 19:17:06 +08003#include <bootmem.h>
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +08004#include <device/device.h>
Tinghan Shena9e59572022-10-11 13:42:44 +08005#include <soc/adsp.h>
Runyang Chena0583a42021-12-19 21:15:03 +08006#include <soc/devapc.h>
Rex-BC Chen362a4812021-12-02 19:17:06 +08007#include <soc/dfd.h>
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +08008#include <soc/emi.h>
Rex-BC Chenf8eed652021-11-11 15:50:42 +08009#include <soc/mmu_operations.h>
Tinghan Shena9e59572022-10-11 13:42:44 +080010#include <soc/mtcmos.h>
Rex-BC Chend8e8c872021-11-08 14:28:54 +080011#include <soc/sspm.h>
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080012#include <symbols.h>
13
Rex-BC Chen362a4812021-12-02 19:17:06 +080014void bootmem_platform_add_ranges(void)
15{
16 if (CONFIG(MTK_DFD))
17 bootmem_add_range(DFD_DUMP_ADDRESS, DFD_DUMP_SIZE, BM_MEM_RESERVED);
18}
19
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080020static void soc_read_resources(struct device *dev)
21{
Kyösti Mälkki85eb34e2022-06-20 14:13:36 +030022 ram_range(dev, 0, (uintptr_t)_dram, sdram_size());
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080023}
24
25static void soc_init(struct device *dev)
26{
Rex-BC Chenf8eed652021-11-11 15:50:42 +080027 mtk_mmu_disable_l2c_sram();
Rex-BC Chend8e8c872021-11-08 14:28:54 +080028 sspm_init();
Tinghan Shena9e59572022-10-11 13:42:44 +080029
30 /* ADSP is required for all MT8186 projects, so it's initialized in soc.c */
31 mtcmos_adsp_power_on();
32 mtcmos_protect_adsp_bus();
33 mtk_adsp_init();
34
Runyang Chena0583a42021-12-19 21:15:03 +080035 dapc_init();
Rex-BC Chen362a4812021-12-02 19:17:06 +080036
37 if (CONFIG(MTK_DFD))
38 dfd_init();
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080039}
40
41static struct device_operations soc_ops = {
42 .read_resources = soc_read_resources,
Yu-Ping Wu39e6f852022-03-14 16:53:59 +080043 .set_resources = noop_set_resources,
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080044 .init = soc_init,
45};
46
47static void enable_soc_dev(struct device *dev)
48{
49 dev->ops = &soc_ops;
50}
51
52struct chip_operations soc_mediatek_mt8186_ops = {
Nicholas Sudsgaardbfb11be2024-01-30 09:53:46 +090053 .name = "SOC Mediatek MT8186",
Rex-BC Chen73e6b8e2021-11-02 10:31:53 +080054 .enable_dev = enable_soc_dev,
55};