I agree with all of what you have said. I think it's best to leave this out for 
the moment and wait for the generic JFFS2 driver. If a need arises for it we 
can come back to it.

------- Original Message -------
On Friday, October 20th, 2023 at 12:43 AM, Kinsey Moore 
<kinsey.mo...@oarcorp.com> wrote:

> It looks like this is an older version of the JFFS2 XQspiPsu adapter. The 
> only real difference other than this being dated is the IRQ used. I'd rather 
> that be factored out and make the existing code shared. Beyond that, both 
> this and the ZynqMP version it was pulled from would be obviated by a generic 
> JFFS2 NOR flashdev driver which I can go ahead and post. I was hoping to make 
> it NAND compatible before posting, but I just haven't had the time. 
> Alternatively, I can send it to you for testing if you'd prefer.
>
> On Thu, Oct 19, 2023 at 12:43 AM <aaron.nyh...@unfoldedeffective.com> wrote:
>
>> From: Aaron Nyholm <aaron.nyh...@southerninnovation.com>
>>
>> ---
>> .../include/bsp/jffs2_xqspipsu.h | 62 ++++++
>> bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c | 190 ++++++++++++++++++
>> spec/build/bsps/aarch64/xilinx-versal/grp.yml | 4 +
>> .../aarch64/xilinx-versal/objjffs2qspinor.yml | 20 ++
>> .../aarch64/xilinx-versal/objxqspiflash.yml | 2 -
>> 5 files changed, 276 insertions(+), 2 deletions(-)
>> create mode 100644 bsps/aarch64/xilinx-versal/include/bsp/jffs2_xqspipsu.h
>> create mode 100644 bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c
>> create mode 100644 spec/build/bsps/aarch64/xilinx-versal/objjffs2qspinor.yml
>>
>> diff --git a/bsps/aarch64/xilinx-versal/include/bsp/jffs2_xqspipsu.h 
>> b/bsps/aarch64/xilinx-versal/include/bsp/jffs2_xqspipsu.h
>> new file mode 100644
>> index 0000000000..4a1cdac7a6
>> --- /dev/null
>> +++ b/bsps/aarch64/xilinx-versal/include/bsp/jffs2_xqspipsu.h
>> @@ -0,0 +1,62 @@
>> +/* SPDX-License-Identifier: BSD-2-Clause */
>> +
>> +/**
>> + * @file
>> + *
>> + * @ingroup RTEMSBSPsAArch64XilinxVersal
>> + *
>> + * @brief Xilinx Versal QSPI JFFS2 flash driver definitions
>> + */
>> +
>> +/*
>> + * Copyright (C) 2023 Aaron Nyholm
>> + *
>> + * Redistribution and use in source and binary forms, with or without
>> + * modification, are permitted provided that the following conditions
>> + * are met:
>> + * 1. Redistributions of source code must retain the above copyright
>> + * notice, this list of conditions and the following disclaimer.
>> + * 2. Redistributions in binary form must reproduce the above copyright
>> + * notice, this list of conditions and the following disclaimer in the
>> + * documentation and/or other materials provided with the distribution.
>> + *
>> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
>> IS"
>> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
>> PURPOSE
>> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
>> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
>> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
>> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
>> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
>> THE
>> + * POSSIBILITY OF SUCH DAMAGE.
>> + */
>> +
>> +#ifndef LIBBSP_XILINX_VERSAL_JFFS2_XQSPIPSU_H
>> +#define LIBBSP_XILINX_VERSAL_JFFS2_XQSPIPSU_H
>> +
>> +#include <dev/spi/xqspipsu.h>
>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif /* __cplusplus */
>> +
>> +/**
>> + * @brief Mount jffs2 filesystem.
>> + *
>> + * @param[in] mount_dir The directory to mount the filesystem at.
>> + * @param[in] qspipsu_ptr A pointer to an initialized QSPI instance.
>> + *
>> + * @retval 0 Successful operation. Negative number otherwise.
>> + */
>> +int xilinx_versal_nor_jffs2_initialize(
>> + const char *mount_dir,
>> + XQspiPsu *qspipsu_ptr
>> +);
>> +
>> +#ifdef __cplusplus
>> +}
>> +#endif /* __cplusplus */
>> +
>> +#endif /* LIBBSP_XILINX_VERSAL_JFFS2_XQSPIPSU_H */
>> diff --git a/bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c 
>> b/bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c
>> new file mode 100644
>> index 0000000000..c84280b420
>> --- /dev/null
>> +++ b/bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c
>> @@ -0,0 +1,190 @@
>> +/* SPDX-License-Identifier: BSD-2-Clause */
>> +
>> +/*
>> + * Copyright (C) 2023 Aaron Nyholm
>> + *
>> + * Redistribution and use in source and binary forms, with or without
>> + * modification, are permitted provided that the following conditions
>> + * are met:
>> + * 1. Redistributions of source code must retain the above copyright
>> + * notice, this list of conditions and the following disclaimer.
>> + * 2. Redistributions in binary form must reproduce the above copyright
>> + * notice, this list of conditions and the following disclaimer in the
>> + * documentation and/or other materials provided with the distribution.
>> + *
>> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
>> IS"
>> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
>> PURPOSE
>> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
>> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
>> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
>> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
>> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
>> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
>> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
>> THE
>> + * POSSIBILITY OF SUCH DAMAGE.
>> + */
>> +
>> +#include <string.h>
>> +
>> +#include <bsp/irq.h>
>> +#include <bsp/jffs2_xqspipsu.h>
>> +#include <rtems/jffs2.h>
>> +#include <rtems/libio.h>
>> +#include <xqspipsu-flash-helper.h>
>> +
>> +typedef struct {
>> + rtems_jffs2_flash_control super;
>> + XQspiPsu *qspipsu;
>> +} flash_control;
>> +
>> +#ifndef versal
>> +#define versal
>> +#endif
>> +
>> +/* From the N25Q00A datasheet */
>> +#define BLOCK_SIZE (128UL * 1024UL) //(64UL * 1024UL)
>> +#define FLASH_SIZE (512UL * BLOCK_SIZE)
>> +#define FLASH_DEVICE_ID 0xbb21 /* Type: 0xbb, Capacity: 0x21 */
>> +
>> +static flash_control *get_flash_control( rtems_jffs2_flash_control *super )
>> +{
>> + return (flash_control *) super;
>> +}
>> +
>> +static int do_read(
>> + rtems_jffs2_flash_control *super,
>> + uint32_t offset,
>> + unsigned char *buffer,
>> + size_t size_of_buffer
>> +)
>> +{
>> + int Status;
>> +
>> + flash_control *self = get_flash_control( super );
>> + XQspiPsu *QspiPsuPtr = self->qspipsu;
>> + u8* ReadBuffer = NULL;
>> +
>> + Status = QspiPsu_NOR_Read(
>> + QspiPsuPtr,
>> + offset,
>> + size_of_buffer,
>> + &ReadBuffer
>> + );
>> + if ( Status != XST_SUCCESS ) {
>> + return Status;
>> + }
>> +
>> + /*
>> + * We have to copy since we can't be sure that buffer is properly aligned.
>> + */
>> + memcpy( buffer, ReadBuffer, size_of_buffer );
>> +
>> + return 0;
>> +}
>> +
>> +static int do_write(
>> + rtems_jffs2_flash_control *super,
>> + uint32_t offset,
>> + const unsigned char *buffer,
>> + size_t size_of_buffer
>> +)
>> +{
>> + int Status;
>> +
>> + flash_control *self = get_flash_control( super );
>> + XQspiPsu *QspiPsuPtr = self->qspipsu;
>> +
>> + Status = QspiPsu_NOR_Write(
>> + QspiPsuPtr,
>> + offset,
>> + size_of_buffer,
>> + (unsigned char *) buffer
>> + );
>> + if ( Status != XST_SUCCESS ) {
>> + return Status;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static int do_erase(
>> + rtems_jffs2_flash_control *super,
>> + uint32_t offset
>> +)
>> +{
>> + int Status;
>> +
>> + flash_control *self = get_flash_control( super );
>> + XQspiPsu *QspiPsuPtr = self->qspipsu;
>> +
>> + Status = QspiPsu_NOR_Erase(
>> + QspiPsuPtr,
>> + offset,
>> + BLOCK_SIZE
>> + );
>> + if ( Status != XST_SUCCESS ) {
>> + return Status;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static void do_destroy( rtems_jffs2_flash_control *super )
>> +{
>> + flash_control *self = get_flash_control( super );
>> +
>> + rtems_interrupt_handler_remove(
>> + VERSAL_IRQ_QSPI,
>> + (rtems_interrupt_handler) XQspiPsu_InterruptHandler,
>> + self->qspipsu
>> + );
>> +}
>> +
>> +static flash_control flash_instance = {
>> + .super = {
>> + .block_size = BLOCK_SIZE,
>> + .flash_size = FLASH_SIZE,
>> + .read = do_read,
>> + .write = do_write,
>> + .erase = do_erase,
>> + .destroy = do_destroy,
>> + .device_identifier = FLASH_DEVICE_ID
>> + }
>> +};
>> +
>> +static rtems_jffs2_mount_data mount_data = {
>> + .flash_control = &flash_instance.super,
>> + .compressor_control = NULL
>> +};
>> +
>> +int xilinx_versal_nor_jffs2_initialize(
>> + const char *mount_dir,
>> + XQspiPsu *qspipsu_ptr
>> +)
>> +{
>> + int rv = 0;
>> +
>> + flash_instance.qspipsu = qspipsu_ptr;
>> +
>> + rv = QspiPsu_NOR_Initialize(
>> + flash_instance.qspipsu,
>> + VERSAL_IRQ_QSPI
>> + );
>> + if ( rv != 0 ) {
>> + return rv;
>> + }
>> +
>> + rv = mount_and_make_target_path(
>> + NULL,
>> + mount_dir,
>> + RTEMS_FILESYSTEM_TYPE_JFFS2,
>> + RTEMS_FILESYSTEM_READ_WRITE,
>> + &mount_data
>> + );
>> + if ( rv != 0 ) {
>> + return rv;
>> + }
>> +
>> + return 0;
>> +}
>> diff --git a/spec/build/bsps/aarch64/xilinx-versal/grp.yml 
>> b/spec/build/bsps/aarch64/xilinx-versal/grp.yml
>> index 098a8481db..a7e7a9442e 100644
>> --- a/spec/build/bsps/aarch64/xilinx-versal/grp.yml
>> +++ b/spec/build/bsps/aarch64/xilinx-versal/grp.yml
>> @@ -24,6 +24,10 @@ links:
>> uid: abi
>> - role: build-dependency
>> uid: obj
>> +- role: build-dependency
>> + uid: ../../objqspipsu
>> +- role: build-dependency
>> + uid: objjffs2qspinor
>> - role: build-dependency
>> uid: objxqspiflash
>> - role: build-dependency
>> diff --git a/spec/build/bsps/aarch64/xilinx-versal/objjffs2qspinor.yml 
>> b/spec/build/bsps/aarch64/xilinx-versal/objjffs2qspinor.yml
>> new file mode 100644
>> index 0000000000..933e377b3e
>> --- /dev/null
>> +++ b/spec/build/bsps/aarch64/xilinx-versal/objjffs2qspinor.yml
>> @@ -0,0 +1,20 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +build-type: objects
>> +cflags: []
>> +copyrights:
>> +- Copyright (C) 2023 Aaron Nyholm
>> +cppflags: []
>> +cxxflags: []
>> +enabled-by: true
>> +includes:
>> +- bsps/include/dev/spi/
>> +- bsps/include/xil/
>> +- bsps/include/xil/${XIL_SUPPORT_PATH}/
>> +install:
>> +- destination: ${BSP_INCLUDEDIR}/bsp
>> + source:
>> + - bsps/aarch64/xilinx-versal/include/bsp/jffs2_xqspipsu.h
>> +links: []
>> +source:
>> + - bsps/aarch64/xilinx-versal/jffs2_xqspipsu.c
>> +type: build
>> diff --git a/spec/build/bsps/aarch64/xilinx-versal/objxqspiflash.yml 
>> b/spec/build/bsps/aarch64/xilinx-versal/objxqspiflash.yml
>> index 6d84bfa8cd..4fe5adc44b 100644
>> --- a/spec/build/bsps/aarch64/xilinx-versal/objxqspiflash.yml
>> +++ b/spec/build/bsps/aarch64/xilinx-versal/objxqspiflash.yml
>> @@ -17,8 +17,6 @@ install:
>> links:
>> - role: build-dependency
>> uid: ../../objxilinxsupport
>> -- role: build-dependency
>> - uid: ../../objqspipsu
>> source:
>> - bsps/aarch64/xilinx-versal/dev/spi/versal_xqspi_flash.c
>> type: build
>> --
>> 2.25.1
>>
>> _______________________________________________
>> devel mailing list
>> devel@rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to