coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
reg_access.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _GALILEO_REG_ACCESS_H_
4 #define _GALILEO_REG_ACCESS_H_
5 
6 #include <fsp/util.h>
7 #include <reg_script.h>
8 #include <soc/IntelQNCConfig.h>
9 #include <soc/QuarkNcSocId.h>
10 #include <soc/reg_access.h>
11 
12 enum {
14  /* Add additional mainboard access types here*/
15 };
16 
17 enum {
18  GEN1_I2C_GPIO_EXP_0x20 = 0x20, /* Cypress CY8C9540A */
19  GEN1_I2C_GPIO_EXP_0x21 = 0x21, /* Cypress CY8C9540A */
20 
21  GEN2_I2C_GPIO_EXP0 = 0x25, /* NXP PCAL9535A */
22  GEN2_I2C_GPIO_EXP1 = 0x26, /* NXP PCAL9535A */
23  GEN2_I2C_GPIO_EXP2 = 0x27, /* NXP PCAL9535A */
24  GEN2_I2C_LED_PWM = 0x47, /* NXP PCAL9685 */
25 };
26 
27 /* Cypress CY8C9548A registers */
28 #define GEN1_GPIO_EXP_INPUT0 0x00
29 #define GEN1_GPIO_EXP_INPUT1 0x01
30 #define GEN1_GPIO_EXP_INPUT2 0x02
31 #define GEN1_GPIO_EXP_INPUT3 0x03
32 #define GEN1_GPIO_EXP_INPUT4 0x04
33 #define GEN1_GPIO_EXP_INPUT5 0x05
34 #define GEN1_GPIO_EXP_OUTPUT0 0x08
35 #define GEN1_GPIO_EXP_OUTPUT1 0x09
36 #define GEN1_GPIO_EXP_OUTPUT2 0x0a
37 #define GEN1_GPIO_EXP_OUTPUT3 0x0b
38 #define GEN1_GPIO_EXP_OUTPUT4 0x0c
39 #define GEN1_GPIO_EXP_OUTPUT5 0x0d
40 #define GEN1_GPIO_EXP_PORT_SELECT 0x18
41 #define GEN1_GPIO_EXP_PORT_DIR 0x1c
42 
43 /* NXP PCAL9535A registers */
44 #define GEN2_GPIO_EXP_INPUT0 0x00
45 #define GEN2_GPIO_EXP_INPUT1 0x01
46 #define GEN2_GPIO_EXP_OUTPUT0 0x02
47 #define GEN2_GPIO_EXP_OUTPUT1 0x03
48 #define GEN2_GPIO_EXP_POLARITY0 0x04
49 #define GEN2_GPIO_EXP_POLARITY1 0x05
50 #define GEN2_GPIO_EXP_CONFIG0 0x06
51 #define GEN2_GPIO_EXP_CONFIG1 0x07
52 #define GEN2_GPIO_EXP_INPUT_LATCH0 0x44
53 #define GEN2_GPIO_EXP_INPUT_LATCH1 0x45
54 #define GEN2_GPIO_EXP_PULL_UP_DOWN_EN0 0x46
55 #define GEN2_GPIO_EXP_PULL_UP_DOWN_EN1 0x47
56 #define GEN2_GPIO_EXP_PULL_UP_DOWN_SEL0 0x46
57 #define GEN2_GPIO_EXP_PULL_UP_DOWN_SEL1 0x47
58 
59 #define MAINBOARD_ACCESS(cmd_, reg_, size_, mask_, value_, timeout_, reg_set_) \
60  _REG_SCRIPT_ENCODE_RAW(REG_SCRIPT_COMMAND_##cmd_, MAINBOARD_TYPE, \
61  size_, reg_, mask_, value_, timeout_, reg_set_)
62 
63 /* I2C chip register access macros */
64 #define REG_I2C_ACCESS(cmd_, reg_, mask_, value_, timeout_, slave_addr_) \
65  MAINBOARD_ACCESS(cmd_, reg_, REG_SCRIPT_SIZE_8, mask_, value_, \
66  timeout_, slave_addr_)
67 #define REG_I2C_READ(slave_addr_, reg_) \
68  REG_I2C_ACCESS(READ, reg_, 0, 0, 0, slave_addr_)
69 #define REG_I2C_WRITE(slave_addr_, reg_, value_) \
70  REG_I2C_ACCESS(WRITE, reg_, 0, value_, 0, slave_addr_)
71 #define REG_I2C_AND(slave_addr_, reg_, value_) \
72  REG_I2C_RMW(slave_addr_, reg_, value_, 0)
73 #define REG_I2C_RMW(slave_addr_, reg_, mask_, value_) \
74  REG_I2C_ACCESS(RMW, reg_, mask_, value_, 0, slave_addr_)
75 #define REG_I2C_RXW(slave_addr_, reg_, mask_, value_) \
76  REG_I2C_ACCESS(RXW, reg_, mask_, value_, 0, slave_addr_)
77 #define REG_I2C_OR(slave_addr_, reg_, value_) \
78  REG_I2C_RMW(slave_addr_, reg_, 0xff, value_)
79 #define REG_I2C_POLL(slave_addr_, reg_, mask_, value_, timeout_) \
80  REG_I2C_ACCESS(POLL, reg_, mask_, value_, timeout_, slave_addr_)
81 #define REG_I2C_XOR(slave_addr_, reg_, value_) \
82  REG_I2C_RXW(slave_addr_, reg_, 0xff, value_)
83 
84 #endif /* _GALILEO_REG_ACCESS_H_ */
@ GEN2_I2C_GPIO_EXP1
Definition: reg_access.h:22
@ GEN1_I2C_GPIO_EXP_0x20
Definition: reg_access.h:18
@ GEN2_I2C_GPIO_EXP2
Definition: reg_access.h:23
@ GEN1_I2C_GPIO_EXP_0x21
Definition: reg_access.h:19
@ GEN2_I2C_GPIO_EXP0
Definition: reg_access.h:21
@ GEN2_I2C_LED_PWM
Definition: reg_access.h:24
@ MAINBOARD_TYPE
Definition: reg_access.h:13
@ REG_SCRIPT_TYPE_MAINBOARD_BASE
Definition: reg_script.h:54