xref: /openbmc/linux/arch/arm/mach-bcm/kona_l2_cache.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*52e6676eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2*52e6676eSThomas Gleixner // Copyright (C) 2012-2014 Broadcom Corporation
3eeda4cb9SAlex Elder 
4eeda4cb9SAlex Elder 
5eeda4cb9SAlex Elder #include <linux/init.h>
6eeda4cb9SAlex Elder #include <linux/printk.h>
7eeda4cb9SAlex Elder #include <asm/hardware/cache-l2x0.h>
8eeda4cb9SAlex Elder 
9eeda4cb9SAlex Elder #include "bcm_kona_smc.h"
10423779cfSBen Dooks #include "kona_l2_cache.h"
11eeda4cb9SAlex Elder 
kona_l2_cache_init(void)12eeda4cb9SAlex Elder void __init kona_l2_cache_init(void)
13eeda4cb9SAlex Elder {
14eeda4cb9SAlex Elder 	unsigned int result;
15eeda4cb9SAlex Elder 	int ret;
16eeda4cb9SAlex Elder 
17eeda4cb9SAlex Elder 	ret = bcm_kona_smc_init();
18eeda4cb9SAlex Elder 	if (ret) {
19eeda4cb9SAlex Elder 		pr_info("Secure API not available (%d). Skipping L2 init.\n",
20eeda4cb9SAlex Elder 			ret);
21eeda4cb9SAlex Elder 		return;
22eeda4cb9SAlex Elder 	}
23eeda4cb9SAlex Elder 
24eeda4cb9SAlex Elder 	result = bcm_kona_smc(SSAPI_ENABLE_L2_CACHE, 0, 0, 0, 0);
25eeda4cb9SAlex Elder 	if (result != SEC_ROM_RET_OK) {
26eeda4cb9SAlex Elder 		pr_err("Secure Monitor call failed (%u)! Skipping L2 init.\n",
27eeda4cb9SAlex Elder 			result);
28eeda4cb9SAlex Elder 		return;
29eeda4cb9SAlex Elder 	}
30eeda4cb9SAlex Elder 
31eeda4cb9SAlex Elder 	/*
32eeda4cb9SAlex Elder 	 * The aux_val and aux_mask have no effect since L2 cache is already
33eeda4cb9SAlex Elder 	 * enabled.  Pass 0s for aux_val and 1s for aux_mask for default value.
34eeda4cb9SAlex Elder 	 */
35eeda4cb9SAlex Elder 	ret = l2x0_of_init(0, ~0);
36eeda4cb9SAlex Elder 	if (ret)
37eeda4cb9SAlex Elder 		pr_err("Couldn't enable L2 cache: %d\n", ret);
38eeda4cb9SAlex Elder }
39