1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-09-16 03:59:21 +00:00
Files
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

287 lines
5.4 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#ifndef __MTK_DCM_COMMON_H__
#define __MTK_DCM_COMMON_H__
#include <linux/ratelimit.h>
#define DCM_OFF (0)
#define DCM_ON (1)
#define DCM_DEFAULT (-1)
#define TAG "[Power/dcm] "
#define dcm_pr_notice(fmt, args...) \
pr_notice(TAG fmt, ##args)
#define dcm_pr_info_limit(fmt, args...) \
pr_info_ratelimited(TAG fmt, ##args)
#define dcm_pr_info(fmt, args...) \
pr_info(TAG fmt, ##args)
#define dcm_pr_dbg(fmt, args...) \
do { \
if (dcm_debug) \
pr_info(TAG fmt, ##args); \
} while (0)
/** macro **/
#define and(v, a) ((v) & (a))
#define or(v, o) ((v) | (o))
#define aor(v, a, o) (((v) & (a)) | (o))
#define DCM_BASE_INFO(_name) \
{ \
.name = #_name, \
.base = &_name, \
}
/**/
enum {
ARMCORE_DCM_OFF = DCM_OFF,
ARMCORE_DCM_MODE1 = DCM_ON,
ARMCORE_DCM_MODE2 = DCM_ON+1,
};
enum {
INFRA_DCM_OFF = DCM_OFF,
INFRA_DCM_ON = DCM_ON,
};
enum {
PERI_DCM_OFF = DCM_OFF,
PERI_DCM_ON = DCM_ON,
};
enum {
MCUSYS_ACP_DCM_OFF = DCM_OFF,
MCUSYS_ACP_DCM_ON = DCM_ON,
};
enum {
MCUSYS_ADB_DCM_OFF = DCM_OFF,
MCUSYS_ADB_DCM_ON = DCM_ON,
};
enum {
MCUSYS_BUS_DCM_OFF = DCM_OFF,
MCUSYS_BUS_DCM_ON = DCM_ON,
};
enum {
MCUSYS_CBIP_DCM_OFF = DCM_OFF,
MCUSYS_CBIP_DCM_ON = DCM_ON,
};
enum {
MCUSYS_CORE_DCM_OFF = DCM_OFF,
MCUSYS_CORE_DCM_ON = DCM_ON,
};
enum {
MCUSYS_IO_DCM_OFF = DCM_OFF,
MCUSYS_IO_DCM_ON = DCM_ON,
};
enum {
MCUSYS_CPC_PBI_DCM_OFF = DCM_OFF,
MCUSYS_CPC_PBI_DCM_ON = DCM_ON,
};
enum {
MCUSYS_CPC_TURBO_DCM_OFF = DCM_OFF,
MCUSYS_CPC_TURBO_DCM_ON = DCM_ON,
};
enum {
MCUSYS_STALL_DCM_OFF = DCM_OFF,
MCUSYS_STALL_DCM_ON = DCM_ON,
};
enum {
MCUSYS_APB_DCM_OFF = DCM_OFF,
MCUSYS_APB_DCM_ON = DCM_ON,
};
enum {
MCUSYS_DCM_OFF = DCM_OFF,
MCUSYS_DCM_ON = DCM_ON,
};
enum {
VLP_DCM_OFF = DCM_OFF,
VLP_DCM_ON = DCM_ON,
};
enum {
STALL_DCM_OFF = DCM_OFF,
STALL_DCM_ON = DCM_ON,
};
enum {
DRAMC_AO_DCM_OFF = DCM_OFF,
DRAMC_AO_DCM_ON = DCM_ON,
};
enum {
DDRPHY_DCM_OFF = DCM_OFF,
DDRPHY_DCM_ON = DCM_ON,
};
enum {
EMI_DCM_OFF = DCM_OFF,
EMI_DCM_ON = DCM_ON,
};
enum {
BIG_CORE_DCM_OFF = DCM_OFF,
BIG_CORE_DCM_ON = DCM_ON,
};
enum {
GIC_SYNC_DCM_OFF = DCM_OFF,
GIC_SYNC_DCM_ON = DCM_ON,
};
enum {
LAST_CORE_DCM_OFF = DCM_OFF,
LAST_CORE_DCM_ON = DCM_ON,
};
enum {
RGU_DCM_OFF = DCM_OFF,
RGU_DCM_ON = DCM_ON,
};
enum {
TOPCKG_DCM_OFF = DCM_OFF,
TOPCKG_DCM_ON = DCM_ON,
};
enum {
LPDMA_DCM_OFF = DCM_OFF,
LPDMA_DCM_ON = DCM_ON,
};
enum {
PWRAP_DCM_OFF = DCM_OFF,
PWRAP_DCM_ON = DCM_ON,
};
enum {
MCSI_DCM_OFF = DCM_OFF,
MCSI_DCM_ON = DCM_ON,
};
enum {
ARMCORE_DCM = 0,
MCUSYS_DCM,
INFRA_DCM,
PERI_DCM,
MCUSYS_ACP_DCM,
MCUSYS_ADB_DCM,
MCUSYS_BUS_DCM,
MCUSYS_CBIP_DCM,
MCUSYS_CORE_DCM,
MCUSYS_IO_DCM,
MCUSYS_CPC_PBI_DCM,
MCUSYS_CPC_TURBO_DCM,
MCUSYS_STALL_DCM,
MCUSYS_APB_DCM,
VLP_DCM,
EMI_DCM,
DRAMC_DCM,
DDRPHY_DCM,
STALL_DCM,
BIG_CORE_DCM,
GIC_SYNC_DCM,
LAST_CORE_DCM,
RGU_DCM,
TOPCKG_DCM,
LPDMA_DCM,
MCSI_DCM,
NR_DCM,
};
enum {
ARMCORE_DCM_TYPE = (1U << ARMCORE_DCM),
MCUSYS_DCM_TYPE = (1U << MCUSYS_DCM),
INFRA_DCM_TYPE = (1U << INFRA_DCM),
PERI_DCM_TYPE = (1U << PERI_DCM),
MCUSYS_ACP_DCM_TYPE = (1U << MCUSYS_ACP_DCM),
MCUSYS_ADB_DCM_TYPE = (1U << MCUSYS_ADB_DCM),
MCUSYS_BUS_DCM_TYPE = (1U << MCUSYS_BUS_DCM),
MCUSYS_CBIP_DCM_TYPE = (1U << MCUSYS_CBIP_DCM),
MCUSYS_CORE_DCM_TYPE = (1U << MCUSYS_CORE_DCM),
MCUSYS_IO_DCM_TYPE = (1U << MCUSYS_IO_DCM),
MCUSYS_CPC_PBI_DCM_TYPE = (1U << MCUSYS_CPC_PBI_DCM),
MCUSYS_CPC_TURBO_DCM_TYPE = (1U << MCUSYS_CPC_TURBO_DCM),
MCUSYS_STALL_DCM_TYPE = (1U << MCUSYS_STALL_DCM),
MCUSYS_APB_DCM_TYPE = (1U << MCUSYS_APB_DCM),
VLP_DCM_TYPE = (1U << VLP_DCM),
EMI_DCM_TYPE = (1U << EMI_DCM),
DRAMC_DCM_TYPE = (1U << DRAMC_DCM),
DDRPHY_DCM_TYPE = (1U << DDRPHY_DCM),
STALL_DCM_TYPE = (1U << STALL_DCM),
BIG_CORE_DCM_TYPE = (1U << BIG_CORE_DCM),
GIC_SYNC_DCM_TYPE = (1U << GIC_SYNC_DCM),
LAST_CORE_DCM_TYPE = (1U << LAST_CORE_DCM),
RGU_DCM_TYPE = (1U << RGU_DCM),
TOPCKG_DCM_TYPE = (1U << TOPCKG_DCM),
LPDMA_DCM_TYPE = (1U << LPDMA_DCM),
MCSI_DCM_TYPE = (1U << MCSI_DCM),
NR_DCM_TYPE = NR_DCM,
};
enum {
DCM_CPU_CLUSTER_LL = (1U << 0),
DCM_CPU_CLUSTER_L = (1U << 1),
DCM_CPU_CLUSTER_B = (1U << 2),
};
/*****************************************************/
typedef int (*DCM_FUNC)(int);
typedef void (*DCM_FUNC_VOID_VOID)(void);
typedef void (*DCM_FUNC_VOID_UINTR)(unsigned int *);
typedef void (*DCM_FUNC_VOID_UINTR_INTR)(unsigned int *, int *);
typedef void (*DCM_PRESET_FUNC)(void);
typedef void (*DCM_FUNC_VOID_UINT)(unsigned int);
struct DCM_OPS {
DCM_FUNC_VOID_VOID dump_regs;
DCM_FUNC_VOID_UINTR_INTR get_default;
DCM_FUNC_VOID_UINTR get_init_type;
DCM_FUNC_VOID_UINTR get_all_type;
DCM_FUNC_VOID_UINTR get_init_by_k_type;
DCM_FUNC_VOID_UINT set_debug_mode;
};
struct DCM_BASE {
char *name;
unsigned long *base;
};
struct DCM {
int current_state;
int saved_state;
int disable_refcnt;
int default_state;
DCM_FUNC func;
DCM_PRESET_FUNC preset_func;
int typeid;
char *name;
};
/*extern short dcm_debug;*/
/*extern short dcm_initiated;*/
/*extern unsigned int all_dcm_type;*/
/*extern unsigned int init_dcm_type;*/
/*extern struct mutex dcm_lock;*/
/*void dcm_dump_regs(void);*/
/*int dcm_smc_get_cnt(int type_id);*/
/*void dcm_smc_msg_send(unsigned int msg);*/
/*short is_dcm_bringup(void);*/
#endif /* #ifndef __MTK_DCM_COMMON_H__ */