aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Crews <ncrews@chromium.org>2019-04-12 14:14:43 -0400
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>2019-04-16 05:00:36 -0400
commit9e2b0e0be64227ba8f09008d32d75280595a5464 (patch)
treed6f988520b8dad67e6af09ef4646fa8252cec064
parent14e14aaf61321ba30d0bbdf4c4668f260ca1141c (diff)
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 <ncrews@chromium.org> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
-rw-r--r--Documentation/ABI/testing/debugfs-wilco-ec13
-rw-r--r--drivers/platform/chrome/wilco_ec/debugfs.c47
2 files changed, 60 insertions, 0 deletions
diff --git a/Documentation/ABI/testing/debugfs-wilco-ec b/Documentation/ABI/testing/debugfs-wilco-ec
index 7ff6b45be703..73a5a66ddca6 100644
--- a/Documentation/ABI/testing/debugfs-wilco-ec
+++ b/Documentation/ABI/testing/debugfs-wilco-ec
@@ -1,3 +1,16 @@
1What: /sys/kernel/debug/wilco_ec/h1_gpio
2Date: April 2019
3KernelVersion: 5.2
4Description:
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
1What: /sys/kernel/debug/wilco_ec/raw 14What: /sys/kernel/debug/wilco_ec/raw
2Date: January 2019 15Date: January 2019
3KernelVersion: 5.1 16KernelVersion: 5.1
diff --git a/drivers/platform/chrome/wilco_ec/debugfs.c b/drivers/platform/chrome/wilco_ec/debugfs.c
index 8d307378c1cb..f163476d080d 100644
--- a/drivers/platform/chrome/wilco_ec/debugfs.c
+++ b/drivers/platform/chrome/wilco_ec/debugfs.c
@@ -164,6 +164,51 @@ static const struct file_operations fops_raw = {
164 .llseek = no_llseek, 164 .llseek = no_llseek,
165}; 165};
166 166
167#define CMD_KB_CHROME 0x88
168#define SUB_CMD_H1_GPIO 0x0A
169
170struct 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
176struct 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
181static 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
210DEFINE_DEBUGFS_ATTRIBUTE(fops_h1_gpio, h1_gpio_get, NULL, "0x%02llx\n");
211
167/** 212/**
168 * wilco_ec_debugfs_probe() - Create the debugfs node 213 * wilco_ec_debugfs_probe() - Create the debugfs node
169 * @pdev: The platform device, probably created in core.c 214 * @pdev: The platform device, probably created in core.c
@@ -185,6 +230,8 @@ static int wilco_ec_debugfs_probe(struct platform_device *pdev)
185 if (!debug_info->dir) 230 if (!debug_info->dir)
186 return 0; 231 return 0;
187 debugfs_create_file("raw", 0644, debug_info->dir, NULL, &fops_raw); 232 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);
188 235
189 return 0; 236 return 0;
190} 237}