92 lines
3.1 KiB
C
92 lines
3.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* OMAP SoC specific OPP Data helpers
|
|
*
|
|
* Copyright (C) 2009-2010 Texas Instruments Incorporated - https://www.ti.com/
|
|
* Nishanth Menon
|
|
* Kevin Hilman
|
|
* Copyright (C) 2010 Nokia Corporation.
|
|
* Eduardo Valentin
|
|
*/
|
|
#ifndef __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
|
|
#define __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H
|
|
|
|
#include "omap_hwmod.h"
|
|
|
|
#include "voltage.h"
|
|
|
|
/*
|
|
* *BIG FAT WARNING*:
|
|
* USE the following ONLY in opp data initialization common to an SoC.
|
|
* DO NOT USE these in board files/pm core etc.
|
|
*/
|
|
|
|
/**
|
|
* struct omap_opp_def - OMAP OPP Definition
|
|
* @hwmod_name: Name of the hwmod for this domain
|
|
* @freq: Frequency in hertz corresponding to this OPP
|
|
* @u_volt: Nominal voltage in microvolts corresponding to this OPP
|
|
* @default_available: True/false - is this OPP available by default
|
|
*
|
|
* OMAP SOCs have a standard set of tuples consisting of frequency and voltage
|
|
* pairs that the device will support per voltage domain. This is called
|
|
* Operating Points or OPP. The actual definitions of OMAP Operating Points
|
|
* varies over silicon within the same family of devices. For a specific
|
|
* domain, you can have a set of {frequency, voltage} pairs and this is denoted
|
|
* by an array of omap_opp_def. As the kernel boots and more information is
|
|
* available, a set of these are activated based on the precise nature of
|
|
* device the kernel boots up on. It is interesting to remember that each IP
|
|
* which belongs to a voltage domain may define their own set of OPPs on top
|
|
* of this - but this is handled by the appropriate driver.
|
|
*/
|
|
struct omap_opp_def {
|
|
char *hwmod_name;
|
|
|
|
unsigned long freq;
|
|
unsigned long u_volt;
|
|
|
|
bool default_available;
|
|
};
|
|
|
|
/*
|
|
* Initialization wrapper used to define an OPP for OMAP variants.
|
|
*/
|
|
#define OPP_INITIALIZER(_hwmod_name, _enabled, _freq, _uv) \
|
|
{ \
|
|
.hwmod_name = _hwmod_name, \
|
|
.default_available = _enabled, \
|
|
.freq = _freq, \
|
|
.u_volt = _uv, \
|
|
}
|
|
|
|
/*
|
|
* Initialization wrapper used to define SmartReflex process data
|
|
* XXX Is this needed? Just use C99 initializers in data files?
|
|
*/
|
|
#define VOLT_DATA_DEFINE(_v_nom, _efuse_offs, _errminlimit, _errgain) \
|
|
{ \
|
|
.volt_nominal = _v_nom, \
|
|
.sr_efuse_offs = _efuse_offs, \
|
|
.sr_errminlimit = _errminlimit, \
|
|
.vp_errgain = _errgain \
|
|
}
|
|
|
|
/* Use this to initialize the default table */
|
|
extern int __init omap_init_opp_table(struct omap_opp_def *opp_def,
|
|
u32 opp_def_size);
|
|
|
|
|
|
extern struct omap_volt_data omap34xx_vddmpu_volt_data[];
|
|
extern struct omap_volt_data omap34xx_vddcore_volt_data[];
|
|
extern struct omap_volt_data omap36xx_vddmpu_volt_data[];
|
|
extern struct omap_volt_data omap36xx_vddcore_volt_data[];
|
|
|
|
extern struct omap_volt_data omap443x_vdd_mpu_volt_data[];
|
|
extern struct omap_volt_data omap443x_vdd_iva_volt_data[];
|
|
extern struct omap_volt_data omap443x_vdd_core_volt_data[];
|
|
extern struct omap_volt_data omap446x_vdd_mpu_volt_data[];
|
|
extern struct omap_volt_data omap446x_vdd_iva_volt_data[];
|
|
extern struct omap_volt_data omap446x_vdd_core_volt_data[];
|
|
|
|
#endif /* __ARCH_ARM_MACH_OMAP2_OMAP_OPP_DATA_H */
|