Home | History | Annotate | Download | only in ast2500
      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 
     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 
     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 
     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 
     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