114e4b149Smaxims@google.com /* 214e4b149Smaxims@google.com * Copyright (C) 2016 Google, Inc 314e4b149Smaxims@google.com * 414e4b149Smaxims@google.com * SPDX-License-Identifier: GPL-2.0+ 514e4b149Smaxims@google.com */ 614e4b149Smaxims@google.com 714e4b149Smaxims@google.com #include <common.h> 814e4b149Smaxims@google.com #include <dm.h> 9*413353b3Smaxims@google.com #include <asm/io.h> 1014e4b149Smaxims@google.com #include <asm/arch/scu_ast2500.h> 1114e4b149Smaxims@google.com ast_get_clk(struct udevice ** devp)1214e4b149Smaxims@google.comint ast_get_clk(struct udevice **devp) 1314e4b149Smaxims@google.com { 1414e4b149Smaxims@google.com return uclass_get_device_by_driver(UCLASS_CLK, 1514e4b149Smaxims@google.com DM_GET_DRIVER(aspeed_ast2500_scu), devp); 1614e4b149Smaxims@google.com } 1714e4b149Smaxims@google.com ast_get_scu(void)1814e4b149Smaxims@google.comvoid *ast_get_scu(void) 1914e4b149Smaxims@google.com { 2014e4b149Smaxims@google.com struct ast2500_clk_priv *priv; 2114e4b149Smaxims@google.com struct udevice *dev; 2214e4b149Smaxims@google.com int ret; 2314e4b149Smaxims@google.com 2414e4b149Smaxims@google.com ret = ast_get_clk(&dev); 2514e4b149Smaxims@google.com if (ret) 2614e4b149Smaxims@google.com return ERR_PTR(ret); 2714e4b149Smaxims@google.com 2814e4b149Smaxims@google.com priv = dev_get_priv(dev); 2914e4b149Smaxims@google.com 3014e4b149Smaxims@google.com return priv->scu; 3114e4b149Smaxims@google.com } 32*413353b3Smaxims@google.com ast_scu_unlock(struct ast2500_scu * scu)33*413353b3Smaxims@google.comvoid ast_scu_unlock(struct ast2500_scu *scu) 34*413353b3Smaxims@google.com { 35*413353b3Smaxims@google.com writel(SCU_UNLOCK_VALUE, &scu->protection_key); 36*413353b3Smaxims@google.com while (!readl(&scu->protection_key)) 37*413353b3Smaxims@google.com ; 38*413353b3Smaxims@google.com } 39*413353b3Smaxims@google.com ast_scu_lock(struct ast2500_scu * scu)40*413353b3Smaxims@google.comvoid ast_scu_lock(struct ast2500_scu *scu) 41*413353b3Smaxims@google.com { 42*413353b3Smaxims@google.com writel(~SCU_UNLOCK_VALUE, &scu->protection_key); 43*413353b3Smaxims@google.com while (readl(&scu->protection_key)) 44*413353b3Smaxims@google.com ; 45*413353b3Smaxims@google.com } 46