cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gate.h (5778B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2//
      3// Spreadtrum gate clock driver
      4//
      5// Copyright (C) 2017 Spreadtrum, Inc.
      6// Author: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
      7
      8#ifndef _SPRD_GATE_H_
      9#define _SPRD_GATE_H_
     10
     11#include "common.h"
     12
     13struct sprd_gate {
     14	u32			enable_mask;
     15	u16			flags;
     16	u16			sc_offset;
     17	u16			udelay;
     18
     19	struct sprd_clk_common	common;
     20};
     21
     22/*
     23 * sprd_gate->flags is used for:
     24 * CLK_GATE_SET_TO_DISABLE	BIT(0)
     25 * CLK_GATE_HIWORD_MASK		BIT(1)
     26 * CLK_GATE_BIG_ENDIAN		BIT(2)
     27 * so we define new flags from	BIT(3)
     28 */
     29#define SPRD_GATE_NON_AON BIT(3) /* not alway powered on, check before read */
     30
     31#define SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg,	\
     32				    _sc_offset, _enable_mask, _flags,	\
     33				    _gate_flags, _udelay, _ops, _fn)	\
     34	struct sprd_gate _struct = {					\
     35		.enable_mask	= _enable_mask,				\
     36		.sc_offset	= _sc_offset,				\
     37		.flags		= _gate_flags,				\
     38		.udelay		= _udelay,				\
     39		.common	= {						\
     40			.regmap		= NULL,				\
     41			.reg		= _reg,				\
     42			.hw.init	= _fn(_name, _parent,		\
     43					      _ops, _flags),		\
     44		}							\
     45	}
     46
     47#define SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg,	\
     48				    _sc_offset, _enable_mask, _flags,	\
     49				    _gate_flags, _udelay, _ops)		\
     50	SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg,	\
     51				    _sc_offset, _enable_mask, _flags,	\
     52				    _gate_flags, _udelay, _ops, CLK_HW_INIT)
     53
     54#define SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset,	\
     55			     _enable_mask, _flags, _gate_flags, _ops)	\
     56	SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg,	\
     57				    _sc_offset, _enable_mask, _flags,	\
     58				    _gate_flags, 0, _ops)
     59
     60#define SPRD_SC_GATE_CLK(_struct, _name, _parent, _reg, _sc_offset,	\
     61			 _enable_mask, _flags, _gate_flags)		\
     62	SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset,	\
     63			     _enable_mask, _flags, _gate_flags,		\
     64			     &sprd_sc_gate_ops)
     65
     66#define SPRD_GATE_CLK(_struct, _name, _parent, _reg,			\
     67		      _enable_mask, _flags, _gate_flags)		\
     68	SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, 0,		\
     69			     _enable_mask, _flags, _gate_flags,		\
     70			     &sprd_gate_ops)
     71
     72#define SPRD_PLL_SC_GATE_CLK(_struct, _name, _parent, _reg, _sc_offset,	\
     73			     _enable_mask, _flags, _gate_flags,		\
     74			     _udelay)					\
     75	SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg,	\
     76				    _sc_offset,	_enable_mask, _flags,	\
     77				    _gate_flags, _udelay,		\
     78				    &sprd_pll_sc_gate_ops)
     79
     80
     81#define SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg,	\
     82				       _sc_offset, _enable_mask,	\
     83				       _flags, _gate_flags,		\
     84				       _udelay, _ops)			\
     85	SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg,	\
     86				    _sc_offset, _enable_mask, _flags,	\
     87				    _gate_flags, _udelay, _ops,		\
     88				    CLK_HW_INIT_HW)
     89
     90#define SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg,		\
     91				_sc_offset, _enable_mask, _flags,	\
     92				_gate_flags, _ops)			\
     93	SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg,	\
     94				       _sc_offset, _enable_mask,	\
     95				       _flags, _gate_flags, 0, _ops)
     96
     97#define SPRD_SC_GATE_CLK_HW(_struct, _name, _parent, _reg,		\
     98			    _sc_offset, _enable_mask, _flags,		\
     99			    _gate_flags)				\
    100	SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg,		\
    101				_sc_offset, _enable_mask, _flags,	\
    102				_gate_flags, &sprd_sc_gate_ops)
    103
    104#define SPRD_GATE_CLK_HW(_struct, _name, _parent, _reg,			\
    105			 _enable_mask, _flags, _gate_flags)		\
    106	SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg, 0,	\
    107				_enable_mask, _flags, _gate_flags,	\
    108				&sprd_gate_ops)
    109
    110#define SPRD_PLL_SC_GATE_CLK_HW(_struct, _name, _parent, _reg,		\
    111				_sc_offset, _enable_mask, _flags,	\
    112				_gate_flags, _udelay)			\
    113	SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg,	\
    114				       _sc_offset, _enable_mask,	\
    115				       _flags, _gate_flags, _udelay,	\
    116				       &sprd_pll_sc_gate_ops)
    117
    118#define SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent,	\
    119					    _reg, _sc_offset,		\
    120					    _enable_mask, _flags,	\
    121					    _gate_flags, _udelay, _ops)	\
    122	SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg,	\
    123				    _sc_offset, _enable_mask, _flags,	\
    124				    _gate_flags, _udelay, _ops,		\
    125				    CLK_HW_INIT_FW_NAME)
    126
    127#define SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg,	\
    128				     _sc_offset, _enable_mask, _flags,	\
    129				     _gate_flags, _ops)			\
    130	SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent,	\
    131					    _reg, _sc_offset,		\
    132					    _enable_mask, _flags,	\
    133					    _gate_flags, 0, _ops)
    134
    135#define SPRD_SC_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg,		\
    136				 _sc_offset, _enable_mask, _flags,	\
    137				 _gate_flags)				\
    138	SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg,	\
    139				     _sc_offset, _enable_mask, _flags,	\
    140				     _gate_flags, &sprd_sc_gate_ops)
    141
    142#define SPRD_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg,		\
    143			      _enable_mask, _flags, _gate_flags)	\
    144	SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg, 0,	\
    145				     _enable_mask, _flags, _gate_flags,	\
    146				     &sprd_gate_ops)
    147
    148#define SPRD_PLL_SC_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg,	\
    149				     _sc_offset, _enable_mask, _flags,	\
    150				     _gate_flags, _udelay)		\
    151	SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent,	\
    152					    _reg, _sc_offset,		\
    153					    _enable_mask, _flags,	\
    154					    _gate_flags, _udelay,	\
    155					    &sprd_pll_sc_gate_ops)
    156
    157static inline struct sprd_gate *hw_to_sprd_gate(const struct clk_hw *hw)
    158{
    159	struct sprd_clk_common *common = hw_to_sprd_clk_common(hw);
    160
    161	return container_of(common, struct sprd_gate, common);
    162}
    163
    164extern const struct clk_ops sprd_gate_ops;
    165extern const struct clk_ops sprd_sc_gate_ops;
    166extern const struct clk_ops sprd_pll_sc_gate_ops;
    167
    168#endif /* _SPRD_GATE_H_ */