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)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 ast_get_scu(void)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 } 31 ast_scu_unlock(struct ast2500_scu * scu)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 ast_scu_lock(struct ast2500_scu * scu)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 } 45