qemu/hw/misc/xlnx-lpd-gpv.c
<<
>>
Prefs
   1/*
   2 * xlnx-lpd-gpv.c
   3 *
   4 *  Copyright (C) 2016 : GreenSocs
   5 *      http://www.greensocs.com/ , email: info@greensocs.com
   6 *
   7 *  Developed by :
   8 *  Frederic Konrad   <fred.konrad@greensocs.com>
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation, either version 2 of the License, or
  13 * (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License along
  21 * with this program; if not, see <http://www.gnu.org/licenses/>.
  22 *
  23 */
  24
  25#include "qemu/osdep.h"
  26#include "hw/sysbus.h"
  27#include "migration/vmstate.h"
  28#include "hw/qdev-properties.h"
  29#include "hw/register.h"
  30#include "qemu/bitops.h"
  31#include "qemu/log.h"
  32
  33#ifndef XLNX_LPD_GPV_ERR_DEBUG
  34#define XLNX_LPD_GPV_ERR_DEBUG 0
  35#endif
  36
  37#define TYPE_XLNX_LPD_GPV "xlnx.lpd-gpv"
  38
  39#define XLNX_LPD_GPV(obj) \
  40     OBJECT_CHECK(XlnxLPDGPVState, (obj), TYPE_XLNX_LPD_GPV)
  41
  42REG32(PERIPH_ID_4, 0x01FD0)
  43REG32(PERIPH_ID_5, 0x01FD4)
  44REG32(PERIPH_ID_6, 0x01FD8)
  45REG32(PERIPH_ID_7, 0x01FDC)
  46REG32(PERIPH_ID_0, 0x01FE0)
  47REG32(PERIPH_ID_1, 0x01FE4)
  48REG32(PERIPH_ID_2, 0x01FE8)
  49REG32(PERIPH_ID_3, 0x01FEC)
  50REG32(COMP_ID_0, 0x01FF0)
  51REG32(COMP_ID_1, 0x01FF4)
  52REG32(COMP_ID_2, 0x01FF8)
  53REG32(COMP_ID_3, 0x01FFC)
  54REG32(INTLPD_OCM_FN_MOD_ISS_BM, 0x2008)
  55REG32(INTLPD_RPUS0_FN_MOD_ISS_BM, 0x05008)
  56REG32(INTLPD_RPUS1_FN_MOD_ISS_BM, 0x06008)
  57REG32(INTLPD_USB0S_FN_MOD_ISS_BM, 0x07008)
  58REG32(INTLPD_USB1S_FN_MOD_ISS_BM, 0x08008)
  59REG32(INTLPD_AFIFS2_FN_MOD_ISS_BM, 0x09008)
  60REG32(INTLPD_INTIOU_IB_FN_MOD_ISS_BM, 0x0A008)
  61REG32(INTLPD_INTIOU_IB_FN_MOD, 0x0A108)
  62REG32(SLAVE_11_IB_FN_MOD_ISS_BM,   0x0D008)
  63REG32(RPUM0_INTLPD_READ_QOS,   0x42100)
  64REG32(RPUM0_INTLPD_WRITE_QOS,   0x42104)
  65REG32(RPUM0_INTLPD_FN_MOD,   0x42108)
  66REG32(RPUM0_INTLPD_QOS_CTNL,   0x4210C)
  67REG32(RPUM0_INTLPD_MAX_OT,   0x42110)
  68REG32(RPUM0_INTLPD_MAX_COMB_OT,   0x42114)
  69REG32(RPUM0_INTLPD_AW_P,   0x42118)
  70REG32(RPUM0_INTLPD_AW_B,   0x4211C)
  71REG32(RPUM0_INTLPD_AW_R,   0x42120)
  72REG32(RPUM0_INTLPD_AR_P,   0x42124)
  73REG32(RPUM0_INTLPD_AR_B,   0x42128)
  74REG32(RPUM0_INTLPD_AR_R,   0x4212C)
  75REG32(RPUM1_INTLPD_READ_QOS,   0x43100)
  76REG32(RPUM1_INTLPD_WRITE_QOS,   0x43104)
  77REG32(RPUM1_INTLPD_FN_MOD,   0x43108)
  78REG32(RPUM1_INTLPD_QOS_CTNL,   0x4310C)
  79REG32(RPUM1_INTLPD_MAX_OT,   0x43110)
  80REG32(RPUM1_INTLPD_MAX_COMB_OT, 0x43114)
  81REG32(RPUM1_INTLPD_AW_P, 0x43118)
  82REG32(RPUM1_INTLPD_AW_B, 0x4311C)
  83REG32(RPUM1_INTLPD_AW_R, 0x43120)
  84REG32(RPUM1_INTLPD_AR_P,   0x43124)
  85REG32(RPUM1_INTLPD_AR_B,   0x43128)
  86REG32(RPUM1_INTLPD_AR_R,   0x4312C)
  87REG32(ADMAM_INTLPD_IB_FN_MOD2, 0x00044024)
  88REG32(ADMAM_INTLPD_IB_FN_MOD, 0x00044108)
  89REG32(ADMAM_INTLPD_IB_QOS_CNTL, 0x0004410C)
  90REG32(ADMAM_INTLPD_IB_MAX_OT, 0x00044110)
  91REG32(ADMAM_INTLPD_IB_MAX_COMB_OT, 0x00044114)
  92REG32(ADMAM_INTLPD_IB_AW_P, 0x00044118)
  93REG32(ADMAM_INTLPD_IB_AW_B, 0x0004411C)
  94REG32(ADMAM_INTLPD_IB_AW_R, 0x00044120)
  95REG32(ADMAM_INTLPD_IB_AR_P, 0x00044124)
  96REG32(ADMAM_INTLPD_IB_AR_B, 0x00044128)
  97REG32(ADMAM_INTLPD_IB_AR_R, 0x0004412C)
  98REG32(AFIFM6M_INTLPD_IB_FN_MOD, 0x00045108)
  99REG32(AFIFM6M_INTLPD_IB_QOS_CNTL, 0x0004510C)
 100REG32(AFIFM6M_INTLPD_IB_MAX_OT, 0x00045110)
 101REG32(AFIFM6M_INTLPD_IB_MAX_COMB_OT, 0x00045114)
 102REG32(AFIFM6M_INTLPD_IB_AW_P, 0x00045118)
 103REG32(AFIFM6M_INTLPD_IB_AW_B, 0x0004511C)
 104REG32(AFIFM6M_INTLPD_IB_AW_R, 0x00045120)
 105REG32(AFIFM6M_INTLPD_IB_AR_P, 0x00045124)
 106REG32(AFIFM6M_INTLPD_IB_AR_B, 0x00045128)
 107REG32(AFIFM6M_INTLPD_IB_AR_R, 0x0004512C)
 108REG32(DAP_INTLPD_IB_FN_MOD2, 0x00047024)
 109REG32(DAP_INTLPD_IB_READ_QOS, 0x00047100)
 110REG32(DAP_INTLPD_IB_WRITE_QOS, 0x00047104)
 111REG32(DAP_INTLPD_IB_FN_MOD, 0x00047108)
 112REG32(DAP_INTLPD_IB_QOS_CNTL, 0x0004710C)
 113REG32(DAP_INTLPD_IB_MAX_OT, 0x00047110)
 114REG32(DAP_INTLPD_IB_MAX_COMB_OT, 0x00047114)
 115REG32(DAP_INTLPD_IB_AW_P, 0x00047118)
 116REG32(DAP_INTLPD_IB_AW_B, 0x0004711C)
 117REG32(DAP_INTLPD_IB_AW_R, 0x00047120)
 118REG32(DAP_INTLPD_IB_AR_P, 0x00047124)
 119REG32(DAP_INTLPD_IB_AR_B, 0x00047128)
 120REG32(DAP_INTLPD_IB_AR_R, 0x0004712C)
 121REG32(USB0M_INTLPD_IB_READ_QOS, 0x00048100)
 122REG32(USB0M_INTLPD_IB_WRITE_QOS, 0x00048104)
 123REG32(USB0M_INTLPD_IB_FN_MOD, 0x00048108)
 124REG32(USB0M_INTLPD_IB_QOS_CNTL, 0x0004810C)
 125REG32(USB0M_INTLPD_IB_MAX_OT, 0x00048110)
 126REG32(USB0M_INTLPD_IB_MAX_COMB_OT, 0x00048114)
 127REG32(USB0M_INTLPD_IB_AW_P, 0x00048118)
 128REG32(USB0M_INTLPD_IB_AW_B, 0x0004811C)
 129REG32(USB0M_INTLPD_IB_AW_R, 0x00048120)
 130REG32(USB0M_INTLPD_IB_AR_P, 0x00048124)
 131REG32(USB0M_INTLPD_IB_AR_B, 0x00048128)
 132REG32(USB0M_INTLPD_IB_AR_R, 0x0004812C)
 133REG32(USB1M_INTLPD_IB_READ_QOS, 0x00049100)
 134REG32(USB1M_INTLPD_IB_WRITE_QOS, 0x00049104)
 135REG32(USB1M_INTLPD_IB_FN_MOD, 0x00049108)
 136REG32(USB1M_INTLPD_IB_QOS_CNTL, 0x0004910C)
 137REG32(USB1M_INTLPD_IB_MAX_OT, 0x00049110)
 138REG32(USB1M_INTLPD_IB_MAX_COMB_OT, 0x00049114)
 139REG32(USB1M_INTLPD_IB_AW_P, 0x00049118)
 140REG32(USB1M_INTLPD_IB_AW_B, 0x0004911C)
 141REG32(USB1M_INTLPD_IB_AW_R, 0x00049120)
 142REG32(USB1M_INTLPD_IB_AR_P, 0x00049124)
 143REG32(USB1M_INTLPD_IB_AR_B, 0x00049128)
 144REG32(USB1M_INTLPD_IB_AR_R, 0x0004912C)
 145REG32(INTIOU_INTLPD_IB_FN_MOD, 0x0004A108)
 146REG32(INTIOU_INTLPD_IB_QOS_CNTL, 0x0004A10C)
 147REG32(INTIOU_INTLPD_IB_MAX_OT, 0x0004A110)
 148REG32(INTIOU_INTLPD_IB_MAX_COMB_OT, 0x0004A114)
 149REG32(INTIOU_INTLPD_IB_AW_P, 0x0004A118)
 150REG32(INTIOU_INTLPD_IB_AW_B, 0x0004A11C)
 151REG32(INTIOU_INTLPD_IB_AW_R, 0x0004A120)
 152REG32(INTIOU_INTLPD_IB_AR_P, 0x0004A124)
 153REG32(INTIOU_INTLPD_IB_AR_B, 0x0004A128)
 154REG32(INTIOU_INTLPD_IB_AR_R, 0x0004A12C)
 155REG32(INTCSUPMU_INTLPD_IB_FN_MOD, 0x0004B108)
 156REG32(INTCSUPMU_INTLPD_IB_QOS_CNTL, 0x0004B10C)
 157REG32(INTCSUPMU_INTLPD_IB_MAX_OT, 0x0004B110)
 158REG32(INTCSUPMU_INTLPD_IB_MAX_COMB_OT, 0x0004B114)
 159REG32(INTCSUPMU_INTLPD_IB_AW_P, 0x0004B118)
 160REG32(INTCSUPMU_INTLPD_IB_AW_B, 0x0004B11C)
 161REG32(INTCSUPMU_INTLPD_IB_AW_R, 0x0004B120)
 162REG32(INTCSUPMU_INTLPD_IB_AR_P, 0x0004B124)
 163REG32(INTCSUPMU_INTLPD_IB_AR_B, 0x0004B128)
 164REG32(INTCSUPMU_INTLPD_IB_AR_R, 0x0004B12C)
 165REG32(INTLPDINBOUND_INTLPDMAIN_FN_MOD, 0x0004C108)
 166REG32(INTLPDINBOUND_INTLPDMAIN_QOS_CNTL, 0x0004C10C)
 167REG32(INTLPDINBOUND_INTLPDMAIN_MAX_OT, 0x0004C110)
 168REG32(INTLPDINBOUND_INTLPDMAIN_MAX_COMB_OT, 0x0004C114)
 169REG32(INTLPDINBOUND_INTLPDMAIN_AW_P, 0x0004C118)
 170REG32(INTLPDINBOUND_INTLPDMAIN_AW_B, 0x0004C11C)
 171REG32(INTLPDINBOUND_INTLPDMAIN_AW_R, 0x0004C120)
 172REG32(INTLPDINBOUND_INTLPDMAIN_AR_P, 0x0004C124)
 173REG32(INTLPDINBOUND_INTLPDMAIN_AR_B, 0x0004C128)
 174REG32(INTLPDINBOUND_INTLPDMAIN_AR_R, 0x0004C12C)
 175REG32(INTFPD_INTLPDOCM_FN_MOD, 0x0004D108)
 176REG32(INTFPD_INTLPDOCM_QOS_CNTL, 0x0004D10C)
 177REG32(INTFPD_INTLPDOCM_MAX_OT, 0x0004D110)
 178REG32(INTFPD_INTLPDOCM_MAX_COMB_OT, 0x0004D114)
 179REG32(INTFPD_INTLPDOCM_AW_P, 0x0004D118)
 180REG32(INTFPD_INTLPDOCM_AW_B, 0x0004D11C)
 181REG32(INTFPD_INTLPDOCM_AW_R, 0x0004D120)
 182REG32(INTFPD_INTLPDOCM_AR_P, 0x0004D124)
 183REG32(INTFPD_INTLPDOCM_AR_B, 0x0004D128)
 184REG32(INTFPD_INTLPDOCM_AR_R, 0x0004D12C)
 185REG32(IB9_FN_MOD_ISS_BM, 0x000C2008)
 186REG32(IB9_FN_MOD, 0x000C2108)
 187REG32(IB5_FN_MOD_ISS_BM, 0x000C3008)
 188REG32(IB5_FN_MOD2, 0x000C3024)
 189REG32(IB5_FN_MOD, 0x000C3108)
 190REG32(IB5_QOS_CNTL, 0x000C310C)
 191REG32(IB5_MAX_OT, 0x000C3110)
 192REG32(IB5_MAX_COMB_OT, 0x000C3114)
 193REG32(IB5_AW_P, 0x000C3118)
 194REG32(IB5_AW_B, 0x000C311C)
 195REG32(IB5_AW_R, 0x000C3120)
 196REG32(IB5_AR_P, 0x000C3124)
 197REG32(IB5_AR_B, 0x000C3128)
 198REG32(IB5_AR_R, 0x000C312C)
 199REG32(IB6_FN_MOD_ISS_BM, 0x000C4008)
 200REG32(IB6_FN_MOD2, 0x000C4024)
 201REG32(IB6_FN_MOD, 0x000C4108)
 202REG32(IB6_QOS_CNTL, 0x000C410C)
 203REG32(IB6_MAX_OT, 0x000C4110)
 204REG32(IB6_MAX_COMB_OT, 0x000C4114)
 205REG32(IB6_AW_P, 0x000C4118)
 206REG32(IB6_AW_B, 0x000C411C)
 207REG32(IB6_AW_R, 0x000C4120)
 208REG32(IB6_AR_P, 0x000C4124)
 209REG32(IB6_AR_B, 0x000C4128)
 210REG32(IB6_AR_R, 0x000C412C)
 211REG32(IB8_FN_MOD_ISS_BM, 0x000C5008)
 212REG32(IB8_FN_MOD2, 0x000C5024)
 213REG32(IB8_FN_MOD, 0x000C5108)
 214REG32(IB8_QOS_CNTL, 0x000C510C)
 215REG32(IB8_MAX_OT, 0x000C5110)
 216REG32(IB8_MAX_COMB_OT, 0x000C5114)
 217REG32(IB8_AW_P, 0x000C5118)
 218REG32(IB8_AW_B, 0x000C511C)
 219REG32(IB8_AW_R, 0x000C5120)
 220REG32(IB8_AR_P, 0x000C5124)
 221REG32(IB8_AR_B, 0x000C5128)
 222REG32(IB8_AR_R, 0x000C512C)
 223REG32(IB0_FN_MOD_ISS_BM, 0x000C6008)
 224REG32(IB0_FN_MOD2, 0x000C6024)
 225REG32(IB0_FN_MOD, 0x000C6108)
 226REG32(IB0_QOS_CNTL, 0x000C610C)
 227REG32(IB0_MAX_OT, 0x000C6110)
 228REG32(IB0_MAX_COMB_OT, 0x000C6114)
 229REG32(IB0_AW_P, 0x000C6118)
 230REG32(IB0_AW_B, 0x000C611C)
 231REG32(IB0_AW_R, 0x000C6120)
 232REG32(IB0_AR_P, 0x000C6124)
 233REG32(IB0_AR_B, 0x000C6128)
 234REG32(IB0_AR_R, 0x000C612C)
 235REG32(IB11_FN_MOD_ISS_BM, 0x000C7008)
 236REG32(IB11_FN_MOD2, 0x000C7024)
 237REG32(IB11_FN_MOD, 0x000C7108)
 238REG32(IB11_QOS_CNTL, 0x000C710C)
 239REG32(IB11_MAX_OT, 0x000C7110)
 240REG32(IB11_MAX_COMB_OT, 0x000C7114)
 241REG32(IB11_AW_P, 0x000C7118)
 242REG32(IB11_AW_B, 0x000C711C)
 243REG32(IB11_AW_R, 0x000C7120)
 244REG32(IB11_AR_P, 0x000C7124)
 245REG32(IB11_AR_B, 0x000C7128)
 246REG32(IB11_AR_R, 0x000C712C)
 247REG32(IB12_FN_MOD_ISS_BM, 0x000C8008)
 248REG32(IB12_FN_MOD2, 0x000C8024)
 249REG32(IB12_FN_MOD, 0x000C8108)
 250REG32(IB12_QOS_CNTL, 0x000C810C)
 251REG32(IB12_MAX_OT, 0x000C8110)
 252REG32(IB12_MAX_COMB_OT, 0x000C8114)
 253REG32(IB12_AW_P, 0x000C8118)
 254REG32(IB12_AW_B, 0x000C811C)
 255REG32(IB12_AW_R, 0x000C8120)
 256REG32(IB12_AR_P, 0x000C8124)
 257REG32(IB12_AR_B, 0x000C8128)
 258REG32(IB12_AR_R, 0x000C812C)
 259
 260#define LPD_GPV_R_MAX (R_IB12_AR_R + 1)
 261
 262typedef struct XlnxLPDGPVState {
 263    SysBusDevice parent_obj;
 264    MemoryRegion iomem;
 265    qemu_irq irq_isr;
 266
 267    uint32_t regs[LPD_GPV_R_MAX];
 268    RegisterInfo regs_info[LPD_GPV_R_MAX];
 269    const char *prefix;
 270} XlnxLPDGPVState;
 271
 272static RegisterAccessInfo lpd_gpv_regs_info[] = {
 273    {     .name = "PERIPH_ID_4", .addr = A_PERIPH_ID_4,
 274          .reset = 0x00000004, .ro = 0xFFFFFFFF,
 275    },{   .name = "PERIPH_ID_5", .addr = A_PERIPH_ID_5,
 276          .reset = 0, .ro = 0xFFFFFFFF,
 277    },{   .name = "PERIPH_ID_6", .addr = A_PERIPH_ID_6,
 278          .reset = 0, .ro = 0xFFFFFFFF,
 279    },{   .name = "PERIPH_ID_7", .addr = A_PERIPH_ID_7,
 280          .reset = 0, .ro = 0xFFFFFFFF,
 281    },{   .name = "PERIPH_ID_0", .addr = A_PERIPH_ID_0,
 282          .reset = 0, .ro = 0xFFFFFFFF,
 283    },{   .name = "PERIPH_ID_1", .addr = A_PERIPH_ID_1,
 284          .reset = 0x000000B4, .ro = 0xFFFFFFFF,
 285    },{   .name = "PERIPH_ID_2", .addr = A_PERIPH_ID_2,
 286          .reset = 0x0000002B, .ro = 0xFFFFFFFF,
 287    },{   .name = "PERIPH_ID_3", .addr = A_PERIPH_ID_3,
 288          .reset = 0, .ro = 0xFFFFFFFF,
 289    },{   .name = "COMP_ID_0", .addr = A_COMP_ID_0,
 290          .reset = 0x0000000D, .ro = 0xFFFFFFFF,
 291    },{   .name = "COMP_ID_1", .addr = A_COMP_ID_1,
 292          .reset = 0x000000F0, .ro = 0xFFFFFFFF,
 293    },{   .name = "COMP_ID_2", .addr = A_COMP_ID_2,
 294          .reset = 0x00000005, .ro = 0xFFFFFFFF,
 295    },{   .name = "COMP_ID_3", .addr = A_COMP_ID_3,
 296          .reset = 0x000000B1, .ro = 0xFFFFFFFF,
 297    },{   .name = "INTLPD_OCM_FN_MOD_ISS_BM",
 298          .addr = A_INTLPD_OCM_FN_MOD_ISS_BM,
 299          .reset = 0,
 300    },{   .name = "INTLPD_RPUS0_FN_MOD_ISS_BM",
 301          .addr = A_INTLPD_RPUS0_FN_MOD_ISS_BM,
 302          .reset = 0,
 303    },{   .name = "INTLPD_RPUS1_FN_MOD_ISS_BM",
 304          .addr = A_INTLPD_RPUS1_FN_MOD_ISS_BM,
 305          .reset = 0,
 306    },{   .name = "INTLPD_USB0S_FN_MOD_ISS_BM",
 307          .addr = A_INTLPD_USB0S_FN_MOD_ISS_BM,
 308          .reset = 0,
 309    },{   .name = "INTLPD_USB1S_FN_MOD_ISS_BM",
 310          .addr = A_INTLPD_USB1S_FN_MOD_ISS_BM,
 311          .reset = 0,
 312    },{   .name = "INTLPD_AFIFS2_FN_MOD_ISS_BM",
 313          .addr = A_INTLPD_AFIFS2_FN_MOD_ISS_BM,
 314          .reset = 0,
 315    },{   .name = "INTLPD_INTIOU_IB_FN_MOD_ISS_BM",
 316          .addr = A_INTLPD_INTIOU_IB_FN_MOD_ISS_BM,
 317          .reset = 0,
 318    },{   .name = "INTLPD_INTIOU_IB_FN_MOD",
 319          .addr = A_INTLPD_INTIOU_IB_FN_MOD,
 320          .reset = 0,
 321    },{   .name = "SLAVE_11_IB_FN_MOD_ISS_BM",
 322          .addr = A_SLAVE_11_IB_FN_MOD_ISS_BM,
 323          .reset = 0,
 324    },{   .name = "RPUM0_INTLPD_READ_QOS",
 325          .addr = A_RPUM0_INTLPD_READ_QOS,
 326          .reset = 0,
 327    },{   .name = "RPUM0_INTLPD_WRITE_QOS",
 328          .addr = A_RPUM0_INTLPD_WRITE_QOS,
 329          .reset = 0,
 330    },{   .name = "RPUM0_INTLPD_FN_MOD",
 331          .addr = A_RPUM0_INTLPD_FN_MOD,
 332          .reset = 0,
 333    },{   .name = "RPUM0_INTLPD_QOS_CTNL",
 334          .addr = A_RPUM0_INTLPD_QOS_CTNL,
 335          .reset = 0,
 336    },{   .name = "RPUM0_INTLPD_MAX_OT", .addr = A_RPUM0_INTLPD_MAX_OT,
 337          .reset = 0,
 338    },{   .name = "RPUM0_INTLPD_MAX_COMB_OT",
 339          .addr = A_RPUM0_INTLPD_MAX_COMB_OT,
 340          .reset = 0,
 341    },{   .name = "RPUM0_INTLPD_AW_P", .addr = A_RPUM0_INTLPD_AW_P,
 342          .reset = 0,
 343    },{   .name = "RPUM0_INTLPD_AW_B", .addr = A_RPUM0_INTLPD_AW_B,
 344          .reset = 0,
 345    },{   .name = "RPUM0_INTLPD_AW_R", .addr = A_RPUM0_INTLPD_AW_R,
 346          .reset = 0,
 347    },{   .name = "RPUM0_INTLPD_AR_P", .addr = A_RPUM0_INTLPD_AR_P,
 348          .reset = 0,
 349    },{   .name = "RPUM0_INTLPD_AR_B", .addr = A_RPUM0_INTLPD_AR_B,
 350          .reset = 0,
 351    },{   .name = "RPUM0_INTLPD_AR_R", .addr = A_RPUM0_INTLPD_AR_R,
 352          .reset = 0,
 353    },{   .name = "RPUM1_INTLPD_READ_QOS",
 354          .addr = A_RPUM1_INTLPD_READ_QOS,
 355          .reset = 0,
 356    },{   .name = "RPUM1_INTLPD_WRITE_QOS",
 357          .addr = A_RPUM1_INTLPD_WRITE_QOS,
 358          .reset = 0,
 359    },{   .name = "RPUM1_INTLPD_FN_MOD", .addr = A_RPUM1_INTLPD_FN_MOD,
 360          .reset = 0,
 361    },{   .name = "RPUM1_INTLPD_QOS_CTNL",
 362          .addr = A_RPUM1_INTLPD_QOS_CTNL,
 363          .reset = 0,
 364    },{   .name = "RPUM1_INTLPD_MAX_OT", .addr = A_RPUM1_INTLPD_MAX_OT,
 365          .reset = 0,
 366    },{   .name = "RPUM1_INTLPD_MAX_COMB_OT",
 367          .addr = A_RPUM1_INTLPD_MAX_COMB_OT,
 368          .reset = 0,
 369    },{   .name = "RPUM1_INTLPD_AW_P", .addr = A_RPUM1_INTLPD_AW_P,
 370          .reset = 0,
 371    },{   .name = "RPUM1_INTLPD_AW_B", .addr = A_RPUM1_INTLPD_AW_B,
 372          .reset = 0,
 373    },{   .name = "RPUM1_INTLPD_AW_R", .addr = A_RPUM1_INTLPD_AW_R,
 374          .reset = 0,
 375    },{   .name = "RPUM1_INTLPD_AR_P", .addr = A_RPUM1_INTLPD_AR_P,
 376          .reset = 0,
 377    },{   .name = "RPUM1_INTLPD_AR_B", .addr = A_RPUM1_INTLPD_AR_B,
 378          .reset = 0,
 379    },{   .name = "RPUM1_INTLPD_AR_R", .addr = A_RPUM1_INTLPD_AR_R,
 380          .reset = 0,
 381    },{   .name = "ADMAM_INTLPD_IB_FN_MOD2",
 382          .addr = A_ADMAM_INTLPD_IB_FN_MOD2,
 383          .reset = 0,
 384    },{   .name = "ADMAM_INTLPD_IB_FN_MOD",
 385          .addr = A_ADMAM_INTLPD_IB_FN_MOD,
 386          .reset = 0,
 387    },{   .name = "ADMAM_INTLPD_IB_QOS_CNTL",
 388          .addr = A_ADMAM_INTLPD_IB_QOS_CNTL,
 389          .reset = 0,
 390    },{   .name = "ADMAM_INTLPD_IB_MAX_OT",
 391          .addr = A_ADMAM_INTLPD_IB_MAX_OT,
 392          .reset = 0,
 393    },{   .name = "ADMAM_INTLPD_IB_MAX_COMB_OT",
 394          .addr = A_ADMAM_INTLPD_IB_MAX_COMB_OT,
 395          .reset = 0,
 396    },{   .name = "ADMAM_INTLPD_IB_AW_P", .addr = A_ADMAM_INTLPD_IB_AW_P,
 397          .reset = 0,
 398    },{   .name = "ADMAM_INTLPD_IB_AW_B", .addr = A_ADMAM_INTLPD_IB_AW_B,
 399          .reset = 0,
 400    },{   .name = "ADMAM_INTLPD_IB_AW_R", .addr = A_ADMAM_INTLPD_IB_AW_R,
 401          .reset = 0,
 402    },{   .name = "ADMAM_INTLPD_IB_AR_P", .addr = A_ADMAM_INTLPD_IB_AR_P,
 403          .reset = 0,
 404    },{   .name = "ADMAM_INTLPD_IB_AR_B", .addr = A_ADMAM_INTLPD_IB_AR_B,
 405          .reset = 0,
 406    },{   .name = "ADMAM_INTLPD_IB_AR_R", .addr = A_ADMAM_INTLPD_IB_AR_R,
 407          .reset = 0,
 408    },{   .name = "AFIFM6M_INTLPD_IB_FN_MOD",
 409          .addr = A_AFIFM6M_INTLPD_IB_FN_MOD,
 410          .reset = 0,
 411    },{   .name = "AFIFM6M_INTLPD_IB_QOS_CNTL",
 412          .addr = A_AFIFM6M_INTLPD_IB_QOS_CNTL,
 413          .reset = 0,
 414    },{   .name = "AFIFM6M_INTLPD_IB_MAX_OT",
 415          .addr = A_AFIFM6M_INTLPD_IB_MAX_OT,
 416          .reset = 0,
 417    },{   .name = "AFIFM6M_INTLPD_IB_MAX_COMB_OT",
 418          .addr = A_AFIFM6M_INTLPD_IB_MAX_COMB_OT,
 419          .reset = 0,
 420    },{   .name = "AFIFM6M_INTLPD_IB_AW_P",
 421          .addr = A_AFIFM6M_INTLPD_IB_AW_P,
 422          .reset = 0,
 423    },{   .name = "AFIFM6M_INTLPD_IB_AW_B",
 424          .addr = A_AFIFM6M_INTLPD_IB_AW_B,
 425          .reset = 0,
 426    },{   .name = "AFIFM6M_INTLPD_IB_AW_R",
 427          .addr = A_AFIFM6M_INTLPD_IB_AW_R,
 428          .reset = 0,
 429    },{   .name = "AFIFM6M_INTLPD_IB_AR_P",
 430          .addr = A_AFIFM6M_INTLPD_IB_AR_P,
 431          .reset = 0,
 432    },{   .name = "AFIFM6M_INTLPD_IB_AR_B",
 433          .addr = A_AFIFM6M_INTLPD_IB_AR_B,
 434          .reset = 0,
 435    },{   .name = "AFIFM6M_INTLPD_IB_AR_R",
 436          .addr = A_AFIFM6M_INTLPD_IB_AR_R,
 437          .reset = 0,
 438    },{   .name = "DAP_INTLPD_IB_FN_MOD2",
 439          .addr = A_DAP_INTLPD_IB_FN_MOD2,
 440          .reset = 0,
 441    },{   .name = "DAP_INTLPD_IB_READ_QOS",
 442          .addr = A_DAP_INTLPD_IB_READ_QOS,
 443          .reset = 0,
 444    },{   .name = "DAP_INTLPD_IB_WRITE_QOS",
 445          .addr = A_DAP_INTLPD_IB_WRITE_QOS,
 446          .reset = 0,
 447    },{   .name = "DAP_INTLPD_IB_FN_MOD", .addr = A_DAP_INTLPD_IB_FN_MOD,
 448          .reset = 0,
 449    },{   .name = "DAP_INTLPD_IB_QOS_CNTL",
 450          .addr = A_DAP_INTLPD_IB_QOS_CNTL,
 451          .reset = 0,
 452    },{   .name = "DAP_INTLPD_IB_MAX_OT", .addr = A_DAP_INTLPD_IB_MAX_OT,
 453          .reset = 0,
 454    },{   .name = "DAP_INTLPD_IB_MAX_COMB_OT",
 455          .addr = A_DAP_INTLPD_IB_MAX_COMB_OT,
 456          .reset = 0,
 457    },{   .name = "DAP_INTLPD_IB_AW_P", .addr = A_DAP_INTLPD_IB_AW_P,
 458          .reset = 0,
 459    },{   .name = "DAP_INTLPD_IB_AW_B", .addr = A_DAP_INTLPD_IB_AW_B,
 460          .reset = 0,
 461    },{   .name = "DAP_INTLPD_IB_AW_R", .addr = A_DAP_INTLPD_IB_AW_R,
 462          .reset = 0,
 463    },{   .name = "DAP_INTLPD_IB_AR_P", .addr = A_DAP_INTLPD_IB_AR_P,
 464          .reset = 0,
 465    },{   .name = "DAP_INTLPD_IB_AR_B", .addr = A_DAP_INTLPD_IB_AR_B,
 466          .reset = 0,
 467    },{   .name = "DAP_INTLPD_IB_AR_R", .addr = A_DAP_INTLPD_IB_AR_R,
 468          .reset = 0,
 469    },{   .name = "USB0M_INTLPD_IB_READ_QOS",
 470          .addr = A_USB0M_INTLPD_IB_READ_QOS,
 471          .reset = 0,
 472    },{   .name = "USB0M_INTLPD_IB_WRITE_QOS",
 473          .addr = A_USB0M_INTLPD_IB_WRITE_QOS,
 474          .reset = 0,
 475    },{   .name = "USB0M_INTLPD_IB_FN_MOD",
 476          .addr = A_USB0M_INTLPD_IB_FN_MOD,
 477          .reset = 0,
 478    },{   .name = "USB0M_INTLPD_IB_QOS_CNTL",
 479          .addr = A_USB0M_INTLPD_IB_QOS_CNTL,
 480          .reset = 0,
 481    },{   .name = "USB0M_INTLPD_IB_MAX_OT",
 482          .addr = A_USB0M_INTLPD_IB_MAX_OT,
 483          .reset = 0,
 484    },{   .name = "USB0M_INTLPD_IB_MAX_COMB_OT",
 485          .addr = A_USB0M_INTLPD_IB_MAX_COMB_OT,
 486          .reset = 0,
 487    },{   .name = "USB0M_INTLPD_IB_AW_P", .addr = A_USB0M_INTLPD_IB_AW_P,
 488          .reset = 0,
 489    },{   .name = "USB0M_INTLPD_IB_AW_B", .addr = A_USB0M_INTLPD_IB_AW_B,
 490          .reset = 0,
 491    },{   .name = "USB0M_INTLPD_IB_AW_R", .addr = A_USB0M_INTLPD_IB_AW_R,
 492          .reset = 0,
 493    },{   .name = "USB0M_INTLPD_IB_AR_P", .addr = A_USB0M_INTLPD_IB_AR_P,
 494          .reset = 0,
 495    },{   .name = "USB0M_INTLPD_IB_AR_B", .addr = A_USB0M_INTLPD_IB_AR_B,
 496          .reset = 0,
 497    },{   .name = "USB0M_INTLPD_IB_AR_R", .addr = A_USB0M_INTLPD_IB_AR_R,
 498          .reset = 0,
 499    },{   .name = "USB1M_INTLPD_IB_READ_QOS",
 500          .addr = A_USB1M_INTLPD_IB_READ_QOS,
 501          .reset = 0,
 502    },{   .name = "USB1M_INTLPD_IB_WRITE_QOS",
 503          .addr = A_USB1M_INTLPD_IB_WRITE_QOS,
 504          .reset = 0,
 505    },{   .name = "USB1M_INTLPD_IB_FN_MOD",
 506          .addr = A_USB1M_INTLPD_IB_FN_MOD,
 507          .reset = 0,
 508    },{   .name = "USB1M_INTLPD_IB_QOS_CNTL",
 509          .addr = A_USB1M_INTLPD_IB_QOS_CNTL,
 510          .reset = 0,
 511    },{   .name = "USB1M_INTLPD_IB_MAX_OT",
 512          .addr = A_USB1M_INTLPD_IB_MAX_OT,
 513          .reset = 0,
 514    },{   .name = "USB1M_INTLPD_IB_MAX_COMB_OT",
 515          .addr = A_USB1M_INTLPD_IB_MAX_COMB_OT,
 516          .reset = 0,
 517    },{   .name = "USB1M_INTLPD_IB_AW_P", .addr = A_USB1M_INTLPD_IB_AW_P,
 518          .reset = 0,
 519    },{   .name = "USB1M_INTLPD_IB_AW_B", .addr = A_USB1M_INTLPD_IB_AW_B,
 520          .reset = 0,
 521    },{   .name = "USB1M_INTLPD_IB_AW_R", .addr = A_USB1M_INTLPD_IB_AW_R,
 522          .reset = 0,
 523    },{   .name = "USB1M_INTLPD_IB_AR_P", .addr = A_USB1M_INTLPD_IB_AR_P,
 524          .reset = 0,
 525    },{   .name = "USB1M_INTLPD_IB_AR_B", .addr = A_USB1M_INTLPD_IB_AR_B,
 526          .reset = 0,
 527    },{   .name = "USB1M_INTLPD_IB_AR_R", .addr = A_USB1M_INTLPD_IB_AR_R,
 528          .reset = 0,
 529    },{   .name = "INTIOU_INTLPD_IB_FN_MOD",
 530          .addr = A_INTIOU_INTLPD_IB_FN_MOD,
 531          .reset = 0,
 532    },{   .name = "INTIOU_INTLPD_IB_QOS_CNTL",
 533          .addr = A_INTIOU_INTLPD_IB_QOS_CNTL,
 534          .reset = 0,
 535    },{   .name = "INTIOU_INTLPD_IB_MAX_OT",
 536          .addr = A_INTIOU_INTLPD_IB_MAX_OT,
 537          .reset = 0,
 538    },{   .name = "INTIOU_INTLPD_IB_MAX_COMB_OT",
 539          .addr = A_INTIOU_INTLPD_IB_MAX_COMB_OT,
 540          .reset = 0,
 541    },{   .name = "INTIOU_INTLPD_IB_AW_P",
 542          .addr = A_INTIOU_INTLPD_IB_AW_P,
 543          .reset = 0,
 544    },{   .name = "INTIOU_INTLPD_IB_AW_B",
 545          .addr = A_INTIOU_INTLPD_IB_AW_B,
 546          .reset = 0,
 547    },{   .name = "INTIOU_INTLPD_IB_AW_R",
 548          .addr = A_INTIOU_INTLPD_IB_AW_R,
 549          .reset = 0,
 550    },{   .name = "INTIOU_INTLPD_IB_AR_P",
 551          .addr = A_INTIOU_INTLPD_IB_AR_P,
 552          .reset = 0,
 553    },{   .name = "INTIOU_INTLPD_IB_AR_B",
 554          .addr = A_INTIOU_INTLPD_IB_AR_B,
 555          .reset = 0,
 556    },{   .name = "INTIOU_INTLPD_IB_AR_R",
 557          .addr = A_INTIOU_INTLPD_IB_AR_R,
 558          .reset = 0,
 559    },{   .name = "INTCSUPMU_INTLPD_IB_FN_MOD",
 560          .addr = A_INTCSUPMU_INTLPD_IB_FN_MOD,
 561          .reset = 0,
 562    },{   .name = "INTCSUPMU_INTLPD_IB_QOS_CNTL",
 563          .addr = A_INTCSUPMU_INTLPD_IB_QOS_CNTL,
 564          .reset = 0,
 565    },{   .name = "INTCSUPMU_INTLPD_IB_MAX_OT",
 566          .addr = A_INTCSUPMU_INTLPD_IB_MAX_OT,
 567          .reset = 0,
 568    },{   .name = "INTCSUPMU_INTLPD_IB_MAX_COMB_OT",
 569          .addr = A_INTCSUPMU_INTLPD_IB_MAX_COMB_OT,
 570          .reset = 0,
 571    },{   .name = "INTCSUPMU_INTLPD_IB_AW_P",
 572          .addr = A_INTCSUPMU_INTLPD_IB_AW_P,
 573          .reset = 0,
 574    },{   .name = "INTCSUPMU_INTLPD_IB_AW_B",
 575          .addr = A_INTCSUPMU_INTLPD_IB_AW_B,
 576          .reset = 0,
 577    },{   .name = "INTCSUPMU_INTLPD_IB_AW_R",
 578          .addr = A_INTCSUPMU_INTLPD_IB_AW_R,
 579          .reset = 0,
 580    },{   .name = "INTCSUPMU_INTLPD_IB_AR_P",
 581          .addr = A_INTCSUPMU_INTLPD_IB_AR_P,
 582          .reset = 0,
 583    },{   .name = "INTCSUPMU_INTLPD_IB_AR_B",
 584          .addr = A_INTCSUPMU_INTLPD_IB_AR_B,
 585          .reset = 0,
 586    },{   .name = "INTCSUPMU_INTLPD_IB_AR_R",
 587          .addr = A_INTCSUPMU_INTLPD_IB_AR_R,
 588          .reset = 0,
 589    },{   .name = "INTLPDINBOUND_INTLPDMAIN_FN_MOD",
 590          .addr = A_INTLPDINBOUND_INTLPDMAIN_FN_MOD,
 591          .reset = 0,
 592    },{   .name = "INTLPDINBOUND_INTLPDMAIN_QOS_CNTL",
 593          .addr = A_INTLPDINBOUND_INTLPDMAIN_QOS_CNTL,
 594          .reset = 0,
 595    },{   .name = "INTLPDINBOUND_INTLPDMAIN_MAX_OT",
 596          .addr = A_INTLPDINBOUND_INTLPDMAIN_MAX_OT,
 597          .reset = 0,
 598    },{   .name = "INTLPDINBOUND_INTLPDMAIN_MAX_COMB_OT",
 599          .addr = A_INTLPDINBOUND_INTLPDMAIN_MAX_COMB_OT,
 600          .reset = 0,
 601    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AW_P",
 602          .addr = A_INTLPDINBOUND_INTLPDMAIN_AW_P,
 603          .reset = 0,
 604    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AW_B",
 605          .addr = A_INTLPDINBOUND_INTLPDMAIN_AW_B,
 606          .reset = 0,
 607    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AW_R",
 608          .addr = A_INTLPDINBOUND_INTLPDMAIN_AW_R,
 609          .reset = 0,
 610    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AR_P",
 611          .addr = A_INTLPDINBOUND_INTLPDMAIN_AR_P,
 612          .reset = 0,
 613    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AR_B",
 614          .addr = A_INTLPDINBOUND_INTLPDMAIN_AR_B,
 615          .reset = 0,
 616    },{   .name = "INTLPDINBOUND_INTLPDMAIN_AR_R",
 617          .addr = A_INTLPDINBOUND_INTLPDMAIN_AR_R,
 618          .reset = 0,
 619    },{   .name = "INTFPD_INTLPDOCM_FN_MOD",
 620          .addr = A_INTFPD_INTLPDOCM_FN_MOD,
 621          .reset = 0,
 622    },{   .name = "INTFPD_INTLPDOCM_QOS_CNTL",
 623          .addr = A_INTFPD_INTLPDOCM_QOS_CNTL,
 624          .reset = 0,
 625    },{   .name = "INTFPD_INTLPDOCM_MAX_OT",
 626          .addr = A_INTFPD_INTLPDOCM_MAX_OT,
 627          .reset = 0,
 628    },{   .name = "INTFPD_INTLPDOCM_MAX_COMB_OT",
 629          .addr = A_INTFPD_INTLPDOCM_MAX_COMB_OT,
 630          .reset = 0,
 631    },{   .name = "INTFPD_INTLPDOCM_AW_P",
 632          .addr = A_INTFPD_INTLPDOCM_AW_P,
 633          .reset = 0,
 634    },{   .name = "INTFPD_INTLPDOCM_AW_B",
 635          .addr = A_INTFPD_INTLPDOCM_AW_B,
 636          .reset = 0,
 637    },{   .name = "INTFPD_INTLPDOCM_AW_R",
 638          .addr = A_INTFPD_INTLPDOCM_AW_R,
 639          .reset = 0,
 640    },{   .name = "INTFPD_INTLPDOCM_AR_P",
 641          .addr = A_INTFPD_INTLPDOCM_AR_P,
 642          .reset = 0,
 643    },{   .name = "INTFPD_INTLPDOCM_AR_B",
 644          .addr = A_INTFPD_INTLPDOCM_AR_B,
 645          .reset = 0,
 646    },{   .name = "INTFPD_INTLPDOCM_AR_R",
 647          .addr = A_INTFPD_INTLPDOCM_AR_R,
 648          .reset = 0,
 649    },{   .name = "IB9_FN_MOD_ISS_BM", .addr = A_IB9_FN_MOD_ISS_BM,
 650          .reset = 0,
 651    },{   .name = "IB9_FN_MOD", .addr = A_IB9_FN_MOD,
 652          .reset = 0,
 653    },{   .name = "IB5_FN_MOD_ISS_BM", .addr = A_IB5_FN_MOD_ISS_BM,
 654          .reset = 0,
 655    },{   .name = "IB5_FN_MOD2", .addr = A_IB5_FN_MOD2,
 656          .reset = 0,
 657    },{   .name = "IB5_FN_MOD", .addr = A_IB5_FN_MOD,
 658          .reset = 0,
 659    },{   .name = "IB5_QOS_CNTL", .addr = A_IB5_QOS_CNTL,
 660          .reset = 0,
 661    },{   .name = "IB5_MAX_OT", .addr = A_IB5_MAX_OT,
 662          .reset = 0,
 663    },{   .name = "IB5_MAX_COMB_OT", .addr = A_IB5_MAX_COMB_OT,
 664          .reset = 0,
 665    },{   .name = "IB5_AW_P", .addr = A_IB5_AW_P,
 666          .reset = 0,
 667    },{   .name = "IB5_AW_B", .addr = A_IB5_AW_B,
 668          .reset = 0,
 669    },{   .name = "IB5_AW_R", .addr = A_IB5_AW_R,
 670          .reset = 0,
 671    },{   .name = "IB5_AR_P", .addr = A_IB5_AR_P,
 672          .reset = 0,
 673    },{   .name = "IB5_AR_B", .addr = A_IB5_AR_B,
 674          .reset = 0,
 675    },{   .name = "IB5_AR_R", .addr = A_IB5_AR_R,
 676          .reset = 0,
 677    },{   .name = "IB6_FN_MOD_ISS_BM", .addr = A_IB6_FN_MOD_ISS_BM,
 678          .reset = 0,
 679    },{   .name = "IB6_FN_MOD2", .addr = A_IB6_FN_MOD2,
 680          .reset = 0,
 681    },{   .name = "IB6_FN_MOD", .addr = A_IB6_FN_MOD,
 682          .reset = 0,
 683    },{   .name = "IB6_QOS_CNTL", .addr = A_IB6_QOS_CNTL,
 684          .reset = 0,
 685    },{   .name = "IB6_MAX_OT", .addr = A_IB6_MAX_OT,
 686          .reset = 0,
 687    },{   .name = "IB6_MAX_COMB_OT", .addr = A_IB6_MAX_COMB_OT,
 688          .reset = 0,
 689    },{   .name = "IB6_AW_P", .addr = A_IB6_AW_P,
 690          .reset = 0,
 691    },{   .name = "IB6_AW_B", .addr = A_IB6_AW_B,
 692          .reset = 0,
 693    },{   .name = "IB6_AW_R", .addr = A_IB6_AW_R,
 694          .reset = 0,
 695    },{   .name = "IB6_AR_P", .addr = A_IB6_AR_P,
 696          .reset = 0,
 697    },{   .name = "IB6_AR_B", .addr = A_IB6_AR_B,
 698          .reset = 0,
 699    },{   .name = "IB6_AR_R", .addr = A_IB6_AR_R,
 700          .reset = 0,
 701    },{   .name = "IB8_FN_MOD_ISS_BM", .addr = A_IB8_FN_MOD_ISS_BM,
 702          .reset = 0,
 703    },{   .name = "IB8_FN_MOD2", .addr = A_IB8_FN_MOD2,
 704          .reset = 0,
 705    },{   .name = "IB8_FN_MOD", .addr = A_IB8_FN_MOD,
 706          .reset = 0,
 707    },{   .name = "IB8_QOS_CNTL", .addr = A_IB8_QOS_CNTL,
 708          .reset = 0,
 709    },{   .name = "IB8_MAX_OT", .addr = A_IB8_MAX_OT,
 710          .reset = 0,
 711    },{   .name = "IB8_MAX_COMB_OT", .addr = A_IB8_MAX_COMB_OT,
 712          .reset = 0,
 713    },{   .name = "IB8_AW_P", .addr = A_IB8_AW_P,
 714          .reset = 0,
 715    },{   .name = "IB8_AW_B", .addr = A_IB8_AW_B,
 716          .reset = 0,
 717    },{   .name = "IB8_AW_R", .addr = A_IB8_AW_R,
 718          .reset = 0,
 719    },{   .name = "IB8_AR_P", .addr = A_IB8_AR_P,
 720          .reset = 0,
 721    },{   .name = "IB8_AR_B", .addr = A_IB8_AR_B,
 722          .reset = 0,
 723    },{   .name = "IB8_AR_R", .addr = A_IB8_AR_R,
 724          .reset = 0,
 725    },{   .name = "IB0_FN_MOD_ISS_BM", .addr = A_IB0_FN_MOD_ISS_BM,
 726          .reset = 0,
 727    },{   .name = "IB0_FN_MOD2", .addr = A_IB0_FN_MOD2,
 728          .reset = 0,
 729    },{   .name = "IB0_FN_MOD", .addr = A_IB0_FN_MOD,
 730          .reset = 0,
 731    },{   .name = "IB0_QOS_CNTL", .addr = A_IB0_QOS_CNTL,
 732          .reset = 0,
 733    },{   .name = "IB0_MAX_OT", .addr = A_IB0_MAX_OT,
 734          .reset = 0,
 735    },{   .name = "IB0_MAX_COMB_OT", .addr = A_IB0_MAX_COMB_OT,
 736          .reset = 0,
 737    },{   .name = "IB0_AW_P", .addr = A_IB0_AW_P,
 738          .reset = 0,
 739    },{   .name = "IB0_AW_B", .addr = A_IB0_AW_B,
 740          .reset = 0,
 741    },{   .name = "IB0_AW_R", .addr = A_IB0_AW_R,
 742          .reset = 0,
 743    },{   .name = "IB0_AR_P", .addr = A_IB0_AR_P,
 744          .reset = 0,
 745    },{   .name = "IB0_AR_B", .addr = A_IB0_AR_B,
 746          .reset = 0,
 747    },{   .name = "IB0_AR_R", .addr = A_IB0_AR_R,
 748          .reset = 0,
 749    },{   .name = "IB11_FN_MOD_ISS_BM", .addr = A_IB11_FN_MOD_ISS_BM,
 750          .reset = 0,
 751    },{   .name = "IB11_FN_MOD2", .addr = A_IB11_FN_MOD2,
 752          .reset = 0,
 753    },{   .name = "IB11_FN_MOD", .addr = A_IB11_FN_MOD,
 754          .reset = 0,
 755    },{   .name = "IB11_QOS_CNTL", .addr = A_IB11_QOS_CNTL,
 756          .reset = 0,
 757    },{   .name = "IB11_MAX_OT", .addr = A_IB11_MAX_OT,
 758          .reset = 0,
 759    },{   .name = "IB11_MAX_COMB_OT", .addr = A_IB11_MAX_COMB_OT,
 760          .reset = 0,
 761    },{   .name = "IB11_AW_P", .addr = A_IB11_AW_P,
 762          .reset = 0,
 763    },{   .name = "IB11_AW_B", .addr = A_IB11_AW_B,
 764          .reset = 0,
 765    },{   .name = "IB11_AW_R", .addr = A_IB11_AW_R,
 766          .reset = 0,
 767    },{   .name = "IB11_AR_P", .addr = A_IB11_AR_P,
 768          .reset = 0,
 769    },{   .name = "IB11_AR_B", .addr = A_IB11_AR_B,
 770          .reset = 0,
 771    },{   .name = "IB11_AR_R", .addr = A_IB11_AR_R,
 772          .reset = 0,
 773    },{   .name = "IB12_FN_MOD_ISS_BM", .addr = A_IB12_FN_MOD_ISS_BM,
 774          .reset = 0,
 775    },{   .name = "IB12_FN_MOD2", .addr = A_IB12_FN_MOD2,
 776          .reset = 0,
 777    },{   .name = "IB12_FN_MOD", .addr = A_IB12_FN_MOD,
 778          .reset = 0,
 779    },{   .name = "IB12_QOS_CNTL", .addr = A_IB12_QOS_CNTL,
 780          .reset = 0,
 781    },{   .name = "IB12_MAX_OT", .addr = A_IB12_MAX_OT,
 782          .reset = 0,
 783    },{   .name = "IB12_MAX_COMB_OT", .addr = A_IB12_MAX_COMB_OT,
 784          .reset = 0,
 785    },{   .name = "IB12_AW_P", .addr = A_IB12_AW_P,
 786          .reset = 0,
 787    },{   .name = "IB12_AW_B", .addr = A_IB12_AW_B,
 788          .reset = 0,
 789    },{   .name = "IB12_AW_R", .addr = A_IB12_AW_R,
 790          .reset = 0,
 791    },{   .name = "IB12_AR_P", .addr = A_IB12_AR_P,
 792          .reset = 0,
 793    },{   .name = "IB12_AR_B", .addr = A_IB12_AR_B,
 794          .reset = 0,
 795    },{   .name = "IB12_AR_R", .addr = A_IB12_AR_R,
 796          .reset = 0,
 797    },
 798};
 799
 800static void lpd_gpv_reset(DeviceState *dev)
 801{
 802    XlnxLPDGPVState *s = XLNX_LPD_GPV(dev);
 803    unsigned int i;
 804
 805    for (i = 0; i < ARRAY_SIZE(s->regs_info); ++i) {
 806        register_reset(&s->regs_info[i]);
 807    }
 808}
 809
 810static uint64_t lpd_gpv_read(void *opaque, hwaddr addr, unsigned size)
 811{
 812    XlnxLPDGPVState *s = XLNX_LPD_GPV(opaque);
 813    RegisterInfo *r = &s->regs_info[addr / 4];
 814
 815    if (!r->data) {
 816        qemu_log("%s: Decode error: read from %" HWADDR_PRIx "\n",
 817                 object_get_canonical_path(OBJECT(s)),
 818                 addr);
 819        return 0;
 820    }
 821    return register_read(r, ~0, s->prefix, XLNX_LPD_GPV_ERR_DEBUG);
 822}
 823
 824static void lpd_gpv_write(void *opaque, hwaddr addr, uint64_t value,
 825                      unsigned size)
 826{
 827    XlnxLPDGPVState *s = XLNX_LPD_GPV(opaque);
 828    RegisterInfo *r = &s->regs_info[addr / 4];
 829
 830    if (!r->data) {
 831        qemu_log("%s: Decode error: write to %" HWADDR_PRIx "=%" PRIx64 "\n",
 832                 object_get_canonical_path(OBJECT(s)),
 833                 addr, value);
 834        return;
 835    }
 836    register_write(r, value, ~0, s->prefix, XLNX_LPD_GPV_ERR_DEBUG);
 837}
 838
 839static const MemoryRegionOps lpd_gpv_ops = {
 840    .read = lpd_gpv_read,
 841    .write = lpd_gpv_write,
 842    .endianness = DEVICE_LITTLE_ENDIAN,
 843    .valid = {
 844        .min_access_size = 4,
 845        .max_access_size = 4,
 846    },
 847};
 848
 849static void lpd_gpv_init(Object *obj)
 850{
 851    XlnxLPDGPVState *s = XLNX_LPD_GPV(obj);
 852    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
 853    RegisterInfoArray *reg_array;
 854
 855    s->prefix = object_get_canonical_path(obj);
 856    memory_region_init_io(&s->iomem, obj, &lpd_gpv_ops, s,
 857                          TYPE_XLNX_LPD_GPV, LPD_GPV_R_MAX * 4);
 858    reg_array =
 859     register_init_block32(DEVICE(obj), lpd_gpv_regs_info,
 860                           ARRAY_SIZE(lpd_gpv_regs_info),
 861                           s->regs_info, s->regs,
 862                           &lpd_gpv_ops,
 863                           XLNX_LPD_GPV_ERR_DEBUG,
 864                           LPD_GPV_R_MAX * 4);
 865    memory_region_add_subregion(&s->iomem, 0x0, &reg_array->mem);
 866    sysbus_init_mmio(sbd, &s->iomem);
 867}
 868
 869static const VMStateDescription vmstate_lpd_gpv = {
 870    .name = TYPE_XLNX_LPD_GPV,
 871    .version_id = 1,
 872    .minimum_version_id = 1,
 873    .fields = (VMStateField[]) {
 874        VMSTATE_UINT32_ARRAY(regs, XlnxLPDGPVState, LPD_GPV_R_MAX),
 875        VMSTATE_END_OF_LIST(),
 876    }
 877};
 878
 879static void lpd_gpv_class_init(ObjectClass *klass, void *data)
 880{
 881    DeviceClass *dc = DEVICE_CLASS(klass);
 882
 883    dc->reset = lpd_gpv_reset;
 884    dc->vmsd = &vmstate_lpd_gpv;
 885}
 886
 887static const TypeInfo lpd_gpv_info = {
 888    .name          = TYPE_XLNX_LPD_GPV,
 889    .parent        = TYPE_SYS_BUS_DEVICE,
 890    .instance_size = sizeof(XlnxLPDGPVState),
 891    .class_init    = lpd_gpv_class_init,
 892    .instance_init = lpd_gpv_init,
 893};
 894
 895static void lpd_gpv_register_types(void)
 896{
 897    type_register_static(&lpd_gpv_info);
 898}
 899
 900type_init(lpd_gpv_register_types)
 901