Angel Pons | e67ab18 | 2020-04-04 18:51:11 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 2 | |
Ting Shen | dff29e0 | 2019-01-28 18:15:00 +0800 | [diff] [blame] | 3 | #include <bootmem.h> |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 4 | #include <device/device.h> |
Yidi Lin | 28188e3 | 2022-12-05 16:24:57 +0800 | [diff] [blame] | 5 | #include <program_loading.h> |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 6 | #include <symbols.h> |
Yidi Lin | c6d7dcc | 2016-02-04 17:26:48 +0800 | [diff] [blame] | 7 | #include <soc/emi.h> |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 8 | |
Yidi Lin | 28188e3 | 2022-12-05 16:24:57 +0800 | [diff] [blame] | 9 | int payload_arch_usable_ram_quirk(uint64_t start, uint64_t size) |
| 10 | { |
| 11 | if (size > REGION_SIZE(sram)) |
| 12 | return 0; |
| 13 | |
| 14 | if (start >= (uintptr_t)_sram && (start + size) <= (uintptr_t)_esram) { |
| 15 | printk(BIOS_DEBUG, "MT8173 uses SRAM for loading BL31.\n"); |
| 16 | return 1; |
| 17 | } |
| 18 | |
| 19 | return 0; |
| 20 | } |
| 21 | |
Ting Shen | dff29e0 | 2019-01-28 18:15:00 +0800 | [diff] [blame] | 22 | void bootmem_platform_add_ranges(void) |
| 23 | { |
| 24 | bootmem_add_range(0x101000, 124 * KiB, BM_MEM_BL31); |
| 25 | } |
| 26 | |
Elyes HAOUAS | b442669 | 2018-05-25 10:09:55 +0200 | [diff] [blame] | 27 | static void soc_read_resources(struct device *dev) |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 28 | { |
Kyösti Mälkki | 85eb34e | 2022-06-20 14:13:36 +0300 | [diff] [blame] | 29 | ram_range(dev, 0, (uintptr_t)_dram, sdram_size()); |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 30 | } |
| 31 | |
Elyes HAOUAS | b442669 | 2018-05-25 10:09:55 +0200 | [diff] [blame] | 32 | static void soc_init(struct device *dev) |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 33 | { |
| 34 | } |
| 35 | |
| 36 | static struct device_operations soc_ops = { |
| 37 | .read_resources = soc_read_resources, |
Yu-Ping Wu | 39e6f85 | 2022-03-14 16:53:59 +0800 | [diff] [blame] | 38 | .set_resources = noop_set_resources, |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 39 | .init = soc_init, |
| 40 | }; |
| 41 | |
Elyes HAOUAS | b442669 | 2018-05-25 10:09:55 +0200 | [diff] [blame] | 42 | static void enable_soc_dev(struct device *dev) |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 43 | { |
| 44 | dev->ops = &soc_ops; |
| 45 | } |
| 46 | |
| 47 | struct chip_operations soc_mediatek_mt8173_ops = { |
Nicholas Sudsgaard | bfb11be | 2024-01-30 09:53:46 +0900 | [diff] [blame^] | 48 | .name = "SOC Mediatek MT8173", |
Yidi Lin | 47a9af4 | 2016-03-28 15:16:45 +0800 | [diff] [blame] | 49 | .enable_dev = enable_soc_dev, |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 50 | }; |