Skip to content

Commit 4d219b1

Browse files
naushirpelwell
authored andcommitted
spi: rp2040-gpio-bridge: Add debugfs progress indicator
Useful for tracking upload progress via userspace. Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
1 parent 3d39588 commit 4d219b1

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

drivers/spi/spi-rp2040-gpio-bridge.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include <crypto/hash.h>
9+
#include <linux/debugfs.h>
910
#include <linux/crypto.h>
1011
#include <linux/delay.h>
1112
#include <linux/firmware.h>
@@ -91,6 +92,9 @@ enum rp2040_gbdg_fixed_size_commands {
9192
struct rp2040_gbdg {
9293
struct spi_controller *controller;
9394

95+
struct dentry *debugfs;
96+
size_t transfer_progress;
97+
9498
struct i2c_client *client;
9599
struct crypto_shash *shash;
96100
struct shash_desc *shash_desc;
@@ -702,6 +706,7 @@ static int rp2040_gbdg_transfer_cached(struct rp2040_gbdg *priv_data,
702706
return 0;
703707
}
704708

709+
priv_data->transfer_progress = 0;
705710
while (length) {
706711
unsigned int xfer = min(length, RP2040_GBDG_BLOCK_SIZE);
707712

@@ -710,7 +715,9 @@ static int rp2040_gbdg_transfer_cached(struct rp2040_gbdg *priv_data,
710715
return ret;
711716
length -= xfer;
712717
data += xfer;
718+
priv_data->transfer_progress += xfer;
713719
}
720+
priv_data->transfer_progress = 0;
714721

715722
return 0;
716723
}
@@ -1016,13 +1023,24 @@ static int rp2040_gbdg_power_on(struct rp2040_gbdg *rp2040_gbdg)
10161023
return 0;
10171024
}
10181025

1026+
static int transfer_progress_show(struct seq_file *s, void *data)
1027+
{
1028+
struct rp2040_gbdg *rp2040_gbdg = s->private;
1029+
1030+
seq_printf(s, "%zu\n", rp2040_gbdg->transfer_progress);
1031+
return 0;
1032+
}
1033+
1034+
DEFINE_SHOW_ATTRIBUTE(transfer_progress);
1035+
10191036
static int rp2040_gbdg_probe(struct i2c_client *client)
10201037
{
10211038
struct rp2040_gbdg_device_info info;
10221039
struct spi_controller *controller;
10231040
struct device *dev = &client->dev;
10241041
struct rp2040_gbdg *rp2040_gbdg;
10251042
struct device_node *np;
1043+
char debugfs_name[128];
10261044
int ret;
10271045

10281046
np = dev->of_node;
@@ -1136,6 +1154,12 @@ static int rp2040_gbdg_probe(struct i2c_client *client)
11361154

11371155
rp2040_gbdg_parse_dt(rp2040_gbdg);
11381156

1157+
snprintf(debugfs_name, sizeof(debugfs_name), "rp2040-spi:%s",
1158+
dev_name(dev));
1159+
rp2040_gbdg->debugfs = debugfs_create_dir(debugfs_name, NULL);
1160+
debugfs_create_file("transfer_progress", 0444, rp2040_gbdg->debugfs,
1161+
rp2040_gbdg, &transfer_progress_fops);
1162+
11391163
pm_runtime_mark_last_busy(dev);
11401164
pm_runtime_put_autosuspend(dev);
11411165

0 commit comments

Comments
 (0)