1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (C) 2018 Synopsys, Inc. All rights reserved.
4 */
5
6#ifndef _CONFIG_IOT_DEVKIT_H_
7#define _CONFIG_IOT_DEVKIT_H_
8
9#include <linux/sizes.h>
10
11/*
12 *                         MEMORY MAP
13 *
14 * eFlash: 0x0000_0000 - 0x0008_0000 (512K)
15 *   ICCM: 0x2000_0000 - 0x2004_0000 (256K)
16 *   SRAM: 0x3000_0000 - 0x3002_0000 (128K)
17 *   DCCM: 0x8000_0000 - 0x8002_0000 (128K)
18 *     Note: only data goes here, as IFQ cannot fetch instructions from DCCM
19 *
20 *
21 *                         RAM PARTITIONING
22 *
23 *   +-----------+----------+---------------------+-------------+
24 *   | <-- Stack |  .data   | Malloc              | Environment |
25 *   +-----------+----------+---------------------+-------------+
26 *   :           :          :                     :\___________/
27 *   :           :          :                     :      |
28 *   :           :          :                     :     CONFIG_ENV_SIZE
29 *   :           :           \____________________/
30 *   :           :                     |
31 *   :           :                    CONFIG_SYS_MALLOC_LEN
32 *   :           :
33 *   :          Specified explicitly by CONFIG_CUSTOM_SYS_INIT_SP_ADDR
34 *   :
35 *  Specified explicitly by CFG_SYS_SDRAM_BASE
36 *
37 *  NOTES:
38 *    - Stack starts from CONFIG_CUSTOM_SYS_INIT_SP_ADDR and grows down,
39 *      i.e. towards CFG_SYS_SDRAM_BASE but nothing stops it from crossing
40 *      that CFG_SYS_SDRAM_BASE in which case data won't be really saved on
41 *      stack any longer and values popped from stack will contain garbage
42 *      leading to unexpected behavior, typically but not limited to:
43 *        - "Returning" back to bogus caller function
44 *        - Reading data from weird addresses
45 */
46
47#define SRAM_BASE			0x30000000
48#define SRAM_SIZE			SZ_128K
49
50#define DCCM_BASE			0x80000000
51#define DCCM_SIZE			SZ_128K
52
53#define CFG_SYS_SDRAM_BASE		DCCM_BASE
54#define CFG_SYS_SDRAM_SIZE		DCCM_SIZE
55
56#define ROM_BASE			CONFIG_SYS_MONITOR_BASE
57#define ROM_SIZE			SZ_256K
58
59#define RAM_DATA_BASE			SYS_INIT_SP_ADDR
60#define RAM_DATA_SIZE			CFG_SYS_SDRAM_SIZE - \
61					(SYS_INIT_SP_ADDR - \
62					CFG_SYS_SDRAM_BASE) - \
63					CONFIG_SYS_MALLOC_LEN - \
64					CONFIG_ENV_SIZE
65#endif /* _CONFIG_IOT_DEVKIT_H_ */
66