mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-29 06:31:28 +01:00
remoteproc: stm32: track the coprocessor state in a backup register
Update the dedicated backup register to track the coprocessor state and rely on that register to compute the .is_running() value (which expects a return value of 0 -not 1- if the processor is running). Signed-off-by: Fabien Dessenne <fabien.dessenne@st.com> Acked-by: Patrick Delaunay <patrick.delaunay@st.com>
This commit is contained in:
parent
7bff971a14
commit
4a4deb870f
@ -22,14 +22,12 @@
|
|||||||
* @hold_boot_regmap: regmap for remote processor reset hold boot
|
* @hold_boot_regmap: regmap for remote processor reset hold boot
|
||||||
* @hold_boot_offset: offset of the register controlling the hold boot setting
|
* @hold_boot_offset: offset of the register controlling the hold boot setting
|
||||||
* @hold_boot_mask: bitmask of the register for the hold boot field
|
* @hold_boot_mask: bitmask of the register for the hold boot field
|
||||||
* @is_running: is the remote processor running
|
|
||||||
*/
|
*/
|
||||||
struct stm32_copro_privdata {
|
struct stm32_copro_privdata {
|
||||||
struct reset_ctl reset_ctl;
|
struct reset_ctl reset_ctl;
|
||||||
struct regmap *hold_boot_regmap;
|
struct regmap *hold_boot_regmap;
|
||||||
uint hold_boot_offset;
|
uint hold_boot_offset;
|
||||||
uint hold_boot_mask;
|
uint hold_boot_mask;
|
||||||
bool is_running;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -165,11 +163,8 @@ static int stm32_copro_load(struct udevice *dev, ulong addr, ulong size)
|
|||||||
*/
|
*/
|
||||||
static int stm32_copro_start(struct udevice *dev)
|
static int stm32_copro_start(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct stm32_copro_privdata *priv;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
priv = dev_get_priv(dev);
|
|
||||||
|
|
||||||
/* move hold boot from true to false start the copro */
|
/* move hold boot from true to false start the copro */
|
||||||
ret = stm32_copro_set_hold_boot(dev, false);
|
ret = stm32_copro_set_hold_boot(dev, false);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -180,7 +175,8 @@ static int stm32_copro_start(struct udevice *dev)
|
|||||||
* rebooting autonomously
|
* rebooting autonomously
|
||||||
*/
|
*/
|
||||||
ret = stm32_copro_set_hold_boot(dev, true);
|
ret = stm32_copro_set_hold_boot(dev, true);
|
||||||
priv->is_running = !ret;
|
writel(ret ? TAMP_COPRO_STATE_OFF : TAMP_COPRO_STATE_CRUN,
|
||||||
|
TAMP_COPRO_STATE);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +202,7 @@ static int stm32_copro_reset(struct udevice *dev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->is_running = false;
|
writel(TAMP_COPRO_STATE_OFF, TAMP_COPRO_STATE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -224,14 +220,11 @@ static int stm32_copro_stop(struct udevice *dev)
|
|||||||
/**
|
/**
|
||||||
* stm32_copro_is_running() - Is the STM32 remote processor running
|
* stm32_copro_is_running() - Is the STM32 remote processor running
|
||||||
* @dev: corresponding STM32 remote processor device
|
* @dev: corresponding STM32 remote processor device
|
||||||
* @return 1 if the remote processor is running, 0 otherwise
|
* @return 0 if the remote processor is running, 1 otherwise
|
||||||
*/
|
*/
|
||||||
static int stm32_copro_is_running(struct udevice *dev)
|
static int stm32_copro_is_running(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct stm32_copro_privdata *priv;
|
return (readl(TAMP_COPRO_STATE) == TAMP_COPRO_STATE_OFF);
|
||||||
|
|
||||||
priv = dev_get_priv(dev);
|
|
||||||
return priv->is_running;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct dm_rproc_ops stm32_copro_ops = {
|
static const struct dm_rproc_ops stm32_copro_ops = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user