f00f57f344
- Fixes a bug in printing trap causes - Allows 16-bit writes to the SiFive test device. This fixes the failure to reboot the RISC-V virt machine - Support for the Microchip PolarFire SoC and Icicle Kit - A reafactor of RISC-V code out of hw/riscv -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE9sSsRtSTSGjTuM6PIeENKd+XcFQFAl9aa4YACgkQIeENKd+X cFTJjgf5ASfFIO5HqP1l80/UM5Pswyq0IROZDq0ItZa6U4EPzLXoE2N0POriIj4h Ds2JbMg0ORDqY0VbSxHlgYHMgJ9S6cuVOMnATsPG0d2jaJ3gSxLBu5k/1ENqe+Vw sSYXZv5uEAUfOFz99zbuhKHct5HzlmBFW9dVHdflUQS+cRgsSXq27mz1BvZ8xMWl lMhwubqdoNx0rOD3vKnlwrxaf54DcJ2IQT3BtTCjEar3tukdNaLijAuwt2hrFyr+ IwpeFXA/NWar+mXP3M+BvcLaI33j73/ac2+S5SJuzHGp/ot5nT5gAuq3PDEjHMeS t6z9Exp776VXxNE2iUA5NB65Yp3/6w== =07oA -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/alistair/tags/pull-riscv-to-apply-20200910' into staging This PR includes multiple fixes and features for RISC-V: - Fixes a bug in printing trap causes - Allows 16-bit writes to the SiFive test device. This fixes the failure to reboot the RISC-V virt machine - Support for the Microchip PolarFire SoC and Icicle Kit - A reafactor of RISC-V code out of hw/riscv # gpg: Signature made Thu 10 Sep 2020 19:08:06 BST # gpg: using RSA key F6C4AC46D4934868D3B8CE8F21E10D29DF977054 # gpg: Good signature from "Alistair Francis <alistair@alistair23.me>" [full] # Primary key fingerprint: F6C4 AC46 D493 4868 D3B8 CE8F 21E1 0D29 DF97 7054 * remotes/alistair/tags/pull-riscv-to-apply-20200910: (30 commits) hw/riscv: Sort the Kconfig options in alphabetical order hw/riscv: Drop CONFIG_SIFIVE hw/riscv: Always build riscv_hart.c hw/riscv: Move sifive_test model to hw/misc hw/riscv: Move sifive_uart model to hw/char hw/riscv: Move riscv_htif model to hw/char hw/riscv: Move sifive_plic model to hw/intc hw/riscv: Move sifive_clint model to hw/intc hw/riscv: Move sifive_gpio model to hw/gpio hw/riscv: Move sifive_u_otp model to hw/misc hw/riscv: Move sifive_u_prci model to hw/misc hw/riscv: Move sifive_e_prci model to hw/misc hw/riscv: sifive_u: Connect a DMA controller hw/riscv: clint: Avoid using hard-coded timebase frequency hw/riscv: microchip_pfsoc: Hook GPIO controllers hw/riscv: microchip_pfsoc: Connect 2 Cadence GEMs hw/arm: xlnx: Set all boards' GEM 'phy-addr' property value to 23 hw/net: cadence_gem: Add a new 'phy-addr' property hw/riscv: microchip_pfsoc: Connect a DMA controller hw/dma: Add SiFive platform DMA controller emulation ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org> # Conflicts: # hw/riscv/trace-events
100 lines
3.2 KiB
C
100 lines
3.2 KiB
C
/*
|
|
* QEMU Cadence GEM emulation
|
|
*
|
|
* Copyright (c) 2011 Xilinx, Inc.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef CADENCE_GEM_H
|
|
#define CADENCE_GEM_H
|
|
#include "qom/object.h"
|
|
|
|
#define TYPE_CADENCE_GEM "cadence_gem"
|
|
typedef struct CadenceGEMState CadenceGEMState;
|
|
DECLARE_INSTANCE_CHECKER(CadenceGEMState, CADENCE_GEM,
|
|
TYPE_CADENCE_GEM)
|
|
|
|
#include "net/net.h"
|
|
#include "hw/sysbus.h"
|
|
|
|
#define CADENCE_GEM_MAXREG (0x00000800 / 4) /* Last valid GEM address */
|
|
|
|
/* Max number of words in a DMA descriptor. */
|
|
#define DESC_MAX_NUM_WORDS 6
|
|
|
|
#define MAX_PRIORITY_QUEUES 8
|
|
#define MAX_TYPE1_SCREENERS 16
|
|
#define MAX_TYPE2_SCREENERS 16
|
|
|
|
#define MAX_JUMBO_FRAME_SIZE_MASK 0x3FFF
|
|
#define MAX_FRAME_SIZE MAX_JUMBO_FRAME_SIZE_MASK
|
|
|
|
struct CadenceGEMState {
|
|
/*< private >*/
|
|
SysBusDevice parent_obj;
|
|
|
|
/*< public >*/
|
|
MemoryRegion iomem;
|
|
MemoryRegion *dma_mr;
|
|
AddressSpace dma_as;
|
|
NICState *nic;
|
|
NICConf conf;
|
|
qemu_irq irq[MAX_PRIORITY_QUEUES];
|
|
|
|
/* Static properties */
|
|
uint8_t num_priority_queues;
|
|
uint8_t num_type1_screeners;
|
|
uint8_t num_type2_screeners;
|
|
uint32_t revision;
|
|
uint16_t jumbo_max_len;
|
|
|
|
/* GEM registers backing store */
|
|
uint32_t regs[CADENCE_GEM_MAXREG];
|
|
/* Mask of register bits which are write only */
|
|
uint32_t regs_wo[CADENCE_GEM_MAXREG];
|
|
/* Mask of register bits which are read only */
|
|
uint32_t regs_ro[CADENCE_GEM_MAXREG];
|
|
/* Mask of register bits which are clear on read */
|
|
uint32_t regs_rtc[CADENCE_GEM_MAXREG];
|
|
/* Mask of register bits which are write 1 to clear */
|
|
uint32_t regs_w1c[CADENCE_GEM_MAXREG];
|
|
|
|
/* PHY address */
|
|
uint8_t phy_addr;
|
|
/* PHY registers backing store */
|
|
uint16_t phy_regs[32];
|
|
|
|
uint8_t phy_loop; /* Are we in phy loopback? */
|
|
|
|
/* The current DMA descriptor pointers */
|
|
uint32_t rx_desc_addr[MAX_PRIORITY_QUEUES];
|
|
uint32_t tx_desc_addr[MAX_PRIORITY_QUEUES];
|
|
|
|
uint8_t can_rx_state; /* Debug only */
|
|
|
|
uint8_t tx_packet[MAX_FRAME_SIZE];
|
|
uint8_t rx_packet[MAX_FRAME_SIZE];
|
|
uint32_t rx_desc[MAX_PRIORITY_QUEUES][DESC_MAX_NUM_WORDS];
|
|
|
|
bool sar_active[4];
|
|
};
|
|
|
|
#endif
|