1*92192358STong Ho /* 2*92192358STong Ho * Non-crypto strength model of the True Random Number Generator 3*92192358STong Ho * in the AMD/Xilinx Versal device family. 4*92192358STong Ho * 5*92192358STong Ho * Copyright (c) 2017-2020 Xilinx Inc. 6*92192358STong Ho * Copyright (c) 2023 Advanced Micro Devices, Inc. 7*92192358STong Ho * 8*92192358STong Ho * Permission is hereby granted, free of charge, to any person obtaining a copy 9*92192358STong Ho * of this software and associated documentation files (the "Software"), to deal 10*92192358STong Ho * in the Software without restriction, including without limitation the rights 11*92192358STong Ho * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12*92192358STong Ho * copies of the Software, and to permit persons to whom the Software is 13*92192358STong Ho * furnished to do so, subject to the following conditions: 14*92192358STong Ho * 15*92192358STong Ho * The above copyright notice and this permission notice shall be included in 16*92192358STong Ho * all copies or substantial portions of the Software. 17*92192358STong Ho * 18*92192358STong Ho * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*92192358STong Ho * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*92192358STong Ho * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21*92192358STong Ho * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22*92192358STong Ho * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23*92192358STong Ho * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24*92192358STong Ho * THE SOFTWARE. 25*92192358STong Ho */ 26*92192358STong Ho #ifndef XLNX_VERSAL_TRNG_H 27*92192358STong Ho #define XLNX_VERSAL_TRNG_H 28*92192358STong Ho 29*92192358STong Ho #include "hw/irq.h" 30*92192358STong Ho #include "hw/sysbus.h" 31*92192358STong Ho #include "hw/register.h" 32*92192358STong Ho 33*92192358STong Ho #define TYPE_XLNX_VERSAL_TRNG "xlnx.versal-trng" 34*92192358STong Ho OBJECT_DECLARE_SIMPLE_TYPE(XlnxVersalTRng, XLNX_VERSAL_TRNG); 35*92192358STong Ho 36*92192358STong Ho #define RMAX_XLNX_VERSAL_TRNG ((0xf0 / 4) + 1) 37*92192358STong Ho 38*92192358STong Ho typedef struct XlnxVersalTRng { 39*92192358STong Ho SysBusDevice parent_obj; 40*92192358STong Ho qemu_irq irq; 41*92192358STong Ho GRand *prng; 42*92192358STong Ho 43*92192358STong Ho uint32_t hw_version; 44*92192358STong Ho uint32_t forced_faults; 45*92192358STong Ho 46*92192358STong Ho uint32_t rand_count; 47*92192358STong Ho uint64_t rand_reseed; 48*92192358STong Ho 49*92192358STong Ho uint64_t forced_prng_seed; 50*92192358STong Ho uint64_t forced_prng_count; 51*92192358STong Ho uint64_t tst_seed[2]; 52*92192358STong Ho 53*92192358STong Ho uint32_t regs[RMAX_XLNX_VERSAL_TRNG]; 54*92192358STong Ho RegisterInfo regs_info[RMAX_XLNX_VERSAL_TRNG]; 55*92192358STong Ho } XlnxVersalTRng; 56*92192358STong Ho 57*92192358STong Ho #undef RMAX_XLNX_VERSAL_TRNG 58*92192358STong Ho #endif 59