• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2016 Google, Inc
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <asm/io.h>
9 #include <asm/arch/scu_ast2500.h>
10 
ast_get_clk(struct udevice ** devp)11 int 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 
ast_get_scu(void)17 void *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 }
31 
ast_scu_unlock(struct ast2500_scu * scu)32 void 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 
ast_scu_lock(struct ast2500_scu * scu)39 void ast_scu_lock(struct ast2500_scu *scu)
40 {
41 	writel(~SCU_UNLOCK_VALUE, &scu->protection_key);
42 	while (readl(&scu->protection_key))
43 		;
44 }
45