1*8c1c0a1bSFrancisco Iglesias /* 2*8c1c0a1bSFrancisco Iglesias * Header file for the Xilinx Versal's PMC IOU SLCR 3*8c1c0a1bSFrancisco Iglesias * 4*8c1c0a1bSFrancisco Iglesias * Copyright (C) 2021 Xilinx Inc 5*8c1c0a1bSFrancisco Iglesias * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com> 6*8c1c0a1bSFrancisco Iglesias * 7*8c1c0a1bSFrancisco Iglesias * Permission is hereby granted, free of charge, to any person obtaining a copy 8*8c1c0a1bSFrancisco Iglesias * of this software and associated documentation files (the "Software"), to deal 9*8c1c0a1bSFrancisco Iglesias * in the Software without restriction, including without limitation the rights 10*8c1c0a1bSFrancisco Iglesias * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11*8c1c0a1bSFrancisco Iglesias * copies of the Software, and to permit persons to whom the Software is 12*8c1c0a1bSFrancisco Iglesias * furnished to do so, subject to the following conditions: 13*8c1c0a1bSFrancisco Iglesias * 14*8c1c0a1bSFrancisco Iglesias * The above copyright notice and this permission notice shall be included in 15*8c1c0a1bSFrancisco Iglesias * all copies or substantial portions of the Software. 16*8c1c0a1bSFrancisco Iglesias * 17*8c1c0a1bSFrancisco Iglesias * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18*8c1c0a1bSFrancisco Iglesias * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19*8c1c0a1bSFrancisco Iglesias * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20*8c1c0a1bSFrancisco Iglesias * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21*8c1c0a1bSFrancisco Iglesias * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22*8c1c0a1bSFrancisco Iglesias * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23*8c1c0a1bSFrancisco Iglesias * THE SOFTWARE. 24*8c1c0a1bSFrancisco Iglesias */ 25*8c1c0a1bSFrancisco Iglesias 26*8c1c0a1bSFrancisco Iglesias /* 27*8c1c0a1bSFrancisco Iglesias * This is a model of Xilinx Versal's PMC I/O Peripheral Control and Status 28*8c1c0a1bSFrancisco Iglesias * module documented in Versal's Technical Reference manual [1] and the Versal 29*8c1c0a1bSFrancisco Iglesias * ACAP Register reference [2]. 30*8c1c0a1bSFrancisco Iglesias * 31*8c1c0a1bSFrancisco Iglesias * References: 32*8c1c0a1bSFrancisco Iglesias * 33*8c1c0a1bSFrancisco Iglesias * [1] Versal ACAP Technical Reference Manual, 34*8c1c0a1bSFrancisco Iglesias * https://www.xilinx.com/support/documentation/architecture-manuals/am011-versal-acap-trm.pdf 35*8c1c0a1bSFrancisco Iglesias * 36*8c1c0a1bSFrancisco Iglesias * [2] Versal ACAP Register Reference, 37*8c1c0a1bSFrancisco Iglesias * https://www.xilinx.com/html_docs/registers/am012/am012-versal-register-reference.html#mod___pmc_iop_slcr.html 38*8c1c0a1bSFrancisco Iglesias * 39*8c1c0a1bSFrancisco Iglesias * QEMU interface: 40*8c1c0a1bSFrancisco Iglesias * + sysbus MMIO region 0: MemoryRegion for the device's registers 41*8c1c0a1bSFrancisco Iglesias * + sysbus IRQ 0: PMC (AXI and APB) parity error interrupt detected by the PMC 42*8c1c0a1bSFrancisco Iglesias * I/O peripherals. 43*8c1c0a1bSFrancisco Iglesias * + sysbus IRQ 1: Device interrupt. 44*8c1c0a1bSFrancisco Iglesias * + Named GPIO output "sd-emmc-sel[0]": Enables 0: SD mode or 1: eMMC mode on 45*8c1c0a1bSFrancisco Iglesias * SD/eMMC controller 0. 46*8c1c0a1bSFrancisco Iglesias * + Named GPIO output "sd-emmc-sel[1]": Enables 0: SD mode or 1: eMMC mode on 47*8c1c0a1bSFrancisco Iglesias * SD/eMMC controller 1. 48*8c1c0a1bSFrancisco Iglesias * + Named GPIO output "qspi-ospi-mux-sel": Selects 0: QSPI linear region or 1: 49*8c1c0a1bSFrancisco Iglesias * OSPI linear region. 50*8c1c0a1bSFrancisco Iglesias * + Named GPIO output "ospi-mux-sel": Selects 0: OSPI Indirect access mode or 51*8c1c0a1bSFrancisco Iglesias * 1: OSPI direct access mode. 52*8c1c0a1bSFrancisco Iglesias */ 53*8c1c0a1bSFrancisco Iglesias 54*8c1c0a1bSFrancisco Iglesias #ifndef XILINX_VERSAL_PMC_IOU_SLCR_H 55*8c1c0a1bSFrancisco Iglesias #define XILINX_VERSAL_PMC_IOU_SLCR_H 56*8c1c0a1bSFrancisco Iglesias 57*8c1c0a1bSFrancisco Iglesias #include "hw/register.h" 58*8c1c0a1bSFrancisco Iglesias 59*8c1c0a1bSFrancisco Iglesias #define TYPE_XILINX_VERSAL_PMC_IOU_SLCR "xlnx.versal-pmc-iou-slcr" 60*8c1c0a1bSFrancisco Iglesias 61*8c1c0a1bSFrancisco Iglesias OBJECT_DECLARE_SIMPLE_TYPE(XlnxVersalPmcIouSlcr, XILINX_VERSAL_PMC_IOU_SLCR) 62*8c1c0a1bSFrancisco Iglesias 63*8c1c0a1bSFrancisco Iglesias #define XILINX_VERSAL_PMC_IOU_SLCR_R_MAX (0x828 / 4 + 1) 64*8c1c0a1bSFrancisco Iglesias 65*8c1c0a1bSFrancisco Iglesias struct XlnxVersalPmcIouSlcr { 66*8c1c0a1bSFrancisco Iglesias SysBusDevice parent_obj; 67*8c1c0a1bSFrancisco Iglesias MemoryRegion iomem; 68*8c1c0a1bSFrancisco Iglesias qemu_irq irq_parity_imr; 69*8c1c0a1bSFrancisco Iglesias qemu_irq irq_imr; 70*8c1c0a1bSFrancisco Iglesias qemu_irq sd_emmc_sel[2]; 71*8c1c0a1bSFrancisco Iglesias qemu_irq qspi_ospi_mux_sel; 72*8c1c0a1bSFrancisco Iglesias qemu_irq ospi_mux_sel; 73*8c1c0a1bSFrancisco Iglesias 74*8c1c0a1bSFrancisco Iglesias uint32_t regs[XILINX_VERSAL_PMC_IOU_SLCR_R_MAX]; 75*8c1c0a1bSFrancisco Iglesias RegisterInfo regs_info[XILINX_VERSAL_PMC_IOU_SLCR_R_MAX]; 76*8c1c0a1bSFrancisco Iglesias }; 77*8c1c0a1bSFrancisco Iglesias 78*8c1c0a1bSFrancisco Iglesias #endif /* XILINX_VERSAL_PMC_IOU_SLCR_H */ 79