18c1c0a1bSFrancisco Iglesias /* 28c1c0a1bSFrancisco Iglesias * Header file for the Xilinx Versal's PMC IOU SLCR 38c1c0a1bSFrancisco Iglesias * 48c1c0a1bSFrancisco Iglesias * Copyright (C) 2021 Xilinx Inc 58c1c0a1bSFrancisco Iglesias * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com> 68c1c0a1bSFrancisco Iglesias * 78c1c0a1bSFrancisco Iglesias * Permission is hereby granted, free of charge, to any person obtaining a copy 88c1c0a1bSFrancisco Iglesias * of this software and associated documentation files (the "Software"), to deal 98c1c0a1bSFrancisco Iglesias * in the Software without restriction, including without limitation the rights 108c1c0a1bSFrancisco Iglesias * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 118c1c0a1bSFrancisco Iglesias * copies of the Software, and to permit persons to whom the Software is 128c1c0a1bSFrancisco Iglesias * furnished to do so, subject to the following conditions: 138c1c0a1bSFrancisco Iglesias * 148c1c0a1bSFrancisco Iglesias * The above copyright notice and this permission notice shall be included in 158c1c0a1bSFrancisco Iglesias * all copies or substantial portions of the Software. 168c1c0a1bSFrancisco Iglesias * 178c1c0a1bSFrancisco Iglesias * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 188c1c0a1bSFrancisco Iglesias * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 198c1c0a1bSFrancisco Iglesias * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 208c1c0a1bSFrancisco Iglesias * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 218c1c0a1bSFrancisco Iglesias * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 228c1c0a1bSFrancisco Iglesias * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 238c1c0a1bSFrancisco Iglesias * THE SOFTWARE. 248c1c0a1bSFrancisco Iglesias */ 258c1c0a1bSFrancisco Iglesias 268c1c0a1bSFrancisco Iglesias /* 278c1c0a1bSFrancisco Iglesias * This is a model of Xilinx Versal's PMC I/O Peripheral Control and Status 288c1c0a1bSFrancisco Iglesias * module documented in Versal's Technical Reference manual [1] and the Versal 298c1c0a1bSFrancisco Iglesias * ACAP Register reference [2]. 308c1c0a1bSFrancisco Iglesias * 318c1c0a1bSFrancisco Iglesias * References: 328c1c0a1bSFrancisco Iglesias * 338c1c0a1bSFrancisco Iglesias * [1] Versal ACAP Technical Reference Manual, 348c1c0a1bSFrancisco Iglesias * https://www.xilinx.com/support/documentation/architecture-manuals/am011-versal-acap-trm.pdf 358c1c0a1bSFrancisco Iglesias * 368c1c0a1bSFrancisco Iglesias * [2] Versal ACAP Register Reference, 37*a9bc470eSFrederic Konrad * https://docs.xilinx.com/r/en-US/am012-versal-register-reference/PMC_IOP_SLCR-Module 388c1c0a1bSFrancisco Iglesias * 398c1c0a1bSFrancisco Iglesias * QEMU interface: 408c1c0a1bSFrancisco Iglesias * + sysbus MMIO region 0: MemoryRegion for the device's registers 418c1c0a1bSFrancisco Iglesias * + sysbus IRQ 0: PMC (AXI and APB) parity error interrupt detected by the PMC 428c1c0a1bSFrancisco Iglesias * I/O peripherals. 438c1c0a1bSFrancisco Iglesias * + sysbus IRQ 1: Device interrupt. 448c1c0a1bSFrancisco Iglesias * + Named GPIO output "sd-emmc-sel[0]": Enables 0: SD mode or 1: eMMC mode on 458c1c0a1bSFrancisco Iglesias * SD/eMMC controller 0. 468c1c0a1bSFrancisco Iglesias * + Named GPIO output "sd-emmc-sel[1]": Enables 0: SD mode or 1: eMMC mode on 478c1c0a1bSFrancisco Iglesias * SD/eMMC controller 1. 488c1c0a1bSFrancisco Iglesias * + Named GPIO output "qspi-ospi-mux-sel": Selects 0: QSPI linear region or 1: 498c1c0a1bSFrancisco Iglesias * OSPI linear region. 508c1c0a1bSFrancisco Iglesias * + Named GPIO output "ospi-mux-sel": Selects 0: OSPI Indirect access mode or 518c1c0a1bSFrancisco Iglesias * 1: OSPI direct access mode. 528c1c0a1bSFrancisco Iglesias */ 538c1c0a1bSFrancisco Iglesias 5452581c71SMarkus Armbruster #ifndef XLNX_VERSAL_PMC_IOU_SLCR_H 5552581c71SMarkus Armbruster #define XLNX_VERSAL_PMC_IOU_SLCR_H 568c1c0a1bSFrancisco Iglesias 577a5951f6SMarkus Armbruster #include "hw/sysbus.h" 588c1c0a1bSFrancisco Iglesias #include "hw/register.h" 598c1c0a1bSFrancisco Iglesias 608c1c0a1bSFrancisco Iglesias #define TYPE_XILINX_VERSAL_PMC_IOU_SLCR "xlnx.versal-pmc-iou-slcr" 618c1c0a1bSFrancisco Iglesias 628c1c0a1bSFrancisco Iglesias OBJECT_DECLARE_SIMPLE_TYPE(XlnxVersalPmcIouSlcr, XILINX_VERSAL_PMC_IOU_SLCR) 638c1c0a1bSFrancisco Iglesias 648c1c0a1bSFrancisco Iglesias #define XILINX_VERSAL_PMC_IOU_SLCR_R_MAX (0x828 / 4 + 1) 658c1c0a1bSFrancisco Iglesias 668c1c0a1bSFrancisco Iglesias struct XlnxVersalPmcIouSlcr { 678c1c0a1bSFrancisco Iglesias SysBusDevice parent_obj; 688c1c0a1bSFrancisco Iglesias MemoryRegion iomem; 698c1c0a1bSFrancisco Iglesias qemu_irq irq_parity_imr; 708c1c0a1bSFrancisco Iglesias qemu_irq irq_imr; 718c1c0a1bSFrancisco Iglesias qemu_irq sd_emmc_sel[2]; 728c1c0a1bSFrancisco Iglesias qemu_irq qspi_ospi_mux_sel; 738c1c0a1bSFrancisco Iglesias qemu_irq ospi_mux_sel; 748c1c0a1bSFrancisco Iglesias 758c1c0a1bSFrancisco Iglesias uint32_t regs[XILINX_VERSAL_PMC_IOU_SLCR_R_MAX]; 768c1c0a1bSFrancisco Iglesias RegisterInfo regs_info[XILINX_VERSAL_PMC_IOU_SLCR_R_MAX]; 778c1c0a1bSFrancisco Iglesias }; 788c1c0a1bSFrancisco Iglesias 7952581c71SMarkus Armbruster #endif /* XLNX_VERSAL_PMC_IOU_SLCR_H */ 80