[PATCH 1/2] bsps/xqspipsu: Break out RDID

Chris Johns chrisj at rtems.org
Fri Sep 22 00:04:36 UTC 2023


OK to 1 and 2

Thanks
Chris

On 22/9/2023 7:31 am, Kinsey Moore wrote:
> Expose a function to read the NOR flash chip ID information beyond the
> minimum 3 bytes for the lookup table.
> ---
>  bsps/include/dev/spi/xqspipsu-flash-helper.h | 15 +++++++
>  bsps/shared/dev/spi/xqspipsu-flash-helper.c  | 45 +++++++++++++-------
>  2 files changed, 44 insertions(+), 16 deletions(-)
> 
> diff --git a/bsps/include/dev/spi/xqspipsu-flash-helper.h b/bsps/include/dev/spi/xqspipsu-flash-helper.h
> index 5e4233e64e..1578fe8485 100644
> --- a/bsps/include/dev/spi/xqspipsu-flash-helper.h
> +++ b/bsps/include/dev/spi/xqspipsu-flash-helper.h
> @@ -155,3 +155,18 @@ u32 QspiPsu_NOR_Get_Device_Size(XQspiPsu *QspiPsuPtr);
>   *
>   ******************************************************************************/
>  u32 QspiPsu_NOR_Get_Sector_Size(XQspiPsu *QspiPsuPtr);
> +
> +/*****************************************************************************/
> +/**
> + *
> + * This function performs a read of the RDID configuration space.
> + *
> + * @param	QspiPsuPtr is a pointer to the QSPIPSU driver component to use.
> + * @param	ReadBfrPtr is a pointer to a buffer to be filled with
> + * 		configuration data.
> + * @param	ReadLen is the total length of the configuration space to read.
> + *
> + * @return	XST_SUCCESS if successful, else XST_FAILURE.
> + *
> + ******************************************************************************/
> +int QspiPsu_NOR_RDID(XQspiPsu *QspiPsuPtr, u8 *ReadBfrPtr, u32 ReadLen);
> diff --git a/bsps/shared/dev/spi/xqspipsu-flash-helper.c b/bsps/shared/dev/spi/xqspipsu-flash-helper.c
> index c9d8273b87..0dd065f02e 100644
> --- a/bsps/shared/dev/spi/xqspipsu-flash-helper.c
> +++ b/bsps/shared/dev/spi/xqspipsu-flash-helper.c
> @@ -274,22 +274,9 @@ static void QspiPsuHandler(
>    }
>  }
>  
> -/*****************************************************************************/
> -/**
> - *
> - * Reads the flash ID and identifies the flash in FCT table.
> - *
> - * @param	QspiPsuPtr is a pointer to the QSPIPSU driver component to use.
> - *
> - * @return	XST_SUCCESS if successful, else XST_FAILURE.
> - *
> - * @note	None.
> - *
> - *****************************************************************************/
> -static int FlashReadID(XQspiPsu *QspiPsuPtr)
> +int QspiPsu_NOR_RDID(XQspiPsu *QspiPsuPtr, u8 *ReadBfrPtr, u32 ReadLen)
>  {
>    int Status;
> -  u32 ReadId = 0;
>  
>    /*
>     * Read ID
> @@ -303,7 +290,7 @@ static int FlashReadID(XQspiPsu *QspiPsuPtr)
>  
>    FlashMsg[1].TxBfrPtr = NULL;
>    FlashMsg[1].RxBfrPtr = ReadBfrPtr;
> -  FlashMsg[1].ByteCount = 3;
> +  FlashMsg[1].ByteCount = ReadLen;
>    FlashMsg[1].BusWidth = XQSPIPSU_SELECT_MODE_SPI;
>    FlashMsg[1].Flags = XQSPIPSU_MSG_FLAG_RX;
>  
> @@ -314,7 +301,33 @@ static int FlashReadID(XQspiPsu *QspiPsuPtr)
>    }
>    while (TransferInProgress);
>  
> -  rtems_cache_invalidate_multiple_data_lines(ReadBfrPtr, 3);
> +  rtems_cache_invalidate_multiple_data_lines(ReadBfrPtr, ReadLen);
> +  return XST_SUCCESS;
> +}
> +
> +/*****************************************************************************/
> +/**
> + *
> + * Reads the flash ID and identifies the flash in FCT table.
> + *
> + * @param	QspiPsuPtr is a pointer to the QSPIPSU driver component to use.
> + *
> + * @return	XST_SUCCESS if successful, else XST_FAILURE.
> + *
> + * @note	None.
> + *
> + *****************************************************************************/
> +static int FlashReadID(XQspiPsu *QspiPsuPtr)
> +{
> +  u32 ReadId = 0;
> +  u32 ReadLen = 3;
> +  int Status;
> +
> +  Status = QspiPsu_NOR_RDID(QspiPsuPtr, ReadBfrPtr, ReadLen);
> +  if (Status != XST_SUCCESS) {
> +    return XST_FAILURE;
> +  }
> +
>    /* In case of dual, read both and ensure they are same make/size */
>  
>    /*


More information about the devel mailing list