/****************************************************************************
 * arch/xtensa/src/esp32/esp32_region.c
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.  The
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 ****************************************************************************/

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <stdint.h>

/****************************************************************************
 * Private Data
 ****************************************************************************/

static const uint32_t g_protected_pages[] =
{
  0x00000000, 0x80000000, 0xa0000000, 0xc0000000, 0xe0000000
};

#define NPROTECTED_PAGES (sizeof(g_protected_pages)/sizeof(uint32_t))

/****************************************************************************
 * Private Functions
 ****************************************************************************/

/****************************************************************************
 * Name: xtensa_write_dtlb and xtensa_write_itlb
 *
 * Description:
 *   Functions to set page attributes for Region Protection option in the
 *   CPU.  See Xtensa ISA Reference manual for explanation of arguments
 *   (section 4.6.3.2).
 *
 ****************************************************************************/

static inline void xtensa_write_dtlb(uint32_t vpn, unsigned int attr)
{
  __asm__ __volatile__
  (
    "wdtlb  %1, %0\n"
    "dsync\n"
    : : "r" (vpn), "r" (attr)
  );
}

static inline void xtensa_write_itlb(unsigned vpn, unsigned int attr)
{
  __asm__ __volatile__
  (
    "witlb  %1, %0\n"
    "isync\n"
    : : "r" (vpn), "r" (attr)
  );
}

/****************************************************************************
 * Public Functions
 ****************************************************************************/

/****************************************************************************
 * Name: esp32_region_protection
 *
 * Description:
 *   Make page 0 access raise an exception.  Also protect some other unused
 *   pages so we can catch weirdness.
 *
 *   Useful attribute values:
 *     0  - cached, RW
 *     2  - bypass cache, RWX (default value after CPU reset)
 *     15 - no access, raise exception
 *
 ****************************************************************************/

void esp32_region_protection(void)
{
  int i;

  for (i = 0; i < NPROTECTED_PAGES; ++i)
    {
      xtensa_write_dtlb(g_protected_pages[i], 0xf);
      xtensa_write_itlb(g_protected_pages[i], 0xf);
    }

  xtensa_write_dtlb(0x20000000, 0);
  xtensa_write_itlb(0x20000000, 0);
}
