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