| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Intel MAX 10 Board Management Controller chip. |
| * |
| * Copyright (C) 2018-2020 Intel Corporation, Inc. |
| */ |
| #ifndef __MFD_INTEL_M10_BMC_H |
| #define __MFD_INTEL_M10_BMC_H |
| |
| #include <linux/regmap.h> |
| |
| #define M10BMC_LEGACY_SYS_BASE 0x300400 |
| #define M10BMC_SYS_BASE 0x300800 |
| #define M10BMC_MEM_END 0x1fffffff |
| |
| /* Register offset of system registers */ |
| #define NIOS2_FW_VERSION 0x0 |
| #define M10BMC_TEST_REG 0x3c |
| #define M10BMC_BUILD_VER 0x68 |
| #define M10BMC_VER_MAJOR_MSK GENMASK(23, 16) |
| #define M10BMC_VER_PCB_INFO_MSK GENMASK(31, 24) |
| #define M10BMC_VER_LEGACY_INVALID 0xffffffff |
| |
| /** |
| * struct intel_m10bmc - Intel MAX 10 BMC parent driver data structure |
| * @dev: this device |
| * @regmap: the regmap used to access registers by m10bmc itself |
| */ |
| struct intel_m10bmc { |
| struct device *dev; |
| struct regmap *regmap; |
| }; |
| |
| /* |
| * register access helper functions. |
| * |
| * m10bmc_raw_read - read m10bmc register per addr |
| * m10bmc_sys_read - read m10bmc system register per offset |
| */ |
| static inline int |
| m10bmc_raw_read(struct intel_m10bmc *m10bmc, unsigned int addr, |
| unsigned int *val) |
| { |
| int ret; |
| |
| ret = regmap_read(m10bmc->regmap, addr, val); |
| if (ret) |
| dev_err(m10bmc->dev, "fail to read raw reg %x: %d\n", |
| addr, ret); |
| |
| return ret; |
| } |
| |
| /* |
| * The base of the system registers could be configured by HW developers, and |
| * in HW SPEC, the base is not added to the addresses of the system registers. |
| * |
| * This macro helps to simplify the accessing of the system registers. And if |
| * the base is reconfigured in HW, SW developers could simply change the |
| * M10BMC_SYS_BASE accordingly. |
| */ |
| #define m10bmc_sys_read(m10bmc, offset, val) \ |
| m10bmc_raw_read(m10bmc, M10BMC_SYS_BASE + (offset), val) |
| |
| #endif /* __MFD_INTEL_M10_BMC_H */ |