[PATCH v1 1/4] bsps: Fix xqspipsu build issues on versal

Kinsey Moore kinsey.moore at oarcorp.com
Thu Oct 19 12:34:37 UTC 2023


Files imported from Xilinx's embeddedsw repository into RTEMS are treated
much like imports in libbsd such that modifications should be purely
additive and gated by "#ifdef __rtems__" to maintain the ability to update
them easily.

A better way to accomplish the goal of this patch would be to define a BSP
option "versal" to trigger the macros you're targeting here since bspopts.h
is included via xparameters.h which is included (indirectly) in all the
files modified in this patch. This would avoid any modifications to these
source files at all.

Kinsey

On Thu, Oct 19, 2023 at 12:43 AM <aaron.nyholm at unfoldedeffective.com> wrote:

> From: Aaron Nyholm <aaron.nyholm at southerninnovation.com>
>
> ---
>  bsps/include/dev/spi/xqspipsu_hw.h     | 15 ++++++++-------
>  bsps/shared/dev/spi/xqspipsu_control.c |  7 ++++---
>  bsps/shared/dev/spi/xqspipsu_hw.c      |  5 +++--
>  bsps/shared/dev/spi/xqspipsu_options.c |  9 +++++----
>  4 files changed, 20 insertions(+), 16 deletions(-)
>
> diff --git a/bsps/include/dev/spi/xqspipsu_hw.h
> b/bsps/include/dev/spi/xqspipsu_hw.h
> index a798f9bb89..61e7b3a240 100644
> --- a/bsps/include/dev/spi/xqspipsu_hw.h
> +++ b/bsps/include/dev/spi/xqspipsu_hw.h
> @@ -43,6 +43,7 @@ extern "C" {
>
>  /***************************** Include Files
> *********************************/
>
> +#include <bsp.h>
>  #include "xil_types.h"
>  #include "xil_assert.h"
>  #include "xil_io.h"
> @@ -57,13 +58,13 @@ extern "C" {
>  /**
>   * QSPI Base Address
>   */
> -#if defined (versal)
> +#if defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>  #define XQSPIPS_BASEADDR      0XF1030000U
>  #else
>  #define XQSPIPS_BASEADDR      0XFF0F0000U
>  #endif
>
> -#if defined (versal)
> +#if defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>  #define XQSPIPSU_BASEADDR     0XF1030100U
>  #else
>  #define XQSPIPSU_BASEADDR     0xFF0F0100U
> @@ -141,7 +142,7 @@ extern "C" {
>  /**
>   * Register: XQSPIPSU_LQSPI
>   */
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>  #define XQSPIPSU_LQSPI_CR_OFFSET       0X000000A0U
>  #define XQSPIPSU_LQSPI_CR_LINEAR_MASK     0x80000000U /**< LQSPI mode
> enable */
>  #define XQSPIPSU_LQSPI_CR_TWO_MEM_MASK    0x40000000U /**< Both memories
> or one */
> @@ -503,7 +504,7 @@ extern "C" {
>
>  #define XQSPIPSU_SEL_SHIFT   0U
>  #define XQSPIPSU_SEL_WIDTH   1U
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>  #define XQSPIPSU_SEL_LQSPI_MASK    0X0U
>  #endif
>  #define XQSPIPSU_SEL_GQSPI_MASK    0X00000001U
> @@ -938,19 +939,19 @@ extern "C" {
>   * Tapdelay Bypass register
>   */
>
> -#if defined versal
> +#if defined LIBBSP_AARCH64_XILINX_VERSAL_BSP_H
>  #define IOU_TAPDLY_BYPASS_OFFSET 0X0000003CU
>  #else
>  #define IOU_TAPDLY_BYPASS_OFFSET 0X00000390U
>  #endif
>
>  #define IOU_TAPDLY_BYPASS_LQSPI_RX_SHIFT 0X02U
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>  #define IOU_TAPDLY_BYPASS_LQSPI_RX_WIDTH 0X01U
>  #define IOU_TAPDLY_BYPASS_LQSPI_RX_MASK 0x00000004U
>  #endif
>
> -#if defined versal
> +#if defined LIBBSP_AARCH64_XILINX_VERSAL_BSP_H
>  #define IOU_TAPDLY_RESET_STATE 0x4U
>  #else
>  #define IOU_TAPDLY_RESET_STATE 0x7U
> diff --git a/bsps/shared/dev/spi/xqspipsu_control.c
> b/bsps/shared/dev/spi/xqspipsu_control.c
> index af2400bf4c..f51e335b60 100644
> --- a/bsps/shared/dev/spi/xqspipsu_control.c
> +++ b/bsps/shared/dev/spi/xqspipsu_control.c
> @@ -30,6 +30,7 @@
>
>  /***************************** Include Files
> *********************************/
>
> +#include <bsp.h>
>  #include "xqspipsu_control.h"
>
>  /************************** Constant Definitions
> *****************************/
> @@ -241,7 +242,7 @@ s32 XQspipsu_Calculate_Tapdelay(const XQspiPsu
> *InstancePtr, u8 Prescaler)
>
>                 FreqDiv = (InstancePtr->Config.InputClockHz)/Divider;
>
> -#if defined (versal)
> +#if defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                 if (FreqDiv <= XQSPIPSU_FREQ_37_5MHZ) {
>  #else
>                 if (FreqDiv <= XQSPIPSU_FREQ_40MHZ) {
> @@ -252,7 +253,7 @@ s32 XQspipsu_Calculate_Tapdelay(const XQspiPsu
> *InstancePtr, u8 Prescaler)
>                         Tapdelay |= (TAPDLY_BYPASS_VALVE_100MHZ <<
>                                          IOU_TAPDLY_BYPASS_LQSPI_RX_SHIFT);
>                         LBkModeReg |= (USE_DLY_LPBK <<
> XQSPIPSU_LPBK_DLY_ADJ_USE_LPBK_SHIFT);
> -#if defined (versal)
> +#if defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                         delayReg |= (u32)USE_DATA_DLY_ADJ  <<
>
> XQSPIPSU_DATA_DLY_ADJ_USE_DATA_DLY_SHIFT;
>  #else
> @@ -261,7 +262,7 @@ s32 XQspipsu_Calculate_Tapdelay(const XQspiPsu
> *InstancePtr, u8 Prescaler)
>
> ((u32)DATA_DLY_ADJ_DLY  << XQSPIPSU_DATA_DLY_ADJ_DLY_SHIFT);
>  #endif
>                 } else if (FreqDiv <= XQSPIPSU_FREQ_150MHZ) {
> -#if defined (versal)
> +#if defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                         LBkModeReg |= (USE_DLY_LPBK  <<
> XQSPIPSU_LPBK_DLY_ADJ_USE_LPBK_SHIFT) |
>                                         (LPBK_DLY_ADJ_DLY1 <<
> XQSPIPSU_LPBK_DLY_ADJ_DLY1_SHIFT);
>  #else
> diff --git a/bsps/shared/dev/spi/xqspipsu_hw.c
> b/bsps/shared/dev/spi/xqspipsu_hw.c
> index 6f7708893f..379786ff03 100644
> --- a/bsps/shared/dev/spi/xqspipsu_hw.c
> +++ b/bsps/shared/dev/spi/xqspipsu_hw.c
> @@ -34,6 +34,7 @@
>
>  /***************************** Include Files
> *********************************/
>
> +#include <bsp.h>
>  #include "xqspipsu.h"
>  #include "xqspipsu_control.h"
>  #if defined (__aarch64__)
> @@ -744,11 +745,11 @@ s32 XQspipsu_Set_TapDelay(const XQspiPsu
> *InstancePtr, u32 TapdelayBypass,
>         if (InstancePtr->IsBusy == (u32)TRUE) {
>                 Status = (s32)XST_DEVICE_BUSY;
>         } else {
> -#if defined (__aarch64__) && (EL1_NONSECURE == 1) && !defined (versal)
> +#if defined (__aarch64__) && (EL1_NONSECURE == 1) && !defined
> (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                 Xil_Smc(MMIO_WRITE_SMC_FID, (u64)(XPS_SYS_CTRL_BASEADDR +
>                                 IOU_TAPDLY_BYPASS_OFFSET) | ((u64)(0x4) <<
> 32),
>                                 (u64)TapdelayBypass, 0, 0, 0, 0, 0);
> -#elif defined (versal)
> +#elif defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                 XQspiPsu_WriteReg(XQSPIPS_BASEADDR,
> IOU_TAPDLY_BYPASS_OFFSET,
>                                 TapdelayBypass);
>  #else
> diff --git a/bsps/shared/dev/spi/xqspipsu_options.c
> b/bsps/shared/dev/spi/xqspipsu_options.c
> index c889d64abb..d1a286173d 100644
> --- a/bsps/shared/dev/spi/xqspipsu_options.c
> +++ b/bsps/shared/dev/spi/xqspipsu_options.c
> @@ -54,6 +54,7 @@
>
>  /***************************** Include Files
> *********************************/
>
> +#include <bsp.h>
>  #include "xqspipsu_control.h"
>
>  /************************** Constant Definitions
> *****************************/
> @@ -80,7 +81,7 @@ static OptionsMap OptionsTable[] = {
>         {XQSPIPSU_CLK_ACTIVE_LOW_OPTION, XQSPIPSU_CFG_CLK_POL_MASK},
>         {XQSPIPSU_CLK_PHASE_1_OPTION, XQSPIPSU_CFG_CLK_PHA_MASK},
>         {XQSPIPSU_MANUAL_START_OPTION,
> XQSPIPSU_CFG_GEN_FIFO_START_MODE_MASK},
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>         {XQSPIPSU_LQSPI_MODE_OPTION, XQSPIPSU_CFG_WP_HOLD_MASK},
>  #endif
>  };
> @@ -117,7 +118,7 @@ s32 XQspiPsu_SetOptions(XQspiPsu *InstancePtr, u32
> Options)
>  {
>         u32 ConfigReg;
>         u32 Index;
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>         u32 QspiPsuOptions;
>  #endif
>         s32 Status;
> @@ -136,7 +137,7 @@ s32 XQspiPsu_SetOptions(XQspiPsu *InstancePtr, u32
> Options)
>         } else {
>                 ConfigReg =
> XQspiPsu_ReadReg(InstancePtr->Config.BaseAddress,
>                                               XQSPIPSU_CFG_OFFSET);
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                 QspiPsuOptions = OptionsVal & XQSPIPSU_LQSPI_MODE_OPTION;
>                 OptionsVal &= (~XQSPIPSU_LQSPI_MODE_OPTION);
>  #endif
> @@ -164,7 +165,7 @@ s32 XQspiPsu_SetOptions(XQspiPsu *InstancePtr, u32
> Options)
>                 if ((OptionsVal & XQSPIPSU_MANUAL_START_OPTION) !=
> (u32)FALSE) {
>                         InstancePtr->IsManualstart = (u8)TRUE;
>                 }
> -#if !defined (versal)
> +#if !defined (LIBBSP_AARCH64_XILINX_VERSAL_BSP_H)
>                 if ((QspiPsuOptions & XQSPIPSU_LQSPI_MODE_OPTION) !=
> (u32)FALSE) {
>                         if ((Options & XQSPIPSU_LQSPI_LESS_THEN_SIXTEENMB)
> != (u32)FALSE) {
>
> XQspiPsu_WriteReg(XQSPIPS_BASEADDR,XQSPIPSU_LQSPI_CR_OFFSET,XQSPIPS_LQSPI_CR_RST_STATE);
> --
> 2.25.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20231019/18f5bd73/attachment-0001.htm>


More information about the devel mailing list