/*
 * Copyright (c) 2019 CTCaer
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _MEMORY_MAP_H_
#define _MEMORY_MAP_H_

//#define IPL_STACK_TOP  0x4003FF00
/* --- BIT/BCT: 0x40000000 - 0x40003000 --- */
/* ---     IPL: 0x40008000 - 0x40028000 --- */
#define IPL_LOAD_ADDR     0x40008000
#define  IPL_SZ_MAX          0x20000 // 128KB.
//#define IRAM_LIB_ADDR     0x4002B000
#define SDRAM_PARAMS_ADDR 0x40030000 // SDRAM extraction buffer during sdram init.
#define CBFS_DRAM_EN_ADDR 0x4003e000 // u32.

/* --- DRAM START --- */
#define DRAM_START     0x80000000
/* Do not write anything in this area */
#define NYX_LOAD_ADDR  0x81000000
#define  NYX_SZ_MAX     0x1000000
/* Stack theoretical max: 220MB */
#define IPL_STACK_TOP  0x90010000
#define IPL_HEAP_START 0x90020000
#define  IPL_HEAP_SZ   0x24FE0000 // 592MB.
/* --- Gap: 0xB5000000 - 0xB5FFFFFF --- */

// SDMMC DMA buffers
#define SDXC_BUF_ALIGNED   0xB6000000
#define MIXD_BUF_ALIGNED   0xB7000000
#define EMMC_BUF_ALIGNED   MIXD_BUF_ALIGNED
#define  SDMMC_DMA_BUF_SZ   0x1000000 // 16MB (4MB currently used).
#define SDMMC_UPPER_BUFFER 0xB8000000
#define  SDMMC_UP_BUF_SZ    0x8000000 // 128MB.

// Virtual disk / Chainloader buffers.
#define RAM_DISK_ADDR     0xC1000000
#define  RAM_DISK_SZ      0x20000000
//#define DRAM_LIB_ADDR    0xE0000000
/* --- Chnldr: 252MB 0xC03C0000 - 0xCFFFFFFF --- */ //! Only used when chainloading.
/* ---    Gap: 464MB 0xD0000000 - 0xECFFFFFF --- */

// Nyx buffers.
#define NYX_STORAGE_ADDR 0xED000000
#define NYX_RES_ADDR     0xEE000000

// Framebuffer addresses.
#define IPL_FB_ADDRESS   0xF0000000
#define  IPL_FB_SZ         0x384000 // 720 x 1280 x 4.
#define LOG_FB_ADDRESS   0xF0400000
#define  LOG_FB_SZ         0x334000 // 1280 x 656 x 4.
#define NYX_FB_ADDRESS   0xF0800000
#define  NYX_FB_SZ         0x384000 // 1280 x 720 x 4.

// Nyx LvGL buffers.
#define NYX_LV_VDB_ADR   0xF0C00000
#define  NYX_FB_SZ         0x384000 // 1280 x 720 x 4.
#define NYX_LV_MEM_ADR   0xF1000000
#define  NYX_LV_MEM_SZ    0x8000000

// NX BIS driver sector cache.
#define NX_BIS_CACHE_ADDR 0xF9000000
#define  NX_BIS_CACHE_SZ      0x8800
/* --- Gap: 111MB 0xF9008800 - 0xFFFFFFFF --- */

// #define EXT_PAYLOAD_ADDR    0xC03C0000
// #define RCM_PAYLOAD_ADDR    (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
// #define COREBOOT_ADDR       (0xD0000000 - 0x100000)

// NYX
// #define EXT_PAYLOAD_ADDR    0xC0000000
// #define RCM_PAYLOAD_ADDR    (EXT_PAYLOAD_ADDR + ALIGN(PATCHED_RELOC_SZ, 0x10))
// #define COREBOOT_ADDR       (0xD0000000 - 0x100000)

#endif