162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci// Copyright (C) 2012-2014 Broadcom Corporation
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/init.h>
662306a36Sopenharmony_ci#include <linux/printk.h>
762306a36Sopenharmony_ci#include <asm/hardware/cache-l2x0.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include "bcm_kona_smc.h"
1062306a36Sopenharmony_ci#include "kona_l2_cache.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_civoid __init kona_l2_cache_init(void)
1362306a36Sopenharmony_ci{
1462306a36Sopenharmony_ci	unsigned int result;
1562306a36Sopenharmony_ci	int ret;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	ret = bcm_kona_smc_init();
1862306a36Sopenharmony_ci	if (ret) {
1962306a36Sopenharmony_ci		pr_info("Secure API not available (%d). Skipping L2 init.\n",
2062306a36Sopenharmony_ci			ret);
2162306a36Sopenharmony_ci		return;
2262306a36Sopenharmony_ci	}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	result = bcm_kona_smc(SSAPI_ENABLE_L2_CACHE, 0, 0, 0, 0);
2562306a36Sopenharmony_ci	if (result != SEC_ROM_RET_OK) {
2662306a36Sopenharmony_ci		pr_err("Secure Monitor call failed (%u)! Skipping L2 init.\n",
2762306a36Sopenharmony_ci			result);
2862306a36Sopenharmony_ci		return;
2962306a36Sopenharmony_ci	}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci	/*
3262306a36Sopenharmony_ci	 * The aux_val and aux_mask have no effect since L2 cache is already
3362306a36Sopenharmony_ci	 * enabled.  Pass 0s for aux_val and 1s for aux_mask for default value.
3462306a36Sopenharmony_ci	 */
3562306a36Sopenharmony_ci	ret = l2x0_of_init(0, ~0);
3662306a36Sopenharmony_ci	if (ret)
3762306a36Sopenharmony_ci		pr_err("Couldn't enable L2 cache: %d\n", ret);
3862306a36Sopenharmony_ci}
39