forked from apache/nuttx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
1,930 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/include/qemu-rv/irq.h | ||
* | ||
* 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. | ||
* | ||
****************************************************************************/ | ||
|
||
#ifndef __ARCH_RISCV_INCLUDE_QEMU_RV_IRQ_H | ||
#define __ARCH_RISCV_INCLUDE_QEMU_RV_IRQ_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Map RISC-V exception code to NuttX IRQ */ | ||
|
||
#define NR_IRQS (RISCV_IRQ_SEXT + 127) | ||
|
||
#endif /* __ARCH_RISCV_INCLUDE_QEMU_RV_IRQ_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
############################################################################ | ||
# arch/risc-v/src/qemu-rv/Make.defs | ||
# | ||
# 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. | ||
# | ||
############################################################################ | ||
|
||
include common/Make.defs | ||
|
||
# Specify our HEAD assembly file. This will be linked as | ||
# the first object file, so it will appear at address 0 | ||
HEAD_ASRC = qemu_rv_head.S | ||
|
||
# Specify our C code within this directory to be included | ||
CHIP_CSRCS = qemu_rv_start.c qemu_rv_irq_dispatch.c qemu_rv_irq.c | ||
CHIP_CSRCS += qemu_rv_timerisr.c qemu_rv_allocateheap.c | ||
CHIP_CSRCS += qemu_rv_mm_init.c qemu_rv_pgalloc.c |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/src/qemu-rv/chip.h | ||
* | ||
* 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. | ||
* | ||
****************************************************************************/ | ||
|
||
#ifndef __ARCH_RISCV_SRC_QEMU_RV_CHIP_H | ||
#define __ARCH_RISCV_SRC_QEMU_RV_CHIP_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
/* Include the chip capabilities file */ | ||
|
||
#include <arch/qemu-rv/chip.h> | ||
|
||
#include "qemu_rv_memorymap.h" | ||
|
||
#include "hardware/qemu_rv_memorymap.h" | ||
#include "hardware/qemu_rv_plic.h" | ||
|
||
#include "riscv_internal.h" | ||
#include "riscv_percpu.h" | ||
|
||
/**************************************************************************** | ||
* Macro Definitions | ||
****************************************************************************/ | ||
|
||
#ifdef __ASSEMBLY__ | ||
|
||
/**************************************************************************** | ||
* Name: setintstack | ||
* | ||
* Description: | ||
* Set the current stack pointer to the "top" the correct interrupt stack | ||
* for the current CPU. | ||
* | ||
****************************************************************************/ | ||
|
||
#if defined(CONFIG_SMP) && CONFIG_ARCH_INTERRUPTSTACK > 15 | ||
.macro setintstack tmp0, tmp1 | ||
riscv_mhartid \tmp0 | ||
li \tmp1, STACK_ALIGN_DOWN(CONFIG_ARCH_INTERRUPTSTACK) | ||
mul \tmp1, \tmp0, \tmp1 | ||
la \tmp0, g_intstacktop | ||
sub sp, \tmp0, \tmp1 | ||
.endm | ||
#endif /* CONFIG_SMP && CONFIG_ARCH_INTERRUPTSTACK > 15 */ | ||
|
||
#if CONFIG_ARCH_INTERRUPTSTACK > 15 | ||
#if !defined(CONFIG_SMP) && defined(CONFIG_ARCH_USE_S_MODE) | ||
.macro setintstack tmp0, tmp1 | ||
csrr \tmp0, CSR_SCRATCH | ||
REGLOAD sp, RISCV_PERCPU_IRQSTACK(\tmp0) | ||
.endm | ||
#endif /* !defined(CONFIG_SMP) && defined(CONFIG_ARCH_USE_S_MODE) */ | ||
#endif /* CONFIG_ARCH_INTERRUPTSTACK > 15 */ | ||
|
||
#endif /* __ASSEMBLY__ */ | ||
#endif /* __ARCH_RISCV_SRC_QEMU_RV_CHIP_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/src/qemu-rv/hardware/qemu_rv_memorymap.h | ||
* | ||
* 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. | ||
* | ||
****************************************************************************/ | ||
|
||
#ifndef __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_MEMORYMAP_H | ||
#define __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_MEMORYMAP_H | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Register Base Address ****************************************************/ | ||
|
||
#define QEMU_RV_PLIC_BASE 0x0c000000 | ||
|
||
#endif /* __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_MEMORYMAP_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/src/qemu-rv/hardware/qemu_rv_plic.h | ||
* | ||
* 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. | ||
* | ||
****************************************************************************/ | ||
|
||
#ifndef __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_PLIC_H | ||
#define __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_PLIC_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
#include <nuttx/config.h> | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Interrupt Priority */ | ||
|
||
#define QEMU_RV_PLIC_PRIORITY (QEMU_RV_PLIC_BASE + 0x000000) | ||
|
||
/* Hart 1 S-Mode Interrupt Enable */ | ||
|
||
#define QEMU_RV_PLIC_ENABLE1 (QEMU_RV_PLIC_BASE + 0x002100) | ||
#define QEMU_RV_PLIC_ENABLE2 (QEMU_RV_PLIC_BASE + 0x002104) | ||
|
||
/* Hart 1 S-Mode Priority Threshold */ | ||
|
||
#define QEMU_RV_PLIC_THRESHOLD (QEMU_RV_PLIC_BASE + 0x202000) | ||
|
||
/* Hart 1 S-Mode Claim / Complete */ | ||
|
||
#define QEMU_RV_PLIC_CLAIM (QEMU_RV_PLIC_BASE + 0x202004) | ||
|
||
#endif /* __ARCH_RISCV_SRC_QEMU_RV_HARDWARE_QEMU_RV_PLIC_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/src/qemu-rv/qemu_rv_allocateheap.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 <nuttx/config.h> | ||
|
||
#include <nuttx/kmalloc.h> | ||
#include <nuttx/userspace.h> | ||
|
||
#include <nuttx/arch.h> | ||
|
||
#ifdef CONFIG_MM_KERNEL_HEAP | ||
#include <arch/board/board_memorymap.h> | ||
#endif | ||
|
||
#include "riscv_internal.h" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
#ifdef CONFIG_MM_KERNEL_HEAP | ||
#define KRAM_END KSRAM_END | ||
#else | ||
#define KRAM_END CONFIG_RAM_END | ||
#endif | ||
|
||
/**************************************************************************** | ||
* Public Data | ||
****************************************************************************/ | ||
|
||
/**************************************************************************** | ||
* Public Functions | ||
****************************************************************************/ | ||
|
||
/**************************************************************************** | ||
* Name: up_allocate_heap | ||
* | ||
* Description: | ||
* This function will be called to dynamically set aside the heap region. | ||
* | ||
* For the kernel build (CONFIG_BUILD_PROTECTED=y) with both kernel- and | ||
* user-space heaps (CONFIG_MM_KERNEL_HEAP=y), this function provides the | ||
* size of the unprotected, user-space heap. | ||
* | ||
* If a protected kernel-space heap is provided, the kernel heap must be | ||
* allocated (and protected) by an analogous up_allocate_kheap(). | ||
* | ||
* The following memory map is assumed for the flat build: | ||
* | ||
* .data region. Size determined at link time. | ||
* .bss region Size determined at link time. | ||
* IDLE thread stack. Size determined by CONFIG_IDLETHREAD_STACKSIZE. | ||
* Heap. Extends to the end of User SRAM. | ||
* | ||
* The following memory map is assumed for the protect build. | ||
* The kernel and user space have it's own dedicated heap space. | ||
* | ||
* User .data region Size determined at link time | ||
* User .bss region Size determined at link time | ||
* User heap Extends to the end of User SRAM | ||
* Kernel .data region Size determined at link time | ||
* Kernel .bss region Size determined at link time | ||
* Kernel IDLE thread stack Size determined by CONFIG_IDLETHREAD_STACKSIZE | ||
* Kernel heap Size determined by CONFIG_MM_KERNEL_HEAPSIZE | ||
* | ||
****************************************************************************/ | ||
|
||
void up_allocate_kheap(void **heap_start, size_t *heap_size) | ||
{ | ||
#if defined(CONFIG_BUILD_PROTECTED) && defined(CONFIG_MM_KERNEL_HEAP) | ||
/* Get the size and position of the user-space heap. | ||
* This heap begins after the user-space .bss section. | ||
*/ | ||
|
||
uintptr_t ubase = (uintptr_t)USERSPACE->us_bssend; | ||
size_t usize = (uintptr_t)USERSPACE->us_heapend - ubase; | ||
|
||
/* Return the user-space heap settings */ | ||
|
||
*heap_start = (void *)ubase; | ||
*heap_size = usize; | ||
|
||
/* Allow user-mode access to the user heap memory in PMP | ||
* is already done in qemu_rv_userspace(). | ||
*/ | ||
|
||
#else | ||
/* Return the heap settings */ | ||
|
||
*heap_start = (void *)g_idle_topstack; | ||
*heap_size = KRAM_END - g_idle_topstack; | ||
#endif /* CONFIG_BUILD_PROTECTED && CONFIG_MM_KERNEL_HEAP */ | ||
} | ||
|
||
/**************************************************************************** | ||
* Name: up_allocate_kheap | ||
* | ||
* Description: | ||
* For the kernel build (CONFIG_BUILD_PROTECTED=y) with both kernel- and | ||
* user-space heaps (CONFIG_MM_KERNEL_HEAP=y), this function allocates | ||
* (and protects) the kernel-space heap. | ||
* | ||
****************************************************************************/ | ||
|
||
#if defined(CONFIG_BUILD_PROTECTED) && defined(CONFIG_MM_KERNEL_HEAP) && \ | ||
defined(__KERNEL__) | ||
void up_allocate_kheap(void **heap_start, size_t *heap_size) | ||
{ | ||
/* Return the kernel heap settings. */ | ||
|
||
*heap_start = (void *)g_idle_topstack; | ||
*heap_size = KRAM_END - g_idle_topstack; | ||
} | ||
#endif /* CONFIG_BUILD_PROTECTED && CONFIG_MM_KERNEL_HEAP */ | ||
|
||
/**************************************************************************** | ||
* Name: riscv_addregion | ||
****************************************************************************/ | ||
|
||
#if CONFIG_MM_REGIONS > 1 | ||
void riscv_addregion(void) | ||
{ | ||
} | ||
#endif |
Oops, something went wrong.