aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2020-10-15 15:31:43 +0200
committerMarek Vasut <marex@denx.de>2020-10-15 15:52:45 +0200
commit916ddc20aa792b52953006d4c695943c677c82d0 (patch)
tree66351db21ae5ada25376bbf8837e61f936295379
parentdb23ac0d857322342b37b9ae74ea3ac8015a1f8b (diff)
downloadlinux-2.6-stm32mp1-ebi2-ksz8851-perf-v1.tar.gz
FIXME: Add ks8851 ioread/iowrite perf teststm32mp1-ebi2-ksz8851-perf-v1
$ cd /sys/kernel/debug/tracing/ ; echo 0 > tracing_on ; echo "ks8851*" > set_ftrace_filter ; echo function_graph > current_tracer $ echo 1 > tracing_on ; cat /sys/devices/platform/soc/58002000.nand-controller/58002000.nand-controller:ebi/64000000.ks8851mll/read_test ; echo 0 > tracing_on $ echo 1 > tracing_on ; cat /sys/devices/platform/soc/58002000.nand-controller/58002000.nand-controller:ebi/64000000.ks8851mll/write_test ; echo 0 > tracing_on $ cat trace # tracer: function_graph # # CPU DURATION FUNCTION CALLS # | | | | | | | 1) | ks8851_show_read_test() { 1) | /* Start CIDER register READ test */ 1) | /* Stop CIDER register READ test */ 1) @ 188587.6 us | } 0) | ks8851_show_write_test() { 0) | /* Start CIDER register WRITE test */ 0) | /* Stop CIDER register WRITE test */ 0) @ 139429.0 us | } Signed-off-by: Marek Vasut <marex@denx.de>
-rw-r--r--drivers/net/ethernet/micrel/ks8851_mll.c56
1 files changed, 55 insertions, 1 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c
index dabc19aab12e05..66a384b8447462 100644
--- a/drivers/net/ethernet/micrel/ks8851_mll.c
+++ b/drivers/net/ethernet/micrel/ks8851_mll.c
@@ -1391,6 +1391,51 @@ static const struct of_device_id ks8851_ml_dt_ids[] = {
MODULE_DEVICE_TABLE(of, ks8851_ml_dt_ids);
#endif
+static ssize_t ks8851_show_read_test(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct net_device *ndev = dev_get_drvdata(dev);
+ struct ks_net *ks = netdev_priv(ndev);
+ int i;
+
+ trace_printk("Start CIDER register READ test\n");
+ for (i = 0; i < 1000000; i++)
+ ioread16(ks->hw_addr_cmd);
+ trace_printk("Stop CIDER register READ test\n");
+
+ return 0;
+}
+
+static ssize_t ks8851_show_write_test(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct net_device *ndev = dev_get_drvdata(dev);
+ struct ks_net *ks = netdev_priv(ndev);
+ u16 cider = ks_rdreg16(ks, KS_CIDER);
+ int i;
+
+ trace_printk("Start CIDER register WRITE test\n");
+ for (i = 0; i < 1000000; i++)
+ iowrite16(KS_CIDER | ((BE1 | BE0) << (KS_CIDER & 0x02)), ks->hw_addr_cmd);
+ trace_printk("Stop CIDER register WRITE test\n");
+
+ return 0;
+}
+
+static DEVICE_ATTR(read_test, 0440, ks8851_show_read_test, NULL);
+static DEVICE_ATTR(write_test, 0440, ks8851_show_write_test, NULL);
+
+static struct attribute *ks8851_device_attrs[] = {
+ &dev_attr_read_test.attr,
+ &dev_attr_write_test.attr,
+ NULL,
+};
+
+
+static const struct attribute_group ks8851_attr_group = {
+ .attrs = ks8851_device_attrs,
+};
+
static int ks8851_probe(struct platform_device *pdev)
{
int err;
@@ -1474,9 +1519,15 @@ static int ks8851_probe(struct platform_device *pdev)
goto err_free;
}
+ err = sysfs_create_group(&pdev->dev.kobj, &ks8851_attr_group);
+ if (err) {
+ netdev_err(netdev, "Error creating sysfs files\n");
+ goto err_free;
+ }
+
err = register_netdev(netdev);
if (err)
- goto err_free;
+ goto err_free_sysfs;
platform_set_drvdata(pdev, netdev);
@@ -1531,6 +1582,8 @@ static int ks8851_probe(struct platform_device *pdev)
err_pdata:
unregister_netdev(netdev);
+err_free_sysfs:
+ sysfs_remove_group(&pdev->dev.kobj, &ks8851_attr_group);
err_free:
free_netdev(netdev);
return err;
@@ -1541,6 +1594,7 @@ static int ks8851_remove(struct platform_device *pdev)
struct net_device *netdev = platform_get_drvdata(pdev);
unregister_netdev(netdev);
+ sysfs_remove_group(&pdev->dev.kobj, &ks8851_attr_group);
free_netdev(netdev);
return 0;