mirror of
git://nv-tegra.nvidia.com/linux-hwpm.git
synced 2025-12-22 17:30:40 +03:00
Currently, read/write functions validate aperture and mmio address pointers. However, the error cannot be returned to the parent resulting into undetected errors. Modify all read write functions to return error on failure. This will also allow HWPM driver to know about unavailable IP perfmuxes. Jira THWPM-41 Change-Id: I6cc4ba7a831d5058657d4f2536b1ce3ab20b30c6 Signed-off-by: Vedashree Vidwans <vvidwans@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2707446 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: Vasuki Shankar <vasukis@nvidia.com> Reviewed-by: Seema Khowala <seemaj@nvidia.com> GVS: Gerrit_Virtual_Submit
69 lines
2.1 KiB
C
69 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2021-2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*/
|
|
|
|
#ifndef TEGRA_HWPM_IO_H
|
|
#define TEGRA_HWPM_IO_H
|
|
|
|
/**
|
|
* Sets a particular field value in input data.
|
|
*
|
|
* Uses mask to clear specific bit positions in curr_val. field_val
|
|
* is used to set the bits in curr_val to be returned.
|
|
* Note: Function does not perform any validation of input parameters.
|
|
*
|
|
* curr_val [in] Current input data value.
|
|
*
|
|
* mask [in] Mask of the bits to be updated.
|
|
*
|
|
* field_val [in] Value to change the mask bits to.
|
|
*
|
|
* Returns updated value.
|
|
*/
|
|
static inline u32 set_field(u32 curr_val, u32 mask, u32 field_val)
|
|
{
|
|
return ((curr_val & ~mask) | field_val);
|
|
}
|
|
|
|
/**
|
|
* Retrieve value of specific bits from input data.
|
|
* Note: Function does not perform any validation of input parameters.
|
|
*
|
|
* input_data [in] Data to retrieve value from.
|
|
*
|
|
* mask [in] Mask of the bits to get value from.
|
|
*
|
|
* Return value from input_data corresponding to mask bits.
|
|
*/
|
|
static inline u32 get_field(u32 input_data, u32 mask)
|
|
{
|
|
return (input_data & mask);
|
|
}
|
|
|
|
|
|
struct tegra_soc_hwpm;
|
|
struct hwpm_ip_inst;
|
|
struct hwpm_ip_aperture;
|
|
|
|
int tegra_hwpm_readl(struct tegra_soc_hwpm *hwpm,
|
|
struct hwpm_ip_aperture *aperture, u64 addr, u32 *val);
|
|
int tegra_hwpm_writel(struct tegra_soc_hwpm *hwpm,
|
|
struct hwpm_ip_aperture *aperture, u64 addr, u32 val);
|
|
int tegra_hwpm_regops_readl(struct tegra_soc_hwpm *hwpm,
|
|
struct hwpm_ip_inst *ip_inst, struct hwpm_ip_aperture *aperture,
|
|
u64 addr, u32 *val);
|
|
int tegra_hwpm_regops_writel(struct tegra_soc_hwpm *hwpm,
|
|
struct hwpm_ip_inst *ip_inst, struct hwpm_ip_aperture *aperture,
|
|
u64 addr, u32 val);
|
|
|
|
#endif /* TEGRA_HWPM_IO_H */
|