1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * OMAP SoC specific OPP Data helpers |
4 | * |
5 | * Copyright (C) 2009-2010 Texas Instruments Incorporated - https://www.ti.com/ |
6 | * Nishanth Menon |
7 | * Kevin Hilman |
8 | * Copyright (C) 2010 Nokia Corporation. |
9 | * Eduardo Valentin |
10 | */ |
11 | #ifndef __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H |
12 | #define __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H |
13 | |
14 | #include "omap_hwmod.h" |
15 | |
16 | #include "voltage.h" |
17 | |
18 | /* |
19 | * *BIG FAT WARNING*: |
20 | * USE the following ONLY in opp data initialization common to an SoC. |
21 | * DO NOT USE these in board files/pm core etc. |
22 | */ |
23 | |
24 | /** |
25 | * struct omap_opp_def - OMAP OPP Definition |
26 | * @hwmod_name: Name of the hwmod for this domain |
27 | * @freq: Frequency in hertz corresponding to this OPP |
28 | * @u_volt: Nominal voltage in microvolts corresponding to this OPP |
29 | * @default_available: True/false - is this OPP available by default |
30 | * |
31 | * OMAP SOCs have a standard set of tuples consisting of frequency and voltage |
32 | * pairs that the device will support per voltage domain. This is called |
33 | * Operating Points or OPP. The actual definitions of OMAP Operating Points |
34 | * varies over silicon within the same family of devices. For a specific |
35 | * domain, you can have a set of {frequency, voltage} pairs and this is denoted |
36 | * by an array of omap_opp_def. As the kernel boots and more information is |
37 | * available, a set of these are activated based on the precise nature of |
38 | * device the kernel boots up on. It is interesting to remember that each IP |
39 | * which belongs to a voltage domain may define their own set of OPPs on top |
40 | * of this - but this is handled by the appropriate driver. |
41 | */ |
42 | struct omap_opp_def { |
43 | char *hwmod_name; |
44 | |
45 | unsigned long freq; |
46 | unsigned long u_volt; |
47 | |
48 | bool default_available; |
49 | }; |
50 | |
51 | /* |
52 | * Initialization wrapper used to define an OPP for OMAP variants. |
53 | */ |
54 | #define OPP_INITIALIZER(_hwmod_name, _enabled, _freq, _uv) \ |
55 | { \ |
56 | .hwmod_name = _hwmod_name, \ |
57 | .default_available = _enabled, \ |
58 | .freq = _freq, \ |
59 | .u_volt = _uv, \ |
60 | } |
61 | |
62 | /* |
63 | * Initialization wrapper used to define SmartReflex process data |
64 | * XXX Is this needed? Just use C99 initializers in data files? |
65 | */ |
66 | #define VOLT_DATA_DEFINE(_v_nom, _efuse_offs, _errminlimit, _errgain) \ |
67 | { \ |
68 | .volt_nominal = _v_nom, \ |
69 | .sr_efuse_offs = _efuse_offs, \ |
70 | .sr_errminlimit = _errminlimit, \ |
71 | .vp_errgain = _errgain \ |
72 | } |
73 | |
74 | extern struct omap_volt_data omap34xx_vddmpu_volt_data[]; |
75 | extern struct omap_volt_data omap34xx_vddcore_volt_data[]; |
76 | extern struct omap_volt_data omap36xx_vddmpu_volt_data[]; |
77 | extern struct omap_volt_data omap36xx_vddcore_volt_data[]; |
78 | |
79 | extern struct omap_volt_data omap443x_vdd_mpu_volt_data[]; |
80 | extern struct omap_volt_data omap443x_vdd_iva_volt_data[]; |
81 | extern struct omap_volt_data omap443x_vdd_core_volt_data[]; |
82 | extern struct omap_volt_data omap446x_vdd_mpu_volt_data[]; |
83 | extern struct omap_volt_data omap446x_vdd_iva_volt_data[]; |
84 | extern struct omap_volt_data omap446x_vdd_core_volt_data[]; |
85 | |
86 | #endif /* __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H */ |
87 | |