-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
hw/misc: Introduce the Xilinx CFI interface
Introduce the Xilinx Configuration Frame Interface (CFI) for transmitting CFI data packets between the Xilinx Configuration Frame Unit models (CFU_APB, CFU_FDRO and CFU_SFR), the Xilinx CFRAME controller (CFRAME_REG) and the Xilinx CFRAME broadcast controller (CFRAME_BCAST_REG) models (when emulating bitstream programming and readback). Signed-off-by: Francisco Iglesias <francisco.iglesias@amd.com> Reviewed-by: Sai Pavan Boddu <sai.pavan.boddu@amd.com> Acked-by: Edgar E. Iglesias <edgar@zeroasic.com> Message-id: 20230831165701.2016397-2-francisco.iglesias@amd.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
- Loading branch information
1 parent
0df1149
commit 5a8559e
Showing
4 changed files
with
100 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/* | ||
* Xilinx CFI interface | ||
* | ||
* Copyright (C) 2023, Advanced Micro Devices, Inc. | ||
* | ||
* Written by Francisco Iglesias <francisco.iglesias@amd.com> | ||
* | ||
* SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
#include "qemu/osdep.h" | ||
#include "hw/misc/xlnx-cfi-if.h" | ||
|
||
void xlnx_cfi_transfer_packet(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt) | ||
{ | ||
XlnxCfiIfClass *xcic = XLNX_CFI_IF_GET_CLASS(cfi_if); | ||
|
||
if (xcic->cfi_transfer_packet) { | ||
xcic->cfi_transfer_packet(cfi_if, pkt); | ||
} | ||
} | ||
|
||
static const TypeInfo xlnx_cfi_if_info = { | ||
.name = TYPE_XLNX_CFI_IF, | ||
.parent = TYPE_INTERFACE, | ||
.class_size = sizeof(XlnxCfiIfClass), | ||
}; | ||
|
||
static void xlnx_cfi_if_register_types(void) | ||
{ | ||
type_register_static(&xlnx_cfi_if_info); | ||
} | ||
|
||
type_init(xlnx_cfi_if_register_types) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* Xilinx CFI interface | ||
* | ||
* Copyright (C) 2023, Advanced Micro Devices, Inc. | ||
* | ||
* Written by Francisco Iglesias <francisco.iglesias@amd.com> | ||
* | ||
* SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
#ifndef XLNX_CFI_IF_H | ||
#define XLNX_CFI_IF_H 1 | ||
|
||
#include "qemu/help-texts.h" | ||
#include "hw/hw.h" | ||
#include "qom/object.h" | ||
|
||
#define TYPE_XLNX_CFI_IF "xlnx-cfi-if" | ||
typedef struct XlnxCfiIfClass XlnxCfiIfClass; | ||
DECLARE_CLASS_CHECKERS(XlnxCfiIfClass, XLNX_CFI_IF, TYPE_XLNX_CFI_IF) | ||
|
||
#define XLNX_CFI_IF(obj) \ | ||
INTERFACE_CHECK(XlnxCfiIf, (obj), TYPE_XLNX_CFI_IF) | ||
|
||
typedef enum { | ||
PACKET_TYPE_CFU = 0x52, | ||
PACKET_TYPE_CFRAME = 0xA1, | ||
} xlnx_cfi_packet_type; | ||
|
||
typedef enum { | ||
CFRAME_FAR = 1, | ||
CFRAME_SFR = 2, | ||
CFRAME_FDRI = 4, | ||
CFRAME_CMD = 6, | ||
} xlnx_cfi_reg_addr; | ||
|
||
typedef struct XlnxCfiPacket { | ||
uint8_t reg_addr; | ||
uint32_t data[4]; | ||
} XlnxCfiPacket; | ||
|
||
typedef struct XlnxCfiIf { | ||
Object Parent; | ||
} XlnxCfiIf; | ||
|
||
typedef struct XlnxCfiIfClass { | ||
InterfaceClass parent; | ||
|
||
void (*cfi_transfer_packet)(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt); | ||
} XlnxCfiIfClass; | ||
|
||
/** | ||
* Transfer a XlnxCfiPacket. | ||
* | ||
* @cfi_if: the object implementing this interface | ||
* @XlnxCfiPacket: a pointer to the XlnxCfiPacket to transfer | ||
*/ | ||
void xlnx_cfi_transfer_packet(XlnxCfiIf *cfi_if, XlnxCfiPacket *pkt); | ||
|
||
#endif /* XLNX_CFI_IF_H */ |