hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*******************************************************************************
Copyright (C) 2016 Marvell International Ltd.
 
SPDX-License-Identifier: BSD-2-Clause-Patent
 
*******************************************************************************/
#ifndef __MV_SPI_FLASH_H__
#define __MV_SPI_FLASH_H__
 
#include <Library/IoLib.h>
#include <Library/PcdLib.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Uefi/UefiBaseType.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeLib.h>
 
#include <Protocol/Spi.h>
#include <Protocol/SpiFlash.h>
 
#define SPI_FLASH_SIGNATURE             SIGNATURE_32 ('F', 'S', 'P', 'I')
 
#define CMD_READ_ID                     0x9f
#define READ_STATUS_REG_CMD             0x0b
#define CMD_WRITE_ENABLE                0x06
#define CMD_READ_STATUS                 0x05
#define CMD_FLAG_STATUS                 0x70
#define CMD_WRITE_STATUS_REG            0x01
#define CMD_READ_ARRAY_FAST             0x0b
#define CMD_PAGE_PROGRAM                0x02
#define CMD_BANK_WRITE                  0xc5
#define CMD_BANKADDR_BRWR               0x17
#define CMD_ERASE_4K                    0x20
#define CMD_ERASE_32K                   0x52
#define CMD_ERASE_64K                   0xd8
#define CMD_4B_ADDR_ENABLE              0xb7
 
#define SPI_CMD_LEN                     1
 
#define STATUS_REG_POLL_WIP             (1 << 0)
#define STATUS_REG_POLL_PEC             (1 << 7)
 
#define SPI_TRANSFER_BEGIN              0x01  // Assert CS before transfer
#define SPI_TRANSFER_END                0x02  // Deassert CS after transfers
 
#define SPI_FLASH_16MB_BOUN             0x1000000
 
typedef enum {
  SPI_FLASH_READ_ID,
  SPI_FLASH_READ, // Read from SPI flash with address
  SPI_FLASH_WRITE, // Write to SPI flash with address
  SPI_FLASH_ERASE,
  SPI_FLASH_UPDATE,
  SPI_COMMAND_MAX
} SPI_COMMAND;
 
typedef struct {
  MARVELL_SPI_FLASH_PROTOCOL  SpiFlashProtocol;
  UINTN                   Signature;
  EFI_HANDLE              Handle;
} SPI_FLASH_INSTANCE;
 
EFI_STATUS
EFIAPI
SpiFlashReadId (
  IN     SPI_DEVICE *SpiDev,
  IN     UINT32     DataByteCount,
  IN OUT UINT8      *Buffer
  );
 
EFI_STATUS
SpiFlashRead (
  IN SPI_DEVICE   *Slave,
  IN UINT32       Offset,
  IN UINTN        Length,
  IN VOID         *Buf
  );
 
EFI_STATUS
SpiFlashWrite (
  IN SPI_DEVICE *Slave,
  IN UINT32     Offset,
  IN UINTN      Length,
  IN VOID       *Buf
  );
 
EFI_STATUS
SpiFlashUpdate (
  IN SPI_DEVICE *Slave,
  IN UINT32 Offset,
  IN UINTN ByteCount,
  IN UINT8 *Buf
  );
 
EFI_STATUS
SpiFlashErase (
  IN SPI_DEVICE *SpiDev,
  IN UINTN      Offset,
  IN UINTN      Length
  );
 
EFI_STATUS
EFIAPI
EfiSpiFlashInit (
  IN MARVELL_SPI_FLASH_PROTOCOL *This,
  IN SPI_DEVICE *Slave
  );
 
#endif // __MV_SPI_FLASH_H__