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

clk-aspeed.h (2397B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Structures used by ASPEED clock drivers
      4 *
      5 * Copyright 2019 IBM Corp.
      6 */
      7
      8#include <linux/clk-provider.h>
      9#include <linux/kernel.h>
     10#include <linux/reset-controller.h>
     11#include <linux/spinlock.h>
     12
     13struct clk_div_table;
     14struct regmap;
     15
     16/**
     17 * struct aspeed_gate_data - Aspeed gated clocks
     18 * @clock_idx: bit used to gate this clock in the clock register
     19 * @reset_idx: bit used to reset this IP in the reset register. -1 if no
     20 *             reset is required when enabling the clock
     21 * @name: the clock name
     22 * @parent_name: the name of the parent clock
     23 * @flags: standard clock framework flags
     24 */
     25struct aspeed_gate_data {
     26	u8		clock_idx;
     27	s8		reset_idx;
     28	const char	*name;
     29	const char	*parent_name;
     30	unsigned long	flags;
     31};
     32
     33/**
     34 * struct aspeed_clk_gate - Aspeed specific clk_gate structure
     35 * @hw:		handle between common and hardware-specific interfaces
     36 * @reg:	register controlling gate
     37 * @clock_idx:	bit used to gate this clock in the clock register
     38 * @reset_idx:	bit used to reset this IP in the reset register. -1 if no
     39 *		reset is required when enabling the clock
     40 * @flags:	hardware-specific flags
     41 * @lock:	register lock
     42 *
     43 * Some of the clocks in the Aspeed SoC must be put in reset before enabling.
     44 * This modified version of clk_gate allows an optional reset bit to be
     45 * specified.
     46 */
     47struct aspeed_clk_gate {
     48	struct clk_hw	hw;
     49	struct regmap	*map;
     50	u8		clock_idx;
     51	s8		reset_idx;
     52	u8		flags;
     53	spinlock_t	*lock;
     54};
     55
     56#define to_aspeed_clk_gate(_hw) container_of(_hw, struct aspeed_clk_gate, hw)
     57
     58/**
     59 * struct aspeed_reset - Aspeed reset controller
     60 * @map: regmap to access the containing system controller
     61 * @rcdev: reset controller device
     62 */
     63struct aspeed_reset {
     64	struct regmap			*map;
     65	struct reset_controller_dev	rcdev;
     66};
     67
     68#define to_aspeed_reset(p) container_of((p), struct aspeed_reset, rcdev)
     69
     70/**
     71 * struct aspeed_clk_soc_data - Aspeed SoC specific divisor information
     72 * @div_table: Common divider lookup table
     73 * @eclk_div_table: Divider lookup table for ECLK
     74 * @mac_div_table: Divider lookup table for MAC (Ethernet) clocks
     75 * @calc_pll: Callback to maculate common PLL settings
     76 */
     77struct aspeed_clk_soc_data {
     78	const struct clk_div_table *div_table;
     79	const struct clk_div_table *eclk_div_table;
     80	const struct clk_div_table *mac_div_table;
     81	struct clk_hw *(*calc_pll)(const char *name, u32 val);
     82};