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

pinctrl-rockchip.h (11813B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2020-2021 Rockchip Electronics Co. Ltd.
      4 *
      5 * Copyright (c) 2013 MundoReader S.L.
      6 * Author: Heiko Stuebner <heiko@sntech.de>
      7 *
      8 * With some ideas taken from pinctrl-samsung:
      9 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
     10 *		http://www.samsung.com
     11 * Copyright (c) 2012 Linaro Ltd
     12 *		https://www.linaro.org
     13 *
     14 * and pinctrl-at91:
     15 * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
     16 */
     17
     18#ifndef _PINCTRL_ROCKCHIP_H
     19#define _PINCTRL_ROCKCHIP_H
     20
     21#define RK_GPIO0_A0	0
     22#define RK_GPIO0_A1	1
     23#define RK_GPIO0_A2	2
     24#define RK_GPIO0_A3	3
     25#define RK_GPIO0_A4	4
     26#define RK_GPIO0_A5	5
     27#define RK_GPIO0_A6	6
     28#define RK_GPIO0_A7	7
     29#define RK_GPIO0_B0	8
     30#define RK_GPIO0_B1	9
     31#define RK_GPIO0_B2	10
     32#define RK_GPIO0_B3	11
     33#define RK_GPIO0_B4	12
     34#define RK_GPIO0_B5	13
     35#define RK_GPIO0_B6	14
     36#define RK_GPIO0_B7	15
     37#define RK_GPIO0_C0	16
     38#define RK_GPIO0_C1	17
     39#define RK_GPIO0_C2	18
     40#define RK_GPIO0_C3	19
     41#define RK_GPIO0_C4	20
     42#define RK_GPIO0_C5	21
     43#define RK_GPIO0_C6	22
     44#define RK_GPIO0_C7	23
     45#define RK_GPIO0_D0	24
     46#define RK_GPIO0_D1	25
     47#define RK_GPIO0_D2	26
     48#define RK_GPIO0_D3	27
     49#define RK_GPIO0_D4	28
     50#define RK_GPIO0_D5	29
     51#define RK_GPIO0_D6	30
     52#define RK_GPIO0_D7	31
     53
     54#define RK_GPIO1_A0	32
     55#define RK_GPIO1_A1	33
     56#define RK_GPIO1_A2	34
     57#define RK_GPIO1_A3	35
     58#define RK_GPIO1_A4	36
     59#define RK_GPIO1_A5	37
     60#define RK_GPIO1_A6	38
     61#define RK_GPIO1_A7	39
     62#define RK_GPIO1_B0	40
     63#define RK_GPIO1_B1	41
     64#define RK_GPIO1_B2	42
     65#define RK_GPIO1_B3	43
     66#define RK_GPIO1_B4	44
     67#define RK_GPIO1_B5	45
     68#define RK_GPIO1_B6	46
     69#define RK_GPIO1_B7	47
     70#define RK_GPIO1_C0	48
     71#define RK_GPIO1_C1	49
     72#define RK_GPIO1_C2	50
     73#define RK_GPIO1_C3	51
     74#define RK_GPIO1_C4	52
     75#define RK_GPIO1_C5	53
     76#define RK_GPIO1_C6	54
     77#define RK_GPIO1_C7	55
     78#define RK_GPIO1_D0	56
     79#define RK_GPIO1_D1	57
     80#define RK_GPIO1_D2	58
     81#define RK_GPIO1_D3	59
     82#define RK_GPIO1_D4	60
     83#define RK_GPIO1_D5	61
     84#define RK_GPIO1_D6	62
     85#define RK_GPIO1_D7	63
     86
     87#define RK_GPIO2_A0	64
     88#define RK_GPIO2_A1	65
     89#define RK_GPIO2_A2	66
     90#define RK_GPIO2_A3	67
     91#define RK_GPIO2_A4	68
     92#define RK_GPIO2_A5	69
     93#define RK_GPIO2_A6	70
     94#define RK_GPIO2_A7	71
     95#define RK_GPIO2_B0	72
     96#define RK_GPIO2_B1	73
     97#define RK_GPIO2_B2	74
     98#define RK_GPIO2_B3	75
     99#define RK_GPIO2_B4	76
    100#define RK_GPIO2_B5	77
    101#define RK_GPIO2_B6	78
    102#define RK_GPIO2_B7	79
    103#define RK_GPIO2_C0	80
    104#define RK_GPIO2_C1	81
    105#define RK_GPIO2_C2	82
    106#define RK_GPIO2_C3	83
    107#define RK_GPIO2_C4	84
    108#define RK_GPIO2_C5	85
    109#define RK_GPIO2_C6	86
    110#define RK_GPIO2_C7	87
    111#define RK_GPIO2_D0	88
    112#define RK_GPIO2_D1	89
    113#define RK_GPIO2_D2	90
    114#define RK_GPIO2_D3	91
    115#define RK_GPIO2_D4	92
    116#define RK_GPIO2_D5	93
    117#define RK_GPIO2_D6	94
    118#define RK_GPIO2_D7	95
    119
    120#define RK_GPIO3_A0	96
    121#define RK_GPIO3_A1	97
    122#define RK_GPIO3_A2	98
    123#define RK_GPIO3_A3	99
    124#define RK_GPIO3_A4	100
    125#define RK_GPIO3_A5	101
    126#define RK_GPIO3_A6	102
    127#define RK_GPIO3_A7	103
    128#define RK_GPIO3_B0	104
    129#define RK_GPIO3_B1	105
    130#define RK_GPIO3_B2	106
    131#define RK_GPIO3_B3	107
    132#define RK_GPIO3_B4	108
    133#define RK_GPIO3_B5	109
    134#define RK_GPIO3_B6	110
    135#define RK_GPIO3_B7	111
    136#define RK_GPIO3_C0	112
    137#define RK_GPIO3_C1	113
    138#define RK_GPIO3_C2	114
    139#define RK_GPIO3_C3	115
    140#define RK_GPIO3_C4	116
    141#define RK_GPIO3_C5	117
    142#define RK_GPIO3_C6	118
    143#define RK_GPIO3_C7	119
    144#define RK_GPIO3_D0	120
    145#define RK_GPIO3_D1	121
    146#define RK_GPIO3_D2	122
    147#define RK_GPIO3_D3	123
    148#define RK_GPIO3_D4	124
    149#define RK_GPIO3_D5	125
    150#define RK_GPIO3_D6	126
    151#define RK_GPIO3_D7	127
    152
    153#define RK_GPIO4_A0	128
    154#define RK_GPIO4_A1	129
    155#define RK_GPIO4_A2	130
    156#define RK_GPIO4_A3	131
    157#define RK_GPIO4_A4	132
    158#define RK_GPIO4_A5	133
    159#define RK_GPIO4_A6	134
    160#define RK_GPIO4_A7	135
    161#define RK_GPIO4_B0	136
    162#define RK_GPIO4_B1	137
    163#define RK_GPIO4_B2	138
    164#define RK_GPIO4_B3	139
    165#define RK_GPIO4_B4	140
    166#define RK_GPIO4_B5	141
    167#define RK_GPIO4_B6	142
    168#define RK_GPIO4_B7	143
    169#define RK_GPIO4_C0	144
    170#define RK_GPIO4_C1	145
    171#define RK_GPIO4_C2	146
    172#define RK_GPIO4_C3	147
    173#define RK_GPIO4_C4	148
    174#define RK_GPIO4_C5	149
    175#define RK_GPIO4_C6	150
    176#define RK_GPIO4_C7	151
    177#define RK_GPIO4_D0	152
    178#define RK_GPIO4_D1	153
    179#define RK_GPIO4_D2	154
    180#define RK_GPIO4_D3	155
    181#define RK_GPIO4_D4	156
    182#define RK_GPIO4_D5	157
    183#define RK_GPIO4_D6	158
    184#define RK_GPIO4_D7	159
    185
    186enum rockchip_pinctrl_type {
    187	PX30,
    188	RV1108,
    189	RK2928,
    190	RK3066B,
    191	RK3128,
    192	RK3188,
    193	RK3288,
    194	RK3308,
    195	RK3368,
    196	RK3399,
    197	RK3568,
    198	RK3588,
    199};
    200
    201/**
    202 * struct rockchip_gpio_regs
    203 * @port_dr: data register
    204 * @port_ddr: data direction register
    205 * @int_en: interrupt enable
    206 * @int_mask: interrupt mask
    207 * @int_type: interrupt trigger type, such as high, low, edge trriger type.
    208 * @int_polarity: interrupt polarity enable register
    209 * @int_bothedge: interrupt bothedge enable register
    210 * @int_status: interrupt status register
    211 * @int_rawstatus: int_status = int_rawstatus & int_mask
    212 * @debounce: enable debounce for interrupt signal
    213 * @dbclk_div_en: enable divider for debounce clock
    214 * @dbclk_div_con: setting for divider of debounce clock
    215 * @port_eoi: end of interrupt of the port
    216 * @ext_port: port data from external
    217 * @version_id: controller version register
    218 */
    219struct rockchip_gpio_regs {
    220	u32 port_dr;
    221	u32 port_ddr;
    222	u32 int_en;
    223	u32 int_mask;
    224	u32 int_type;
    225	u32 int_polarity;
    226	u32 int_bothedge;
    227	u32 int_status;
    228	u32 int_rawstatus;
    229	u32 debounce;
    230	u32 dbclk_div_en;
    231	u32 dbclk_div_con;
    232	u32 port_eoi;
    233	u32 ext_port;
    234	u32 version_id;
    235};
    236
    237/**
    238 * struct rockchip_iomux
    239 * @type: iomux variant using IOMUX_* constants
    240 * @offset: if initialized to -1 it will be autocalculated, by specifying
    241 *	    an initial offset value the relevant source offset can be reset
    242 *	    to a new value for autocalculating the following iomux registers.
    243 */
    244struct rockchip_iomux {
    245	int type;
    246	int offset;
    247};
    248
    249/*
    250 * enum type index corresponding to rockchip_perpin_drv_list arrays index.
    251 */
    252enum rockchip_pin_drv_type {
    253	DRV_TYPE_IO_DEFAULT = 0,
    254	DRV_TYPE_IO_1V8_OR_3V0,
    255	DRV_TYPE_IO_1V8_ONLY,
    256	DRV_TYPE_IO_1V8_3V0_AUTO,
    257	DRV_TYPE_IO_3V3_ONLY,
    258	DRV_TYPE_MAX
    259};
    260
    261/*
    262 * enum type index corresponding to rockchip_pull_list arrays index.
    263 */
    264enum rockchip_pin_pull_type {
    265	PULL_TYPE_IO_DEFAULT = 0,
    266	PULL_TYPE_IO_1V8_ONLY,
    267	PULL_TYPE_MAX
    268};
    269
    270/**
    271 * struct rockchip_drv
    272 * @drv_type: drive strength variant using rockchip_perpin_drv_type
    273 * @offset: if initialized to -1 it will be autocalculated, by specifying
    274 *	    an initial offset value the relevant source offset can be reset
    275 *	    to a new value for autocalculating the following drive strength
    276 *	    registers. if used chips own cal_drv func instead to calculate
    277 *	    registers offset, the variant could be ignored.
    278 */
    279struct rockchip_drv {
    280	enum rockchip_pin_drv_type	drv_type;
    281	int				offset;
    282};
    283
    284/**
    285 * struct rockchip_pin_bank
    286 * @dev: the pinctrl device bind to the bank
    287 * @reg_base: register base of the gpio bank
    288 * @regmap_pull: optional separate register for additional pull settings
    289 * @clk: clock of the gpio bank
    290 * @db_clk: clock of the gpio debounce
    291 * @irq: interrupt of the gpio bank
    292 * @saved_masks: Saved content of GPIO_INTEN at suspend time.
    293 * @pin_base: first pin number
    294 * @nr_pins: number of pins in this bank
    295 * @name: name of the bank
    296 * @bank_num: number of the bank, to account for holes
    297 * @iomux: array describing the 4 iomux sources of the bank
    298 * @drv: array describing the 4 drive strength sources of the bank
    299 * @pull_type: array describing the 4 pull type sources of the bank
    300 * @valid: is all necessary information present
    301 * @of_node: dt node of this bank
    302 * @drvdata: common pinctrl basedata
    303 * @domain: irqdomain of the gpio bank
    304 * @gpio_chip: gpiolib chip
    305 * @grange: gpio range
    306 * @slock: spinlock for the gpio bank
    307 * @toggle_edge_mode: bit mask to toggle (falling/rising) edge mode
    308 * @recalced_mask: bit mask to indicate a need to recalulate the mask
    309 * @route_mask: bits describing the routing pins of per bank
    310 * @deferred_output: gpio output settings to be done after gpio bank probed
    311 * @deferred_lock: mutex for the deferred_output shared btw gpio and pinctrl
    312 */
    313struct rockchip_pin_bank {
    314	struct device			*dev;
    315	void __iomem			*reg_base;
    316	struct regmap			*regmap_pull;
    317	struct clk			*clk;
    318	struct clk			*db_clk;
    319	int				irq;
    320	u32				saved_masks;
    321	u32				pin_base;
    322	u8				nr_pins;
    323	char				*name;
    324	u8				bank_num;
    325	struct rockchip_iomux		iomux[4];
    326	struct rockchip_drv		drv[4];
    327	enum rockchip_pin_pull_type	pull_type[4];
    328	bool				valid;
    329	struct device_node		*of_node;
    330	struct rockchip_pinctrl		*drvdata;
    331	struct irq_domain		*domain;
    332	struct gpio_chip		gpio_chip;
    333	struct pinctrl_gpio_range	grange;
    334	raw_spinlock_t			slock;
    335	const struct rockchip_gpio_regs	*gpio_regs;
    336	u32				gpio_type;
    337	u32				toggle_edge_mode;
    338	u32				recalced_mask;
    339	u32				route_mask;
    340	struct list_head		deferred_pins;
    341	struct mutex			deferred_lock;
    342};
    343
    344/**
    345 * struct rockchip_mux_recalced_data: represent a pin iomux data.
    346 * @num: bank number.
    347 * @pin: pin number.
    348 * @bit: index at register.
    349 * @reg: register offset.
    350 * @mask: mask bit
    351 */
    352struct rockchip_mux_recalced_data {
    353	u8 num;
    354	u8 pin;
    355	u32 reg;
    356	u8 bit;
    357	u8 mask;
    358};
    359
    360enum rockchip_mux_route_location {
    361	ROCKCHIP_ROUTE_SAME = 0,
    362	ROCKCHIP_ROUTE_PMU,
    363	ROCKCHIP_ROUTE_GRF,
    364};
    365
    366/**
    367 * struct rockchip_mux_recalced_data: represent a pin iomux data.
    368 * @bank_num: bank number.
    369 * @pin: index at register or used to calc index.
    370 * @func: the min pin.
    371 * @route_location: the mux route location (same, pmu, grf).
    372 * @route_offset: the max pin.
    373 * @route_val: the register offset.
    374 */
    375struct rockchip_mux_route_data {
    376	u8 bank_num;
    377	u8 pin;
    378	u8 func;
    379	enum rockchip_mux_route_location route_location;
    380	u32 route_offset;
    381	u32 route_val;
    382};
    383
    384struct rockchip_pin_ctrl {
    385	struct rockchip_pin_bank	*pin_banks;
    386	u32				nr_banks;
    387	u32				nr_pins;
    388	char				*label;
    389	enum rockchip_pinctrl_type	type;
    390	int				grf_mux_offset;
    391	int				pmu_mux_offset;
    392	int				grf_drv_offset;
    393	int				pmu_drv_offset;
    394	struct rockchip_mux_recalced_data *iomux_recalced;
    395	u32				niomux_recalced;
    396	struct rockchip_mux_route_data *iomux_routes;
    397	u32				niomux_routes;
    398
    399	int	(*pull_calc_reg)(struct rockchip_pin_bank *bank,
    400				    int pin_num, struct regmap **regmap,
    401				    int *reg, u8 *bit);
    402	int	(*drv_calc_reg)(struct rockchip_pin_bank *bank,
    403				    int pin_num, struct regmap **regmap,
    404				    int *reg, u8 *bit);
    405	int	(*schmitt_calc_reg)(struct rockchip_pin_bank *bank,
    406				    int pin_num, struct regmap **regmap,
    407				    int *reg, u8 *bit);
    408};
    409
    410struct rockchip_pin_config {
    411	unsigned int		func;
    412	unsigned long		*configs;
    413	unsigned int		nconfigs;
    414};
    415
    416enum pin_config_param;
    417
    418struct rockchip_pin_deferred {
    419	struct list_head head;
    420	unsigned int pin;
    421	enum pin_config_param param;
    422	u32 arg;
    423};
    424
    425/**
    426 * struct rockchip_pin_group: represent group of pins of a pinmux function.
    427 * @name: name of the pin group, used to lookup the group.
    428 * @pins: the pins included in this group.
    429 * @npins: number of pins included in this group.
    430 * @data: local pin configuration
    431 */
    432struct rockchip_pin_group {
    433	const char			*name;
    434	unsigned int			npins;
    435	unsigned int			*pins;
    436	struct rockchip_pin_config	*data;
    437};
    438
    439/**
    440 * struct rockchip_pmx_func: represent a pin function.
    441 * @name: name of the pin function, used to lookup the function.
    442 * @groups: one or more names of pin groups that provide this function.
    443 * @ngroups: number of groups included in @groups.
    444 */
    445struct rockchip_pmx_func {
    446	const char		*name;
    447	const char		**groups;
    448	u8			ngroups;
    449};
    450
    451struct rockchip_pinctrl {
    452	struct regmap			*regmap_base;
    453	int				reg_size;
    454	struct regmap			*regmap_pull;
    455	struct regmap			*regmap_pmu;
    456	struct device			*dev;
    457	struct rockchip_pin_ctrl	*ctrl;
    458	struct pinctrl_desc		pctl;
    459	struct pinctrl_dev		*pctl_dev;
    460	struct rockchip_pin_group	*groups;
    461	unsigned int			ngroups;
    462	struct rockchip_pmx_func	*functions;
    463	unsigned int			nfunctions;
    464};
    465
    466#endif