blob: 7d864a4088036b065036803f385731223e23d9db [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
maxims@google.com2d5a2ad2017-01-18 13:44:56 -08002/*
3 * Copyright (C) 2016 Google, Inc
maxims@google.com2d5a2ad2017-01-18 13:44:56 -08004 */
5
6#include <common.h>
7#include <dm.h>
maxims@google.comadea66c2017-04-17 12:00:23 -07008#include <asm/io.h>
maxims@google.com2d5a2ad2017-01-18 13:44:56 -08009#include <asm/arch/scu_ast2500.h>
10
11int ast_get_clk(struct udevice **devp)
12{
13 return uclass_get_device_by_driver(UCLASS_CLK,
14 DM_GET_DRIVER(aspeed_ast2500_scu), devp);
15}
16
17void *ast_get_scu(void)
18{
19 struct ast2500_clk_priv *priv;
20 struct udevice *dev;
21 int ret;
22
23 ret = ast_get_clk(&dev);
24 if (ret)
25 return ERR_PTR(ret);
26
27 priv = dev_get_priv(dev);
28
29 return priv->scu;
30}
maxims@google.comadea66c2017-04-17 12:00:23 -070031
32void ast_scu_unlock(struct ast2500_scu *scu)
33{
34 writel(SCU_UNLOCK_VALUE, &scu->protection_key);
35 while (!readl(&scu->protection_key))
36 ;
37}
38
39void ast_scu_lock(struct ast2500_scu *scu)
40{
41 writel(~SCU_UNLOCK_VALUE, &scu->protection_key);
42 while (readl(&scu->protection_key))
43 ;
44}