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.
arch/risc-v: Add support for SOPHGO SG2000 SoC (T-Head C906)
This PR adds support for the SOPHGO SG2000 SoC, based on T-Head C906 64-bit RISC-V Core. This will be used by the upcoming port of NuttX for Milk-V Duo S SBC. Most of the code was derived from NuttX for Ox64 BL808. The source files are explained in the articles here: https://github.com/lupyuen/nuttx-sg2000 Modified Files in arch/risc-v: `Kconfig`: Added ARCH_CHIP_SG2000 for SG2000 SoC New Files in arch/risc-v: `include/sg2000/chip.h`: SG2000 Definitions `include/sg2000/irq.h`: External Interrupts `src/sg2000/chip.h`: Interrupt Stack Macro `src/sg2000/sg2000_allocateheap.c`: Kernel Heap `src/sg2000/sg2000_head.S`: Linux Header and Boot Code `src/sg2000/sg2000_irq.c`: Configure Interrupts `src/sg2000/sg2000_irq_dispatch.c`: Dispatch Interrupts `src/sg2000/sg2000_memorymap.h`: Memory Map `src/sg2000/sg2000_mm_init.c`, `sg2000_mm_init.h`: Memory Mgmt `src/sg2000/sg2000_pgalloc.c`: Page Allocator `src/sg2000/sg2000_start.c`: Startup Code `src/sg2000/sg2000_timerisr.c`: Timer Interrupt `src/sg2000/hardware/sg2000_memorymap.h`: PLIC and UART Base Address `src/sg2000/hardware/sg2000_plic.h`: PLIC Register Addresses `src/sg2000/Kconfig`: SG2000 Config `src/sg2000/Make.defs`: Makefile
- Loading branch information
1 parent
16d1421
commit 8e30c13
Showing
18 changed files
with
1,619 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
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,24 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/include/sg2000/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_INCLUDE_SG2000_CHIP_H | ||
#define __ARCH_RISCV_INCLUDE_SG2000_CHIP_H | ||
|
||
#endif /* __ARCH_RISCV_INCLUDE_SG2000_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,36 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/include/sg2000/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_SG2000_IRQ_H | ||
#define __ARCH_RISCV_INCLUDE_SG2000_IRQ_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Map RISC-V exception code to NuttX IRQ */ | ||
|
||
#define NR_IRQS (RISCV_IRQ_SEXT + 57) | ||
|
||
#endif /* __ARCH_RISCV_INCLUDE_SG2000_IRQ_H */ |
Empty file.
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/sg2000/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 = sg2000_head.S | ||
|
||
# Specify our C code within this directory to be included | ||
CHIP_CSRCS = sg2000_start.c sg2000_irq_dispatch.c sg2000_irq.c | ||
CHIP_CSRCS += sg2000_timerisr.c sg2000_allocateheap.c | ||
CHIP_CSRCS += sg2000_mm_init.c sg2000_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/sg2000/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_SG2000_CHIP_H | ||
#define __ARCH_RISCV_SRC_SG2000_CHIP_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
/* Include the chip capabilities file */ | ||
|
||
#include <arch/sg2000/chip.h> | ||
|
||
#include "sg2000_memorymap.h" | ||
|
||
#include "hardware/sg2000_memorymap.h" | ||
#include "hardware/sg2000_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_SG2000_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/sg2000/hardware/sg2000_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_SG2000_HARDWARE_SG2000_MEMORYMAP_H | ||
#define __ARCH_RISCV_SRC_SG2000_HARDWARE_SG2000_MEMORYMAP_H | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Register Base Address ****************************************************/ | ||
|
||
#define SG2000_PLIC_BASE 0x70000000ul | ||
|
||
#endif /* __ARCH_RISCV_SRC_SG2000_HARDWARE_SG2000_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/sg2000/hardware/sg2000_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_SG2000_HARDWARE_SG2000_PLIC_H | ||
#define __ARCH_RISCV_SRC_SG2000_HARDWARE_SG2000_PLIC_H | ||
|
||
/**************************************************************************** | ||
* Included Files | ||
****************************************************************************/ | ||
|
||
#include <nuttx/config.h> | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
/* Interrupt Priority */ | ||
|
||
#define SG2000_PLIC_PRIORITY (SG2000_PLIC_BASE + 0x000000) | ||
|
||
/* Hart 0 S-Mode Interrupt Enable */ | ||
|
||
#define SG2000_PLIC_ENABLE1 (SG2000_PLIC_BASE + 0x002080) | ||
#define SG2000_PLIC_ENABLE2 (SG2000_PLIC_BASE + 0x002084) | ||
|
||
/* Hart 0 S-Mode Priority Threshold */ | ||
|
||
#define SG2000_PLIC_THRESHOLD (SG2000_PLIC_BASE + 0x201000) | ||
|
||
/* Hart 0 S-Mode Claim / Complete */ | ||
|
||
#define SG2000_PLIC_CLAIM (SG2000_PLIC_BASE + 0x201004) | ||
|
||
#endif /* __ARCH_RISCV_SRC_SG2000_HARDWARE_SG2000_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,85 @@ | ||
/**************************************************************************** | ||
* arch/risc-v/src/sg2000/sg2000_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> | ||
#include <arch/board/board_memorymap.h> | ||
#include "riscv_internal.h" | ||
|
||
/**************************************************************************** | ||
* Pre-processor Definitions | ||
****************************************************************************/ | ||
|
||
#define KRAM_END KSRAM_END | ||
|
||
/**************************************************************************** | ||
* 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) | ||
{ | ||
/* Return the heap settings */ | ||
|
||
*heap_start = (void *)g_idle_topstack; | ||
*heap_size = KRAM_END - g_idle_topstack; | ||
} |
Oops, something went wrong.