The branch main has been updated by tsoome:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e3572eb654733a94e1e765fe9e95e0579981d851

commit e3572eb654733a94e1e765fe9e95e0579981d851
Author:     Aleksandr Rybalko <[email protected]>
AuthorDate: 2022-02-16 00:19:19 +0000
Commit:     Toomas Soome <[email protected]>
CommitDate: 2022-06-26 18:52:26 +0000

    Allocate event for DMC-620 and CMN-600 controllers PMU. Add events 
supported by DMC-620 and CMN-600 controllers PMU.
    
    Allocate event for DMC-620 and CMN-600 controllers PMU.
    Add events supported by DMC-620 and CMN-600 controllers PMU.
    
    Reviewed by: bz
    Sponsored By: ARM
    Sponsored By: Ampere Computing
    Differential Revision: https://reviews.freebsd.org/D35609
---
 lib/libpmc/libpmc.c            | 181 ++++++++++
 sys/arm64/include/cmn600_reg.h | 793 +++++++++++++++++++++++++++++++++++++++++
 sys/arm64/include/pmc_mdep.h   |  24 ++
 sys/dev/hwpmc/hwpmc_cmn600.h   |  54 +++
 sys/dev/hwpmc/hwpmc_dmc620.h   |  50 +++
 sys/dev/hwpmc/pmc_events.h     | 241 ++++++++++++-
 sys/dev/hwpmc/pmu_dmc620_reg.h |  88 +++++
 7 files changed, 1430 insertions(+), 1 deletion(-)

diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c
index d01f88bdaff7..491402276468 100644
--- a/lib/libpmc/libpmc.c
+++ b/lib/libpmc/libpmc.c
@@ -65,6 +65,10 @@ static int armv7_allocate_pmc(enum pmc_event _pe, char 
*_ctrspec,
 #if defined(__aarch64__)
 static int arm64_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
     struct pmc_op_pmcallocate *_pmc_config);
+static int cmn600_pmu_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
+    struct pmc_op_pmcallocate *_pmc_config);
+static int dmc620_pmu_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
+    struct pmc_op_pmcallocate *_pmc_config);
 #endif
 static int soft_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
     struct pmc_op_pmcallocate *_pmc_config);
@@ -134,6 +138,9 @@ PMC_CLASSDEP_TABLE(iaf, IAF);
 PMC_CLASSDEP_TABLE(k8, K8);
 PMC_CLASSDEP_TABLE(armv7, ARMV7);
 PMC_CLASSDEP_TABLE(armv8, ARMV8);
+PMC_CLASSDEP_TABLE(cmn600_pmu, CMN600_PMU);
+PMC_CLASSDEP_TABLE(dmc620_pmu_cd2, DMC620_PMU_CD2);
+PMC_CLASSDEP_TABLE(dmc620_pmu_c, DMC620_PMU_C);
 PMC_CLASSDEP_TABLE(ppc7450, PPC7450);
 PMC_CLASSDEP_TABLE(ppc970, PPC970);
 PMC_CLASSDEP_TABLE(e500, E500);
@@ -210,6 +217,9 @@ PMC_CLASS_TABLE_DESC(cortex_a9, ARMV7, cortex_a9, armv7);
 PMC_CLASS_TABLE_DESC(cortex_a53, ARMV8, cortex_a53, arm64);
 PMC_CLASS_TABLE_DESC(cortex_a57, ARMV8, cortex_a57, arm64);
 PMC_CLASS_TABLE_DESC(cortex_a76, ARMV8, cortex_a76, arm64);
+PMC_CLASS_TABLE_DESC(cmn600_pmu, CMN600_PMU, cmn600_pmu, cmn600_pmu);
+PMC_CLASS_TABLE_DESC(dmc620_pmu_cd2, DMC620_PMU_CD2, dmc620_pmu_cd2, 
dmc620_pmu);
+PMC_CLASS_TABLE_DESC(dmc620_pmu_c, DMC620_PMU_C, dmc620_pmu_c, dmc620_pmu);
 #endif
 #if defined(__powerpc__)
 PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc);
@@ -781,6 +791,146 @@ arm64_allocate_pmc(enum pmc_event pe, char *ctrspec,
 
        return (0);
 }
+
+static int
+cmn600_pmu_allocate_pmc(enum pmc_event pe, char *ctrspec,
+    struct pmc_op_pmcallocate *pmc_config)
+{
+       uint32_t nodeid, occupancy, xpport, xpchannel;
+       char *e, *p, *q;
+       unsigned int i;
+       char *xpport_names[] = { "East", "West", "North", "South", "devport0",
+           "devport1" };
+       char *xpchannel_names[] = { "REQ", "RSP", "SNP", "DAT" };
+
+       pmc_config->pm_caps |= (PMC_CAP_READ | PMC_CAP_WRITE);
+       pmc_config->pm_caps |= PMC_CAP_SYSTEM;
+       pmc_config->pm_md.pm_cmn600.pma_cmn600_config = 0;
+       /*
+        * CMN600 extra fields:
+        * * nodeid - node coordinates x[2-3],y[2-3],p[1],s[2]
+        *              width of x and y fields depend on matrix size.
+        * * occupancy - numeric value to select desired filter.
+        * * xpport - East, West, North, South, devport0, devport1 (or 0, 1, 
..., 5)
+        * * xpchannel - REQ, RSP, SNP, DAT (or 0, 1, 2, 3)
+        */
+
+       while ((p = strsep(&ctrspec, ",")) != NULL) {
+               if (KWPREFIXMATCH(p, "nodeid=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       nodeid = strtol(q, &e, 0);
+                       if (e == q || *e != '\0')
+                               return (-1);
+
+                       pmc_config->pm_md.pm_cmn600.pma_cmn600_nodeid |= nodeid;
+
+               } else if (KWPREFIXMATCH(p, "occupancy=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       occupancy = strtol(q, &e, 0);
+                       if (e == q || *e != '\0')
+                               return (-1);
+
+                       pmc_config->pm_md.pm_cmn600.pma_cmn600_occupancy = 
occupancy;
+               } else if (KWPREFIXMATCH(p, "xpport=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       xpport = strtol(q, &e, 0);
+                       if (e == q || *e != '\0') {
+                               for (i = 0; i < nitems(xpport_names); i++) {
+                                       if (strcasecmp(xpport_names[i], q) == 
0) {
+                                               xpport = i;
+                                               break;
+                                       }
+                               }
+                               if (i == nitems(xpport_names))
+                                       return (-1);
+                       }
+
+                       pmc_config->pm_md.pm_cmn600.pma_cmn600_config |= xpport 
<< 2;
+               } else if (KWPREFIXMATCH(p, "xpchannel=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       xpchannel = strtol(q, &e, 0);
+                       if (e == q || *e != '\0') {
+                               for (i = 0; i < nitems(xpchannel_names); i++) {
+                                       if (strcasecmp(xpchannel_names[i], q) 
== 0) {
+                                               xpchannel = i;
+                                               break;
+                                       }
+                               }
+                               if (i == nitems(xpchannel_names))
+                                       return (-1);
+                       }
+
+                       pmc_config->pm_md.pm_cmn600.pma_cmn600_config |= 
xpchannel << 5;
+               } else
+                       return (-1);
+       }
+
+       return (0);
+}
+
+static int
+dmc620_pmu_allocate_pmc(enum pmc_event pe, char *ctrspec,
+    struct pmc_op_pmcallocate *pmc_config)
+{
+       char            *e, *p, *q;
+       uint64_t        match, mask;
+       uint32_t        count;
+
+       pmc_config->pm_caps |= (PMC_CAP_READ | PMC_CAP_WRITE);
+       pmc_config->pm_caps |= PMC_CAP_SYSTEM;
+       pmc_config->pm_md.pm_dmc620.pm_dmc620_config = 0;
+
+       while ((p = strsep(&ctrspec, ",")) != NULL) {
+               if (KWPREFIXMATCH(p, "count=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       count = strtol(q, &e, 0);
+                       if (e == q || *e != '\0')
+                               return (-1);
+
+                       pmc_config->pm_caps |= PMC_CAP_THRESHOLD;
+                       pmc_config->pm_md.pm_dmc620.pm_dmc620_config |= count;
+
+               } else if (KWMATCH(p, "inv")) {
+                       pmc_config->pm_caps |= PMC_CAP_INVERT;
+               } else if (KWPREFIXMATCH(p, "match=")) {
+                       match = strtol(q, &e, 0);
+                       if (e == q || *e != '\0')
+                               return (-1);
+
+                       pmc_config->pm_caps |= PMC_CAP_QUALIFIER;
+                       pmc_config->pm_md.pm_dmc620.pm_dmc620_match = match;
+               } else if (KWPREFIXMATCH(p, "mask=")) {
+                       q = strchr(p, '=');
+                       if (*++q == '\0') /* skip '=' */
+                               return (-1);
+
+                       mask = strtol(q, &e, 0);
+                       if (e == q || *e != '\0')
+                               return (-1);
+
+                       pmc_config->pm_md.pm_dmc620.pm_dmc620_mask = mask;
+                       pmc_config->pm_caps |= PMC_CAP_QUALIFIER;
+               } else
+                       return (-1);
+       }
+
+       return (0);
+}
 #endif
 
 #if defined(__powerpc__)
@@ -1156,6 +1306,18 @@ pmc_event_names_of_class(enum pmc_class cl, const char 
***eventnames,
                        break;
                }
                break;
+       case PMC_CLASS_CMN600_PMU:
+               ev = cmn600_pmu_event_table;
+               count = PMC_EVENT_TABLE_SIZE(cmn600_pmu);
+               break;
+       case PMC_CLASS_DMC620_PMU_CD2:
+               ev = dmc620_pmu_cd2_event_table;
+               count = PMC_EVENT_TABLE_SIZE(dmc620_pmu_cd2);
+               break;
+       case PMC_CLASS_DMC620_PMU_C:
+               ev = dmc620_pmu_c_event_table;
+               count = PMC_EVENT_TABLE_SIZE(dmc620_pmu_c);
+               break;
        case PMC_CLASS_PPC7450:
                ev = ppc7450_event_table;
                count = PMC_EVENT_TABLE_SIZE(ppc7450);
@@ -1313,6 +1475,10 @@ pmc_init(void)
 
        /* Fill soft events information. */
        pmc_class_table[n++] = &soft_class_table_descr;
+
+       pmc_class_table[n++] = &cmn600_pmu_class_table_descr;
+       pmc_class_table[n++] = &dmc620_pmu_cd2_class_table_descr;
+       pmc_class_table[n++] = &dmc620_pmu_c_class_table_descr;
 #if defined(__amd64__) || defined(__i386__)
        if (cpu_info.pm_cputype != PMC_CPU_GENERIC)
                pmc_class_table[n++] = &tsc_class_table_descr;
@@ -1481,6 +1647,21 @@ _pmc_name_of_event(enum pmc_event pe, enum pmc_cputype 
cpu)
                default:        /* Unknown CPU type. */
                        break;
                }
+       } else if (pe >= PMC_EV_CMN600_PMU_FIRST &&
+           pe <= PMC_EV_CMN600_PMU_LAST) {
+               ev = cmn600_pmu_event_table;
+               evfence = cmn600_pmu_event_table +
+                   PMC_EVENT_TABLE_SIZE(cmn600_pmu);
+       } else if (pe >= PMC_EV_DMC620_PMU_CD2_FIRST &&
+           pe <= PMC_EV_DMC620_PMU_CD2_LAST) {
+               ev = dmc620_pmu_cd2_event_table;
+               evfence = dmc620_pmu_cd2_event_table +
+                   PMC_EVENT_TABLE_SIZE(dmc620_pmu_cd2);
+       } else if (pe >= PMC_EV_DMC620_PMU_C_FIRST &&
+           pe <= PMC_EV_DMC620_PMU_C_LAST) {
+               ev = dmc620_pmu_c_event_table;
+               evfence = dmc620_pmu_c_event_table +
+                   PMC_EVENT_TABLE_SIZE(dmc620_pmu_c);
        } else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) {
                ev = ppc7450_event_table;
                evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450);
diff --git a/sys/arm64/include/cmn600_reg.h b/sys/arm64/include/cmn600_reg.h
new file mode 100644
index 000000000000..ffc4634f2781
--- /dev/null
+++ b/sys/arm64/include/cmn600_reg.h
@@ -0,0 +1,793 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 ARM Ltd
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef        _MACHINE_CMN600_REG_H_
+#define        _MACHINE_CMN600_REG_H_
+
+#define        CMN600_COUNTERS_N               8
+#define        CMN600_UNIT_MAX                 4
+#define        CMN600_PMU_DEFAULT_UNITS_N      2
+#define        CMN600_COMMON_PMU_EVENT_SEL     0x2000  /* rw */
+#define                CMN600_COMMON_PMU_EVENT_SEL_OCC_SHIFT   32
+#define                CMN600_COMMON_PMU_EVENT_SEL_OCC_MASK    (0x7UL << 32)
+
+struct cmn600_pmc {
+       void    *arg;
+       int     domain;
+};
+
+int cmn600_pmc_nunits(void);
+int cmn600_pmc_getunit(int unit, void **arg, int *domain);
+
+int cmn600_pmu_intr_cb(void *arg, int (*handler)(struct trapframe *tf,
+    int unit, int i));
+
+int pmu_cmn600_alloc_localpmc(void *arg, int nodeid, int node_type,
+    int *local_counter);
+int pmu_cmn600_free_localpmc(void *arg, int nodeid, int node_type,
+    int local_counter);
+int pmu_cmn600_rev(void *arg);
+uint32_t pmu_cmn600_rd4(void *arg, int nodeid, int node_type, off_t reg);
+int pmu_cmn600_wr4(void *arg, int nodeid, int node_type, off_t reg,
+    uint32_t val);
+uint64_t pmu_cmn600_rd8(void *arg, int nodeid, int node_type, off_t reg);
+int pmu_cmn600_wr8(void *arg, int nodeid, int node_type, off_t reg,
+    uint64_t val);
+int pmu_cmn600_set8(void *arg, int nodeid, int node_type, off_t reg,
+    uint64_t val);
+int pmu_cmn600_clr8(void *arg, int nodeid, int node_type, off_t reg,
+    uint64_t val);
+int pmu_cmn600_md8(void *arg, int nodeid, int node_type, off_t reg,
+    uint64_t mask, uint64_t val);
+
+/* Configuration master registers */
+#define        POR_CFGM_NODE_INFO                      0x0000  /* ro */
+#define                POR_CFGM_NODE_INFO_LOGICAL_ID_MASK      0xffff00000000UL
+#define                POR_CFGM_NODE_INFO_LOGICAL_ID_SHIFT     32
+#define                POR_CFGM_NODE_INFO_NODE_ID_MASK         0xffff0000
+#define                POR_CFGM_NODE_INFO_NODE_ID_SHIFT        16
+#define                POR_CFGM_NODE_INFO_NODE_TYPE_MASK       0xffff
+#define                POR_CFGM_NODE_INFO_NODE_TYPE_SHIFT      0
+
+#define        NODE_TYPE_INVALID       0x000
+#define        NODE_TYPE_DVM           0x001
+#define        NODE_TYPE_CFG           0x002
+#define        NODE_TYPE_DTC           0x003
+#define        NODE_TYPE_HN_I          0x004
+#define        NODE_TYPE_HN_F          0x005
+#define        NODE_TYPE_XP            0x006
+#define        NODE_TYPE_SBSX          0x007
+#define        NODE_TYPE_RN_I          0x00A
+#define        NODE_TYPE_RN_D          0x00D
+#define        NODE_TYPE_RN_SAM        0x00F
+#define        NODE_TYPE_CXRA          0x100
+#define        NODE_TYPE_CXHA          0x101
+#define        NODE_TYPE_CXLA          0x102
+
+#define        POR_CFGM_PERIPH_ID_0_PERIPH_ID_1        0x0008  /* ro */
+#define        POR_CFGM_PERIPH_ID_2_PERIPH_ID_3        0x0010  /* ro */
+#define                POR_CFGM_PERIPH_ID_2_REV_SHIFT                  4
+#define                POR_CFGM_PERIPH_ID_2_REV_MASK                   0xf0
+#define                POR_CFGM_PERIPH_ID_2_REV_R1P0                   0
+#define                POR_CFGM_PERIPH_ID_2_REV_R1P1                   1
+#define                POR_CFGM_PERIPH_ID_2_REV_R1P2                   2
+#define                POR_CFGM_PERIPH_ID_2_REV_R1P3                   3
+#define                POR_CFGM_PERIPH_ID_2_REV_R2P0                   4
+#define        POR_CFGM_PERIPH_ID_4_PERIPH_ID_5        0x0018  /* ro */
+#define        POR_CFGM_PERIPH_ID_6_PERIPH_ID_7        0x0020  /* ro */
+#define        POR_CFGM_PERIPH_ID_32(x)                (0x0008 + ((x) * 4)) /* 
ro 32 */
+#define        POR_CFGM_COMPONENT_ID_0_COMPONENT_ID_1  0x0028  /* ro */
+#define        POR_CFGM_COMPONENT_ID_2_COMPONENT_ID_3  0x0030  /* ro */
+#define        POR_CFGM_CHILD_INFO                     0x0080  /* ro */
+#define                POR_CFGM_CHILD_INFO_CHILD_PTR_OFFSET_MASK       
0xffff0000
+#define                POR_CFGM_CHILD_INFO_CHILD_PTR_OFFSET_SHIFT      16
+#define                POR_CFGM_CHILD_INFO_CHILD_COUNT_MASK            
0x0000ffff
+#define                POR_CFGM_CHILD_INFO_CHILD_COUNT_SHIFT           0
+#define        POR_CFGM_SECURE_ACCESS                  0x0980  /* rw */
+#define        POR_CFGM_ERRGSR0                        0x3000  /* ro */
+#define        POR_CFGM_ERRGSR1                        0x3008  /* ro */
+#define        POR_CFGM_ERRGSR2                        0x3010  /* ro */
+#define        POR_CFGM_ERRGSR3                        0x3018  /* ro */
+#define        POR_CFGM_ERRGSR4                        0x3020  /* ro */
+#define        POR_CFGM_ERRGSR5                        0x3080  /* ro */
+#define        POR_CFGM_ERRGSR6                        0x3088  /* ro */
+#define        POR_CFGM_ERRGSR7                        0x3090  /* ro */
+#define        POR_CFGM_ERRGSR8                        0x3098  /* ro */
+#define        POR_CFGM_ERRGSR9                        0x30a0  /* ro */
+#define        POR_CFGM_ERRGSR(x)                      (0x3000 + ((x) * 8)) /* 
ro */
+#define        POR_CFGM_ERRGSR0_ns                     0x3100  /* ro */
+#define        POR_CFGM_ERRGSR1_ns                     0x3108  /* ro */
+#define        POR_CFGM_ERRGSR2_ns                     0x3110  /* ro */
+#define        POR_CFGM_ERRGSR3_ns                     0x3118  /* ro */
+#define        POR_CFGM_ERRGSR4_ns                     0x3120  /* ro */
+#define        POR_CFGM_ERRGSR5_ns                     0x3180  /* ro */
+#define        POR_CFGM_ERRGSR6_ns                     0x3188  /* ro */
+#define        POR_CFGM_ERRGSR7_ns                     0x3190  /* ro */
+#define        POR_CFGM_ERRGSR8_ns                     0x3198  /* ro */
+#define        POR_CFGM_ERRGSR9_ns                     0x31a0  /* ro */
+#define        POR_CFGM_ERRGSR_ns(x)                   (0x3100 + ((x) * 8)) /* 
ro */
+#define        POR_CFGM_ERRDEVAFF                      0x3fa8  /* ro */
+#define        POR_CFGM_ERRDEVARCH                     0x3fb8  /* ro */
+#define        POR_CFGM_ERRIDR                         0x3fc8  /* ro */
+#define        POR_CFGM_ERRPIDR45                      0x3fd0  /* ro */
+#define        POR_CFGM_ERRPIDR67                      0x3fd8  /* ro */
+#define        POR_CFGM_ERRPIDR01                      0x3fe0  /* ro */
+#define        POR_CFGM_ERRPIDR23                      0x3fe8  /* ro */
+#define        POR_CFGM_ERRCIDR01                      0x3ff0  /* ro */
+#define        POR_CFGM_ERRCIDR23                      0x3ff8  /* ro */
+#define        POR_INFO_GLOBAL                         0x0900  /* ro */
+#define                POR_INFO_GLOBAL_CHIC_MODE_EN                    (1UL << 
49) /* CHI-C mode enable */
+#define                POR_INFO_GLOBAL_R2_ENABLE                       (1UL << 
48) /* CMN R2 feature enable */
+#define                POR_INFO_GLOBAL_RNSAM_NUM_ADD_HASHED_TGT_SHIFT  36 /* 
Number of additional hashed target ID's supported by the RN SAM, beyond the 
local HNF count */
+#define                POR_INFO_GLOBAL_RNSAM_NUM_ADD_HASHED_TGT_MASK   (0x3fUL 
<< 36)
+#define                POR_INFO_GLOBAL_NUM_REMOTE_RNF_SHIFT            28 /* 
Number of remote RN-F devices in the system when the CML feature is enabled */
+#define                POR_INFO_GLOBAL_NUM_REMOTE_RNF_MASK             (0xffUL 
<< 28)
+#define                POR_INFO_GLOBAL_FLIT_PARITY_EN                  (1 << 
25) /* Indicates whether parity checking is enabled in the transport layer on 
all flits sent on the interconnect */
+#define                POR_INFO_GLOBAL_DATACHECK_EN                    (1 << 
24) /* Indicates whether datacheck feature is enabled for CHI DAT flit */
+#define                POR_INFO_GLOBAL_PHYSICAL_ADDRESS_WIDTH_SHIFT    16 /* 
Physical address width */
+#define                POR_INFO_GLOBAL_PHYSICAL_ADDRESS_WIDTH_MASK     (0xff 
<< 16)
+#define                POR_INFO_GLOBAL_CHI_REQ_ADDR_WIDTH_SHIFT        8 /* 
REQ address width */
+#define                POR_INFO_GLOBAL_CHI_REQ_ADDR_WIDTH_MASK         (0xff 
<< 8)
+#define                POR_INFO_GLOBAL_CHI_REQ_RSVDC_WIDTH_SHIFT       0 /* 
RSVDC field width in CHI REQ flit */
+#define                POR_INFO_GLOBAL_CHI_REQ_RSVDC_WIDTH_MASK        0xff
+
+#define        POR_PPU_INT_ENABLE                      0x1000  /* rw */
+#define        POR_PPU_INT_STATUS                      0x1008  /* w1c */
+#define        POR_PPU_QACTIVE_HYST                    0x1010  /* rw */
+#define        POR_CFGM_CHILD_POINTER_0                0x0100  /* ro */
+#define        POR_CFGM_CHILD_POINTER(x)       (POR_CFGM_CHILD_POINTER_0 + 
((x) * 8))
+#define                POR_CFGM_CHILD_POINTER_EXT      (1 << 31)
+#define                POR_CFGM_CHILD_POINTER_BASE_MASK 0x0fffffffUL
+
+/* DN registers */
+#define        POR_DN_NODE_INFO                        0x0000  /* ro */
+#define        POR_DN_CHILD_INFO                       0x0080  /* ro */
+#define        POR_DN_BUILD_INFO                       0x0900  /* ro */
+#define        POR_DN_SECURE_REGISTER_GROUPS_OVERRIDE  0x0980  /* rw */
+#define        POR_DN_AUX_CTL                          0x0a00  /* rw */
+#define        POR_DN_VMF0_CTRL                        0x0c00  /* rw */
+#define        POR_DN_VMF0_RNF0                        0x0c08  /* rw */
+#define        POR_DN_VMF0_RND                         0x0c10  /* rw */
+#define        POR_DN_VMF0_CXRA                        0x0c18  /* rw */
+#define        POR_DN_VMF1_CTRL                        0x0c20  /* rw */
+#define        POR_DN_VMF1_RNF0                        0x0c28  /* rw */
+#define        POR_DN_VMF1_RND                         0x0c30  /* rw */
+#define        POR_DN_VMF1_CXRA                        0x0c38  /* rw */
+#define        POR_DN_VMF2_CTRL                        0x0c40  /* rw */
+#define        POR_DN_VMF2_RNF0                        0x0c48  /* rw */
+#define        POR_DN_VMF2_RND                         0x0c50  /* rw */
+#define        POR_DN_VMF2_CXRA                        0x0c58  /* rw */
+#define        POR_DN_VMF3_CTRL                        0x0c60  /* rw */
+#define        POR_DN_VMF3_RNF0                        0x0c68  /* rw */
+#define        POR_DN_VMF3_RND                         0x0c70  /* rw */
+#define        POR_DN_VMF3_CXRA                        0x0c78  /* rw */
+#define        POR_DN_VMF4_CTRL                        0x0c80  /* rw */
+#define        POR_DN_VMF4_RNF0                        0x0c88  /* rw */
+#define        POR_DN_VMF4_RND                         0x0c90  /* rw */
+#define        POR_DN_VMF4_CXRA                        0x0c98  /* rw */
+#define        POR_DN_VMF5_CTRL                        0x0ca0  /* rw */
+#define        POR_DN_VMF5_RNF0                        0x0ca8  /* rw */
+#define        POR_DN_VMF5_RND                         0x0cb0  /* rw */
+#define        POR_DN_VMF5_CXRA                        0x0cb8  /* rw */
+#define        POR_DN_VMF6_CTRL                        0x0cc0  /* rw */
+#define        POR_DN_VMF6_RNF0                        0x0cc8  /* rw */
+#define        POR_DN_VMF6_RND                         0x0cd0  /* rw */
+#define        POR_DN_VMF6_CXRA                        0x0cd8  /* rw */
+#define        POR_DN_VMF7_CTRL                        0x0ce0  /* rw */
+#define        POR_DN_VMF7_RNF0                        0x0ce8  /* rw */
+#define        POR_DN_VMF7_RND                         0x0cf0  /* rw */
+#define        POR_DN_VMF7_CXRA                        0x0cf8  /* rw */
+#define        POR_DN_VMF8_CTRL                        0x0d00  /* rw */
+#define        POR_DN_VMF8_RNF0                        0x0d08  /* rw */
+#define        POR_DN_VMF8_RND                         0x0d10  /* rw */
+#define        POR_DN_VMF8_CXRA                        0x0d18  /* rw */
+#define        POR_DN_VMF9_CTRL                        0x0d20  /* rw */
+#define        POR_DN_VMF9_RNF0                        0x0d28  /* rw */
+#define        POR_DN_VMF9_RND                         0x0d30  /* rw */
+#define        POR_DN_VMF9_CXRA                        0x0d38  /* rw */
+#define        POR_DN_VMF10_CTRL                       0x0d40  /* rw */
+#define        POR_DN_VMF10_RNF0                       0x0d48  /* rw */
+#define        POR_DN_VMF10_RND                        0x0d50  /* rw */
+#define        POR_DN_VMF10_CXRA                       0x0d58  /* rw */
+#define        POR_DN_VMF11_CTRL                       0x0d60  /* rw */
+#define        POR_DN_VMF11_RNF0                       0x0d68  /* rw */
+#define        POR_DN_VMF11_RND                        0x0d70  /* rw */
+#define        POR_DN_VMF11_CXRA                       0x0d78  /* rw */
+#define        POR_DN_VMF12_CTRL                       0x0d80  /* rw */
+#define        POR_DN_VMF12_RNF0                       0x0d88  /* rw */
+#define        POR_DN_VMF12_RND                        0x0d90  /* rw */
+#define        POR_DN_VMF12_CXRA                       0x0d98  /* rw */
+#define        POR_DN_VMF13_CTRL                       0x0da0  /* rw */
+#define        POR_DN_VMF13_RNF0                       0x0da8  /* rw */
+#define        POR_DN_VMF13_RND                        0x0db0  /* rw */
+#define        POR_DN_VMF13_CXRA                       0x0db8  /* rw */
+#define        POR_DN_VMF14_CTRL                       0x0dc0  /* rw */
+#define        POR_DN_VMF14_RNF0                       0x0dc8  /* rw */
+#define        POR_DN_VMF14_RND                        0x0dd0  /* rw */
+#define        POR_DN_VMF14_CXRA                       0x0dd8  /* rw */
+#define        POR_DN_VMF15_CTRL                       0x0de0  /* rw */
+#define        POR_DN_VMF15_RNF0                       0x0de8  /* rw */
+#define        POR_DN_VMF15_RND                        0x0df0  /* rw */
+#define        POR_DN_VMF15_CXRA                       0x0df8  /* rw */
+#define        POR_DN_PMU_EVENT_SEL                    0x2000  /* rw */
+#define                POR_DN_PMU_EVENT_SEL_OCCUP1_ID_SHIFT    32
+#define                POR_DN_PMU_EVENT_SEL_OCCUP1_ID_MASK     (0xf << 32)
+#define                POR_DN_PMU_EVENT_SEL_OCCUP1_ID_ALL              0
+#define                POR_DN_PMU_EVENT_SEL_OCCUP1_ID_DVM_OPS          1
+#define                POR_DN_PMU_EVENT_SEL_OCCUP1_ID_DVM_SYNCS        2
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID3_SHIFT    24
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID3_MASK     (0x3f << 24)
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID2_SHIFT    16
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID2_MASK     (0x3f << 16)
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID1_SHIFT    8
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID1_MASK     (0x3f << 8)
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID0_SHIFT    0
+#define                POR_DN_PMU_EVENT_SEL_EVENT_ID0_MASK     0x3f
+
+/* Debug and trace register */
+#define        POR_DT_NODE_INFO                        0x0000  /* ro */
+#define        POR_DT_CHILD_INFO                       0x0080  /* ro */
+#define        POR_DT_SECURE_ACCESS                    0x0980  /* rw */
+#define        POR_DT_DTC_CTL                          0x0a00  /* rw */
+#define                POR_DT_DTC_CTL_DT_EN                    (1 << 0)
+#define        POR_DT_TRIGGER_STATUS                   0x0a10  /* ro */
+#define        POR_DT_TRIGGER_STATUS_CLR               0x0a20  /* wo */
+#define        POR_DT_TRACE_CONTROL                    0x0a30  /* rw */
+#define        POR_DT_TRACEID                          0x0a48  /* rw */
+#define        POR_DT_PMEVCNTAB                        0x2000  /* rw */
+#define        POR_DT_PMEVCNTCD                        0x2010  /* rw */
+#define        POR_DT_PMEVCNTEF                        0x2020  /* rw */
+#define        POR_DT_PMEVCNTGH                        0x2030  /* rw */
+#define        POR_DT_PMEVCNT(x)                       (0x2000 + ((x) * 0x10))
+#define        POR_DT_PMCCNTR                          0x2040  /* rw */
+#define        POR_DT_PMEVCNTSRAB                      0x2050  /* rw */
+#define        POR_DT_PMEVCNTSRCD                      0x2060  /* rw */
+#define        POR_DT_PMEVCNTSREF                      0x2070  /* rw */
+#define        POR_DT_PMEVCNTSRGH                      0x2080  /* rw */
+#define        POR_DT_PMCCNTRSR                        0x2090  /* rw */
+#define        POR_DT_PMCR                             0x2100  /* rw */
+#define                POR_DT_PMCR_OVFL_INTR_EN                (1 << 6)
+#define                POR_DT_PMCR_CNTR_RST                    (1 << 5)
+#define                POR_DT_PMCR_CNTCFG_SHIFT                1
+#define                POR_DT_PMCR_CNTCFG_MASK                 (0xf << 
POR_DT_PMCR_CNTCFG_SHIFT)
+#define                POR_DT_PMCR_PMU_EN                      (1 << 0)
+#define        POR_DT_PMOVSR                           0x2118  /* ro */
+#define        POR_DT_PMOVSR_CLR                       0x2120  /* wo */
+#define                POR_DT_PMOVSR_EVENT_COUNTERS    0xffUL
+#define                POR_DT_PMOVSR_CYCLE_COUNTER             0x100UL
+#define                POR_DT_PMOVSR_ALL                       \
+    (POR_DT_PMOVSR_EVENT_COUNTERS | POR_DT_PMOVSR_CYCLE_COUNTER)
+#define        POR_DT_PMSSR                            0x2128  /* ro */
+#define        POR_DT_PMSRR                            0x2130  /* wo */
+#define        POR_DT_CLAIM                            0x2da0  /* rw */
+#define        POR_DT_DEVAFF                           0x2da8  /* ro */
+#define        POR_DT_LSR                              0x2db0  /* ro */
+#define        POR_DT_AUTHSTATUS_DEVARCH               0x2db8  /* ro */
+#define        POR_DT_DEVID                            0x2dc0  /* ro */
+#define        POR_DT_DEVTYPE                          0x2dc8  /* ro */
+#define        POR_DT_PIDR45                           0x2dd0  /* ro */
+#define        POR_DT_PIDR67                           0x2dd8  /* ro */
+#define        POR_DT_PIDR01                           0x2de0  /* ro */
+#define        POR_DT_PIDR23                           0x2de8  /* ro */
+#define        POR_DT_CIDR01                           0x2df0  /* ro */
+#define        POR_DT_CIDR23                           0x2df8  /* ro */
+
+/* HN-F registers */
+#define        POR_HNF_NODE_INFO                       0x0000  /* ro */
+#define        POR_HNF_CHILD_INFO                      0x0080  /* ro */
+#define        POR_HNF_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980  /* rw */
+#define        POR_HNF_UNIT_INFO                       0x0900  /* ro */
+#define        POR_HNF_CFG_CTL                         0x0a00  /* rw */
+#define        POR_HNF_AUX_CTL                         0x0a08  /* rw */
+#define        POR_HNF_R2_AUX_CTL                      0x0a10  /* rw */
+#define        POR_HNF_PPU_PWPR                        0x1000  /* rw */
+#define        POR_HNF_PPU_PWSR                        0x1008  /* ro */
+#define        POR_HNF_PPU_MISR                        0x1014  /* ro */
+#define        POR_HNF_PPU_IDR0                        0x1fb0  /* ro */
+#define        POR_HNF_PPU_IDR1                        0x1fb4  /* ro */
+#define        POR_HNF_PPU_IIDR                        0x1fc8  /* ro */
+#define        POR_HNF_PPU_AIDR                        0x1fcc  /* ro */
+#define        POR_HNF_PPU_DYN_RET_THRESHOLD           0x1100  /* rw */
+#define        POR_HNF_QOS_BAND                        0x0a80  /* ro */
+#define        POR_HNF_QOS_RESERVATION                 0x0a88  /* rw */
+#define        POR_HNF_RN_STARVATION                   0x0a90  /* rw */
+#define        POR_HNF_ERRFR                           0x3000  /* ro */
+#define        POR_HNF_ERRCTLR                         0x3008  /* rw */
+#define        POR_HNF_ERRSTATUS                       0x3010  /* w1c */
+#define        POR_HNF_ERRADDR                         0x3018  /* rw */
+#define        POR_HNF_ERRMISC                         0x3020  /* rw */
+#define        POR_HNF_ERR_INJ                         0x3030  /* rw */
+#define        POR_HNF_BYTE_PAR_ERR_INJ                0x3038  /* wo */
+#define        POR_HNF_ERRFR_NS                        0x3100  /* ro */
+#define        POR_HNF_ERRCTLR_NS                      0x3108  /* rw */
+#define        POR_HNF_ERRSTATUS_NS                    0x3110  /* w1c */
+#define        POR_HNF_ERRADDR_NS                      0x3118  /* rw */
+#define        POR_HNF_ERRMISC_NS                      0x3120  /* rw */
+#define        POR_HNF_SLC_LOCK_WAYS                   0x0c00  /* rw */
+#define        POR_HNF_SLC_LOCK_BASE0                  0x0c08  /* rw */
+#define        POR_HNF_SLC_LOCK_BASE1                  0x0c10  /* rw */
+#define        POR_HNF_SLC_LOCK_BASE2                  0x0c18  /* rw */
+#define        POR_HNF_SLC_LOCK_BASE3                  0x0c20  /* rw */
+#define        POR_HNF_RNF_REGION_VEC1                 0x0c28  /* rw */
+#define        POR_HNF_RNI_REGION_VEC                  0x0c30  /* rw */
+#define        POR_HNF_RNF_REGION_VEC                  0x0c38  /* rw */
+#define        POR_HNF_RND_REGION_VEC                  0x0c40  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION0_RNF_VEC       0x0c48  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION1_RNF_VEC       0x0c50  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION2_RNF_VEC       0x0c58  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION3_RNF_VEC       0x0c60  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION0_RNF_VEC1      0x0cb0  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION1_RNF_VEC1      0x0cb8  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION2_RNF_VEC1      0x0cc0  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION3_RNF_VEC1      0x0cc8  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION0_RNI_VEC       0x0c68  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION1_RNI_VEC       0x0c70  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION2_RNI_VEC       0x0c78  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION3_RNI_VEC       0x0c80  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION0_RND_VEC       0x0c88  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION1_RND_VEC       0x0c90  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION2_RND_VEC       0x0c98  /* rw */
+#define        POR_HNF_SLCWAY_PARTITION3_RND_VEC       0x0ca0  /* rw */
+#define        POR_HNF_RN_REGION_LOCK                  0x0ca8  /* rw */
+#define        POR_HNF_SAM_CONTROL                     0x0d00  /* rw */
+#define        POR_HNF_SAM_MEMREGION0                  0x0d08  /* rw */
+#define        POR_HNF_SAM_MEMREGION1                  0x0d10  /* rw */
+#define        POR_HNF_SAM_SN_PROPERTIES               0x0d18  /* rw */
+#define        POR_HNF_SAM_6SN_NODEID                  0x0d20  /* rw */
+#define        POR_HNF_RN_PHYS_ID(x)                   (0x0d28 + 8 * (x)) /* 
rw */
+#define        POR_HNF_RN_PHYS_ID63                    0x0f90  /* rw */
+#define        POR_HNF_SF_CXG_BLOCKED_WAYS             0x0f00  /* rw */
+#define        POR_HNF_CML_PORT_AGGR_GRP0_ADD_MASK     0x0f10  /* rw */
+#define        POR_HNF_CML_PORT_AGGR_GRP1_ADD_MASK     0x0f18  /* rw */
+#define        POR_HNF_CML_PORT_AGGR_GRP0_REG          0x0f28  /* rw */
+#define        POR_HNF_CML_PORT_AGGR_GRP1_REG          0x0f30  /* rw */
+#define        HN_SAM_HASH_ADDR_MASK_REG               0x0f40  /* rw */
+#define        HN_SAM_REGION_CMP_ADDR_MASK_REG         0x0f48  /* rw */
+#define        POR_HNF_ABF_LO_ADDR                     0x0f50  /* rw */
+#define        POR_HNF_ABF_HI_ADDR                     0x0f58  /* rw */
+#define        POR_HNF_ABF_PR                          0x0f60  /* rw */
+#define        POR_HNF_ABF_SR                          0x0f68  /* ro */
+#define        POR_HNF_LDID_MAP_TABLE_REG0             0x0f98  /* rw */
+#define        POR_HNF_LDID_MAP_TABLE_REG1             0x0fa0  /* rw */
+#define        POR_HNF_LDID_MAP_TABLE_REG2             0x0fa8  /* rw */
+#define        POR_HNF_LDID_MAP_TABLE_REG3             0x0fb0  /* rw */
+#define        POR_HNF_CFG_SLCSF_DBGRD                 0x0b80  /* wo */
+#define        POR_HNF_SLC_CACHE_ACCESS_SLC_TAG        0x0b88  /* ro */
+#define        POR_HNF_SLC_CACHE_ACCESS_SLC_DATA       0x0b90  /* ro */
+#define        POR_HNF_SLC_CACHE_ACCESS_SF_TAG         0x0b98  /* ro */
+#define        POR_HNF_SLC_CACHE_ACCESS_SF_TAG1        0x0ba0  /* ro */
+#define        POR_HNF_SLC_CACHE_ACCESS_SF_TAG2        0x0ba8  /* ro */
+#define        POR_HNF_PMU_EVENT_SEL                   0x2000  /* rw */
+
+/* HN-I registers */
+#define        POR_HNI_NODE_INFO                       0x0000  /* ro */
+#define        POR_HNI_CHILD_INFO                      0x0080  /* ro */
+#define        POR_HNI_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980  /* rw */
+#define        POR_HNI_UNIT_INFO                       0x0900  /* ro */
+#define        POR_HNI_SAM_ADDRREGION0_CFG             0x0c00  /* rw */
+#define        POR_HNI_SAM_ADDRREGION1_CFG             0x0c08  /* rw */
+#define        POR_HNI_SAM_ADDRREGION2_CFG             0x0c10  /* rw */
+#define        POR_HNI_SAM_ADDRREGION3_CFG             0x0c18  /* rw */
+#define        POR_HNI_CFG_CTL                         0x0a00  /* rw */
+#define        POR_HNI_AUX_CTL                         0x0a08  /* rw */
+#define        POR_HNI_ERRFR                           0x3000  /* ro */
+#define        POR_HNI_ERRCTLR                         0x3008  /* rw */
+#define        POR_HNI_ERRSTATUS                       0x3010  /* w1c */
+#define        POR_HNI_ERRADDR                         0x3018  /* rw */
+#define        POR_HNI_ERRMISC                         0x3020  /* rw */
+#define        POR_HNI_ERRFR_NS                        0x3100  /* ro */
+#define        POR_HNI_ERRCTLR_NS                      0x3108  /* rw */
+#define        POR_HNI_ERRSTATUS_NS                    0x3110  /* w1c */
+#define        POR_HNI_ERRADDR_NS                      0x3118  /* rw */
+#define        POR_HNI_ERRMISC_NS                      0x3120  /* rw */
+#define        POR_HNI_PMU_EVENT_SEL                   0x2000  /* rw */
+
+/* XP registers */
+#define        POR_MXP_NODE_INFO                       0x0000  /* ro */
+#define        POR_MXP_DEVICE_PORT_CONNECT_INFO_P0     0x0008  /* ro */
+#define        POR_MXP_DEVICE_PORT_CONNECT_INFO_P1     0x0010  /* ro */
+#define        POR_MXP_MESH_PORT_CONNECT_INFO_EAST     0x0018  /* ro */
+#define        POR_MXP_MESH_PORT_CONNECT_INFO_NORTH    0x0020  /* ro */
+#define        POR_MXP_CHILD_INFO                      0x0080  /* ro */
+#define        POR_MXP_CHILD_POINTER_0                 0x0100  /* ro */
+#define        POR_MXP_CHILD_POINTER_1                 0x0108  /* ro */
+#define        POR_MXP_CHILD_POINTER_2                 0x0110  /* ro */
+#define        POR_MXP_CHILD_POINTER_3                 0x0118  /* ro */
+#define        POR_MXP_CHILD_POINTER_4                 0x0120  /* ro */
+#define        POR_MXP_CHILD_POINTER_5                 0x0128  /* ro */
+#define        POR_MXP_CHILD_POINTER_6                 0x0130  /* ro */
+#define        POR_MXP_CHILD_POINTER_7                 0x0138  /* ro */
+#define        POR_MXP_CHILD_POINTER_8                 0x0140  /* ro */
+#define        POR_MXP_CHILD_POINTER_9                 0x0148  /* ro */
+#define        POR_MXP_CHILD_POINTER_10                0x0150  /* ro */
+#define        POR_MXP_CHILD_POINTER_11                0x0158  /* ro */
+#define        POR_MXP_CHILD_POINTER_12                0x0160  /* ro */
+#define        POR_MXP_CHILD_POINTER_13                0x0168  /* ro */
+#define        POR_MXP_CHILD_POINTER_14                0x0170  /* ro */
+#define        POR_MXP_CHILD_POINTER_15                0x0178  /* ro */
+#define        POR_MXP_P0_INFO                         0x0900  /* ro */
+#define        POR_MXP_P1_INFO                         0x0908  /* ro */
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_I                   0x01
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_D                   0x02
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_F_CHIB              0x04
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_F_CHIB_ESAM         0x05
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_F_CHIA              0x06
+#define                POR_MXP_PX_INFO_DEV_TYPE_RN_F_CHIA_ESAM         0x07
+#define                POR_MXP_PX_INFO_DEV_TYPE_HN_T                   0x08
+#define                POR_MXP_PX_INFO_DEV_TYPE_HN_I                   0x09
+#define                POR_MXP_PX_INFO_DEV_TYPE_HN_D                   0x0a
+#define                POR_MXP_PX_INFO_DEV_TYPE_SN_F                   0x0c
+#define                POR_MXP_PX_INFO_DEV_TYPE_SBSX                   0x0d
+#define                POR_MXP_PX_INFO_DEV_TYPE_HN_F                   0x0e
+#define                POR_MXP_PX_INFO_DEV_TYPE_CXHA                   0x11
+#define                POR_MXP_PX_INFO_DEV_TYPE_CXRA                   0x12
+#define                POR_MXP_PX_INFO_DEV_TYPE_CXRH                   0x13
+
+#define        POR_MXP_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980  /* rw */
+#define        POR_MXP_AUX_CTL                         0x0a00  /* rw */
+#define        POR_MXP_P0_QOS_CONTROL                  0x0a80  /* rw */
+#define        POR_MXP_P0_QOS_LAT_TGT                  0x0a88  /* rw */
+#define        POR_MXP_P0_QOS_LAT_SCALE                0x0a90  /* rw */
+#define        POR_MXP_P0_QOS_LAT_RANGE                0x0a98  /* rw */
+#define        POR_MXP_P1_QOS_CONTROL                  0x0aa0  /* rw */
+#define        POR_MXP_P1_QOS_LAT_TGT                  0x0aa8  /* rw */
+#define        POR_MXP_P1_QOS_LAT_SCALE                0x0ab0  /* rw */
+#define        POR_MXP_P1_QOS_LAT_RANGE                0x0ab8  /* rw */
+#define        POR_MXP_PMU_EVENT_SEL                   0x2000  /* rw */
+
+#define        POR_MXP_ERRFR                           0x3000  /* ro */
+#define        POR_MXP_ERRCTLR                         0x3008  /* rw */
+#define        POR_MXP_ERRSTATUS                       0x3010  /* w1c */
+#define        POR_MXP_ERRMISC                         0x3028  /* rw */
+#define        POR_MXP_P0_BYTE_PAR_ERR_INJ             0x3030  /* wo */
+#define        POR_MXP_P1_BYTE_PAR_ERR_INJ             0x3038  /* wo */
+#define        POR_MXP_ERRFR_NS                        0x3100  /* ro */
+#define        POR_MXP_ERRCTLR_NS                      0x3108  /* rw */
+#define        POR_MXP_ERRSTATUS_NS                    0x3110  /* w1c */
+#define        POR_MXP_ERRMISC_NS                      0x3128  /* rw */
+#define        POR_MXP_P0_SYSCOREQ_CTL                 0x1000  /* rw */
+#define        POR_MXP_P1_SYSCOREQ_CTL                 0x1008  /* rw */
+#define        POR_MXP_P0_SYSCOACK_STATUS              0x1010  /* ro */
+#define        POR_MXP_P1_SYSCOACK_STATUS              0x1018  /* ro */
+#define        POR_DTM_CONTROL                         0x2100  /* rw */
+#define                POR_DTM_CONTROL_TRACE_NO_ATB            (1 << 3)
+#define                POR_DTM_CONTROL_SAMPLE_PROFILE_ENABLE   (1 << 2)
+#define                POR_DTM_CONTROL_TRACE_TAG_ENABLE        (1 << 1)
+#define                POR_DTM_CONTROL_DTM_ENABLE              (1 << 0)
+#define        POR_DTM_FIFO_ENTRY_READY                0x2118  /* w1c */
+#define        POR_DTM_FIFO_ENTRY0_0                   0x2120  /* ro */
+#define        POR_DTM_FIFO_ENTRY0_1                   0x2128  /* ro */
+#define        POR_DTM_FIFO_ENTRY0_2                   0x2130  /* ro */
+#define        POR_DTM_FIFO_ENTRY1_0                   0x2138  /* ro */
+#define        POR_DTM_FIFO_ENTRY1_1                   0x2140  /* ro */
+#define        POR_DTM_FIFO_ENTRY1_2                   0x2148  /* ro */
+#define        POR_DTM_FIFO_ENTRY2_0                   0x2150  /* ro */
+#define        POR_DTM_FIFO_ENTRY2_1                   0x2158  /* ro */
+#define        POR_DTM_FIFO_ENTRY2_2                   0x2160  /* ro */
+#define        POR_DTM_FIFO_ENTRY3_0                   0x2168  /* ro */
+#define        POR_DTM_FIFO_ENTRY3_1                   0x2170  /* ro */
+#define        POR_DTM_FIFO_ENTRY3_2                   0x2178  /* ro */
+#define        POR_DTM_WP0_CONFIG                      0x21a0  /* rw */
+#define        POR_DTM_WP0_VAL                         0x21a8  /* rw */
+#define        POR_DTM_WP0_MASK                        0x21b0  /* rw */
+#define        POR_DTM_WP1_CONFIG                      0x21b8  /* rw */
+#define        POR_DTM_WP1_VAL                         0x21c0  /* rw */
+#define        POR_DTM_WP1_MASK                        0x21c8  /* rw */
+#define        POR_DTM_WP2_CONFIG                      0x21d0  /* rw */
+#define        POR_DTM_WP2_VAL                         0x21d8  /* rw */
+#define        POR_DTM_WP2_MASK                        0x21e0  /* rw */
+#define        POR_DTM_WP3_CONFIG                      0x21e8  /* rw */
+#define        POR_DTM_WP3_VAL                         0x21f0  /* rw */
+#define        POR_DTM_WP3_MASK                        0x21f8  /* rw */
+#define        POR_DTM_PMSICR                          0x2200  /* rw */
+#define        POR_DTM_PMSIRR                          0x2208  /* rw */
+#define        POR_DTM_PMU_CONFIG                      0x2210  /* rw */
+#define                POR_DTM_PMU_CONFIG_PMU_EN               (1 << 0)
+#define                POR_DTM_PMU_CONFIG_VCNT_INPUT_SEL_SHIFT 32
+#define                POR_DTM_PMU_CONFIG_VCNT_INPUT_SEL_WIDTH 8
+#define        POR_DTM_PMEVCNT                         0x2220  /* rw */
+#define        POR_DTM_PMEVCNTSR                       0x2240  /* rw */
+
+/* RN-D registers */
+#define        POR_RND_NODE_INFO                       0x0000  /* ro */
+#define        POR_RND_CHILD_INFO                      0x0080  /* ro */
+#define        POR_RND_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980  /* rw */
+#define        POR_RND_UNIT_INFO                       0x0900  /* ro */
+#define        POR_RND_CFG_CTL                         0x0a00  /* rw */
+#define        POR_RND_AUX_CTL                         0x0a08  /* rw */
+#define        POR_RND_S0_PORT_CONTROL                 0x0a10  /* rw */
+#define        POR_RND_S1_PORT_CONTROL                 0x0a18  /* rw */
+#define        POR_RND_S2_PORT_CONTROL                 0x0a20  /* rw */
+#define        POR_RND_S0_QOS_CONTROL                  0x0a80  /* rw */
+#define        POR_RND_S0_QOS_LAT_TGT                  0x0a88  /* rw */
+#define        POR_RND_S0_QOS_LAT_SCALE                0x0a90  /* rw */
+#define        POR_RND_S0_QOS_LAT_RANGE                0x0a98  /* rw */
+#define        POR_RND_S1_QOS_CONTROL                  0x0aa0  /* rw */
+#define        POR_RND_S1_QOS_LAT_TGT                  0x0aa8  /* rw */
+#define        POR_RND_S1_QOS_LAT_SCALE                0x0ab0  /* rw */
+#define        POR_RND_S1_QOS_LAT_RANGE                0x0ab8  /* rw */
+#define        POR_RND_S2_QOS_CONTROL                  0x0ac0  /* rw */
+#define        POR_RND_S2_QOS_LAT_TGT                  0x0ac8  /* rw */
+#define        POR_RND_S2_QOS_LAT_SCALE                0x0ad0  /* rw */
+#define        POR_RND_S2_QOS_LAT_RANGE                0x0ad8  /* rw */
+#define        POR_RND_PMU_EVENT_SEL                   0x2000  /* rw */
+#define        POR_RND_SYSCOREQ_CTL                    0x1000  /* rw */
+#define        POR_RND_SYSCOACK_STATUS                 0x1008  /* ro */
+
+/* RN-I registers */
+#define        POR_RNI_NODE_INFO                       0x0000  /* ro */
+#define        POR_RNI_CHILD_INFO                      0x0080  /* ro */
+#define        POR_RNI_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980  /* rw */
+#define        POR_RNI_UNIT_INFO                       0x0900  /* ro */
+#define        POR_RNI_CFG_CTL                         0x0a00  /* rw */
+#define        POR_RNI_AUX_CTL                         0x0a08  /* rw */
+#define        POR_RNI_S0_PORT_CONTROL                 0x0a10  /* rw */
+#define        POR_RNI_S1_PORT_CONTROL                 0x0a18  /* rw */
+#define        POR_RNI_S2_PORT_CONTROL                 0x0a20  /* rw */
+#define        POR_RNI_S0_QOS_CONTROL                  0x0a80  /* rw */
+#define        POR_RNI_S0_QOS_LAT_TGT                  0x0a88  /* rw */
+#define        POR_RNI_S0_QOS_LAT_SCALE                0x0a90  /* rw */
+#define        POR_RNI_S0_QOS_LAT_RANGE                0x0a98  /* rw */
+#define        POR_RNI_S1_QOS_CONTROL                  0x0aa0  /* rw */
+#define        POR_RNI_S1_QOS_LAT_TGT                  0x0aa8  /* rw */
+#define        POR_RNI_S1_QOS_LAT_SCALE                0x0ab0  /* rw */
+#define        POR_RNI_S1_QOS_LAT_RANGE                0x0ab8  /* rw */
+#define        POR_RNI_S2_QOS_CONTROL                  0x0ac0  /* rw */
+#define        POR_RNI_S2_QOS_LAT_TGT                  0x0ac8  /* rw */
+#define        POR_RNI_S2_QOS_LAT_SCALE                0x0ad0  /* rw */
+#define        POR_RNI_S2_QOS_LAT_RANGE                0x0ad8  /* rw */
+#define        POR_RNI_PMU_EVENT_SEL                   0x2000  /* rw */
+
+/* RN SAM registers */
+#define        POR_RNSAM_NODE_INFO                     0x0000  /* ro */
+#define        POR_RNSAM_CHILD_INFO                    0x0080  /* ro */
+#define        POR_RNSAM_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980 /* rw */
+#define        POR_RNSAM_UNIT_INFO                     0x0900  /* ro */
+#define        RNSAM_STATUS                            0x0c00  /* rw */
+#define        NON_HASH_MEM_REGION_REG0                0x0c08  /* rw */
+#define        NON_HASH_MEM_REGION_REG1                0x0c10  /* rw */
+#define        NON_HASH_MEM_REGION_REG2                0x0c18  /* rw */
+#define        NON_HASH_MEM_REGION_REG3                0x0c20  /* rw */
+#define        NON_HASH_TGT_NODEID0                    0x0c30  /* rw */
+#define        NON_HASH_TGT_NODEID1                    0x0c38  /* rw */
+#define        NON_HASH_TGT_NODEID2                    0x0c40  /* rw */
+#define        SYS_CACHE_GRP_REGION0                   0x0c48  /* rw */
+#define        SYS_CACHE_GRP_REGION1                   0x0c50  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG0            0x0c58  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG1            0x0c60  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG2            0x0c68  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG3            0x0c70  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG4            0x0c78  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG5            0x0c80  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG6            0x0c88  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG7            0x0c90  /* rw */
+#define        SYS_CACHE_GRP_NONHASH_NODEID            0x0c98  /* rw */
+#define        SYS_CACHE_GROUP_HN_COUNT                0x0d00  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG0            0x0d08  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG1            0x0d10  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG2            0x0d18  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG3            0x0d20  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG4            0x0d28  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG5            0x0d30  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG6            0x0d38  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG7            0x0d40  /* rw */
+#define        SYS_CACHE_GRP_SN_SAM_CFG0               0x0d48  /* rw */
+#define        SYS_CACHE_GRP_SN_SAM_CFG1               0x0d50  /* rw */
+#define        GIC_MEM_REGION_REG                      0x0d58  /* rw */
+#define        SYS_CACHE_GRP_SN_ATTR                   0x0d60  /* rw */
+#define        SYS_CACHE_GRP_HN_CPA_EN_REG             0x0d68  /* rw */
+#define        SYS_CACHE_GRP_HN_CPA_GRP_REG            0x0d70  /* rw */
+#define        CML_PORT_AGGR_MODE_CTRL_REG             0x0e00  /* rw */
+#define        CML_PORT_AGGR_GRP0_ADD_MASK             0x0e08  /* rw */
+#define        CML_PORT_AGGR_GRP1_ADD_MASK             0x0e10  /* rw */
+#define        CML_PORT_AGGR_GRP0_REG                  0x0e40  /* rw */
+#define        CML_PORT_AGGR_GRP1_REG                  0x0e48  /* rw */
+#define        SYS_CACHE_GRP_SECONDARY_REG0            0x0f00  /* rw */
+#define        SYS_CACHE_GRP_SECONDARY_REG1            0x0f08  /* rw */
+#define        SYS_CACHE_GRP_CAL_MODE_REG              0x0f10  /* rw */
+#define        RNSAM_HASH_ADDR_MASK_REG                0x0f18  /* rw */
+#define        RNSAM_REGION_CMP_ADDR_MASK_REG          0x0f20  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG8            0x0f58  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG9            0x0f60  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG10           0x0f68  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG11           0x0f70  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG12           0x0f78  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG13           0x0f80  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG14           0x0f88  /* rw */
+#define        SYS_CACHE_GRP_HN_NODEID_REG15           0x0f90  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG8            0x1008  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG9            0x1010  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG10           0x1018  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG11           0x1020  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG12           0x1028  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG13           0x1030  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG14           0x1038  /* rw */
+#define        SYS_CACHE_GRP_SN_NODEID_REG15           0x1040  /* rw */
+
+/* SBSX registers */
+#define        POR_SBSX_NODE_INFO                      0x0000  /* ro */
+#define        POR_SBSX_CHILD_INFO                     0x0080  /* ro */
+#define        POR_SBSX_UNIT_INFO                      0x0900  /* ro */
+#define        POR_SBSX_AUX_CTL                        0x0a08  /* rw */
+#define        POR_SBSX_ERRFR                          0x3000  /* ro */
+#define        POR_SBSX_ERRCTLR                        0x3008  /* rw */
+#define        POR_SBSX_ERRSTATUS                      0x3010  /* w1c */
+#define        POR_SBSX_ERRADDR                        0x3018  /* rw */
+#define        POR_SBSX_ERRMISC                        0x3020  /* rw */
+#define        POR_SBSX_ERRFR_NS                       0x3100  /* ro */
+#define        POR_SBSX_ERRCTLR_NS                     0x3108  /* rw */
+#define        POR_SBSX_ERRSTATUS_NS                   0x3110  /* w1c */
+#define        POR_SBSX_ERRADDR_NS                     0x3118  /* rw */
+#define        POR_SBSX_ERRMISC_NS                     0x3120  /* rw */
+#define        POR_SBSX_PMU_EVENT_SEL                  0x2000  /* rw */
+
+/* CXHA registers */
+#define        POR_CXG_HA_NODE_INFO                    0x0000  /* ro */
+#define        POR_CXG_HA_ID                           0x0008  /* rw */
+#define        POR_CXG_HA_CHILD_INFO                   0x0080  /* ro */
+#define        POR_CXG_HA_AUX_CTL                      0x0a08  /* rw */
+#define        POR_CXG_HA_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980 /* rw */
+#define        POR_CXG_HA_UNIT_INFO                    0x0900  /* ro */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG0        0x0c00  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG1        0x0c08  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG2        0x0c10  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG3        0x0c18  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG4        0x0c20  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG5        0x0c28  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG6        0x0c30  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_REG7        0x0c38  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG0       0x0c40  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG1       0x0c48  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG2       0x0c50  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG3       0x0c58  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG4       0x0c60  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG5       0x0c68  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG6       0x0c70  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_REG7       0x0c78  /* rw */
+#define        POR_CXG_HA_AGENTID_TO_LINKID_VAL        0x0d00  /* rw */
+#define        POR_CXG_HA_RNF_RAID_TO_LDID_VAL         0x0d08  /* rw */
+#define        POR_CXG_HA_PMU_EVENT_SEL                0x2000  /* rw */
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID3_SHIFT        24
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID3_MASK         (0x3f 
<< 24)
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID2_SHIFT        16
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID2_MASK         (0x3f 
<< 16)
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID1_SHIFT        8
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID1_MASK         (0x3f 
<< 8)
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID0_SHIFT        0
+#define                POR_CXG_HA_PMU_EVENT_SEL_EVENT_ID0_MASK         0x3f
+
+#define        POR_CXG_HA_CXPRTCL_LINK0_CTL            0x1000  /* rw */
+#define        POR_CXG_HA_CXPRTCL_LINK0_STATUS         0x1008  /* ro */
+#define        POR_CXG_HA_CXPRTCL_LINK1_CTL            0x1010  /* rw */
+#define        POR_CXG_HA_CXPRTCL_LINK1_STATUS         0x1018  /* ro */
+#define        POR_CXG_HA_CXPRTCL_LINK2_CTL            0x1020  /* rw */
+#define        POR_CXG_HA_CXPRTCL_LINK2_STATUS         0x1028  /* ro */
+#define        POR_CXG_HA_ERRFR                        0x3000  /* ro */
+#define        POR_CXG_HA_ERRCTLR                      0x3008  /* rw */
+#define        POR_CXG_HA_ERRSTATUS                    0x3010  /* w1c */
+#define        POR_CXG_HA_ERRADDR                      0x3018  /* rw */
+#define        POR_CXG_HA_ERRMISC                      0x3020  /* rw */
+#define        POR_CXG_HA_ERRFR_NS                     0x3100  /* ro */
+#define        POR_CXG_HA_ERRCTLR_NS                   0x3108  /* rw */
+#define        POR_CXG_HA_ERRSTATUS_NS                 0x3110  /* w1c */
+#define        POR_CXG_HA_ERRADDR_NS                   0x3118  /* rw */
+#define        POR_CXG_HA_ERRMISC_NS                   0x3120  /* rw */
+
+/* CXRA registers */
+#define        POR_CXG_RA_NODE_INFO                    0x0000  /* ro */
+#define        POR_CXG_RA_CHILD_INFO                   0x0080  /* ro */
+#define        POR_CXG_RA_SECURE_REGISTER_GROUPS_OVERRIDE 0x0980 /* rw */
+#define        POR_CXG_RA_UNIT_INFO                    0x0900  /* ro */
+#define        POR_CXG_RA_CFG_CTL                      0x0a00  /* rw */
+#define                EN_CXLA_PMUCMD_PROP                     (1 << 8)
+#define        POR_CXG_RA_AUX_CTL                      0x0a08  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG0         0x0da8  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG1         0x0db0  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG2         0x0db8  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG3         0x0dc0  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG4         0x0dc8  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG5         0x0dd0  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG6         0x0dd8  /* rw */
+#define        POR_CXG_RA_SAM_ADDR_REGION_REG7         0x0de0  /* rw */
+#define        POR_CXG_RA_SAM_MEM_REGION0_LIMIT_REG    0x0e00  /* rw */
*** 613 LINES SKIPPED ***

Reply via email to