lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAPLW+4nvuGd8AoDKK1VdF2pabCHzjgYHRJkYrcncRt4s=qt8Dw@mail.gmail.com>
Date: Fri, 3 Oct 2025 13:24:45 -0500
From: Sam Protsenko <semen.protsenko@...aro.org>
To: André Draszik <andre.draszik@...aro.org>
Cc: Krzysztof Kozlowski <krzk@...nel.org>, Alim Akhtar <alim.akhtar@...sung.com>, 
	Peter Griffin <peter.griffin@...aro.org>, Tudor Ambarus <tudor.ambarus@...aro.org>, 
	Will McVicker <willmcvicker@...gle.com>, kernel-team@...roid.com, 
	linux-arm-kernel@...ts.infradead.org, linux-samsung-soc@...r.kernel.org, 
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/3] soc: samsung: gs101-pmu: implement access tables for
 read and write

On Thu, Oct 2, 2025 at 5:33 AM André Draszik <andre.draszik@...aro.org> wrote:
>
> Accessing non-existent PMU registers causes an SError, halting the
> system.
>
> Implement read and write access tables for the gs101-PMU to specify
> which registers are read- and/or writable to avoid that SError.
>
> Signed-off-by: André Draszik <andre.draszik@...aro.org>

I think having "Fixes:" tag would be justified here?

>
> ---
> Note there are checkpatch warnings 'Macros with complex values should
> be enclosed in parentheses' and 'Macro argument reuse' for macros like
> CLUSTER_CPU_RANGE(). Since they are used in an initialiser, the only
> way to get rid of the warnings is to avoid the macros and duplicate all
> the related register ranges I believe, which I'd rather not due to the
> sheer amount of similar blocks.
> ---
>  drivers/soc/samsung/gs101-pmu.c             | 306 ++++++++++++++++++++++++-
>  include/linux/soc/samsung/exynos-regs-pmu.h | 343 +++++++++++++++++++++++++++-
>  2 files changed, 640 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/soc/samsung/gs101-pmu.c b/drivers/soc/samsung/gs101-pmu.c
> index b5a535822ec830b751e36a33121e2a03ef2ebcb2..5be1cbfa58c95e466bbdf954923f324f74460783 100644
> --- a/drivers/soc/samsung/gs101-pmu.c
> +++ b/drivers/soc/samsung/gs101-pmu.c
> @@ -8,6 +8,7 @@
>  #include <linux/array_size.h>
>  #include <linux/soc/samsung/exynos-pmu.h>
>  #include <linux/soc/samsung/exynos-regs-pmu.h>
> +#include <linux/regmap.h>

If you decide to add this line to exynos-pmu.h (as I commented in the
preceding patch), it can then be omitted here.

>
>  #include "exynos-pmu.h"
>
> @@ -19,9 +20,312 @@
>  #define TENSOR_PMUREG_WRITE            1
>  #define TENSOR_PMUREG_RMW              2
>
> +static const struct regmap_range gs101_pmu_registers[] = {
> +       regmap_reg_range(GS101_OM_STAT, GS101_SYSTEM_INFO),
> +       regmap_reg_range(GS101_IDLE_IP(0), GS101_IDLE_IP_MASK(3)),
> +       regmap_reg_range(GS101_DATARAM_STATE_SLC_CH(0),
> +                        GS101_PPMPURAM_INFORM_SCL_CH(3)),
> +       regmap_reg_range(GS101_INFORM0, GS101_SYSIP_DAT(0)),
> +       /* skip SYSIP_DAT1 SYSIP_DAT2 */
> +       regmap_reg_range(GS101_SYSIP_DAT(3), GS101_PWR_HOLD_SW_TRIP),
> +       regmap_reg_range(GS101_GSA_INFORM(0), GS101_GSA_INFORM(1)),
> +       regmap_reg_range(GS101_INFORM4, GS101_IROM_INFORM),
> +       regmap_reg_range(GS101_IROM_CPU_INFORM(0), GS101_IROM_CPU_INFORM(7)),
> +       regmap_reg_range(GS101_PMU_SPARE(0), GS101_PMU_SPARE(3)),
> +       /* skip most IROM_xxx registers */
> +       regmap_reg_range(GS101_DREX_CALIBRATION(0), GS101_DREX_CALIBRATION(7)),
> +
> +#define CLUSTER_CPU_RANGE(cl, cpu)                                     \
> +       regmap_reg_range(GS101_CLUSTER_CPU_CONFIGURATION(cl, cpu),      \
> +                        GS101_CLUSTER_CPU_OPTION(cl, cpu)),            \
> +       regmap_reg_range(GS101_CLUSTER_CPU_OUT(cl, cpu),                \
> +                        GS101_CLUSTER_CPU_IN(cl, cpu)),                \
> +       regmap_reg_range(GS101_CLUSTER_CPU_INT_IN(cl, cpu),             \
> +                        GS101_CLUSTER_CPU_INT_DIR(cl, cpu))
> +
> +       /* cluster 0..2 and cpu 0..4 or 0..1 */
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 1),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 2),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 3),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER1_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER1_OFFSET, 1),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER2_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER2_OFFSET, 1),
> +#undef CLUSTER_CPU_RANGE
> +
> +#define CLUSTER_NONCPU_RANGE(cl)                                       \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_CONFIGURATION(cl),        \
> +                        GS101_CLUSTER_NONCPU_OPTION(cl)),              \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_OUT(cl),                  \
> +                        GS101_CLUSTER_NONCPU_IN(cl)),                  \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_INT_IN(cl),               \
> +                        GS101_CLUSTER_NONCPU_INT_DIR(cl)),             \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_OUT(cl),    \
> +                        GS101_CLUSTER_NONCPU_DUALRAIL_POS_OUT(cl)),    \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_IN(cl),     \
> +                        GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_IN(cl))
> +
> +       CLUSTER_NONCPU_RANGE(0),
> +       regmap_reg_range(GS101_CLUSTER0_NONCPU_DSU_PCH,
> +                        GS101_CLUSTER0_NONCPU_DSU_PCH),
> +       CLUSTER_NONCPU_RANGE(1),
> +       CLUSTER_NONCPU_RANGE(2),
> +#undef CLUSTER_NONCPU_RANGE
> +
> +#define SUBBLK_RANGE(blk)                                              \
> +       regmap_reg_range(GS101_SUBBLK_CONFIGURATION(blk),               \
> +                        GS101_SUBBLK_CTRL(blk)),                       \
> +       regmap_reg_range(GS101_SUBBLK_OUT(blk), GS101_SUBBLK_IN(blk)),  \
> +       regmap_reg_range(GS101_SUBBLK_INT_IN(blk),                      \
> +                        GS101_SUBBLK_INT_DIR(blk)),                    \
> +       regmap_reg_range(GS101_SUBBLK_MEMORY_OUT(blk),                  \
> +                        GS101_SUBBLK_MEMORY_IN(blk))
> +
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_ALIVE),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_AOC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_APM),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CMU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CORE),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EH),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G3D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EMBEDDED_CPUCL0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EMBEDDED_G3D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DPU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DISP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G2D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MFC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CSIS),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PDP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DNS),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G3AA),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_IPP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_ITP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MCSC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_GDC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_TNR),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BO),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_TPU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF3),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MISC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PERIC0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PERIC1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_S2D),
> +#undef SUBBLK_RANGE
> +
> +#define SUBBLK_CPU_RANGE(blk)                                          \
> +       regmap_reg_range(GS101_SUBBLK_CPU_CONFIGURATION(blk),           \
> +                        GS101_SUBBLK_CPU_OPTION(blk)),                 \
> +       regmap_reg_range(GS101_SUBBLK_CPU_OUT(blk),                     \
> +                        GS101_SUBBLK_CPU_IN(blk)),                     \
> +       regmap_reg_range(GS101_SUBBLK_CPU_INT_IN(blk),                  \
> +                        GS101_SUBBLK_CPU_INT_DIR(blk))
> +
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_APM),
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_DBGCORE),
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_SSS),
> +#undef SUBBLK_CPU_RANGE
> +
> +       regmap_reg_range(GS101_MIF_CONFIGURATION, GS101_MIF_CTRL),
> +       regmap_reg_range(GS101_MIF_OUT, GS101_MIF_IN),
> +       regmap_reg_range(GS101_MIF_INT_IN, GS101_MIF_INT_DIR),
> +       regmap_reg_range(GS101_TOP_CONFIGURATION, GS101_TOP_OPTION),
> +       regmap_reg_range(GS101_TOP_OUT, GS101_TOP_IN),
> +       regmap_reg_range(GS101_TOP_INT_IN, GS101_WAKEUP2_STAT),
> +       regmap_reg_range(GS101_WAKEUP2_INT_IN, GS101_WAKEUP2_INT_DIR),
> +       regmap_reg_range(GS101_SYSTEM_CONFIGURATION, GS101_USER_DEFINED_OUT),
> +       regmap_reg_range(GS101_SYSTEM_OUT, GS101_SYSTEM_IN),
> +       regmap_reg_range(GS101_SYSTEM_INT_IN, GS101_EINT_WAKEUP_MASK3),
> +       regmap_reg_range(GS101_USER_DEFINED_INT_IN, GS101_SCAN2DRAM_INT_DIR),
> +       /* skip HCU_START */
> +       regmap_reg_range(GS101_CUSTOM_OUT, GS101_CUSTOM_IN),
> +       regmap_reg_range(GS101_CUSTOM_INT_IN, GS101_CUSTOM_INT_DIR),
> +       regmap_reg_range(GS101_ACK_LAST_CPU, GS101_HCU_R(3)),
> +       regmap_reg_range(GS101_HCU_SP, GS101_HCU_PC),
> +       /* skip PMU_RAM_CTRL */
> +       regmap_reg_range(GS101_APM_HCU_CTRL, GS101_APM_HCU_CTRL),
> +       regmap_reg_range(GS101_APM_NMI_ENABLE, GS101_RST_STAT_PMU),
> +       regmap_reg_range(GS101_HPM_INT_IN, GS101_BOOT_STAT),
> +       regmap_reg_range(GS101_PMLINK_OUT, GS101_PMLINK_AOC_CTRL),
> +       regmap_reg_range(GS101_TCXO_BUF_CTRL, GS101_ADD_CTRL),
> +       regmap_reg_range(GS101_HCU_TIMEOUT_RESET, GS101_HCU_TIMEOUT_SCAN2DRAM),
> +       regmap_reg_range(GS101_TIMER(0), GS101_TIMER(3)),
> +       regmap_reg_range(GS101_PPC_MIF(0), GS101_PPC_EH),
> +       /* PPC_OFFSET, skip PPC_CPUCL1_0 PPC_CPUCL1_1 */
> +       regmap_reg_range(GS101_EXT_REGULATOR_MIF_DURATION, GS101_TCXO_DURATION),
> +       regmap_reg_range(GS101_BURNIN_CTRL, GS101_TMU_SUB_TRIP),
> +       regmap_reg_range(GS101_MEMORY_CEN, GS101_MEMORY_SMX_FEEDBACK),
> +       regmap_reg_range(GS101_SLC_PCH_CHANNEL, GS101_SLC_PCH_CB),
> +       regmap_reg_range(GS101_FORCE_NOMC, GS101_FORCE_NOMC),
> +       regmap_reg_range(GS101_FORCE_BOOST, GS101_PMLINK_SLC_BUSY),
> +       regmap_reg_range(GS101_BOOTSYNC_OUT, GS101_CTRL_SECJTAG_ALIVE),
> +       regmap_reg_range(GS101_CTRL_DIV_PLL_ALV_DIVLOW, GS101_CTRL_CLKDIV__CLKRTC),
> +       regmap_reg_range(GS101_CTRL_SOC32K, GS101_CTRL_SBU_SW_EN),
> +       regmap_reg_range(GS101_PAD_CTRL_CLKOUT0, GS101_PAD_CTRL_WRESETO_n),
> +       regmap_reg_range(GS101_PHY_CTRL_USB20, GS101_PHY_CTRL_UFS),
> +};
> +
> +static const struct regmap_range gs101_pmu_ro_registers[] = {
> +       regmap_reg_range(GS101_OM_STAT, GS101_VERSION),
> +       regmap_reg_range(GS101_OTP_STATUS, GS101_OTP_STATUS),
> +
> +       regmap_reg_range(GS101_DATARAM_STATE_SLC_CH(0),
> +                        GS101_PPMPURAM_STATE_SLC_CH(0)),
> +       regmap_reg_range(GS101_DATARAM_STATE_SLC_CH(1),
> +                        GS101_PPMPURAM_STATE_SLC_CH(1)),
> +       regmap_reg_range(GS101_DATARAM_STATE_SLC_CH(2),
> +                        GS101_PPMPURAM_STATE_SLC_CH(2)),
> +       regmap_reg_range(GS101_DATARAM_STATE_SLC_CH(3),
> +                        GS101_PPMPURAM_STATE_SLC_CH(3)),
> +
> +#define CLUSTER_CPU_RANGE(cl, cpu)                                     \
> +       regmap_reg_range(GS101_CLUSTER_CPU_IN(cl, cpu),                 \
> +                        GS101_CLUSTER_CPU_IN(cl, cpu)),                \
> +       regmap_reg_range(GS101_CLUSTER_CPU_INT_IN(cl, cpu),             \
> +                        GS101_CLUSTER_CPU_INT_IN(cl, cpu))
> +
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 1),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 2),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER0_OFFSET, 3),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER1_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER1_OFFSET, 1),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER2_OFFSET, 0),
> +       CLUSTER_CPU_RANGE(GS101_CLUSTER2_OFFSET, 1),
> +#undef CLUSTER_CPU_RANGE
> +
> +#define CLUSTER_NONCPU_RANGE(cl)                                       \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_IN(cl),                   \
> +                        GS101_CLUSTER_NONCPU_IN(cl)),                  \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_INT_IN(cl),               \
> +                        GS101_CLUSTER_NONCPU_INT_IN(cl)),              \
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_IN(cl),     \
> +                        GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_IN(cl))
> +
> +       CLUSTER_NONCPU_RANGE(0),
> +       CLUSTER_NONCPU_RANGE(1),
> +       CLUSTER_NONCPU_RANGE(2),
> +       regmap_reg_range(GS101_CLUSTER_NONCPU_INT_EN(2),
> +                        GS101_CLUSTER_NONCPU_INT_DIR(2)),
> +#undef CLUSTER_NONCPU_RANGE
> +
> +#define SUBBLK_RANGE(blk)                                              \

Reusing the same names for different macros seems a bit confusing. But
that might be just a matter of my taste, so no strong opinion.

> +       regmap_reg_range(GS101_SUBBLK_IN(blk), GS101_SUBBLK_IN(blk)),   \
> +       regmap_reg_range(GS101_SUBBLK_INT_IN(blk),                      \
> +                        GS101_SUBBLK_INT_IN(blk)),                     \
> +       regmap_reg_range(GS101_SUBBLK_MEMORY_IN(blk),                   \
> +                        GS101_SUBBLK_MEMORY_IN(blk))
> +
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_ALIVE),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_AOC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_APM),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CMU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BUS2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CORE),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EH),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CPUCL2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G3D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EMBEDDED_CPUCL0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_EMBEDDED_G3D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_HSI2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DPU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DISP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G2D),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MFC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_CSIS),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PDP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_DNS),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_G3AA),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_IPP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_ITP),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MCSC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_GDC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_TNR),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_BO),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_TPU),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF2),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MIF3),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_MISC),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PERIC0),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_PERIC1),
> +       SUBBLK_RANGE(GS101_SUBBBLK_OFFSET_S2D),
> +#undef SUBBLK_RANGE
> +
> +#define SUBBLK_CPU_RANGE(blk)                                          \
> +       regmap_reg_range(GS101_SUBBLK_CPU_IN(blk),                      \
> +                        GS101_SUBBLK_CPU_IN(blk)),                     \
> +       regmap_reg_range(GS101_SUBBLK_CPU_INT_IN(blk),                  \
> +                        GS101_SUBBLK_CPU_INT_IN(blk))
> +
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_APM),
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_DBGCORE),
> +       SUBBLK_CPU_RANGE(GS101_SUBBBLK_CPU_OFFSET_SSS),
> +#undef SUBBLK_CPU_RANGE
> +
> +       regmap_reg_range(GS101_MIF_CONFIGURATION, GS101_MIF_CONFIGURATION),
> +       regmap_reg_range(GS101_MIF_IN, GS101_MIF_IN),
> +       regmap_reg_range(GS101_MIF_INT_IN, GS101_MIF_INT_IN),
> +       regmap_reg_range(GS101_TOP_IN, GS101_TOP_IN),
> +       regmap_reg_range(GS101_TOP_INT_IN, GS101_TOP_INT_IN),
> +       regmap_reg_range(GS101_WAKEUP2_INT_IN, GS101_WAKEUP2_INT_IN),
> +       regmap_reg_range(GS101_SYSTEM_IN, GS101_SYSTEM_IN),
> +       regmap_reg_range(GS101_SYSTEM_INT_IN, GS101_SYSTEM_INT_IN),
> +       regmap_reg_range(GS101_EINT_INT_IN, GS101_EINT_INT_IN),
> +       regmap_reg_range(GS101_EINT2_INT_IN, GS101_EINT2_INT_IN),
> +       regmap_reg_range(GS101_EINT3_INT_IN, GS101_EINT3_INT_IN),
> +       regmap_reg_range(GS101_USER_DEFINED_INT_IN, GS101_USER_DEFINED_INT_IN),
> +       regmap_reg_range(GS101_SCAN2DRAM_INT_IN, GS101_SCAN2DRAM_INT_IN),
> +       regmap_reg_range(GS101_CUSTOM_IN, GS101_CUSTOM_IN),
> +       regmap_reg_range(GS101_CUSTOM_INT_IN, GS101_CUSTOM_INT_IN),
> +       regmap_reg_range(GS101_HCU_R(0), GS101_HCU_R(3)),
> +       regmap_reg_range(GS101_HCU_SP, GS101_HCU_PC),
> +       regmap_reg_range(GS101_NMI_SRC_IN, GS101_NMI_SRC_IN),
> +       regmap_reg_range(GS101_HPM_INT_IN, GS101_HPM_INT_IN),
> +       regmap_reg_range(GS101_MEMORY_PGEN_FEEDBACK, GS101_MEMORY_PGEN_FEEDBACK),
> +       regmap_reg_range(GS101_MEMORY_SMX_FEEDBACK, GS101_MEMORY_SMX_FEEDBACK),
> +       regmap_reg_range(GS101_PMLINK_SLC_ACK, GS101_PMLINK_SLC_BUSY),
> +       regmap_reg_range(GS101_BOOTSYNC_IN, GS101_BOOTSYNC_IN),
> +       regmap_reg_range(GS101_SCAN_READY_IN, GS101_SCAN_READY_IN),
> +       regmap_reg_range(GS101_CTRL_PLL_ALV_LOCK, GS101_CTRL_PLL_ALV_LOCK),
> +};
> +

That's quite an extensive list of registers! Does this PMU driver
really have to cover all of those?

> +static const struct regmap_access_table gs101_pmu_rd_table = {
> +       .yes_ranges = gs101_pmu_registers,
> +       .n_yes_ranges = ARRAY_SIZE(gs101_pmu_registers),
> +};
> +
> +static const struct regmap_access_table gs101_pmu_wr_table = {
> +       .yes_ranges = gs101_pmu_registers,
> +       .n_yes_ranges = ARRAY_SIZE(gs101_pmu_registers),
> +       .no_ranges = gs101_pmu_ro_registers,
> +       .n_no_ranges = ARRAY_SIZE(gs101_pmu_ro_registers),
> +};
> +
>  const struct exynos_pmu_data gs101_pmu_data = {
>         .pmu_secure = true,
>         .pmu_cpuhp = true,
> +       .rd_table = &gs101_pmu_rd_table,
> +       .wr_table = &gs101_pmu_wr_table,
>  };
>
>  /*
> @@ -123,7 +427,7 @@ static bool tensor_is_atomic(unsigned int reg)
>                 return false;
>
>         switch (reg) {
> -       case GS101_SYSIP_DAT0:
> +       case GS101_SYSIP_DAT(0):
>         case GS101_SYSTEM_CONFIGURATION:
>                 return false;
>         default:
> diff --git a/include/linux/soc/samsung/exynos-regs-pmu.h b/include/linux/soc/samsung/exynos-regs-pmu.h
> index 71e0c09a49ebb8544d26081e97492665e5e9ec6a..532c6c2d11950c606576805aeeb38b4612cd2d44 100644
> --- a/include/linux/soc/samsung/exynos-regs-pmu.h
> +++ b/include/linux/soc/samsung/exynos-regs-pmu.h
> @@ -672,14 +672,341 @@
>
>  /* For Tensor GS101 */
>  /* PMU ALIVE */
> -#define GS101_SYSIP_DAT0                                       (0x810)
> -#define GS101_CPU0_INFORM                                      (0x860)
> -#define GS101_CPU_INFORM(cpu)  \
> -                       (GS101_CPU0_INFORM + (cpu*4))
> -#define GS101_SYSTEM_CONFIGURATION                             (0x3A00)
> -#define GS101_EINT_WAKEUP_MASK                                 (0x3A80)
> -#define GS101_PHY_CTRL_USB20                                   (0x3EB0)
> -#define GS101_PHY_CTRL_USBDP                                   (0x3EB4)
> +#define GS101_OM_STAT                           0x0000
> +#define GS101_VERSION                           0x0004
> +#define GS101_PORESET_CHECK                     0x0008
> +#define GS101_OTP_STATUS                        0x000c
> +#define GS101_SYSTEM_INFO                       0x0010
> +#define GS101_IDLE_IP(n)                        (0x03e0 + ((n) & 3) * 4)
> +#define GS101_IDLE_IP_MASK(n)                   (0x03f0 + ((n) & 3) * 4)
> +#define GS101_SLC_CH_OFFSET(ch)                 (0x0400 + ((ch) & 3) * 0x10)
> +#define GS101_DATARAM_STATE_SLC_CH(ch)          (GS101_SLC_CH_OFFSET(ch) + 0x00)
> +#define GS101_TAGRAM_STATE_SLC_CH(ch)           (GS101_SLC_CH_OFFSET(ch) + 0x04)
> +#define GS101_LRURAM_STATE_SLC_CH(ch)           (GS101_SLC_CH_OFFSET(ch) + 0x08)
> +#define GS101_PPMPURAM_STATE_SLC_CH(ch)         (GS101_SLC_CH_OFFSET(ch) + 0x0c)
> +#define GS101_DATARAM_INFORM_SCL_CH(ch)         (GS101_SLC_CH_OFFSET(ch) + 0x40)
> +#define GS101_TAGRAM_INFORM_SCL_CH(ch)          (GS101_SLC_CH_OFFSET(ch) + 0x44)
> +#define GS101_LRURAM_INFORM_SCL_CH(ch)          (GS101_SLC_CH_OFFSET(ch) + 0x48)
> +#define GS101_PPMPURAM_INFORM_SCL_CH(ch)        (GS101_SLC_CH_OFFSET(ch) + 0x4c)
> +#define GS101_INFORM0                           0x0800
> +#define GS101_INFORM1                           0x0804
> +#define GS101_INFORM2                           0x0808
> +#define GS101_INFORM3                           0x080c
> +#define GS101_SYSIP_DAT(n)                      (0x0810 + ((n) & 3) * 4)
> +#define GS101_PWR_HOLD_HW_TRIP                  0x0820
> +#define GS101_PWR_HOLD_SW_TRIP                  0x0824
> +#define GS101_GSA_INFORM(n)                     (0x0830 + ((n) & 1) * 4)
> +#define GS101_INFORM4                           0x0840
> +#define GS101_INFORM5                           0x0844
> +#define GS101_INFORM6                           0x0848
> +#define GS101_INFORM7                           0x084c
> +#define GS101_INFORM8                           0x0850
> +#define GS101_INFORM9                           0x0854
> +#define GS101_INFORM10                          0x0858
> +#define GS101_INFORM11                          0x085c
> +#define GS101_CPU_INFORM(cpu)                   (0x0860 + ((cpu) & 7) * 4)
> +#define GS101_IROM_INFORM                       0x0880
> +#define GS101_IROM_CPU_INFORM(cpu)              (0x0890 + ((cpu) & 7) * 4)
> +#define GS101_PMU_SPARE(n)                      (0x0900 + ((n) & 3) * 4)
> +#define GS101_IROM_DATA_REG(n)                  (0x0980 + ((n) & 3) * 4)
> +#define GS101_IROM_PWRMODE                      0x0990
> +#define GS101_DREX_CALIBRATION(n)               (0x09a0 + ((n) & 7) * 4)
> +
> +#define GS101_CLUSTER0_OFFSET                   0x1000
> +#define GS101_CLUSTER1_OFFSET                   0x1300
> +#define GS101_CLUSTER2_OFFSET                   0x1500
> +#define GS101_CLUSTER_CPU_OFFSET(cl, cpu)       ((cl) + ((cpu) * 0x80))
> +#define GS101_CLUSTER_CPU_CONFIGURATION(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x00)
> +#define GS101_CLUSTER_CPU_STATUS(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x04)
> +#define GS101_CLUSTER_CPU_STATES(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x08)
> +#define GS101_CLUSTER_CPU_OPTION(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x0c)
> +#define GS101_CLUSTER_CPU_OUT(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x20)
> +#define GS101_CLUSTER_CPU_IN(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x24)
> +#define GS101_CLUSTER_CPU_INT_IN(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x40)
> +#define GS101_CLUSTER_CPU_INT_EN(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x44)
> +#define GS101_CLUSTER_CPU_INT_TYPE(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x48)
> +#define GS101_CLUSTER_CPU_INT_DIR(cl, cpu) \
> +                       (GS101_CLUSTER_CPU_OFFSET(cl, cpu) + 0x4c)
> +
> +#define GS101_CLUSTER_NONCPU_OFFSET(cl)         (0x1200 + ((cl) * 0x200))
> +#define GS101_CLUSTER_NONCPU_CONFIGURATION(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x00)
> +#define GS101_CLUSTER_NONCPU_STATUS(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x04)
> +#define GS101_CLUSTER_NONCPU_STATES(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x08)
> +#define GS101_CLUSTER_NONCPU_OPTION(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x0c)
> +#define GS101_CLUSTER_NONCPU_OUT(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x20)
> +#define GS101_CLUSTER_NONCPU_IN(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x24)
> +#define GS101_CLUSTER_NONCPU_INT_IN(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x40)
> +#define GS101_CLUSTER_NONCPU_INT_EN(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x44)
> +#define GS101_CLUSTER_NONCPU_INT_TYPE(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x48)
> +#define GS101_CLUSTER_NONCPU_INT_DIR(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x4c)
> +#define GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_OUT(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x60)
> +#define GS101_CLUSTER_NONCPU_DUALRAIL_POS_OUT(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x64)
> +#define GS101_CLUSTER_NONCPU_DUALRAIL_CTRL_IN(cl) \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(cl) + 0x6c)
> +#define GS101_CLUSTER0_NONCPU_DSU_PCH \
> +                       (GS101_CLUSTER_NONCPU_OFFSET(0) + 0x80)
> +
> +#define GS101_SUBBBLK_OFFSET_ALIVE              0x1800
> +#define GS101_SUBBBLK_OFFSET_AOC                0x1880
> +#define GS101_SUBBBLK_OFFSET_APM                0x1900
> +#define GS101_SUBBBLK_OFFSET_CMU                0x1980
> +#define GS101_SUBBBLK_OFFSET_BUS0               0x1a00
> +#define GS101_SUBBBLK_OFFSET_BUS1               0x1a80
> +#define GS101_SUBBBLK_OFFSET_BUS2               0x1b00
> +#define GS101_SUBBBLK_OFFSET_CORE               0x1b80
> +#define GS101_SUBBBLK_OFFSET_EH                 0x1c00
> +#define GS101_SUBBBLK_OFFSET_CPUCL0             0x1c80
> +#define GS101_SUBBBLK_OFFSET_CPUCL1             0x1d00
> +#define GS101_SUBBBLK_OFFSET_CPUCL2             0x1d80
> +#define GS101_SUBBBLK_OFFSET_G3D                0x1e00
> +#define GS101_SUBBBLK_OFFSET_EMBEDDED_CPUCL0    0x1e80
> +#define GS101_SUBBBLK_OFFSET_EMBEDDED_G3D       0x2000
> +#define GS101_SUBBBLK_OFFSET_HSI0               0x2080
> +#define GS101_SUBBBLK_OFFSET_HSI1               0x2100
> +#define GS101_SUBBBLK_OFFSET_HSI2               0x2180
> +#define GS101_SUBBBLK_OFFSET_DPU                0x2200
> +#define GS101_SUBBBLK_OFFSET_DISP               0x2280
> +#define GS101_SUBBBLK_OFFSET_G2D                0x2300
> +#define GS101_SUBBBLK_OFFSET_MFC                0x2380
> +#define GS101_SUBBBLK_OFFSET_CSIS               0x2400
> +#define GS101_SUBBBLK_OFFSET_PDP                0x2480
> +#define GS101_SUBBBLK_OFFSET_DNS                0x2500
> +#define GS101_SUBBBLK_OFFSET_G3AA               0x2580
> +#define GS101_SUBBBLK_OFFSET_IPP                0x2600
> +#define GS101_SUBBBLK_OFFSET_ITP                0x2680
> +#define GS101_SUBBBLK_OFFSET_MCSC               0x2700
> +#define GS101_SUBBBLK_OFFSET_GDC                0x2780
> +#define GS101_SUBBBLK_OFFSET_TNR                0x2800
> +#define GS101_SUBBBLK_OFFSET_BO                 0x2880
> +#define GS101_SUBBBLK_OFFSET_TPU                0x2900
> +#define GS101_SUBBBLK_OFFSET_MIF0               0x2980
> +#define GS101_SUBBBLK_OFFSET_MIF1               0x2a00
> +#define GS101_SUBBBLK_OFFSET_MIF2               0x2a80
> +#define GS101_SUBBBLK_OFFSET_MIF3               0x2b00
> +#define GS101_SUBBBLK_OFFSET_MISC               0x2b80
> +#define GS101_SUBBBLK_OFFSET_PERIC0             0x2c00
> +#define GS101_SUBBBLK_OFFSET_PERIC1             0x2c80
> +#define GS101_SUBBBLK_OFFSET_S2D                0x2d00
> +#define GS101_SUBBLK_CONFIGURATION(blk)         ((blk) + 0x00)
> +#define GS101_SUBBLK_STATUS(blk)                ((blk) + 0x04)
> +#define GS101_SUBBLK_STATES(blk)                ((blk) + 0x08)
> +#define GS101_SUBBLK_OPTION(blk)                ((blk) + 0x0c)
> +#define GS101_SUBBLK_CTRL(blk)                  ((blk) + 0x10)
> +#define GS101_SUBBLK_OUT(blk)                   ((blk) + 0x20)
> +#define GS101_SUBBLK_IN(blk)                    ((blk) + 0x24)
> +#define GS101_SUBBLK_INT_IN(blk)                ((blk) + 0x40)
> +#define GS101_SUBBLK_INT_EN(blk)                ((blk) + 0x44)
> +#define GS101_SUBBLK_INT_TYPE(blk)              ((blk) + 0x48)
> +#define GS101_SUBBLK_INT_DIR(blk)               ((blk) + 0x4c)
> +#define GS101_SUBBLK_MEMORY_OUT(blk)            ((blk) + 0x60)
> +#define GS101_SUBBLK_MEMORY_IN(blk)             ((blk) + 0x64)
> +
> +#define GS101_SUBBBLK_CPU_OFFSET_APM            0x3000
> +#define GS101_SUBBBLK_CPU_OFFSET_DBGCORE        0x3080
> +#define GS101_SUBBBLK_CPU_OFFSET_SSS            0x3100
> +#define GS101_SUBBLK_CPU_CONFIGURATION(blk)     ((blk) + 0x00)
> +#define GS101_SUBBLK_CPU_STATUS(blk)            ((blk) + 0x04)
> +#define GS101_SUBBLK_CPU_STATES(blk)            ((blk) + 0x08)
> +#define GS101_SUBBLK_CPU_OPTION(blk)            ((blk) + 0x0c)
> +#define GS101_SUBBLK_CPU_OUT(blk)               ((blk) + 0x20)
> +#define GS101_SUBBLK_CPU_IN(blk)                ((blk) + 0x24)
> +#define GS101_SUBBLK_CPU_INT_IN(blk)            ((blk) + 0x40)
> +#define GS101_SUBBLK_CPU_INT_EN(blk)            ((blk) + 0x44)
> +#define GS101_SUBBLK_CPU_INT_TYPE(blk)          ((blk) + 0x48)
> +#define GS101_SUBBLK_CPU_INT_DIR(blk)           ((blk) + 0x4c)
> +
> +#define GS101_MIF_CONFIGURATION                 0x3800
> +#define GS101_MIF_STATUS                        0x3804
> +#define GS101_MIF_STATES                        0x3808
> +#define GS101_MIF_OPTION                        0x380c
> +#define GS101_MIF_CTRL                          0x3810
> +#define GS101_MIF_OUT                           0x3820
> +#define GS101_MIF_IN                            0x3824
> +#define GS101_MIF_INT_IN                        0x3840
> +#define GS101_MIF_INT_EN                        0x3844
> +#define GS101_MIF_INT_TYPE                      0x3848
> +#define GS101_MIF_INT_DIR                       0x384c
> +#define GS101_TOP_CONFIGURATION                 0x3900
> +#define GS101_TOP_STATUS                        0x3904
> +#define GS101_TOP_STATES                        0x3908
> +#define GS101_TOP_OPTION                        0x390c
> +#define GS101_TOP_OUT                           0x3920
> +#define GS101_TOP_IN                            0x3924
> +#define GS101_TOP_INT_IN                        0x3940
> +#define GS101_TOP_INT_EN                        0x3944
> +#define GS101_TOP_INT_TYPE                      0x3948
> +#define GS101_TOP_INT_DIR                       0x394c
> +#define GS101_WAKEUP_STAT                       0x3950
> +#define GS101_WAKEUP2_STAT                      0x3954
> +#define GS101_WAKEUP2_INT_IN                    0x3960
> +#define GS101_WAKEUP2_INT_EN                    0x3964
> +#define GS101_WAKEUP2_INT_TYPE                  0x3968
> +#define GS101_WAKEUP2_INT_DIR                   0x396c
> +#define GS101_SYSTEM_CONFIGURATION              0x3a00
> +#define GS101_SYSTEM_STATUS                     0x3a04
> +#define GS101_SYSTEM_STATES                     0x3a08
> +#define GS101_SYSTEM_OPTION                     0x3a0c
> +#define GS101_SYSTEM_CTRL                       0x3a10
> +#define GS101_SPARE_CTRL                        0x3a14
> +#define GS101_USER_DEFINED_OUT                  0x3a18
> +#define GS101_SYSTEM_OUT                        0x3a20
> +#define GS101_SYSTEM_IN                         0x3a24
> +#define GS101_SYSTEM_INT_IN                     0x3a40
> +#define GS101_SYSTEM_INT_EN                     0x3a44
> +#define GS101_SYSTEM_INT_TYPE                   0x3a48
> +#define GS101_SYSTEM_INT_DIR                    0x3a4c
> +#define GS101_EINT_INT_IN                       0x3a50
> +#define GS101_EINT_INT_EN                       0x3a54
> +#define GS101_EINT_INT_TYPE                     0x3a58
> +#define GS101_EINT_INT_DIR                      0x3a5c
> +#define GS101_EINT2_INT_IN                      0x3a60
> +#define GS101_EINT2_INT_EN                      0x3a64
> +#define GS101_EINT2_INT_TYPE                    0x3a68
> +#define GS101_EINT2_INT_DIR                     0x3a6c
> +#define GS101_EINT3_INT_IN                      0x3a70
> +#define GS101_EINT3_INT_EN                      0x3a74
> +#define GS101_EINT3_INT_TYPE                    0x3a78
> +#define GS101_EINT3_INT_DIR                     0x3a7c
> +#define GS101_EINT_WAKEUP_MASK                  0x3a80
> +#define GS101_EINT_WAKEUP_MASK2                 0x3a84
> +#define GS101_EINT_WAKEUP_MASK3                 0x3a88
> +#define GS101_USER_DEFINED_INT_IN               0x3a90
> +#define GS101_USER_DEFINED_INT_EN               0x3a94
> +#define GS101_USER_DEFINED_INT_TYPE             0x3a98
> +#define GS101_USER_DEFINED_INT_DIR              0x3a9c
> +#define GS101_SCAN2DRAM_INT_IN                  0x3aa0
> +#define GS101_SCAN2DRAM_INT_EN                  0x3aa4
> +#define GS101_SCAN2DRAM_INT_TYPE                0x3aa8
> +#define GS101_SCAN2DRAM_INT_DIR                 0x3aac
> +#define GS101_HCU_START                         0x3ab0
> +#define GS101_CUSTOM_OUT                        0x3ac0
> +#define GS101_CUSTOM_IN                         0x3ac4
> +#define GS101_CUSTOM_INT_IN                     0x3ad0
> +#define GS101_CUSTOM_INT_EN                     0x3ad4
> +#define GS101_CUSTOM_INT_TYPE                   0x3ad8
> +#define GS101_CUSTOM_INT_DIR                    0x3adc
> +#define GS101_ACK_LAST_CPU                      0x3afc
> +#define GS101_HCU_R(n)                          (0x3b00 + ((n) & 3) * 4)
> +#define GS101_HCU_SP                            0x3b14
> +#define GS101_HCU_PC                            0x3b18
> +#define GS101_PMU_RAM_CTRL                      0x3b20
> +#define GS101_APM_HCU_CTRL                      0x3b24
> +#define GS101_APM_NMI_ENABLE                    0x3b30
> +#define GS101_DBGCORE_NMI_ENABLE                0x3b34
> +#define GS101_HCU_NMI_ENABLE                    0x3b38
> +#define GS101_PWR_HOLD_WDT_ENABLE               0x3b3c
> +#define GS101_NMI_SRC_IN                        0x3b40
> +#define GS101_RST_STAT                          0x3b44
> +#define GS101_RST_STAT_PMU                      0x3b48
> +#define GS101_HPM_INT_IN                        0x3b60
> +#define GS101_HPM_INT_EN                        0x3b64
> +#define GS101_HPM_INT_TYPE                      0x3b68
> +#define GS101_HPM_INT_DIR                       0x3b6c
> +#define GS101_S2D_AUTH                          0x3b70
> +#define GS101_BOOT_STAT                         0x3b74
> +#define GS101_PMLINK_OUT                        0x3c00
> +#define GS101_PMLINK_AOC_OUT                    0x3c04
> +#define GS101_PMLINK_AOC_CTRL                   0x3c08
> +#define GS101_TCXO_BUF_CTRL                     0x3c10
> +#define GS101_ADD_CTRL                          0x3c14
> +#define GS101_HCU_TIMEOUT_RESET                 0x3c20
> +#define GS101_HCU_TIMEOUT_SCAN2DRAM             0x3c24
> +#define GS101_TIMER(n)                          (0x3c80 + ((n) & 3) * 4)
> +#define GS101_PPC_MIF(n)                        (0x3c90 + ((n) & 3) * 4)
> +#define GS101_PPC_CORE                          0x3ca0
> +#define GS101_PPC_EH                            0x3ca4
> +#define GS101_PPC_CPUCL1_0                      0x3ca8
> +#define GS101_PPC_CPUCL1_1                      0x3cac
> +#define GS101_EXT_REGULATOR_MIF_DURATION        0x3cb0
> +#define GS101_EXT_REGULATOR_TOP_DURATION        0x3cb4
> +#define GS101_EXT_REGULATOR_CPUCL2_DURATION     0x3cb8
> +#define GS101_EXT_REGULATOR_CPUCL1_DURATION     0x3cbc
> +#define GS101_EXT_REGULATOR_G3D_DURATION        0x3cc0
> +#define GS101_EXT_REGULATOR_TPU_DURATION        0x3cc4
> +#define GS101_TCXO_DURATION                     0x3cc8
> +#define GS101_BURNIN_CTRL                       0x3cd0
> +#define GS101_JTAG_DBG_DET                      0x3cd4
> +#define GS101_MMC_CONWKUP_CTRL                  0x3cd8
> +#define GS101_USBDPPHY0_USBDP_WAKEUP            0x3cdc
> +#define GS101_TMU_TOP_TRIP                      0x3ce0
> +#define GS101_TMU_SUB_TRIP                      0x3ce4
> +#define GS101_MEMORY_CEN                        0x3d00
> +#define GS101_MEMORY_PGEN                       0x3d04
> +#define GS101_MEMORY_RET                        0x3d08
> +#define GS101_MEMORY_PGEN_FEEDBACK              0x3d0c
> +#define GS101_MEMORY_SMX                        0x3d10
> +#define GS101_MEMORY_SMX_FEEDBACK               0x3d14
> +#define GS101_SLC_PCH_CHANNEL                   0x3d20
> +#define GS101_SLC_PCH_CB                        0x3d24
> +#define GS101_FORCE_NOMC                        0x3d3c
> +#define GS101_FORCE_BOOST                       0x3d4c
> +#define GS101_PMLINK_SLC_REQ                    0x3d50
> +#define GS101_PMLINK_SLC_ACK                    0x3d54
> +#define GS101_PMLINK_SLC_BUSY                   0x3d58
> +#define GS101_BOOTSYNC_OUT                      0x3d80
> +#define GS101_BOOTSYNC_IN                       0x3d84
> +#define GS101_SCAN_READY_OUT                    0x3d88
> +#define GS101_SCAN_READY_IN                     0x3d8c
> +#define GS101_GSA_RESTORE                       0x3d90
> +#define GS101_ALIVE_OTP_LATCH                   0x3d94
> +#define GS101_DEBUG_OVERRIDE                    0x3d98
> +#define GS101_WDT_OPTION                        0x3d9c
> +#define GS101_AOC_WDT_CFG                       0x3da0
> +#define GS101_CTRL_SECJTAG_ALIVE                0x3da4
> +#define GS101_CTRL_DIV_PLL_ALV_DIVLOW           0x3e00
> +#define GS101_CTRL_MUX_CLK_APM_REFSRC_AUTORESTORE 0x3e04
> +#define GS101_CTRL_MUX_CLK_APM_REFSRC           0x3e08
> +#define GS101_CTRL_MUX_CLK_APM_REF              0x3e0c
> +#define GS101_CTRL_MUX_PLL_ALV_DIV4             0x3e10
> +#define GS101_CTRL_PLL_ALV_DIV4                 0x3e14
> +#define GS101_CTRL_OSCCLK_APMGSA                0x3e18
> +#define GS101_CTRL_BLK_AOC_CLKS                 0x3e1c
> +#define GS101_CTRL_PLL_ALV_LOCK                 0x3e20
> +#define GS101_CTRL_CLKDIV__CLKRTC               0x3e24
> +#define GS101_CTRL_SOC32K                       0x3e30
> +#define GS101_CTRL_STM_PMU                      0x3e34
> +#define GS101_CTRL_PMU_DEBUG                    0x3e38
> +#define GS101_CTRL_DEBUG_UART                   0x3e3c
> +#define GS101_CTRL_TCK                          0x3e40
> +#define GS101_CTRL_SBU_SW_EN                    0x3e44
> +#define GS101_PAD_CTRL_CLKOUT0                  0x3e80
> +#define GS101_PAD_CTRL_CLKOUT1                  0x3e84
> +#define GS101_PAD_CTRL_APM_24MOUT_0             0x3e88
> +#define GS101_PAD_CTRL_APM_24MOUT_1             0x3e8c
> +#define GS101_PAD_CTRL_IO_FORCE_RETENTION       0x3e90
> +#define GS101_PAD_CTRL_APACTIVE_n               0x3e94
> +#define GS101_PAD_CTRL_TCXO_ON                  0x3e98
> +#define GS101_PAD_CTRL_PWR_HOLD                 0x3e9c
> +#define GS101_PAD_CTRL_RESETO_n                 0x3ea0
> +#define GS101_PAD_CTRL_WRESETO_n                0x3ea4
> +#define GS101_PHY_CTRL_USB20                    0x3eb0
> +#define GS101_PHY_CTRL_USBDP                    0x3eb4
> +#define GS101_PHY_CTRL_MIPI_DCPHY_M4M4          0x3eb8
> +#define GS101_PHY_CTRL_MIPI_DCPHY_S4S4S4S4      0x3ebc
> +#define GS101_PHY_CTRL_PCIE_GEN4_0              0x3ec0
> +#define GS101_PHY_CTRL_PCIE_GEN4_1              0x3ec4
> +#define GS101_PHY_CTRL_UFS                      0x3ec8
>
>  /* PMU INTR GEN */
>  #define GS101_GRP1_INTR_BID_UPEND                              (0x0108)
>
> --
> 2.51.0.618.g983fd99d29-goog
>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ