162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Realtek RTD1195
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2017-2019 Andreas Färber
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/memblock.h>
962306a36Sopenharmony_ci#include <asm/mach/arch.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistatic void __init rtd1195_memblock_remove(phys_addr_t base, phys_addr_t size)
1262306a36Sopenharmony_ci{
1362306a36Sopenharmony_ci	int ret;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	ret = memblock_remove(base, size);
1662306a36Sopenharmony_ci	if (ret)
1762306a36Sopenharmony_ci		pr_err("Failed to remove memblock %pa (%d)\n", &base, ret);
1862306a36Sopenharmony_ci}
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistatic void __init rtd1195_reserve(void)
2162306a36Sopenharmony_ci{
2262306a36Sopenharmony_ci	/* Exclude boot ROM from RAM */
2362306a36Sopenharmony_ci	rtd1195_memblock_remove(0x00000000, 0x0000a800);
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	/* Exclude peripheral register spaces from RAM */
2662306a36Sopenharmony_ci	rtd1195_memblock_remove(0x18000000, 0x00070000);
2762306a36Sopenharmony_ci	rtd1195_memblock_remove(0x18100000, 0x01000000);
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistatic const char *const rtd1195_dt_compat[] __initconst = {
3162306a36Sopenharmony_ci	"realtek,rtd1195",
3262306a36Sopenharmony_ci	NULL
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciDT_MACHINE_START(rtd1195, "Realtek RTD1195")
3662306a36Sopenharmony_ci	.dt_compat = rtd1195_dt_compat,
3762306a36Sopenharmony_ci	.reserve = rtd1195_reserve,
3862306a36Sopenharmony_ci	.l2c_aux_val = 0x0,
3962306a36Sopenharmony_ci	.l2c_aux_mask = ~0x0,
4062306a36Sopenharmony_ciMACHINE_END
41