drivers: fpga controller: add shell support
This adds shell support for FPGA drivers. Signed-off-by: Mateusz Sierszulski <msierszulski@internships.antmicro.com> Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
This commit is contained in:
parent
a64ce1fc6b
commit
c09dfb3bf6
9 changed files with 5703 additions and 0 deletions
|
@ -3,3 +3,4 @@
|
|||
zephyr_library()
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_EOS_S3_FPGA fpga_eos_s3.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_FPGA_SHELL fpga_shell.c)
|
||||
|
|
|
@ -14,6 +14,12 @@ module = fpga
|
|||
module-str = fpga
|
||||
source "subsys/logging/Kconfig.template.log_config"
|
||||
|
||||
config FPGA_SHELL
|
||||
bool "Enable FPGA Shell"
|
||||
depends on SHELL && FPGA
|
||||
help
|
||||
Enable FPGA Shell support.
|
||||
|
||||
source "drivers/fpga/Kconfig.eos_s3"
|
||||
|
||||
endif # FPGA
|
||||
|
|
142
drivers/fpga/fpga_shell.c
Normal file
142
drivers/fpga/fpga_shell.c
Normal file
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* Copyright (c) 2021 Antmicro <www.antmicro.com>
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <sys/printk.h>
|
||||
#include <shell/shell.h>
|
||||
#include <version.h>
|
||||
#include <stdlib.h>
|
||||
#include <drivers/fpga.h>
|
||||
|
||||
static int parse_common_args(const struct shell *sh, char **argv,
|
||||
const struct device **dev)
|
||||
{
|
||||
*dev = device_get_binding(argv[1]);
|
||||
if (!*dev) {
|
||||
shell_error(sh, "FPGA device %s not found", argv[1]);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_on(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s: turning on", dev->name);
|
||||
|
||||
err = fpga_on(dev);
|
||||
if (err) {
|
||||
shell_error(sh, "Error: %d", err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int cmd_off(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s: turning off", dev->name);
|
||||
|
||||
err = fpga_off(dev);
|
||||
if (err) {
|
||||
shell_error(sh, "Error: %d", err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int cmd_reset(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s: resetting FPGA", dev->name);
|
||||
|
||||
err = fpga_reset(dev);
|
||||
if (err) {
|
||||
shell_error(sh, "Error: %d", err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int cmd_load(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s: loading bitstream", dev->name);
|
||||
|
||||
fpga_load(dev, (uint32_t *)strtol(argv[2], NULL, 0),
|
||||
(uint32_t)atoi(argv[3]));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int cmd_get_status(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s status: %d", dev->name, fpga_get_status(dev));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int cmd_get_info(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
const struct device *dev;
|
||||
int err;
|
||||
|
||||
err = parse_common_args(sh, argv, &dev);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
shell_print(sh, "%s", fpga_get_info(dev));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(
|
||||
sub_fpga, SHELL_CMD_ARG(off, NULL, "<device>", cmd_off, 2, 0),
|
||||
SHELL_CMD_ARG(on, NULL, "<device>", cmd_on, 2, 0),
|
||||
SHELL_CMD_ARG(reset, NULL, "<device>", cmd_reset, 2, 0),
|
||||
SHELL_CMD_ARG(load, NULL, "<device> <address> <size in bytes>",
|
||||
cmd_load, 4, 0),
|
||||
SHELL_CMD_ARG(get_status, NULL, "<device>", cmd_get_status, 2, 0),
|
||||
SHELL_CMD_ARG(get_info, NULL, "<device>", cmd_get_info, 2, 0),
|
||||
SHELL_SUBCMD_SET_END);
|
||||
|
||||
SHELL_CMD_REGISTER(fpga, &sub_fpga, "FPGA commands", NULL);
|
Loading…
Add table
Add a link
Reference in a new issue