mirror of https://gitee.com/openkylin/linux.git
ARM: OMAP4+: PRM: determine prm_device_inst based on DT compatibility
PRM device instance offset is now provided through the prm_init_data. This gets rid of some cpu_is_X / soc_is_X calls from PRM core code, preparing for PRM to be its own separate driver. Signed-off-by: Tero Kristo <t-kristo@ti.com>
This commit is contained in:
parent
ab7b2ffcf5
commit
48e0c1148d
|
@ -524,6 +524,7 @@ struct omap_prcm_irq_setup {
|
||||||
* @mem: IO mem pointer for this module
|
* @mem: IO mem pointer for this module
|
||||||
* @offset: module base address offset from the IO base
|
* @offset: module base address offset from the IO base
|
||||||
* @flags: PRCM module init flags
|
* @flags: PRCM module init flags
|
||||||
|
* @device_inst_offset: device instance offset within the module address space
|
||||||
* @init: low level PRCM init function for this module
|
* @init: low level PRCM init function for this module
|
||||||
* @np: device node for this PRCM module
|
* @np: device node for this PRCM module
|
||||||
*/
|
*/
|
||||||
|
@ -532,6 +533,7 @@ struct omap_prcm_init_data {
|
||||||
void __iomem *mem;
|
void __iomem *mem;
|
||||||
s16 offset;
|
s16 offset;
|
||||||
u16 flags;
|
u16 flags;
|
||||||
|
s32 device_inst_offset;
|
||||||
int (*init)(const struct omap_prcm_init_data *data);
|
int (*init)(const struct omap_prcm_init_data *data);
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
};
|
};
|
||||||
|
|
|
@ -713,6 +713,8 @@ int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
|
||||||
if (!soc_is_dra7xx())
|
if (!soc_is_dra7xx())
|
||||||
prm_features |= PRM_HAS_VOLTAGE;
|
prm_features |= PRM_HAS_VOLTAGE;
|
||||||
|
|
||||||
|
omap4_prminst_set_prm_dev_inst(data->device_inst_offset);
|
||||||
|
|
||||||
return prm_register(&omap44xx_prm_ll_data);
|
return prm_register(&omap44xx_prm_ll_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,9 @@
|
||||||
#include "prm3xxx.h"
|
#include "prm3xxx.h"
|
||||||
#include "prm33xx.h"
|
#include "prm33xx.h"
|
||||||
#include "prm44xx.h"
|
#include "prm44xx.h"
|
||||||
|
#include "prm54xx.h"
|
||||||
|
#include "prm7xx.h"
|
||||||
|
#include "prcm43xx.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
#include "cm.h"
|
#include "cm.h"
|
||||||
|
@ -661,11 +664,35 @@ static struct omap_prcm_init_data am3_prm_data __initdata = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
|
#ifdef CONFIG_ARCH_OMAP4
|
||||||
defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX)
|
|
||||||
static struct omap_prcm_init_data omap4_prm_data __initdata = {
|
static struct omap_prcm_init_data omap4_prm_data __initdata = {
|
||||||
.index = TI_CLKM_PRM,
|
.index = TI_CLKM_PRM,
|
||||||
.init = omap44xx_prm_init,
|
.init = omap44xx_prm_init,
|
||||||
|
.device_inst_offset = OMAP4430_PRM_DEVICE_INST,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_OMAP5
|
||||||
|
static struct omap_prcm_init_data omap5_prm_data __initdata = {
|
||||||
|
.index = TI_CLKM_PRM,
|
||||||
|
.init = omap44xx_prm_init,
|
||||||
|
.device_inst_offset = OMAP54XX_PRM_DEVICE_INST,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_DRA7XX
|
||||||
|
static struct omap_prcm_init_data dra7_prm_data __initdata = {
|
||||||
|
.index = TI_CLKM_PRM,
|
||||||
|
.init = omap44xx_prm_init,
|
||||||
|
.device_inst_offset = DRA7XX_PRM_DEVICE_INST,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_AM43XX
|
||||||
|
static struct omap_prcm_init_data am4_prm_data __initdata = {
|
||||||
|
.index = TI_CLKM_PRM,
|
||||||
|
.init = omap44xx_prm_init,
|
||||||
|
.device_inst_offset = AM43XX_PRM_DEVICE_INST,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -680,7 +707,7 @@ static const struct of_device_id omap_prcm_dt_match_table[] __initconst = {
|
||||||
{ .compatible = "ti,am3-prcm", .data = &am3_prm_data },
|
{ .compatible = "ti,am3-prcm", .data = &am3_prm_data },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SOC_AM43XX
|
#ifdef CONFIG_SOC_AM43XX
|
||||||
{ .compatible = "ti,am4-prcm", .data = &omap4_prm_data },
|
{ .compatible = "ti,am4-prcm", .data = &am4_prm_data },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SOC_TI81XX
|
#ifdef CONFIG_SOC_TI81XX
|
||||||
{ .compatible = "ti,dm814-prcm", .data = &am3_prm_data },
|
{ .compatible = "ti,dm814-prcm", .data = &am3_prm_data },
|
||||||
|
@ -697,11 +724,11 @@ static const struct of_device_id omap_prcm_dt_match_table[] __initconst = {
|
||||||
{ .compatible = "ti,omap4-scrm", .data = &scrm_data },
|
{ .compatible = "ti,omap4-scrm", .data = &scrm_data },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SOC_OMAP5
|
#ifdef CONFIG_SOC_OMAP5
|
||||||
{ .compatible = "ti,omap5-prm", .data = &omap4_prm_data },
|
{ .compatible = "ti,omap5-prm", .data = &omap5_prm_data },
|
||||||
{ .compatible = "ti,omap5-scrm", .data = &scrm_data },
|
{ .compatible = "ti,omap5-scrm", .data = &scrm_data },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SOC_DRA7XX
|
#ifdef CONFIG_SOC_DRA7XX
|
||||||
{ .compatible = "ti,dra7-prm", .data = &omap4_prm_data },
|
{ .compatible = "ti,dra7-prm", .data = &dra7_prm_data },
|
||||||
#endif
|
#endif
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
|
@ -47,22 +47,14 @@ void omap_prm_base_init(void)
|
||||||
|
|
||||||
s32 omap4_prmst_get_prm_dev_inst(void)
|
s32 omap4_prmst_get_prm_dev_inst(void)
|
||||||
{
|
{
|
||||||
if (prm_dev_inst != PRM_INSTANCE_UNKNOWN)
|
|
||||||
return prm_dev_inst;
|
|
||||||
|
|
||||||
/* This cannot be done way early at boot.. as things are not setup */
|
|
||||||
if (cpu_is_omap44xx())
|
|
||||||
prm_dev_inst = OMAP4430_PRM_DEVICE_INST;
|
|
||||||
else if (soc_is_omap54xx())
|
|
||||||
prm_dev_inst = OMAP54XX_PRM_DEVICE_INST;
|
|
||||||
else if (soc_is_dra7xx())
|
|
||||||
prm_dev_inst = DRA7XX_PRM_DEVICE_INST;
|
|
||||||
else if (soc_is_am43xx())
|
|
||||||
prm_dev_inst = AM43XX_PRM_DEVICE_INST;
|
|
||||||
|
|
||||||
return prm_dev_inst;
|
return prm_dev_inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void omap4_prminst_set_prm_dev_inst(s32 dev_inst)
|
||||||
|
{
|
||||||
|
prm_dev_inst = dev_inst;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read a register in a PRM instance */
|
/* Read a register in a PRM instance */
|
||||||
u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx)
|
u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#define PRM_INSTANCE_UNKNOWN -1
|
#define PRM_INSTANCE_UNKNOWN -1
|
||||||
extern s32 omap4_prmst_get_prm_dev_inst(void);
|
extern s32 omap4_prmst_get_prm_dev_inst(void);
|
||||||
|
void omap4_prminst_set_prm_dev_inst(s32 dev_inst);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In an ideal world, we would not export these low-level functions,
|
* In an ideal world, we would not export these low-level functions,
|
||||||
|
|
Loading…
Reference in New Issue