mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-12 14:23:00 +00:00
413353b30b
Make functions for locking and unlocking SCU part of SCU API. Many drivers need to modify settings in SCU and thus need to unlock it first. This change makes it possible. Signed-off-by: Maxim Sloyko <maxims@google.com> Reviewed-by: Simon Glass <sjg@chromium.org>
45 lines
790 B
C
45 lines
790 B
C
/*
|
|
* Copyright (C) 2016 Google, Inc
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <dm.h>
|
|
#include <asm/io.h>
|
|
#include <asm/arch/scu_ast2500.h>
|
|
|
|
int ast_get_clk(struct udevice **devp)
|
|
{
|
|
return uclass_get_device_by_driver(UCLASS_CLK,
|
|
DM_GET_DRIVER(aspeed_ast2500_scu), devp);
|
|
}
|
|
|
|
void *ast_get_scu(void)
|
|
{
|
|
struct ast2500_clk_priv *priv;
|
|
struct udevice *dev;
|
|
int ret;
|
|
|
|
ret = ast_get_clk(&dev);
|
|
if (ret)
|
|
return ERR_PTR(ret);
|
|
|
|
priv = dev_get_priv(dev);
|
|
|
|
return priv->scu;
|
|
}
|
|
|
|
void ast_scu_unlock(struct ast2500_scu *scu)
|
|
{
|
|
writel(SCU_UNLOCK_VALUE, &scu->protection_key);
|
|
while (!readl(&scu->protection_key))
|
|
;
|
|
}
|
|
|
|
void ast_scu_lock(struct ast2500_scu *scu)
|
|
{
|
|
writel(~SCU_UNLOCK_VALUE, &scu->protection_key);
|
|
while (readl(&scu->protection_key))
|
|
;
|
|
}
|