forked from Imagelibrary/rtems
bsp/leon3: Add LEON3_APBUART_BASE
This commit is contained in:
@@ -38,20 +38,27 @@
|
|||||||
#include <bsp/leon3.h>
|
#include <bsp/leon3.h>
|
||||||
#include <rtems/bspIo.h>
|
#include <rtems/bspIo.h>
|
||||||
#include <rtems/sysinit.h>
|
#include <rtems/sysinit.h>
|
||||||
#include <rtems/score/thread.h>
|
|
||||||
#include <grlib/apbuart.h>
|
#include <grlib/apbuart.h>
|
||||||
#include <grlib/io.h>
|
#include <grlib/io.h>
|
||||||
|
|
||||||
|
#if !defined(LEON3_APBUART_BASE)
|
||||||
#include <grlib/ambapp.h>
|
#include <grlib/ambapp.h>
|
||||||
|
|
||||||
int leon3_debug_uart_index __attribute__((weak)) = 0;
|
int leon3_debug_uart_index __attribute__((weak)) = 0;
|
||||||
|
|
||||||
apbuart *leon3_debug_uart = NULL;
|
apbuart *leon3_debug_uart = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
static void bsp_debug_uart_init(void);
|
static void bsp_debug_uart_init(void);
|
||||||
|
|
||||||
static void bsp_debug_uart_discard(char c)
|
static void apbuart_enable_receive_and_transmit(apbuart *regs)
|
||||||
{
|
{
|
||||||
(void) c;
|
uint32_t ctrl;
|
||||||
|
|
||||||
|
ctrl = grlib_load_32(®s->ctrl);
|
||||||
|
ctrl |= APBUART_CTRL_RE | APBUART_CTRL_TE;
|
||||||
|
grlib_store_32(®s->ctrl, ctrl);
|
||||||
|
grlib_store_32(®s->status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bsp_debug_uart_output_char(char c)
|
static void bsp_debug_uart_output_char(char c)
|
||||||
@@ -71,6 +78,22 @@ static void bsp_debug_uart_pre_init_out(char c)
|
|||||||
(*BSP_output_char)(c);
|
(*BSP_output_char)(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(LEON3_APBUART_BASE)
|
||||||
|
|
||||||
|
static void bsp_debug_uart_init(void)
|
||||||
|
{
|
||||||
|
apbuart_enable_receive_and_transmit(leon3_debug_uart);
|
||||||
|
BSP_poll_char = bsp_debug_uart_poll_char;
|
||||||
|
BSP_output_char = bsp_debug_uart_output_char;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !LEON3_APBUART_BASE */
|
||||||
|
|
||||||
|
static void bsp_debug_uart_discard(char c)
|
||||||
|
{
|
||||||
|
(void) c;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
|
/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
|
||||||
* for a debug APBUART and enable RX/TX for that UART.
|
* for a debug APBUART and enable RX/TX for that UART.
|
||||||
*/
|
*/
|
||||||
@@ -108,7 +131,6 @@ static void bsp_debug_uart_init(void)
|
|||||||
ambapp_find_by_idx, (void *)&i);
|
ambapp_find_by_idx, (void *)&i);
|
||||||
if (adev != NULL) {
|
if (adev != NULL) {
|
||||||
struct ambapp_apb_info *apb;
|
struct ambapp_apb_info *apb;
|
||||||
uint32_t ctrl;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Found a matching debug console, initialize debug UART if present for
|
* Found a matching debug console, initialize debug UART if present for
|
||||||
@@ -116,16 +138,15 @@ static void bsp_debug_uart_init(void)
|
|||||||
*/
|
*/
|
||||||
apb = (struct ambapp_apb_info *)adev->devinfo;
|
apb = (struct ambapp_apb_info *)adev->devinfo;
|
||||||
leon3_debug_uart = (apbuart *)apb->start;
|
leon3_debug_uart = (apbuart *)apb->start;
|
||||||
ctrl = grlib_load_32(&leon3_debug_uart->ctrl);
|
apbuart_enable_receive_and_transmit(leon3_debug_uart);
|
||||||
ctrl |= APBUART_CTRL_RE | APBUART_CTRL_TE;
|
|
||||||
grlib_store_32(&leon3_debug_uart->ctrl, ctrl);
|
|
||||||
grlib_store_32(&leon3_debug_uart->status, 0);
|
|
||||||
|
|
||||||
BSP_poll_char = bsp_debug_uart_poll_char;
|
BSP_poll_char = bsp_debug_uart_poll_char;
|
||||||
BSP_output_char = bsp_debug_uart_output_char;
|
BSP_output_char = bsp_debug_uart_output_char;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* LEON3_APBUART_BASE */
|
||||||
|
|
||||||
RTEMS_SYSINIT_ITEM(
|
RTEMS_SYSINIT_ITEM(
|
||||||
bsp_debug_uart_init,
|
bsp_debug_uart_init,
|
||||||
RTEMS_SYSINIT_BSP_START,
|
RTEMS_SYSINIT_BSP_START,
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
#include <grlib/apbuart-regs.h>
|
#include <grlib/apbuart-regs.h>
|
||||||
#include <grlib/gptimer-regs.h>
|
#include <grlib/gptimer-regs.h>
|
||||||
|
|
||||||
|
#include <bspopts.h>
|
||||||
#include <bsp/irqimpl.h>
|
#include <bsp/irqimpl.h>
|
||||||
|
|
||||||
#include <grlib/ambapp.h>
|
#include <grlib/ambapp.h>
|
||||||
@@ -266,7 +267,11 @@ static inline uint32_t leon3_up_counter_frequency( void )
|
|||||||
/**
|
/**
|
||||||
* @brief This pointer provides the debug APBUART register block address.
|
* @brief This pointer provides the debug APBUART register block address.
|
||||||
*/
|
*/
|
||||||
|
#if defined(LEON3_APBUART_BASE)
|
||||||
|
#define leon3_debug_uart ((struct apbuart *) LEON3_APBUART_BASE)
|
||||||
|
#else
|
||||||
extern apbuart *leon3_debug_uart;
|
extern apbuart *leon3_debug_uart;
|
||||||
|
#endif
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ static inline unsigned int leon_r32_no_cache(uintptr_t addr)
|
|||||||
*/
|
*/
|
||||||
extern int syscon_uart_index;
|
extern int syscon_uart_index;
|
||||||
|
|
||||||
|
#if !defined(LEON3_APBUART_BASE)
|
||||||
/* Let user override which on-chip APBUART will be debug UART
|
/* Let user override which on-chip APBUART will be debug UART
|
||||||
* 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
|
* 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
|
||||||
* 1 = APBUART[0]
|
* 1 = APBUART[0]
|
||||||
@@ -337,6 +338,7 @@ extern int syscon_uart_index;
|
|||||||
* ...
|
* ...
|
||||||
*/
|
*/
|
||||||
extern int leon3_debug_uart_index;
|
extern int leon3_debug_uart_index;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Let user override which on-chip TIMER core will be used for system clock
|
/* Let user override which on-chip TIMER core will be used for system clock
|
||||||
* timer. This controls which timer core will be accociated with
|
* timer. This controls which timer core will be accociated with
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ links:
|
|||||||
uid: objmpci
|
uid: objmpci
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
uid: objsmp
|
uid: objsmp
|
||||||
|
- role: build-dependency
|
||||||
|
uid: optapbuartbase
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
uid: optconirq
|
uid: optconirq
|
||||||
- role: build-dependency
|
- role: build-dependency
|
||||||
|
|||||||
20
spec/build/bsps/sparc/leon3/optapbuartbase.yml
Normal file
20
spec/build/bsps/sparc/leon3/optapbuartbase.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
|
||||||
|
copyrights:
|
||||||
|
- Copyright (C) 2021 embedded brains GmbH & Co. KG
|
||||||
|
actions:
|
||||||
|
- get-integer: null
|
||||||
|
- format-and-define: null
|
||||||
|
build-type: option
|
||||||
|
default:
|
||||||
|
- enabled-by: sparc/gr712rc
|
||||||
|
value: 0x80000100
|
||||||
|
- enabled-by: sparc/gr740
|
||||||
|
value: 0xff900000
|
||||||
|
enabled-by: true
|
||||||
|
format: '{:#010x}'
|
||||||
|
links: []
|
||||||
|
name: LEON3_APBUART_BASE
|
||||||
|
description: |
|
||||||
|
This option defines the base address of the debug/console APBUART register
|
||||||
|
block.
|
||||||
|
type: build
|
||||||
Reference in New Issue
Block a user