// 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);
}
