Commit 29104e01 authored by Olof Johansson's avatar Olof Johansson

Merge tag 'omap-for-v5.2/soc-signed' of...

Merge tag 'omap-for-v5.2/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into arm/soc

SoC changes for omap variants for v5.2 merge window

This series of changes mostly consists of ti-sysc interconnect driver
related preparation work. With these changes and the related ti-sysc
driver changes, we can start dropping legacy omap_hwmod_*data.c platform
data for many devices.

There are also two am335x and am437x related PM changes for secure
devices that have ROM handling some parts and needs EFUSE power domain
active.

* tag 'omap-for-v5.2/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: OMAP2+: pm33xx-core: Do not Turn OFF CEFUSE as PPA may be using it
  ARM: OMAP2+: Wakeupgen: AM43xx HS devices should save context like non-HS
  ARM: OMAP2+: Handle reset quirks for dynamically allocated modules
  ARM: OMAP2+: Remove hwmod .rev data and use local SoC checks instead
  ARM: OMAP2+: Allocate struct omap_hwmod based on dts data
  ARM: OMAP2+: Define _HWMOD_STATE_DEFAULT and use it
  ARM: OMAP2+: Prepare class allocation for dynamically allocated modules
  ARM: OMAP2+: Make interconnect target module allocation functions static
  ARM: OMAP2+: Fix potentially uninitialized return value for _setup_reset()
  ARM: dts: Fix dcan clkctrl clock for am3
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 56c6eed1 72aff4ec
...@@ -1762,7 +1762,7 @@ target-module@cc000 { /* 0x481cc000, ap 60 46.0 */ ...@@ -1762,7 +1762,7 @@ target-module@cc000 { /* 0x481cc000, ap 60 46.0 */
reg = <0xcc000 0x4>; reg = <0xcc000 0x4>;
reg-names = "rev"; reg-names = "rev";
/* Domains (P, C): per_pwrdm, l4ls_clkdm */ /* Domains (P, C): per_pwrdm, l4ls_clkdm */
clocks = <&l4ls_clkctrl AM3_D_CAN0_CLKCTRL 0>; clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN0_CLKCTRL 0>;
clock-names = "fck"; clock-names = "fck";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
...@@ -1785,7 +1785,7 @@ target-module@d0000 { /* 0x481d0000, ap 62 42.0 */ ...@@ -1785,7 +1785,7 @@ target-module@d0000 { /* 0x481d0000, ap 62 42.0 */
reg = <0xd0000 0x4>; reg = <0xd0000 0x4>;
reg-names = "rev"; reg-names = "rev";
/* Domains (P, C): per_pwrdm, l4ls_clkdm */ /* Domains (P, C): per_pwrdm, l4ls_clkdm */
clocks = <&l4ls_clkctrl AM3_D_CAN1_CLKCTRL 0>; clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN1_CLKCTRL 0>;
clock-names = "fck"; clock-names = "fck";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
......
...@@ -336,6 +336,15 @@ static inline void omap5_secondary_hyp_startup(void) ...@@ -336,6 +336,15 @@ static inline void omap5_secondary_hyp_startup(void)
} }
#endif #endif
#ifdef CONFIG_SOC_DRA7XX
extern int dra7xx_pciess_reset(struct omap_hwmod *oh);
#else
static inline int dra7xx_pciess_reset(struct omap_hwmod *oh)
{
return 0;
}
#endif
void pdata_quirks_init(const struct of_device_id *); void pdata_quirks_init(const struct of_device_id *);
void omap_auxdata_legacy_init(struct device *dev); void omap_auxdata_legacy_init(struct device *dev);
void omap_pcs_legacy_init(int irq, void (*rearm)(void)); void omap_pcs_legacy_init(int irq, void (*rearm)(void));
......
...@@ -53,15 +53,10 @@ int omap_i2c_reset(struct omap_hwmod *oh) ...@@ -53,15 +53,10 @@ int omap_i2c_reset(struct omap_hwmod *oh)
u16 i2c_con; u16 i2c_con;
int c = 0; int c = 0;
if (oh->class->rev == OMAP_I2C_IP_VERSION_2) { if (soc_is_omap24xx() || soc_is_omap34xx() || soc_is_am35xx())
i2c_con = OMAP4_I2C_CON_OFFSET;
} else if (oh->class->rev == OMAP_I2C_IP_VERSION_1) {
i2c_con = OMAP2_I2C_CON_OFFSET; i2c_con = OMAP2_I2C_CON_OFFSET;
} else { else
WARN(1, "Cannot reset I2C block %s: unsupported revision\n", i2c_con = OMAP4_I2C_CON_OFFSET;
oh->name);
return -EINVAL;
}
/* Disable I2C */ /* Disable I2C */
v = omap_hwmod_read(oh, i2c_con); v = omap_hwmod_read(oh, i2c_con);
......
...@@ -411,14 +411,9 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data) ...@@ -411,14 +411,9 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
static void __init __maybe_unused omap_hwmod_init_postsetup(void) static void __init __maybe_unused omap_hwmod_init_postsetup(void)
{ {
u8 postsetup_state; u8 postsetup_state = _HWMOD_STATE_DEFAULT;
/* Set the default postsetup state for all hwmods */ /* Set the default postsetup state for all hwmods */
#ifdef CONFIG_PM
postsetup_state = _HWMOD_STATE_IDLE;
#else
postsetup_state = _HWMOD_STATE_ENABLED;
#endif
omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state); omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state);
} }
......
...@@ -7,7 +7,15 @@ ...@@ -7,7 +7,15 @@
#define OMAP4_MMC_REG_OFFSET 0x100 #define OMAP4_MMC_REG_OFFSET 0x100
struct omap_hwmod; struct omap_hwmod;
#ifdef CONFIG_SOC_OMAP2420
int omap_msdi_reset(struct omap_hwmod *oh); int omap_msdi_reset(struct omap_hwmod *oh);
#else
static inline int omap_msdi_reset(struct omap_hwmod *oh)
{
return 0;
}
#endif
/* called from board-specific card detection service routine */ /* called from board-specific card detection service routine */
extern void omap_mmc_notify_cover_event(struct device *dev, int slot, extern void omap_mmc_notify_cover_event(struct device *dev, int slot,
......
...@@ -436,13 +436,13 @@ static int irq_notifier(struct notifier_block *self, unsigned long cmd, void *v) ...@@ -436,13 +436,13 @@ static int irq_notifier(struct notifier_block *self, unsigned long cmd, void *v)
{ {
switch (cmd) { switch (cmd) {
case CPU_CLUSTER_PM_ENTER: case CPU_CLUSTER_PM_ENTER:
if (omap_type() == OMAP2_DEVICE_TYPE_GP) if (omap_type() == OMAP2_DEVICE_TYPE_GP || soc_is_am43xx())
irq_save_context(); irq_save_context();
else else
irq_save_secure_context(); irq_save_secure_context();
break; break;
case CPU_CLUSTER_PM_EXIT: case CPU_CLUSTER_PM_EXIT:
if (omap_type() == OMAP2_DEVICE_TYPE_GP) if (omap_type() == OMAP2_DEVICE_TYPE_GP || soc_is_am43xx())
irq_restore_context(); irq_restore_context();
break; break;
} }
......
...@@ -155,6 +155,8 @@ ...@@ -155,6 +155,8 @@
#include "soc.h" #include "soc.h"
#include "common.h" #include "common.h"
#include "clockdomain.h" #include "clockdomain.h"
#include "hdq1w.h"
#include "mmc.h"
#include "powerdomain.h" #include "powerdomain.h"
#include "cm2xxx.h" #include "cm2xxx.h"
#include "cm3xxx.h" #include "cm3xxx.h"
...@@ -165,6 +167,7 @@ ...@@ -165,6 +167,7 @@
#include "prm33xx.h" #include "prm33xx.h"
#include "prminst44xx.h" #include "prminst44xx.h"
#include "pm.h" #include "pm.h"
#include "wd_timer.h"
/* Name of the OMAP hwmod for the MPU */ /* Name of the OMAP hwmod for the MPU */
#define MPU_INITIATOR_NAME "mpu" #define MPU_INITIATOR_NAME "mpu"
...@@ -204,6 +207,20 @@ struct clkctrl_provider { ...@@ -204,6 +207,20 @@ struct clkctrl_provider {
static LIST_HEAD(clkctrl_providers); static LIST_HEAD(clkctrl_providers);
/**
* struct omap_hwmod_reset - IP specific reset functions
* @match: string to match against the module name
* @len: number of characters to match
* @reset: IP specific reset function
*
* Used only in cases where struct omap_hwmod is dynamically allocated.
*/
struct omap_hwmod_reset {
const char *match;
int len;
int (*reset)(struct omap_hwmod *oh);
};
/** /**
* struct omap_hwmod_soc_ops - fn ptrs for some SoC-specific operations * struct omap_hwmod_soc_ops - fn ptrs for some SoC-specific operations
* @enable_module: function to enable a module (via MODULEMODE) * @enable_module: function to enable a module (via MODULEMODE)
...@@ -235,6 +252,7 @@ static struct omap_hwmod_soc_ops soc_ops; ...@@ -235,6 +252,7 @@ static struct omap_hwmod_soc_ops soc_ops;
/* omap_hwmod_list contains all registered struct omap_hwmods */ /* omap_hwmod_list contains all registered struct omap_hwmods */
static LIST_HEAD(omap_hwmod_list); static LIST_HEAD(omap_hwmod_list);
static DEFINE_MUTEX(list_lock);
/* mpu_oh: used to add/remove MPU initiator from sleepdep list */ /* mpu_oh: used to add/remove MPU initiator from sleepdep list */
static struct omap_hwmod *mpu_oh; static struct omap_hwmod *mpu_oh;
...@@ -2465,7 +2483,7 @@ static void _setup_iclk_autoidle(struct omap_hwmod *oh) ...@@ -2465,7 +2483,7 @@ static void _setup_iclk_autoidle(struct omap_hwmod *oh)
*/ */
static int _setup_reset(struct omap_hwmod *oh) static int _setup_reset(struct omap_hwmod *oh)
{ {
int r; int r = 0;
if (oh->_state != _HWMOD_STATE_INITIALIZED) if (oh->_state != _HWMOD_STATE_INITIALIZED)
return -EINVAL; return -EINVAL;
...@@ -2624,7 +2642,7 @@ static int _setup(struct omap_hwmod *oh, void *data) ...@@ -2624,7 +2642,7 @@ static int _setup(struct omap_hwmod *oh, void *data)
* that the copy process would be relatively complex due to the large number * that the copy process would be relatively complex due to the large number
* of substructures. * of substructures.
*/ */
static int __init _register(struct omap_hwmod *oh) static int _register(struct omap_hwmod *oh)
{ {
if (!oh || !oh->name || !oh->class || !oh->class->name || if (!oh || !oh->name || !oh->class || !oh->class->name ||
(oh->_state != _HWMOD_STATE_UNKNOWN)) (oh->_state != _HWMOD_STATE_UNKNOWN))
...@@ -2663,7 +2681,7 @@ static int __init _register(struct omap_hwmod *oh) ...@@ -2663,7 +2681,7 @@ static int __init _register(struct omap_hwmod *oh)
* locking in this code. Changes to this assumption will require * locking in this code. Changes to this assumption will require
* additional locking. Returns 0. * additional locking. Returns 0.
*/ */
static int __init _add_link(struct omap_hwmod_ocp_if *oi) static int _add_link(struct omap_hwmod_ocp_if *oi)
{ {
pr_debug("omap_hwmod: %s -> %s: adding link\n", oi->master->name, pr_debug("omap_hwmod: %s -> %s: adding link\n", oi->master->name,
oi->slave->name); oi->slave->name);
...@@ -3241,9 +3259,10 @@ static int omap_hwmod_init_regbits(struct device *dev, ...@@ -3241,9 +3259,10 @@ static int omap_hwmod_init_regbits(struct device *dev,
* @sysc_offs: sysc register offset * @sysc_offs: sysc register offset
* @syss_offs: syss register offset * @syss_offs: syss register offset
*/ */
int omap_hwmod_init_reg_offs(struct device *dev, static int omap_hwmod_init_reg_offs(struct device *dev,
const struct ti_sysc_module_data *data, const struct ti_sysc_module_data *data,
s32 *rev_offs, s32 *sysc_offs, s32 *syss_offs) s32 *rev_offs, s32 *sysc_offs,
s32 *syss_offs)
{ {
*rev_offs = -ENODEV; *rev_offs = -ENODEV;
*sysc_offs = 0; *sysc_offs = 0;
...@@ -3267,7 +3286,7 @@ int omap_hwmod_init_reg_offs(struct device *dev, ...@@ -3267,7 +3286,7 @@ int omap_hwmod_init_reg_offs(struct device *dev,
* @data: module data * @data: module data
* @sysc_flags: module configuration * @sysc_flags: module configuration
*/ */
int omap_hwmod_init_sysc_flags(struct device *dev, static int omap_hwmod_init_sysc_flags(struct device *dev,
const struct ti_sysc_module_data *data, const struct ti_sysc_module_data *data,
u32 *sysc_flags) u32 *sysc_flags)
{ {
...@@ -3341,7 +3360,7 @@ int omap_hwmod_init_sysc_flags(struct device *dev, ...@@ -3341,7 +3360,7 @@ int omap_hwmod_init_sysc_flags(struct device *dev,
* @data: module data * @data: module data
* @idlemodes: module supported idle modes * @idlemodes: module supported idle modes
*/ */
int omap_hwmod_init_idlemodes(struct device *dev, static int omap_hwmod_init_idlemodes(struct device *dev,
const struct ti_sysc_module_data *data, const struct ti_sysc_module_data *data,
u32 *idlemodes) u32 *idlemodes)
{ {
...@@ -3434,14 +3453,18 @@ static int omap_hwmod_check_module(struct device *dev, ...@@ -3434,14 +3453,18 @@ static int omap_hwmod_check_module(struct device *dev,
* *
* Note that the allocations here cannot use devm as ti-sysc can rebind. * Note that the allocations here cannot use devm as ti-sysc can rebind.
*/ */
int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh, static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
const struct ti_sysc_module_data *data, const struct ti_sysc_module_data *data,
struct sysc_regbits *sysc_fields, struct sysc_regbits *sysc_fields,
s32 rev_offs, s32 sysc_offs, s32 syss_offs, s32 rev_offs, s32 sysc_offs,
u32 sysc_flags, u32 idlemodes) s32 syss_offs, u32 sysc_flags,
u32 idlemodes)
{ {
struct omap_hwmod_class_sysconfig *sysc; struct omap_hwmod_class_sysconfig *sysc;
struct omap_hwmod_class *class; struct omap_hwmod_class *class = NULL;
struct omap_hwmod_ocp_if *oi = NULL;
struct clockdomain *clkdm = NULL;
struct clk *clk = NULL;
void __iomem *regs = NULL; void __iomem *regs = NULL;
unsigned long flags; unsigned long flags;
...@@ -3465,26 +3488,128 @@ int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh, ...@@ -3465,26 +3488,128 @@ int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh,
} }
/* /*
* We need new oh->class as the other devices in the same class * We may need a new oh->class as the other devices in the same class
* may not yet have ioremapped their registers. * may not yet have ioremapped their registers.
*/ */
if (oh->class->name && strcmp(oh->class->name, data->name)) {
class = kmemdup(oh->class, sizeof(*oh->class), GFP_KERNEL); class = kmemdup(oh->class, sizeof(*oh->class), GFP_KERNEL);
if (!class) if (!class)
return -ENOMEM; return -ENOMEM;
}
if (list_empty(&oh->slave_ports)) {
oi = kcalloc(1, sizeof(*oi), GFP_KERNEL);
if (!oi)
return -ENOMEM;
/*
* Note that we assume interconnect interface clocks will be
* managed by the interconnect driver for OCPIF_SWSUP_IDLE case
* on omap24xx and omap3.
*/
oi->slave = oh;
oi->user = OCP_USER_MPU | OCP_USER_SDMA;
}
if (!oh->_clk) {
struct clk_hw_omap *hwclk;
class->sysc = sysc; clk = of_clk_get_by_name(dev->of_node, "fck");
if (!IS_ERR(clk))
clk_prepare(clk);
else
clk = NULL;
/*
* Populate clockdomain based on dts clock. It is needed for
* clkdm_deny_idle() and clkdm_allow_idle() until we have have
* interconnect driver and reset driver capable of blocking
* clockdomain idle during reset, enable and idle.
*/
if (clk) {
hwclk = to_clk_hw_omap(__clk_get_hw(clk));
if (hwclk && hwclk->clkdm_name)
clkdm = clkdm_lookup(hwclk->clkdm_name);
}
/*
* Note that we assume interconnect driver manages the clocks
* and do not need to populate oh->_clk for dynamically
* allocated modules.
*/
clk_unprepare(clk);
clk_put(clk);
}
spin_lock_irqsave(&oh->_lock, flags); spin_lock_irqsave(&oh->_lock, flags);
if (regs) if (regs)
oh->_mpu_rt_va = regs; oh->_mpu_rt_va = regs;
if (class)
oh->class = class; oh->class = class;
oh->class->sysc = sysc;
if (oi)
_add_link(oi);
if (clkdm)
oh->clkdm = clkdm;
oh->_state = _HWMOD_STATE_INITIALIZED; oh->_state = _HWMOD_STATE_INITIALIZED;
oh->_postsetup_state = _HWMOD_STATE_DEFAULT;
_setup(oh, NULL); _setup(oh, NULL);
spin_unlock_irqrestore(&oh->_lock, flags); spin_unlock_irqrestore(&oh->_lock, flags);
return 0; return 0;
} }
static const struct omap_hwmod_reset omap24xx_reset_quirks[] = {
{ .match = "msdi", .len = 4, .reset = omap_msdi_reset, },
};
static const struct omap_hwmod_reset dra7_reset_quirks[] = {
{ .match = "pcie", .len = 4, .reset = dra7xx_pciess_reset, },
};
static const struct omap_hwmod_reset omap_reset_quirks[] = {
{ .match = "dss", .len = 3, .reset = omap_dss_reset, },
{ .match = "hdq1w", .len = 5, .reset = omap_hdq1w_reset, },
{ .match = "i2c", .len = 3, .reset = omap_i2c_reset, },
{ .match = "wd_timer", .len = 8, .reset = omap2_wd_timer_reset, },
};
static void
omap_hwmod_init_reset_quirk(struct device *dev, struct omap_hwmod *oh,
const struct ti_sysc_module_data *data,
const struct omap_hwmod_reset *quirks,
int quirks_sz)
{
const struct omap_hwmod_reset *quirk;
int i;
for (i = 0; i < quirks_sz; i++) {
quirk = &quirks[i];
if (!strncmp(data->name, quirk->match, quirk->len)) {
oh->class->reset = quirk->reset;
return;
}
}
}
static void
omap_hwmod_init_reset_quirks(struct device *dev, struct omap_hwmod *oh,
const struct ti_sysc_module_data *data)
{
if (soc_is_omap24xx())
omap_hwmod_init_reset_quirk(dev, oh, data,
omap24xx_reset_quirks,
ARRAY_SIZE(omap24xx_reset_quirks));
if (soc_is_dra7xx())
omap_hwmod_init_reset_quirk(dev, oh, data, dra7_reset_quirks,
ARRAY_SIZE(dra7_reset_quirks));
omap_hwmod_init_reset_quirk(dev, oh, data, omap_reset_quirks,
ARRAY_SIZE(omap_reset_quirks));
}
/** /**
* omap_hwmod_init_module - initialize new module * omap_hwmod_init_module - initialize new module
* @dev: struct device * @dev: struct device
...@@ -3505,8 +3630,31 @@ int omap_hwmod_init_module(struct device *dev, ...@@ -3505,8 +3630,31 @@ int omap_hwmod_init_module(struct device *dev,
return -EINVAL; return -EINVAL;
oh = _lookup(data->name); oh = _lookup(data->name);
if (!oh) {
oh = kzalloc(sizeof(*oh), GFP_KERNEL);
if (!oh) if (!oh)
return -ENODEV; return -ENOMEM;
oh->name = data->name;
oh->_state = _HWMOD_STATE_UNKNOWN;
lockdep_register_key(&oh->hwmod_key);
/* Unused, can be handled by PRM driver handling resets */
oh->prcm.omap4.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT;
oh->class = kzalloc(sizeof(*oh->class), GFP_KERNEL);
if (!oh->class) {
kfree(oh);
return -ENOMEM;
}
omap_hwmod_init_reset_quirks(dev, oh, data);
oh->class->name = data->name;
mutex_lock(&list_lock);
error = _register(oh);
mutex_unlock(&list_lock);
}
cookie->data = oh; cookie->data = oh;
......
...@@ -493,11 +493,16 @@ struct omap_hwmod_omap4_prcm { ...@@ -493,11 +493,16 @@ struct omap_hwmod_omap4_prcm {
#define _HWMOD_STATE_IDLE 5 #define _HWMOD_STATE_IDLE 5
#define _HWMOD_STATE_DISABLED 6 #define _HWMOD_STATE_DISABLED 6
#ifdef CONFIG_PM
#define _HWMOD_STATE_DEFAULT _HWMOD_STATE_IDLE
#else
#define _HWMOD_STATE_DEFAULT _HWMOD_STATE_ENABLED
#endif
/** /**
* struct omap_hwmod_class - the type of an IP block * struct omap_hwmod_class - the type of an IP block
* @name: name of the hwmod_class * @name: name of the hwmod_class
* @sysc: device SYSCONFIG/SYSSTATUS register data * @sysc: device SYSCONFIG/SYSSTATUS register data
* @rev: revision of the IP class
* @pre_shutdown: ptr to fn to be executed immediately prior to device shutdown * @pre_shutdown: ptr to fn to be executed immediately prior to device shutdown
* @reset: ptr to fn to be executed in place of the standard hwmod reset fn * @reset: ptr to fn to be executed in place of the standard hwmod reset fn
* @enable_preprogram: ptr to fn to be executed during device enable * @enable_preprogram: ptr to fn to be executed during device enable
...@@ -523,7 +528,6 @@ struct omap_hwmod_omap4_prcm { ...@@ -523,7 +528,6 @@ struct omap_hwmod_omap4_prcm {
struct omap_hwmod_class { struct omap_hwmod_class {
const char *name; const char *name;
struct omap_hwmod_class_sysconfig *sysc; struct omap_hwmod_class_sysconfig *sysc;
u32 rev;
int (*pre_shutdown)(struct omap_hwmod *oh); int (*pre_shutdown)(struct omap_hwmod *oh);
int (*reset)(struct omap_hwmod *oh); int (*reset)(struct omap_hwmod *oh);
int (*enable_preprogram)(struct omap_hwmod *oh); int (*enable_preprogram)(struct omap_hwmod *oh);
......
...@@ -91,7 +91,6 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = { ...@@ -91,7 +91,6 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = {
static struct omap_hwmod_class i2c_class = { static struct omap_hwmod_class i2c_class = {
.name = "i2c", .name = "i2c",
.sysc = &i2c_sysc, .sysc = &i2c_sysc,
.rev = OMAP_I2C_IP_VERSION_1,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
}; };
......
...@@ -68,7 +68,6 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = { ...@@ -68,7 +68,6 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = {
static struct omap_hwmod_class i2c_class = { static struct omap_hwmod_class i2c_class = {
.name = "i2c", .name = "i2c",
.sysc = &i2c_sysc, .sysc = &i2c_sysc,
.rev = OMAP_I2C_IP_VERSION_1,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
}; };
......
...@@ -96,7 +96,6 @@ static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = { ...@@ -96,7 +96,6 @@ static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = {
struct omap_hwmod_class omap2xxx_gpio_hwmod_class = { struct omap_hwmod_class omap2xxx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &omap2xxx_gpio_sysc, .sysc = &omap2xxx_gpio_sysc,
.rev = 0,
}; };
/* system dma */ /* system dma */
......
...@@ -534,7 +534,6 @@ static struct omap_hwmod_class_sysconfig am33xx_gpio_sysc = { ...@@ -534,7 +534,6 @@ static struct omap_hwmod_class_sysconfig am33xx_gpio_sysc = {
struct omap_hwmod_class am33xx_gpio_hwmod_class = { struct omap_hwmod_class am33xx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &am33xx_gpio_sysc, .sysc = &am33xx_gpio_sysc,
.rev = 2,
}; };
/* gpio1 */ /* gpio1 */
...@@ -643,7 +642,6 @@ static struct omap_hwmod_class_sysconfig am33xx_i2c_sysc = { ...@@ -643,7 +642,6 @@ static struct omap_hwmod_class_sysconfig am33xx_i2c_sysc = {
static struct omap_hwmod_class i2c_class = { static struct omap_hwmod_class i2c_class = {
.name = "i2c", .name = "i2c",
.sysc = &am33xx_i2c_sysc, .sysc = &am33xx_i2c_sysc,
.rev = OMAP_I2C_IP_VERSION_2,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
}; };
......
...@@ -484,7 +484,6 @@ static struct omap_hwmod am35xx_uart4_hwmod = { ...@@ -484,7 +484,6 @@ static struct omap_hwmod am35xx_uart4_hwmod = {
static struct omap_hwmod_class i2c_class = { static struct omap_hwmod_class i2c_class = {
.name = "i2c", .name = "i2c",
.sysc = &i2c_sysc, .sysc = &i2c_sysc,
.rev = OMAP_I2C_IP_VERSION_1,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
}; };
...@@ -707,7 +706,6 @@ static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = { ...@@ -707,7 +706,6 @@ static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = { static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &omap3xxx_gpio_sysc, .sysc = &omap3xxx_gpio_sysc,
.rev = 1,
}; };
/* gpio1 */ /* gpio1 */
...@@ -1029,7 +1027,6 @@ static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = { ...@@ -1029,7 +1027,6 @@ static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = { static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
.name = "smartreflex", .name = "smartreflex",
.sysc = &omap34xx_sr_sysc, .sysc = &omap34xx_sr_sysc,
.rev = 1,
}; };
static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = { static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
...@@ -1044,7 +1041,6 @@ static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = { ...@@ -1044,7 +1041,6 @@ static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = { static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
.name = "smartreflex", .name = "smartreflex",
.sysc = &omap36xx_sr_sysc, .sysc = &omap36xx_sr_sysc,
.rev = 2,
}; };
/* SR1 */ /* SR1 */
......
...@@ -1075,7 +1075,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = { ...@@ -1075,7 +1075,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
static struct omap_hwmod_class omap44xx_gpio_hwmod_class = { static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &omap44xx_gpio_sysc, .sysc = &omap44xx_gpio_sysc,
.rev = 2,
}; };
/* gpio1 */ /* gpio1 */
...@@ -1374,7 +1373,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = { ...@@ -1374,7 +1373,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
static struct omap_hwmod_class omap44xx_i2c_hwmod_class = { static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
.name = "i2c", .name = "i2c",
.sysc = &omap44xx_i2c_sysc, .sysc = &omap44xx_i2c_sysc,
.rev = OMAP_I2C_IP_VERSION_2,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
}; };
...@@ -2367,7 +2365,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = { ...@@ -2367,7 +2365,6 @@ static struct omap_hwmod_class_sysconfig omap44xx_smartreflex_sysc = {
static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = { static struct omap_hwmod_class omap44xx_smartreflex_hwmod_class = {
.name = "smartreflex", .name = "smartreflex",
.sysc = &omap44xx_smartreflex_sysc, .sysc = &omap44xx_smartreflex_sysc,
.rev = 2,
}; };
/* smartreflex_core */ /* smartreflex_core */
......
...@@ -620,7 +620,6 @@ static struct omap_hwmod_class_sysconfig omap54xx_gpio_sysc = { ...@@ -620,7 +620,6 @@ static struct omap_hwmod_class_sysconfig omap54xx_gpio_sysc = {
static struct omap_hwmod_class omap54xx_gpio_hwmod_class = { static struct omap_hwmod_class omap54xx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &omap54xx_gpio_sysc, .sysc = &omap54xx_gpio_sysc,
.rev = 2,
}; };
/* gpio1 */ /* gpio1 */
...@@ -819,7 +818,6 @@ static struct omap_hwmod_class omap54xx_i2c_hwmod_class = { ...@@ -819,7 +818,6 @@ static struct omap_hwmod_class omap54xx_i2c_hwmod_class = {
.name = "i2c", .name = "i2c",
.sysc = &omap54xx_i2c_sysc, .sysc = &omap54xx_i2c_sysc,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
.rev = OMAP_I2C_IP_VERSION_2,
}; };
/* i2c1 */ /* i2c1 */
......
...@@ -693,7 +693,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_aes_sysc = { ...@@ -693,7 +693,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_aes_sysc = {
static struct omap_hwmod_class dra7xx_aes_hwmod_class = { static struct omap_hwmod_class dra7xx_aes_hwmod_class = {
.name = "aes", .name = "aes",
.sysc = &dra7xx_aes_sysc, .sysc = &dra7xx_aes_sysc,
.rev = 2,
}; };
/* AES1 */ /* AES1 */
...@@ -737,7 +736,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_sha0_sysc = { ...@@ -737,7 +736,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_sha0_sysc = {
static struct omap_hwmod_class dra7xx_sha0_hwmod_class = { static struct omap_hwmod_class dra7xx_sha0_hwmod_class = {
.name = "sham", .name = "sham",
.sysc = &dra7xx_sha0_sysc, .sysc = &dra7xx_sha0_sysc,
.rev = 2,
}; };
struct omap_hwmod dra7xx_sha0_hwmod = { struct omap_hwmod dra7xx_sha0_hwmod = {
...@@ -811,7 +809,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_gpio_sysc = { ...@@ -811,7 +809,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_gpio_sysc = {
static struct omap_hwmod_class dra7xx_gpio_hwmod_class = { static struct omap_hwmod_class dra7xx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &dra7xx_gpio_sysc, .sysc = &dra7xx_gpio_sysc,
.rev = 2,
}; };
/* gpio1 */ /* gpio1 */
...@@ -1085,7 +1082,6 @@ static struct omap_hwmod_class dra7xx_i2c_hwmod_class = { ...@@ -1085,7 +1082,6 @@ static struct omap_hwmod_class dra7xx_i2c_hwmod_class = {
.name = "i2c", .name = "i2c",
.sysc = &dra7xx_i2c_sysc, .sysc = &dra7xx_i2c_sysc,
.reset = &omap_i2c_reset, .reset = &omap_i2c_reset,
.rev = OMAP_I2C_IP_VERSION_2,
}; };
/* i2c1 */ /* i2c1 */
...@@ -1832,7 +1828,7 @@ static struct omap_hwmod dra7xx_ocp2scp3_hwmod = { ...@@ -1832,7 +1828,7 @@ static struct omap_hwmod dra7xx_ocp2scp3_hwmod = {
* We use a PCIeSS HWMOD class specific reset handler to deassert the hardreset * We use a PCIeSS HWMOD class specific reset handler to deassert the hardreset
* lines after asserting them. * lines after asserting them.
*/ */
static int dra7xx_pciess_reset(struct omap_hwmod *oh) int dra7xx_pciess_reset(struct omap_hwmod *oh)
{ {
int i; int i;
...@@ -2019,7 +2015,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_smartreflex_sysc = { ...@@ -2019,7 +2015,6 @@ static struct omap_hwmod_class_sysconfig dra7xx_smartreflex_sysc = {
static struct omap_hwmod_class dra7xx_smartreflex_hwmod_class = { static struct omap_hwmod_class dra7xx_smartreflex_hwmod_class = {
.name = "smartreflex", .name = "smartreflex",
.sysc = &dra7xx_smartreflex_sysc, .sysc = &dra7xx_smartreflex_sysc,
.rev = 2,
}; };
/* smartreflex_core */ /* smartreflex_core */
......
...@@ -484,7 +484,6 @@ static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = { ...@@ -484,7 +484,6 @@ static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
static struct omap_hwmod_class dm81xx_gpio_hwmod_class = { static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
.name = "gpio", .name = "gpio",
.sysc = &dm81xx_gpio_sysc, .sysc = &dm81xx_gpio_sysc,
.rev = 2,
}; };
static struct omap_hwmod_opt_clk gpio1_opt_clks[] = { static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
......
...@@ -51,10 +51,12 @@ static int amx3_common_init(void) ...@@ -51,10 +51,12 @@ static int amx3_common_init(void)
/* CEFUSE domain can be turned off post bootup */ /* CEFUSE domain can be turned off post bootup */
cefuse_pwrdm = pwrdm_lookup("cefuse_pwrdm"); cefuse_pwrdm = pwrdm_lookup("cefuse_pwrdm");
if (cefuse_pwrdm) if (!cefuse_pwrdm)
omap_set_pwrdm_state(cefuse_pwrdm, PWRDM_POWER_OFF);
else
pr_err("PM: Failed to get cefuse_pwrdm\n"); pr_err("PM: Failed to get cefuse_pwrdm\n");
else if (omap_type() != OMAP2_DEVICE_TYPE_GP)
pr_info("PM: Leaving EFUSE power domain active\n");
else
omap_set_pwrdm_state(cefuse_pwrdm, PWRDM_POWER_OFF);
return 0; return 0;
} }
......
...@@ -119,7 +119,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user) ...@@ -119,7 +119,10 @@ static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
} }
sr_data->name = oh->name; sr_data->name = oh->name;
sr_data->ip_type = oh->class->rev; if (cpu_is_omap343x())
sr_data->ip_type = 1;
else
sr_data->ip_type = 2;
sr_data->senn_mod = 0x1; sr_data->senn_mod = 0x1;
sr_data->senp_mod = 0x1; sr_data->senp_mod = 0x1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment