Skip to content

Commit 9e2b0e0

Browse files
Nick CrewsEnric Balletbo i Serra
authored andcommitted
platform/chrome: wilco_ec: Add h1_gpio status to debugfs
As part of Chrome OS's FAFT (Fully Automated Firmware Testing) tests, we need to ensure that the H1 chip is properly setting some GPIO lines. The h1_gpio attribute exposes the state of the lines: - ENTRY_TO_FACT_MODE in BIT(0) - SPI_CHROME_SEL in BIT(1) There are two reasons that I am exposing this in debugfs, and not as a GPIO: 1. This is only useful for testing, so end users shouldn't ever care about this. In fact, if it passes the tests, then the value of h1_gpio will always be 2, so it would be really uninteresting for users. 2. This GPIO is not connected to, controlled by, or really even related to the AP. The GPIO runs between the EC and the H1 security chip. Changes in v4: - Use "0x02x\n" instead of "02x\n" for format string - Use DEFINE_DEBUGFS_ATTRIBUTE() - Add documentation Changes in v3: - Fix documentation to correspond with formatting change in v2. Changes in v2: - Zero out the unused fields in the request. - Format result as "%02x\n" instead of as a decimal. Signed-off-by: Nick Crews <[email protected]> Signed-off-by: Enric Balletbo i Serra <[email protected]>
1 parent 14e14aa commit 9e2b0e0

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

Documentation/ABI/testing/debugfs-wilco-ec

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
What: /sys/kernel/debug/wilco_ec/h1_gpio
2+
Date: April 2019
3+
KernelVersion: 5.2
4+
Description:
5+
As part of Chrome OS's FAFT (Fully Automated Firmware Testing)
6+
tests, we need to ensure that the H1 chip is properly setting
7+
some GPIO lines. The h1_gpio attribute exposes the state
8+
of the lines:
9+
- ENTRY_TO_FACT_MODE in BIT(0)
10+
- SPI_CHROME_SEL in BIT(1)
11+
12+
Output will formatted with "0x%02x\n".
13+
114
What: /sys/kernel/debug/wilco_ec/raw
215
Date: January 2019
316
KernelVersion: 5.1

drivers/platform/chrome/wilco_ec/debugfs.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,51 @@ static const struct file_operations fops_raw = {
164164
.llseek = no_llseek,
165165
};
166166

167+
#define CMD_KB_CHROME 0x88
168+
#define SUB_CMD_H1_GPIO 0x0A
169+
170+
struct h1_gpio_status_request {
171+
u8 cmd; /* Always CMD_KB_CHROME */
172+
u8 reserved;
173+
u8 sub_cmd; /* Always SUB_CMD_H1_GPIO */
174+
} __packed;
175+
176+
struct hi_gpio_status_response {
177+
u8 status; /* 0 if allowed */
178+
u8 val; /* BIT(0)=ENTRY_TO_FACT_MODE, BIT(1)=SPI_CHROME_SEL */
179+
} __packed;
180+
181+
static int h1_gpio_get(void *arg, u64 *val)
182+
{
183+
struct wilco_ec_device *ec = arg;
184+
struct h1_gpio_status_request rq;
185+
struct hi_gpio_status_response rs;
186+
struct wilco_ec_message msg;
187+
int ret;
188+
189+
memset(&rq, 0, sizeof(rq));
190+
rq.cmd = CMD_KB_CHROME;
191+
rq.sub_cmd = SUB_CMD_H1_GPIO;
192+
193+
memset(&msg, 0, sizeof(msg));
194+
msg.type = WILCO_EC_MSG_LEGACY;
195+
msg.request_data = &rq;
196+
msg.request_size = sizeof(rq);
197+
msg.response_data = &rs;
198+
msg.response_size = sizeof(rs);
199+
ret = wilco_ec_mailbox(ec, &msg);
200+
if (ret < 0)
201+
return ret;
202+
if (rs.status)
203+
return -EIO;
204+
205+
*val = rs.val;
206+
207+
return 0;
208+
}
209+
210+
DEFINE_DEBUGFS_ATTRIBUTE(fops_h1_gpio, h1_gpio_get, NULL, "0x%02llx\n");
211+
167212
/**
168213
* wilco_ec_debugfs_probe() - Create the debugfs node
169214
* @pdev: The platform device, probably created in core.c
@@ -185,6 +230,8 @@ static int wilco_ec_debugfs_probe(struct platform_device *pdev)
185230
if (!debug_info->dir)
186231
return 0;
187232
debugfs_create_file("raw", 0644, debug_info->dir, NULL, &fops_raw);
233+
debugfs_create_file("h1_gpio", 0444, debug_info->dir, ec,
234+
&fops_h1_gpio);
188235

189236
return 0;
190237
}

0 commit comments

Comments
 (0)