hc
2024-03-26 e9199a72d842cbda78ac614eee5db7cdaa6f2530
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* 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 */