aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h')
-rw-r--r--src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h8178
1 files changed, 8178 insertions, 0 deletions
diff --git a/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h b/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h
new file mode 100644
index 0000000000..664b48990c
--- /dev/null
+++ b/src/vendorcode/cavium/include/bdk/libbdk-arch/bdk-csrs-gic.h
@@ -0,0 +1,8178 @@
+#ifndef __BDK_CSRS_GIC_H__
+#define __BDK_CSRS_GIC_H__
+/* This file is auto-generated. Do not edit */
+
+/***********************license start***************
+ * Copyright (c) 2003-2017 Cavium Inc. (support@cavium.com). All rights
+ * reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+
+ * * Neither the name of Cavium Inc. nor the names of
+ * its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+
+ * This Software, including technical data, may be subject to U.S. export control
+ * laws, including the U.S. Export Administration Act and its associated
+ * regulations, and may be subject to export or import regulations in other
+ * countries.
+
+ * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+ * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
+ * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
+ * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
+ * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
+ * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
+ * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
+ * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+ * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
+ * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
+ ***********************license end**************************************/
+
+
+/**
+ * @file
+ *
+ * Configuration and status register (CSR) address and type definitions for
+ * Cavium GIC.
+ *
+ * This file is auto generated. Do not edit.
+ *
+ */
+
+/**
+ * Enumeration gic_bar_e
+ *
+ * GIC Base Address Register Enumeration
+ * Enumerates the base address registers.
+ */
+#define BDK_GIC_BAR_E_GIC_PF_BAR0 (0x801000000000ll)
+#define BDK_GIC_BAR_E_GIC_PF_BAR0_SIZE 0x20000ull
+#define BDK_GIC_BAR_E_GIC_PF_BAR2 (0x801000020000ll)
+#define BDK_GIC_BAR_E_GIC_PF_BAR2_SIZE 0x20000ull
+#define BDK_GIC_BAR_E_GIC_PF_BAR4 (0x801080000000ll)
+#define BDK_GIC_BAR_E_GIC_PF_BAR4_SIZE 0x1000000ull
+
+/**
+ * Enumeration gic_int_req_e
+ *
+ * GIC Performance Counter Enumeration
+ * Enumerates the index of GIC_INT_REQ()_PC.
+ */
+#define BDK_GIC_INT_REQ_E_GICD_CLRSPI_NSR_PC (1)
+#define BDK_GIC_INT_REQ_E_GICD_CLRSPI_SR_PC (3)
+#define BDK_GIC_INT_REQ_E_GICD_SETSPI_NSR_PC (0)
+#define BDK_GIC_INT_REQ_E_GICD_SETSPI_SR_PC (2)
+#define BDK_GIC_INT_REQ_E_GICR_CLRLPIR (6)
+#define BDK_GIC_INT_REQ_E_GICR_SETLPIR (5)
+#define BDK_GIC_INT_REQ_E_GITS_TRANSLATER (4)
+
+/**
+ * Enumeration gits_cmd_err_e
+ *
+ * GIC ITS Command Error Enumeration
+ * The actual 24-bit ITS command SEI is defined as {8'h01,
+ * GITS_CMD_TYPE_E(8-bit), GITS_CMD_ERR_E(8-bit)}.
+ */
+#define BDK_GITS_CMD_ERR_E_CSEI_CMD_TO (0xe0)
+#define BDK_GITS_CMD_ERR_E_CSEI_COLLECTION_OOR (3)
+#define BDK_GITS_CMD_ERR_E_CSEI_DEVICE_OOR (1)
+#define BDK_GITS_CMD_ERR_E_CSEI_ID_OOR (5)
+#define BDK_GITS_CMD_ERR_E_CSEI_ITE_INVALID (0x10)
+#define BDK_GITS_CMD_ERR_E_CSEI_ITTSIZE_OOR (2)
+#define BDK_GITS_CMD_ERR_E_CSEI_PHYSICALID_OOR (6)
+#define BDK_GITS_CMD_ERR_E_CSEI_SYNCACK_INVALID (0xe1)
+#define BDK_GITS_CMD_ERR_E_CSEI_TA_INVALID (0xfe)
+#define BDK_GITS_CMD_ERR_E_CSEI_UNMAPPED_COLLECTION (9)
+#define BDK_GITS_CMD_ERR_E_CSEI_UNMAPPED_DEVICE (4)
+#define BDK_GITS_CMD_ERR_E_CSEI_UNMAPPED_INTERRUPT (7)
+#define BDK_GITS_CMD_ERR_E_CSEI_UNSUPPORTED_CMD (0xff)
+
+/**
+ * Enumeration gits_cmd_type_e
+ *
+ * GIC ITS Command Type Enumeration
+ * Enumerates the ITS commands.
+ */
+#define BDK_GITS_CMD_TYPE_E_CMD_CLEAR (4)
+#define BDK_GITS_CMD_TYPE_E_CMD_DISCARD (0xf)
+#define BDK_GITS_CMD_TYPE_E_CMD_INT (3)
+#define BDK_GITS_CMD_TYPE_E_CMD_INV (0xc)
+#define BDK_GITS_CMD_TYPE_E_CMD_INVALL (0xd)
+#define BDK_GITS_CMD_TYPE_E_CMD_MAPC (9)
+#define BDK_GITS_CMD_TYPE_E_CMD_MAPD (8)
+#define BDK_GITS_CMD_TYPE_E_CMD_MAPI (0xb)
+#define BDK_GITS_CMD_TYPE_E_CMD_MAPVI (0xa)
+#define BDK_GITS_CMD_TYPE_E_CMD_MOVALL (0xe)
+#define BDK_GITS_CMD_TYPE_E_CMD_MOVI (1)
+#define BDK_GITS_CMD_TYPE_E_CMD_SYNC (5)
+#define BDK_GITS_CMD_TYPE_E_CMD_UDF (0)
+
+/**
+ * Structure gits_cmd_clear_s
+ *
+ * GIC ITS Clear Command Structure
+ */
+union bdk_gits_cmd_clear_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_clear_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_CLEAR. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_CLEAR. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_128_191 : 64;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_191 : 64;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_clear_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_discard_s
+ *
+ * GIC ITS Discard Command Structure
+ */
+union bdk_gits_cmd_discard_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_discard_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_DISCARD. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_DISCARD. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_128_191 : 64;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_191 : 64;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_discard_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_int_s
+ *
+ * GIC ITS INT Command Structure
+ */
+union bdk_gits_cmd_int_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_int_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INT. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INT. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_128_191 : 64;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_191 : 64;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_int_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_inv_s
+ *
+ * GIC ITS INV Command Structure
+ */
+union bdk_gits_cmd_inv_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_inv_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INV. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INV. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_128_191 : 64;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_191 : 64;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_inv_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_invall_s
+ *
+ * GIC ITS INVALL Command Structure
+ */
+union bdk_gits_cmd_invall_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_invall_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_8_63 : 56;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INVALL. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_INVALL. */
+ uint64_t reserved_8_63 : 56;
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_64_127 : 64;
+#else /* Word 1 - Little Endian */
+ uint64_t reserved_64_127 : 64;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_144_191 : 48;
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+#else /* Word 2 - Little Endian */
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+ uint64_t reserved_144_191 : 48;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_invall_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_mapc_s
+ *
+ * GIC ITS MAPC Command Structure
+ */
+union bdk_gits_cmd_mapc_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_mapc_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_8_63 : 56;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPC. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPC. */
+ uint64_t reserved_8_63 : 56;
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_64_127 : 64;
+#else /* Word 1 - Little Endian */
+ uint64_t reserved_64_127 : 64;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t v : 1; /**< [191:191] Valid bit. Specifies whether the ITT address and size are valid. When [V] is
+ zero, this command unmaps the specified device and translation request from
+ that device will be discarded. */
+ uint64_t reserved_176_190 : 15;
+ uint64_t ta : 32; /**< [175:144] Target address. Specifies the physical address of the redistributor to which
+ interrupts for the collection will be forwarded. */
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+#else /* Word 2 - Little Endian */
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+ uint64_t ta : 32; /**< [175:144] Target address. Specifies the physical address of the redistributor to which
+ interrupts for the collection will be forwarded. */
+ uint64_t reserved_176_190 : 15;
+ uint64_t v : 1; /**< [191:191] Valid bit. Specifies whether the ITT address and size are valid. When [V] is
+ zero, this command unmaps the specified device and translation request from
+ that device will be discarded. */
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_mapc_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_mapd_s
+ *
+ * GIC ITS MAPD Command Structure
+ */
+union bdk_gits_cmd_mapd_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_mapd_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPD. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPD. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_69_127 : 59;
+ uint64_t size : 5; /**< [ 68: 64] Number of bits of interrupt ID supported for this device, minus one. */
+#else /* Word 1 - Little Endian */
+ uint64_t size : 5; /**< [ 68: 64] Number of bits of interrupt ID supported for this device, minus one. */
+ uint64_t reserved_69_127 : 59;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t v : 1; /**< [191:191] Valid bit. Specifies whether the ITT address and size are valid. When [V] is zero,
+ this command unmaps the specified device and translation request from that
+ device will be discarded. */
+ uint64_t reserved_176_190 : 15;
+ uint64_t itta : 40; /**< [175:136] ITT address. Specifies bits \<47:8\> of the physical address of the interrupt
+ translation table. Bits \<7:0\> of the physical address are zero. */
+ uint64_t reserved_128_135 : 8;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_135 : 8;
+ uint64_t itta : 40; /**< [175:136] ITT address. Specifies bits \<47:8\> of the physical address of the interrupt
+ translation table. Bits \<7:0\> of the physical address are zero. */
+ uint64_t reserved_176_190 : 15;
+ uint64_t v : 1; /**< [191:191] Valid bit. Specifies whether the ITT address and size are valid. When [V] is zero,
+ this command unmaps the specified device and translation request from that
+ device will be discarded. */
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_mapd_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_mapi_s
+ *
+ * GIC ITS MAPI Command Structure
+ */
+union bdk_gits_cmd_mapi_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_mapi_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPI. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPI. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_144_191 : 48;
+ uint64_t cid : 16; /**< [143:128] Collection. Specifies the interrupt collection of which the interrupt with identifier
+ physical ID is a member. */
+#else /* Word 2 - Little Endian */
+ uint64_t cid : 16; /**< [143:128] Collection. Specifies the interrupt collection of which the interrupt with identifier
+ physical ID is a member. */
+ uint64_t reserved_144_191 : 48;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_mapi_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_mapvi_s
+ *
+ * GIC ITS MAPVI Command Structure
+ */
+union bdk_gits_cmd_mapvi_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_mapvi_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPVI. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MAPVI. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t phy_id : 32; /**< [127: 96] Reserved. */
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Reserved. */
+ uint64_t phy_id : 32; /**< [127: 96] Reserved. */
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_144_191 : 48;
+ uint64_t cid : 16; /**< [143:128] Collection. Specifies the interrupt collection of which the interrupt with identifier
+ physical ID is a member. */
+#else /* Word 2 - Little Endian */
+ uint64_t cid : 16; /**< [143:128] Collection. Specifies the interrupt collection of which the interrupt with identifier
+ physical ID is a member. */
+ uint64_t reserved_144_191 : 48;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_mapvi_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_movall_s
+ *
+ * GIC ITS MOVALL Command Structure
+ */
+union bdk_gits_cmd_movall_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_movall_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_8_63 : 56;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MOVALL. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MOVALL. */
+ uint64_t reserved_8_63 : 56;
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_64_127 : 64;
+#else /* Word 1 - Little Endian */
+ uint64_t reserved_64_127 : 64;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_176_191 : 16;
+ uint64_t ta1 : 32; /**< [175:144] Target address 1. Specifies the old redistributor. */
+ uint64_t reserved_128_143 : 16;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_143 : 16;
+ uint64_t ta1 : 32; /**< [175:144] Target address 1. Specifies the old redistributor. */
+ uint64_t reserved_176_191 : 16;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_240_255 : 16;
+ uint64_t ta2 : 32; /**< [239:208] Target address 2. Specifies the new redistributor. */
+ uint64_t reserved_192_207 : 16;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_207 : 16;
+ uint64_t ta2 : 32; /**< [239:208] Target address 2. Specifies the new redistributor. */
+ uint64_t reserved_240_255 : 16;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_movall_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_movi_s
+ *
+ * GIC ITS MOVI Command Structure
+ */
+union bdk_gits_cmd_movi_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_movi_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MOVI. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_MOVI. */
+ uint64_t reserved_8_31 : 24;
+ uint64_t dev_id : 32; /**< [ 63: 32] Interrupt device ID. */
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_96_127 : 32;
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+#else /* Word 1 - Little Endian */
+ uint64_t int_id : 32; /**< [ 95: 64] Interrupt ID to be translated. */
+ uint64_t reserved_96_127 : 32;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_144_191 : 48;
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+#else /* Word 2 - Little Endian */
+ uint64_t cid : 16; /**< [143:128] Interrupt collection ID. */
+ uint64_t reserved_144_191 : 48;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_movi_s_s cn; */
+};
+
+/**
+ * Structure gits_cmd_sync_s
+ *
+ * GIC ITS SYNC Command Structure
+ */
+union bdk_gits_cmd_sync_s
+{
+ uint64_t u[4];
+ struct bdk_gits_cmd_sync_s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_8_63 : 56;
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_SYNC. */
+#else /* Word 0 - Little Endian */
+ uint64_t cmd_type : 8; /**< [ 7: 0] Command type. Indicates GITS_CMD_TYPE_E::CMD_SYNC. */
+ uint64_t reserved_8_63 : 56;
+#endif /* Word 0 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 1 - Big Endian */
+ uint64_t reserved_64_127 : 64;
+#else /* Word 1 - Little Endian */
+ uint64_t reserved_64_127 : 64;
+#endif /* Word 1 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 2 - Big Endian */
+ uint64_t reserved_176_191 : 16;
+ uint64_t ta : 32; /**< [175:144] Target address of the redistributor 0. */
+ uint64_t reserved_128_143 : 16;
+#else /* Word 2 - Little Endian */
+ uint64_t reserved_128_143 : 16;
+ uint64_t ta : 32; /**< [175:144] Target address of the redistributor 0. */
+ uint64_t reserved_176_191 : 16;
+#endif /* Word 2 - End */
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 3 - Big Endian */
+ uint64_t reserved_192_255 : 64;
+#else /* Word 3 - Little Endian */
+ uint64_t reserved_192_255 : 64;
+#endif /* Word 3 - End */
+ } s;
+ /* struct bdk_gits_cmd_sync_s_s cn; */
+};
+
+/**
+ * Register (NCB) gic_bist_statusr
+ *
+ * GIC Implementation BIST Status Register
+ * This register contains the BIST status for the GIC memories (including ITS and RDB).
+ */
+union bdk_gic_bist_statusr
+{
+ uint64_t u;
+ struct bdk_gic_bist_statusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_9_63 : 55;
+ uint64_t bist : 9; /**< [ 8: 0](RO/H) Memory BIST status:
+ 0 = Pass.
+ 1 = Fail.
+
+ Internal:
+ [8:0]= [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+#else /* Word 0 - Little Endian */
+ uint64_t bist : 9; /**< [ 8: 0](RO/H) Memory BIST status:
+ 0 = Pass.
+ 1 = Fail.
+
+ Internal:
+ [8:0]= [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_9_63 : 55;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_bist_statusr_s cn; */
+};
+typedef union bdk_gic_bist_statusr bdk_gic_bist_statusr_t;
+
+#define BDK_GIC_BIST_STATUSR BDK_GIC_BIST_STATUSR_FUNC()
+static inline uint64_t BDK_GIC_BIST_STATUSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_BIST_STATUSR_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
+ return 0x801000010020ll;
+ __bdk_csr_fatal("GIC_BIST_STATUSR", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_BIST_STATUSR bdk_gic_bist_statusr_t
+#define bustype_BDK_GIC_BIST_STATUSR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_BIST_STATUSR "GIC_BIST_STATUSR"
+#define device_bar_BDK_GIC_BIST_STATUSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_BIST_STATUSR 0
+#define arguments_BDK_GIC_BIST_STATUSR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_bp_test0
+ *
+ * INTERNAL: GIC Backpressure Test Register
+ */
+union bdk_gic_bp_test0
+{
+ uint64_t u;
+ struct bdk_gic_bp_test0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t enable : 4; /**< [ 63: 60](R/W) Enable test mode. For diagnostic use only.
+ Internal:
+ Once a bit is set, random backpressure is generated
+ at the corresponding point to allow for more frequent backpressure.
+ \<63\> = Limit RDB NCBI transactions. Never limit 100% of the time.
+ \<62\> = Limit ITS NCBI transactions. Never limit 100% of the time.
+ \<61\> = Limit RDB interrupt message handling via NCBO. Never limit 100% of the time.
+ \<60\> = Limit ITS interrupt message handling via NCBO. Never limit 100% of the time. */
+ uint64_t reserved_24_59 : 36;
+ uint64_t bp_cfg : 8; /**< [ 23: 16](R/W) Backpressure weight. For diagnostic use only.
+ Internal:
+ There are 2 backpressure configuration bits per enable, with the two bits
+ defined as 0x0=100% of the time, 0x1=75% of the time, 0x2=50% of the time,
+ 0x3=25% of the time.
+ \<23:22\> = Config 3.
+ \<21:20\> = Config 2.
+ \<19:18\> = Config 1.
+ \<17:16\> = Config 0. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t lfsr_freq : 12; /**< [ 11: 0](R/W) Test LFSR update frequency in coprocessor-clocks minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t lfsr_freq : 12; /**< [ 11: 0](R/W) Test LFSR update frequency in coprocessor-clocks minus one. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t bp_cfg : 8; /**< [ 23: 16](R/W) Backpressure weight. For diagnostic use only.
+ Internal:
+ There are 2 backpressure configuration bits per enable, with the two bits
+ defined as 0x0=100% of the time, 0x1=75% of the time, 0x2=50% of the time,
+ 0x3=25% of the time.
+ \<23:22\> = Config 3.
+ \<21:20\> = Config 2.
+ \<19:18\> = Config 1.
+ \<17:16\> = Config 0. */
+ uint64_t reserved_24_59 : 36;
+ uint64_t enable : 4; /**< [ 63: 60](R/W) Enable test mode. For diagnostic use only.
+ Internal:
+ Once a bit is set, random backpressure is generated
+ at the corresponding point to allow for more frequent backpressure.
+ \<63\> = Limit RDB NCBI transactions. Never limit 100% of the time.
+ \<62\> = Limit ITS NCBI transactions. Never limit 100% of the time.
+ \<61\> = Limit RDB interrupt message handling via NCBO. Never limit 100% of the time.
+ \<60\> = Limit ITS interrupt message handling via NCBO. Never limit 100% of the time. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_bp_test0_s cn; */
+};
+typedef union bdk_gic_bp_test0 bdk_gic_bp_test0_t;
+
+#define BDK_GIC_BP_TEST0 BDK_GIC_BP_TEST0_FUNC()
+static inline uint64_t BDK_GIC_BP_TEST0_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_BP_TEST0_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x8010000100a0ll;
+ __bdk_csr_fatal("GIC_BP_TEST0", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_BP_TEST0 bdk_gic_bp_test0_t
+#define bustype_BDK_GIC_BP_TEST0 BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_BP_TEST0 "GIC_BP_TEST0"
+#define device_bar_BDK_GIC_BP_TEST0 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_BP_TEST0 0
+#define arguments_BDK_GIC_BP_TEST0 -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_bp_test1
+ *
+ * INTERNAL: GIC Backpressure Test Register
+ */
+union bdk_gic_bp_test1
+{
+ uint64_t u;
+ struct bdk_gic_bp_test1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t enable : 4; /**< [ 63: 60](R/W) Enable test mode. For diagnostic use only.
+ Internal:
+ Once a bit is set, random backpressure is generated
+ at the corresponding point to allow for more frequent backpressure.
+ \<63\> = Reserved.
+ \<62\> = Reserved.
+ \<61\> = Reserved.
+ \<60\> = Reserved. TBD?: Limit messages to AP CIMs. */
+ uint64_t reserved_24_59 : 36;
+ uint64_t bp_cfg : 8; /**< [ 23: 16](R/W) Backpressure weight. For diagnostic use only.
+ Internal:
+ There are 2 backpressure configuration bits per enable, with the two bits
+ defined as 0x0=100% of the time, 0x1=75% of the time, 0x2=50% of the time,
+ 0x3=25% of the time.
+ \<23:22\> = Reserved.
+ \<21:20\> = Config 2.
+ \<19:18\> = Config 1.
+ \<17:16\> = Config 0. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t lfsr_freq : 12; /**< [ 11: 0](R/W) Test LFSR update frequency in coprocessor-clocks minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t lfsr_freq : 12; /**< [ 11: 0](R/W) Test LFSR update frequency in coprocessor-clocks minus one. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t bp_cfg : 8; /**< [ 23: 16](R/W) Backpressure weight. For diagnostic use only.
+ Internal:
+ There are 2 backpressure configuration bits per enable, with the two bits
+ defined as 0x0=100% of the time, 0x1=75% of the time, 0x2=50% of the time,
+ 0x3=25% of the time.
+ \<23:22\> = Reserved.
+ \<21:20\> = Config 2.
+ \<19:18\> = Config 1.
+ \<17:16\> = Config 0. */
+ uint64_t reserved_24_59 : 36;
+ uint64_t enable : 4; /**< [ 63: 60](R/W) Enable test mode. For diagnostic use only.
+ Internal:
+ Once a bit is set, random backpressure is generated
+ at the corresponding point to allow for more frequent backpressure.
+ \<63\> = Reserved.
+ \<62\> = Reserved.
+ \<61\> = Reserved.
+ \<60\> = Reserved. TBD?: Limit messages to AP CIMs. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_bp_test1_s cn; */
+};
+typedef union bdk_gic_bp_test1 bdk_gic_bp_test1_t;
+
+#define BDK_GIC_BP_TEST1 BDK_GIC_BP_TEST1_FUNC()
+static inline uint64_t BDK_GIC_BP_TEST1_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_BP_TEST1_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x8010000100b0ll;
+ __bdk_csr_fatal("GIC_BP_TEST1", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_BP_TEST1 bdk_gic_bp_test1_t
+#define bustype_BDK_GIC_BP_TEST1 BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_BP_TEST1 "GIC_BP_TEST1"
+#define device_bar_BDK_GIC_BP_TEST1 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_BP_TEST1 0
+#define arguments_BDK_GIC_BP_TEST1 -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_cfg_ctlr
+ *
+ * GIC Implementation Secure Configuration Control Register
+ * This register configures GIC features.
+ */
+union bdk_gic_cfg_ctlr
+{
+ uint64_t u;
+ struct bdk_gic_cfg_ctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_34_63 : 30;
+ uint64_t dis_redist_lpi_aggr_merge : 1;/**< [ 33: 33](SR/W) Disable aggressive SETLPIR merging in redistributors. */
+ uint64_t dis_cpu_if_load_balancer : 1;/**< [ 32: 32](SR/W) Disable the CPU interface load balancer. */
+ uint64_t reserved_10_31 : 22;
+ uint64_t dis_lpi_pend_cache : 1; /**< [ 9: 9](SR/W) Disable the LPI pending table cache. */
+ uint64_t dis_lpi_cfg_cache : 1; /**< [ 8: 8](SR/W) Disable the LPI configuration cache. */
+ uint64_t dis_inv_hct : 1; /**< [ 7: 7](SR/W) Disable HW invalidating ITS HCT during ITS disable process. */
+ uint64_t dis_its_cdtc : 1; /**< [ 6: 6](SR/W) Disable 1-entry device table cache in ITS CEU. */
+ uint64_t dis_its_itlb : 1; /**< [ 5: 5](SR/W) Disable ITS ITLB (interrupt translation entry lookup buffer). */
+ uint64_t dis_its_dtlb : 1; /**< [ 4: 4](SR/W) Disable ITS DTLB (device table entry lookup buffer). */
+ uint64_t reserved_3 : 1;
+ uint64_t root_dist : 1; /**< [ 2: 2](SR/W) Specifies whether the distributor on this socket is root.
+ 0 = Distributor is not root.
+ 1 = Distributor is root.
+
+ Out of reset, this field is set. EL3 firmware will clear this field as required for multi-
+ socket operation. */
+ uint64_t om : 2; /**< [ 1: 0](SR/W) Operation mode.
+ 0x0 = Single-socket single-root mode.
+ 0x1 = Reserved.
+ 0x2 = Multisocket single-root mode.
+ 0x3 = Multisocket multiroot mode. */
+#else /* Word 0 - Little Endian */
+ uint64_t om : 2; /**< [ 1: 0](SR/W) Operation mode.
+ 0x0 = Single-socket single-root mode.
+ 0x1 = Reserved.
+ 0x2 = Multisocket single-root mode.
+ 0x3 = Multisocket multiroot mode. */
+ uint64_t root_dist : 1; /**< [ 2: 2](SR/W) Specifies whether the distributor on this socket is root.
+ 0 = Distributor is not root.
+ 1 = Distributor is root.
+
+ Out of reset, this field is set. EL3 firmware will clear this field as required for multi-
+ socket operation. */
+ uint64_t reserved_3 : 1;
+ uint64_t dis_its_dtlb : 1; /**< [ 4: 4](SR/W) Disable ITS DTLB (device table entry lookup buffer). */
+ uint64_t dis_its_itlb : 1; /**< [ 5: 5](SR/W) Disable ITS ITLB (interrupt translation entry lookup buffer). */
+ uint64_t dis_its_cdtc : 1; /**< [ 6: 6](SR/W) Disable 1-entry device table cache in ITS CEU. */
+ uint64_t dis_inv_hct : 1; /**< [ 7: 7](SR/W) Disable HW invalidating ITS HCT during ITS disable process. */
+ uint64_t dis_lpi_cfg_cache : 1; /**< [ 8: 8](SR/W) Disable the LPI configuration cache. */
+ uint64_t dis_lpi_pend_cache : 1; /**< [ 9: 9](SR/W) Disable the LPI pending table cache. */
+ uint64_t reserved_10_31 : 22;
+ uint64_t dis_cpu_if_load_balancer : 1;/**< [ 32: 32](SR/W) Disable the CPU interface load balancer. */
+ uint64_t dis_redist_lpi_aggr_merge : 1;/**< [ 33: 33](SR/W) Disable aggressive SETLPIR merging in redistributors. */
+ uint64_t reserved_34_63 : 30;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_cfg_ctlr_s cn9; */
+ /* struct bdk_gic_cfg_ctlr_s cn81xx; */
+ struct bdk_gic_cfg_ctlr_cn88xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_33_63 : 31;
+ uint64_t dis_cpu_if_load_balancer : 1;/**< [ 32: 32](SR/W) Disable the CPU interface load balancer. */
+ uint64_t reserved_10_31 : 22;
+ uint64_t dis_lpi_pend_cache : 1; /**< [ 9: 9](SR/W) Disable the LPI pending table cache. */
+ uint64_t dis_lpi_cfg_cache : 1; /**< [ 8: 8](SR/W) Disable the LPI configuration cache. */
+ uint64_t dis_inv_hct : 1; /**< [ 7: 7](SR/W) Disable HW invalidating ITS HCT during ITS disable process. */
+ uint64_t dis_its_cdtc : 1; /**< [ 6: 6](SR/W) Disable 1-entry device table cache in ITS CEU. */
+ uint64_t dis_its_itlb : 1; /**< [ 5: 5](SR/W) Disable ITS ITLB (interrupt translation entry lookup buffer). */
+ uint64_t dis_its_dtlb : 1; /**< [ 4: 4](SR/W) Disable ITS DTLB (device table entry lookup buffer). */
+ uint64_t reserved_3 : 1;
+ uint64_t root_dist : 1; /**< [ 2: 2](SR/W) Specifies whether the distributor on this socket is root.
+ 0 = Distributor is not root.
+ 1 = Distributor is root.
+
+ Out of reset, this field is set. EL3 firmware will clear this field as required for multi-
+ socket operation. */
+ uint64_t om : 2; /**< [ 1: 0](SR/W) Operation mode.
+ 0x0 = Single-socket single-root mode.
+ 0x1 = Reserved.
+ 0x2 = Multisocket single-root mode.
+ 0x3 = Multisocket multiroot mode. */
+#else /* Word 0 - Little Endian */
+ uint64_t om : 2; /**< [ 1: 0](SR/W) Operation mode.
+ 0x0 = Single-socket single-root mode.
+ 0x1 = Reserved.
+ 0x2 = Multisocket single-root mode.
+ 0x3 = Multisocket multiroot mode. */
+ uint64_t root_dist : 1; /**< [ 2: 2](SR/W) Specifies whether the distributor on this socket is root.
+ 0 = Distributor is not root.
+ 1 = Distributor is root.
+
+ Out of reset, this field is set. EL3 firmware will clear this field as required for multi-
+ socket operation. */
+ uint64_t reserved_3 : 1;
+ uint64_t dis_its_dtlb : 1; /**< [ 4: 4](SR/W) Disable ITS DTLB (device table entry lookup buffer). */
+ uint64_t dis_its_itlb : 1; /**< [ 5: 5](SR/W) Disable ITS ITLB (interrupt translation entry lookup buffer). */
+ uint64_t dis_its_cdtc : 1; /**< [ 6: 6](SR/W) Disable 1-entry device table cache in ITS CEU. */
+ uint64_t dis_inv_hct : 1; /**< [ 7: 7](SR/W) Disable HW invalidating ITS HCT during ITS disable process. */
+ uint64_t dis_lpi_cfg_cache : 1; /**< [ 8: 8](SR/W) Disable the LPI configuration cache. */
+ uint64_t dis_lpi_pend_cache : 1; /**< [ 9: 9](SR/W) Disable the LPI pending table cache. */
+ uint64_t reserved_10_31 : 22;
+ uint64_t dis_cpu_if_load_balancer : 1;/**< [ 32: 32](SR/W) Disable the CPU interface load balancer. */
+ uint64_t reserved_33_63 : 31;
+#endif /* Word 0 - End */
+ } cn88xx;
+ /* struct bdk_gic_cfg_ctlr_s cn83xx; */
+};
+typedef union bdk_gic_cfg_ctlr bdk_gic_cfg_ctlr_t;
+
+#define BDK_GIC_CFG_CTLR BDK_GIC_CFG_CTLR_FUNC()
+static inline uint64_t BDK_GIC_CFG_CTLR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_CFG_CTLR_FUNC(void)
+{
+ return 0x801000010000ll;
+}
+
+#define typedef_BDK_GIC_CFG_CTLR bdk_gic_cfg_ctlr_t
+#define bustype_BDK_GIC_CFG_CTLR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_CFG_CTLR "GIC_CFG_CTLR"
+#define device_bar_BDK_GIC_CFG_CTLR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_CFG_CTLR 0
+#define arguments_BDK_GIC_CFG_CTLR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_const
+ *
+ * GIC Constants Register
+ * This register contains constant for software discovery.
+ */
+union bdk_gic_const
+{
+ uint64_t u;
+ struct bdk_gic_const_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_0_63 : 64;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_63 : 64;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_const_s cn; */
+};
+typedef union bdk_gic_const bdk_gic_const_t;
+
+#define BDK_GIC_CONST BDK_GIC_CONST_FUNC()
+static inline uint64_t BDK_GIC_CONST_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_CONST_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x801000010088ll;
+ __bdk_csr_fatal("GIC_CONST", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_CONST bdk_gic_const_t
+#define bustype_BDK_GIC_CONST BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_CONST "GIC_CONST"
+#define device_bar_BDK_GIC_CONST 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_CONST 0
+#define arguments_BDK_GIC_CONST -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_csclk_active_pc
+ *
+ * GIC Conditional Sclk Clock Counter Register
+ * This register counts conditional clocks for power management.
+ */
+union bdk_gic_csclk_active_pc
+{
+ uint64_t u;
+ struct bdk_gic_csclk_active_pc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t count : 64; /**< [ 63: 0](R/W/H) Count of conditional coprocessor-clock cycles since reset. */
+#else /* Word 0 - Little Endian */
+ uint64_t count : 64; /**< [ 63: 0](R/W/H) Count of conditional coprocessor-clock cycles since reset. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_csclk_active_pc_s cn; */
+};
+typedef union bdk_gic_csclk_active_pc bdk_gic_csclk_active_pc_t;
+
+#define BDK_GIC_CSCLK_ACTIVE_PC BDK_GIC_CSCLK_ACTIVE_PC_FUNC()
+static inline uint64_t BDK_GIC_CSCLK_ACTIVE_PC_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_CSCLK_ACTIVE_PC_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x801000010090ll;
+ __bdk_csr_fatal("GIC_CSCLK_ACTIVE_PC", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_CSCLK_ACTIVE_PC bdk_gic_csclk_active_pc_t
+#define bustype_BDK_GIC_CSCLK_ACTIVE_PC BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_CSCLK_ACTIVE_PC "GIC_CSCLK_ACTIVE_PC"
+#define device_bar_BDK_GIC_CSCLK_ACTIVE_PC 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_CSCLK_ACTIVE_PC 0
+#define arguments_BDK_GIC_CSCLK_ACTIVE_PC -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_del3t_ctlr
+ *
+ * GIC Debug EL3 Trap Secure Control Register
+ * This register allows disabling the signaling of some DEL3T errors.
+ */
+union bdk_gic_del3t_ctlr
+{
+ uint64_t u;
+ struct bdk_gic_del3t_ctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_38_63 : 26;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,47]. */
+ uint64_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_31 : 32;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,47]. */
+ uint64_t reserved_38_63 : 26;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gic_del3t_ctlr_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_38_63 : 26;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,47]. */
+ uint64_t reserved_11_31 : 21;
+ uint64_t del3t_dis : 11; /**< [ 10: 0](SR/W) Disable signaling of DEL3T Errors.
+ Internal:
+ for del3t_dis[10:0]=
+ [ncbr_stdn,ncbr_fill,cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+#else /* Word 0 - Little Endian */
+ uint64_t del3t_dis : 11; /**< [ 10: 0](SR/W) Disable signaling of DEL3T Errors.
+ Internal:
+ for del3t_dis[10:0]=
+ [ncbr_stdn,ncbr_fill,cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_11_31 : 21;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,47]. */
+ uint64_t reserved_38_63 : 26;
+#endif /* Word 0 - End */
+ } cn8;
+ struct bdk_gic_del3t_ctlr_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_38_63 : 26;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,23]. */
+ uint64_t reserved_11_31 : 21;
+ uint64_t del3t_dis : 2; /**< [ 10: 9](SR/W) Disable signaling of DEL3T Errors.
+ Internal:
+ for del3t_dis[10:9]=
+ [ncbr_stdn,ncbr_fill] in GIC. */
+ uint64_t reserved_0_8 : 9;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_8 : 9;
+ uint64_t del3t_dis : 2; /**< [ 10: 9](SR/W) Disable signaling of DEL3T Errors.
+ Internal:
+ for del3t_dis[10:9]=
+ [ncbr_stdn,ncbr_fill] in GIC. */
+ uint64_t reserved_11_31 : 21;
+ uint64_t del3t_core_id : 6; /**< [ 37: 32](SR/W) Target CoreID for signaling of GIC DEL3T Errors. Legal range is [0,23]. */
+ uint64_t reserved_38_63 : 26;
+#endif /* Word 0 - End */
+ } cn9;
+};
+typedef union bdk_gic_del3t_ctlr bdk_gic_del3t_ctlr_t;
+
+#define BDK_GIC_DEL3T_CTLR BDK_GIC_DEL3T_CTLR_FUNC()
+static inline uint64_t BDK_GIC_DEL3T_CTLR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_DEL3T_CTLR_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX))
+ return 0x801000010060ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX))
+ return 0x801000010060ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX_PASS2_X))
+ return 0x801000010060ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x801000010060ll;
+ __bdk_csr_fatal("GIC_DEL3T_CTLR", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_DEL3T_CTLR bdk_gic_del3t_ctlr_t
+#define bustype_BDK_GIC_DEL3T_CTLR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_DEL3T_CTLR "GIC_DEL3T_CTLR"
+#define device_bar_BDK_GIC_DEL3T_CTLR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_DEL3T_CTLR 0
+#define arguments_BDK_GIC_DEL3T_CTLR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_ecc_ctlr
+ *
+ * INTERNAL: GIC Implementation Secure ECC Control Register
+ *
+ * This register is reserved for backwards compatibility.
+ */
+union bdk_gic_ecc_ctlr
+{
+ uint64_t u;
+ struct bdk_gic_ecc_ctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_49_63 : 15;
+ uint64_t ram_flip1 : 9; /**< [ 48: 40](SR/W) Flip syndrome bits on write. Flip syndrome bits \<1\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_29_39 : 11;
+ uint64_t ram_flip0 : 9; /**< [ 28: 20](SR/W) Flip syndrome bits on write. Flip syndrome bits \<0\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_9_19 : 11;
+ uint64_t cor_dis : 9; /**< [ 8: 0](SR/W) RAM ECC correction disable.
+ Internal:
+ for cor_dis[8:0]= [cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+#else /* Word 0 - Little Endian */
+ uint64_t cor_dis : 9; /**< [ 8: 0](SR/W) RAM ECC correction disable.
+ Internal:
+ for cor_dis[8:0]= [cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_9_19 : 11;
+ uint64_t ram_flip0 : 9; /**< [ 28: 20](SR/W) Flip syndrome bits on write. Flip syndrome bits \<0\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_29_39 : 11;
+ uint64_t ram_flip1 : 9; /**< [ 48: 40](SR/W) Flip syndrome bits on write. Flip syndrome bits \<1\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_49_63 : 15;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gic_ecc_ctlr_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_60_63 : 4;
+ uint64_t reserved_49_59 : 11;
+ uint64_t ram_flip1 : 9; /**< [ 48: 40](SR/W) Flip syndrome bits on write. Flip syndrome bits \<1\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_29_39 : 11;
+ uint64_t ram_flip0 : 9; /**< [ 28: 20](SR/W) Flip syndrome bits on write. Flip syndrome bits \<0\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_9_19 : 11;
+ uint64_t cor_dis : 9; /**< [ 8: 0](SR/W) RAM ECC correction disable.
+ Internal:
+ for cor_dis[8:0]= [cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+#else /* Word 0 - Little Endian */
+ uint64_t cor_dis : 9; /**< [ 8: 0](SR/W) RAM ECC correction disable.
+ Internal:
+ for cor_dis[8:0]= [cic2cic_ig_buf, lpi_cfg_buf,
+ lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_9_19 : 11;
+ uint64_t ram_flip0 : 9; /**< [ 28: 20](SR/W) Flip syndrome bits on write. Flip syndrome bits \<0\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_29_39 : 11;
+ uint64_t ram_flip1 : 9; /**< [ 48: 40](SR/W) Flip syndrome bits on write. Flip syndrome bits \<1\> on writes to the corresponding ram to
+ test single-bit or double-bit error handling. See COR_DIS bit definitions. */
+ uint64_t reserved_49_59 : 11;
+ uint64_t reserved_60_63 : 4;
+#endif /* Word 0 - End */
+ } cn8;
+ struct bdk_gic_ecc_ctlr_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_0_63 : 64;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_63 : 64;
+#endif /* Word 0 - End */
+ } cn9;
+};
+typedef union bdk_gic_ecc_ctlr bdk_gic_ecc_ctlr_t;
+
+#define BDK_GIC_ECC_CTLR BDK_GIC_ECC_CTLR_FUNC()
+static inline uint64_t BDK_GIC_ECC_CTLR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_ECC_CTLR_FUNC(void)
+{
+ return 0x801000010008ll;
+}
+
+#define typedef_BDK_GIC_ECC_CTLR bdk_gic_ecc_ctlr_t
+#define bustype_BDK_GIC_ECC_CTLR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_ECC_CTLR "GIC_ECC_CTLR"
+#define device_bar_BDK_GIC_ECC_CTLR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_ECC_CTLR 0
+#define arguments_BDK_GIC_ECC_CTLR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_ecc_int_statusr
+ *
+ * GIC Implementation ECC Error Interrupt Status Register
+ * This register contains the ECC error status for the GIC memories (including ITS and RDB).
+ */
+union bdk_gic_ecc_int_statusr
+{
+ uint64_t u;
+ struct bdk_gic_ecc_int_statusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_41_63 : 23;
+ uint64_t dbe : 9; /**< [ 40: 32](R/W1C/H) RAM ECC DBE detected.
+ Internal:
+ [8:0] = [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_9_31 : 23;
+ uint64_t sbe : 9; /**< [ 8: 0](R/W1C/H) RAM ECC SBE detected.
+ Internal:
+ [8:0] = [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+#else /* Word 0 - Little Endian */
+ uint64_t sbe : 9; /**< [ 8: 0](R/W1C/H) RAM ECC SBE detected.
+ Internal:
+ [8:0] = [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_9_31 : 23;
+ uint64_t dbe : 9; /**< [ 40: 32](R/W1C/H) RAM ECC DBE detected.
+ Internal:
+ [8:0] = [cic2cic_ig_buf, lpi_cfg_buf, lip_rmw_buf,
+ dtlb_mem,itlb_mem,hct_mem,cqf_mem,rdb_pktf_mem,aprf_mem] in GIC. */
+ uint64_t reserved_41_63 : 23;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_ecc_int_statusr_s cn; */
+};
+typedef union bdk_gic_ecc_int_statusr bdk_gic_ecc_int_statusr_t;
+
+#define BDK_GIC_ECC_INT_STATUSR BDK_GIC_ECC_INT_STATUSR_FUNC()
+static inline uint64_t BDK_GIC_ECC_INT_STATUSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_ECC_INT_STATUSR_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN8XXX))
+ return 0x801000010030ll;
+ __bdk_csr_fatal("GIC_ECC_INT_STATUSR", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_ECC_INT_STATUSR bdk_gic_ecc_int_statusr_t
+#define bustype_BDK_GIC_ECC_INT_STATUSR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_ECC_INT_STATUSR "GIC_ECC_INT_STATUSR"
+#define device_bar_BDK_GIC_ECC_INT_STATUSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_ECC_INT_STATUSR 0
+#define arguments_BDK_GIC_ECC_INT_STATUSR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_int_req#_pc
+ *
+ * GIC Performance Counter Register
+ * Index enumerated by GIC_INT_REQ_E.
+ */
+union bdk_gic_int_reqx_pc
+{
+ uint64_t u;
+ struct bdk_gic_int_reqx_pc_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t count : 64; /**< [ 63: 0](R/W/H) Performance count for each register. Increments each time the corresponding register is written. */
+#else /* Word 0 - Little Endian */
+ uint64_t count : 64; /**< [ 63: 0](R/W/H) Performance count for each register. Increments each time the corresponding register is written. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_int_reqx_pc_s cn; */
+};
+typedef union bdk_gic_int_reqx_pc bdk_gic_int_reqx_pc_t;
+
+static inline uint64_t BDK_GIC_INT_REQX_PC(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_INT_REQX_PC(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=6))
+ return 0x801000010100ll + 8ll * ((a) & 0x7);
+ __bdk_csr_fatal("GIC_INT_REQX_PC", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_INT_REQX_PC(a) bdk_gic_int_reqx_pc_t
+#define bustype_BDK_GIC_INT_REQX_PC(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_INT_REQX_PC(a) "GIC_INT_REQX_PC"
+#define device_bar_BDK_GIC_INT_REQX_PC(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_INT_REQX_PC(a) (a)
+#define arguments_BDK_GIC_INT_REQX_PC(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gic_rdb_its_if_err_statusr
+ *
+ * GIC Redistributor Network ITS Interface Error Status Register
+ * This register holds the status of errors detected on the redistributor network interface to ITS.
+ */
+union bdk_gic_rdb_its_if_err_statusr
+{
+ uint64_t u;
+ struct bdk_gic_rdb_its_if_err_statusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_62_63 : 2;
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t reserved_59 : 1;
+ uint64_t cmd : 3; /**< [ 58: 56](RO/H) ITS Command. Relevant only when [V]=1. Command encodings are
+ SETLPIR = 0x1,
+ CLRLPIR = 0x2,
+ INVLPIR = 0x3,
+ INVALLR = 0x4,
+ SYNCR = 0x5,
+ MOVLPIR = 0x6, and
+ MOVALLR = 0x7. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t err_multi_socket : 1; /**< [ 51: 51](RO/H) Invalid multi-socket message. Relevant only when [V]=1. Indicates incompatibility between
+ operation mode setting (GIC_CFG_CTLR[OM]) and the ITS message. */
+ uint64_t err_dest_gicr_id : 1; /**< [ 50: 50](RO/H) Invalid destination GICR (redistributor). Relevant only when [V]=1 and [CMD]=MOVLPIR or MOVALLR. */
+ uint64_t err_src_gicr_id : 1; /**< [ 49: 49](RO/H) Invalid source GICR (Redistributor). Relevant only when [V]=1. */
+ uint64_t err_int_id_range : 1; /**< [ 48: 48](RO/H) LPI interrupt ID out of range. Relevant only when [V]=1. */
+ uint64_t reserved_44_47 : 4;
+ uint64_t dst_id : 8; /**< [ 43: 36](RO/H) DestID, specified as node_id[1:0], gicr_id[5:0]. Relevant only when [V]=1 and
+ [CMD]=MOVLPIR or MOVALLR. */
+ uint64_t src_id : 8; /**< [ 35: 28](RO/H) SourceID, specified as node_id[1:0], gicr_id[5:0]. It is meaningful only when [V]=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID in the ITS message (except for INVALLR, SYNCR, MOVALLR). It is meaningful
+ only when [V]=1. */
+#else /* Word 0 - Little Endian */
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID in the ITS message (except for INVALLR, SYNCR, MOVALLR). It is meaningful
+ only when [V]=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t src_id : 8; /**< [ 35: 28](RO/H) SourceID, specified as node_id[1:0], gicr_id[5:0]. It is meaningful only when [V]=1. */
+ uint64_t dst_id : 8; /**< [ 43: 36](RO/H) DestID, specified as node_id[1:0], gicr_id[5:0]. Relevant only when [V]=1 and
+ [CMD]=MOVLPIR or MOVALLR. */
+ uint64_t reserved_44_47 : 4;
+ uint64_t err_int_id_range : 1; /**< [ 48: 48](RO/H) LPI interrupt ID out of range. Relevant only when [V]=1. */
+ uint64_t err_src_gicr_id : 1; /**< [ 49: 49](RO/H) Invalid source GICR (Redistributor). Relevant only when [V]=1. */
+ uint64_t err_dest_gicr_id : 1; /**< [ 50: 50](RO/H) Invalid destination GICR (redistributor). Relevant only when [V]=1 and [CMD]=MOVLPIR or MOVALLR. */
+ uint64_t err_multi_socket : 1; /**< [ 51: 51](RO/H) Invalid multi-socket message. Relevant only when [V]=1. Indicates incompatibility between
+ operation mode setting (GIC_CFG_CTLR[OM]) and the ITS message. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t cmd : 3; /**< [ 58: 56](RO/H) ITS Command. Relevant only when [V]=1. Command encodings are
+ SETLPIR = 0x1,
+ CLRLPIR = 0x2,
+ INVLPIR = 0x3,
+ INVALLR = 0x4,
+ SYNCR = 0x5,
+ MOVLPIR = 0x6, and
+ MOVALLR = 0x7. */
+ uint64_t reserved_59 : 1;
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t reserved_62_63 : 2;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_rdb_its_if_err_statusr_s cn; */
+};
+typedef union bdk_gic_rdb_its_if_err_statusr bdk_gic_rdb_its_if_err_statusr_t;
+
+#define BDK_GIC_RDB_ITS_IF_ERR_STATUSR BDK_GIC_RDB_ITS_IF_ERR_STATUSR_FUNC()
+static inline uint64_t BDK_GIC_RDB_ITS_IF_ERR_STATUSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_RDB_ITS_IF_ERR_STATUSR_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX))
+ return 0x801000010070ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX))
+ return 0x801000010070ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x801000010070ll;
+ __bdk_csr_fatal("GIC_RDB_ITS_IF_ERR_STATUSR", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_RDB_ITS_IF_ERR_STATUSR bdk_gic_rdb_its_if_err_statusr_t
+#define bustype_BDK_GIC_RDB_ITS_IF_ERR_STATUSR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_RDB_ITS_IF_ERR_STATUSR "GIC_RDB_ITS_IF_ERR_STATUSR"
+#define device_bar_BDK_GIC_RDB_ITS_IF_ERR_STATUSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_RDB_ITS_IF_ERR_STATUSR 0
+#define arguments_BDK_GIC_RDB_ITS_IF_ERR_STATUSR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_rib_err_adrr
+ *
+ * GIC Implementation RIB Error Address Register
+ * This register holds the address of the first RIB error message.
+ */
+union bdk_gic_rib_err_adrr
+{
+ uint64_t u;
+ struct bdk_gic_rib_err_adrr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_36_63 : 28;
+ uint64_t addr : 34; /**< [ 35: 2](RO/H) Address of the target CSR. It is meaningful only when GIC_RIB_ERR_STATUSR[V] is set. */
+ uint64_t node : 2; /**< [ 1: 0](RO/H) ID of the target node. It is meaningful only when GIC_RIB_ERR_STATUSR[V] is set. */
+#else /* Word 0 - Little Endian */
+ uint64_t node : 2; /**< [ 1: 0](RO/H) ID of the target node. It is meaningful only when GIC_RIB_ERR_STATUSR[V] is set. */
+ uint64_t addr : 34; /**< [ 35: 2](RO/H) Address of the target CSR. It is meaningful only when GIC_RIB_ERR_STATUSR[V] is set. */
+ uint64_t reserved_36_63 : 28;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_rib_err_adrr_s cn; */
+};
+typedef union bdk_gic_rib_err_adrr bdk_gic_rib_err_adrr_t;
+
+#define BDK_GIC_RIB_ERR_ADRR BDK_GIC_RIB_ERR_ADRR_FUNC()
+static inline uint64_t BDK_GIC_RIB_ERR_ADRR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_RIB_ERR_ADRR_FUNC(void)
+{
+ return 0x801000010048ll;
+}
+
+#define typedef_BDK_GIC_RIB_ERR_ADRR bdk_gic_rib_err_adrr_t
+#define bustype_BDK_GIC_RIB_ERR_ADRR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_RIB_ERR_ADRR "GIC_RIB_ERR_ADRR"
+#define device_bar_BDK_GIC_RIB_ERR_ADRR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_RIB_ERR_ADRR 0
+#define arguments_BDK_GIC_RIB_ERR_ADRR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_rib_err_statusr
+ *
+ * GIC Implementation RIB Error Status Register
+ * This register holds the status of the first RIB error message.
+ */
+union bdk_gic_rib_err_statusr
+{
+ uint64_t u;
+ struct bdk_gic_rib_err_statusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_62_63 : 2;
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t reserved_56_59 : 4;
+ uint64_t dev_id : 24; /**< [ 55: 32](RO/H) Device ID inside the RIB message. */
+ uint64_t reserved_29_31 : 3;
+ uint64_t secure : 1; /**< [ 28: 28](RO/H) Secure bit inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID inside the RIB message. It is meaningful only when V=1. */
+#else /* Word 0 - Little Endian */
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t secure : 1; /**< [ 28: 28](RO/H) Secure bit inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_29_31 : 3;
+ uint64_t dev_id : 24; /**< [ 55: 32](RO/H) Device ID inside the RIB message. */
+ uint64_t reserved_56_59 : 4;
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t reserved_62_63 : 2;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gic_rib_err_statusr_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_62_63 : 2;
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t reserved_53_59 : 7;
+ uint64_t dev_id : 21; /**< [ 52: 32](RO/H) Device ID inside the RIB message. */
+ uint64_t reserved_29_31 : 3;
+ uint64_t secure : 1; /**< [ 28: 28](RO/H) Secure bit inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID inside the RIB message. It is meaningful only when V=1. */
+#else /* Word 0 - Little Endian */
+ uint64_t int_id : 20; /**< [ 19: 0](RO/H) Interrrupt ID inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_20_27 : 8;
+ uint64_t secure : 1; /**< [ 28: 28](RO/H) Secure bit inside the RIB message. It is meaningful only when V=1. */
+ uint64_t reserved_29_31 : 3;
+ uint64_t dev_id : 21; /**< [ 52: 32](RO/H) Device ID inside the RIB message. */
+ uint64_t reserved_53_59 : 7;
+ uint64_t m : 1; /**< [ 60: 60](RO/H) When set, it means multiple errors have happened. It is meaningful only when [V]=1. */
+ uint64_t v : 1; /**< [ 61: 61](R/W1C/H) When set, the command error is valid. */
+ uint64_t reserved_62_63 : 2;
+#endif /* Word 0 - End */
+ } cn8;
+ /* struct bdk_gic_rib_err_statusr_s cn9; */
+};
+typedef union bdk_gic_rib_err_statusr bdk_gic_rib_err_statusr_t;
+
+#define BDK_GIC_RIB_ERR_STATUSR BDK_GIC_RIB_ERR_STATUSR_FUNC()
+static inline uint64_t BDK_GIC_RIB_ERR_STATUSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_RIB_ERR_STATUSR_FUNC(void)
+{
+ return 0x801000010040ll;
+}
+
+#define typedef_BDK_GIC_RIB_ERR_STATUSR bdk_gic_rib_err_statusr_t
+#define bustype_BDK_GIC_RIB_ERR_STATUSR BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_RIB_ERR_STATUSR "GIC_RIB_ERR_STATUSR"
+#define device_bar_BDK_GIC_RIB_ERR_STATUSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_RIB_ERR_STATUSR 0
+#define arguments_BDK_GIC_RIB_ERR_STATUSR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_scratch
+ *
+ * GIC Scratch Register
+ * This is a scratch register.
+ */
+union bdk_gic_scratch
+{
+ uint64_t u;
+ struct bdk_gic_scratch_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t data : 64; /**< [ 63: 0](R/W) This is a scratch register. Reads and writes of this register have no side effects. */
+#else /* Word 0 - Little Endian */
+ uint64_t data : 64; /**< [ 63: 0](R/W) This is a scratch register. Reads and writes of this register have no side effects. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_scratch_s cn; */
+};
+typedef union bdk_gic_scratch bdk_gic_scratch_t;
+
+#define BDK_GIC_SCRATCH BDK_GIC_SCRATCH_FUNC()
+static inline uint64_t BDK_GIC_SCRATCH_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_SCRATCH_FUNC(void)
+{
+ return 0x801000010080ll;
+}
+
+#define typedef_BDK_GIC_SCRATCH bdk_gic_scratch_t
+#define bustype_BDK_GIC_SCRATCH BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_SCRATCH "GIC_SCRATCH"
+#define device_bar_BDK_GIC_SCRATCH 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_SCRATCH 0
+#define arguments_BDK_GIC_SCRATCH -1,-1,-1,-1
+
+/**
+ * Register (NCB) gic_sync_cfg
+ *
+ * GIC SYNC Configuration Register
+ * This register configures the behavior of ITS SYNC command.
+ */
+union bdk_gic_sync_cfg
+{
+ uint64_t u;
+ struct bdk_gic_sync_cfg_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t te : 1; /**< [ 63: 63](R/W) Translation enable. If set, there is interrupt translation is enabled during
+ sync command execution. If clear, interrupt translation is disabled during sync
+ command execution. */
+ uint64_t reserved_32_62 : 31;
+ uint64_t tol : 32; /**< [ 31: 0](R/W) Time out limit. Timeout wait period for the ITS SYNC command. SYNC command will
+ wait for ACK from a GICR for at most [TOL] system-clock cycles. If ACK is not
+ received within [TOL] system-clock cycles, SYNC is timed out and considered
+ done. [TOL] = 0x0 means SYNC timeout scheme is not used and SYNC command always
+ waits for ACK. */
+#else /* Word 0 - Little Endian */
+ uint64_t tol : 32; /**< [ 31: 0](R/W) Time out limit. Timeout wait period for the ITS SYNC command. SYNC command will
+ wait for ACK from a GICR for at most [TOL] system-clock cycles. If ACK is not
+ received within [TOL] system-clock cycles, SYNC is timed out and considered
+ done. [TOL] = 0x0 means SYNC timeout scheme is not used and SYNC command always
+ waits for ACK. */
+ uint64_t reserved_32_62 : 31;
+ uint64_t te : 1; /**< [ 63: 63](R/W) Translation enable. If set, there is interrupt translation is enabled during
+ sync command execution. If clear, interrupt translation is disabled during sync
+ command execution. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gic_sync_cfg_s cn; */
+};
+typedef union bdk_gic_sync_cfg bdk_gic_sync_cfg_t;
+
+#define BDK_GIC_SYNC_CFG BDK_GIC_SYNC_CFG_FUNC()
+static inline uint64_t BDK_GIC_SYNC_CFG_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GIC_SYNC_CFG_FUNC(void)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX))
+ return 0x801000010050ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX))
+ return 0x801000010050ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX_PASS2_X))
+ return 0x801000010050ll;
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX))
+ return 0x801000010050ll;
+ __bdk_csr_fatal("GIC_SYNC_CFG", 0, 0, 0, 0, 0);
+}
+
+#define typedef_BDK_GIC_SYNC_CFG bdk_gic_sync_cfg_t
+#define bustype_BDK_GIC_SYNC_CFG BDK_CSR_TYPE_NCB
+#define basename_BDK_GIC_SYNC_CFG "GIC_SYNC_CFG"
+#define device_bar_BDK_GIC_SYNC_CFG 0x0 /* PF_BAR0 */
+#define busnum_BDK_GIC_SYNC_CFG 0
+#define arguments_BDK_GIC_SYNC_CFG -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_cidr0
+ *
+ * GIC Distributor Component Identification Register 0
+ */
+union bdk_gicd_cidr0
+{
+ uint32_t u;
+ struct bdk_gicd_cidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_cidr0_s cn; */
+};
+typedef union bdk_gicd_cidr0 bdk_gicd_cidr0_t;
+
+#define BDK_GICD_CIDR0 BDK_GICD_CIDR0_FUNC()
+static inline uint64_t BDK_GICD_CIDR0_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CIDR0_FUNC(void)
+{
+ return 0x80100000fff0ll;
+}
+
+#define typedef_BDK_GICD_CIDR0 bdk_gicd_cidr0_t
+#define bustype_BDK_GICD_CIDR0 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CIDR0 "GICD_CIDR0"
+#define device_bar_BDK_GICD_CIDR0 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CIDR0 0
+#define arguments_BDK_GICD_CIDR0 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_cidr1
+ *
+ * GIC Distributor Component Identification Register 1
+ */
+union bdk_gicd_cidr1
+{
+ uint32_t u;
+ struct bdk_gicd_cidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_cidr1_s cn; */
+};
+typedef union bdk_gicd_cidr1 bdk_gicd_cidr1_t;
+
+#define BDK_GICD_CIDR1 BDK_GICD_CIDR1_FUNC()
+static inline uint64_t BDK_GICD_CIDR1_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CIDR1_FUNC(void)
+{
+ return 0x80100000fff4ll;
+}
+
+#define typedef_BDK_GICD_CIDR1 bdk_gicd_cidr1_t
+#define bustype_BDK_GICD_CIDR1 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CIDR1 "GICD_CIDR1"
+#define device_bar_BDK_GICD_CIDR1 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CIDR1 0
+#define arguments_BDK_GICD_CIDR1 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_cidr2
+ *
+ * GIC Distributor Component Identification Register 2
+ */
+union bdk_gicd_cidr2
+{
+ uint32_t u;
+ struct bdk_gicd_cidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_cidr2_s cn; */
+};
+typedef union bdk_gicd_cidr2 bdk_gicd_cidr2_t;
+
+#define BDK_GICD_CIDR2 BDK_GICD_CIDR2_FUNC()
+static inline uint64_t BDK_GICD_CIDR2_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CIDR2_FUNC(void)
+{
+ return 0x80100000fff8ll;
+}
+
+#define typedef_BDK_GICD_CIDR2 bdk_gicd_cidr2_t
+#define bustype_BDK_GICD_CIDR2 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CIDR2 "GICD_CIDR2"
+#define device_bar_BDK_GICD_CIDR2 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CIDR2 0
+#define arguments_BDK_GICD_CIDR2 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_cidr3
+ *
+ * GIC Distributor Component Identification Register 3
+ */
+union bdk_gicd_cidr3
+{
+ uint32_t u;
+ struct bdk_gicd_cidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_cidr3_s cn; */
+};
+typedef union bdk_gicd_cidr3 bdk_gicd_cidr3_t;
+
+#define BDK_GICD_CIDR3 BDK_GICD_CIDR3_FUNC()
+static inline uint64_t BDK_GICD_CIDR3_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CIDR3_FUNC(void)
+{
+ return 0x80100000fffcll;
+}
+
+#define typedef_BDK_GICD_CIDR3 bdk_gicd_cidr3_t
+#define bustype_BDK_GICD_CIDR3 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CIDR3 "GICD_CIDR3"
+#define device_bar_BDK_GICD_CIDR3 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CIDR3 0
+#define arguments_BDK_GICD_CIDR3 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_clrspi_nsr
+ *
+ * GIC Distributor Clear SPI Pending Register
+ */
+union bdk_gicd_clrspi_nsr
+{
+ uint32_t u;
+ struct bdk_gicd_clrspi_nsr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t spi_id : 10; /**< [ 9: 0](WO) Clear an SPI pending state (write-only). If the SPI is not pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access and the value specifies a secure SPI
+ and the value of the corresponding GICD_NSACR() register is less than 0x2 (i.e. does not
+ permit nonsecure accesses to clear the interrupt pending state), the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint32_t spi_id : 10; /**< [ 9: 0](WO) Clear an SPI pending state (write-only). If the SPI is not pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access and the value specifies a secure SPI
+ and the value of the corresponding GICD_NSACR() register is less than 0x2 (i.e. does not
+ permit nonsecure accesses to clear the interrupt pending state), the write has no effect. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_clrspi_nsr_s cn; */
+};
+typedef union bdk_gicd_clrspi_nsr bdk_gicd_clrspi_nsr_t;
+
+#define BDK_GICD_CLRSPI_NSR BDK_GICD_CLRSPI_NSR_FUNC()
+static inline uint64_t BDK_GICD_CLRSPI_NSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CLRSPI_NSR_FUNC(void)
+{
+ return 0x801000000048ll;
+}
+
+#define typedef_BDK_GICD_CLRSPI_NSR bdk_gicd_clrspi_nsr_t
+#define bustype_BDK_GICD_CLRSPI_NSR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CLRSPI_NSR "GICD_CLRSPI_NSR"
+#define device_bar_BDK_GICD_CLRSPI_NSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CLRSPI_NSR 0
+#define arguments_BDK_GICD_CLRSPI_NSR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_clrspi_sr
+ *
+ * GIC Distributor Clear Secure SPI Pending Register
+ */
+union bdk_gicd_clrspi_sr
+{
+ uint32_t u;
+ struct bdk_gicd_clrspi_sr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t spi_id : 10; /**< [ 9: 0](SWO) Clear an SPI pending state (write-only). If the SPI is not pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access, the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint32_t spi_id : 10; /**< [ 9: 0](SWO) Clear an SPI pending state (write-only). If the SPI is not pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access, the write has no effect. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_clrspi_sr_s cn; */
+};
+typedef union bdk_gicd_clrspi_sr bdk_gicd_clrspi_sr_t;
+
+#define BDK_GICD_CLRSPI_SR BDK_GICD_CLRSPI_SR_FUNC()
+static inline uint64_t BDK_GICD_CLRSPI_SR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_CLRSPI_SR_FUNC(void)
+{
+ return 0x801000000058ll;
+}
+
+#define typedef_BDK_GICD_CLRSPI_SR bdk_gicd_clrspi_sr_t
+#define bustype_BDK_GICD_CLRSPI_SR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_CLRSPI_SR "GICD_CLRSPI_SR"
+#define device_bar_BDK_GICD_CLRSPI_SR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_CLRSPI_SR 0
+#define arguments_BDK_GICD_CLRSPI_SR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_icactiver#
+ *
+ * GIC Distributor Interrupt Clear-Active Registers
+ * Each bit in this register provides a clear-active bit for each SPI supported by the GIC.
+ * Writing one to a clear-active bit clears the active status of the corresponding SPI.
+ */
+union bdk_gicd_icactiverx
+{
+ uint32_t u;
+ struct bdk_gicd_icactiverx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicd_icactiverx_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicd_icactiverx_cn9 cn81xx; */
+ /* struct bdk_gicd_icactiverx_s cn88xx; */
+ /* struct bdk_gicd_icactiverx_cn9 cn83xx; */
+};
+typedef union bdk_gicd_icactiverx bdk_gicd_icactiverx_t;
+
+static inline uint64_t BDK_GICD_ICACTIVERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ICACTIVERX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000380ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ICACTIVERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ICACTIVERX(a) bdk_gicd_icactiverx_t
+#define bustype_BDK_GICD_ICACTIVERX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ICACTIVERX(a) "GICD_ICACTIVERX"
+#define device_bar_BDK_GICD_ICACTIVERX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ICACTIVERX(a) (a)
+#define arguments_BDK_GICD_ICACTIVERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_icenabler#
+ *
+ * GIC Distributor Interrupt Clear-Enable Registers
+ * Each bit in GICD_ICENABLER() provides a clear-enable bit for each SPI supported by the GIC.
+ * Writing one to a clear-enable bit disables forwarding of the corresponding SPI from the
+ * distributor to the CPU interfaces. Reading a bit identifies whether the SPI is enabled.
+ */
+union bdk_gicd_icenablerx
+{
+ uint32_t u;
+ struct bdk_gicd_icenablerx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. Upon reading, if a bit is
+ zero, then the SPI is not enabled to be forwarded to the CPU interface. Upon reading, if a
+ bit is one, the SPI is enabled to be forwarded to the CPU interface. Clear-enable bits
+ corresponding to secure interrupts (either group 0 or group 1) may only be set by secure
+ accesses.
+
+ Writes to the register cannot be considered complete until the effects of the write are
+ visible throughout the affinity hierarchy. To ensure that an enable has been cleared,
+ software must write to this register with bits set to clear the required enables. Software
+ must then poll GICD_(S)CTLR[RWP] (register writes pending) until it has the value zero. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. Upon reading, if a bit is
+ zero, then the SPI is not enabled to be forwarded to the CPU interface. Upon reading, if a
+ bit is one, the SPI is enabled to be forwarded to the CPU interface. Clear-enable bits
+ corresponding to secure interrupts (either group 0 or group 1) may only be set by secure
+ accesses.
+
+ Writes to the register cannot be considered complete until the effects of the write are
+ visible throughout the affinity hierarchy. To ensure that an enable has been cleared,
+ software must write to this register with bits set to clear the required enables. Software
+ must then poll GICD_(S)CTLR[RWP] (register writes pending) until it has the value zero. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_icenablerx_s cn; */
+};
+typedef union bdk_gicd_icenablerx bdk_gicd_icenablerx_t;
+
+static inline uint64_t BDK_GICD_ICENABLERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ICENABLERX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000180ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ICENABLERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ICENABLERX(a) bdk_gicd_icenablerx_t
+#define bustype_BDK_GICD_ICENABLERX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ICENABLERX(a) "GICD_ICENABLERX"
+#define device_bar_BDK_GICD_ICENABLERX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ICENABLERX(a) (a)
+#define arguments_BDK_GICD_ICENABLERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_icfgr#
+ *
+ * GIC Distributor SPI Configuration Registers
+ */
+union bdk_gicd_icfgrx
+{
+ uint32_t u;
+ struct bdk_gicd_icfgrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Two bits per SPI. Defines whether an SPI is level-sensitive or edge-triggered.
+ Bit[1] is zero, the SPI is level-sensitive.
+ Bit[1] is one, the SPI is edge-triggered.
+ Bit[0] Reserved.
+
+ If SPI is a secure interrupt, then its corresponding field is RAZ/WI to nonsecure
+ accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Two bits per SPI. Defines whether an SPI is level-sensitive or edge-triggered.
+ Bit[1] is zero, the SPI is level-sensitive.
+ Bit[1] is one, the SPI is edge-triggered.
+ Bit[0] Reserved.
+
+ If SPI is a secure interrupt, then its corresponding field is RAZ/WI to nonsecure
+ accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_icfgrx_s cn; */
+};
+typedef union bdk_gicd_icfgrx bdk_gicd_icfgrx_t;
+
+static inline uint64_t BDK_GICD_ICFGRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ICFGRX(unsigned long a)
+{
+ if ((a>=2)&&(a<=9))
+ return 0x801000000c00ll + 4ll * ((a) & 0xf);
+ __bdk_csr_fatal("GICD_ICFGRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ICFGRX(a) bdk_gicd_icfgrx_t
+#define bustype_BDK_GICD_ICFGRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ICFGRX(a) "GICD_ICFGRX"
+#define device_bar_BDK_GICD_ICFGRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ICFGRX(a) (a)
+#define arguments_BDK_GICD_ICFGRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_icpendr#
+ *
+ * GIC Distributor Interrupt Clear-Pending Registers
+ * Each bit in GICD_ICPENDR() provides a clear-pending bit for each SPI supported by the GIC.
+ * Writing one to a clear-pending bit clears the pending status of the corresponding SPI.
+ */
+union bdk_gicd_icpendrx
+{
+ uint32_t u;
+ struct bdk_gicd_icpendrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicd_icpendrx_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicd_icpendrx_cn9 cn81xx; */
+ /* struct bdk_gicd_icpendrx_s cn88xx; */
+ /* struct bdk_gicd_icpendrx_cn9 cn83xx; */
+};
+typedef union bdk_gicd_icpendrx bdk_gicd_icpendrx_t;
+
+static inline uint64_t BDK_GICD_ICPENDRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ICPENDRX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000280ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ICPENDRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ICPENDRX(a) bdk_gicd_icpendrx_t
+#define bustype_BDK_GICD_ICPENDRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ICPENDRX(a) "GICD_ICPENDRX"
+#define device_bar_BDK_GICD_ICPENDRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ICPENDRX(a) (a)
+#define arguments_BDK_GICD_ICPENDRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_igroupr#
+ *
+ * GIC Distributor Secure Interrupt Group Registers
+ * The bit in this register for a particular SPI is concatenated with the corresponding
+ * bit for that SPI in GICD_IGRPMODR() to form a two-bit field that defines the
+ * interrupt group (G0S, G1S, G1NS) for that SPI.
+ */
+union bdk_gicd_igrouprx
+{
+ uint32_t u;
+ struct bdk_gicd_igrouprx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then the SPI is
+ secure. If one, the SPI is nonsecure. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then the SPI is
+ secure. If one, the SPI is nonsecure. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_igrouprx_s cn; */
+};
+typedef union bdk_gicd_igrouprx bdk_gicd_igrouprx_t;
+
+static inline uint64_t BDK_GICD_IGROUPRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_IGROUPRX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000080ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_IGROUPRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_IGROUPRX(a) bdk_gicd_igrouprx_t
+#define bustype_BDK_GICD_IGROUPRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_IGROUPRX(a) "GICD_IGROUPRX"
+#define device_bar_BDK_GICD_IGROUPRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_IGROUPRX(a) (a)
+#define arguments_BDK_GICD_IGROUPRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_igrpmodr#
+ *
+ * GIC Distributor Interrupt Group Modifier Secure Registers
+ * The bit in this register for a particular SPI is concatenated with the
+ * corresponding bit for that SPI in GICD_IGROUPR() to form a two-bit field that defines
+ * the interrupt group (G0S, G1S, G1NS) for that SPI.
+ */
+union bdk_gicd_igrpmodrx
+{
+ uint32_t u;
+ struct bdk_gicd_igrpmodrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then
+ the SPI group is not modified. If one, then the SPI group is modified from group
+ 0 to secure group 1. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then
+ the SPI group is not modified. If one, then the SPI group is modified from group
+ 0 to secure group 1. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_igrpmodrx_s cn; */
+};
+typedef union bdk_gicd_igrpmodrx bdk_gicd_igrpmodrx_t;
+
+static inline uint64_t BDK_GICD_IGRPMODRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_IGRPMODRX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000d00ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_IGRPMODRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_IGRPMODRX(a) bdk_gicd_igrpmodrx_t
+#define bustype_BDK_GICD_IGRPMODRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_IGRPMODRX(a) "GICD_IGRPMODRX"
+#define device_bar_BDK_GICD_IGRPMODRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_IGRPMODRX(a) (a)
+#define arguments_BDK_GICD_IGRPMODRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_iidr
+ *
+ * GIC Distributor Implementation Identification Register
+ * This 32-bit register is read-only and specifies the version and features supported by the
+ * distributor.
+ */
+union bdk_gicd_iidr
+{
+ uint32_t u;
+ struct bdk_gicd_iidr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+ uint32_t reserved_20_23 : 4;
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+#else /* Word 0 - Little Endian */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t reserved_20_23 : 4;
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_iidr_s cn; */
+};
+typedef union bdk_gicd_iidr bdk_gicd_iidr_t;
+
+#define BDK_GICD_IIDR BDK_GICD_IIDR_FUNC()
+static inline uint64_t BDK_GICD_IIDR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_IIDR_FUNC(void)
+{
+ return 0x801000000008ll;
+}
+
+#define typedef_BDK_GICD_IIDR bdk_gicd_iidr_t
+#define bustype_BDK_GICD_IIDR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_IIDR "GICD_IIDR"
+#define device_bar_BDK_GICD_IIDR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_IIDR 0
+#define arguments_BDK_GICD_IIDR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_ipriorityr#
+ *
+ * GIC Distributor Interrupt Priority Registers
+ * Each byte in this register provides a priority field for each SPI supported by the GIC.
+ */
+union bdk_gicd_ipriorityrx
+{
+ uint32_t u;
+ struct bdk_gicd_ipriorityrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Each byte corresponds to an SPI for SPI IDs in the range 159..32.
+
+ Priority fields corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses, or when GICD_(S)CTLR[DS] is one.
+
+ Byte accesses are permitted to these registers.
+
+ A priority field for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Each byte corresponds to an SPI for SPI IDs in the range 159..32.
+
+ Priority fields corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses, or when GICD_(S)CTLR[DS] is one.
+
+ Byte accesses are permitted to these registers.
+
+ A priority field for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_ipriorityrx_s cn; */
+};
+typedef union bdk_gicd_ipriorityrx bdk_gicd_ipriorityrx_t;
+
+static inline uint64_t BDK_GICD_IPRIORITYRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_IPRIORITYRX(unsigned long a)
+{
+ if ((a>=8)&&(a<=39))
+ return 0x801000000400ll + 4ll * ((a) & 0x3f);
+ __bdk_csr_fatal("GICD_IPRIORITYRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_IPRIORITYRX(a) bdk_gicd_ipriorityrx_t
+#define bustype_BDK_GICD_IPRIORITYRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_IPRIORITYRX(a) "GICD_IPRIORITYRX"
+#define device_bar_BDK_GICD_IPRIORITYRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_IPRIORITYRX(a) (a)
+#define arguments_BDK_GICD_IPRIORITYRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicd_irouter#
+ *
+ * GIC Distributor SPI Routing Registers
+ * These registers provide the routing information for the security state of the associated SPIs.
+ * Up to 64 bits of state to control the routing.
+ */
+union bdk_gicd_irouterx
+{
+ uint64_t u;
+ struct bdk_gicd_irouterx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_40_63 : 24;
+ uint64_t a3 : 8; /**< [ 39: 32](RO) Specifies the affinity 3 level for the SPI. In CNXXXX implementation, 0x0. */
+ uint64_t irm : 1; /**< [ 31: 31](R/W) Specifies the interrupt routing mode for the SPI.
+ 0 = Route to the processor specified by the affinity levels A3.A2.A1.A0.
+ 1 = Route to any one processor in the system (one-of-N). */
+ uint64_t reserved_24_30 : 7;
+ uint64_t a2 : 8; /**< [ 23: 16](R/W) Specifies the affinity 2 level for the SPI. */
+ uint64_t a1 : 8; /**< [ 15: 8](R/W) Specifies the affinity 1 level for the SPI. */
+ uint64_t a0 : 8; /**< [ 7: 0](R/W) Specifies the affinity 0 level for the SPI. */
+#else /* Word 0 - Little Endian */
+ uint64_t a0 : 8; /**< [ 7: 0](R/W) Specifies the affinity 0 level for the SPI. */
+ uint64_t a1 : 8; /**< [ 15: 8](R/W) Specifies the affinity 1 level for the SPI. */
+ uint64_t a2 : 8; /**< [ 23: 16](R/W) Specifies the affinity 2 level for the SPI. */
+ uint64_t reserved_24_30 : 7;
+ uint64_t irm : 1; /**< [ 31: 31](R/W) Specifies the interrupt routing mode for the SPI.
+ 0 = Route to the processor specified by the affinity levels A3.A2.A1.A0.
+ 1 = Route to any one processor in the system (one-of-N). */
+ uint64_t a3 : 8; /**< [ 39: 32](RO) Specifies the affinity 3 level for the SPI. In CNXXXX implementation, 0x0. */
+ uint64_t reserved_40_63 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_irouterx_s cn; */
+};
+typedef union bdk_gicd_irouterx bdk_gicd_irouterx_t;
+
+static inline uint64_t BDK_GICD_IROUTERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_IROUTERX(unsigned long a)
+{
+ if ((a>=32)&&(a<=159))
+ return 0x801000006000ll + 8ll * ((a) & 0xff);
+ __bdk_csr_fatal("GICD_IROUTERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_IROUTERX(a) bdk_gicd_irouterx_t
+#define bustype_BDK_GICD_IROUTERX(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICD_IROUTERX(a) "GICD_IROUTERX"
+#define device_bar_BDK_GICD_IROUTERX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_IROUTERX(a) (a)
+#define arguments_BDK_GICD_IROUTERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_isactiver#
+ *
+ * GIC Distributor Interrupt Set-Active Registers
+ * Each bit in this register provides a set-active bit for each SPI supported by the GIC.
+ * Writing one to a set-active bit sets the status of the corresponding SPI to active.
+ */
+union bdk_gicd_isactiverx
+{
+ uint32_t u;
+ struct bdk_gicd_isactiverx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicd_isactiverx_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not active. If read as one, the SPI is in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-active bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicd_isactiverx_cn9 cn81xx; */
+ /* struct bdk_gicd_isactiverx_s cn88xx; */
+ /* struct bdk_gicd_isactiverx_cn9 cn83xx; */
+};
+typedef union bdk_gicd_isactiverx bdk_gicd_isactiverx_t;
+
+static inline uint64_t BDK_GICD_ISACTIVERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ISACTIVERX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000300ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ISACTIVERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ISACTIVERX(a) bdk_gicd_isactiverx_t
+#define bustype_BDK_GICD_ISACTIVERX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ISACTIVERX(a) "GICD_ISACTIVERX"
+#define device_bar_BDK_GICD_ISACTIVERX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ISACTIVERX(a) (a)
+#define arguments_BDK_GICD_ISACTIVERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_isenabler#
+ *
+ * GIC Distributor Interrupt Set-Enable Registers
+ * Each bit in GICD_ISENABLER() provides a set-enable bit for each SPI supported by the GIC.
+ * Writing one to a set-enable bit enables forwarding of the corresponding SPI from the
+ * distributor to the CPU interfaces.
+ */
+union bdk_gicd_isenablerx
+{
+ uint32_t u;
+ struct bdk_gicd_isenablerx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then
+ the SPI is not enabled to be forwarded to the CPU interface. If one, the SPI is
+ enabled to be forwarded to the CPU interface. Set-enable bits corresponding to
+ secure interrupts (either group 0 or group 1) may only be set by secure
+ accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If zero, then
+ the SPI is not enabled to be forwarded to the CPU interface. If one, the SPI is
+ enabled to be forwarded to the CPU interface. Set-enable bits corresponding to
+ secure interrupts (either group 0 or group 1) may only be set by secure
+ accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_isenablerx_s cn; */
+};
+typedef union bdk_gicd_isenablerx bdk_gicd_isenablerx_t;
+
+static inline uint64_t BDK_GICD_ISENABLERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ISENABLERX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000100ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ISENABLERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ISENABLERX(a) bdk_gicd_isenablerx_t
+#define bustype_BDK_GICD_ISENABLERX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ISENABLERX(a) "GICD_ISENABLERX"
+#define device_bar_BDK_GICD_ISENABLERX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ISENABLERX(a) (a)
+#define arguments_BDK_GICD_ISENABLERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_ispendr#
+ *
+ * GIC Distributor Interrupt Set-Pending Registers
+ * Each bit in GICD_ISPENDR() provides a set-pending bit for each SPI supported by the GIC.
+ * Writing one to a set-pending bit sets the status of the corresponding SPI to pending.
+ */
+union bdk_gicd_ispendrx
+{
+ uint32_t u;
+ struct bdk_gicd_ispendrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicd_ispendrx_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SPI for SPI IDs in the range 159..32. If read as zero, then the
+ SPI
+ is not pending. If read as one, the SPI is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A set-pending bit for a secure SPI is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicd_ispendrx_cn9 cn81xx; */
+ /* struct bdk_gicd_ispendrx_s cn88xx; */
+ /* struct bdk_gicd_ispendrx_cn9 cn83xx; */
+};
+typedef union bdk_gicd_ispendrx bdk_gicd_ispendrx_t;
+
+static inline uint64_t BDK_GICD_ISPENDRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_ISPENDRX(unsigned long a)
+{
+ if ((a>=1)&&(a<=4))
+ return 0x801000000200ll + 4ll * ((a) & 0x7);
+ __bdk_csr_fatal("GICD_ISPENDRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_ISPENDRX(a) bdk_gicd_ispendrx_t
+#define bustype_BDK_GICD_ISPENDRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_ISPENDRX(a) "GICD_ISPENDRX"
+#define device_bar_BDK_GICD_ISPENDRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_ISPENDRX(a) (a)
+#define arguments_BDK_GICD_ISPENDRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_nsacr#
+ *
+ * GIC Distributor Nonsecure Access Control Secure Registers
+ */
+union bdk_gicd_nsacrx
+{
+ uint32_t u;
+ struct bdk_gicd_nsacrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Two bits per SPI. Defines whether nonsecure access is permitted to secure SPI resources.
+ 0x0 = No nonsecure access is permitted to fields associated with the corresponding SPI.
+ 0x1 = Nonsecure read and write access is permitted to fields associated with the SPI in
+ GICD_ISPENDR(). A nonsecure write access to GICD_SETSPI_NSR is permitted to
+ set the pending state of the corresponding SPI.
+ 0x2 = Adds nonsecure read and write access permissions to fields associated with the
+ corresponding SPI in GICD_ICPENDR(). A nonsecure write access to
+ GICD_CLRSPI_NSR is permitted to clear the pending state of the corresponding SPI. Also
+ adds nonsecure read access permission to fields associated with the corresponding SPI in
+ the GICD_ISACTIVER() and GICD_ICACTIVER().
+ 0x3 = Adds nonsecure read and write access permission to fields associated with the
+ corresponding SPI in GICD_IROUTER().
+
+ This register is RAZ/WI for nonsecure accesses.
+
+ When GICD_(S)CTLR[DS] is one, this register is RAZ/WI. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Two bits per SPI. Defines whether nonsecure access is permitted to secure SPI resources.
+ 0x0 = No nonsecure access is permitted to fields associated with the corresponding SPI.
+ 0x1 = Nonsecure read and write access is permitted to fields associated with the SPI in
+ GICD_ISPENDR(). A nonsecure write access to GICD_SETSPI_NSR is permitted to
+ set the pending state of the corresponding SPI.
+ 0x2 = Adds nonsecure read and write access permissions to fields associated with the
+ corresponding SPI in GICD_ICPENDR(). A nonsecure write access to
+ GICD_CLRSPI_NSR is permitted to clear the pending state of the corresponding SPI. Also
+ adds nonsecure read access permission to fields associated with the corresponding SPI in
+ the GICD_ISACTIVER() and GICD_ICACTIVER().
+ 0x3 = Adds nonsecure read and write access permission to fields associated with the
+ corresponding SPI in GICD_IROUTER().
+
+ This register is RAZ/WI for nonsecure accesses.
+
+ When GICD_(S)CTLR[DS] is one, this register is RAZ/WI. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_nsacrx_s cn; */
+};
+typedef union bdk_gicd_nsacrx bdk_gicd_nsacrx_t;
+
+static inline uint64_t BDK_GICD_NSACRX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_NSACRX(unsigned long a)
+{
+ if ((a>=2)&&(a<=9))
+ return 0x801000000e00ll + 4ll * ((a) & 0xf);
+ __bdk_csr_fatal("GICD_NSACRX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICD_NSACRX(a) bdk_gicd_nsacrx_t
+#define bustype_BDK_GICD_NSACRX(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_NSACRX(a) "GICD_NSACRX"
+#define device_bar_BDK_GICD_NSACRX(a) 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_NSACRX(a) (a)
+#define arguments_BDK_GICD_NSACRX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr0
+ *
+ * GIC Distributor Peripheral Identification Register 0
+ */
+union bdk_gicd_pidr0
+{
+ uint32_t u;
+ struct bdk_gicd_pidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GICD. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GICD. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr0_s cn; */
+};
+typedef union bdk_gicd_pidr0 bdk_gicd_pidr0_t;
+
+#define BDK_GICD_PIDR0 BDK_GICD_PIDR0_FUNC()
+static inline uint64_t BDK_GICD_PIDR0_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR0_FUNC(void)
+{
+ return 0x80100000ffe0ll;
+}
+
+#define typedef_BDK_GICD_PIDR0 bdk_gicd_pidr0_t
+#define bustype_BDK_GICD_PIDR0 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR0 "GICD_PIDR0"
+#define device_bar_BDK_GICD_PIDR0 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR0 0
+#define arguments_BDK_GICD_PIDR0 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr1
+ *
+ * GIC Distributor Peripheral Identification Register 1
+ */
+union bdk_gicd_pidr1
+{
+ uint32_t u;
+ struct bdk_gicd_pidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr1_s cn; */
+};
+typedef union bdk_gicd_pidr1 bdk_gicd_pidr1_t;
+
+#define BDK_GICD_PIDR1 BDK_GICD_PIDR1_FUNC()
+static inline uint64_t BDK_GICD_PIDR1_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR1_FUNC(void)
+{
+ return 0x80100000ffe4ll;
+}
+
+#define typedef_BDK_GICD_PIDR1 bdk_gicd_pidr1_t
+#define bustype_BDK_GICD_PIDR1 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR1 "GICD_PIDR1"
+#define device_bar_BDK_GICD_PIDR1 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR1 0
+#define arguments_BDK_GICD_PIDR1 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr2
+ *
+ * GIC Distributor Peripheral Identification Register 2
+ */
+union bdk_gicd_pidr2
+{
+ uint32_t u;
+ struct bdk_gicd_pidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+#else /* Word 0 - Little Endian */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr2_s cn; */
+};
+typedef union bdk_gicd_pidr2 bdk_gicd_pidr2_t;
+
+#define BDK_GICD_PIDR2 BDK_GICD_PIDR2_FUNC()
+static inline uint64_t BDK_GICD_PIDR2_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR2_FUNC(void)
+{
+ return 0x80100000ffe8ll;
+}
+
+#define typedef_BDK_GICD_PIDR2 bdk_gicd_pidr2_t
+#define bustype_BDK_GICD_PIDR2 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR2 "GICD_PIDR2"
+#define device_bar_BDK_GICD_PIDR2 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR2 0
+#define arguments_BDK_GICD_PIDR2 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr3
+ *
+ * GIC Distributor Peripheral Identification Register 3
+ */
+union bdk_gicd_pidr3
+{
+ uint32_t u;
+ struct bdk_gicd_pidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+#else /* Word 0 - Little Endian */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr3_s cn; */
+};
+typedef union bdk_gicd_pidr3 bdk_gicd_pidr3_t;
+
+#define BDK_GICD_PIDR3 BDK_GICD_PIDR3_FUNC()
+static inline uint64_t BDK_GICD_PIDR3_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR3_FUNC(void)
+{
+ return 0x80100000ffecll;
+}
+
+#define typedef_BDK_GICD_PIDR3 bdk_gicd_pidr3_t
+#define bustype_BDK_GICD_PIDR3 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR3 "GICD_PIDR3"
+#define device_bar_BDK_GICD_PIDR3 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR3 0
+#define arguments_BDK_GICD_PIDR3 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr4
+ *
+ * GIC Distributor Peripheral Identification Register 4
+ */
+union bdk_gicd_pidr4
+{
+ uint32_t u;
+ struct bdk_gicd_pidr4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) This field is 0x4, indicating a 64 KB software-visible page. */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) JEP106 continuation code, least significant nibble. Indicates Cavium. */
+#else /* Word 0 - Little Endian */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) JEP106 continuation code, least significant nibble. Indicates Cavium. */
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) This field is 0x4, indicating a 64 KB software-visible page. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr4_s cn; */
+};
+typedef union bdk_gicd_pidr4 bdk_gicd_pidr4_t;
+
+#define BDK_GICD_PIDR4 BDK_GICD_PIDR4_FUNC()
+static inline uint64_t BDK_GICD_PIDR4_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR4_FUNC(void)
+{
+ return 0x80100000ffd0ll;
+}
+
+#define typedef_BDK_GICD_PIDR4 bdk_gicd_pidr4_t
+#define bustype_BDK_GICD_PIDR4 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR4 "GICD_PIDR4"
+#define device_bar_BDK_GICD_PIDR4 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR4 0
+#define arguments_BDK_GICD_PIDR4 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr5
+ *
+ * GIC Distributor Peripheral Identification Register 5
+ */
+union bdk_gicd_pidr5
+{
+ uint32_t u;
+ struct bdk_gicd_pidr5_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr5_s cn; */
+};
+typedef union bdk_gicd_pidr5 bdk_gicd_pidr5_t;
+
+#define BDK_GICD_PIDR5 BDK_GICD_PIDR5_FUNC()
+static inline uint64_t BDK_GICD_PIDR5_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR5_FUNC(void)
+{
+ return 0x80100000ffd4ll;
+}
+
+#define typedef_BDK_GICD_PIDR5 bdk_gicd_pidr5_t
+#define bustype_BDK_GICD_PIDR5 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR5 "GICD_PIDR5"
+#define device_bar_BDK_GICD_PIDR5 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR5 0
+#define arguments_BDK_GICD_PIDR5 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr6
+ *
+ * GIC Distributor Peripheral Identification Register 6
+ */
+union bdk_gicd_pidr6
+{
+ uint32_t u;
+ struct bdk_gicd_pidr6_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr6_s cn; */
+};
+typedef union bdk_gicd_pidr6 bdk_gicd_pidr6_t;
+
+#define BDK_GICD_PIDR6 BDK_GICD_PIDR6_FUNC()
+static inline uint64_t BDK_GICD_PIDR6_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR6_FUNC(void)
+{
+ return 0x80100000ffd8ll;
+}
+
+#define typedef_BDK_GICD_PIDR6 bdk_gicd_pidr6_t
+#define bustype_BDK_GICD_PIDR6 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR6 "GICD_PIDR6"
+#define device_bar_BDK_GICD_PIDR6 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR6 0
+#define arguments_BDK_GICD_PIDR6 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_pidr7
+ *
+ * GIC Distributor Peripheral Identification Register 7
+ */
+union bdk_gicd_pidr7
+{
+ uint32_t u;
+ struct bdk_gicd_pidr7_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_pidr7_s cn; */
+};
+typedef union bdk_gicd_pidr7 bdk_gicd_pidr7_t;
+
+#define BDK_GICD_PIDR7 BDK_GICD_PIDR7_FUNC()
+static inline uint64_t BDK_GICD_PIDR7_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_PIDR7_FUNC(void)
+{
+ return 0x80100000ffdcll;
+}
+
+#define typedef_BDK_GICD_PIDR7 bdk_gicd_pidr7_t
+#define bustype_BDK_GICD_PIDR7 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_PIDR7 "GICD_PIDR7"
+#define device_bar_BDK_GICD_PIDR7 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_PIDR7 0
+#define arguments_BDK_GICD_PIDR7 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_sctlr
+ *
+ * GIC Distributor (Secure) Control Register
+ * Controls the behavior of the distributor.
+ */
+union bdk_gicd_sctlr
+{
+ uint32_t u;
+ struct bdk_gicd_sctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t rwp : 1; /**< [ 31: 31](RO/H) Register write pending.
+ Indicates whether a register write is in progress.
+ 0 = The effects of all register writes are visible to all descendants of the top-level
+ redistributor, including processors.
+ 1 = The effects of all register writes are not visible to all descendants of the top-level
+ redistributor.
+
+ Note: this field tracks completion of writes to GICD_(S)CTLR that change the state of an
+ interrupt group enable or an affinity routing setting and writes to GICD_ICENABLER() that
+ clear the enable of one or more SPIs. */
+ uint32_t reserved_7_30 : 24;
+ uint32_t ds : 1; /**< [ 6: 6](SR/W) Disable security.
+ When set, nonsecure accesses are permitted to access and modify registers that control
+ group 0 interrupts.
+ If [DS] becomes one when [ARE_SNS] is one, then ARE for the single security state is
+ RAO/WI.
+
+ When [DS] is set, all accesses to GICD_(S)CTLR access the single security state view
+ (below) and all bits are accessible.
+
+ This bit is RAO/WI if the distributor only supports a single security state (see
+ below).
+
+ Once set, [DS] may only be clear by a hardware reset. */
+ uint32_t are_ns : 1; /**< [ 5: 5](SRO) Enable affinity routing for the nonsecure state when set.
+ In CNXXXX this bit is always one as only affinity routing is supported.
+
+ Note: this bit is RAO/WI when ARE is one for the secure state. */
+ uint32_t are_sns : 1; /**< [ 4: 4](RO) Enables affinity routing for the nonsecure state.
+ This field is fixed as RAO/WI for CNXXXX for both secure and non secure state. */
+ uint32_t reserved_3 : 1;
+ uint32_t enable_g1s : 1; /**< [ 2: 2](SR/W) Enables secure group 1 interrupts.
+ 0 = Disable G1S interrupts.
+ 1 = Enable G1S interrupts. */
+ uint32_t enable_g1ns : 1; /**< [ 1: 1](R/W) S - Enables nonsecure group 1 interrupts. Behaves as defined for GICv2. This
+ enable also controls whether LPIs are forwarded to processors. When written
+ to zero, [RWP] indicates whether the effects of this enable on LPIs
+ have been made visible.
+
+ NS - This field is called ENABLE_G1A. It enables nonsecure group 1 interrupts. */
+ uint32_t enable_g0 : 1; /**< [ 0: 0](SR/W) Secure view or [DS] is set -- Enable/disable group 0 interrupts.
+ 0 = Disable G0 interrupts.
+ 1 = Enable G0 interrupts.
+
+ Nonsecure view -- RES0 for CNXXXX since [ARE_NS] is RAO. */
+#else /* Word 0 - Little Endian */
+ uint32_t enable_g0 : 1; /**< [ 0: 0](SR/W) Secure view or [DS] is set -- Enable/disable group 0 interrupts.
+ 0 = Disable G0 interrupts.
+ 1 = Enable G0 interrupts.
+
+ Nonsecure view -- RES0 for CNXXXX since [ARE_NS] is RAO. */
+ uint32_t enable_g1ns : 1; /**< [ 1: 1](R/W) S - Enables nonsecure group 1 interrupts. Behaves as defined for GICv2. This
+ enable also controls whether LPIs are forwarded to processors. When written
+ to zero, [RWP] indicates whether the effects of this enable on LPIs
+ have been made visible.
+
+ NS - This field is called ENABLE_G1A. It enables nonsecure group 1 interrupts. */
+ uint32_t enable_g1s : 1; /**< [ 2: 2](SR/W) Enables secure group 1 interrupts.
+ 0 = Disable G1S interrupts.
+ 1 = Enable G1S interrupts. */
+ uint32_t reserved_3 : 1;
+ uint32_t are_sns : 1; /**< [ 4: 4](RO) Enables affinity routing for the nonsecure state.
+ This field is fixed as RAO/WI for CNXXXX for both secure and non secure state. */
+ uint32_t are_ns : 1; /**< [ 5: 5](SRO) Enable affinity routing for the nonsecure state when set.
+ In CNXXXX this bit is always one as only affinity routing is supported.
+
+ Note: this bit is RAO/WI when ARE is one for the secure state. */
+ uint32_t ds : 1; /**< [ 6: 6](SR/W) Disable security.
+ When set, nonsecure accesses are permitted to access and modify registers that control
+ group 0 interrupts.
+ If [DS] becomes one when [ARE_SNS] is one, then ARE for the single security state is
+ RAO/WI.
+
+ When [DS] is set, all accesses to GICD_(S)CTLR access the single security state view
+ (below) and all bits are accessible.
+
+ This bit is RAO/WI if the distributor only supports a single security state (see
+ below).
+
+ Once set, [DS] may only be clear by a hardware reset. */
+ uint32_t reserved_7_30 : 24;
+ uint32_t rwp : 1; /**< [ 31: 31](RO/H) Register write pending.
+ Indicates whether a register write is in progress.
+ 0 = The effects of all register writes are visible to all descendants of the top-level
+ redistributor, including processors.
+ 1 = The effects of all register writes are not visible to all descendants of the top-level
+ redistributor.
+
+ Note: this field tracks completion of writes to GICD_(S)CTLR that change the state of an
+ interrupt group enable or an affinity routing setting and writes to GICD_ICENABLER() that
+ clear the enable of one or more SPIs. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_sctlr_s cn; */
+};
+typedef union bdk_gicd_sctlr bdk_gicd_sctlr_t;
+
+#define BDK_GICD_SCTLR BDK_GICD_SCTLR_FUNC()
+static inline uint64_t BDK_GICD_SCTLR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_SCTLR_FUNC(void)
+{
+ return 0x801000000000ll;
+}
+
+#define typedef_BDK_GICD_SCTLR bdk_gicd_sctlr_t
+#define bustype_BDK_GICD_SCTLR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_SCTLR "GICD_SCTLR"
+#define device_bar_BDK_GICD_SCTLR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_SCTLR 0
+#define arguments_BDK_GICD_SCTLR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_setspi_nsr
+ *
+ * GIC Distributor Set SPI Pending Register
+ */
+union bdk_gicd_setspi_nsr
+{
+ uint32_t u;
+ struct bdk_gicd_setspi_nsr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t spi_id : 10; /**< [ 9: 0](WO) Set an SPI to pending (write-only). If the SPI is already pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access and the value specifies a secure SPI
+ and the value of the corresponding GICD_NSACR() register is zero (i.e. does not permit
+ nonsecure accesses to set the interrupt as pending), the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint32_t spi_id : 10; /**< [ 9: 0](WO) Set an SPI to pending (write-only). If the SPI is already pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access and the value specifies a secure SPI
+ and the value of the corresponding GICD_NSACR() register is zero (i.e. does not permit
+ nonsecure accesses to set the interrupt as pending), the write has no effect. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_setspi_nsr_s cn; */
+};
+typedef union bdk_gicd_setspi_nsr bdk_gicd_setspi_nsr_t;
+
+#define BDK_GICD_SETSPI_NSR BDK_GICD_SETSPI_NSR_FUNC()
+static inline uint64_t BDK_GICD_SETSPI_NSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_SETSPI_NSR_FUNC(void)
+{
+ return 0x801000000040ll;
+}
+
+#define typedef_BDK_GICD_SETSPI_NSR bdk_gicd_setspi_nsr_t
+#define bustype_BDK_GICD_SETSPI_NSR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_SETSPI_NSR "GICD_SETSPI_NSR"
+#define device_bar_BDK_GICD_SETSPI_NSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_SETSPI_NSR 0
+#define arguments_BDK_GICD_SETSPI_NSR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_setspi_sr
+ *
+ * GIC Distributor Set Secure SPI Pending Register
+ */
+union bdk_gicd_setspi_sr
+{
+ uint32_t u;
+ struct bdk_gicd_setspi_sr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_10_31 : 22;
+ uint32_t spi_id : 10; /**< [ 9: 0](SWO) Set an SPI to pending (write-only). If the SPI is already pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access, the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint32_t spi_id : 10; /**< [ 9: 0](SWO) Set an SPI to pending (write-only). If the SPI is already pending, then the write has no
+ effect.
+
+ If the SPI ID is invalid, then the write has no effect.
+
+ If the register is written using a nonsecure access, the write has no effect. */
+ uint32_t reserved_10_31 : 22;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_setspi_sr_s cn; */
+};
+typedef union bdk_gicd_setspi_sr bdk_gicd_setspi_sr_t;
+
+#define BDK_GICD_SETSPI_SR BDK_GICD_SETSPI_SR_FUNC()
+static inline uint64_t BDK_GICD_SETSPI_SR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_SETSPI_SR_FUNC(void)
+{
+ return 0x801000000050ll;
+}
+
+#define typedef_BDK_GICD_SETSPI_SR bdk_gicd_setspi_sr_t
+#define bustype_BDK_GICD_SETSPI_SR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_SETSPI_SR "GICD_SETSPI_SR"
+#define device_bar_BDK_GICD_SETSPI_SR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_SETSPI_SR 0
+#define arguments_BDK_GICD_SETSPI_SR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_sstatusr
+ *
+ * GIC Distributor (Secure) Status Register
+ */
+union bdk_gicd_sstatusr
+{
+ uint32_t u;
+ struct bdk_gicd_sstatusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t wrod : 1; /**< [ 3: 3](R/W) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+#else /* Word 0 - Little Endian */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrod : 1; /**< [ 3: 3](R/W) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicd_sstatusr_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t wrod : 1; /**< [ 3: 3](R/W/H) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W/H) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W/H) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W/H) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+#else /* Word 0 - Little Endian */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W/H) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W/H) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W/H) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrod : 1; /**< [ 3: 3](R/W/H) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicd_sstatusr_cn9 cn81xx; */
+ /* struct bdk_gicd_sstatusr_s cn88xx; */
+ /* struct bdk_gicd_sstatusr_cn9 cn83xx; */
+};
+typedef union bdk_gicd_sstatusr bdk_gicd_sstatusr_t;
+
+#define BDK_GICD_SSTATUSR BDK_GICD_SSTATUSR_FUNC()
+static inline uint64_t BDK_GICD_SSTATUSR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_SSTATUSR_FUNC(void)
+{
+ return 0x801000000010ll;
+}
+
+#define typedef_BDK_GICD_SSTATUSR bdk_gicd_sstatusr_t
+#define bustype_BDK_GICD_SSTATUSR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_SSTATUSR "GICD_SSTATUSR"
+#define device_bar_BDK_GICD_SSTATUSR 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_SSTATUSR 0
+#define arguments_BDK_GICD_SSTATUSR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicd_typer
+ *
+ * GIC Distributor Type Register
+ * Describes features supported by the distributor.
+ */
+union bdk_gicd_typer
+{
+ uint32_t u;
+ struct bdk_gicd_typer_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_25_31 : 7;
+ uint32_t a3v : 1; /**< [ 24: 24](RO) Indicates whether the distributor supports nonzero values of affinity 3. */
+ uint32_t idbits : 5; /**< [ 23: 19](RO) The number of interrupt identifier bits supported by the GIC stream protocol interface minus one. */
+ uint32_t dvis : 1; /**< [ 18: 18](RO) Direct virtual LPI injection supported. */
+ uint32_t lpis : 1; /**< [ 17: 17](RO) Locality-specific peripheral interrupt supported. */
+ uint32_t mbis : 1; /**< [ 16: 16](RO) Message based interrupt supported. */
+ uint32_t lspi : 5; /**< [ 15: 11](RO) The number of lockable SPI interrupts. This is not supported in GICv3 and is RES0. */
+ uint32_t securityextn : 1; /**< [ 10: 10](RO) Security extension supported. When GICD_(S)CTLR[DS] is
+ set, this field is clear. */
+ uint32_t reserved_8_9 : 2;
+ uint32_t cpunumber : 3; /**< [ 7: 5](RO) Reserved. In CNXXXX implementation, not used. */
+ uint32_t itlinesnumber : 5; /**< [ 4: 0](RO) The value derived from this specifies the maximum number of SPIs. */
+#else /* Word 0 - Little Endian */
+ uint32_t itlinesnumber : 5; /**< [ 4: 0](RO) The value derived from this specifies the maximum number of SPIs. */
+ uint32_t cpunumber : 3; /**< [ 7: 5](RO) Reserved. In CNXXXX implementation, not used. */
+ uint32_t reserved_8_9 : 2;
+ uint32_t securityextn : 1; /**< [ 10: 10](RO) Security extension supported. When GICD_(S)CTLR[DS] is
+ set, this field is clear. */
+ uint32_t lspi : 5; /**< [ 15: 11](RO) The number of lockable SPI interrupts. This is not supported in GICv3 and is RES0. */
+ uint32_t mbis : 1; /**< [ 16: 16](RO) Message based interrupt supported. */
+ uint32_t lpis : 1; /**< [ 17: 17](RO) Locality-specific peripheral interrupt supported. */
+ uint32_t dvis : 1; /**< [ 18: 18](RO) Direct virtual LPI injection supported. */
+ uint32_t idbits : 5; /**< [ 23: 19](RO) The number of interrupt identifier bits supported by the GIC stream protocol interface minus one. */
+ uint32_t a3v : 1; /**< [ 24: 24](RO) Indicates whether the distributor supports nonzero values of affinity 3. */
+ uint32_t reserved_25_31 : 7;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicd_typer_s cn; */
+};
+typedef union bdk_gicd_typer bdk_gicd_typer_t;
+
+#define BDK_GICD_TYPER BDK_GICD_TYPER_FUNC()
+static inline uint64_t BDK_GICD_TYPER_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICD_TYPER_FUNC(void)
+{
+ return 0x801000000004ll;
+}
+
+#define typedef_BDK_GICD_TYPER bdk_gicd_typer_t
+#define bustype_BDK_GICD_TYPER BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICD_TYPER "GICD_TYPER"
+#define device_bar_BDK_GICD_TYPER 0x0 /* PF_BAR0 */
+#define busnum_BDK_GICD_TYPER 0
+#define arguments_BDK_GICD_TYPER -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_cidr0
+ *
+ * GIC Redistributor Component Identification Register 0
+ */
+union bdk_gicrx_cidr0
+{
+ uint32_t u;
+ struct bdk_gicrx_cidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_cidr0_s cn; */
+};
+typedef union bdk_gicrx_cidr0 bdk_gicrx_cidr0_t;
+
+static inline uint64_t BDK_GICRX_CIDR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_CIDR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000fff0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000fff0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000fff0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000fff0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_CIDR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_CIDR0(a) bdk_gicrx_cidr0_t
+#define bustype_BDK_GICRX_CIDR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_CIDR0(a) "GICRX_CIDR0"
+#define device_bar_BDK_GICRX_CIDR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_CIDR0(a) (a)
+#define arguments_BDK_GICRX_CIDR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_cidr1
+ *
+ * GIC Redistributor Component Identification Register 1
+ */
+union bdk_gicrx_cidr1
+{
+ uint32_t u;
+ struct bdk_gicrx_cidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_cidr1_s cn; */
+};
+typedef union bdk_gicrx_cidr1 bdk_gicrx_cidr1_t;
+
+static inline uint64_t BDK_GICRX_CIDR1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_CIDR1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000fff4ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000fff4ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000fff4ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000fff4ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_CIDR1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_CIDR1(a) bdk_gicrx_cidr1_t
+#define bustype_BDK_GICRX_CIDR1(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_CIDR1(a) "GICRX_CIDR1"
+#define device_bar_BDK_GICRX_CIDR1(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_CIDR1(a) (a)
+#define arguments_BDK_GICRX_CIDR1(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_cidr2
+ *
+ * GIC Redistributor Component Identification Register 2
+ */
+union bdk_gicrx_cidr2
+{
+ uint32_t u;
+ struct bdk_gicrx_cidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_cidr2_s cn; */
+};
+typedef union bdk_gicrx_cidr2 bdk_gicrx_cidr2_t;
+
+static inline uint64_t BDK_GICRX_CIDR2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_CIDR2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000fff8ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000fff8ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000fff8ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000fff8ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_CIDR2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_CIDR2(a) bdk_gicrx_cidr2_t
+#define bustype_BDK_GICRX_CIDR2(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_CIDR2(a) "GICRX_CIDR2"
+#define device_bar_BDK_GICRX_CIDR2(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_CIDR2(a) (a)
+#define arguments_BDK_GICRX_CIDR2(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_cidr3
+ *
+ * GIC Redistributor Component Identification Register 3
+ */
+union bdk_gicrx_cidr3
+{
+ uint32_t u;
+ struct bdk_gicrx_cidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_cidr3_s cn; */
+};
+typedef union bdk_gicrx_cidr3 bdk_gicrx_cidr3_t;
+
+static inline uint64_t BDK_GICRX_CIDR3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_CIDR3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000fffcll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000fffcll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000fffcll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000fffcll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_CIDR3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_CIDR3(a) bdk_gicrx_cidr3_t
+#define bustype_BDK_GICRX_CIDR3(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_CIDR3(a) "GICRX_CIDR3"
+#define device_bar_BDK_GICRX_CIDR3(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_CIDR3(a) (a)
+#define arguments_BDK_GICRX_CIDR3(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_clrlpir
+ *
+ * GIC Redistributor Clear LPI Register
+ */
+union bdk_gicrx_clrlpir
+{
+ uint64_t u;
+ struct bdk_gicrx_clrlpir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_32_63 : 32;
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical ID of the LPI to be set as not pending. If the LPI is already not pending, the
+ write has no effect.
+ If the LPI with the physical ID is not implemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical ID of the LPI to be set as not pending. If the LPI is already not pending, the
+ write has no effect.
+ If the LPI with the physical ID is not implemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+ uint64_t reserved_32_63 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_clrlpir_s cn; */
+};
+typedef union bdk_gicrx_clrlpir bdk_gicrx_clrlpir_t;
+
+static inline uint64_t BDK_GICRX_CLRLPIR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_CLRLPIR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000048ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000048ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000048ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000048ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_CLRLPIR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_CLRLPIR(a) bdk_gicrx_clrlpir_t
+#define bustype_BDK_GICRX_CLRLPIR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_CLRLPIR(a) "GICRX_CLRLPIR"
+#define device_bar_BDK_GICRX_CLRLPIR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_CLRLPIR(a) (a)
+#define arguments_BDK_GICRX_CLRLPIR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_icactiver0
+ *
+ * GIC Redistributor Interrupt Clear-Active Register 0
+ * Each bit in GICR()_ICACTIVER0 provides a clear-active bit for an SGI or a
+ * PPI. Writing one to a clear-active bit clears the active status of the corresponding
+ * interrupt.
+ */
+union bdk_gicrx_icactiver0
+{
+ uint32_t u;
+ struct bdk_gicrx_icactiver0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not active. If read as one, the interrupt is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not active. If read as one, the interrupt is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_icactiver0_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not active. If read as one, the interrupt is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not active. If read as one, the interrupt is in active state.
+
+ Clear-active bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ A clear-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicrx_icactiver0_cn9 cn81xx; */
+ /* struct bdk_gicrx_icactiver0_s cn88xx; */
+ /* struct bdk_gicrx_icactiver0_cn9 cn83xx; */
+};
+typedef union bdk_gicrx_icactiver0 bdk_gicrx_icactiver0_t;
+
+static inline uint64_t BDK_GICRX_ICACTIVER0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ICACTIVER0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010380ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010380ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010380ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010380ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ICACTIVER0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ICACTIVER0(a) bdk_gicrx_icactiver0_t
+#define bustype_BDK_GICRX_ICACTIVER0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ICACTIVER0(a) "GICRX_ICACTIVER0"
+#define device_bar_BDK_GICRX_ICACTIVER0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ICACTIVER0(a) (a)
+#define arguments_BDK_GICRX_ICACTIVER0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_icenabler0
+ *
+ * GIC Redistributor Interrupt Clear-Enable Register 0
+ * Each bit in GICR()_ICENABLER0 provides a clear-enable bit for an SGI or a PPI. Writing one to
+ * a
+ * clear-enable bit disables forwarding of the corresponding SGI or PPI from the redistributor
+ * to the CPU interfaces. Reading a bit identifies whether the interrupt is enabled.
+ */
+union bdk_gicrx_icenabler0
+{
+ uint32_t u;
+ struct bdk_gicrx_icenabler0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. Upon reading,
+ if a bit is zero, then the interrupt is not enabled to be forwarded to the CPU interface.
+ Upon reading, if a bit is one, the SPI is enabled to be forwarded to the CPU interface.
+
+ Clear-enable bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ Writes to the register cannot be considered complete until the effects of the write are
+ visible throughout the affinity hierarchy. To ensure that an enable has been cleared,
+ software must write to this register with bits set to clear the required enables. Software
+ must then poll GICR()_(S)CTLR[RWP] (register writes pending) until it has the value zero. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. Upon reading,
+ if a bit is zero, then the interrupt is not enabled to be forwarded to the CPU interface.
+ Upon reading, if a bit is one, the SPI is enabled to be forwarded to the CPU interface.
+
+ Clear-enable bits corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses.
+
+ Writes to the register cannot be considered complete until the effects of the write are
+ visible throughout the affinity hierarchy. To ensure that an enable has been cleared,
+ software must write to this register with bits set to clear the required enables. Software
+ must then poll GICR()_(S)CTLR[RWP] (register writes pending) until it has the value zero. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_icenabler0_s cn; */
+};
+typedef union bdk_gicrx_icenabler0 bdk_gicrx_icenabler0_t;
+
+static inline uint64_t BDK_GICRX_ICENABLER0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ICENABLER0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010180ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010180ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010180ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010180ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ICENABLER0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ICENABLER0(a) bdk_gicrx_icenabler0_t
+#define bustype_BDK_GICRX_ICENABLER0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ICENABLER0(a) "GICRX_ICENABLER0"
+#define device_bar_BDK_GICRX_ICENABLER0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ICENABLER0(a) (a)
+#define arguments_BDK_GICRX_ICENABLER0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_icfgr0
+ *
+ * GIC Redistributor Interrupt Configuration Register 0
+ */
+union bdk_gicrx_icfgr0
+{
+ uint32_t u;
+ struct bdk_gicrx_icfgr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](RO) Two bits per SGI. Defines whether an SGI is level-sensitive or edge-triggered.
+ Note SGIs are always edge-triggered, so Bit[1] for an SGI is RAO and read-only.
+
+ Bit[1] is zero, the interrupt is level-sensitive.
+
+ Bit[1] is one, the interrupt is edge-triggered.
+
+ Bit[0] Reserved.
+
+ If a secure interrupt, then its corresponding field is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](RO) Two bits per SGI. Defines whether an SGI is level-sensitive or edge-triggered.
+ Note SGIs are always edge-triggered, so Bit[1] for an SGI is RAO and read-only.
+
+ Bit[1] is zero, the interrupt is level-sensitive.
+
+ Bit[1] is one, the interrupt is edge-triggered.
+
+ Bit[0] Reserved.
+
+ If a secure interrupt, then its corresponding field is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_icfgr0_s cn; */
+};
+typedef union bdk_gicrx_icfgr0 bdk_gicrx_icfgr0_t;
+
+static inline uint64_t BDK_GICRX_ICFGR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ICFGR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010c00ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010c00ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010c00ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010c00ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ICFGR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ICFGR0(a) bdk_gicrx_icfgr0_t
+#define bustype_BDK_GICRX_ICFGR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ICFGR0(a) "GICRX_ICFGR0"
+#define device_bar_BDK_GICRX_ICFGR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ICFGR0(a) (a)
+#define arguments_BDK_GICRX_ICFGR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_icfgr1
+ *
+ * GIC Redistributor Interrupt Configuration Register 1
+ * Redistributor interrupt configuration register 1.
+ */
+union bdk_gicrx_icfgr1
+{
+ uint32_t u;
+ struct bdk_gicrx_icfgr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](RO) Two bits per PPI. Defines whether an PPI is level-sensitive or edge-triggered.
+
+ Bit[1] is zero, the interrupt is level-sensitive.
+
+ Bit[1] is one, the interrupt is edge-triggered.
+
+ Bit[0] Reserved.
+
+ If a secure interrupt, then its corresponding field is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](RO) Two bits per PPI. Defines whether an PPI is level-sensitive or edge-triggered.
+
+ Bit[1] is zero, the interrupt is level-sensitive.
+
+ Bit[1] is one, the interrupt is edge-triggered.
+
+ Bit[0] Reserved.
+
+ If a secure interrupt, then its corresponding field is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_icfgr1_s cn; */
+};
+typedef union bdk_gicrx_icfgr1 bdk_gicrx_icfgr1_t;
+
+static inline uint64_t BDK_GICRX_ICFGR1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ICFGR1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010c04ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010c04ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010c04ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010c04ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ICFGR1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ICFGR1(a) bdk_gicrx_icfgr1_t
+#define bustype_BDK_GICRX_ICFGR1(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ICFGR1(a) "GICRX_ICFGR1"
+#define device_bar_BDK_GICRX_ICFGR1(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ICFGR1(a) (a)
+#define arguments_BDK_GICRX_ICFGR1(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_icpendr0
+ *
+ * GIC Redistributor Interrupt Clear-Pending Register 0
+ * Each bit in GICR()_ICPENDR0 provides a clear-pending bit for an SGI or a PPI. Writing one to a
+ * clear-pending bit clears the pending status of the corresponding interrupt.
+ */
+union bdk_gicrx_icpendr0
+{
+ uint32_t u;
+ struct bdk_gicrx_icpendr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not pending. If read as one, the interrupt is in pending
+ state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not pending. If read as one, the interrupt is in pending
+ state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_icpendr0_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not pending. If read as one, the interrupt is in pending
+ state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1C/H) Each bit corresponds to an SGI or a PPI for interrupt IDs in the range 31..0. If read as
+ zero, then the interrupt is not pending. If read as one, the interrupt is in pending
+ state.
+
+ Clear-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A clear-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicrx_icpendr0_cn9 cn81xx; */
+ /* struct bdk_gicrx_icpendr0_s cn88xx; */
+ /* struct bdk_gicrx_icpendr0_cn9 cn83xx; */
+};
+typedef union bdk_gicrx_icpendr0 bdk_gicrx_icpendr0_t;
+
+static inline uint64_t BDK_GICRX_ICPENDR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ICPENDR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010280ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010280ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010280ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010280ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ICPENDR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ICPENDR0(a) bdk_gicrx_icpendr0_t
+#define bustype_BDK_GICRX_ICPENDR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ICPENDR0(a) "GICRX_ICPENDR0"
+#define device_bar_BDK_GICRX_ICPENDR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ICPENDR0(a) (a)
+#define arguments_BDK_GICRX_ICPENDR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_igroupr0
+ *
+ * GIC Redistributor Interrupt Group Secure Register
+ */
+union bdk_gicrx_igroupr0
+{
+ uint32_t u;
+ struct bdk_gicrx_igroupr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ppi : 16; /**< [ 31: 16](SR/W) Groups for PPIs.
+ 0 = Group 0.
+ 1 = Group 1. */
+ uint32_t sgi : 16; /**< [ 15: 0](SR/W) Groups for SGIs.
+ 0 = Group 0.
+ 1 = Group 1. */
+#else /* Word 0 - Little Endian */
+ uint32_t sgi : 16; /**< [ 15: 0](SR/W) Groups for SGIs.
+ 0 = Group 0.
+ 1 = Group 1. */
+ uint32_t ppi : 16; /**< [ 31: 16](SR/W) Groups for PPIs.
+ 0 = Group 0.
+ 1 = Group 1. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_igroupr0_s cn; */
+};
+typedef union bdk_gicrx_igroupr0 bdk_gicrx_igroupr0_t;
+
+static inline uint64_t BDK_GICRX_IGROUPR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_IGROUPR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010080ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010080ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010080ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010080ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_IGROUPR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_IGROUPR0(a) bdk_gicrx_igroupr0_t
+#define bustype_BDK_GICRX_IGROUPR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_IGROUPR0(a) "GICRX_IGROUPR0"
+#define device_bar_BDK_GICRX_IGROUPR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_IGROUPR0(a) (a)
+#define arguments_BDK_GICRX_IGROUPR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_igrpmodr0
+ *
+ * GIC Redistributor Interrupt Group Secure Register
+ * Control the group modifier for PPIs and SGIs, similar to GICD_IGRPMODR() for SPIs.
+ */
+union bdk_gicrx_igrpmodr0
+{
+ uint32_t u;
+ struct bdk_gicrx_igrpmodr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t ppi : 16; /**< [ 31: 16](SR/W) Group modifiers for PPIs.
+ 0 = No group modification.
+ 1 = Modify to group 1. */
+ uint32_t sgi : 16; /**< [ 15: 0](SR/W) Group modifiers for SGIs.
+ 0 = No group modification.
+ 1 = Modify to group 1. */
+#else /* Word 0 - Little Endian */
+ uint32_t sgi : 16; /**< [ 15: 0](SR/W) Group modifiers for SGIs.
+ 0 = No group modification.
+ 1 = Modify to group 1. */
+ uint32_t ppi : 16; /**< [ 31: 16](SR/W) Group modifiers for PPIs.
+ 0 = No group modification.
+ 1 = Modify to group 1. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_igrpmodr0_s cn; */
+};
+typedef union bdk_gicrx_igrpmodr0 bdk_gicrx_igrpmodr0_t;
+
+static inline uint64_t BDK_GICRX_IGRPMODR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_IGRPMODR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010d00ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010d00ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010d00ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010d00ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_IGRPMODR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_IGRPMODR0(a) bdk_gicrx_igrpmodr0_t
+#define bustype_BDK_GICRX_IGRPMODR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_IGRPMODR0(a) "GICRX_IGRPMODR0"
+#define device_bar_BDK_GICRX_IGRPMODR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_IGRPMODR0(a) (a)
+#define arguments_BDK_GICRX_IGRPMODR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_iidr
+ *
+ * GIC Redistributor Implementation Identification Register
+ * This 32-bit register is read-only and specifies the version and features supported by the
+ * redistributor.
+ */
+union bdk_gicrx_iidr
+{
+ uint32_t u;
+ struct bdk_gicrx_iidr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+ uint32_t reserved_20_23 : 4;
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+#else /* Word 0 - Little Endian */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t reserved_20_23 : 4;
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_iidr_s cn; */
+};
+typedef union bdk_gicrx_iidr bdk_gicrx_iidr_t;
+
+static inline uint64_t BDK_GICRX_IIDR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_IIDR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000004ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000004ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000004ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000004ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_IIDR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_IIDR(a) bdk_gicrx_iidr_t
+#define bustype_BDK_GICRX_IIDR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_IIDR(a) "GICRX_IIDR"
+#define device_bar_BDK_GICRX_IIDR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_IIDR(a) (a)
+#define arguments_BDK_GICRX_IIDR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_invallr
+ *
+ * GIC Redistributor LPI Invalidate All Register
+ * This register is write-only and causes the LPI configuration to be reloaded from the table in
+ * memory.
+ */
+union bdk_gicrx_invallr
+{
+ uint64_t u;
+ struct bdk_gicrx_invallr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_0_63 : 64;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_63 : 64;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_invallr_s cn; */
+};
+typedef union bdk_gicrx_invallr bdk_gicrx_invallr_t;
+
+static inline uint64_t BDK_GICRX_INVALLR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_INVALLR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x8010800000b0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x8010800000b0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x8010800000b0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x8010800000b0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_INVALLR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_INVALLR(a) bdk_gicrx_invallr_t
+#define bustype_BDK_GICRX_INVALLR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_INVALLR(a) "GICRX_INVALLR"
+#define device_bar_BDK_GICRX_INVALLR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_INVALLR(a) (a)
+#define arguments_BDK_GICRX_INVALLR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_invlpir
+ *
+ * GIC Redistributor Invalidate LPI Register
+ */
+union bdk_gicrx_invlpir
+{
+ uint64_t u;
+ struct bdk_gicrx_invlpir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_32_63 : 32;
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical LPI ID to be cleaned. The invalidate in the register name and the ITS command is
+ a misnomer. This actually results in a clean operation wherein the cached (in the
+ redistributor) pending state of the LPI is updated to the pending table held in memory and
+ its cached configuration is invalidated in the cache. */
+#else /* Word 0 - Little Endian */
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical LPI ID to be cleaned. The invalidate in the register name and the ITS command is
+ a misnomer. This actually results in a clean operation wherein the cached (in the
+ redistributor) pending state of the LPI is updated to the pending table held in memory and
+ its cached configuration is invalidated in the cache. */
+ uint64_t reserved_32_63 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_invlpir_s cn; */
+};
+typedef union bdk_gicrx_invlpir bdk_gicrx_invlpir_t;
+
+static inline uint64_t BDK_GICRX_INVLPIR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_INVLPIR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x8010800000a0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x8010800000a0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x8010800000a0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x8010800000a0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_INVLPIR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_INVLPIR(a) bdk_gicrx_invlpir_t
+#define bustype_BDK_GICRX_INVLPIR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_INVLPIR(a) "GICRX_INVLPIR"
+#define device_bar_BDK_GICRX_INVLPIR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_INVLPIR(a) (a)
+#define arguments_BDK_GICRX_INVLPIR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_ipriorityr#
+ *
+ * GIC Redistributor Interrupt Priority Registers
+ * Each byte in this register provides a priority field for each SGI or PPI supported by the
+ * GIC.
+ */
+union bdk_gicrx_ipriorityrx
+{
+ uint32_t u;
+ struct bdk_gicrx_ipriorityrx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Each byte corresponds to an SGI or PPI for interrupt IDs in the range 31..0.
+
+ Priority fields corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses, or when GICD_(S)CTLR[DS] is one.
+
+ Byte accesses are permitted to these registers.
+
+ A priority field for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W) Each byte corresponds to an SGI or PPI for interrupt IDs in the range 31..0.
+
+ Priority fields corresponding to secure interrupts (either group 0 or group 1)
+ may only be set by secure accesses, or when GICD_(S)CTLR[DS] is one.
+
+ Byte accesses are permitted to these registers.
+
+ A priority field for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_ipriorityrx_s cn; */
+};
+typedef union bdk_gicrx_ipriorityrx bdk_gicrx_ipriorityrx_t;
+
+static inline uint64_t BDK_GICRX_IPRIORITYRX(unsigned long a, unsigned long b) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_IPRIORITYRX(unsigned long a, unsigned long b)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && ((a<=3) && (b<=7)))
+ return 0x801080010400ll + 0x20000ll * ((a) & 0x3) + 4ll * ((b) & 0x7);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && ((a<=23) && (b<=7)))
+ return 0x801080010400ll + 0x20000ll * ((a) & 0x1f) + 4ll * ((b) & 0x7);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && ((a<=47) && (b<=7)))
+ return 0x801080010400ll + 0x20000ll * ((a) & 0x3f) + 4ll * ((b) & 0x7);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && ((a<=23) && (b<=7)))
+ return 0x801080010400ll + 0x20000ll * ((a) & 0x1f) + 4ll * ((b) & 0x7);
+ __bdk_csr_fatal("GICRX_IPRIORITYRX", 2, a, b, 0, 0);
+}
+
+#define typedef_BDK_GICRX_IPRIORITYRX(a,b) bdk_gicrx_ipriorityrx_t
+#define bustype_BDK_GICRX_IPRIORITYRX(a,b) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_IPRIORITYRX(a,b) "GICRX_IPRIORITYRX"
+#define device_bar_BDK_GICRX_IPRIORITYRX(a,b) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_IPRIORITYRX(a,b) (a)
+#define arguments_BDK_GICRX_IPRIORITYRX(a,b) (a),(b),-1,-1
+
+/**
+ * Register (NCB32b) gicr#_isactiver0
+ *
+ * GIC Redistributor Interrupt Set-Active Register 0
+ * Each bit in GICR()_ISACTIVER0 provides a set-active bit for an SGI or a PPI. Writing one to a
+ * set-active bit sets the status of the corresponding interrupt to active.
+ */
+union bdk_gicrx_isactiver0
+{
+ uint32_t u;
+ struct bdk_gicrx_isactiver0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not active. If read as one, the interrupt is
+ in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1) may only be
+ set by secure accesses.
+
+ A set-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not active. If read as one, the interrupt is
+ in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1) may only be
+ set by secure accesses.
+
+ A set-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_isactiver0_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not active. If read as one, the interrupt is
+ in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1) may only be
+ set by secure accesses.
+
+ A set-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not active. If read as one, the interrupt is
+ in active state.
+
+ Set-active bits corresponding to secure interrupts (either group 0 or group 1) may only be
+ set by secure accesses.
+
+ A set-active bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicrx_isactiver0_cn9 cn81xx; */
+ /* struct bdk_gicrx_isactiver0_s cn88xx; */
+ /* struct bdk_gicrx_isactiver0_cn9 cn83xx; */
+};
+typedef union bdk_gicrx_isactiver0 bdk_gicrx_isactiver0_t;
+
+static inline uint64_t BDK_GICRX_ISACTIVER0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ISACTIVER0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010300ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010300ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010300ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010300ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ISACTIVER0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ISACTIVER0(a) bdk_gicrx_isactiver0_t
+#define bustype_BDK_GICRX_ISACTIVER0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ISACTIVER0(a) "GICRX_ISACTIVER0"
+#define device_bar_BDK_GICRX_ISACTIVER0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ISACTIVER0(a) (a)
+#define arguments_BDK_GICRX_ISACTIVER0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_isenabler0
+ *
+ * GIC Redistributor Interrupt Set-Enable Register 0
+ * Each bit in GICR()_ISENABLER0 provides a set-enable bit for an SGI or a PPI. Writing one
+ * to a set-enable bit enables forwarding of the corresponding SGI or PPI from the
+ * redistributor to the CPU interfaces.
+ */
+union bdk_gicrx_isenabler0
+{
+ uint32_t u;
+ struct bdk_gicrx_isenabler0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ zero, then the interrupt is not enabled to be forwarded to the CPU interface. If
+ one, the interrupt is enabled to be forwarded to the CPU interface. Set-enable
+ bits corresponding to secure interrupts (either group0 or group1) may only be
+ set by secure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ zero, then the interrupt is not enabled to be forwarded to the CPU interface. If
+ one, the interrupt is enabled to be forwarded to the CPU interface. Set-enable
+ bits corresponding to secure interrupts (either group0 or group1) may only be
+ set by secure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_isenabler0_s cn; */
+};
+typedef union bdk_gicrx_isenabler0 bdk_gicrx_isenabler0_t;
+
+static inline uint64_t BDK_GICRX_ISENABLER0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ISENABLER0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010100ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010100ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010100ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010100ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ISENABLER0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ISENABLER0(a) bdk_gicrx_isenabler0_t
+#define bustype_BDK_GICRX_ISENABLER0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ISENABLER0(a) "GICRX_ISENABLER0"
+#define device_bar_BDK_GICRX_ISENABLER0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ISENABLER0(a) (a)
+#define arguments_BDK_GICRX_ISENABLER0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_ispendr0
+ *
+ * GIC Redistributor Interrupt Set-Pending Register 0
+ * Each bit in GICR()_ISPENDR0 provides a set-pending bit for an SGI or a PPI. Writing one
+ * to a set-pending bit sets the status of the corresponding interrupt to pending.
+ */
+union bdk_gicrx_ispendr0
+{
+ uint32_t u;
+ struct bdk_gicrx_ispendr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not pending. If read as one, the interrupt
+ is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A set-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not pending. If read as one, the interrupt
+ is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A set-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_ispendr0_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not pending. If read as one, the interrupt
+ is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A set-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](R/W1S/H) Each bit corresponds to an SGI or PPI for interrupt IDs in the range 31..0. If
+ read as zero, then the interrupt is not pending. If read as one, the interrupt
+ is in pending state.
+
+ Set-pending bits corresponding to secure interrupts (either group 0 or group 1) may only
+ be set by secure accesses.
+
+ A set-pending bit for a secure interrupt is RAZ/WI to nonsecure accesses. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicrx_ispendr0_cn9 cn81xx; */
+ /* struct bdk_gicrx_ispendr0_s cn88xx; */
+ /* struct bdk_gicrx_ispendr0_cn9 cn83xx; */
+};
+typedef union bdk_gicrx_ispendr0 bdk_gicrx_ispendr0_t;
+
+static inline uint64_t BDK_GICRX_ISPENDR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_ISPENDR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010200ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010200ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010200ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010200ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_ISPENDR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_ISPENDR0(a) bdk_gicrx_ispendr0_t
+#define bustype_BDK_GICRX_ISPENDR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_ISPENDR0(a) "GICRX_ISPENDR0"
+#define device_bar_BDK_GICRX_ISPENDR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_ISPENDR0(a) (a)
+#define arguments_BDK_GICRX_ISPENDR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_movallr
+ *
+ * GIC Redistributor LPI Move All Register
+ * This register is write-only and causes the LPI configuration to be reloaded from the table in
+ * memory.
+ */
+union bdk_gicrx_movallr
+{
+ uint64_t u;
+ struct bdk_gicrx_movallr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t pa : 32; /**< [ 63: 32](WO) Target address \<47:16\>. Base address of the redistributor to which pending LPIs are to be
+ moved.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+ uint64_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_31 : 32;
+ uint64_t pa : 32; /**< [ 63: 32](WO) Target address \<47:16\>. Base address of the redistributor to which pending LPIs are to be
+ moved.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_movallr_s cn; */
+};
+typedef union bdk_gicrx_movallr bdk_gicrx_movallr_t;
+
+static inline uint64_t BDK_GICRX_MOVALLR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_MOVALLR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000110ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000110ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000110ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000110ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_MOVALLR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_MOVALLR(a) bdk_gicrx_movallr_t
+#define bustype_BDK_GICRX_MOVALLR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_MOVALLR(a) "GICRX_MOVALLR"
+#define device_bar_BDK_GICRX_MOVALLR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_MOVALLR(a) (a)
+#define arguments_BDK_GICRX_MOVALLR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_movlpir
+ *
+ * GIC Redistributor Move LPI Register
+ */
+union bdk_gicrx_movlpir
+{
+ uint64_t u;
+ struct bdk_gicrx_movlpir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t pa : 32; /**< [ 63: 32](WO) Target address \<47:16\>. Base address of the redistributor to which the physical LPI is to
+ be moved. */
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical LPI ID to be moved to the redistributor at [PA]. If the LPI with this
+ PID is unimplemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical LPI ID to be moved to the redistributor at [PA]. If the LPI with this
+ PID is unimplemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+ uint64_t pa : 32; /**< [ 63: 32](WO) Target address \<47:16\>. Base address of the redistributor to which the physical LPI is to
+ be moved. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_movlpir_s cn; */
+};
+typedef union bdk_gicrx_movlpir bdk_gicrx_movlpir_t;
+
+static inline uint64_t BDK_GICRX_MOVLPIR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_MOVLPIR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000100ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000100ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000100ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000100ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_MOVLPIR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_MOVLPIR(a) bdk_gicrx_movlpir_t
+#define bustype_BDK_GICRX_MOVLPIR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_MOVLPIR(a) "GICRX_MOVLPIR"
+#define device_bar_BDK_GICRX_MOVLPIR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_MOVLPIR(a) (a)
+#define arguments_BDK_GICRX_MOVLPIR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_nsacr
+ *
+ * GIC Redistributor Non-Secure Access Control Secure Registers
+ */
+union bdk_gicrx_nsacr
+{
+ uint32_t u;
+ struct bdk_gicrx_nsacr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Two bits per SGI or PPI. Defines whether nonsecure access is permitted to secure
+ interrupt resources.
+ 0x0 = No nonsecure access is permitted to fields associated with the corresponding
+ interrupt.
+ 0x1 = Nonsecure write access is permitted to generate secure group0 interrupts.
+ 0x2 = Adds nonsecure write access permissions to generate secure group1 interrupts.
+ 0x3 = Reserved. Treated as 0x1.
+
+ This register is RAZ/WI for nonsecure accesses.
+
+ When GICD_(S)CTLR[DS] is one, this register is RAZ/WI. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SR/W) Two bits per SGI or PPI. Defines whether nonsecure access is permitted to secure
+ interrupt resources.
+ 0x0 = No nonsecure access is permitted to fields associated with the corresponding
+ interrupt.
+ 0x1 = Nonsecure write access is permitted to generate secure group0 interrupts.
+ 0x2 = Adds nonsecure write access permissions to generate secure group1 interrupts.
+ 0x3 = Reserved. Treated as 0x1.
+
+ This register is RAZ/WI for nonsecure accesses.
+
+ When GICD_(S)CTLR[DS] is one, this register is RAZ/WI. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_nsacr_s cn; */
+};
+typedef union bdk_gicrx_nsacr bdk_gicrx_nsacr_t;
+
+static inline uint64_t BDK_GICRX_NSACR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_NSACR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080010e00ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080010e00ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080010e00ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080010e00ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_NSACR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_NSACR(a) bdk_gicrx_nsacr_t
+#define bustype_BDK_GICRX_NSACR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_NSACR(a) "GICRX_NSACR"
+#define device_bar_BDK_GICRX_NSACR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_NSACR(a) (a)
+#define arguments_BDK_GICRX_NSACR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_pendbaser
+ *
+ * GIC Redistributor LPI Pending Table Address Register
+ */
+union bdk_gicrx_pendbaser
+{
+ uint64_t u;
+ struct bdk_gicrx_pendbaser_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_63 : 1;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t pa : 36; /**< [ 51: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_0_6 : 7;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_6 : 7;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t pa : 36; /**< [ 51: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_63 : 1;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_pendbaser_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_63 : 1;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_48_61 : 14;
+ uint64_t pa : 32; /**< [ 47: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_0_15 : 16;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_15 : 16;
+ uint64_t pa : 32; /**< [ 47: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_48_61 : 14;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_63 : 1;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_gicrx_pendbaser_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_63 : 1;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t pa : 36; /**< [ 51: 16](R/W) Physical address bits \<51:16\> for the LPI pending table.
+ Software must set bits \<51:46\> and \<43\> to zero. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_0_6 : 7;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_6 : 7;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t pa : 36; /**< [ 51: 16](R/W) Physical address bits \<51:16\> for the LPI pending table.
+ Software must set bits \<51:46\> and \<43\> to zero. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_63 : 1;
+#endif /* Word 0 - End */
+ } cn9;
+ struct bdk_gicrx_pendbaser_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_63 : 1;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_48_55 : 8;
+ uint64_t pa : 32; /**< [ 47: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_0_6 : 7;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_6 : 7;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_12_15 : 4;
+ uint64_t pa : 32; /**< [ 47: 16](R/W) Physical address bits \<46:16\> for the LPI pending table. */
+ uint64_t reserved_48_55 : 8;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_61 : 3;
+ uint64_t pending_table_zero : 1; /**< [ 62: 62](WO) Pending zero:
+ 0 = The coarse-grained map for the LPI pending table is valid.
+ 1 = The pending table has been zeroed out. */
+ uint64_t reserved_63 : 1;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_gicrx_pendbaser_cn81xx cn83xx; */
+ /* struct bdk_gicrx_pendbaser_cn81xx cn88xxp2; */
+};
+typedef union bdk_gicrx_pendbaser bdk_gicrx_pendbaser_t;
+
+static inline uint64_t BDK_GICRX_PENDBASER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PENDBASER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000078ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000078ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000078ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000078ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PENDBASER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PENDBASER(a) bdk_gicrx_pendbaser_t
+#define bustype_BDK_GICRX_PENDBASER(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_PENDBASER(a) "GICRX_PENDBASER"
+#define device_bar_BDK_GICRX_PENDBASER(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PENDBASER(a) (a)
+#define arguments_BDK_GICRX_PENDBASER(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr0
+ *
+ * GIC Redistributor Peripheral Identification Register 0
+ */
+union bdk_gicrx_pidr0
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GICR. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GICR. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr0_s cn; */
+};
+typedef union bdk_gicrx_pidr0 bdk_gicrx_pidr0_t;
+
+static inline uint64_t BDK_GICRX_PIDR0(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR0(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffe0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffe0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffe0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffe0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR0", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR0(a) bdk_gicrx_pidr0_t
+#define bustype_BDK_GICRX_PIDR0(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR0(a) "GICRX_PIDR0"
+#define device_bar_BDK_GICRX_PIDR0(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR0(a) (a)
+#define arguments_BDK_GICRX_PIDR0(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr1
+ *
+ * GIC Redistributor Peripheral Identification Register 1
+ */
+union bdk_gicrx_pidr1
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr1_s cn; */
+};
+typedef union bdk_gicrx_pidr1 bdk_gicrx_pidr1_t;
+
+static inline uint64_t BDK_GICRX_PIDR1(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR1(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffe4ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffe4ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffe4ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffe4ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR1", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR1(a) bdk_gicrx_pidr1_t
+#define bustype_BDK_GICRX_PIDR1(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR1(a) "GICRX_PIDR1"
+#define device_bar_BDK_GICRX_PIDR1(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR1(a) (a)
+#define arguments_BDK_GICRX_PIDR1(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr2
+ *
+ * GIC Redistributor Peripheral Identification Register 2
+ */
+union bdk_gicrx_pidr2
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+#else /* Word 0 - Little Endian */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr2_s cn; */
+};
+typedef union bdk_gicrx_pidr2 bdk_gicrx_pidr2_t;
+
+static inline uint64_t BDK_GICRX_PIDR2(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR2(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffe8ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffe8ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffe8ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffe8ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR2", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR2(a) bdk_gicrx_pidr2_t
+#define bustype_BDK_GICRX_PIDR2(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR2(a) "GICRX_PIDR2"
+#define device_bar_BDK_GICRX_PIDR2(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR2(a) (a)
+#define arguments_BDK_GICRX_PIDR2(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr3
+ *
+ * GIC Redistributor Peripheral Identification Register 3
+ */
+union bdk_gicrx_pidr3
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+#else /* Word 0 - Little Endian */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr3_s cn; */
+};
+typedef union bdk_gicrx_pidr3 bdk_gicrx_pidr3_t;
+
+static inline uint64_t BDK_GICRX_PIDR3(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR3(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffecll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffecll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffecll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffecll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR3", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR3(a) bdk_gicrx_pidr3_t
+#define bustype_BDK_GICRX_PIDR3(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR3(a) "GICRX_PIDR3"
+#define device_bar_BDK_GICRX_PIDR3(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR3(a) (a)
+#define arguments_BDK_GICRX_PIDR3(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr4
+ *
+ * GIC Redistributor Peripheral Identification Register 4
+ */
+union bdk_gicrx_pidr4
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) This field is 0x4, indicating a 64 KB software-visible page. */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) 0x3 = Cavium JEP106 continuation code. */
+#else /* Word 0 - Little Endian */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) 0x3 = Cavium JEP106 continuation code. */
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) This field is 0x4, indicating a 64 KB software-visible page. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr4_s cn; */
+};
+typedef union bdk_gicrx_pidr4 bdk_gicrx_pidr4_t;
+
+static inline uint64_t BDK_GICRX_PIDR4(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR4(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffd0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffd0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffd0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffd0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR4", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR4(a) bdk_gicrx_pidr4_t
+#define bustype_BDK_GICRX_PIDR4(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR4(a) "GICRX_PIDR4"
+#define device_bar_BDK_GICRX_PIDR4(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR4(a) (a)
+#define arguments_BDK_GICRX_PIDR4(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr5
+ *
+ * GIC Redistributor Peripheral Identification Register 5
+ */
+union bdk_gicrx_pidr5
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr5_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr5_s cn; */
+};
+typedef union bdk_gicrx_pidr5 bdk_gicrx_pidr5_t;
+
+static inline uint64_t BDK_GICRX_PIDR5(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR5(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffd4ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffd4ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffd4ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffd4ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR5", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR5(a) bdk_gicrx_pidr5_t
+#define bustype_BDK_GICRX_PIDR5(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR5(a) "GICRX_PIDR5"
+#define device_bar_BDK_GICRX_PIDR5(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR5(a) (a)
+#define arguments_BDK_GICRX_PIDR5(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr6
+ *
+ * GIC Redistributor Peripheral Identification Register 6
+ */
+union bdk_gicrx_pidr6
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr6_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr6_s cn; */
+};
+typedef union bdk_gicrx_pidr6 bdk_gicrx_pidr6_t;
+
+static inline uint64_t BDK_GICRX_PIDR6(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR6(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffd8ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffd8ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffd8ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffd8ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR6", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR6(a) bdk_gicrx_pidr6_t
+#define bustype_BDK_GICRX_PIDR6(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR6(a) "GICRX_PIDR6"
+#define device_bar_BDK_GICRX_PIDR6(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR6(a) (a)
+#define arguments_BDK_GICRX_PIDR6(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_pidr7
+ *
+ * GIC Redistributor Peripheral Identification Register 7
+ */
+union bdk_gicrx_pidr7
+{
+ uint32_t u;
+ struct bdk_gicrx_pidr7_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_pidr7_s cn; */
+};
+typedef union bdk_gicrx_pidr7 bdk_gicrx_pidr7_t;
+
+static inline uint64_t BDK_GICRX_PIDR7(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PIDR7(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000ffdcll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000ffdcll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000ffdcll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000ffdcll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PIDR7", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PIDR7(a) bdk_gicrx_pidr7_t
+#define bustype_BDK_GICRX_PIDR7(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_PIDR7(a) "GICRX_PIDR7"
+#define device_bar_BDK_GICRX_PIDR7(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PIDR7(a) (a)
+#define arguments_BDK_GICRX_PIDR7(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_propbaser
+ *
+ * GIC Redistributor LPI Configuration Table Address Register
+ */
+union bdk_gicrx_propbaser
+{
+ uint64_t u;
+ struct bdk_gicrx_propbaser_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_59_63 : 5;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t pa : 40; /**< [ 51: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+#else /* Word 0 - Little Endian */
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t pa : 40; /**< [ 51: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_63 : 5;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_propbaser_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_48_63 : 16;
+ uint64_t pa : 36; /**< [ 47: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t reserved_5_11 : 7;
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+#else /* Word 0 - Little Endian */
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+ uint64_t reserved_5_11 : 7;
+ uint64_t pa : 36; /**< [ 47: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t reserved_48_63 : 16;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_gicrx_propbaser_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_59_63 : 5;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t pa : 40; /**< [ 51: 12](R/W) Physical address bits \<51:12\> for the LPI configuration table.
+ Software must set bits \<51:46\> and \<43\> to zero. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+#else /* Word 0 - Little Endian */
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t pa : 40; /**< [ 51: 12](R/W) Physical address bits \<51:12\> for the LPI configuration table.
+ Software must set bits \<51:46\> and \<43\> to zero. */
+ uint64_t reserved_52_55 : 4;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_63 : 5;
+#endif /* Word 0 - End */
+ } cn9;
+ struct bdk_gicrx_propbaser_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_59_63 : 5;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_48_55 : 8;
+ uint64_t pa : 36; /**< [ 47: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+#else /* Word 0 - Little Endian */
+ uint64_t num_bits : 5; /**< [ 4: 0](R/W) The number of bits of LPI ID supported, minus one. If this value exceeds the value of
+ GICD_TYPER[IDBITS], then the number of bits must be treated as the value defined by
+ GICD_TYPER[IDBITS]. */
+ uint64_t reserved_5_6 : 2;
+ uint64_t cacheability : 3; /**< [ 9: 7](R/W) Cacheability attributes. Ignored in CNXXXX. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attributes. Ignored in CNXXXX. */
+ uint64_t pa : 36; /**< [ 47: 12](R/W) Physical address bits \<46:12\> for the LPI configuration table. */
+ uint64_t reserved_48_55 : 8;
+ uint64_t outer_cacheability : 3; /**< [ 58: 56](R/W) Outer cacheability attributes. Ignored in CNXXXX. */
+ uint64_t reserved_59_63 : 5;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_gicrx_propbaser_cn81xx cn83xx; */
+ /* struct bdk_gicrx_propbaser_cn81xx cn88xxp2; */
+};
+typedef union bdk_gicrx_propbaser bdk_gicrx_propbaser_t;
+
+static inline uint64_t BDK_GICRX_PROPBASER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_PROPBASER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000070ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000070ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000070ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000070ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_PROPBASER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_PROPBASER(a) bdk_gicrx_propbaser_t
+#define bustype_BDK_GICRX_PROPBASER(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_PROPBASER(a) "GICRX_PROPBASER"
+#define device_bar_BDK_GICRX_PROPBASER(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_PROPBASER(a) (a)
+#define arguments_BDK_GICRX_PROPBASER(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_sctlr
+ *
+ * GIC Redistributor (Secure) Control Register
+ * This register controls the behavior of the nonsecure redistributor.
+ */
+union bdk_gicrx_sctlr
+{
+ uint32_t u;
+ struct bdk_gicrx_sctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t uwp : 1; /**< [ 31: 31](RO) Upstream write pending. Common to both security states. Read-only.
+ 0 = The effects of all upstream writes have been communicated to the parent
+ redistributor, including any generate SGI packets.
+ 1 = The effects of all upstream writes have not been communicated to the parent
+ redistributor, including any generate SGI packets. */
+ uint32_t reserved_4_30 : 27;
+ uint32_t rwp : 1; /**< [ 3: 3](RO) Register write pending. This bit indicates whether a register write for the current
+ security state (banked) is in progress or not.
+ 0 = The effect of all register writes are visible to all descendants of the
+ redistributor, including processors.
+ 1 = The effects of all register writes are not visible to all descendants of the
+ redistributor.
+
+ Note: this field tracks completion of writes to GICR()_ICENABLER0 that clear
+ the enable of one or more interrupts. */
+ uint32_t reserved_1_2 : 2;
+ uint32_t enable_lpis : 1; /**< [ 0: 0](R/W) Enable LPIs. Common to both security states. When this bit is clear,
+ writes to generate physical LPIs to GICR()_SETLPIR will be ignored.
+ When a write changes this bit from zero to one, this bit becomes RAO/WI and the
+ redistributor must load the pending table from memory to check for any pending interrupts. */
+#else /* Word 0 - Little Endian */
+ uint32_t enable_lpis : 1; /**< [ 0: 0](R/W) Enable LPIs. Common to both security states. When this bit is clear,
+ writes to generate physical LPIs to GICR()_SETLPIR will be ignored.
+ When a write changes this bit from zero to one, this bit becomes RAO/WI and the
+ redistributor must load the pending table from memory to check for any pending interrupts. */
+ uint32_t reserved_1_2 : 2;
+ uint32_t rwp : 1; /**< [ 3: 3](RO) Register write pending. This bit indicates whether a register write for the current
+ security state (banked) is in progress or not.
+ 0 = The effect of all register writes are visible to all descendants of the
+ redistributor, including processors.
+ 1 = The effects of all register writes are not visible to all descendants of the
+ redistributor.
+
+ Note: this field tracks completion of writes to GICR()_ICENABLER0 that clear
+ the enable of one or more interrupts. */
+ uint32_t reserved_4_30 : 27;
+ uint32_t uwp : 1; /**< [ 31: 31](RO) Upstream write pending. Common to both security states. Read-only.
+ 0 = The effects of all upstream writes have been communicated to the parent
+ redistributor, including any generate SGI packets.
+ 1 = The effects of all upstream writes have not been communicated to the parent
+ redistributor, including any generate SGI packets. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_sctlr_s cn; */
+};
+typedef union bdk_gicrx_sctlr bdk_gicrx_sctlr_t;
+
+static inline uint64_t BDK_GICRX_SCTLR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SCTLR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000000ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000000ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000000ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000000ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SCTLR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SCTLR(a) bdk_gicrx_sctlr_t
+#define bustype_BDK_GICRX_SCTLR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_SCTLR(a) "GICRX_SCTLR"
+#define device_bar_BDK_GICRX_SCTLR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SCTLR(a) (a)
+#define arguments_BDK_GICRX_SCTLR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_seir
+ *
+ * GIC Redistributor Generate SEI Register
+ */
+union bdk_gicrx_seir
+{
+ uint32_t u;
+ struct bdk_gicrx_seir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_16_31 : 16;
+ uint32_t syndrome : 16; /**< [ 15: 0](WO) Syndrome value for the SEI to be generated. If another write to this register occurs
+ before the previous has been forwarded to its recipients, the new value is ORed with the
+ existing value. [SYNDROME] is sticky and indicates that at least one error of a
+ class has occurred. */
+#else /* Word 0 - Little Endian */
+ uint32_t syndrome : 16; /**< [ 15: 0](WO) Syndrome value for the SEI to be generated. If another write to this register occurs
+ before the previous has been forwarded to its recipients, the new value is ORed with the
+ existing value. [SYNDROME] is sticky and indicates that at least one error of a
+ class has occurred. */
+ uint32_t reserved_16_31 : 16;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_seir_s cn; */
+};
+typedef union bdk_gicrx_seir bdk_gicrx_seir_t;
+
+static inline uint64_t BDK_GICRX_SEIR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SEIR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000068ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000068ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000068ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000068ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SEIR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SEIR(a) bdk_gicrx_seir_t
+#define bustype_BDK_GICRX_SEIR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_SEIR(a) "GICRX_SEIR"
+#define device_bar_BDK_GICRX_SEIR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SEIR(a) (a)
+#define arguments_BDK_GICRX_SEIR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_setdel3tr_el1s
+ *
+ * GIC Redistributor Set Non-Maskable Interrupt Secure Registers
+ */
+union bdk_gicrx_setdel3tr_el1s
+{
+ uint32_t u;
+ struct bdk_gicrx_setdel3tr_el1s_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SWO) These write-only secure registers are used to generate DEL3T interrupts to the APs.
+ The value written into these registers is not used. There is no interrupt ID for DEL3Ts.
+ Whenever a register in this set is written, the DEL3T signal of the AP being
+ managed by that register is asserted.
+
+ Each register in this set is RAZ/WI for nonsecure accesses. */
+#else /* Word 0 - Little Endian */
+ uint32_t vec : 32; /**< [ 31: 0](SWO) These write-only secure registers are used to generate DEL3T interrupts to the APs.
+ The value written into these registers is not used. There is no interrupt ID for DEL3Ts.
+ Whenever a register in this set is written, the DEL3T signal of the AP being
+ managed by that register is asserted.
+
+ Each register in this set is RAZ/WI for nonsecure accesses. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_setdel3tr_el1s_s cn; */
+};
+typedef union bdk_gicrx_setdel3tr_el1s bdk_gicrx_setdel3tr_el1s_t;
+
+static inline uint64_t BDK_GICRX_SETDEL3TR_EL1S(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SETDEL3TR_EL1S(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x80108000c000ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x80108000c000ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x80108000c000ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x80108000c000ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SETDEL3TR_EL1S", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SETDEL3TR_EL1S(a) bdk_gicrx_setdel3tr_el1s_t
+#define bustype_BDK_GICRX_SETDEL3TR_EL1S(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_SETDEL3TR_EL1S(a) "GICRX_SETDEL3TR_EL1S"
+#define device_bar_BDK_GICRX_SETDEL3TR_EL1S(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SETDEL3TR_EL1S(a) (a)
+#define arguments_BDK_GICRX_SETDEL3TR_EL1S(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_setlpir
+ *
+ * GIC Redistributor Set LPI Register
+ */
+union bdk_gicrx_setlpir
+{
+ uint64_t u;
+ struct bdk_gicrx_setlpir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_32_63 : 32;
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical ID of the LPI to be generated. If the LPI is already pending, the write has no
+ effect.
+ If the LPI with the physical ID is not implemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+#else /* Word 0 - Little Endian */
+ uint64_t pid : 32; /**< [ 31: 0](WO) Physical ID of the LPI to be generated. If the LPI is already pending, the write has no
+ effect.
+ If the LPI with the physical ID is not implemented, the write has no effect.
+ If GICR()_(S)CTLR[ENABLE_LPIS] is zero, the write has no effect. */
+ uint64_t reserved_32_63 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_setlpir_s cn; */
+};
+typedef union bdk_gicrx_setlpir bdk_gicrx_setlpir_t;
+
+static inline uint64_t BDK_GICRX_SETLPIR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SETLPIR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000040ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000040ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000040ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000040ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SETLPIR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SETLPIR(a) bdk_gicrx_setlpir_t
+#define bustype_BDK_GICRX_SETLPIR(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_SETLPIR(a) "GICRX_SETLPIR"
+#define device_bar_BDK_GICRX_SETLPIR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SETLPIR(a) (a)
+#define arguments_BDK_GICRX_SETLPIR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_sstatusr
+ *
+ * GIC Redistributor (Secure) Status Register
+ */
+union bdk_gicrx_sstatusr
+{
+ uint32_t u;
+ struct bdk_gicrx_sstatusr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_4_31 : 28;
+ uint32_t wrod : 1; /**< [ 3: 3](R/W1C/H) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W1C/H) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W1C/H) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W1C/H) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+#else /* Word 0 - Little Endian */
+ uint32_t rrd : 1; /**< [ 0: 0](R/W1C/H) This bit is set if a read to a reserved location is detected. Software must write a one to
+ this bit to clear it. */
+ uint32_t wrd : 1; /**< [ 1: 1](R/W1C/H) This bit is set if a write to a reserved location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t rwod : 1; /**< [ 2: 2](R/W1C/H) This bit is set if a read to a write-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t wrod : 1; /**< [ 3: 3](R/W1C/H) This bit is set if a write to a read-only location is detected. Software must write a one
+ to this bit to clear it. */
+ uint32_t reserved_4_31 : 28;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_sstatusr_s cn; */
+};
+typedef union bdk_gicrx_sstatusr bdk_gicrx_sstatusr_t;
+
+static inline uint64_t BDK_GICRX_SSTATUSR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SSTATUSR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000010ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000010ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000010ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000010ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SSTATUSR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SSTATUSR(a) bdk_gicrx_sstatusr_t
+#define bustype_BDK_GICRX_SSTATUSR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_SSTATUSR(a) "GICRX_SSTATUSR"
+#define device_bar_BDK_GICRX_SSTATUSR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SSTATUSR(a) (a)
+#define arguments_BDK_GICRX_SSTATUSR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_syncr
+ *
+ * GIC Redistributor Sync Register
+ */
+union bdk_gicrx_syncr
+{
+ uint32_t u;
+ struct bdk_gicrx_syncr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_1_31 : 31;
+ uint32_t busy : 1; /**< [ 0: 0](RO) Reserved. When this register is read, it will only return read-data with [BUSY] as zero when
+ none of the following operations are in progress:
+ * Any writes to GICR()_CLRLPIR within the redistributor.
+ * Any writes to GICR()_MOVLPIR within the redistributor.
+ * Any writes to GICR()_MOVALLR within the redistributor.
+ * Any writes to GICR()_INVLPIR within the redistributor.
+ * Any writes to GICR()_INVALLR within the redistributor.
+ * Any writes to another redistributor performed as a result of a previous write to
+ GICR()_MOVLPIR or GICR()_MOVALLR have completed and arrived at the target redistributor.
+ Including operations initiated by writing to GICR()_PENDBASER or GICR()_PROPBASER. */
+#else /* Word 0 - Little Endian */
+ uint32_t busy : 1; /**< [ 0: 0](RO) Reserved. When this register is read, it will only return read-data with [BUSY] as zero when
+ none of the following operations are in progress:
+ * Any writes to GICR()_CLRLPIR within the redistributor.
+ * Any writes to GICR()_MOVLPIR within the redistributor.
+ * Any writes to GICR()_MOVALLR within the redistributor.
+ * Any writes to GICR()_INVLPIR within the redistributor.
+ * Any writes to GICR()_INVALLR within the redistributor.
+ * Any writes to another redistributor performed as a result of a previous write to
+ GICR()_MOVLPIR or GICR()_MOVALLR have completed and arrived at the target redistributor.
+ Including operations initiated by writing to GICR()_PENDBASER or GICR()_PROPBASER. */
+ uint32_t reserved_1_31 : 31;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gicrx_syncr_s cn; */
+};
+typedef union bdk_gicrx_syncr bdk_gicrx_syncr_t;
+
+static inline uint64_t BDK_GICRX_SYNCR(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_SYNCR(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x8010800000c0ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x8010800000c0ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x8010800000c0ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x8010800000c0ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_SYNCR", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_SYNCR(a) bdk_gicrx_syncr_t
+#define bustype_BDK_GICRX_SYNCR(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_SYNCR(a) "GICRX_SYNCR"
+#define device_bar_BDK_GICRX_SYNCR(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_SYNCR(a) (a)
+#define arguments_BDK_GICRX_SYNCR(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gicr#_typer
+ *
+ * GIC Redistributor Type Register
+ * This 64-bit read-only register is used to discover the properties of the redistributor and is
+ * always accessible regardless of the ARE setting for a security state.
+ */
+union bdk_gicrx_typer
+{
+ uint64_t u;
+ struct bdk_gicrx_typer_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t a3 : 8; /**< [ 63: 56](RO) The affinity level 3 value for the redistributor. */
+ uint64_t a2 : 8; /**< [ 55: 48](RO/H) The affinity level 2 value for the redistributor. */
+ uint64_t a1 : 8; /**< [ 47: 40](RO/H) The affinity level 1 value for the redistributor. */
+ uint64_t a0 : 8; /**< [ 39: 32](RO/H) The affinity level 0 value for the redistributor. */
+ uint64_t reserved_26_31 : 6;
+ uint64_t commonlpiaff : 2; /**< [ 25: 24](RAZ) The affinity level at which re-distributors share a LPI configuration table.
+ 0x0 = All re-distributors must share a config table.
+ 0x1 = All re-distributors with the same Aff3 value must share a LPI configuration table.
+ 0x2 = All re-distributors with the same Aff3.Aff2 value must share a LPI configuration.
+ table.
+ 0x3 = All re-distributors with the same Aff3.Aff2.Aff1 value must share an LPI
+ configuration table. */
+ uint64_t pn : 16; /**< [ 23: 8](RO/H) The processor number, a unique identifier for the processor understood by the ITS. Should
+ be the logical processor number supported by the redistributor, which is the redistributor
+ ID, ie. the variable a. */
+ uint64_t reserved_6_7 : 2;
+ uint64_t dpgs : 1; /**< [ 5: 5](RAZ) GICR()_(S)CTLR[DPG*] bits are NOT supported. */
+ uint64_t last : 1; /**< [ 4: 4](RO/H) Last. This bit is only set for the last redistributor in a set of contiguous redistributor
+ register pages. Needs to be determined from fuse signals or SKU. */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed implementation:
+ 0 = Monolithic implementation.
+ 1 = Distributed implementation registers supported. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t plpis : 1; /**< [ 0: 0](RO) Physical LPIs supported:
+ 0 = Physical LPIs not supported.
+ 1 = Physical LPIs supported. */
+#else /* Word 0 - Little Endian */
+ uint64_t plpis : 1; /**< [ 0: 0](RO) Physical LPIs supported:
+ 0 = Physical LPIs not supported.
+ 1 = Physical LPIs supported. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed implementation:
+ 0 = Monolithic implementation.
+ 1 = Distributed implementation registers supported. */
+ uint64_t last : 1; /**< [ 4: 4](RO/H) Last. This bit is only set for the last redistributor in a set of contiguous redistributor
+ register pages. Needs to be determined from fuse signals or SKU. */
+ uint64_t dpgs : 1; /**< [ 5: 5](RAZ) GICR()_(S)CTLR[DPG*] bits are NOT supported. */
+ uint64_t reserved_6_7 : 2;
+ uint64_t pn : 16; /**< [ 23: 8](RO/H) The processor number, a unique identifier for the processor understood by the ITS. Should
+ be the logical processor number supported by the redistributor, which is the redistributor
+ ID, ie. the variable a. */
+ uint64_t commonlpiaff : 2; /**< [ 25: 24](RAZ) The affinity level at which re-distributors share a LPI configuration table.
+ 0x0 = All re-distributors must share a config table.
+ 0x1 = All re-distributors with the same Aff3 value must share a LPI configuration table.
+ 0x2 = All re-distributors with the same Aff3.Aff2 value must share a LPI configuration.
+ table.
+ 0x3 = All re-distributors with the same Aff3.Aff2.Aff1 value must share an LPI
+ configuration table. */
+ uint64_t reserved_26_31 : 6;
+ uint64_t a0 : 8; /**< [ 39: 32](RO/H) The affinity level 0 value for the redistributor. */
+ uint64_t a1 : 8; /**< [ 47: 40](RO/H) The affinity level 1 value for the redistributor. */
+ uint64_t a2 : 8; /**< [ 55: 48](RO/H) The affinity level 2 value for the redistributor. */
+ uint64_t a3 : 8; /**< [ 63: 56](RO) The affinity level 3 value for the redistributor. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_typer_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t a3 : 8; /**< [ 63: 56](RO) The affinity level 3 value for the redistributor. */
+ uint64_t a2 : 8; /**< [ 55: 48](RO/H) The affinity level 2 value for the redistributor. */
+ uint64_t a1 : 8; /**< [ 47: 40](RO/H) The affinity level 1 value for the redistributor. */
+ uint64_t a0 : 8; /**< [ 39: 32](RO/H) The affinity level 0 value for the redistributor. */
+ uint64_t reserved_24_31 : 8;
+ uint64_t pn : 16; /**< [ 23: 8](RO/H) The processor number, a unique identifier for the processor understood by the ITS. Should
+ be the logical processor number supported by the redistributor, which is the redistributor
+ ID, ie. the variable a. */
+ uint64_t reserved_6_7 : 2;
+ uint64_t dpgs : 1; /**< [ 5: 5](RAZ) GICR()_(S)CTLR[DPG*] bits are NOT supported. */
+ uint64_t last : 1; /**< [ 4: 4](RO/H) Last. This bit is only set for the last redistributor in a set of contiguous redistributor
+ register pages. Needs to be determined from fuse signals or SKU. */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed implementation:
+ 0 = Monolithic implementation.
+ 1 = Distributed implementation registers supported. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t plpis : 1; /**< [ 0: 0](RO) Physical LPIs supported:
+ 0 = Physical LPIs not supported.
+ 1 = Physical LPIs supported. */
+#else /* Word 0 - Little Endian */
+ uint64_t plpis : 1; /**< [ 0: 0](RO) Physical LPIs supported:
+ 0 = Physical LPIs not supported.
+ 1 = Physical LPIs supported. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed implementation:
+ 0 = Monolithic implementation.
+ 1 = Distributed implementation registers supported. */
+ uint64_t last : 1; /**< [ 4: 4](RO/H) Last. This bit is only set for the last redistributor in a set of contiguous redistributor
+ register pages. Needs to be determined from fuse signals or SKU. */
+ uint64_t dpgs : 1; /**< [ 5: 5](RAZ) GICR()_(S)CTLR[DPG*] bits are NOT supported. */
+ uint64_t reserved_6_7 : 2;
+ uint64_t pn : 16; /**< [ 23: 8](RO/H) The processor number, a unique identifier for the processor understood by the ITS. Should
+ be the logical processor number supported by the redistributor, which is the redistributor
+ ID, ie. the variable a. */
+ uint64_t reserved_24_31 : 8;
+ uint64_t a0 : 8; /**< [ 39: 32](RO/H) The affinity level 0 value for the redistributor. */
+ uint64_t a1 : 8; /**< [ 47: 40](RO/H) The affinity level 1 value for the redistributor. */
+ uint64_t a2 : 8; /**< [ 55: 48](RO/H) The affinity level 2 value for the redistributor. */
+ uint64_t a3 : 8; /**< [ 63: 56](RO) The affinity level 3 value for the redistributor. */
+#endif /* Word 0 - End */
+ } cn8;
+ /* struct bdk_gicrx_typer_s cn9; */
+};
+typedef union bdk_gicrx_typer bdk_gicrx_typer_t;
+
+static inline uint64_t BDK_GICRX_TYPER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_TYPER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000008ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000008ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000008ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000008ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_TYPER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_TYPER(a) bdk_gicrx_typer_t
+#define bustype_BDK_GICRX_TYPER(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GICRX_TYPER(a) "GICRX_TYPER"
+#define device_bar_BDK_GICRX_TYPER(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_TYPER(a) (a)
+#define arguments_BDK_GICRX_TYPER(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB32b) gicr#_waker
+ *
+ * GIC Redistributor Wake Request Control Secure Register
+ */
+union bdk_gicrx_waker
+{
+ uint32_t u;
+ struct bdk_gicrx_waker_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t quiescent : 1; /**< [ 31: 31](SRO) Indicates that redistributor is quiescent and can be powered off. */
+ uint32_t reserved_3_30 : 28;
+ uint32_t ca : 1; /**< [ 2: 2](SRO) Children asleep.
+ When [PS] is one, the redistributor treats the interrupt group enables as zero
+ until a subsequent update to the enables is received. */
+ uint32_t ps : 1; /**< [ 1: 1](SR/W) Processor sleep.
+ 0 = The redistributor never asserts WakeRequest.
+ 1 = The redistributor must assert WakeRequest and hold interrupts as pending if an enable
+ bit is zero for an interrupt group and there is a pending interrupt for that group. */
+ uint32_t sleep : 1; /**< [ 0: 0](SR/W) Sleep.
+ 0 = The parent never asserts WakeRequest.
+ 1 = The parent must assert WakeRequest and hold interrupts as pending. */
+#else /* Word 0 - Little Endian */
+ uint32_t sleep : 1; /**< [ 0: 0](SR/W) Sleep.
+ 0 = The parent never asserts WakeRequest.
+ 1 = The parent must assert WakeRequest and hold interrupts as pending. */
+ uint32_t ps : 1; /**< [ 1: 1](SR/W) Processor sleep.
+ 0 = The redistributor never asserts WakeRequest.
+ 1 = The redistributor must assert WakeRequest and hold interrupts as pending if an enable
+ bit is zero for an interrupt group and there is a pending interrupt for that group. */
+ uint32_t ca : 1; /**< [ 2: 2](SRO) Children asleep.
+ When [PS] is one, the redistributor treats the interrupt group enables as zero
+ until a subsequent update to the enables is received. */
+ uint32_t reserved_3_30 : 28;
+ uint32_t quiescent : 1; /**< [ 31: 31](SRO) Indicates that redistributor is quiescent and can be powered off. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gicrx_waker_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t quiescent : 1; /**< [ 31: 31](SRO/H) Indicates that redistributor is quiescent and can be powered off. */
+ uint32_t reserved_3_30 : 28;
+ uint32_t ca : 1; /**< [ 2: 2](SRO/H) Children asleep.
+ When [PS] is one, the redistributor treats the interrupt group enables as zero
+ until a subsequent update to the enables is received. */
+ uint32_t ps : 1; /**< [ 1: 1](SR/W) Processor sleep.
+ 0 = The redistributor never asserts WakeRequest.
+ 1 = The redistributor must assert WakeRequest and hold interrupts as pending if an enable
+ bit is zero for an interrupt group and there is a pending interrupt for that group. */
+ uint32_t sleep : 1; /**< [ 0: 0](SR/W) Sleep.
+ 0 = The parent never asserts WakeRequest.
+ 1 = The parent must assert WakeRequest and hold interrupts as pending. */
+#else /* Word 0 - Little Endian */
+ uint32_t sleep : 1; /**< [ 0: 0](SR/W) Sleep.
+ 0 = The parent never asserts WakeRequest.
+ 1 = The parent must assert WakeRequest and hold interrupts as pending. */
+ uint32_t ps : 1; /**< [ 1: 1](SR/W) Processor sleep.
+ 0 = The redistributor never asserts WakeRequest.
+ 1 = The redistributor must assert WakeRequest and hold interrupts as pending if an enable
+ bit is zero for an interrupt group and there is a pending interrupt for that group. */
+ uint32_t ca : 1; /**< [ 2: 2](SRO/H) Children asleep.
+ When [PS] is one, the redistributor treats the interrupt group enables as zero
+ until a subsequent update to the enables is received. */
+ uint32_t reserved_3_30 : 28;
+ uint32_t quiescent : 1; /**< [ 31: 31](SRO/H) Indicates that redistributor is quiescent and can be powered off. */
+#endif /* Word 0 - End */
+ } cn9;
+ /* struct bdk_gicrx_waker_cn9 cn81xx; */
+ /* struct bdk_gicrx_waker_s cn88xx; */
+ /* struct bdk_gicrx_waker_cn9 cn83xx; */
+};
+typedef union bdk_gicrx_waker bdk_gicrx_waker_t;
+
+static inline uint64_t BDK_GICRX_WAKER(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GICRX_WAKER(unsigned long a)
+{
+ if (CAVIUM_IS_MODEL(CAVIUM_CN81XX) && (a<=3))
+ return 0x801080000014ll + 0x20000ll * ((a) & 0x3);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN83XX) && (a<=23))
+ return 0x801080000014ll + 0x20000ll * ((a) & 0x1f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN88XX) && (a<=47))
+ return 0x801080000014ll + 0x20000ll * ((a) & 0x3f);
+ if (CAVIUM_IS_MODEL(CAVIUM_CN9XXX) && (a<=23))
+ return 0x801080000014ll + 0x20000ll * ((a) & 0x1f);
+ __bdk_csr_fatal("GICRX_WAKER", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GICRX_WAKER(a) bdk_gicrx_waker_t
+#define bustype_BDK_GICRX_WAKER(a) BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GICRX_WAKER(a) "GICRX_WAKER"
+#define device_bar_BDK_GICRX_WAKER(a) 0x4 /* PF_BAR4 */
+#define busnum_BDK_GICRX_WAKER(a) (a)
+#define arguments_BDK_GICRX_WAKER(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gits_baser#
+ *
+ * GIC ITS Device Table Registers
+ * This set of 64-bit registers specify the base address and size of a number of implementation
+ * defined tables required by the ITS.
+ * An implementation can provide up to eight such registers.
+ * Where a register is not implemented, it is RES0.
+ * Bits [63:32] and bits [31:0] may be accessed independently.
+ */
+union bdk_gits_baserx
+{
+ uint64_t u;
+ struct bdk_gits_baserx_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t reserved_12_55 : 44;
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t reserved_12_55 : 44;
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_baserx_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t entry_size : 8; /**< [ 55: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. This field provides bits [41:12] of the base physical address of the
+ table.
+ Bits [11:0] of the base physical address are zero. The address must be aligned to the size
+ specified in the page size field. Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can
+ be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 48 bits of
+ physical address bits. */
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. This field provides bits [41:12] of the base physical address of the
+ table.
+ Bits [11:0] of the base physical address are zero. The address must be aligned to the size
+ specified in the page size field. Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can
+ be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 48 bits of
+ physical address bits. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t entry_size : 8; /**< [ 55: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_gits_baserx_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:52\> = Reserved.
+ * Bits\<51:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table. If the Type field is
+ zero this field is RAZ/WI.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate,write-through.
+ 0x5 = Normal inner cacheable write-allocate,write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t entry_size : 5; /**< [ 52: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t physical_address : 36; /**< [ 47: 12](R/W) Physical address.
+ Software must configure this field to point to a valid DRAM base address.
+ When page size is 4 KB or 16 KB:
+ * This field provides bits \<47:12\> of the base physical address of the table.
+ * Bits \<51:48\> and \<11:0\> of the base physical address are zero.
+ * The address must be aligned to the size specified in the page size field.
+ Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ When page size is 64 KB:
+ * This field provides bits \<51:16\> of the base physical address of the table.
+ * Bits \<15:12\> of this field provide bits \<51:48\> of the base physical address.
+ * Bits \<15:0\> of the base physical address are zero.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 52 bits of
+ physical address bits. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t physical_address : 36; /**< [ 47: 12](R/W) Physical address.
+ Software must configure this field to point to a valid DRAM base address.
+ When page size is 4 KB or 16 KB:
+ * This field provides bits \<47:12\> of the base physical address of the table.
+ * Bits \<51:48\> and \<11:0\> of the base physical address are zero.
+ * The address must be aligned to the size specified in the page size field.
+ Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ When page size is 64 KB:
+ * This field provides bits \<51:16\> of the base physical address of the table.
+ * Bits \<15:12\> of this field provide bits \<51:48\> of the base physical address.
+ * Bits \<15:0\> of the base physical address are zero.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 52 bits of
+ physical address bits. */
+ uint64_t entry_size : 5; /**< [ 52: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table. If the Type field is
+ zero this field is RAZ/WI.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate,write-through.
+ 0x5 = Normal inner cacheable write-allocate,write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:52\> = Reserved.
+ * Bits\<51:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+#endif /* Word 0 - End */
+ } cn9;
+ struct bdk_gits_baserx_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table. If the Type field is
+ zero this field is RAZ/WI.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate,write-through.
+ 0x5 = Normal inner cacheable write-allocate,write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t entry_size : 5; /**< [ 52: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. This field provides bits [41:12] of the base physical address of the
+ table.
+ Bits [11:0] of the base physical address are zero. The address must be aligned to the size
+ specified in the page size field. Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can
+ be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 48 bits of
+ physical address bits. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) Size. The number of pages of memory allocated to the table, minus one. */
+ uint64_t pagesize : 2; /**< [ 9: 8](R/W) Page size:
+ 0x0 = 4 KB pages.
+ 0x1 = 16 KB pages (not supported, reserved).
+ 0x2 = 64 KB pages.
+ 0x3 = Reserved. Treated as 64 KB pages. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. This field provides bits [41:12] of the base physical address of the
+ table.
+ Bits [11:0] of the base physical address are zero. The address must be aligned to the size
+ specified in the page size field. Otherwise the effect is CONSTRAINED UNPREDICTABLE, and
+ can
+ be one of the following:
+ * Bits X:12 (where X is derived from the page size) are treated as zero.
+ * The value of bits X:12 are used when calculating the address of a table access.
+
+ In CNXXXX where the address must be in DRAM this contains fewer than 48 bits of
+ physical address bits. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t entry_size : 5; /**< [ 52: 48](RO) This field is read-only and specifies the number of bytes per entry, minus one. */
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t tbl_type : 3; /**< [ 58: 56](RO) This field is read-only and specifies the type of entity that requires entries in the
+ associated table. The field may have the following values:
+ 0x0 = Unimplemented. This register does not correspond to an ITS table and requires no
+ memory.
+ 0x1 = Devices. This register corresponds to a table that scales according to the number of
+ devices serviced by the ITS and requires
+ (Entry-size * number-of-devices) bytes of memory.
+ 0x2 = Virtual processors. This register corresponds to a table that scales according to
+ the number of virtual processors in the system and
+ requires (Entry-size * number-of-processors) bytes ofmemory.
+ 0x3 = Physical processors.
+ 0x4 = Interrupt collections.
+ 0x5 = Reserved.
+ 0x6 = Reserved.
+ 0x7 = Reserved.
+
+ Software must always provision memory for GITS_BASER() registers where this field
+ indicate "devices","interrupt collections" or "physical processors". */
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table. If the Type field is
+ zero this field is RAZ/WI.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate,write-through.
+ 0x5 = Normal inner cacheable write-allocate,write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t indirect : 1; /**< [ 62: 62](RO) Indirect.This field indicates whether an implemented register specifies a single, flat
+ table or a two-level table where the first level
+ contains a list of descriptors. Note: this field is RAZ/WI for implementations that only
+ support flat tables.
+ 0 = Single level. [SIZE] indicates a number of pages used by the ITS to store data
+ associated with each table entry.
+ 1 = Two level. [SIZE] indicates a number of pages which contain an array of 64-bit
+ descriptors to pages that are used
+ to store the data associated with each table entry. Each 64-bit descriptor has the
+ following format:
+ * Bits\<63\> = Valid.
+ * Bits\<62:48\> = Reserved.
+ * Bits\<47:N\> = Physical address.
+ * Bits\<N-1:0\> = Reserved.
+ * Where N is the number of bits required to specify the page size.
+ Note: software must ensure that each pointer in the first level table specifies a unique
+ physical address otherwise the effects are unpredictable.
+ For a two level table, if an entry is invalid:
+ * If the type field specifies a valid table type other than interrupt collections, the
+ ITS
+ discards any writes to the interrupt translation page.
+ * If the type field specifies the interrupt collections table and GITS_TYPER.HCC is
+ zero,
+ the ITS discards any writes to the interrupt translation page. */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid:
+ 0 = No memory has been allocated to the table and if the type field is nonzero, the ITS
+ discards any writes to the interrupt translation page.
+ 1 = Memory has been allocated to the table by software. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_gits_baserx_cn81xx cn83xx; */
+ /* struct bdk_gits_baserx_cn81xx cn88xxp2; */
+};
+typedef union bdk_gits_baserx bdk_gits_baserx_t;
+
+static inline uint64_t BDK_GITS_BASERX(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_BASERX(unsigned long a)
+{
+ if (a==0)
+ return 0x801000020100ll + 8ll * ((a) & 0x0);
+ __bdk_csr_fatal("GITS_BASERX", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GITS_BASERX(a) bdk_gits_baserx_t
+#define bustype_BDK_GITS_BASERX(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_BASERX(a) "GITS_BASERX"
+#define device_bar_BDK_GITS_BASERX(a) 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_BASERX(a) (a)
+#define arguments_BDK_GITS_BASERX(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gits_baser#_rowi
+ *
+ * GIC ITS Table Registers
+ * This set of 64-bit registers specify the base address and size of a number of implementation
+ * defined tables required by the ITS:
+ * An implementation can provide up to eight such registers.
+ * Where a register is not implemented, it is RES0.
+ */
+union bdk_gits_baserx_rowi
+{
+ uint64_t u;
+ struct bdk_gits_baserx_rowi_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_0_63 : 64;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_63 : 64;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_baserx_rowi_s cn; */
+};
+typedef union bdk_gits_baserx_rowi bdk_gits_baserx_rowi_t;
+
+static inline uint64_t BDK_GITS_BASERX_ROWI(unsigned long a) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_BASERX_ROWI(unsigned long a)
+{
+ if ((a>=1)&&(a<=7))
+ return 0x801000020100ll + 8ll * ((a) & 0x7);
+ __bdk_csr_fatal("GITS_BASERX_ROWI", 1, a, 0, 0, 0);
+}
+
+#define typedef_BDK_GITS_BASERX_ROWI(a) bdk_gits_baserx_rowi_t
+#define bustype_BDK_GITS_BASERX_ROWI(a) BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_BASERX_ROWI(a) "GITS_BASERX_ROWI"
+#define device_bar_BDK_GITS_BASERX_ROWI(a) 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_BASERX_ROWI(a) (a)
+#define arguments_BDK_GITS_BASERX_ROWI(a) (a),-1,-1,-1
+
+/**
+ * Register (NCB) gits_cbaser
+ *
+ * GIC ITS Command Queue Base Register
+ * This register holds the physical memory address of the ITS command queue.
+ * Note: when GITS_CBASER is successfully written, the value of GITS_CREADR is set to zero. See
+ * GIC
+ * spec for details on the ITS initialization sequence. Bits [63:32] and bits [31:0] may be
+ * accessed
+ * independently. When GITS_CTLR[ENABLED] is one or GITS_CTLR[QUIESCENT] is zero, this register is
+ * read-only.
+ */
+union bdk_gits_cbaser
+{
+ uint64_t u;
+ struct bdk_gits_cbaser_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+ uint64_t reserved_62 : 1;
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_12_52 : 41;
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t reserved_8_9 : 2;
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+ uint64_t reserved_8_9 : 2;
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t reserved_12_52 : 41;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_62 : 1;
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_cbaser_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+ uint64_t reserved_62 : 1;
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_48_58 : 11;
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. Provides bits \<47:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero. */
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t reserved_8_9 : 2;
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+ uint64_t reserved_8_9 : 2;
+ uint64_t shareability : 2; /**< [ 11: 10](RO) Shareability attribute:
+ 0x0 = Accesses are nonshareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ Ignored in CNXXXX. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. Provides bits \<47:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t reserved_48_58 : 11;
+ uint64_t cacheability : 3; /**< [ 61: 59](RO) Cacheability attribute:
+ 0x0 = Noncacheable, nonbufferable.
+ 0x1 = Noncacheable.
+ 0x2 = Read-allocate, writethrough.
+ 0x3 = Read-allocate, writeback.
+ 0x4 = Write-allocate, writethrough.
+ 0x5 = Write-allocate, writeback.
+ 0x6 = Read-allocate, write-allocate, writethrough.
+ 0x7 = Read-allocate, write-allocate, writeback.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_62 : 1;
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_gits_cbaser_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+ uint64_t reserved_62 : 1;
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate, write-through.
+ 0x5 = Normal inner cacheable write-allocate, write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_52 : 1;
+ uint64_t physical_address : 40; /**< [ 51: 12](R/W) Physical address. Provides bits \<51:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero.
+ Software must configure this field to point to a valid DRAM base address.
+ If bits \<15:12\> are not all zeros, behavior is CONSTRAINED UNPREDICTABLE
+ and the result of the calculation of an address for a command queue read
+ can be corrupted. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute. The shareability attributes of accesses to the table.
+ 0x0 = Accesses are non-shareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_8_9 : 2;
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+ uint64_t reserved_8_9 : 2;
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute. The shareability attributes of accesses to the table.
+ 0x0 = Accesses are non-shareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t physical_address : 40; /**< [ 51: 12](R/W) Physical address. Provides bits \<51:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero.
+ Software must configure this field to point to a valid DRAM base address.
+ If bits \<15:12\> are not all zeros, behavior is CONSTRAINED UNPREDICTABLE
+ and the result of the calculation of an address for a command queue read
+ can be corrupted. */
+ uint64_t reserved_52 : 1;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate, write-through.
+ 0x5 = Normal inner cacheable write-allocate, write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_62 : 1;
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+#endif /* Word 0 - End */
+ } cn9;
+ struct bdk_gits_cbaser_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+ uint64_t reserved_62 : 1;
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate, write-through.
+ 0x5 = Normal inner cacheable write-allocate, write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_48_52 : 5;
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. Provides bits \<47:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero. */
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute. The shareability attributes of accesses to the table.
+ 0x0 = Accesses are non-shareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_8_9 : 2;
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+#else /* Word 0 - Little Endian */
+ uint64_t size : 8; /**< [ 7: 0](R/W) The number of 4 KB pages of physical memory provided for the command queue, minus one.
+ The command queue is a circular buffer and wraps at physical address \<47:0\> + (4096 *
+ (SIZE+1)). */
+ uint64_t reserved_8_9 : 2;
+ uint64_t shareability : 2; /**< [ 11: 10](R/W) Shareability attribute. The shareability attributes of accesses to the table.
+ 0x0 = Accesses are non-shareable.
+ 0x1 = Accesses are inner-shareable.
+ 0x2 = Accesses are outer-shareable.
+ 0x3 = Reserved. Treated as 0x0.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t physical_address : 30; /**< [ 41: 12](R/W) Physical address. Provides bits \<47:12\> of the physical address of the memory
+ containing the command queue. Bits \<11:0\> of the base address of the queue are
+ zero. */
+ uint64_t arsvd : 6; /**< [ 47: 42](R/W) Reserved; must be zero. This field will be ignored if not zero. */
+ uint64_t reserved_48_52 : 5;
+ uint64_t outer_cacheability : 3; /**< [ 55: 53](R/W) Outer cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Memory type defined in bits[61:59]; for normal memory outer cacheability is the same
+ as the inner cacheable.
+ 0x1 = Normal outer noncacheable.
+ 0x2 = Normal outer cacheable read-allocate, write-through.
+ 0x3 = Normal outer cacheable read-allocate, write-back.
+ 0x4 = Normal outer cacheable write-allocate, write-through.
+ 0x5 = Normal outer cacheable write-allocate, write-back.
+ 0x6 = Normal outer cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal outer cacheable read-allocate, write-allocate, write-back.
+
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_56_58 : 3;
+ uint64_t cacheability : 3; /**< [ 61: 59](R/W) Cacheability. The cacheability attributes of accesses to the table.
+ 0x0 = Device-nGnRnE.
+ 0x1 = Normal inner noncacheable.
+ 0x2 = Normal inner cacheable read-allocate, write-through.
+ 0x3 = Normal inner cacheable read-allocate, write-back.
+ 0x4 = Normal inner cacheable write-allocate, write-through.
+ 0x5 = Normal inner cacheable write-allocate, write-back.
+ 0x6 = Normal inner cacheable read-allocate, write-allocate, write-through.
+ 0x7 = Normal inner cacheable read-allocate, write-allocate, write-back.
+ In CNXXXX not implemented, ignored. */
+ uint64_t reserved_62 : 1;
+ uint64_t valid : 1; /**< [ 63: 63](R/W) Valid.
+ When set to one, indicates that memory has been allocated by software for the command
+ queue
+ When set to zero, no memory has been allocated to the command queue and the ITS discards
+ any writes to the interrupt translation page. */
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_gits_cbaser_cn81xx cn83xx; */
+ /* struct bdk_gits_cbaser_cn81xx cn88xxp2; */
+};
+typedef union bdk_gits_cbaser bdk_gits_cbaser_t;
+
+#define BDK_GITS_CBASER BDK_GITS_CBASER_FUNC()
+static inline uint64_t BDK_GITS_CBASER_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CBASER_FUNC(void)
+{
+ return 0x801000020080ll;
+}
+
+#define typedef_BDK_GITS_CBASER bdk_gits_cbaser_t
+#define bustype_BDK_GITS_CBASER BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_CBASER "GITS_CBASER"
+#define device_bar_BDK_GITS_CBASER 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CBASER 0
+#define arguments_BDK_GITS_CBASER -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_cidr0
+ *
+ * GIC ITS Component Identification Register 0
+ */
+union bdk_gits_cidr0
+{
+ uint32_t u;
+ struct bdk_gits_cidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_cidr0_s cn; */
+};
+typedef union bdk_gits_cidr0 bdk_gits_cidr0_t;
+
+#define BDK_GITS_CIDR0 BDK_GITS_CIDR0_FUNC()
+static inline uint64_t BDK_GITS_CIDR0_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CIDR0_FUNC(void)
+{
+ return 0x80100002fff0ll;
+}
+
+#define typedef_BDK_GITS_CIDR0 bdk_gits_cidr0_t
+#define bustype_BDK_GITS_CIDR0 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_CIDR0 "GITS_CIDR0"
+#define device_bar_BDK_GITS_CIDR0 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CIDR0 0
+#define arguments_BDK_GITS_CIDR0 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_cidr1
+ *
+ * GIC ITS Component Identification Register 1
+ */
+union bdk_gits_cidr1
+{
+ uint32_t u;
+ struct bdk_gits_cidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_cidr1_s cn; */
+};
+typedef union bdk_gits_cidr1 bdk_gits_cidr1_t;
+
+#define BDK_GITS_CIDR1 BDK_GITS_CIDR1_FUNC()
+static inline uint64_t BDK_GITS_CIDR1_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CIDR1_FUNC(void)
+{
+ return 0x80100002fff4ll;
+}
+
+#define typedef_BDK_GITS_CIDR1 bdk_gits_cidr1_t
+#define bustype_BDK_GITS_CIDR1 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_CIDR1 "GITS_CIDR1"
+#define device_bar_BDK_GITS_CIDR1 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CIDR1 0
+#define arguments_BDK_GITS_CIDR1 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_cidr2
+ *
+ * GIC ITS Component Identification Register 2
+ */
+union bdk_gits_cidr2
+{
+ uint32_t u;
+ struct bdk_gits_cidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_cidr2_s cn; */
+};
+typedef union bdk_gits_cidr2 bdk_gits_cidr2_t;
+
+#define BDK_GITS_CIDR2 BDK_GITS_CIDR2_FUNC()
+static inline uint64_t BDK_GITS_CIDR2_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CIDR2_FUNC(void)
+{
+ return 0x80100002fff8ll;
+}
+
+#define typedef_BDK_GITS_CIDR2 bdk_gits_cidr2_t
+#define bustype_BDK_GITS_CIDR2 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_CIDR2 "GITS_CIDR2"
+#define device_bar_BDK_GITS_CIDR2 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CIDR2 0
+#define arguments_BDK_GITS_CIDR2 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_cidr3
+ *
+ * GIC ITS Component Identification Register 3
+ */
+union bdk_gits_cidr3
+{
+ uint32_t u;
+ struct bdk_gits_cidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+#else /* Word 0 - Little Endian */
+ uint32_t preamble : 8; /**< [ 7: 0](RO) Preamble identification value. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_cidr3_s cn; */
+};
+typedef union bdk_gits_cidr3 bdk_gits_cidr3_t;
+
+#define BDK_GITS_CIDR3 BDK_GITS_CIDR3_FUNC()
+static inline uint64_t BDK_GITS_CIDR3_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CIDR3_FUNC(void)
+{
+ return 0x80100002fffcll;
+}
+
+#define typedef_BDK_GITS_CIDR3 bdk_gits_cidr3_t
+#define bustype_BDK_GITS_CIDR3 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_CIDR3 "GITS_CIDR3"
+#define device_bar_BDK_GITS_CIDR3 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CIDR3 0
+#define arguments_BDK_GITS_CIDR3 -1,-1,-1,-1
+
+/**
+ * Register (NCB) gits_creadr
+ *
+ * GIC ITS Command Queue Read Register
+ * Offset in the ITS command queue from GITS_CBASER where the next command will be read by the
+ * ITS.
+ *
+ * The command queue is considered to be empty when GITS_CWRITER is equal to GITS_CREADR.
+ *
+ * The command queue is considered to be full when GITS_CWRITER is equal to (GITS_CREADR minus
+ * 32), taking wrapping into account.
+ *
+ * Note: when GITS_CBASER is written, the value of GITS_CREADR is set to zero.
+ */
+union bdk_gits_creadr
+{
+ uint64_t u;
+ struct bdk_gits_creadr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_20_63 : 44;
+ uint64_t offset : 15; /**< [ 19: 5](RO/H) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where the ITS will
+ read the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_1_4 : 4;
+ uint64_t stalled : 1; /**< [ 0: 0](RAZ) ITS commands are not stalled due to an error. */
+#else /* Word 0 - Little Endian */
+ uint64_t stalled : 1; /**< [ 0: 0](RAZ) ITS commands are not stalled due to an error. */
+ uint64_t reserved_1_4 : 4;
+ uint64_t offset : 15; /**< [ 19: 5](RO/H) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where the ITS will
+ read the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_20_63 : 44;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_creadr_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_20_63 : 44;
+ uint64_t offset : 15; /**< [ 19: 5](RO/H) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where the ITS will
+ read the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_0_4 : 5;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_4 : 5;
+ uint64_t offset : 15; /**< [ 19: 5](RO/H) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where the ITS will
+ read the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_20_63 : 44;
+#endif /* Word 0 - End */
+ } cn8;
+ /* struct bdk_gits_creadr_s cn9; */
+};
+typedef union bdk_gits_creadr bdk_gits_creadr_t;
+
+#define BDK_GITS_CREADR BDK_GITS_CREADR_FUNC()
+static inline uint64_t BDK_GITS_CREADR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CREADR_FUNC(void)
+{
+ return 0x801000020090ll;
+}
+
+#define typedef_BDK_GITS_CREADR bdk_gits_creadr_t
+#define bustype_BDK_GITS_CREADR BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_CREADR "GITS_CREADR"
+#define device_bar_BDK_GITS_CREADR 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CREADR 0
+#define arguments_BDK_GITS_CREADR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_ctlr
+ *
+ * GIC ITS Control Register
+ * This register controls the behavior of the interrupt translation service.
+ */
+union bdk_gits_ctlr
+{
+ uint32_t u;
+ struct bdk_gits_ctlr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t quiescent : 1; /**< [ 31: 31](RO/H) This bit indicates whether the ITS has completed all operations following a write of
+ enable to zero.
+ 0 = The ITS is not quiescent.
+ 1 = The ITS is quiescent, has completed all operations required to make any mapping data
+ consistent with external memory and may be powered off. Note: in CCPI
+ implementations,
+ the ITS must also have forwarded any required operations to the redistributors and
+ received confirmation that they have reached the appropriate redistributor. */
+ uint32_t reserved_1_30 : 30;
+ uint32_t enabled : 1; /**< [ 0: 0](R/W) Enabled:
+ 0 = ITS is disabled. Writes to the interrupt translation space will be ignored and no
+ further command queue entries will be processed.
+ 1 = ITS is enabled. Writes to the interrupt translation space will result in interrupt
+ translations and the command queue will be processed.
+
+ If a write to this register changes enabled from one to zero, the ITS must ensure that any
+ caches containing mapping data must be made
+ consistent with external memory and [QUIESCENT] must read as one until this has been
+ completed. */
+#else /* Word 0 - Little Endian */
+ uint32_t enabled : 1; /**< [ 0: 0](R/W) Enabled:
+ 0 = ITS is disabled. Writes to the interrupt translation space will be ignored and no
+ further command queue entries will be processed.
+ 1 = ITS is enabled. Writes to the interrupt translation space will result in interrupt
+ translations and the command queue will be processed.
+
+ If a write to this register changes enabled from one to zero, the ITS must ensure that any
+ caches containing mapping data must be made
+ consistent with external memory and [QUIESCENT] must read as one until this has been
+ completed. */
+ uint32_t reserved_1_30 : 30;
+ uint32_t quiescent : 1; /**< [ 31: 31](RO/H) This bit indicates whether the ITS has completed all operations following a write of
+ enable to zero.
+ 0 = The ITS is not quiescent.
+ 1 = The ITS is quiescent, has completed all operations required to make any mapping data
+ consistent with external memory and may be powered off. Note: in CCPI
+ implementations,
+ the ITS must also have forwarded any required operations to the redistributors and
+ received confirmation that they have reached the appropriate redistributor. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_ctlr_s cn; */
+};
+typedef union bdk_gits_ctlr bdk_gits_ctlr_t;
+
+#define BDK_GITS_CTLR BDK_GITS_CTLR_FUNC()
+static inline uint64_t BDK_GITS_CTLR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CTLR_FUNC(void)
+{
+ return 0x801000020000ll;
+}
+
+#define typedef_BDK_GITS_CTLR bdk_gits_ctlr_t
+#define bustype_BDK_GITS_CTLR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_CTLR "GITS_CTLR"
+#define device_bar_BDK_GITS_CTLR 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CTLR 0
+#define arguments_BDK_GITS_CTLR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gits_cwriter
+ *
+ * GIC ITS Command Queue Write Register
+ * Offset in the ITS command queue from GITS_CBASER where the next command will be written by
+ * software.
+ *
+ * The command queue is considered to be empty when GITS_CWRITER is equal to GITS_CREADR.
+ *
+ * The command queue is considered to be full when GITS_CWRITER is equal to (GITS_CREADR minus
+ * 32), taking wrapping into account.
+ *
+ * Each command in the queue comprises 32 bytes. See section 5.13 for details of the commands
+ * supported and the format of each command.
+ */
+union bdk_gits_cwriter
+{
+ uint64_t u;
+ struct bdk_gits_cwriter_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_20_63 : 44;
+ uint64_t offset : 15; /**< [ 19: 5](R/W) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where software will
+ write the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_1_4 : 4;
+ uint64_t retry : 1; /**< [ 0: 0](RAZ) Retry of processing of ITS commands not supported. */
+#else /* Word 0 - Little Endian */
+ uint64_t retry : 1; /**< [ 0: 0](RAZ) Retry of processing of ITS commands not supported. */
+ uint64_t reserved_1_4 : 4;
+ uint64_t offset : 15; /**< [ 19: 5](R/W) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where software will
+ write the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_20_63 : 44;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_cwriter_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_20_63 : 44;
+ uint64_t offset : 15; /**< [ 19: 5](R/W) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where software will
+ write the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_0_4 : 5;
+#else /* Word 0 - Little Endian */
+ uint64_t reserved_0_4 : 5;
+ uint64_t offset : 15; /**< [ 19: 5](R/W) Offset. Provides bits \<19:5\> of the offset from GITS_CBASER where software will
+ write the next command. Bits \<4:0\> of the offset are zero. */
+ uint64_t reserved_20_63 : 44;
+#endif /* Word 0 - End */
+ } cn8;
+ /* struct bdk_gits_cwriter_s cn9; */
+};
+typedef union bdk_gits_cwriter bdk_gits_cwriter_t;
+
+#define BDK_GITS_CWRITER BDK_GITS_CWRITER_FUNC()
+static inline uint64_t BDK_GITS_CWRITER_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_CWRITER_FUNC(void)
+{
+ return 0x801000020088ll;
+}
+
+#define typedef_BDK_GITS_CWRITER bdk_gits_cwriter_t
+#define bustype_BDK_GITS_CWRITER BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_CWRITER "GITS_CWRITER"
+#define device_bar_BDK_GITS_CWRITER 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_CWRITER 0
+#define arguments_BDK_GITS_CWRITER -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_iidr
+ *
+ * GIC ITS Implementation Identification Register
+ * This 32-bit register is read-only and specifies the version and features supported by the ITS.
+ */
+union bdk_gits_iidr
+{
+ uint32_t u;
+ struct bdk_gits_iidr_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+ uint32_t reserved_20_23 : 4;
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+#else /* Word 0 - Little Endian */
+ uint32_t implementer : 12; /**< [ 11: 0](RO) Indicates the implementer:
+ 0x34C = Cavium. */
+ uint32_t revision : 4; /**< [ 15: 12](RO) Indicates the minor revision of the product.
+ On CNXXXX, this is the minor revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t variant : 4; /**< [ 19: 16](RO) Indicates the major revision or variant of the product.
+ On CNXXXX, this is the major revision. See FUS_FUSE_NUM_E::CHIP_ID(). */
+ uint32_t reserved_20_23 : 4;
+ uint32_t productid : 8; /**< [ 31: 24](RO) An implementation defined product number for the device.
+ In CNXXXX, enumerated by PCC_PROD_E. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_iidr_s cn; */
+};
+typedef union bdk_gits_iidr bdk_gits_iidr_t;
+
+#define BDK_GITS_IIDR BDK_GITS_IIDR_FUNC()
+static inline uint64_t BDK_GITS_IIDR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_IIDR_FUNC(void)
+{
+ return 0x801000020004ll;
+}
+
+#define typedef_BDK_GITS_IIDR bdk_gits_iidr_t
+#define bustype_BDK_GITS_IIDR BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_IIDR "GITS_IIDR"
+#define device_bar_BDK_GITS_IIDR 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_IIDR 0
+#define arguments_BDK_GITS_IIDR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gits_imp_cseir
+ *
+ * GIC ITS Implementation Defined Command SEI Register
+ * This register holds the SEI status of the ITS command error.
+ */
+union bdk_gits_imp_cseir
+{
+ uint64_t u;
+ struct bdk_gits_imp_cseir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_52_63 : 12;
+ uint64_t creadr : 15; /**< [ 51: 37](RO/H) The read pointer of the first command with error. */
+ uint64_t reserved_26_36 : 11;
+ uint64_t cwriter_oor : 1; /**< [ 25: 25](RO/H) When set, it means command write pointer is out of range. */
+ uint64_t m : 1; /**< [ 24: 24](RO/H) When set, it means multiple command errors have happened. */
+ uint64_t reserved_17_23 : 7;
+ uint64_t v : 1; /**< [ 16: 16](R/W1C/H) When set, the command error is valid. For meaning/encoding of {7'b0, V, CMD,
+ ERROR}, please see ITS Command error encodings in the GIC specfication. Writing
+ one to this field, will clear the whole register. */
+ uint64_t cmd : 8; /**< [ 15: 8](RO/H) Type field of first ITS command that has the error. */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. */
+#else /* Word 0 - Little Endian */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. */
+ uint64_t cmd : 8; /**< [ 15: 8](RO/H) Type field of first ITS command that has the error. */
+ uint64_t v : 1; /**< [ 16: 16](R/W1C/H) When set, the command error is valid. For meaning/encoding of {7'b0, V, CMD,
+ ERROR}, please see ITS Command error encodings in the GIC specfication. Writing
+ one to this field, will clear the whole register. */
+ uint64_t reserved_17_23 : 7;
+ uint64_t m : 1; /**< [ 24: 24](RO/H) When set, it means multiple command errors have happened. */
+ uint64_t cwriter_oor : 1; /**< [ 25: 25](RO/H) When set, it means command write pointer is out of range. */
+ uint64_t reserved_26_36 : 11;
+ uint64_t creadr : 15; /**< [ 51: 37](RO/H) The read pointer of the first command with error. */
+ uint64_t reserved_52_63 : 12;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_imp_cseir_s cn; */
+};
+typedef union bdk_gits_imp_cseir bdk_gits_imp_cseir_t;
+
+#define BDK_GITS_IMP_CSEIR BDK_GITS_IMP_CSEIR_FUNC()
+static inline uint64_t BDK_GITS_IMP_CSEIR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_IMP_CSEIR_FUNC(void)
+{
+ return 0x801000020020ll;
+}
+
+#define typedef_BDK_GITS_IMP_CSEIR bdk_gits_imp_cseir_t
+#define bustype_BDK_GITS_IMP_CSEIR BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_IMP_CSEIR "GITS_IMP_CSEIR"
+#define device_bar_BDK_GITS_IMP_CSEIR 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_IMP_CSEIR 0
+#define arguments_BDK_GITS_IMP_CSEIR -1,-1,-1,-1
+
+/**
+ * Register (NCB) gits_imp_tseir
+ *
+ * GIC ITS Implementation Defined Translator SEI Register
+ * This register holds the SEI status of the ITS translator error.
+ */
+union bdk_gits_imp_tseir
+{
+ uint64_t u;
+ struct bdk_gits_imp_tseir_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t v : 1; /**< [ 63: 63](R/W1C/H) When set, the translator error is valid. Write one to this field will clear [V], [M],
+ [DEV_ID], [INT_ID], and [ERROR]. */
+ uint64_t m : 1; /**< [ 62: 62](RO/H) When set, it means multiple errors have happened. */
+ uint64_t reserved_56_61 : 6;
+ uint64_t dev_id : 24; /**< [ 55: 32](RO/H) Input device ID to the interrupt translator. */
+ uint64_t reserved_28_31 : 4;
+ uint64_t int_id : 20; /**< [ 27: 8](RO/H) Input interrupt ID to the interrupt translator. */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. Valid encoding is enumerated by GITS_CMD_ERR_E
+ and one of GITS_CMD_ERR_E::CSEI_UNMAPPED_DEVICE,
+ GITS_CMD_ERR_E::CSEI_DEVICE_OOR, GITS_CMD_ERR_E::CSEI_ID_OOR,
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_INTERRUPT, or
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_COLLECTION. */
+#else /* Word 0 - Little Endian */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. Valid encoding is enumerated by GITS_CMD_ERR_E
+ and one of GITS_CMD_ERR_E::CSEI_UNMAPPED_DEVICE,
+ GITS_CMD_ERR_E::CSEI_DEVICE_OOR, GITS_CMD_ERR_E::CSEI_ID_OOR,
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_INTERRUPT, or
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_COLLECTION. */
+ uint64_t int_id : 20; /**< [ 27: 8](RO/H) Input interrupt ID to the interrupt translator. */
+ uint64_t reserved_28_31 : 4;
+ uint64_t dev_id : 24; /**< [ 55: 32](RO/H) Input device ID to the interrupt translator. */
+ uint64_t reserved_56_61 : 6;
+ uint64_t m : 1; /**< [ 62: 62](RO/H) When set, it means multiple errors have happened. */
+ uint64_t v : 1; /**< [ 63: 63](R/W1C/H) When set, the translator error is valid. Write one to this field will clear [V], [M],
+ [DEV_ID], [INT_ID], and [ERROR]. */
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_imp_tseir_cn8
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t v : 1; /**< [ 63: 63](R/W1C/H) When set, the translator error is valid. Write one to this field will clear [V], [M],
+ [DEV_ID], [INT_ID], and [ERROR]. */
+ uint64_t m : 1; /**< [ 62: 62](RO/H) When set, it means multiple errors have happened. */
+ uint64_t reserved_53_61 : 9;
+ uint64_t dev_id : 21; /**< [ 52: 32](RO/H) Input device ID to the interrupt translator. */
+ uint64_t reserved_28_31 : 4;
+ uint64_t int_id : 20; /**< [ 27: 8](RO/H) Input interrupt ID to the interrupt translator. */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. Valid encoding is enumerated by GITS_CMD_ERR_E
+ and one of GITS_CMD_ERR_E::CSEI_UNMAPPED_DEVICE,
+ GITS_CMD_ERR_E::CSEI_DEVICE_OOR, GITS_CMD_ERR_E::CSEI_ID_OOR,
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_INTERRUPT, or
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_COLLECTION. */
+#else /* Word 0 - Little Endian */
+ uint64_t error : 8; /**< [ 7: 0](RO/H) Error code for the first error. Valid encoding is enumerated by GITS_CMD_ERR_E
+ and one of GITS_CMD_ERR_E::CSEI_UNMAPPED_DEVICE,
+ GITS_CMD_ERR_E::CSEI_DEVICE_OOR, GITS_CMD_ERR_E::CSEI_ID_OOR,
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_INTERRUPT, or
+ GITS_CMD_ERR_E::CSEI_UNMAPPED_COLLECTION. */
+ uint64_t int_id : 20; /**< [ 27: 8](RO/H) Input interrupt ID to the interrupt translator. */
+ uint64_t reserved_28_31 : 4;
+ uint64_t dev_id : 21; /**< [ 52: 32](RO/H) Input device ID to the interrupt translator. */
+ uint64_t reserved_53_61 : 9;
+ uint64_t m : 1; /**< [ 62: 62](RO/H) When set, it means multiple errors have happened. */
+ uint64_t v : 1; /**< [ 63: 63](R/W1C/H) When set, the translator error is valid. Write one to this field will clear [V], [M],
+ [DEV_ID], [INT_ID], and [ERROR]. */
+#endif /* Word 0 - End */
+ } cn8;
+ /* struct bdk_gits_imp_tseir_s cn9; */
+};
+typedef union bdk_gits_imp_tseir bdk_gits_imp_tseir_t;
+
+#define BDK_GITS_IMP_TSEIR BDK_GITS_IMP_TSEIR_FUNC()
+static inline uint64_t BDK_GITS_IMP_TSEIR_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_IMP_TSEIR_FUNC(void)
+{
+ return 0x801000020028ll;
+}
+
+#define typedef_BDK_GITS_IMP_TSEIR bdk_gits_imp_tseir_t
+#define bustype_BDK_GITS_IMP_TSEIR BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_IMP_TSEIR "GITS_IMP_TSEIR"
+#define device_bar_BDK_GITS_IMP_TSEIR 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_IMP_TSEIR 0
+#define arguments_BDK_GITS_IMP_TSEIR -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr0
+ *
+ * GIC ITS Peripheral Identification Register 0
+ */
+union bdk_gits_pidr0
+{
+ uint32_t u;
+ struct bdk_gits_pidr0_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GITS. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum0 : 8; /**< [ 7: 0](RO) Part number \<7:0\>. Indicates PCC_PIDR_PARTNUM0_E::GITS. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr0_s cn; */
+};
+typedef union bdk_gits_pidr0 bdk_gits_pidr0_t;
+
+#define BDK_GITS_PIDR0 BDK_GITS_PIDR0_FUNC()
+static inline uint64_t BDK_GITS_PIDR0_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR0_FUNC(void)
+{
+ return 0x80100002ffe0ll;
+}
+
+#define typedef_BDK_GITS_PIDR0 bdk_gits_pidr0_t
+#define bustype_BDK_GITS_PIDR0 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR0 "GITS_PIDR0"
+#define device_bar_BDK_GITS_PIDR0 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR0 0
+#define arguments_BDK_GITS_PIDR0 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr1
+ *
+ * GIC ITS Peripheral Identification Register 1
+ */
+union bdk_gits_pidr1
+{
+ uint32_t u;
+ struct bdk_gits_pidr1_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+#else /* Word 0 - Little Endian */
+ uint32_t partnum1 : 4; /**< [ 3: 0](RO) Part number \<11:8\>. Indicates PCC_PIDR_PARTNUM1_E::COMP. */
+ uint32_t idcode : 4; /**< [ 7: 4](RO) JEP106 identification code \<3:0\>. Cavium code is 0x4C. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr1_s cn; */
+};
+typedef union bdk_gits_pidr1 bdk_gits_pidr1_t;
+
+#define BDK_GITS_PIDR1 BDK_GITS_PIDR1_FUNC()
+static inline uint64_t BDK_GITS_PIDR1_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR1_FUNC(void)
+{
+ return 0x80100002ffe4ll;
+}
+
+#define typedef_BDK_GITS_PIDR1 bdk_gits_pidr1_t
+#define bustype_BDK_GITS_PIDR1 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR1 "GITS_PIDR1"
+#define device_bar_BDK_GITS_PIDR1 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR1 0
+#define arguments_BDK_GITS_PIDR1 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr2
+ *
+ * GIC ITS Peripheral Identification Register 2
+ */
+union bdk_gits_pidr2
+{
+ uint32_t u;
+ struct bdk_gits_pidr2_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+#else /* Word 0 - Little Endian */
+ uint32_t jepid : 3; /**< [ 2: 0](RO) JEP106 identification code \<6:4\>. Cavium code is 0x4C. */
+ uint32_t usesjepcode : 1; /**< [ 3: 3](RO) JEDEC assigned. */
+ uint32_t archrev : 4; /**< [ 7: 4](RO) Architectural revision:
+ 0x1 = GICv1.
+ 0x2 = GICV2.
+ 0x3 = GICv3.
+ 0x4 = GICv4.
+ 0x5-0xF = Reserved. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr2_s cn; */
+};
+typedef union bdk_gits_pidr2 bdk_gits_pidr2_t;
+
+#define BDK_GITS_PIDR2 BDK_GITS_PIDR2_FUNC()
+static inline uint64_t BDK_GITS_PIDR2_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR2_FUNC(void)
+{
+ return 0x80100002ffe8ll;
+}
+
+#define typedef_BDK_GITS_PIDR2 bdk_gits_pidr2_t
+#define bustype_BDK_GITS_PIDR2 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR2 "GITS_PIDR2"
+#define device_bar_BDK_GITS_PIDR2 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR2 0
+#define arguments_BDK_GITS_PIDR2 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr3
+ *
+ * GIC ITS Peripheral Identification Register 3
+ */
+union bdk_gits_pidr3
+{
+ uint32_t u;
+ struct bdk_gits_pidr3_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+#else /* Word 0 - Little Endian */
+ uint32_t cmod : 4; /**< [ 3: 0](RO) Customer modified. 0x1 = Overall product information should be consulted for
+ product, major and minor pass numbers. */
+ uint32_t revand : 4; /**< [ 7: 4](RO) Manufacturer revision number. For CNXXXX always 0x0. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr3_s cn; */
+};
+typedef union bdk_gits_pidr3 bdk_gits_pidr3_t;
+
+#define BDK_GITS_PIDR3 BDK_GITS_PIDR3_FUNC()
+static inline uint64_t BDK_GITS_PIDR3_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR3_FUNC(void)
+{
+ return 0x80100002ffecll;
+}
+
+#define typedef_BDK_GITS_PIDR3 bdk_gits_pidr3_t
+#define bustype_BDK_GITS_PIDR3 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR3 "GITS_PIDR3"
+#define device_bar_BDK_GITS_PIDR3 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR3 0
+#define arguments_BDK_GITS_PIDR3 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr4
+ *
+ * GIC ITS Peripheral Identification Register 1
+ */
+union bdk_gits_pidr4
+{
+ uint32_t u;
+ struct bdk_gits_pidr4_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_8_31 : 24;
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) 4 KB Count. This field is 0x4, indicating this is a 64 KB software-visible page. */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) JEP106 continuation code, least significant nibble. Indicates Cavium. */
+#else /* Word 0 - Little Endian */
+ uint32_t continuation_code : 4; /**< [ 3: 0](RO) JEP106 continuation code, least significant nibble. Indicates Cavium. */
+ uint32_t cnt_4k : 4; /**< [ 7: 4](RO) 4 KB Count. This field is 0x4, indicating this is a 64 KB software-visible page. */
+ uint32_t reserved_8_31 : 24;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr4_s cn; */
+};
+typedef union bdk_gits_pidr4 bdk_gits_pidr4_t;
+
+#define BDK_GITS_PIDR4 BDK_GITS_PIDR4_FUNC()
+static inline uint64_t BDK_GITS_PIDR4_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR4_FUNC(void)
+{
+ return 0x80100002ffd0ll;
+}
+
+#define typedef_BDK_GITS_PIDR4 bdk_gits_pidr4_t
+#define bustype_BDK_GITS_PIDR4 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR4 "GITS_PIDR4"
+#define device_bar_BDK_GITS_PIDR4 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR4 0
+#define arguments_BDK_GITS_PIDR4 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr5
+ *
+ * GIC ITS Peripheral Identification Register 5
+ */
+union bdk_gits_pidr5
+{
+ uint32_t u;
+ struct bdk_gits_pidr5_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr5_s cn; */
+};
+typedef union bdk_gits_pidr5 bdk_gits_pidr5_t;
+
+#define BDK_GITS_PIDR5 BDK_GITS_PIDR5_FUNC()
+static inline uint64_t BDK_GITS_PIDR5_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR5_FUNC(void)
+{
+ return 0x80100002ffd4ll;
+}
+
+#define typedef_BDK_GITS_PIDR5 bdk_gits_pidr5_t
+#define bustype_BDK_GITS_PIDR5 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR5 "GITS_PIDR5"
+#define device_bar_BDK_GITS_PIDR5 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR5 0
+#define arguments_BDK_GITS_PIDR5 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr6
+ *
+ * GIC ITS Peripheral Identification Register 6
+ */
+union bdk_gits_pidr6
+{
+ uint32_t u;
+ struct bdk_gits_pidr6_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr6_s cn; */
+};
+typedef union bdk_gits_pidr6 bdk_gits_pidr6_t;
+
+#define BDK_GITS_PIDR6 BDK_GITS_PIDR6_FUNC()
+static inline uint64_t BDK_GITS_PIDR6_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR6_FUNC(void)
+{
+ return 0x80100002ffd8ll;
+}
+
+#define typedef_BDK_GITS_PIDR6 bdk_gits_pidr6_t
+#define bustype_BDK_GITS_PIDR6 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR6 "GITS_PIDR6"
+#define device_bar_BDK_GITS_PIDR6 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR6 0
+#define arguments_BDK_GITS_PIDR6 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_pidr7
+ *
+ * GIC ITS Peripheral Identification Register 7
+ */
+union bdk_gits_pidr7
+{
+ uint32_t u;
+ struct bdk_gits_pidr7_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t reserved_0_31 : 32;
+#else /* Word 0 - Little Endian */
+ uint32_t reserved_0_31 : 32;
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_pidr7_s cn; */
+};
+typedef union bdk_gits_pidr7 bdk_gits_pidr7_t;
+
+#define BDK_GITS_PIDR7 BDK_GITS_PIDR7_FUNC()
+static inline uint64_t BDK_GITS_PIDR7_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_PIDR7_FUNC(void)
+{
+ return 0x80100002ffdcll;
+}
+
+#define typedef_BDK_GITS_PIDR7 bdk_gits_pidr7_t
+#define bustype_BDK_GITS_PIDR7 BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_PIDR7 "GITS_PIDR7"
+#define device_bar_BDK_GITS_PIDR7 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_PIDR7 0
+#define arguments_BDK_GITS_PIDR7 -1,-1,-1,-1
+
+/**
+ * Register (NCB32b) gits_translater
+ *
+ * GIC ITS Translate Register
+ * This 32-bit register is write-only. The value written to this register specifies an interrupt
+ * identifier to be translated for the requesting device.
+ * A unique device identifier is provided for each requesting device and this is presented to the
+ * ITS on writes to this register. This device identifier
+ * is used to index a device table that maps the incoming device identifier to an interrupt
+ * translation table for that device.
+ *
+ * Note that writes to this register with a device identifier that has not been mapped will be
+ * ignored.
+ *
+ * Note that writes to this register with a device identifier that exceed the supported device
+ * identifier size will be ignored.
+ *
+ * Note that this register is provided to enable the generation (and translation) of message
+ * based interrupts from devices (e.g. MSI or MSI-X writes from PCIe devices).
+ *
+ * The register is at the same offset as GICD_SETSPI_NSR in the distributor and GICR()_SETLPIR in
+ * the redistributor to allow virtualization of guest operating systems
+ * that directly program devices simply by ensuring the address programmed by the guest can be
+ * translated by an SMMU to target GITS_TRANSLATER.
+ */
+union bdk_gits_translater
+{
+ uint32_t u;
+ struct bdk_gits_translater_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint32_t int_id : 32; /**< [ 31: 0](WO/H) Interrupt ID. The ID of interrupt to be translated for the requesting device.
+
+ Note: the number of interrupt identifier bits is defined by
+ GITS_TYPER[IDBITS]. Nonzero identifier bits outside this range are ignored.
+
+ Note: 16-bit access to bits \<15:0\> of this register must be supported. When written by a
+ 16-bit transaction, bits \<31:16\> are written as zero. This register can not be accessed by
+ CPU. */
+#else /* Word 0 - Little Endian */
+ uint32_t int_id : 32; /**< [ 31: 0](WO/H) Interrupt ID. The ID of interrupt to be translated for the requesting device.
+
+ Note: the number of interrupt identifier bits is defined by
+ GITS_TYPER[IDBITS]. Nonzero identifier bits outside this range are ignored.
+
+ Note: 16-bit access to bits \<15:0\> of this register must be supported. When written by a
+ 16-bit transaction, bits \<31:16\> are written as zero. This register can not be accessed by
+ CPU. */
+#endif /* Word 0 - End */
+ } s;
+ /* struct bdk_gits_translater_s cn; */
+};
+typedef union bdk_gits_translater bdk_gits_translater_t;
+
+#define BDK_GITS_TRANSLATER BDK_GITS_TRANSLATER_FUNC()
+static inline uint64_t BDK_GITS_TRANSLATER_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_TRANSLATER_FUNC(void)
+{
+ return 0x801000030040ll;
+}
+
+#define typedef_BDK_GITS_TRANSLATER bdk_gits_translater_t
+#define bustype_BDK_GITS_TRANSLATER BDK_CSR_TYPE_NCB32b
+#define basename_BDK_GITS_TRANSLATER "GITS_TRANSLATER"
+#define device_bar_BDK_GITS_TRANSLATER 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_TRANSLATER 0
+#define arguments_BDK_GITS_TRANSLATER -1,-1,-1,-1
+
+/**
+ * Register (NCB) gits_typer
+ *
+ * GIC ITS Type Register
+ * This register describes features supported by the ITS.
+ */
+union bdk_gits_typer
+{
+ uint64_t u;
+ struct bdk_gits_typer_s
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_37_63 : 27;
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ Internal:
+ Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on,
+ software must ensure that any hardware collections
+ are re-mapped following power-on. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported. See section 4.9.16.
+ 0 = Target addresses correspond to linear processor numbers. See section 5.4.6.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-its device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t cct : 1; /**< [ 2: 2](RAZ) Memory backed collection is not supported. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+#else /* Word 0 - Little Endian */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t cct : 1; /**< [ 2: 2](RAZ) Memory backed collection is not supported. */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-its device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported. See section 4.9.16.
+ 0 = Target addresses correspond to linear processor numbers. See section 5.4.6.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ Internal:
+ Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on,
+ software must ensure that any hardware collections
+ are re-mapped following power-on. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t reserved_37_63 : 27;
+#endif /* Word 0 - End */
+ } s;
+ struct bdk_gits_typer_cn88xxp1
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_32_63 : 32;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ Internal:
+ Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on,
+ software must ensure that any hardware collections
+ are re-mapped following power-on. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported. See section 4.9.16.
+ 0 = Target addresses correspond to linear processor numbers. See section 5.4.6.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-its device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+#else /* Word 0 - Little Endian */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+ uint64_t reserved_1_2 : 2;
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-its device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported. See section 4.9.16.
+ 0 = Target addresses correspond to linear processor numbers. See section 5.4.6.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ Internal:
+ Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on,
+ software must ensure that any hardware collections
+ are re-mapped following power-on. */
+ uint64_t reserved_32_63 : 32;
+#endif /* Word 0 - End */
+ } cn88xxp1;
+ struct bdk_gits_typer_cn9
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_37_63 : 27;
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 24-bit device ID is defined
+ as {node_id[1:0], iob_id[1:0], ecam_id[3:0], stream_id[15:0]}. */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t cct : 1; /**< [ 2: 2](RAZ) Memory backed collection is not supported. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+#else /* Word 0 - Little Endian */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t cct : 1; /**< [ 2: 2](RAZ) Memory backed collection is not supported. */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 24-bit device ID is defined
+ as {node_id[1:0], iob_id[1:0], ecam_id[3:0], stream_id[15:0]}. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t reserved_37_63 : 27;
+#endif /* Word 0 - End */
+ } cn9;
+ struct bdk_gits_typer_cn81xx
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_37_63 : 27;
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-bit device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t reserved_2 : 1;
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+#else /* Word 0 - Little Endian */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and direct injection of Virtual LPIs supported.
+ This field is zero in GICv3 implementations. */
+ uint64_t reserved_2 : 1;
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-bit device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit collection ID, GITS_TYPER[CID_BITS] is RES0.
+ 1 = GITS_TYPER[CID_BITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit
+ reads as zero and number of collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t reserved_37_63 : 27;
+#endif /* Word 0 - End */
+ } cn81xx;
+ /* struct bdk_gits_typer_cn81xx cn83xx; */
+ struct bdk_gits_typer_cn88xxp2
+ {
+#if __BYTE_ORDER == __BIG_ENDIAN /* Word 0 - Big Endian */
+ uint64_t reserved_37_63 : 27;
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit Collection ID, GITS_TYPER[CIDbits] is RES0.
+ 1 = GITS_TYPER[CIDBITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit is
+ RAZ and number of Collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-bit device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t reserved_2 : 1;
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and Direct injection of Virtual LPIs supported. This field is
+ clear in GICv3 implementations. */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+#else /* Word 0 - Little Endian */
+ uint64_t physical : 1; /**< [ 0: 0](RO) Reserved, one. */
+ uint64_t vlpi : 1; /**< [ 1: 1](RAZ) Reserved. Virtual LPIs and Direct injection of Virtual LPIs supported. This field is
+ clear in GICv3 implementations. */
+ uint64_t reserved_2 : 1;
+ uint64_t distributed : 1; /**< [ 3: 3](RO) Distributed ITS implementation supported. */
+ uint64_t itte_size : 4; /**< [ 7: 4](RO) ITT entry size. Number of bytes per entry, minus one. The ITT entry size
+ implemented is four bytes (32-bit). */
+ uint64_t idbits : 5; /**< [ 12: 8](RO) The number of interrupt identifier bits supported, minus one. */
+ uint64_t devbits : 5; /**< [ 17: 13](RO) The number of device identifier bits supported, minus one. The 21-bit device ID is defined
+ as {node_id[1:0], iob_id[2:0], stream_id[15:0]}. */
+ uint64_t seis : 1; /**< [ 18: 18](RO) Locally generated system error interrupts supported. */
+ uint64_t pta : 1; /**< [ 19: 19](RO) Physical target addresses supported.
+ 0 = Target addresses correspond to linear processor numbers.
+ 1 = Target addresses correspond to the base physical address of re-distributors. */
+ uint64_t reserved_20_23 : 4;
+ uint64_t hcc : 8; /**< [ 31: 24](RO) Hardware collection count. The number of collections supported by the ITS without
+ provisioning of external memory. If this field is nonzero,
+ collections in the range zero to (HCC minus one) are solely maintained in storage within
+ the ITS.
+
+ NOTE: Note when this field is nonzero and an ITS is dynamically powered-off and back
+ on, software must ensure that any hardware collections are remapped following power-on.
+ A powered back on event is defined as cold reset is asserted and the deasserted from ITS
+ point of view. */
+ uint64_t cid_bits : 4; /**< [ 35: 32](RAZ) Number of collection ID bits. The number of bits of collection ID - 1.
+ When GITS_TYPER.CIL==0, this field is RES0. */
+ uint64_t cil : 1; /**< [ 36: 36](RAZ) 0 = ITS supports 16-bit Collection ID, GITS_TYPER[CIDbits] is RES0.
+ 1 = GITS_TYPER[CIDBITS] indicates supported collection ID size
+ CNXXXX implementations do not support collections in external memory, this bit is
+ RAZ and number of Collections supported is reported by GITS_TYPER[HCC]. */
+ uint64_t reserved_37_63 : 27;
+#endif /* Word 0 - End */
+ } cn88xxp2;
+};
+typedef union bdk_gits_typer bdk_gits_typer_t;
+
+#define BDK_GITS_TYPER BDK_GITS_TYPER_FUNC()
+static inline uint64_t BDK_GITS_TYPER_FUNC(void) __attribute__ ((pure, always_inline));
+static inline uint64_t BDK_GITS_TYPER_FUNC(void)
+{
+ return 0x801000020008ll;
+}
+
+#define typedef_BDK_GITS_TYPER bdk_gits_typer_t
+#define bustype_BDK_GITS_TYPER BDK_CSR_TYPE_NCB
+#define basename_BDK_GITS_TYPER "GITS_TYPER"
+#define device_bar_BDK_GITS_TYPER 0x2 /* PF_BAR2 */
+#define busnum_BDK_GITS_TYPER 0
+#define arguments_BDK_GITS_TYPER -1,-1,-1,-1
+
+#endif /* __BDK_CSRS_GIC_H__ */