xref: /rk3399_rockchip-uboot/arch/arm/mach-aspeed/ast2500/clk_ast2500.c (revision 4f66e09bb9fbc47b73f67c3cc08ee2663e8fcdb1)
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.com int 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.com void *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.com void 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.com void 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