12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /* SPDX-License-Identifier: GPL-2.0-or-later */
- /*
- * Structures used by ASPEED clock drivers
- *
- * Copyright 2019 IBM Corp.
- */
- #include <linux/clk-provider.h>
- #include <linux/kernel.h>
- #include <linux/reset-controller.h>
- #include <linux/spinlock.h>
- struct clk_div_table;
- struct regmap;
- /**
- * struct aspeed_gate_data - Aspeed gated clocks
- * @clock_idx: bit used to gate this clock in the clock register
- * @reset_idx: bit used to reset this IP in the reset register. -1 if no
- * reset is required when enabling the clock
- * @name: the clock name
- * @parent_name: the name of the parent clock
- * @flags: standard clock framework flags
- */
- struct aspeed_gate_data {
- u8 clock_idx;
- s8 reset_idx;
- const char *name;
- const char *parent_name;
- unsigned long flags;
- };
- /**
- * struct aspeed_clk_gate - Aspeed specific clk_gate structure
- * @hw: handle between common and hardware-specific interfaces
- * @reg: register controlling gate
- * @clock_idx: bit used to gate this clock in the clock register
- * @reset_idx: bit used to reset this IP in the reset register. -1 if no
- * reset is required when enabling the clock
- * @flags: hardware-specific flags
- * @lock: register lock
- *
- * Some of the clocks in the Aspeed SoC must be put in reset before enabling.
- * This modified version of clk_gate allows an optional reset bit to be
- * specified.
- */
- struct aspeed_clk_gate {
- struct clk_hw hw;
- struct regmap *map;
- u8 clock_idx;
- s8 reset_idx;
- u8 flags;
- spinlock_t *lock;
- };
- #define to_aspeed_clk_gate(_hw) container_of(_hw, struct aspeed_clk_gate, hw)
- /**
- * struct aspeed_reset - Aspeed reset controller
- * @map: regmap to access the containing system controller
- * @rcdev: reset controller device
- */
- struct aspeed_reset {
- struct regmap *map;
- struct reset_controller_dev rcdev;
- };
- #define to_aspeed_reset(p) container_of((p), struct aspeed_reset, rcdev)
- /**
- * struct aspeed_clk_soc_data - Aspeed SoC specific divisor information
- * @div_table: Common divider lookup table
- * @eclk_div_table: Divider lookup table for ECLK
- * @mac_div_table: Divider lookup table for MAC (Ethernet) clocks
- * @calc_pll: Callback to maculate common PLL settings
- */
- struct aspeed_clk_soc_data {
- const struct clk_div_table *div_table;
- const struct clk_div_table *eclk_div_table;
- const struct clk_div_table *mac_div_table;
- struct clk_hw *(*calc_pll)(const char *name, u32 val);
- };
|