Skip to content

Commit 1d3c44b

Browse files
authored
Merge pull request #52 from ucb-bar/freertos
ADD: port FreeRTOS
2 parents 7e423fb + f2a533d commit 1d3c44b

File tree

17 files changed

+672
-28
lines changed

17 files changed

+672
-28
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@
22
build/
33
*.log
44
*.afdo
5-
*.txt

CMakeLists.txt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ option(PROF_COV "Build with profiling and coverage" OF
3535
option(GCNO_ONLY "Only build gcno files" OFF )
3636
option(USE_PGO "Build with profile guided optimization" OFF )
3737
option(OPT_INFO "Build with optimization information" OFF )
38+
39+
option(USE_FREERTOS "Build with FreeRTOS" OFF )
3840
# Define the variable with a default empty value
3941
set(AFDO_PATH "" CACHE STRING "Path to autofdo profile data")
4042
#################################
@@ -132,10 +134,6 @@ add_executable(app
132134

133135
target_include_directories(app PUBLIC app/include)
134136

135-
# add std lib path
136-
include_directories(/scratch/iansseijelly/chipyard/.conda-env/riscv-tools/riscv64-unknown-elf/include)
137-
link_directories(/scratch/iansseijelly/chipyard/.conda-env/riscv-tools/riscv64-unknown-elf/lib)
138-
139137
#################################
140138
# Dependencies
141139
#################################

driver/rocket-chip/l_trace_encoder/l_trace_encoder.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ void l_trace_sink_dma_configure_addr(LTraceSinkDmaType *sink_dma, uint64_t dma_a
77
void l_trace_sink_dma_read(LTraceSinkDmaType *sink_dma, uint8_t *buffer) {
88
sink_dma->TR_SK_DMA_FLUSH = 1;
99
while (sink_dma->TR_SK_DMA_FLUSH_DONE == 0) {
10-
;
10+
// printf("waiting for flush done\n");
1111
}
1212
// printf("[l_trace_sink_dma_read] flush done\n");
1313
uint64_t count = sink_dma->TR_SK_DMA_COUNT;

driver/rocket-chip/l_trace_encoder/l_trace_encoder.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@
77
#include "rocketcore.h"
88

99
typedef struct {
10-
uint32_t TR_TE_CTRL;
11-
uint32_t TR_TE_TARGET;
12-
uint32_t TR_TE_HPM_COUNTER;
13-
uint32_t TR_TE_HPM_TIME;
10+
__IO uint32_t TR_TE_CTRL; //0x00
11+
__I uint32_t TR_TE_INFO; //0x04
12+
__IO uint32_t TR_TE_BUBBLE[6]; //0x08-0x1C
13+
__IO uint32_t TR_TE_TARGET; //0x20
14+
__IO uint32_t TR_TE_HPM_COUNTER; //0x24
15+
__IO uint32_t TR_TE_HPM_TIME; //0x28
1416
} LTraceEncoderType;
1517

1618
typedef struct {
17-
uint32_t TR_SK_DMA_FLUSH;
18-
uint32_t TR_SK_DMA_FLUSH_DONE;
19-
uint64_t TR_SK_DMA_ADDR;
20-
uint64_t TR_SK_DMA_COUNT;
19+
__IO uint32_t TR_SK_DMA_FLUSH;
20+
__I uint32_t TR_SK_DMA_FLUSH_DONE;
21+
__IO uint64_t TR_SK_DMA_ADDR;
22+
__I uint64_t TR_SK_DMA_COUNT;
2123
} LTraceSinkDmaType;
2224

2325
#define TARGET_PRINT 0x0

examples/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
add_subdirectory(blinky)
22
add_subdirectory(embench)
3-
add_subdirectory(pmu-tests)
3+
add_subdirectory(pmu-tests)
4+
add_subdirectory(freertos)

examples/freertos/CMakeLists.txt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
if (USE_FREERTOS)
2+
3+
include(FetchContent)
4+
5+
FetchContent_Declare( freertos_kernel
6+
GIT_REPOSITORY https://github.com/FreeRTOS/FreeRTOS-Kernel.git
7+
GIT_TAG V11.1.0
8+
)
9+
10+
add_library(freertos_config INTERFACE)
11+
12+
target_include_directories(freertos_config SYSTEM
13+
INTERFACE
14+
include
15+
)
16+
17+
target_compile_definitions(freertos_config
18+
INTERFACE
19+
projCOVERAGE_TEST=0
20+
)
21+
22+
set( FREERTOS_HEAP "4" CACHE STRING "" FORCE)
23+
# Select the native compile PORT
24+
set( FREERTOS_PORT "GCC_RISC_V" CACHE STRING "" FORCE)
25+
26+
FetchContent_MakeAvailable(freertos_kernel)
27+
28+
add_executable(freertos_demo src/main.c src/main_blinky.c src/riscv-virt.c)
29+
30+
target_include_directories(freertos_demo PRIVATE
31+
${freertos_kernel_SOURCE_DIR}/include
32+
${CMAKE_CURRENT_SOURCE_DIR}/config # For FreeRTOSConfig.h
33+
)
34+
35+
target_link_libraries(freertos_demo
36+
PUBLIC freertos_kernel freertos_config
37+
PUBLIC chip-config
38+
PUBLIC l_trace_encoder
39+
)
40+
41+
target_link_libraries(freertos_demo PRIVATE
42+
-L${CMAKE_BINARY_DIR}/glossy -Wl,--whole-archive glossy -Wl,--no-whole-archive
43+
)
44+
45+
endif()
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* FreeRTOS V202212.00
3+
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
*
22+
* https://www.FreeRTOS.org
23+
* https://github.com/FreeRTOS
24+
*
25+
*/
26+
27+
#ifndef FREERTOS_CONFIG_H
28+
#define FREERTOS_CONFIG_H
29+
30+
#include "riscv-virt.h"
31+
32+
/*-----------------------------------------------------------
33+
* Application specific definitions.
34+
*
35+
* These definitions should be adjusted for your particular hardware and
36+
* application requirements.
37+
*
38+
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
39+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
40+
*
41+
* See http://www.freertos.org/a00110.html.
42+
*----------------------------------------------------------*/
43+
44+
/* See https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html */
45+
#define configMTIME_BASE_ADDRESS ( CLINT_ADDR + CLINT_MTIME )
46+
#define configMTIMECMP_BASE_ADDRESS ( CLINT_ADDR + CLINT_MTIMECMP )
47+
48+
#define configUSE_PREEMPTION 1
49+
#define configUSE_IDLE_HOOK 0
50+
#define configUSE_TICK_HOOK 1
51+
#define configCPU_CLOCK_HZ ( 1000000000 )
52+
#define configTICK_RATE_HZ ( ( TickType_t ) 100000 )
53+
#define configMAX_PRIORITIES ( 7 )
54+
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 512 )
55+
#define configTOTAL_HEAP_SIZE ( ( size_t ) 64500 )
56+
#define configMAX_TASK_NAME_LEN ( 16 )
57+
#define configUSE_TRACE_FACILITY 0
58+
#define configUSE_16_BIT_TICKS 0
59+
#define configIDLE_SHOULD_YIELD 0
60+
#define configUSE_MUTEXES 1
61+
#define configQUEUE_REGISTRY_SIZE 8
62+
#define configCHECK_FOR_STACK_OVERFLOW 2
63+
#define configUSE_RECURSIVE_MUTEXES 1
64+
#define configUSE_MALLOC_FAILED_HOOK 1
65+
#define configUSE_APPLICATION_TASK_TAG 0
66+
#define configUSE_COUNTING_SEMAPHORES 1
67+
#define configGENERATE_RUN_TIME_STATS 0
68+
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
69+
70+
/* Co-routine definitions. */
71+
#define configUSE_CO_ROUTINES 0
72+
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
73+
74+
/* Software timer definitions. */
75+
#define configUSE_TIMERS 1
76+
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
77+
#define configTIMER_QUEUE_LENGTH 6
78+
#define configTIMER_TASK_STACK_DEPTH ( 110 )
79+
80+
/* RISC-V definitions. */
81+
#define configISR_STACK_SIZE_WORDS 2048
82+
83+
/* Task priorities. Allow these to be overridden. */
84+
#ifndef uartPRIMARY_PRIORITY
85+
#define uartPRIMARY_PRIORITY ( configMAX_PRIORITIES - 3 )
86+
#endif
87+
88+
/* Set the following definitions to 1 to include the API function, or zero
89+
to exclude the API function. */
90+
#define INCLUDE_vTaskPrioritySet 1
91+
#define INCLUDE_uxTaskPriorityGet 1
92+
#define INCLUDE_vTaskDelete 1
93+
#define INCLUDE_vTaskCleanUpResources 1
94+
#define INCLUDE_vTaskSuspend 1
95+
#define INCLUDE_vTaskDelayUntil 1
96+
#define INCLUDE_vTaskDelay 1
97+
#define INCLUDE_eTaskGetState 1
98+
#define INCLUDE_xTimerPendFunctionCall 1
99+
#define INCLUDE_xTaskAbortDelay 1
100+
#define INCLUDE_xTaskGetHandle 1
101+
#define INCLUDE_xSemaphoreGetMutexHolder 1
102+
103+
#endif /* FREERTOS_CONFIG_H */
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* FreeRTOS V202212.00
3+
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
*
22+
* https://www.FreeRTOS.org
23+
* https://github.com/FreeRTOS
24+
*
25+
*/
26+
27+
#ifndef RISCV_REG_H_
28+
#define RISCV_REG_H_
29+
30+
// we only target 64-bit riscv
31+
#define REGSIZE 8
32+
#define REGSHIFT 3
33+
#define LOAD ld
34+
#define STOR sd
35+
36+
#endif /* RISCV_REG_H_ */
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* FreeRTOS V202212.00
3+
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21+
*
22+
* https://www.FreeRTOS.org
23+
* https://github.com/FreeRTOS
24+
*
25+
*/
26+
27+
#ifndef RISCV_VIRT_H_
28+
#define RISCV_VIRT_H_
29+
30+
#include "riscv-reg.h"
31+
32+
#ifdef __ASSEMBLER__
33+
#define CONS(NUM, TYPE)NUM
34+
#else
35+
#define CONS(NUM, TYPE)NUM##TYPE
36+
#endif /* __ASSEMBLER__ */
37+
38+
#define PRIM_HART 0
39+
40+
#define CLINT_ADDR CONS(0x02000000, UL)
41+
#define CLINT_MSIP CONS(0x0000, UL)
42+
#define CLINT_MTIMECMP CONS(0x4000, UL)
43+
#define CLINT_MTIME CONS(0xbff8, UL)
44+
45+
#ifndef __ASSEMBLER__
46+
47+
int xGetCoreID( void );
48+
void vSendString( const char * s );
49+
50+
#endif /* __ASSEMBLER__ */
51+
52+
#endif /* RISCV_VIRT_H_ */

0 commit comments

Comments
 (0)