blob: 96fcb9f95b084a75c92c94c59575c0cc9a401214 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#include "sw/device/lib/ibex_peri.h"
#include "sw/device/lib/base/mmio.h"
#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
#include "rv_core_ibex_peri_regs.h"
void init_translation(uint32_t src_addr, uint32_t size, uint32_t dst_addr) {
mmio_region_t ibex_base =
mmio_region_from_addr(TOP_EARLGREY_RV_CORE_IBEX_PERI_BASE_ADDR);
uint32_t mask = src_addr | ((size - 1) >> 1);
mmio_region_write32(ibex_base,
RV_CORE_IBEX_PERI_IBUS_ADDR_MATCHING_0_REG_OFFSET, mask);
mmio_region_write32(ibex_base,
RV_CORE_IBEX_PERI_DBUS_ADDR_MATCHING_0_REG_OFFSET, mask);
mmio_region_write32(ibex_base, RV_CORE_IBEX_PERI_IBUS_REMAP_ADDR_0_REG_OFFSET,
dst_addr);
mmio_region_write32(ibex_base, RV_CORE_IBEX_PERI_DBUS_REMAP_ADDR_0_REG_OFFSET,
dst_addr);
mmio_region_write32(ibex_base, RV_CORE_IBEX_PERI_IBUS_ADDR_EN_0_REG_OFFSET,
1);
mmio_region_write32(ibex_base, RV_CORE_IBEX_PERI_DBUS_ADDR_EN_0_REG_OFFSET,
1);
}