/*
 *
 * (C) COPYRIGHT 2012-2017 ARM Limited. All rights reserved.
 *
 * This program is free software and is provided to you under the terms of the
 * GNU General Public License version 2 as published by the Free Software
 * Foundation, and any use by you of this program is subject to the terms
 * of such GNU licence.
 *
 * A copy of the licence is included with the program, and can also be obtained
 * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA.
 *
 */





/**
 * @file
 * Run-time work-arounds helpers
 */

#ifndef _KBASE_HW_H_
#define _KBASE_HW_H_

#include "mali_kbase_defs.h"

/**
 * @brief Tell whether a work-around should be enabled
 */
#define kbase_hw_has_issue(kbdev, issue)\
	test_bit(issue, &(kbdev)->hw_issues_mask[0])

/**
 * @brief Tell whether a feature is supported
 */
#define kbase_hw_has_feature(kbdev, feature)\
	test_bit(feature, &(kbdev)->hw_features_mask[0])

/**
 * kbase_hw_set_issues_mask - Set the hardware issues mask based on the GPU ID
 * @kbdev: Device pointer
 *
 * Return: 0 if the GPU ID was recognized, otherwise -EINVAL.
 *
 * The GPU ID is read from the @kbdev.
 *
 * In debugging versions of the driver, unknown versions of a known GPU with a
 * new-format ID will be treated as the most recent known version not later
 * than the actual version. In such circumstances, the GPU ID in @kbdev will
 * also be replaced with the most recent known version.
 *
 * Note: The GPU configuration must have been read by
 * kbase_gpuprops_get_props() before calling this function.
 */
int kbase_hw_set_issues_mask(struct kbase_device *kbdev);

/**
 * @brief Set the features mask depending on the GPU ID
 */
void kbase_hw_set_features_mask(struct kbase_device *kbdev);

#endif				/* _KBASE_HW_H_ */
