/******************************************************************************* Copyright (C) 2016 Marvell International Ltd. SPDX-License-Identifier: BSD-2-Clause-Patent *******************************************************************************/ #ifndef __SPI_MASTER_H__ #define __SPI_MASTER_H__ #include #include #include #include #include #include #include #include #include #include #include #define SPI_MASTER_SIGNATURE SIGNATURE_32 ('M', 'S', 'P', 'I') #define SPI_MASTER_FROM_SPI_MASTER_PROTOCOL(a) CR (a, SPI_MASTER, SpiMasterProtocol, SPI_MASTER_SIGNATURE) // Marvell Flash Device Controller Registers #define SPI_CTRL_REG (0x00) #define SPI_CONF_REG (0x04) #define SPI_DATA_OUT_REG (0x08) #define SPI_DATA_IN_REG (0x0c) #define SPI_INT_CAUSE_REG (0x10) // Serial Memory Interface Control Register Masks #define SPI_CS_NUM_OFFSET 2 #define SPI_CS_NUM_MASK (0x7 << SPI_CS_NUM_OFFSET) #define SPI_MEM_READY_MASK (0x1 << 1) #define SPI_CS_EN_MASK (0x1 << 0) // Serial Memory Interface Configuration Register Masks #define SPI_BYTE_LENGTH_OFFSET 5 #define SPI_BYTE_LENGTH (0x1 << SPI_BYTE_LENGTH_OFFSET) #define SPI_CPOL_OFFSET 11 #define SPI_CPOL_MASK (0x1 << SPI_CPOL_OFFSET) #define SPI_CPHA_OFFSET 12 #define SPI_CPHA_MASK (0x1 << SPI_CPHA_OFFSET) #define SPI_TXLSBF_OFFSET 13 #define SPI_TXLSBF_MASK (0x1 << SPI_TXLSBF_OFFSET) #define SPI_RXLSBF_OFFSET 14 #define SPI_RXLSBF_MASK (0x1 << SPI_RXLSBF_OFFSET) #define SPI_SPR_OFFSET 0 #define SPI_SPR_MASK (0xf << SPI_SPR_OFFSET) #define SPI_SPPR_0_OFFSET 4 #define SPI_SPPR_0_MASK (0x1 << SPI_SPPR_0_OFFSET) #define SPI_SPPR_HI_OFFSET 6 #define SPI_SPPR_HI_MASK (0x3 << SPI_SPPR_HI_OFFSET) #define SPI_TRANSFER_BEGIN 0x01 // Assert CS before transfer #define SPI_TRANSFER_END 0x02 // Deassert CS after transfers #define SPI_TIMEOUT 100000 typedef struct { MARVELL_SPI_MASTER_PROTOCOL SpiMasterProtocol; UINTN Signature; EFI_HANDLE Handle; EFI_LOCK Lock; } SPI_MASTER; EFI_STATUS EFIAPI MvSpiTransfer ( IN MARVELL_SPI_MASTER_PROTOCOL *This, IN SPI_DEVICE *Slave, IN UINTN DataByteCount, IN VOID *DataOut, IN VOID *DataIn, IN UINTN Flag ); EFI_STATUS EFIAPI MvSpiReadWrite ( IN MARVELL_SPI_MASTER_PROTOCOL *This, IN SPI_DEVICE *Slave, IN UINT8 *Cmd, IN UINTN CmdSize, IN UINT8 *DataOut, OUT UINT8 *DataIn, IN UINTN DataSize ); EFI_STATUS EFIAPI MvSpiInit ( IN MARVELL_SPI_MASTER_PROTOCOL * This ); SPI_DEVICE * EFIAPI MvSpiSetupSlave ( IN MARVELL_SPI_MASTER_PROTOCOL * This, IN SPI_DEVICE *Slave, IN UINTN Cs, IN SPI_MODE Mode ); EFI_STATUS EFIAPI MvSpiFreeSlave ( IN SPI_DEVICE *Slave ); EFI_STATUS EFIAPI SpiMasterEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ); #endif // __SPI_MASTER_H__