diff --git a/boards/sim/sim/sim/configs/rpproxy_virtio/defconfig b/boards/sim/sim/sim/configs/rpproxy_virtio/defconfig new file mode 100644 index 0000000000000..f0bfad2d0f8d8 --- /dev/null +++ b/boards/sim/sim/sim/configs/rpproxy_virtio/defconfig @@ -0,0 +1,86 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_NET_ETHERNET is not set +CONFIG_ARCH="sim" +CONFIG_ARCH_BOARD="sim" +CONFIG_ARCH_BOARD_SIM=y +CONFIG_ARCH_CHIP="sim" +CONFIG_ARCH_SIM=y +CONFIG_BLK_RPMSG=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BUILTIN=y +CONFIG_DEBUG_ASSERTIONS=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ERROR=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEV_RPMSG=y +CONFIG_DEV_SIMPLE_ADDRENV=y +CONFIG_EXAMPLES_HELLO=y +CONFIG_EXAMPLES_RPMSGSOCKET=y +CONFIG_FS_PROCFS=y +CONFIG_FS_RPMSGFS=y +CONFIG_IDLETHREAD_STACKSIZE=4096 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INPUT=y +CONFIG_LIBC_HOSTNAME="proxy" +CONFIG_MTD=y +CONFIG_MTD_BYTE_WRITE=y +CONFIG_NDEBUG=y +CONFIG_NET=y +CONFIG_NETDB_DNSCLIENT=y +CONFIG_NETDB_DNSCLIENT_MAXRESPONSE=176 +CONFIG_NETDB_DNSCLIENT_RECV_TIMEOUT=3 +CONFIG_NETDB_DNSSERVER_IPv4ADDR=0x771d1d1d +CONFIG_NETUTILS_IPERF=y +CONFIG_NET_RPMSG=y +CONFIG_NET_USRSOCK=y +CONFIG_NET_USRSOCK_ICMP=y +CONFIG_NET_USRSOCK_RPMSG=y +CONFIG_NET_USRSOCK_RPMSG_CPUNAME="server" +CONFIG_NET_USRSOCK_TCP=y +CONFIG_NET_USRSOCK_UDP=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_PROMPT_STRING="proxy> " +CONFIG_NSH_READLINE=y +CONFIG_OPENAMP_DEBUG=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_RPMSGMTD=y +CONFIG_RPMSG_PING=y +CONFIG_RPMSG_UART=y +CONFIG_RPMSG_VIRTIO=y +CONFIG_RTC=y +CONFIG_RTC_ARCH=y +CONFIG_RTC_DRIVER=y +CONFIG_RTC_EXTERNAL=y +CONFIG_RTC_RPMSG=y +CONFIG_RTC_RPMSG_SERVER_NAME="server" +CONFIG_SCHED_CHILD_STATUS=y +CONFIG_SCHED_HAVE_PARENT=y +CONFIG_SCHED_WAITPID=y +CONFIG_SENSORS=y +CONFIG_SENSORS_RPMSG=y +CONFIG_SIG_DEFAULT=y +CONFIG_SIM_M32=y +CONFIG_SYSLOG_PREFIX=y +CONFIG_SYSLOG_PREFIX_STRING="proxy" +CONFIG_SYSLOG_RPMSG=y +CONFIG_SYSLOG_RPMSG_SERVER_NAME="server" +CONFIG_SYSLOG_TIMESTAMP=y +CONFIG_SYSTEM_CLE=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_PING=y +CONFIG_UINPUT_BUTTONS=y +CONFIG_UINPUT_KEYBOARD=y +CONFIG_UINPUT_RPMSG=y +CONFIG_UINPUT_TOUCH=y +CONFIG_UORB=y +CONFIG_UORB_LISTENER=y +CONFIG_USENSOR=y diff --git a/boards/sim/sim/sim/configs/rpserver_virtio/defconfig b/boards/sim/sim/sim/configs/rpserver_virtio/defconfig new file mode 100644 index 0000000000000..58c859085e26d --- /dev/null +++ b/boards/sim/sim/sim/configs/rpserver_virtio/defconfig @@ -0,0 +1,111 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ARCH="sim" +CONFIG_ARCH_BOARD="sim" +CONFIG_ARCH_BOARD_SIM=y +CONFIG_ARCH_CHIP="sim" +CONFIG_ARCH_SIM=y +CONFIG_BLK_RPMSG_SERVER=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BUILTIN=y +CONFIG_CLK=y +CONFIG_CLK_RPMSG=y +CONFIG_DEBUG_ASSERTIONS=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ERROR=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEV_RPMSG_SERVER=y +CONFIG_DEV_SIMPLE_ADDRENV=y +CONFIG_EXAMPLES_RPMSGSOCKET=y +CONFIG_FS_HOSTFS=y +CONFIG_FS_PROCFS=y +CONFIG_FS_RPMSGFS_SERVER=y +CONFIG_IDLETHREAD_STACKSIZE=4096 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INPUT=y +CONFIG_IOB_BUFSIZE=256 +CONFIG_IOB_NBUFFERS=512 +CONFIG_IOB_THROTTLE=32 +CONFIG_IOEXPANDER=y +CONFIG_IOEXPANDER_RPMSG=y +CONFIG_LIBC_HOSTNAME="server" +CONFIG_MTD=y +CONFIG_MTD_BYTE_WRITE=y +CONFIG_NDEBUG=y +CONFIG_NET=y +CONFIG_NETDB_DNSCLIENT=y +CONFIG_NETDB_DNSCLIENT_MAXRESPONSE=176 +CONFIG_NETDB_DNSCLIENT_RECV_TIMEOUT=3 +CONFIG_NETDB_DNSSERVER_IPv4ADDR=0x771d1d1d +CONFIG_NETDEV_STATISTICS=y +CONFIG_NETINIT_DHCPC=y +CONFIG_NETINIT_THREAD=y +CONFIG_NETUTILS_DHCPC=y +CONFIG_NETUTILS_IPERF=y +CONFIG_NET_BROADCAST=y +CONFIG_NET_ICMP_SOCKET=y +CONFIG_NET_LOOPBACK=y +CONFIG_NET_RPMSG=y +CONFIG_NET_RPMSG_DRV=y +CONFIG_NET_STATISTICS=y +CONFIG_NET_TCP=y +CONFIG_NET_TCPBACKLOG=y +CONFIG_NET_TCP_WRITE_BUFFERS=y +CONFIG_NET_UDP=y +CONFIG_NET_UDP_WRITE_BUFFERS=y +CONFIG_NET_USRSOCK_RPMSG_SERVER=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_PROMPT_STRING="server> " +CONFIG_NSH_READLINE=y +CONFIG_OPENAMP_DEBUG=y +CONFIG_RAMMTD=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_RPMSG=y +CONFIG_RPMSGMTD_SERVER=y +CONFIG_RPMSG_PING=y +CONFIG_RPMSG_UART=y +CONFIG_RPMSG_VIRTIO=y +CONFIG_RTC=y +CONFIG_RTC_ARCH=y +CONFIG_RTC_DRIVER=y +CONFIG_RTC_RPMSG=y +CONFIG_RTC_RPMSG_SERVER=y +CONFIG_SCHED_CHILD_STATUS=y +CONFIG_SCHED_HAVE_PARENT=y +CONFIG_SCHED_WAITPID=y +CONFIG_SENSORS=y +CONFIG_SENSORS_RPMSG=y +CONFIG_SIG_DEFAULT=y +CONFIG_SIM_HOSTFS=y +CONFIG_SIM_M32=y +CONFIG_SIM_NETDEV=y +CONFIG_SIM_NET_BRIDGE=y +CONFIG_SIM_RPMSG_MASTER=y +CONFIG_SIM_UART0_NAME="/dev/ttyUSB0" +CONFIG_SIM_UART_NUMBER=1 +CONFIG_SYSLOG_PREFIX=y +CONFIG_SYSLOG_PREFIX_STRING="server" +CONFIG_SYSLOG_RPMSG_SERVER=y +CONFIG_SYSLOG_TIMESTAMP=y +CONFIG_SYSTEM_CLE=y +CONFIG_SYSTEM_CUTERM=y +CONFIG_SYSTEM_CUTERM_DEFAULT_DEVICE="/dev/ttyproxy" +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_PING=y +CONFIG_TTY_SIGINT=y +CONFIG_UINPUT_BUTTONS=y +CONFIG_UINPUT_KEYBOARD=y +CONFIG_UINPUT_RPMSG=y +CONFIG_UINPUT_TOUCH=y +CONFIG_UORB=y +CONFIG_UORB_LISTENER=y +CONFIG_USENSOR=y diff --git a/boards/sim/sim/sim/src/sim_bringup.c b/boards/sim/sim/sim/src/sim_bringup.c index 8c7fecbd25915..8411ec7f44649 100644 --- a/boards/sim/sim/sim/src/sim_bringup.c +++ b/boards/sim/sim/sim/src/sim_bringup.c @@ -483,6 +483,14 @@ int sim_bringup(void) # endif #endif +#ifdef CONFIG_RPMSG_VIRTIO +# ifdef CONFIG_SIM_RPMSG_MASTER + sim_rpmsg_virtio_init("server-proxy", "proxy", true); +# else + sim_rpmsg_virtio_init("server-proxy", "server", false); +# endif +#endif + #ifdef CONFIG_DEV_RPMSG rpmsgdev_register("server", "/dev/console", "/dev/server-console", 0); rpmsgdev_register("server", "/dev/null", "/dev/server-null", 0); diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index fc2a6d751bc11..522829b1ac64f 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1337,8 +1337,9 @@ FAR struct clk_s *clk_register(FAR const char *name, return clk; } -out: clk_list_unlock(irqflags); + +out: if (clk->parents) { kmm_free(clk->parents); diff --git a/drivers/clk/clk.h b/drivers/clk/clk.h index 917e565e2cda2..c06095cbad0bd 100644 --- a/drivers/clk/clk.h +++ b/drivers/clk/clk.h @@ -57,6 +57,14 @@ static inline uint32_t clk_read(uint32_t reg) return *((volatile uint32_t *)(uintptr_t)reg); } +static inline bool clk_is_best_rate_closest(uint32_t rate, uint32_t now, + uint32_t best) +{ + uint32_t rate1 = rate > now ? (rate - now) : (now - rate); + uint32_t rate2 = rate > best ? (rate - best) : (best - rate); + return rate1 < rate2; +} + static inline uint32_t gcd(uint32_t a, uint32_t b) { uint32_t r; diff --git a/drivers/clk/clk_divider.c b/drivers/clk/clk_divider.c index 7490e3dd4af4c..079d8f7fd3d34 100644 --- a/drivers/clk/clk_divider.c +++ b/drivers/clk/clk_divider.c @@ -174,7 +174,7 @@ static bool _is_best_div(uint32_t rate, uint32_t now, { if (flags & CLK_DIVIDER_ROUND_CLOSEST) { - return abs(rate - now) < abs(rate - best); + return clk_is_best_rate_closest(rate, now, best); } return now <= rate && now > best; diff --git a/drivers/clk/clk_multiplier.c b/drivers/clk/clk_multiplier.c index 0be6bbaa6e67f..a25c34be08bba 100644 --- a/drivers/clk/clk_multiplier.c +++ b/drivers/clk/clk_multiplier.c @@ -107,7 +107,7 @@ static bool __is_best_rate(uint32_t rate, uint32_t new, { if (flags & CLK_MULT_ROUND_CLOSEST) { - return abs(rate - new) < abs(rate - best); + return clk_is_best_rate_closest(rate, new, best); } return new >= rate && new < best; diff --git a/drivers/clk/clk_mux.c b/drivers/clk/clk_mux.c index fc7c4ae768e64..aef92cd04ef18 100644 --- a/drivers/clk/clk_mux.c +++ b/drivers/clk/clk_mux.c @@ -44,7 +44,7 @@ static bool mux_is_better_rate(uint32_t rate, uint32_t now, { if (flags & CLK_MUX_ROUND_CLOSEST) { - return abs(now - rate) < abs(best - rate); + return clk_is_best_rate_closest(rate, now, best); } return now <= rate && now > best; diff --git a/drivers/rpmsg/rpmsg_virtio.c b/drivers/rpmsg/rpmsg_virtio.c index be3c7feb6e921..044b7691e4115 100644 --- a/drivers/rpmsg/rpmsg_virtio.c +++ b/drivers/rpmsg/rpmsg_virtio.c @@ -81,9 +81,9 @@ static int rpmsg_virtio_create_virtqueues_(FAR struct virtio_device *vdev, static uint8_t rpmsg_virtio_get_status_(FAR struct virtio_device *dev); static void rpmsg_virtio_set_status_(FAR struct virtio_device *dev, uint8_t status); -static uint32_t rpmsg_virtio_get_features_(FAR struct virtio_device *dev); +static uint64_t rpmsg_virtio_get_features_(FAR struct virtio_device *dev); static void rpmsg_virtio_set_features(FAR struct virtio_device *dev, - uint32_t feature); + uint64_t feature); static void rpmsg_virtio_notify(FAR struct virtqueue *vq); /**************************************************************************** @@ -181,7 +181,7 @@ static void rpmsg_virtio_set_status_(FAR struct virtio_device *vdev, priv->rsc->rpmsg_vdev.status = status; } -static uint32_t rpmsg_virtio_get_features_(FAR struct virtio_device *vdev) +static uint64_t rpmsg_virtio_get_features_(FAR struct virtio_device *vdev) { FAR struct rpmsg_virtio_priv_s *priv = rpmsg_virtio_get_priv(vdev); @@ -189,7 +189,7 @@ static uint32_t rpmsg_virtio_get_features_(FAR struct virtio_device *vdev) } static void rpmsg_virtio_set_features(FAR struct virtio_device *vdev, - uint32_t features) + uint64_t features) { FAR struct rpmsg_virtio_priv_s *priv = rpmsg_virtio_get_priv(vdev); @@ -582,7 +582,7 @@ static int rpmsg_virtio_start(FAR struct rpmsg_virtio_priv_s *priv) } priv->rvdev.rdev.ns_unbind_cb = rpmsg_ns_unbind; - priv->rvdev.rdev.notify_wait_cb = rpmsg_virtio_notify_wait; + priv->rvdev.notify_wait_cb = rpmsg_virtio_notify_wait; RPMSG_VIRTIO_REGISTER_CALLBACK(priv->dev, rpmsg_virtio_callback, priv); @@ -604,7 +604,7 @@ static int rpmsg_virtio_start(FAR struct rpmsg_virtio_priv_s *priv) static int rpmsg_virtio_thread(int argc, FAR char *argv[]) { FAR struct rpmsg_virtio_priv_s *priv = (FAR struct rpmsg_virtio_priv_s *) - ((uintptr_t)strtoul(argv[2], NULL, 0)); + ((uintptr_t)strtoul(argv[2], NULL, 16)); int ret; priv->tid = nxsched_gettid(); diff --git a/drivers/syslog/vsyslog.c b/drivers/syslog/vsyslog.c index 2948ace47e37e..0a825166493d5 100644 --- a/drivers/syslog/vsyslog.c +++ b/drivers/syslog/vsyslog.c @@ -165,7 +165,7 @@ int nx_vsyslog(int priority, FAR const IPTR char *fmt, FAR va_list *ap) "[%s] " # endif # else - "[%5jd.%06ld] " + "[%5ju.%06ld] " # endif #endif diff --git a/include/nuttx/rpmsg/rpmsg_virtio.h b/include/nuttx/rpmsg/rpmsg_virtio.h index e6ac1d547d276..52e0e131537c5 100644 --- a/include/nuttx/rpmsg/rpmsg_virtio.h +++ b/include/nuttx/rpmsg/rpmsg_virtio.h @@ -33,6 +33,7 @@ #include #include +#include /**************************************************************************** * Pre-processor Definitions