public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Sami Mujawar" <sami.mujawar@arm.com>
To: Sahil <sahil@arm.com>, devel@edk2.groups.io, pierre.gondois@arm.com
Cc: sahil.kaushal@arm.com, Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Leif Lindholm <quic_llindhol@quicinc.com>,
	"levi.yun" <yeoreum.yun@arm.com>, "nd@arm.com" <nd@arm.com>
Subject: Re: [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 12/14] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe
Date: Thu, 16 May 2024 16:25:07 +0100	[thread overview]
Message-ID: <c0f2b44a-b1bf-4ef5-82ba-3bb28e8bdc77@arm.com> (raw)
In-Reply-To: <CAHDJ2V6RFrmfzJsYU6S6QNgjiJFQkt+bU1oUs3CfeF+=pZHLsg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 9235 bytes --]

Hi Sahil,

Please find my response inline marked [SAMI].

Regards,

Sami Mujawar

On 09/05/2024 07:25 am, Sahil wrote:
> Hi Pierre, Thanks for reviewing the patchset. Please find my comment 
> inline below.
>
> On Thu, 2 May 2024 at 18:47, PierreGondois via groups.io 
> <http://groups.io> <pierre.gondois=arm.com@groups.io> wrote:
> >
> > Hello Sahil,
> >
> > On 4/23/24 07:56, Sahil Kaushal via groups.io <http://groups.io> wrote:
> > > From: sahil <sahil@arm.com>
> > >
> > > In N1Sdp platform, the SoC is connected to IOFPGA which has a
> > > Cadence Quad SPI (QSPI) controller. This QSPI controller manages
> > > the flash chip device via QSPI bus.
> > >
> > > This patch adds CadenceQspiNorFlashDeviceLib which is used to
> > > manage and access the above configuration.
> > >
> > > Signed-off-by: sahil <sahil@arm.com>
> > > ---
> > > 
> Platform/ARM/Library/CadenceQspiNorFlashDeviceLib/CadenceQspiNorFlashDeviceLib.inf 
> |   32 +
> > > 
> Platform/ARM/Library/CadenceQspiNorFlashDeviceLib/CadenceQspiNorFlashDeviceLib.h 
>   |   44 +
> > > 
> Platform/ARM/Library/CadenceQspiNorFlashDeviceLib/CadenceQspiNorFlashDeviceLib.c 
>   | 1011 ++++++++++++++++++++
> > >   3 files changed, 1087 insertions(+)
> > >
> >
> > [snip]
> >
> > > +
> > > +/**
> > > +  Converts milliseconds into number of ticks of the performance 
> counter.
> > > +
> > > +  @param[in] Milliseconds  Milliseconds to convert into ticks.
> > > +
> > > +  @retval Milliseconds expressed as number of ticks.
> > > +
> > > +**/
> > > +STATIC
> > > +UINT64
> > > +MilliSecondsToTicks (
> > > +  IN UINTN  Milliseconds
> > > +  )
> > > +{
> > > +  CONST UINT64  NanoSecondsPerTick = GetTimeInNanoSecond (1);
> > > +
> > > +  return (Milliseconds * 1000000) / NanoSecondsPerTick;
> >
> > Should use DivU64x64Remainder() here:
> > {
> >    UINT64  NanoSecondsPerTick;
> >    UINT64  NanoSeconds;
> >
> >    NanoSecondsPerTick = GetTimeInNanoSecond (1);
> >    NanoSeconds = MultU64x32 (Milliseconds, 1000000);
> >
> >    return DivU64x64Remainder (NanoSeconds, NanoSecondsPerTick, NULL);
> > }
> >
> > > +}
> > > +
> > > +/**
> > > +  Poll Status register for NOR flash erase/write completion.
> > > +
> > > +  @param[in]      Instance           NOR flash Instance.
> > > +
> > > +  @retval         EFI_SUCCESS        Request is executed 
> successfully.
> > > +  @retval         EFI_TIMEOUT        Operation timed out.
> > > +  @retval         EFI_DEVICE_ERROR   Controller operartion failed.
> >
> > operartion -> typo
> > (same at another place I think)
> >
> > [snip]
> >
> > > +
> > > +/**
> > > +  Read from nor flash.
> > > +
> > > +  @param[in]     Instance               NOR flash Instance of 
> variable store region.
> > > +  @param[in]     Lba                    The starting logical 
> block index to read from.
> > > +  @param[in]     Offset                 Offset into the block at 
> which to begin reading.
> > > +  @param[in]     BufferSizeInBytes      The number of bytes to read.
> > > +  @param[out]    Buffer                 The pointer to a 
> caller-allocated buffer that
> > > +                                        should copied with read data.
> > > +
> > > +  @retval        EFI_SUCCESS            The read is completed.
> > > +  @retval        EFI_INVALID_PARAMETER  Invalid parameters passed.
> > > +**/
> > > +EFI_STATUS
> > > +NorFlashRead (
> > > +  IN NOR_FLASH_INSTANCE  *Instance,
> > > +  IN EFI_LBA             Lba,
> > > +  IN UINTN               Offset,
> > > +  IN UINTN               BufferSizeInBytes,
> > > +  OUT VOID               *Buffer
> > > +  )
> > > +{
> > > +  UINTN  StartAddress;
> > > +
> > > +  // The buffer must be valid
> > > +  if (Buffer == NULL) {
> > > +    return EFI_INVALID_PARAMETER;
> > > +  }
> > > +
> > > +  // Return if we do not have any byte to read
> > > +  if (BufferSizeInBytes == 0) {
> > > +    return EFI_SUCCESS;
> > > +  }
> > > +
> > > +  if (((Lba * Instance->Media.BlockSize) + Offset + 
> BufferSizeInBytes) >
> > > +      Instance->Size)
> > > +  {
> > > +    DEBUG ((
> > > +      DEBUG_ERROR,
> > > +      "NorFlashRead: ERROR - Read will exceed device size.\n"
> > > +      ));
> > > +    return EFI_INVALID_PARAMETER;
> > > +  }
> > > +
> > > +  // Get the address to start reading from
> > > +  StartAddress = GET_NOR_BLOCK_ADDRESS (
> > > +                   Instance->RegionBaseAddress,
> > > +                   Lba,
> > > +                   Instance->Media.BlockSize
> > > +                   );
> > > +
> > > +  // Readout the data
> > > +  CopyMem (Buffer, (UINTN *)(StartAddress + Offset), 
> BufferSizeInBytes);
> >
> > The original code at:
> >  Platform/ARM/Library/P30NorFlashDeviceLib/P30NorFlashDeviceLib.c
> >
> > implements and uses AlignedCopyMem()/NorFlashWriteBuffer() which seems
> > to be more efficient.
> > Just to be sure I understand correctly, is the maximal read/write size
> > of 4 bytes ? Meaning that these functions are not needed ?
> >
> > ---
> >
> > NorFlashWriteBuffer() is not implemented here IIUC won't be 
> implemtned as not
> > needed. Maybe in an additional patch, the function could be removed 
> from the
> > library interface at:
> >    Platform/ARM/Include/Library/NorFlashDeviceLib.h
> > and made static in:
> >  Platform/ARM/Library/P30NorFlashDeviceLib/P30NorFlashDeviceLib.c
> >
> CopyMem() and AlignedCopyMem() have nearly identical implementations, 
> therefore I think we can
> continue using CopyMem() here.
>
> For NorFlashWriteBuffer(), in the P30 spec, it looks like buffered 
> programming is one of the features
> of the IP whereas there is no such feature in cadence IP. So, I think 
> there is no need for
> NorFlashWriteBuffer() for Cadence controller Library.
>
> I will push another patch in the next patchset to remove 
>  NorFlashWriteBuffer() from the
> NorFlashDeviceLib.h header file.
[SAMI] Also make NorFlashWriteBuffer() a STATIC function in 
P30NorFlashDeviceLib.c.
>
> > > +
> > > +  return EFI_SUCCESS;
> > > +}
> > > +
> > > +/**
> > > +  Write a full or portion of a block.
> > > +
> > > +  @param[in]       Instance              NOR flash Instance of 
> variable store region.
> > > +  @param[in]       Lba                   The starting logical 
> block index to write to.
> > > +  @param[in]       Offset                Offset into the block at 
> which to begin writing.
> > > +  @param[in, out]  NumBytes              The total size of the 
> buffer.
> > > +  @param[in]       Buffer                The pointer to a 
> caller-allocated buffer that
> > > +                                         contains the source for 
> the write.
> > > +
> > > +  @retval          EFI_SUCCESS           The write is completed.
> > > +  @retval          EFI_OUT_OF_RESOURCES  Invalid Buffer passed.
> > > +  @retval          EFI_BAD_BUFFER_SIZE   Buffer size not enough.
> > > +  @retval          EFI_DEVICE_ERROR      The device reported an 
> error.
> > > +**/
> > > +EFI_STATUS
> > > +NorFlashWriteSingleBlock (
> > > +  IN        NOR_FLASH_INSTANCE  *Instance,
> > > +  IN        EFI_LBA             Lba,
> > > +  IN        UINTN               Offset,
> > > +  IN OUT    UINTN               *NumBytes,
> > > +  IN        UINT8               *Buffer
> > > +  )
> > > +{
> > > +  EFI_STATUS  Status;
> > > +  UINT32      Tmp;
> > > +  UINT32      TmpBuf;
> > > +  UINT32      WordToWrite;
> > > +  UINT32      Mask;
> > > +  BOOLEAN     DoErase;
> > > +  UINTN       BytesToWrite;
> > > +  UINTN       CurOffset;
> > > +  UINTN       WordAddr;
> > > +  UINTN       BlockSize;
> > > +  UINTN       BlockAddress;
> > > +  UINTN       PrevBlockAddress;
> > > +
> > > +  if (Buffer == NULL) {
> > > +    DEBUG ((
> > > +      DEBUG_ERROR,
> > > +      "NorFlashWriteSingleBlock: ERROR - Buffer is invalid\n"
> > > +      ));
> > > +    return EFI_OUT_OF_RESOURCES;
> >
> > EFI_INVALID_PARAMETER instead I think
> >
> > > +  }
> > > +
> > > +  PrevBlockAddress = 0;
> > > +
> > > +  DEBUG ((
> > > +    DEBUG_INFO,
> > > +    "NorFlashWriteSingleBlock(Parameters: Lba=%ld, Offset=0x%x, "
> > > +    "*NumBytes=0x%x, Buffer @ 0x%08x)\n",
> > > +    Lba,
> > > +    Offset,
> > > +    *NumBytes,
> > > +    Buffer
> > > +    ));
> > > +
> > > +  // Localise the block size to avoid de-referencing pointers all 
> the time
> >
> > Localise -> Locate
> >
> > > +  BlockSize = Instance->Media.BlockSize;
> > > +
> >
> > [snip]
> >
> >
> > 
> >
> >


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#118971): https://edk2.groups.io/g/devel/message/118971
Mute This Topic: https://groups.io/mt/105690947/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: Type: text/html, Size: 16646 bytes --]

  reply	other threads:[~2024-05-16 15:25 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-23  5:56 [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 00/14] Split NorFlashDxe driver and add CadenceQspiNorFlashDeviceLib library Sahil Kaushal
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 01/14] Platform/ARM/NorFlashDxe: Move DiskIo related functions out of NorFlash.c Sahil Kaushal
2024-04-24  9:49   ` levi.yun
2024-05-16 15:17   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 02/14] Platform/ARM/NorFlashDxe: Move NorFlashVirtualNotifyEvent Sahil Kaushal
2024-05-16 15:17   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 03/14] Platform/ARM/NorFlashDxe: Add NorFlashCommon.h header file Sahil Kaushal
2024-04-24  9:49   ` levi.yun
2024-05-16 15:17   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 04/14] Platform/ARM/NorFlashDxe: Move flash specific functions to NorFlash.c Sahil Kaushal
2024-04-24  9:49   ` levi.yun
2024-05-16 15:17   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 05/14] Platform/ARM: Create NorFlashDeviceLib library interface for flash specific functions Sahil Kaushal
2024-04-24  9:50   ` levi.yun
2024-05-16 15:18   ` Sami Mujawar
2024-05-21  8:37     ` sahil
2024-05-21 14:05       ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 06/14] Platform/ARM: Add P30NorFlashDeviceLib Library Sahil Kaushal
2024-04-24  9:49   ` levi.yun
2024-05-16 15:18   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 07/14] Platform/ARM/NorFlashDxe: Switch from NorFlash.c to NorFlashDeviceLib Sahil Kaushal
2024-04-24  9:50   ` levi.yun
2024-05-16 15:18   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 08/14] Platform/ARM: Add HostRegisterBaseAddress variable Sahil Kaushal
2024-04-24  9:50   ` levi.yun
2024-05-16 15:22   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 09/14] Platform/ARM: Add optional provision to fetch and print NOR Flash info Sahil Kaushal
2024-04-24  9:51   ` levi.yun
2024-05-16 15:23   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 10/14] Silicon/ARM/NeoverseN1Soc: Enable SCP QSPI flash region Sahil Kaushal
2024-04-24  9:50   ` levi.yun
2024-05-16 15:23   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 11/14] Silicon/ARM/NeoverseN1Soc: NOR flash library for N1Sdp Sahil Kaushal
2024-04-24  9:50   ` levi.yun
2024-05-16 15:23   ` Sami Mujawar
2024-05-21  9:24     ` sahil
2024-05-21 12:59       ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 12/14] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe Sahil Kaushal
2024-04-24  9:55   ` levi.yun
2024-05-02 13:17   ` PierreGondois
2024-05-09  6:25     ` sahil
2024-05-16 15:25       ` Sami Mujawar [this message]
2024-05-16 15:24   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 13/14] Platform/ARM/N1Sdp: Persistent storage for N1Sdp Sahil Kaushal
2024-04-24  9:55   ` levi.yun
2024-05-16 15:24   ` Sami Mujawar
2024-04-23  5:56 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 14/14] Platform/ARM/N1Sdp: Enable FaultTolerantWrite Dxe driver " Sahil Kaushal
2024-04-24  9:51   ` levi.yun
2024-05-16 15:24   ` Sami Mujawar
2024-05-02 13:16 ` [edk2-devel] [PATCH RESEND edk2-platforms][PATCH V2 00/14] Split NorFlashDxe driver and add CadenceQspiNorFlashDeviceLib library PierreGondois

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c0f2b44a-b1bf-4ef5-82ba-3bb28e8bdc77@arm.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox