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

psc.h (3262B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Clock driver for TI Davinci PSC controllers
      4 *
      5 * Copyright (C) 2018 David Lechner <david@lechnology.com>
      6 */
      7
      8#ifndef __CLK_DAVINCI_PSC_H__
      9#define __CLK_DAVINCI_PSC_H__
     10
     11#include <linux/clk-provider.h>
     12#include <linux/types.h>
     13
     14/* PSC quirk flags */
     15#define LPSC_ALWAYS_ENABLED	BIT(0) /* never disable this clock */
     16#define LPSC_SET_RATE_PARENT	BIT(1) /* propagate set_rate to parent clock */
     17#define LPSC_FORCE		BIT(2) /* requires MDCTL FORCE bit */
     18#define LPSC_LOCAL_RESET	BIT(3) /* acts as reset provider */
     19
     20struct davinci_lpsc_clkdev_info {
     21	const char *con_id;
     22	const char *dev_id;
     23};
     24
     25#define LPSC_CLKDEV(c, d) {	\
     26	.con_id = (c),		\
     27	.dev_id = (d)		\
     28}
     29
     30#define LPSC_CLKDEV1(n, c, d) \
     31static const struct davinci_lpsc_clkdev_info n[] __initconst = {	\
     32	LPSC_CLKDEV((c), (d)),						\
     33	{ }								\
     34}
     35
     36#define LPSC_CLKDEV2(n, c1, d1, c2, d2) \
     37static const struct davinci_lpsc_clkdev_info n[] __initconst = {	\
     38	LPSC_CLKDEV((c1), (d1)),					\
     39	LPSC_CLKDEV((c2), (d2)),					\
     40	{ }								\
     41}
     42
     43#define LPSC_CLKDEV3(n, c1, d1, c2, d2, c3, d3) \
     44static const struct davinci_lpsc_clkdev_info n[] __initconst = {	\
     45	LPSC_CLKDEV((c1), (d1)),					\
     46	LPSC_CLKDEV((c2), (d2)),					\
     47	LPSC_CLKDEV((c3), (d3)),					\
     48	{ }								\
     49}
     50
     51/**
     52 * davinci_lpsc_clk_info - LPSC module-specific clock information
     53 * @name: the clock name
     54 * @parent: the parent clock name
     55 * @cdevs: optional array of clkdev lookup table info
     56 * @md: the local module domain (LPSC id)
     57 * @pd: the power domain id
     58 * @flags: bitmask of LPSC_* flags
     59 */
     60struct davinci_lpsc_clk_info {
     61	const char *name;
     62	const char *parent;
     63	const struct davinci_lpsc_clkdev_info *cdevs;
     64	u32 md;
     65	u32 pd;
     66	unsigned long flags;
     67};
     68
     69#define LPSC(m, d, n, p, c, f)	\
     70{				\
     71	.name	= #n,		\
     72	.parent	= #p,		\
     73	.cdevs	= (c),		\
     74	.md	= (m),		\
     75	.pd	= (d),		\
     76	.flags	= (f),		\
     77}
     78
     79int davinci_psc_register_clocks(struct device *dev,
     80				const struct davinci_lpsc_clk_info *info,
     81				u8 num_clks,
     82				void __iomem *base);
     83
     84int of_davinci_psc_clk_init(struct device *dev,
     85			    const struct davinci_lpsc_clk_info *info,
     86			    u8 num_clks,
     87			    void __iomem *base);
     88
     89/* Device-specific data */
     90
     91struct davinci_psc_init_data {
     92	struct clk_bulk_data *parent_clks;
     93	int num_parent_clks;
     94	int (*psc_init)(struct device *dev, void __iomem *base);
     95};
     96
     97#ifdef CONFIG_ARCH_DAVINCI_DA830
     98extern const struct davinci_psc_init_data da830_psc0_init_data;
     99extern const struct davinci_psc_init_data da830_psc1_init_data;
    100#endif
    101#ifdef CONFIG_ARCH_DAVINCI_DA850
    102extern const struct davinci_psc_init_data da850_psc0_init_data;
    103extern const struct davinci_psc_init_data da850_psc1_init_data;
    104extern const struct davinci_psc_init_data of_da850_psc0_init_data;
    105extern const struct davinci_psc_init_data of_da850_psc1_init_data;
    106#endif
    107#ifdef CONFIG_ARCH_DAVINCI_DM355
    108extern const struct davinci_psc_init_data dm355_psc_init_data;
    109#endif
    110#ifdef CONFIG_ARCH_DAVINCI_DM365
    111extern const struct davinci_psc_init_data dm365_psc_init_data;
    112#endif
    113#ifdef CONFIG_ARCH_DAVINCI_DM644x
    114extern const struct davinci_psc_init_data dm644x_psc_init_data;
    115#endif
    116#ifdef CONFIG_ARCH_DAVINCI_DM646x
    117extern const struct davinci_psc_init_data dm646x_psc_init_data;
    118#endif
    119
    120#endif /* __CLK_DAVINCI_PSC_H__ */