diff options
697 files changed, 2772 insertions, 754 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e20a789ac1..1f8a4c93cf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,8 @@ stages: # use clang only do one configuration. - if [[ "${BUILDMAN}" != "" ]]; then ret=0; - tools/buildman/buildman -o /tmp -P -E ${BUILDMAN} ${OVERRIDE}|| ret=$?; + NO_SDL=1 tools/buildman/buildman -o /tmp -P -E ${BUILDMAN} + ${OVERRIDE}|| ret=$?; if [[ $ret -ne 0 && $ret -ne 129 ]]; then tools/buildman/buildman -o /tmp -sdeP ${BUILDMAN}; exit $ret; @@ -163,7 +164,7 @@ Run binman, buildman, dtoc and patman testsuites: export UBOOT_TRAVIS_BUILD_DIR=/tmp/.bm-work/sandbox_spl; export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"; export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"; - ./tools/buildman/buildman -o /tmp -P sandbox_spl; + NO_SDL=1 ./tools/buildman/buildman -o /tmp -P sandbox_spl; ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test; ./tools/buildman/buildman -t; ./tools/dtoc/dtoc -t; diff --git a/.travis.yml b/.travis.yml index 3991eb7716..44e539038a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ addons: - sparse - bc - build-essential - - libsdl1.2-dev + - libsdl2-dev - python - python-pyelftools - python3-virtualenv diff --git a/arch/arm/mach-aspeed/ast2500/clk_ast2500.c b/arch/arm/mach-aspeed/ast2500/clk_ast2500.c index 7d864a4088..3e9f5e57ed 100644 --- a/arch/arm/mach-aspeed/ast2500/clk_ast2500.c +++ b/arch/arm/mach-aspeed/ast2500/clk_ast2500.c @@ -7,6 +7,7 @@ #include <dm.h> #include <asm/io.h> #include <asm/arch/scu_ast2500.h> +#include <linux/err.h> int ast_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-imx/cmd_nandbcb.c b/arch/arm/mach-imx/cmd_nandbcb.c index 334cc0766e..b3e59b1b00 100644 --- a/arch/arm/mach-imx/cmd_nandbcb.c +++ b/arch/arm/mach-imx/cmd_nandbcb.c @@ -10,7 +10,9 @@ */ #include <common.h> +#include <malloc.h> #include <nand.h> +#include <dm/devres.h> #include <asm/io.h> #include <jffs2/jffs2.h> diff --git a/arch/arm/mach-imx/imx8/image.c b/arch/arm/mach-imx/imx8/image.c index 58a29e8a03..c956a8092d 100644 --- a/arch/arm/mach-imx/imx8/image.c +++ b/arch/arm/mach-imx/imx8/image.c @@ -5,6 +5,7 @@ #include <common.h> #include <errno.h> +#include <malloc.h> #include <asm/io.h> #include <mmc.h> #include <spi_flash.h> diff --git a/arch/arm/mach-meson/board-info.c b/arch/arm/mach-meson/board-info.c index 0d3b40a249..4b88afa9b7 100644 --- a/arch/arm/mach-meson/board-info.c +++ b/arch/arm/mach-meson/board-info.c @@ -10,6 +10,7 @@ #include <linux/bitfield.h> #include <regmap.h> #include <syscon.h> +#include <linux/err.h> #define AO_SEC_SD_CFG8 0xe0 #define AO_SEC_SOCINFO_OFFSET AO_SEC_SD_CFG8 diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c index fabcb3bfd7..fac286b9c8 100644 --- a/arch/arm/mach-meson/sm.c +++ b/arch/arm/mach-meson/sm.c @@ -7,6 +7,7 @@ #include <common.h> #include <asm/arch/sm.h> +#include <linux/err.h> #include <linux/kernel.h> #include <dm.h> #include <linux/bitfield.h> diff --git a/arch/arm/mach-mvebu/mbus.c b/arch/arm/mach-mvebu/mbus.c index c68e93ba10..a95db5e5c3 100644 --- a/arch/arm/mach-mvebu/mbus.c +++ b/arch/arm/mach-mvebu/mbus.c @@ -47,6 +47,7 @@ */ #include <common.h> +#include <malloc.h> #include <linux/errno.h> #include <asm/io.h> #include <asm/arch/cpu.h> diff --git a/arch/arm/mach-rockchip/px30/clk_px30.c b/arch/arm/mach-rockchip/px30/clk_px30.c index 0bd6b471da..98a1bcd224 100644 --- a/arch/arm/mach-rockchip/px30/clk_px30.c +++ b/arch/arm/mach-rockchip/px30/clk_px30.c @@ -8,6 +8,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_px30.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3036/clk_rk3036.c b/arch/arm/mach-rockchip/rk3036/clk_rk3036.c index 20e2ed6813..5d0def3b52 100644 --- a/arch/arm/mach-rockchip/rk3036/clk_rk3036.c +++ b/arch/arm/mach-rockchip/rk3036/clk_rk3036.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3036.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3128/clk_rk3128.c b/arch/arm/mach-rockchip/rk3128/clk_rk3128.c index 827750bf98..f9ce1f7234 100644 --- a/arch/arm/mach-rockchip/rk3128/clk_rk3128.c +++ b/arch/arm/mach-rockchip/rk3128/clk_rk3128.c @@ -8,6 +8,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3128.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3188/clk_rk3188.c b/arch/arm/mach-rockchip/rk3188/clk_rk3188.c index 9d4fc37eda..a0dcac3732 100644 --- a/arch/arm/mach-rockchip/rk3188/clk_rk3188.c +++ b/arch/arm/mach-rockchip/rk3188/clk_rk3188.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3188.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3188/rk3188.c b/arch/arm/mach-rockchip/rk3188/rk3188.c index 61d410d780..e52466fb6f 100644 --- a/arch/arm/mach-rockchip/rk3188/rk3188.c +++ b/arch/arm/mach-rockchip/rk3188/rk3188.c @@ -11,6 +11,7 @@ #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/grf_rk3188.h> #include <asm/arch-rockchip/hardware.h> +#include <linux/err.h> #define GRF_BASE 0x20008000 diff --git a/arch/arm/mach-rockchip/rk322x/clk_rk322x.c b/arch/arm/mach-rockchip/rk322x/clk_rk322x.c index 958c7b82b9..fc5abd736e 100644 --- a/arch/arm/mach-rockchip/rk322x/clk_rk322x.c +++ b/arch/arm/mach-rockchip/rk322x/clk_rk322x.c @@ -8,6 +8,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk322x.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3288/clk_rk3288.c b/arch/arm/mach-rockchip/rk3288/clk_rk3288.c index 1730f12443..e05bd06a8d 100644 --- a/arch/arm/mach-rockchip/rk3288/clk_rk3288.c +++ b/arch/arm/mach-rockchip/rk3288/clk_rk3288.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3288/rk3288.c b/arch/arm/mach-rockchip/rk3288/rk3288.c index 18ea7f35fb..812f3bd5f3 100644 --- a/arch/arm/mach-rockchip/rk3288/rk3288.c +++ b/arch/arm/mach-rockchip/rk3288/rk3288.c @@ -7,6 +7,7 @@ #include <env.h> #include <clk.h> #include <init.h> +#include <malloc.h> #include <asm/armv7.h> #include <asm/io.h> #include <asm/arch-rockchip/bootrom.h> @@ -17,6 +18,7 @@ #include <asm/arch-rockchip/pmu_rk3288.h> #include <asm/arch-rockchip/qos_rk3288.h> #include <asm/arch-rockchip/sdram.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/arch/arm/mach-rockchip/rk3308/clk_rk3308.c b/arch/arm/mach-rockchip/rk3308/clk_rk3308.c index 51b43153e8..1feb237224 100644 --- a/arch/arm/mach-rockchip/rk3308/clk_rk3308.c +++ b/arch/arm/mach-rockchip/rk3308/clk_rk3308.c @@ -8,6 +8,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch/cru_rk3308.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3308/rk3308.c b/arch/arm/mach-rockchip/rk3308/rk3308.c index b6815ddc55..edf5994709 100644 --- a/arch/arm/mach-rockchip/rk3308/rk3308.c +++ b/arch/arm/mach-rockchip/rk3308/rk3308.c @@ -3,6 +3,7 @@ *Copyright (c) 2018 Rockchip Electronics Co., Ltd */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <asm/arch/grf_rk3308.h> #include <asm/arch-rockchip/hardware.h> diff --git a/arch/arm/mach-rockchip/rk3328/clk_rk3328.c b/arch/arm/mach-rockchip/rk3328/clk_rk3328.c index f64f0cbbe5..e5375514de 100644 --- a/arch/arm/mach-rockchip/rk3328/clk_rk3328.c +++ b/arch/arm/mach-rockchip/rk3328/clk_rk3328.c @@ -7,6 +7,7 @@ #include <dm.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3328.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3368/clk_rk3368.c b/arch/arm/mach-rockchip/rk3368/clk_rk3368.c index 55e5dd768a..9a33c67bc9 100644 --- a/arch/arm/mach-rockchip/rk3368/clk_rk3368.c +++ b/arch/arm/mach-rockchip/rk3368/clk_rk3368.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3368.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rk3399/clk_rk3399.c b/arch/arm/mach-rockchip/rk3399/clk_rk3399.c index a80a46f1db..d23a5e9435 100644 --- a/arch/arm/mach-rockchip/rk3399/clk_rk3399.c +++ b/arch/arm/mach-rockchip/rk3399/clk_rk3399.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru.h> +#include <linux/err.h> static int rockchip_get_cruclk(struct udevice **devp) { diff --git a/arch/arm/mach-rockchip/rv1108/clk_rv1108.c b/arch/arm/mach-rockchip/rv1108/clk_rv1108.c index 58a7e889cc..b37ae1c494 100644 --- a/arch/arm/mach-rockchip/rv1108/clk_rv1108.c +++ b/arch/arm/mach-rockchip/rv1108/clk_rv1108.c @@ -9,6 +9,7 @@ #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rv1108.h> +#include <linux/err.h> int rockchip_get_clk(struct udevice **devp) { diff --git a/arch/arm/mach-socfpga/clock_manager_agilex.c b/arch/arm/mach-socfpga/clock_manager_agilex.c index 791066d25b..4ee2b7b4bb 100644 --- a/arch/arm/mach-socfpga/clock_manager_agilex.c +++ b/arch/arm/mach-socfpga/clock_manager_agilex.c @@ -7,6 +7,7 @@ #include <clk.h> #include <common.h> #include <dm.h> +#include <malloc.h> #include <asm/arch/clock_manager.h> #include <asm/arch/system_manager.h> #include <asm/io.h> diff --git a/arch/arm/mach-socfpga/clock_manager_arria10.c b/arch/arm/mach-socfpga/clock_manager_arria10.c index 392f2eb915..d7c8eaf47d 100644 --- a/arch/arm/mach-socfpga/clock_manager_arria10.c +++ b/arch/arm/mach-socfpga/clock_manager_arria10.c @@ -5,6 +5,7 @@ #include <common.h> #include <fdtdec.h> +#include <malloc.h> #include <asm/io.h> #include <dm.h> #include <clk.h> diff --git a/arch/arm/mach-stm32mp/pwr_regulator.c b/arch/arm/mach-stm32mp/pwr_regulator.c index 9484645dbd..4559ef599d 100644 --- a/arch/arm/mach-stm32mp/pwr_regulator.c +++ b/arch/arm/mach-stm32mp/pwr_regulator.c @@ -8,6 +8,8 @@ #include <errno.h> #include <regmap.h> #include <syscon.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <power/pmic.h> #include <power/regulator.h> diff --git a/arch/arm/mach-tegra/cboot.c b/arch/arm/mach-tegra/cboot.c index c5361ca73d..390229436e 100644 --- a/arch/arm/mach-tegra/cboot.c +++ b/arch/arm/mach-tegra/cboot.c @@ -8,6 +8,7 @@ #include <fdt_support.h> #include <fdtdec.h> #include <hang.h> +#include <malloc.h> #include <stdlib.h> #include <string.h> diff --git a/arch/arm/mach-zynq/clk.c b/arch/arm/mach-zynq/clk.c index 1a6acd46cd..b578f6538a 100644 --- a/arch/arm/mach-zynq/clk.c +++ b/arch/arm/mach-zynq/clk.c @@ -6,6 +6,7 @@ #include <clk.h> #include <common.h> #include <dm.h> +#include <malloc.h> #include <asm/arch/clk.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/arch/arm/mach-zynq/timer.c b/arch/arm/mach-zynq/timer.c index 211ea15884..d822e20d2b 100644 --- a/arch/arm/mach-zynq/timer.c +++ b/arch/arm/mach-zynq/timer.c @@ -32,6 +32,7 @@ #include <div64.h> #include <dm.h> #include <time.h> +#include <malloc.h> #include <asm/io.h> #include <asm/arch/hardware.h> #include <asm/arch/clk.h> diff --git a/arch/mips/mach-mtmips/cpu.c b/arch/mips/mach-mtmips/cpu.c index cee3c0cb0a..8976ef57c7 100644 --- a/arch/mips/mach-mtmips/cpu.c +++ b/arch/mips/mach-mtmips/cpu.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> #include <init.h> +#include <malloc.h> #include <ram.h> #include <wdt.h> #include <asm/io.h> diff --git a/arch/mips/mach-pic32/cpu.c b/arch/mips/mach-pic32/cpu.c index 8bb12a52c6..8075d93d41 100644 --- a/arch/mips/mach-pic32/cpu.c +++ b/arch/mips/mach-pic32/cpu.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <mach/pic32.h> #include <mach/ddr.h> #include <dt-bindings/clock/microchip,clock.h> diff --git a/arch/riscv/lib/andes_plic.c b/arch/riscv/lib/andes_plic.c index 3868569a65..20529ab3eb 100644 --- a/arch/riscv/lib/andes_plic.c +++ b/arch/riscv/lib/andes_plic.c @@ -17,6 +17,7 @@ #include <asm/io.h> #include <asm/syscon.h> #include <cpu.h> +#include <linux/err.h> /* pending register */ #define PENDING_REG(base, hart) ((ulong)(base) + 0x1000 + ((hart) / 4) * 4) diff --git a/arch/riscv/lib/andes_plmt.c b/arch/riscv/lib/andes_plmt.c index 84f4607500..a7e90ca992 100644 --- a/arch/riscv/lib/andes_plmt.c +++ b/arch/riscv/lib/andes_plmt.c @@ -13,6 +13,7 @@ #include <syscon.h> #include <asm/io.h> #include <asm/syscon.h> +#include <linux/err.h> /* mtime register */ #define MTIME_REG(base) ((ulong)(base)) diff --git a/arch/riscv/lib/sifive_clint.c b/arch/riscv/lib/sifive_clint.c index d7899d16d7..5e0d25720b 100644 --- a/arch/riscv/lib/sifive_clint.c +++ b/arch/riscv/lib/sifive_clint.c @@ -13,6 +13,7 @@ #include <syscon.h> #include <asm/io.h> #include <asm/syscon.h> +#include <linux/err.h> /* MSIP registers */ #define MSIP_REG(base, hart) ((ulong)(base) + (hart) * 4) diff --git a/arch/sandbox/config.mk b/arch/sandbox/config.mk index a225c9cbfa..189e9c2b0c 100644 --- a/arch/sandbox/config.mk +++ b/arch/sandbox/config.mk @@ -5,7 +5,7 @@ PLATFORM_CPPFLAGS += -D__SANDBOX__ -U_FORTIFY_SOURCE PLATFORM_CPPFLAGS += -DCONFIG_ARCH_MAP_SYSMEM PLATFORM_CPPFLAGS += -fPIC PLATFORM_LIBS += -lrt -SDL_CONFIG ?= sdl-config +SDL_CONFIG ?= sdl2-config # Define this to avoid linking with SDL, which requires SDL libraries # This can solve 'sdl-config: Command not found' errors diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index ff7430393f..56ee3f5826 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -10,6 +10,7 @@ #include <linux/libfdt.h> #include <os.h> #include <asm/io.h> +#include <asm/malloc.h> #include <asm/setjmp.h> #include <asm/state.h> #include <dm/root.h> diff --git a/arch/sandbox/cpu/eth-raw-os.c b/arch/sandbox/cpu/eth-raw-os.c index 8d05bc2eda..da01d1addf 100644 --- a/arch/sandbox/cpu/eth-raw-os.c +++ b/arch/sandbox/cpu/eth-raw-os.c @@ -74,7 +74,7 @@ static int _raw_packet_start(struct eth_sandbox_raw_priv *priv, /* Prepare device struct */ priv->local_bind_sd = -1; - priv->device = os_malloc(sizeof(struct sockaddr_ll)); + priv->device = malloc(sizeof(struct sockaddr_ll)); if (priv->device == NULL) return -ENOMEM; device = priv->device; @@ -147,7 +147,7 @@ static int _local_inet_start(struct eth_sandbox_raw_priv *priv) /* Prepare device struct */ priv->local_bind_sd = -1; priv->local_bind_udp_port = 0; - priv->device = os_malloc(sizeof(struct sockaddr_in)); + priv->device = malloc(sizeof(struct sockaddr_in)); if (priv->device == NULL) return -ENOMEM; device = priv->device; @@ -282,7 +282,7 @@ int sandbox_eth_raw_os_recv(void *packet, int *length, void sandbox_eth_raw_os_stop(struct eth_sandbox_raw_priv *priv) { - os_free(priv->device); + free(priv->device); priv->device = NULL; close(priv->sd); priv->sd = -1; diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c index 79094fb7f3..f7c73e3a0b 100644 --- a/arch/sandbox/cpu/os.c +++ b/arch/sandbox/cpu/os.c @@ -137,7 +137,7 @@ int os_read_file(const char *fname, void **bufp, int *sizep) printf("Cannot seek to start of file '%s'\n", fname); goto err; } - *bufp = os_malloc(size); + *bufp = malloc(size); if (!*bufp) { printf("Not enough memory to read file '%s'\n", fname); ret = -ENOMEM; @@ -238,29 +238,6 @@ void os_free(void *ptr) } } -void *os_realloc(void *ptr, size_t length) -{ - int page_size = getpagesize(); - struct os_mem_hdr *hdr; - void *buf = NULL; - - if (length) { - buf = os_malloc(length); - if (!buf) - return buf; - if (ptr) { - hdr = ptr - page_size; - if (length > hdr->length) - length = hdr->length; - memcpy(buf, ptr, length); - } - } - if (ptr) - os_free(ptr); - - return buf; -} - void os_usleep(unsigned long usec) { usleep(usec); @@ -306,8 +283,8 @@ int os_parse_args(struct sandbox_state *state, int argc, char *argv[]) state->argv = argv; /* dynamically construct the arguments to the system getopt_long */ - short_opts = os_malloc(sizeof(*short_opts) * num_options * 2 + 1); - long_opts = os_malloc(sizeof(*long_opts) * num_options); + short_opts = malloc(sizeof(*short_opts) * num_options * 2 + 1); + long_opts = malloc(sizeof(*long_opts) * (num_options + 1)); if (!short_opts || !long_opts) return 1; @@ -337,6 +314,7 @@ int os_parse_args(struct sandbox_state *state, int argc, char *argv[]) /* we need to handle output ourselves since u-boot provides printf */ opterr = 0; + memset(&long_opts[num_options], '\0', sizeof(*long_opts)); /* * walk all of the options the user gave us on the command line, * figure out what u-boot option structure they belong to (via @@ -385,7 +363,7 @@ void os_dirent_free(struct os_dirent_node *node) while (node) { next = node->next; - os_free(node); + free(node); node = next; } } @@ -410,7 +388,7 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp) /* Create a buffer upfront, with typically sufficient size */ dirlen = strlen(dirname) + 2; len = dirlen + 256; - fname = os_malloc(len); + fname = malloc(len); if (!fname) { ret = -ENOMEM; goto done; @@ -423,7 +401,7 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp) ret = errno; break; } - next = os_malloc(sizeof(*node) + strlen(entry->d_name) + 1); + next = malloc(sizeof(*node) + strlen(entry->d_name) + 1); if (!next) { os_dirent_free(head); ret = -ENOMEM; @@ -432,10 +410,10 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp) if (dirlen + strlen(entry->d_name) > len) { len = dirlen + strlen(entry->d_name); old_fname = fname; - fname = os_realloc(fname, len); + fname = realloc(fname, len); if (!fname) { - os_free(old_fname); - os_free(next); + free(old_fname); + free(next); os_dirent_free(head); ret = -ENOMEM; goto done; @@ -469,7 +447,7 @@ int os_dirent_ls(const char *dirname, struct os_dirent_node **headp) done: closedir(dir); - os_free(fname); + free(fname); return ret; } @@ -586,7 +564,7 @@ static int add_args(char ***argvp, char *add_args[], int count) for (argc = 0; (*argvp)[argc]; argc++) ; - argv = os_malloc((argc + count + 1) * sizeof(char *)); + argv = malloc((argc + count + 1) * sizeof(char *)); if (!argv) { printf("Out of memory for %d argv\n", count); return -ENOMEM; @@ -669,7 +647,7 @@ static int os_jump_to_file(const char *fname) os_exit(2); err = execv(fname, argv); - os_free(argv); + free(argv); if (err) { perror("Unable to run image"); printf("Image filename '%s'\n", fname); diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c index 080c7c8d74..6416cab96c 100644 --- a/arch/sandbox/cpu/sdl.c +++ b/arch/sandbox/cpu/sdl.c @@ -5,8 +5,9 @@ #include <errno.h> #include <unistd.h> +#include <stdbool.h> #include <linux/input.h> -#include <SDL.h> +#include <SDL2/SDL.h> #include <asm/state.h> /** @@ -24,19 +25,42 @@ struct buf_info { uint8_t *data; }; +/** + * struct sdl_info - Information about our use of the SDL library + * + * @width: Width of simulated LCD display + * @height: Height of simulated LCD display + * @vis_width: Visible width (may be larger to allow for scaling up) + * @vis_height: Visible height (may be larger to allow for scaling up) + * @depth: Depth of the display in bits per pixel (16 or 32) + * @pitch: Number of bytes per line of the display + * @sample_rate: Current sample rate for audio + * @audio_active: true if audio can be used + * @inited: true if this module is initialised + * @cur_buf: Current audio buffer being used by sandbox_sdl_fill_audio (0 or 1) + * @buf: The two available audio buffers. SDL can be reading from one while we + * are setting up the next + * @running: true if audio is running + * @stopping: true if audio will stop once it runs out of data + * @texture: SDL texture to use for U-Boot display contents + * @renderer: SDL renderer to use + */ static struct sdl_info { - SDL_Surface *screen; int width; int height; + int vis_width; + int vis_height; int depth; int pitch; - uint frequency; uint sample_rate; bool audio_active; bool inited; int cur_buf; struct buf_info buf[2]; bool running; + bool stopping; + SDL_Texture *texture; + SDL_Renderer *renderer; } sdl; static void sandbox_sdl_poll_events(void) @@ -62,7 +86,7 @@ static int sandbox_sdl_ensure_init(void) { if (!sdl.inited) { if (SDL_Init(0) < 0) { - printf("Unable to initialize SDL: %s\n", + printf("Unable to initialise SDL: %s\n", SDL_GetError()); return -EIO; } @@ -74,7 +98,8 @@ static int sandbox_sdl_ensure_init(void) return 0; } -int sandbox_sdl_init_display(int width, int height, int log2_bpp) +int sandbox_sdl_init_display(int width, int height, int log2_bpp, + bool double_size) { struct sandbox_state *state = state_get_current(); int err; @@ -85,16 +110,52 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp) if (err) return err; if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { - printf("Unable to initialize SDL LCD: %s\n", SDL_GetError()); + printf("Unable to initialise SDL LCD: %s\n", SDL_GetError()); return -EPERM; } - SDL_WM_SetCaption("U-Boot", "U-Boot"); - sdl.width = width; sdl.height = height; + if (double_size) { + sdl.vis_width = sdl.width * 2; + sdl.vis_height = sdl.height * 2; + } else { + sdl.vis_width = sdl.width; + sdl.vis_height = sdl.height; + } + sdl.depth = 1 << log2_bpp; sdl.pitch = sdl.width * sdl.depth / 8; - sdl.screen = SDL_SetVideoMode(width, height, 0, 0); + SDL_Window *screen = SDL_CreateWindow("U-Boot", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + sdl.vis_width, sdl.vis_height, 0); + if (!screen) { + printf("Unable to initialise SDL screen: %s\n", + SDL_GetError()); + return -EIO; + } + if (log2_bpp != 4 && log2_bpp != 5) { + printf("U-Boot SDL does not support depth %d\n", log2_bpp); + return -EINVAL; + } + sdl.renderer = SDL_CreateRenderer(screen, -1, + SDL_RENDERER_ACCELERATED | + SDL_RENDERER_PRESENTVSYNC); + if (!sdl.renderer) { + printf("Unable to initialise SDL renderer: %s\n", + SDL_GetError()); + return -EIO; + } + + sdl.texture = SDL_CreateTexture(sdl.renderer, log2_bpp == 4 ? + SDL_PIXELFORMAT_RGB565 : + SDL_PIXELFORMAT_RGB888, + SDL_TEXTUREACCESS_STREAMING, + width, height); + if (!sdl.texture) { + printf("Unable to initialise SDL texture: %s\n", + SDL_GetError()); + return -EBADF; + } sandbox_sdl_poll_events(); return 0; @@ -102,136 +163,137 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp) int sandbox_sdl_sync(void *lcd_base) { - SDL_Surface *frame; - - frame = SDL_CreateRGBSurfaceFrom(lcd_base, sdl.width, sdl.height, - sdl.depth, sdl.pitch, - 0x1f << 11, 0x3f << 5, 0x1f << 0, 0); - SDL_BlitSurface(frame, NULL, sdl.screen, NULL); - SDL_FreeSurface(frame); - SDL_UpdateRect(sdl.screen, 0, 0, 0, 0); + SDL_UpdateTexture(sdl.texture, NULL, lcd_base, sdl.pitch); + SDL_RenderCopy(sdl.renderer, sdl.texture, NULL, NULL); + SDL_RenderPresent(sdl.renderer); sandbox_sdl_poll_events(); return 0; } -#define NONE (-1) -#define NUM_SDL_CODES (SDLK_UNDO + 1) - -static int16_t sdl_to_keycode[NUM_SDL_CODES] = { - /* 0 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, KEY_BACKSPACE, KEY_TAB, - NONE, NONE, NONE, KEY_ENTER, NONE, - NONE, NONE, NONE, NONE, KEY_POWER, /* use PAUSE as POWER */ - - /* 20 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, KEY_ESC, NONE, NONE, - NONE, NONE, KEY_SPACE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 40 */ - NONE, NONE, NONE, NONE, KEY_COMMA, - KEY_MINUS, KEY_DOT, KEY_SLASH, KEY_0, KEY_1, - KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, - KEY_7, KEY_8, KEY_9, NONE, KEY_SEMICOLON, - - /* 60 */ - NONE, KEY_EQUAL, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 80 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, KEY_BACKSLASH, NONE, NONE, - NONE, KEY_GRAVE, KEY_A, KEY_B, KEY_C, - - /* 100 */ - KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, - KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, - KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, - KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, - - /* 120 */ - KEY_X, KEY_Y, KEY_Z, NONE, NONE, - NONE, NONE, KEY_DELETE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 140 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 160 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 180 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 200 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 220 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 240 */ - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, NONE, NONE, NONE, NONE, - NONE, KEY_KP0, KEY_KP1, KEY_KP2, KEY_KP3, - - /* 260 */ - KEY_KP4, KEY_KP5, KEY_KP6, KEY_KP7, KEY_KP8, - KEY_KP9, KEY_KPDOT, KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, - KEY_KPPLUS, KEY_KPENTER, KEY_KPEQUAL, KEY_UP, KEY_DOWN, - KEY_RIGHT, KEY_LEFT, KEY_INSERT, KEY_HOME, KEY_END, - - /* 280 */ - KEY_PAGEUP, KEY_PAGEDOWN, KEY_F1, KEY_F2, KEY_F3, - KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, - KEY_F9, KEY_F10, KEY_F11, KEY_F12, NONE, - NONE, NONE, NONE, NONE, NONE, - - /* 300 */ - KEY_NUMLOCK, KEY_CAPSLOCK, KEY_SCROLLLOCK, KEY_RIGHTSHIFT, - KEY_LEFTSHIFT, - KEY_RIGHTCTRL, KEY_LEFTCTRL, KEY_RIGHTALT, KEY_LEFTALT, KEY_RIGHTMETA, - KEY_LEFTMETA, NONE, KEY_FN, NONE, KEY_COMPOSE, - NONE, KEY_PRINT, KEY_SYSRQ, KEY_PAUSE, NONE, - - /* 320 */ - NONE, NONE, NONE, +static const unsigned short sdl_to_keycode[SDL_NUM_SCANCODES] = { + [SDL_SCANCODE_A] = KEY_A, + [SDL_SCANCODE_B] = KEY_B, + [SDL_SCANCODE_C] = KEY_C, + [SDL_SCANCODE_D] = KEY_D, + [SDL_SCANCODE_E] = KEY_E, + [SDL_SCANCODE_F] = KEY_F, + [SDL_SCANCODE_G] = KEY_G, + [SDL_SCANCODE_H] = KEY_H, + [SDL_SCANCODE_I] = KEY_I, + [SDL_SCANCODE_J] = KEY_J, + [SDL_SCANCODE_K] = KEY_K, + [SDL_SCANCODE_L] = KEY_L, + [SDL_SCANCODE_M] = KEY_M, + [SDL_SCANCODE_N] = KEY_N, + [SDL_SCANCODE_O] = KEY_O, + [SDL_SCANCODE_P] = KEY_P, + [SDL_SCANCODE_Q] = KEY_Q, + [SDL_SCANCODE_R] = KEY_R, + [SDL_SCANCODE_S] = KEY_S, + [SDL_SCANCODE_T] = KEY_T, + [SDL_SCANCODE_U] = KEY_U, + [SDL_SCANCODE_V] = KEY_V, + [SDL_SCANCODE_W] = KEY_W, + [SDL_SCANCODE_X] = KEY_X, + [SDL_SCANCODE_Y] = KEY_Y, + [SDL_SCANCODE_Z] = KEY_Z, + + [SDL_SCANCODE_1] = KEY_1, + [SDL_SCANCODE_2] = KEY_2, + [SDL_SCANCODE_3] = KEY_3, + [SDL_SCANCODE_4] = KEY_4, + [SDL_SCANCODE_5] = KEY_5, + [SDL_SCANCODE_6] = KEY_6, + [SDL_SCANCODE_7] = KEY_7, + [SDL_SCANCODE_8] = KEY_8, + [SDL_SCANCODE_9] = KEY_9, + [SDL_SCANCODE_0] = KEY_0, + + [SDL_SCANCODE_RETURN] = KEY_ENTER, + [SDL_SCANCODE_ESCAPE] = KEY_ESC, + [SDL_SCANCODE_BACKSPACE] = KEY_BACKSPACE, + [SDL_SCANCODE_TAB] = KEY_TAB, + [SDL_SCANCODE_SPACE] = KEY_SPACE, + + [SDL_SCANCODE_MINUS] = KEY_MINUS, + [SDL_SCANCODE_EQUALS] = KEY_EQUAL, + [SDL_SCANCODE_BACKSLASH] = KEY_BACKSLASH, + [SDL_SCANCODE_SEMICOLON] = KEY_SEMICOLON, + [SDL_SCANCODE_APOSTROPHE] = KEY_APOSTROPHE, + [SDL_SCANCODE_GRAVE] = KEY_GRAVE, + [SDL_SCANCODE_COMMA] = KEY_COMMA, + [SDL_SCANCODE_PERIOD] = KEY_DOT, + [SDL_SCANCODE_SLASH] = KEY_SLASH, + + [SDL_SCANCODE_CAPSLOCK] = KEY_CAPSLOCK, + + [SDL_SCANCODE_F1] = KEY_F1, + [SDL_SCANCODE_F2] = KEY_F2, + [SDL_SCANCODE_F3] = KEY_F3, + [SDL_SCANCODE_F4] = KEY_F4, + [SDL_SCANCODE_F5] = KEY_F5, + [SDL_SCANCODE_F6] = KEY_F6, + [SDL_SCANCODE_F7] = KEY_F7, + [SDL_SCANCODE_F8] = KEY_F8, + [SDL_SCANCODE_F9] = KEY_F9, + [SDL_SCANCODE_F10] = KEY_F10, + [SDL_SCANCODE_F11] = KEY_F11, + [SDL_SCANCODE_F12] = KEY_F12, + + [SDL_SCANCODE_PRINTSCREEN] = KEY_PRINT, + [SDL_SCANCODE_SCROLLLOCK] = KEY_SCROLLLOCK, + [SDL_SCANCODE_PAUSE] = KEY_PAUSE, + [SDL_SCANCODE_INSERT] = KEY_INSERT, + [SDL_SCANCODE_HOME] = KEY_HOME, + [SDL_SCANCODE_PAGEUP] = KEY_PAGEUP, + [SDL_SCANCODE_DELETE] = KEY_DELETE, + [SDL_SCANCODE_END] = KEY_END, + [SDL_SCANCODE_PAGEDOWN] = KEY_PAGEDOWN, + [SDL_SCANCODE_RIGHT] = KEY_RIGHT, + [SDL_SCANCODE_LEFT] = KEY_LEFT, + [SDL_SCANCODE_DOWN] = KEY_DOWN, + [SDL_SCANCODE_UP] = KEY_UP, + + [SDL_SCANCODE_NUMLOCKCLEAR] = KEY_NUMLOCK, + [SDL_SCANCODE_KP_DIVIDE] = KEY_KPSLASH, + [SDL_SCANCODE_KP_MULTIPLY] = KEY_KPASTERISK, + [SDL_SCANCODE_KP_MINUS] = KEY_KPMINUS, + [SDL_SCANCODE_KP_PLUS] = KEY_KPPLUS, + [SDL_SCANCODE_KP_ENTER] = KEY_KPENTER, + [SDL_SCANCODE_KP_1] = KEY_KP1, + [SDL_SCANCODE_KP_2] = KEY_KP2, + [SDL_SCANCODE_KP_3] = KEY_KP3, + [SDL_SCANCODE_KP_4] = KEY_KP4, + [SDL_SCANCODE_KP_5] = KEY_KP5, + [SDL_SCANCODE_KP_6] = KEY_KP6, + [SDL_SCANCODE_KP_7] = KEY_KP7, + [SDL_SCANCODE_KP_8] = KEY_KP8, + [SDL_SCANCODE_KP_9] = KEY_KP9, + [SDL_SCANCODE_KP_0] = KEY_KP0, + [SDL_SCANCODE_KP_PERIOD] = KEY_KPDOT, + + [SDL_SCANCODE_KP_EQUALS] = KEY_KPEQUAL, + [SDL_SCANCODE_KP_COMMA] = KEY_KPCOMMA, + + [SDL_SCANCODE_SYSREQ] = KEY_SYSRQ, }; int sandbox_sdl_scan_keys(int key[], int max_keys) { - Uint8 *keystate; + const Uint8 *keystate; + int num_keys; int i, count; sandbox_sdl_poll_events(); - keystate = SDL_GetKeyState(NULL); - for (i = count = 0; i < NUM_SDL_CODES; i++) { - if (count >= max_keys) - break; - else if (keystate[i]) - key[count++] = sdl_to_keycode[i]; + keystate = SDL_GetKeyboardState(&num_keys); + for (i = count = 0; i < num_keys; i++) { + if (count < max_keys && keystate[i]) { + int keycode = sdl_to_keycode[i]; + + if (keycode) + key[count++] = keycode; + } } return count; @@ -256,6 +318,7 @@ void sandbox_sdl_fill_audio(void *udata, Uint8 *stream, int len) { struct buf_info *buf; int avail; + bool have_data = false; int i; for (i = 0; i < 2; i++) { @@ -267,6 +330,7 @@ void sandbox_sdl_fill_audio(void *udata, Uint8 *stream, int len) } if (avail > len) avail = len; + have_data = true; SDL_MixAudio(stream, buf->data + buf->pos, avail, SDL_MIX_MAXVOLUME); @@ -279,11 +343,12 @@ void sandbox_sdl_fill_audio(void *udata, Uint8 *stream, int len) else break; } + sdl.stopping = !have_data; } int sandbox_sdl_sound_init(int rate, int channels) { - SDL_AudioSpec wanted; + SDL_AudioSpec wanted, have; int i; if (sandbox_sdl_ensure_init()) @@ -316,19 +381,23 @@ int sandbox_sdl_sound_init(int rate, int channels) } if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { - printf("Unable to initialize SDL audio: %s\n", SDL_GetError()); + printf("Unable to initialise SDL audio: %s\n", SDL_GetError()); goto err; } /* Open the audio device, forcing the desired format */ - if (SDL_OpenAudio(&wanted, NULL) < 0) { + if (SDL_OpenAudio(&wanted, &have) < 0) { printf("Couldn't open audio: %s\n", SDL_GetError()); goto err; } + if (have.format != wanted.format) { + printf("Couldn't select required audio format\n"); + goto err; + } sdl.audio_active = true; sdl.sample_rate = wanted.freq; sdl.cur_buf = 0; - sdl.running = 0; + sdl.running = false; return 0; @@ -359,7 +428,8 @@ int sandbox_sdl_sound_play(const void *data, uint size) buf->pos = 0; if (!sdl.running) { SDL_PauseAudio(0); - sdl.running = 1; + sdl.running = true; + sdl.stopping = false; } return 0; @@ -368,8 +438,12 @@ int sandbox_sdl_sound_play(const void *data, uint size) int sandbox_sdl_sound_stop(void) { if (sdl.running) { + while (!sdl.stopping) + SDL_Delay(100); + SDL_PauseAudio(1); sdl.running = 0; + sdl.stopping = false; } return 0; diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index fff9cbdd79..b6ff5c3d64 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -8,14 +8,46 @@ #include <errno.h> #include <os.h> #include <cli.h> -#include <malloc.h> +#include <sort.h> #include <asm/getopt.h> #include <asm/io.h> +#include <asm/malloc.h> #include <asm/sections.h> #include <asm/state.h> +#include <linux/ctype.h> DECLARE_GLOBAL_DATA_PTR; +/* Compare two options so that they can be sorted into alphabetical order */ +static int h_compare_opt(const void *p1, const void *p2) +{ + const struct sandbox_cmdline_option *opt1 = p1; + const struct sandbox_cmdline_option *opt2 = p2; + const char *str1, *str2; + char flag1[2], flag2[2]; + + opt1 = *(struct sandbox_cmdline_option **)p1; + opt2 = *(struct sandbox_cmdline_option **)p2; + flag1[1] = '\0'; + flag2[1] = '\0'; + + *flag1 = opt1->flag_short < 0x100 ? opt1->flag_short : '\0'; + *flag2 = opt2->flag_short < 0x100 ? opt2->flag_short : '\0'; + + str1 = *flag1 ? flag1 : opt1->flag; + str2 = *flag2 ? flag2 : opt2->flag; + + /* + * Force lower-case flags to come before upper-case ones. We only + * support upper-case for short flags. + */ + if (isalpha(*str1) && isalpha(*str2) && + tolower(*str1) == tolower(*str2)) + return isupper(*str1) - isupper(*str2); + + return strcasecmp(str1, str2); +} + int sandbox_early_getopt_check(void) { struct sandbox_state *state = state_get_current(); @@ -23,6 +55,8 @@ int sandbox_early_getopt_check(void) size_t num_options = __u_boot_sandbox_option_count(); size_t i; int max_arg_len, max_noarg_len; + struct sandbox_cmdline_option **sorted_opt; + int size; /* parse_err will be a string of the faulting option */ if (!state->parse_err) @@ -45,8 +79,18 @@ int sandbox_early_getopt_check(void) max_arg_len = max((int)strlen(sb_opt[i]->flag), max_arg_len); max_noarg_len = max_arg_len + 7; + /* Sort the options */ + size = sizeof(*sorted_opt) * num_options; + sorted_opt = malloc(size); + if (!sorted_opt) { + printf("No memory to sort options\n"); + os_exit(1); + } + memcpy(sorted_opt, sb_opt, size); + qsort(sorted_opt, num_options, sizeof(*sorted_opt), h_compare_opt); + for (i = 0; i < num_options; ++i) { - struct sandbox_cmdline_option *opt = sb_opt[i]; + struct sandbox_cmdline_option *opt = sorted_opt[i]; /* first output the short flag if it has one */ if (opt->flag_short >= 0x100) @@ -137,7 +181,7 @@ static int sandbox_cmdline_cb_default_fdt(struct sandbox_state *state, int len; len = strlen(state->argv[0]) + strlen(fmt) + 1; - fname = os_malloc(len); + fname = malloc(len); if (!fname) return -ENOMEM; snprintf(fname, len, fmt, state->argv[0]); @@ -157,7 +201,7 @@ static int sandbox_cmdline_cb_test_fdt(struct sandbox_state *state, int len; len = strlen(state->argv[0]) + strlen(fmt) + 1; - fname = os_malloc(len); + fname = malloc(len); if (!fname) return -ENOMEM; strcpy(fname, state->argv[0]); @@ -264,6 +308,16 @@ static int sandbox_cmdline_cb_show_lcd(struct sandbox_state *state, SANDBOX_CMDLINE_OPT_SHORT(show_lcd, 'l', 0, "Show the sandbox LCD display"); +static int sandbox_cmdline_cb_double_lcd(struct sandbox_state *state, + const char *arg) +{ + state->double_lcd = true; + + return 0; +} +SANDBOX_CMDLINE_OPT_SHORT(double_lcd, 'K', 0, + "Double the LCD display size in each direction"); + static const char *term_args[STATE_TERM_COUNT] = { "raw-with-sigs", "raw", @@ -319,13 +373,6 @@ static int sandbox_cmdline_cb_show_of_platdata(struct sandbox_state *state, } SANDBOX_CMDLINE_OPT(show_of_platdata, 0, "Show of-platdata in SPL"); -int board_run_command(const char *cmdline) -{ - printf("## Commands are disabled. Please enable CONFIG_CMDLINE.\n"); - - return 1; -} - static void setup_ram_buf(struct sandbox_state *state) { /* Zero the RAM buffer if we didn't read it, to keep valgrind happy */ diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index cd46e000f5..a347cec528 100644 --- a/arch/sandbox/cpu/state.c +++ b/arch/sandbox/cpu/state.c @@ -7,6 +7,7 @@ #include <errno.h> #include <fdtdec.h> #include <os.h> +#include <asm/malloc.h> #include <asm/state.h> /* Main state record for the sandbox */ @@ -16,28 +17,28 @@ static struct sandbox_state *state; /* Pointer to current state record */ static int state_ensure_space(int extra_size) { void *blob = state->state_fdt; - int used, size, free; + int used, size, free_bytes; void *buf; int ret; used = fdt_off_dt_strings(blob) + fdt_size_dt_strings(blob); size = fdt_totalsize(blob); - free = size - used; - if (free > extra_size) + free_bytes = size - used; + if (free_bytes > extra_size) return 0; size = used + extra_size; - buf = os_malloc(size); + buf = malloc(size); if (!buf) return -ENOMEM; ret = fdt_open_into(blob, buf, size); if (ret) { - os_free(buf); + free(buf); return -EIO; } - os_free(blob); + free(blob); state->state_fdt = buf; return 0; } @@ -53,7 +54,7 @@ static int state_read_file(struct sandbox_state *state, const char *fname) printf("Cannot find sandbox state file '%s'\n", fname); return -ENOENT; } - state->state_fdt = os_malloc(size); + state->state_fdt = malloc(size); if (!state->state_fdt) { puts("No memory to read sandbox state\n"); return -ENOMEM; @@ -75,7 +76,7 @@ static int state_read_file(struct sandbox_state *state, const char *fname) err_read: os_close(fd); err_open: - os_free(state->state_fdt); + free(state->state_fdt); state->state_fdt = NULL; return ret; @@ -242,7 +243,7 @@ int sandbox_write_state(struct sandbox_state *state, const char *fname) /* Create a state FDT if we don't have one */ if (!state->state_fdt) { size = 0x4000; - state->state_fdt = os_malloc(size); + state->state_fdt = malloc(size); if (!state->state_fdt) { puts("No memory to create FDT\n"); return -ENOMEM; @@ -300,7 +301,7 @@ int sandbox_write_state(struct sandbox_state *state, const char *fname) err_write: os_close(fd); err_create: - os_free(state->state_fdt); + free(state->state_fdt); return ret; } @@ -418,7 +419,7 @@ int state_uninit(void) os_unlink(state->jumped_fname); if (state->state_fdt) - os_free(state->state_fdt); + free(state->state_fdt); memset(state, '\0', sizeof(*state)); return 0; diff --git a/arch/sandbox/dts/sandbox.dtsi b/arch/sandbox/dts/sandbox.dtsi index 7bf144f532..7cd56c14f2 100644 --- a/arch/sandbox/dts/sandbox.dtsi +++ b/arch/sandbox/dts/sandbox.dtsi @@ -83,6 +83,7 @@ compatible = "sandbox,lcd-sdl"; xres = <1366>; yres = <768>; + log2-depth = <5>; }; leds { diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index c228447431..4a277934a7 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -816,6 +816,9 @@ chosen { #address-cells = <1>; #size-cells = <1>; + setting = "sunrise ohoka"; + other-node = "/some-bus/c-test@5"; + int-values = <0x1937 72993>; chosen-test { compatible = "denx,u-boot-fdt-test"; reg = <9 1>; diff --git a/arch/sandbox/include/asm/malloc.h b/arch/sandbox/include/asm/malloc.h new file mode 100644 index 0000000000..a1467b5ead --- /dev/null +++ b/arch/sandbox/include/asm/malloc.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Sandbox access to system malloc (i.e. not U-Boot's) + * + * Copyright 2020 Google LLC + */ + +#ifndef __ASM_MALLOC_H + +void *malloc(size_t size); +void free(void *ptr); +void *calloc(size_t nmemb, size_t size); +void *realloc(void *ptr, size_t size); +void *reallocarray(void *ptr, size_t nmemb, size_t size); + +/* + * This header allows calling the system allocation routines. It makes no + * sense to also include U-Boot's malloc.h since that redfines malloc to + * have a 'dl' prefix. These two implementations cannot be mixed and matched + * in the same file. + */ +#ifdef __MALLOC_H__ +#error "This sandbox header file cannot be included with malloc.h" +#endif + +#endif diff --git a/arch/sandbox/include/asm/sdl.h b/arch/sandbox/include/asm/sdl.h index c45dbddd70..47fc4889d2 100644 --- a/arch/sandbox/include/asm/sdl.h +++ b/arch/sandbox/include/asm/sdl.h @@ -17,10 +17,13 @@ * @height Window height in pixels * @log2_bpp: Log to base 2 of the number of bits per pixel. So a 32bpp * display will pass 5, since 2*5 = 32 + * @double_size: true to double the visible size in each direction for high-DPI + * displays * @return 0 if OK, -ENODEV if no device, -EIO if SDL failed to initialize * and -EPERM if the video failed to come up. */ -int sandbox_sdl_init_display(int width, int height, int log2_bpp); +int sandbox_sdl_init_display(int width, int height, int log2_bpp, + bool double_size); /** * sandbox_sdl_sync() - Sync current U-Boot LCD frame buffer to SDL @@ -78,8 +81,8 @@ int sandbox_sdl_sound_stop(void); int sandbox_sdl_sound_init(int rate, int channels); #else -static inline int sandbox_sdl_init_display(int width, int height, - int log2_bpp) +static inline int sandbox_sdl_init_display(int width, int height, int log2_bpp, + bool double_size) { return -ENODEV; } diff --git a/arch/sandbox/include/asm/state.h b/arch/sandbox/include/asm/state.h index ad3e94beb9..705645d714 100644 --- a/arch/sandbox/include/asm/state.h +++ b/arch/sandbox/include/asm/state.h @@ -83,6 +83,7 @@ struct sandbox_state { bool write_state; /* Write sandbox state on exit */ bool ignore_missing_state_on_read; /* No error if state missing */ bool show_lcd; /* Show LCD on start-up */ + bool double_lcd; /* Double display size for high-DPI */ enum sysreset_t last_sysreset; /* Last system reset type */ bool sysreset_allowed[SYSRESET_COUNT]; /* Allowed system reset types */ enum state_terminal_raw term_raw; /* Terminal raw/cooked */ diff --git a/arch/sandbox/include/asm/test.h b/arch/sandbox/include/asm/test.h index 7775794eaa..7f99d07c47 100644 --- a/arch/sandbox/include/asm/test.h +++ b/arch/sandbox/include/asm/test.h @@ -170,6 +170,13 @@ int sandbox_get_i2s_sum(struct udevice *dev); int sandbox_get_setup_called(struct udevice *dev); /** + * sandbox_get_sound_active() - Returns whether sound play is in progress + * + * @return true if active, false if not + */ +int sandbox_get_sound_active(struct udevice *dev); + +/** * sandbox_get_sound_sum() - Read back the sum of the sound data so far * * This data is provided to the sandbox driver by the sound play() method. diff --git a/arch/x86/cpu/apollolake/fsp_s.c b/arch/x86/cpu/apollolake/fsp_s.c index b2d9130841..1f22c1ea3c 100644 --- a/arch/x86/cpu/apollolake/fsp_s.c +++ b/arch/x86/cpu/apollolake/fsp_s.c @@ -9,6 +9,7 @@ #include <binman.h> #include <dm.h> #include <irq.h> +#include <malloc.h> #include <asm/intel_pinctrl.h> #include <asm/io.h> #include <asm/intel_regs.h> diff --git a/arch/x86/cpu/apollolake/spl.c b/arch/x86/cpu/apollolake/spl.c index 7ab7243311..d32f2a9898 100644 --- a/arch/x86/cpu/apollolake/spl.c +++ b/arch/x86/cpu/apollolake/spl.c @@ -6,6 +6,7 @@ #include <common.h> #include <binman_sym.h> #include <dm.h> +#include <malloc.h> #include <spi.h> #include <spl.h> #include <spi_flash.h> diff --git a/arch/x86/cpu/apollolake/uart.c b/arch/x86/cpu/apollolake/uart.c index f2b356eb44..f368f7d2db 100644 --- a/arch/x86/cpu/apollolake/uart.c +++ b/arch/x86/cpu/apollolake/uart.c @@ -10,6 +10,7 @@ #include <common.h> #include <dm.h> #include <dt-structs.h> +#include <malloc.h> #include <ns16550.h> #include <spl.h> #include <asm/io.h> diff --git a/arch/x86/cpu/intel_common/itss.c b/arch/x86/cpu/intel_common/itss.c index b6b57cc9a0..e4f785ce89 100644 --- a/arch/x86/cpu/intel_common/itss.c +++ b/arch/x86/cpu/intel_common/itss.c @@ -13,6 +13,7 @@ #include <dm.h> #include <dt-structs.h> #include <irq.h> +#include <malloc.h> #include <p2sb.h> #include <spl.h> #include <asm/itss.h> diff --git a/arch/x86/cpu/qemu/e820.c b/arch/x86/cpu/qemu/e820.c index a4136eb98c..0da36bddea 100644 --- a/arch/x86/cpu/qemu/e820.c +++ b/arch/x86/cpu/qemu/e820.c @@ -8,6 +8,7 @@ #include <common.h> #include <env_internal.h> +#include <malloc.h> #include <asm/e820.h> #include <asm/arch/qemu.h> diff --git a/arch/x86/cpu/qfw_cpu.c b/arch/x86/cpu/qfw_cpu.c index 49e9dfcf69..349bab1583 100644 --- a/arch/x86/cpu/qfw_cpu.c +++ b/arch/x86/cpu/qfw_cpu.c @@ -6,6 +6,7 @@ #include <common.h> #include <cpu.h> #include <dm.h> +#include <malloc.h> #include <qfw.h> #include <dm/lists.h> #include <dm/uclass-internal.h> diff --git a/arch/x86/lib/coreboot_table.c b/arch/x86/lib/coreboot_table.c index 8685aa3046..2943e11d2a 100644 --- a/arch/x86/lib/coreboot_table.c +++ b/arch/x86/lib/coreboot_table.c @@ -5,6 +5,7 @@ #include <common.h> #include <acpi_s3.h> +#include <malloc.h> #include <vbe.h> #include <asm/coreboot_tables.h> #include <asm/e820.h> diff --git a/arch/x86/lib/fsp1/fsp_common.c b/arch/x86/lib/fsp1/fsp_common.c index ec9c218778..aee2a05044 100644 --- a/arch/x86/lib/fsp1/fsp_common.c +++ b/arch/x86/lib/fsp1/fsp_common.c @@ -7,6 +7,7 @@ #include <acpi_s3.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <rtc.h> #include <asm/cmos_layout.h> #include <asm/early_cmos.h> diff --git a/arch/x86/lib/mrccache.c b/arch/x86/lib/mrccache.c index b9420a4cab..8914960226 100644 --- a/arch/x86/lib/mrccache.c +++ b/arch/x86/lib/mrccache.c @@ -10,6 +10,7 @@ #include <dm.h> #include <errno.h> #include <fdtdec.h> +#include <malloc.h> #include <net.h> #include <spi.h> #include <spi_flash.h> diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c index 99f1429363..7aea722d0b 100644 --- a/arch/x86/lib/tables.c +++ b/arch/x86/lib/tables.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <malloc.h> #include <smbios.h> #include <asm/sfi.h> #include <asm/mpspec.h> diff --git a/board/compulab/common/common.c b/board/compulab/common/common.c index cbac112dd8..2f92c6564d 100644 --- a/board/compulab/common/common.c +++ b/board/compulab/common/common.c @@ -6,6 +6,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/bootm.h> #include <asm/gpio.h> #include <asm/setup.h> diff --git a/board/corscience/tricorder/tricorder.c b/board/corscience/tricorder/tricorder.c index da33f8441c..cec819b36f 100644 --- a/board/corscience/tricorder/tricorder.c +++ b/board/corscience/tricorder/tricorder.c @@ -10,6 +10,7 @@ * Frederik Kriewitz <frederik@kriewitz.eu> */ #include <common.h> +#include <malloc.h> #include <twl4030.h> #include <status_led.h> #include <asm/io.h> diff --git a/board/gardena/smart-gateway-mt7688/board.c b/board/gardena/smart-gateway-mt7688/board.c index ae03f0a434..48cf3091e9 100644 --- a/board/gardena/smart-gateway-mt7688/board.c +++ b/board/gardena/smart-gateway-mt7688/board.c @@ -8,6 +8,7 @@ #include <env_internal.h> #include <init.h> #include <led.h> +#include <malloc.h> #include <net.h> #include <spi.h> #include <spi_flash.h> diff --git a/board/ge/common/vpd_reader.c b/board/ge/common/vpd_reader.c index 4df411cf10..d42b00da2f 100644 --- a/board/ge/common/vpd_reader.c +++ b/board/ge/common/vpd_reader.c @@ -4,6 +4,7 @@ */ #include "vpd_reader.h" +#include <malloc.h> #include <i2c.h> #include <linux/bch.h> diff --git a/board/google/veyron/veyron.c b/board/google/veyron/veyron.c index dd2c014c60..6b9c34818b 100644 --- a/board/google/veyron/veyron.c +++ b/board/google/veyron/veyron.c @@ -8,6 +8,7 @@ #include <dm.h> #include <asm/arch-rockchip/clock.h> #include <dt-bindings/clock/rk3288-cru.h> +#include <linux/err.h> #include <power/regulator.h> /* diff --git a/board/hisilicon/poplar/poplar.c b/board/hisilicon/poplar/poplar.c index 36999bdcea..4937dc374c 100644 --- a/board/hisilicon/poplar/poplar.c +++ b/board/hisilicon/poplar/poplar.c @@ -4,9 +4,9 @@ * Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org> */ +#include <common.h> #include <cpu_func.h> #include <dm.h> -#include <common.h> #include <init.h> #include <asm/io.h> #include <dm/platform_data/serial_pl01x.h> diff --git a/board/isee/igep003x/board.c b/board/isee/igep003x/board.c index bc9fdcd1e6..b0f8d8a314 100644 --- a/board/isee/igep003x/board.c +++ b/board/isee/igep003x/board.c @@ -9,6 +9,7 @@ #include <env.h> #include <errno.h> #include <init.h> +#include <malloc.h> #include <serial.h> #include <spl.h> #include <asm/arch/cpu.h> diff --git a/board/isee/igep00x0/igep00x0.c b/board/isee/igep00x0/igep00x0.c index 74fc5f0890..1b871fdcc5 100644 --- a/board/isee/igep00x0/igep00x0.c +++ b/board/isee/igep00x0/igep00x0.c @@ -5,6 +5,7 @@ */ #include <common.h> #include <env.h> +#include <malloc.h> #include <status_led.h> #include <dm.h> #include <ns16550.h> diff --git a/board/menlo/m53menlo/m53menlo.c b/board/menlo/m53menlo/m53menlo.c index 065e6a2ccc..70a13aa17b 100644 --- a/board/menlo/m53menlo/m53menlo.c +++ b/board/menlo/m53menlo/m53menlo.c @@ -9,6 +9,7 @@ #include <common.h> #include <dm.h> #include <init.h> +#include <malloc.h> #include <asm/io.h> #include <asm/arch/imx-regs.h> #include <asm/arch/sys_proto.h> diff --git a/board/microchip/pic32mzda/pic32mzda.c b/board/microchip/pic32mzda/pic32mzda.c index 8bfdee91e5..aa8aab39ce 100644 --- a/board/microchip/pic32mzda/pic32mzda.c +++ b/board/microchip/pic32mzda/pic32mzda.c @@ -10,6 +10,7 @@ #include <common.h> #include <dm.h> #include <clk.h> +#include <malloc.h> #include <dt-bindings/clock/microchip,clock.h> #include <mach/pic32.h> diff --git a/board/overo/overo.c b/board/overo/overo.c index 442028a764..baa7997477 100644 --- a/board/overo/overo.c +++ b/board/overo/overo.c @@ -14,6 +14,7 @@ #include <common.h> #include <dm.h> #include <env.h> +#include <malloc.h> #include <ns16550.h> #include <netdev.h> #include <twl4030.h> diff --git a/board/siemens/common/board.c b/board/siemens/common/board.c index 5f5e2eb544..24429d2837 100644 --- a/board/siemens/common/board.c +++ b/board/siemens/common/board.c @@ -12,6 +12,7 @@ #include <common.h> #include <env.h> #include <errno.h> +#include <malloc.h> #include <serial.h> #include <spl.h> #include <asm/arch/cpu.h> diff --git a/board/siemens/pxm2/board.c b/board/siemens/pxm2/board.c index b5a10ebf8b..58bb5bab1a 100644 --- a/board/siemens/pxm2/board.c +++ b/board/siemens/pxm2/board.c @@ -16,6 +16,7 @@ #include <env.h> #include <errno.h> #include <init.h> +#include <malloc.h> #include <spl.h> #include <asm/arch/cpu.h> #include <asm/arch/hardware.h> diff --git a/board/siemens/rut/board.c b/board/siemens/rut/board.c index d7d9738a6d..bd4eaa4f3a 100644 --- a/board/siemens/rut/board.c +++ b/board/siemens/rut/board.c @@ -14,6 +14,7 @@ #include <env.h> #include <errno.h> #include <init.h> +#include <malloc.h> #include <spi.h> #include <spl.h> #include <asm/arch/cpu.h> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c index e82a43074f..ca76579405 100644 --- a/board/st/stm32mp1/stm32mp1.c +++ b/board/st/stm32mp1/stm32mp1.c @@ -16,6 +16,7 @@ #include <i2c.h> #include <init.h> #include <led.h> +#include <malloc.h> #include <memalign.h> #include <misc.h> #include <mtd.h> @@ -32,6 +33,7 @@ #include <asm/arch/stm32.h> #include <asm/arch/sys_proto.h> #include <jffs2/load_kernel.h> +#include <linux/err.h> #include <power/regulator.h> #include <usb/dwc2_udc.h> diff --git a/board/synopsys/hsdk/clk-lib.c b/board/synopsys/hsdk/clk-lib.c index 6c75ce0870..6b6bb70e3c 100644 --- a/board/synopsys/hsdk/clk-lib.c +++ b/board/synopsys/hsdk/clk-lib.c @@ -5,6 +5,7 @@ */ #include <clk.h> +#include <malloc.h> #include <dm/device.h> #include "clk-lib.h" diff --git a/board/technexion/tao3530/tao3530.c b/board/technexion/tao3530/tao3530.c index 22d26e550e..7d7c427392 100644 --- a/board/technexion/tao3530/tao3530.c +++ b/board/technexion/tao3530/tao3530.c @@ -4,6 +4,7 @@ * Tapani Utriainen <linuxfae@technexion.com> */ #include <common.h> +#include <malloc.h> #include <netdev.h> #include <twl4030.h> #include <asm/io.h> diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c index 9887d20207..7ff4766947 100644 --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c @@ -49,7 +49,7 @@ static void setup_iodomain(void) static int setup_boottargets(void) { const char *boot_device = - ofnode_get_chosen_prop("u-boot,spl-boot-device"); + ofnode_read_chosen_string("u-boot,spl-boot-device"); char *env_default, *env; if (!boot_device) { diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index 3d7f73843c..01b28e8da4 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -12,6 +12,7 @@ #include <env.h> #include <errno.h> #include <init.h> +#include <malloc.h> #include <spl.h> #include <serial.h> #include <asm/arch/cpu.h> diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c index d70ab0c4d0..7528de3e5c 100644 --- a/board/ti/am57xx/board.c +++ b/board/ti/am57xx/board.c @@ -11,6 +11,7 @@ #include <env.h> #include <fdt_support.h> #include <init.h> +#include <malloc.h> #include <palmas.h> #include <sata.h> #include <serial.h> diff --git a/board/timll/devkit8000/devkit8000.c b/board/timll/devkit8000/devkit8000.c index 490d8cbcd0..b037d725c3 100644 --- a/board/timll/devkit8000/devkit8000.c +++ b/board/timll/devkit8000/devkit8000.c @@ -18,6 +18,7 @@ #include <common.h> #include <dm.h> #include <env.h> +#include <malloc.h> #include <ns16550.h> #include <twl4030.h> #include <asm/io.h> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c index ae5fe2729f..f87e2e9105 100644 --- a/board/xilinx/common/board.c +++ b/board/xilinx/common/board.c @@ -22,7 +22,7 @@ int zynq_board_read_rom_ethaddr(unsigned char *ethaddr) return -ENODEV; debug("%s: Path to EEPROM %s\n", __func__, - ofnode_get_chosen_prop("xlnx,eeprom")); + ofnode_read_chosen_string("xlnx,eeprom")); ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, &dev); if (ret) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index 56bdff33c6..d347bd5ec0 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -13,6 +13,7 @@ #include <efi_selftest.h> #include <env.h> #include <errno.h> +#include <malloc.h> #include <linux/libfdt.h> #include <linux/libfdt_env.h> #include <mapmem.h> @@ -40,10 +40,19 @@ static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, int argc, return 0; } +static int do_dm_dump_drivers(cmd_tbl_t *cmdtp, int flag, int argc, + char * const argv[]) +{ + dm_dump_drivers(); + + return 0; +} + static cmd_tbl_t test_commands[] = { U_BOOT_CMD_MKENT(tree, 0, 1, do_dm_dump_all, "", ""), U_BOOT_CMD_MKENT(uclass, 1, 1, do_dm_dump_uclass, "", ""), U_BOOT_CMD_MKENT(devres, 1, 1, do_dm_dump_devres, "", ""), + U_BOOT_CMD_MKENT(drivers, 1, 1, do_dm_dump_drivers, "", ""), }; static __maybe_unused void dm_reloc(void) @@ -84,5 +93,6 @@ U_BOOT_CMD( "Driver model low level access", "tree Dump driver model tree ('*' = activated)\n" "dm uclass Dump list of instances for each uclass\n" - "dm devres Dump list of device resources for each device" + "dm devres Dump list of device resources for each device\n" + "dm drivers Dump list of drivers and their compatible strings\n" ); diff --git a/cmd/gpio.c b/cmd/gpio.c index 67eef83c95..16c2cebb3d 100644 --- a/cmd/gpio.c +++ b/cmd/gpio.c @@ -10,7 +10,9 @@ #include <command.h> #include <errno.h> #include <dm.h> +#include <malloc.h> #include <asm/gpio.h> +#include <linux/err.h> __weak int name_to_gpio(const char *name) { @@ -20,6 +20,7 @@ #include <div64.h> #include <memalign.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/sizes.h> #include <stdlib.h> diff --git a/cmd/host.c b/cmd/host.c index 98c4d2a099..eefc4f255e 100644 --- a/cmd/host.c +++ b/cmd/host.c @@ -8,6 +8,7 @@ #include <fs.h> #include <part.h> #include <sandboxblockdev.h> +#include <dm/device_compat.h> #include <linux/errno.h> static int host_curr_device = -1; @@ -14,6 +14,8 @@ #include <malloc.h> #include <mapmem.h> #include <mtd.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/ctype.h> @@ -8,6 +8,7 @@ #include <command.h> #include <dm.h> #include <hexdump.h> +#include <malloc.h> #include <rng.h> static int do_rng(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) diff --git a/cmd/tpm-common.c b/cmd/tpm-common.c index 38900fb159..3014255229 100644 --- a/cmd/tpm-common.c +++ b/cmd/tpm-common.c @@ -7,11 +7,14 @@ #include <command.h> #include <dm.h> #include <env.h> +#include <malloc.h> #include <asm/unaligned.h> #include <linux/string.h> #include <tpm-common.h> #include "tpm-user-utils.h" +static struct udevice *tpm_dev; + /** * Print a byte string in hexdecimal format, 16-bytes per line. * @@ -231,19 +234,86 @@ int type_string_write_vars(const char *type_str, u8 *data, return 0; } +static int tpm_show_device(void) +{ + struct udevice *dev; + char buf[80]; + int n = 0, rc; + + for_each_tpm_device(dev) { + rc = tpm_get_desc(dev, buf, sizeof(buf)); + if (rc < 0) + printf("device %d: can't get info\n", n); + else + printf("device %d: %s\n", n, buf); + + n++; + }; + + return 0; +} + +static int tpm_set_device(unsigned long num) +{ + struct udevice *dev; + unsigned long n = 0; + int rc = CMD_RET_FAILURE; + + for_each_tpm_device(dev) { + if (n == num) { + rc = 0; + break; + } + + n++; + } + + if (!rc) + tpm_dev = dev; + + return rc; +} + int get_tpm(struct udevice **devp) { int rc; - rc = uclass_first_device_err(UCLASS_TPM, devp); - if (rc) { - printf("Could not find TPM (ret=%d)\n", rc); - return CMD_RET_FAILURE; + /* + * To keep a backward compatibility with previous code, + * if a tpm device is not explicitly set, we set the first one. + */ + if (!tpm_dev) { + rc = tpm_set_device(0); + if (rc) { + printf("Couldn't set TPM 0 (rc = %d)\n", rc); + return CMD_RET_FAILURE; + } } + if (devp) + *devp = tpm_dev; + return 0; } +int do_tpm_device(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) +{ + unsigned long num; + int rc; + + if (argc == 2) { + num = simple_strtoul(argv[1], NULL, 10); + + rc = tpm_set_device(num); + if (rc) + printf("Couldn't set TPM %lu (rc = %d)\n", num, rc); + } else { + rc = tpm_show_device(); + } + + return rc; +} + int do_tpm_info(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { struct udevice *dev; diff --git a/cmd/tpm-user-utils.h b/cmd/tpm-user-utils.h index 8ce9861784..a851d9c4af 100644 --- a/cmd/tpm-user-utils.h +++ b/cmd/tpm-user-utils.h @@ -17,6 +17,7 @@ int type_string_pack(const char *type_str, char * const values[], u8 *data); int type_string_write_vars(const char *type_str, u8 *data, char * const vars[]); int get_tpm(struct udevice **devp); +int do_tpm_device(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]); int do_tpm_init(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]); int do_tpm_info(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]); int do_tpm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); diff --git a/cmd/tpm-v1.c b/cmd/tpm-v1.c index 2807331524..bc34e0654f 100644 --- a/cmd/tpm-v1.c +++ b/cmd/tpm-v1.c @@ -645,6 +645,7 @@ TPM_COMMAND_NO_ARG(tpm_physical_enable) TPM_COMMAND_NO_ARG(tpm_physical_disable) static cmd_tbl_t tpm1_commands[] = { + U_BOOT_CMD_MKENT(device, 0, 1, do_tpm_device, "", ""), U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""), U_BOOT_CMD_MKENT(init, 0, 1, do_tpm_init, "", ""), U_BOOT_CMD_MKENT(startup, 0, 1, @@ -721,6 +722,8 @@ U_BOOT_CMD(tpm, CONFIG_SYS_MAXARGS, 1, do_tpm, "cmd args...\n" " - Issue TPM command <cmd> with arguments <args...>.\n" "Admin Startup and State Commands:\n" +" device [num device]\n" +" - Show all devices or set the specified device\n" " info - Show information about the TPM\n" " init\n" " - Put TPM into a state where it waits for 'startup' command.\n" diff --git a/cmd/tpm-v2.c b/cmd/tpm-v2.c index 459a955d29..0cd39821bf 100644 --- a/cmd/tpm-v2.c +++ b/cmd/tpm-v2.c @@ -354,6 +354,7 @@ static int do_tpm_pcr_setauthvalue(cmd_tbl_t *cmdtp, int flag, } static cmd_tbl_t tpm2_commands[] = { + U_BOOT_CMD_MKENT(device, 0, 1, do_tpm_device, "", ""), U_BOOT_CMD_MKENT(info, 0, 1, do_tpm_info, "", ""), U_BOOT_CMD_MKENT(init, 0, 1, do_tpm_init, "", ""), U_BOOT_CMD_MKENT(startup, 0, 1, do_tpm2_startup, "", ""), @@ -381,6 +382,8 @@ cmd_tbl_t *get_tpm2_commands(unsigned int *size) U_BOOT_CMD(tpm2, CONFIG_SYS_MAXARGS, 1, do_tpm, "Issue a TPMv2.x command", "<command> [<arguments>]\n" "\n" +"device [num device]\n" +" Show all devices or set the specified device\n" "info\n" " Show information about the TPM.\n" "init\n" @@ -15,10 +15,12 @@ #include <command.h> #include <env.h> #include <exports.h> +#include <malloc.h> #include <memalign.h> #include <mtd.h> #include <nand.h> #include <onenand_uboot.h> +#include <dm/devres.h> #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/err.h> diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c index 570cf3aa50..c5c6899787 100644 --- a/cmd/usb_mass_storage.c +++ b/cmd/usb_mass_storage.c @@ -11,6 +11,7 @@ #include <command.h> #include <console.h> #include <g_dnl.h> +#include <malloc.h> #include <part.h> #include <usb.h> #include <usb_mass_storage.h> diff --git a/cmd/ximg.c b/cmd/ximg.c index dccd1143a7..770f6a3eed 100644 --- a/cmd/ximg.c +++ b/cmd/ximg.c @@ -17,6 +17,7 @@ #include <env.h> #include <gzip.h> #include <image.h> +#include <malloc.h> #include <mapmem.h> #include <watchdog.h> #if defined(CONFIG_BZIP2) diff --git a/common/android_ab.c b/common/android_ab.c index 6c4df419b2..e0fe32d24d 100644 --- a/common/android_ab.c +++ b/common/android_ab.c @@ -5,6 +5,7 @@ #include <common.h> #include <android_ab.h> #include <android_bootloader_message.h> +#include <malloc.h> #include <linux/err.h> #include <memalign.h> #include <u-boot/crc.h> diff --git a/common/autoboot.c b/common/autoboot.c index 94a1b4abeb..4ea9be6da9 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -13,6 +13,7 @@ #include <env.h> #include <fdtdec.h> #include <hash.h> +#include <malloc.h> #include <memalign.h> #include <menu.h> #include <post.h> diff --git a/common/bloblist.c b/common/bloblist.c index ccf5e4b6f6..99501951e0 100644 --- a/common/bloblist.c +++ b/common/bloblist.c @@ -59,11 +59,10 @@ static int bloblist_addrec(uint tag, int size, struct bloblist_rec **recp) struct bloblist_rec *rec; int new_alloced; - new_alloced = hdr->alloced + sizeof(*rec) + - ALIGN(size, BLOBLIST_ALIGN); + new_alloced = hdr->alloced + sizeof(*rec) + ALIGN(size, BLOBLIST_ALIGN); if (new_alloced >= hdr->size) { log(LOGC_BLOBLIST, LOGL_ERR, - "Failed to allocate %x bytes size=%x, need size>=%x\n", + "Failed to allocate %x bytes size=%x, need size=%x\n", size, hdr->size, new_alloced); return log_msg_ret("bloblist add", -ENOSPC); } @@ -74,6 +73,9 @@ static int bloblist_addrec(uint tag, int size, struct bloblist_rec **recp) rec->hdr_size = sizeof(*rec); rec->size = size; rec->spare = 0; + + /* Zero the record data */ + memset(rec + 1, '\0', rec->size); *recp = rec; return 0; @@ -85,8 +87,10 @@ static int bloblist_ensurerec(uint tag, struct bloblist_rec **recp, int size) rec = bloblist_findrec(tag); if (rec) { - if (size && size != rec->size) + if (size && size != rec->size) { + *recp = rec; return -ESPIPE; + } } else { int ret; @@ -145,6 +149,21 @@ void *bloblist_ensure(uint tag, int size) return (void *)rec + rec->hdr_size; } +int bloblist_ensure_size_ret(uint tag, int *sizep, void **blobp) +{ + struct bloblist_rec *rec; + int ret; + + ret = bloblist_ensurerec(tag, &rec, *sizep); + if (ret == -ESPIPE) + *sizep = rec->size; + else if (ret) + return ret; + *blobp = (void *)rec + rec->hdr_size; + + return 0; +} + static u32 bloblist_calc_chksum(struct bloblist_hdr *hdr) { struct bloblist_rec *rec; diff --git a/common/cli.c b/common/cli.c index 7ffe902b88..38bba17585 100644 --- a/common/cli.c +++ b/common/cli.c @@ -71,6 +71,13 @@ int run_command_repeatable(const char *cmd, int flag) return 0; #endif } +#else +__weak int board_run_command(const char *cmdline) +{ + printf("## Commands are disabled. Please enable CONFIG_CMDLINE.\n"); + + return 1; +} #endif /* CONFIG_CMDLINE */ int run_command_list(const char *cmd, int len, int flag) diff --git a/common/console.c b/common/console.c index 168ba60d0d..7681da19a2 100644 --- a/common/console.c +++ b/common/console.c @@ -621,6 +621,17 @@ void console_record_reset_enable(void) console_record_reset(); gd->flags |= GD_FLG_RECORD; } + +int console_record_readline(char *str, int maxlen) +{ + return membuff_readline(&gd->console_out, str, maxlen, ' '); +} + +int console_record_avail(void) +{ + return membuff_avail(&gd->console_out); +} + #endif /* test if ctrl-c was pressed */ diff --git a/common/exports.c b/common/exports.c index b4f1f7af15..18af38a5f6 100644 --- a/common/exports.c +++ b/common/exports.c @@ -1,5 +1,6 @@ #include <common.h> #include <exports.h> +#include <malloc.h> #include <spi.h> #include <i2c.h> diff --git a/common/image-fdt.c b/common/image-fdt.c index dbb1e6e131..3002948b6b 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -14,6 +14,7 @@ #include <env.h> #include <errno.h> #include <image.h> +#include <malloc.h> #include <linux/libfdt.h> #include <mapmem.h> #include <asm/io.h> @@ -122,7 +123,7 @@ void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob) /* check if this subnode has a reg property */ ret = fdt_get_resource(fdt_blob, subnode, "reg", 0, &res); - if (!ret) { + if (!ret && fdtdec_get_is_enabled(fdt_blob, subnode)) { addr = res.start; size = res.end - res.start + 1; boot_fdt_reserve_region(lmb, addr, size); diff --git a/common/image.c b/common/image.c index 2288cff126..94873cb6ed 100644 --- a/common/image.c +++ b/common/image.c @@ -10,6 +10,7 @@ #include <common.h> #include <cpu_func.h> #include <env.h> +#include <malloc.h> #include <u-boot/crc.h> #include <watchdog.h> diff --git a/common/usb.c b/common/usb.c index d9bcb5a57e..349e838f1d 100644 --- a/common/usb.c +++ b/common/usb.c @@ -28,6 +28,7 @@ #include <common.h> #include <command.h> #include <dm.h> +#include <malloc.h> #include <memalign.h> #include <asm/processor.h> #include <linux/compiler.h> diff --git a/common/usb_hub.c b/common/usb_hub.c index 25c2ac4345..c642b683e7 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -26,6 +26,7 @@ #include <dm.h> #include <env.h> #include <errno.h> +#include <malloc.h> #include <memalign.h> #include <asm/processor.h> #include <asm/unaligned.h> diff --git a/doc/README.bloblist b/doc/README.bloblist index b0e787b97d..274c460557 100644 --- a/doc/README.bloblist +++ b/doc/README.bloblist @@ -55,8 +55,8 @@ a single bloblist. API --- -Bloblist provides a fairly simple API which allows blobs to be created and -found. All access is via the blob's tag. +Bloblist provides a fairly simple API which allows blobs to be created and +found. All access is via the blob's tag. Blob records are zeroed when added. Finishing the bloblist diff --git a/doc/arch/sandbox.rst b/doc/arch/sandbox.rst index e1f4dde6f8..e577a95716 100644 --- a/doc/arch/sandbox.rst +++ b/doc/arch/sandbox.rst @@ -43,7 +43,7 @@ To run sandbox U-Boot use something like:: ./u-boot Note: If you get errors about 'sdl-config: Command not found' you may need to -install libsdl1.2-dev or similar to get SDL support. Alternatively you can +install libsdl2.0-dev or similar to get SDL support. Alternatively you can build sandbox without SDL (i.e. no display/keyboard support) by removing the CONFIG_SANDBOX_SDL line in include/configs/sandbox.h or using:: diff --git a/doc/device-tree-bindings/video/sandbox-fb.txt b/doc/device-tree-bindings/video/sandbox-fb.txt index eb91b30e3f..230d25c23b 100644 --- a/doc/device-tree-bindings/video/sandbox-fb.txt +++ b/doc/device-tree-bindings/video/sandbox-fb.txt @@ -2,7 +2,10 @@ Sandbox LCD =========== This uses the displaymode.txt binding except that only xres and yres are -required properties. +required properties. Also an additional optional property is defined: + +log2-depth: Log base 2 of the U-Boot display buffer depth (4=16bpp, 5=32bpp). + If not provided, a value of 4 is used. Example: @@ -10,4 +13,5 @@ Example: compatible = "sandbox,lcd-sdl"; xres = <800>; yres = <600>; + log2-depth = <5>; }; diff --git a/doc/driver-model/debugging.rst b/doc/driver-model/debugging.rst index 4f4a8d4805..c59bf6763b 100644 --- a/doc/driver-model/debugging.rst +++ b/doc/driver-model/debugging.rst @@ -58,5 +58,5 @@ If you are using of-platdata (e.g. CONFIG_SPL_OF_PLATDATA), check that the driver name is the same as the first compatible string in the device tree (with invalid-variable characters converted to underscore). -If you are really stuck, #define DEBUG at the top of lists.c should show you -what is going on. +If you are really stuck, putting '#define LOG_DEBUG' at the top of +drivers/core/lists.c should show you what is going on. diff --git a/drivers/adc/rockchip-saradc.c b/drivers/adc/rockchip-saradc.c index ed773b9642..850142cce3 100644 --- a/drivers/adc/rockchip-saradc.c +++ b/drivers/adc/rockchip-saradc.c @@ -11,6 +11,7 @@ #include <dm.h> #include <errno.h> #include <asm/io.h> +#include <linux/err.h> #define SARADC_CTRL_CHN_MASK GENMASK(2, 0) #define SARADC_CTRL_POWER_CTRL BIT(3) diff --git a/drivers/adc/stm32-adc-core.c b/drivers/adc/stm32-adc-core.c index 04b6a8a2f5..2ca0fb4f10 100644 --- a/drivers/adc/stm32-adc-core.c +++ b/drivers/adc/stm32-adc-core.c @@ -8,6 +8,7 @@ #include <common.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <power/regulator.h> #include "stm32-adc-core.h" diff --git a/drivers/adc/stm32-adc.c b/drivers/adc/stm32-adc.c index 029338e4af..ca1ac3e757 100644 --- a/drivers/adc/stm32-adc.c +++ b/drivers/adc/stm32-adc.c @@ -9,6 +9,7 @@ #include <common.h> #include <adc.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #include "stm32-adc-core.h" diff --git a/drivers/axi/sandbox_store.c b/drivers/axi/sandbox_store.c index d724f19079..a6f483ed25 100644 --- a/drivers/axi/sandbox_store.c +++ b/drivers/axi/sandbox_store.c @@ -7,6 +7,7 @@ #include <common.h> #include <axi.h> #include <dm.h> +#include <malloc.h> /** * struct sandbox_store_priv - Private data structure of a AXI store device diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c index ca8978f0e1..7c39aa5f2f 100644 --- a/drivers/block/blk-uclass.c +++ b/drivers/block/blk-uclass.c @@ -7,9 +7,11 @@ #include <common.h> #include <blk.h> #include <dm.h> +#include <malloc.h> #include <dm/device-internal.h> #include <dm/lists.h> #include <dm/uclass-internal.h> +#include <linux/err.h> static const char *if_typename_str[IF_TYPE_COUNT] = { [IF_TYPE_IDE] = "ide", diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c index d3b1aaaba3..cca2237136 100644 --- a/drivers/block/sandbox.c +++ b/drivers/block/sandbox.c @@ -11,6 +11,7 @@ #include <os.h> #include <malloc.h> #include <sandboxblockdev.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <dm/device-internal.h> diff --git a/drivers/clk/altera/clk-arria10.c b/drivers/clk/altera/clk-arria10.c index 179869df45..affeb31fc2 100644 --- a/drivers/clk/altera/clk-arria10.c +++ b/drivers/clk/altera/clk-arria10.c @@ -4,9 +4,12 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <dm/util.h> diff --git a/drivers/clk/aspeed/clk_ast2500.c b/drivers/clk/aspeed/clk_ast2500.c index b3a3f3d4dd..f4a441ad68 100644 --- a/drivers/clk/aspeed/clk_ast2500.c +++ b/drivers/clk/aspeed/clk_ast2500.c @@ -10,6 +10,7 @@ #include <asm/arch/scu_ast2500.h> #include <dm/lists.h> #include <dt-bindings/clock/ast2500-scu.h> +#include <linux/err.h> /* * MAC Clock Delay settings, taken from Aspeed SDK diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c index 70b277e26f..a80f259a72 100644 --- a/drivers/clk/at91/clk-generated.c +++ b/drivers/clk/at91/clk-generated.c @@ -7,6 +7,8 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <malloc.h> +#include <linux/err.h> #include <linux/io.h> #include <mach/at91_pmc.h> #include "pmc.h" diff --git a/drivers/clk/at91/clk-h32mx.c b/drivers/clk/at91/clk-h32mx.c index 8f02d73d8d..86bb71f612 100644 --- a/drivers/clk/at91/clk-h32mx.c +++ b/drivers/clk/at91/clk-h32mx.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/util.h> #include <linux/io.h> #include <mach/at91_pmc.h> diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c index c880af8155..c55e6214b2 100644 --- a/drivers/clk/at91/clk-peripheral.c +++ b/drivers/clk/at91/clk-peripheral.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <malloc.h> #include <linux/io.h> #include <mach/at91_pmc.h> #include "pmc.h" diff --git a/drivers/clk/at91/clk-usb.c b/drivers/clk/at91/clk-usb.c index 24af183b55..c3cb2ba014 100644 --- a/drivers/clk/at91/clk-usb.c +++ b/drivers/clk/at91/clk-usb.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm/device.h> +#include <linux/err.h> #include <linux/io.h> #include <mach/at91_pmc.h> #include "pmc.h" diff --git a/drivers/clk/clk-cdce9xx.c b/drivers/clk/clk-cdce9xx.c index 5d1489ab0e..f1f76b0a4d 100644 --- a/drivers/clk/clk-cdce9xx.c +++ b/drivers/clk/clk-cdce9xx.c @@ -13,6 +13,7 @@ #include <errno.h> #include <clk-uclass.h> #include <i2c.h> +#include <dm/device_compat.h> #define MAX_NUMBER_OF_PLLS 4 #define MAX_NUMER_OF_OUTPUTS 9 diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c index a5626c33d1..414185031e 100644 --- a/drivers/clk/clk-composite.c +++ b/drivers/clk/clk-composite.c @@ -9,8 +9,10 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <clk.h> +#include <linux/err.h> #include "clk.h" diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c index 822e09b084..d79ae367b8 100644 --- a/drivers/clk/clk-divider.c +++ b/drivers/clk/clk-divider.c @@ -14,10 +14,12 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <dm/uclass.h> #include <dm/lists.h> #include <dm/device-internal.h> #include <linux/clk-provider.h> +#include <linux/err.h> #include <linux/log2.h> #include <div64.h> #include <clk.h> diff --git a/drivers/clk/clk-fixed-factor.c b/drivers/clk/clk-fixed-factor.c index 711b0588bc..2ceb6bb171 100644 --- a/drivers/clk/clk-fixed-factor.c +++ b/drivers/clk/clk-fixed-factor.c @@ -9,10 +9,12 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <div64.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_IMX_FIXED_FACTOR "ccf_clk_fixed_factor" diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c index 70b8794554..6415c2f1b9 100644 --- a/drivers/clk/clk-gate.c +++ b/drivers/clk/clk-gate.c @@ -12,9 +12,11 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_GATE "clk_gate" diff --git a/drivers/clk/clk-mux.c b/drivers/clk/clk-mux.c index 5acc0b8cbd..b9d2ae6778 100644 --- a/drivers/clk/clk-mux.c +++ b/drivers/clk/clk-mux.c @@ -26,9 +26,11 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_CCF_MUX "ccf_clk_mux" diff --git a/drivers/clk/clk-ti-sci.c b/drivers/clk/clk-ti-sci.c index ed1facbbcd..82241d9f3f 100644 --- a/drivers/clk/clk-ti-sci.c +++ b/drivers/clk/clk-ti-sci.c @@ -12,6 +12,9 @@ #include <dm.h> #include <errno.h> #include <clk-uclass.h> +#include <malloc.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> #include <k3-avs.h> @@ -203,7 +206,7 @@ static const struct udevice_id ti_sci_clk_of_match[] = { static struct clk_ops ti_sci_clk_ops = { .of_xlate = ti_sci_clk_of_xlate, .request = ti_sci_clk_request, - .free = ti_sci_clk_free, + .rfree = ti_sci_clk_free, .get_rate = ti_sci_clk_get_rate, .set_rate = ti_sci_clk_set_rate, .set_parent = ti_sci_clk_set_parent, diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 0df38bd06a..71878474eb 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -10,10 +10,13 @@ #include <clk.h> #include <clk-uclass.h> #include <dm.h> -#include <dm/read.h> #include <dt-structs.h> #include <errno.h> +#include <malloc.h> +#include <dm/devres.h> +#include <dm/read.h> #include <linux/clk-provider.h> +#include <linux/err.h> static inline const struct clk_ops *clk_dev_ops(struct udevice *dev) { @@ -423,10 +426,10 @@ int clk_free(struct clk *clk) return 0; ops = clk_dev_ops(clk->dev); - if (!ops->free) + if (!ops->rfree) return 0; - return ops->free(clk); + return ops->rfree(clk); } ulong clk_get_rate(struct clk *clk) diff --git a/drivers/clk/clk_fixed_factor.c b/drivers/clk/clk_fixed_factor.c index dcdb6ddf5c..cf9c4ae367 100644 --- a/drivers/clk/clk_fixed_factor.c +++ b/drivers/clk/clk_fixed_factor.c @@ -9,6 +9,7 @@ #include <clk-uclass.h> #include <div64.h> #include <dm.h> +#include <linux/err.h> struct clk_fixed_factor { struct clk parent; diff --git a/drivers/clk/clk_sandbox.c b/drivers/clk/clk_sandbox.c index de6b2f7c82..768fbb7c52 100644 --- a/drivers/clk/clk_sandbox.c +++ b/drivers/clk/clk_sandbox.c @@ -7,6 +7,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <asm/clk.h> struct sandbox_clk_priv { @@ -107,7 +108,7 @@ static struct clk_ops sandbox_clk_ops = { .enable = sandbox_clk_enable, .disable = sandbox_clk_disable, .request = sandbox_clk_request, - .free = sandbox_clk_free, + .rfree = sandbox_clk_free, }; static int sandbox_clk_probe(struct udevice *dev) diff --git a/drivers/clk/clk_sandbox_ccf.c b/drivers/clk/clk_sandbox_ccf.c index 9fa27229e1..3543bea70d 100644 --- a/drivers/clk/clk_sandbox_ccf.c +++ b/drivers/clk/clk_sandbox_ccf.c @@ -9,10 +9,13 @@ #include <common.h> #include <dm.h> #include <clk.h> +#include <malloc.h> #include <asm/clk.h> #include <clk-uclass.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <sandbox-clk.h> +#include <linux/err.h> /* * Sandbox implementation of CCF primitives necessary for clk-uclass testing diff --git a/drivers/clk/clk_sandbox_test.c b/drivers/clk/clk_sandbox_test.c index 41954660ea..873383856f 100644 --- a/drivers/clk/clk_sandbox_test.c +++ b/drivers/clk/clk_sandbox_test.c @@ -6,7 +6,10 @@ #include <common.h> #include <dm.h> #include <clk.h> +#include <malloc.h> #include <asm/clk.h> +#include <dm/device_compat.h> +#include <linux/err.h> struct sandbox_clk_test { struct clk clks[SANDBOX_CLK_TEST_NON_DEVM_COUNT]; diff --git a/drivers/clk/clk_versal.c b/drivers/clk/clk_versal.c index 7e97b0c4bf..9d4d2149e3 100644 --- a/drivers/clk/clk_versal.c +++ b/drivers/clk/clk_versal.c @@ -5,6 +5,7 @@ */ #include <common.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <linux/bitfield.h> #include <malloc.h> @@ -13,6 +14,7 @@ #include <dm.h> #include <asm/arch/sys_proto.h> #include <zynqmp_firmware.h> +#include <linux/err.h> #define MAX_PARENT 100 #define MAX_NODES 6 diff --git a/drivers/clk/clk_vexpress_osc.c b/drivers/clk/clk_vexpress_osc.c index c692a6d0b8..82e589e239 100644 --- a/drivers/clk/clk_vexpress_osc.c +++ b/drivers/clk/clk_vexpress_osc.c @@ -8,6 +8,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <errno.h> #include <misc.h> diff --git a/drivers/clk/clk_zynq.c b/drivers/clk/clk_zynq.c index b09c37db40..4ca1cc0d52 100644 --- a/drivers/clk/clk_zynq.c +++ b/drivers/clk/clk_zynq.c @@ -10,6 +10,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <errno.h> #include <asm/io.h> diff --git a/drivers/clk/clk_zynqmp.c b/drivers/clk/clk_zynqmp.c index 72fc39fa47..e0eb897da8 100644 --- a/drivers/clk/clk_zynqmp.c +++ b/drivers/clk/clk_zynqmp.c @@ -6,11 +6,14 @@ */ #include <common.h> +#include <malloc.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <clk-uclass.h> #include <clk.h> #include <asm/arch/sys_proto.h> #include <dm.h> +#include <linux/err.h> static const resource_size_t zynqmp_crf_apb_clkc_base = 0xfd1a0020; static const resource_size_t zynqmp_crl_apb_clkc_base = 0xff5e0020; diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c index 95120d6559..3e99c528de 100644 --- a/drivers/clk/imx/clk-composite-8m.c +++ b/drivers/clk/imx/clk-composite-8m.c @@ -8,9 +8,11 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_IMX_COMPOSITE "imx_clk_composite" diff --git a/drivers/clk/imx/clk-gate2.c b/drivers/clk/imx/clk-gate2.c index 1b9db6e791..b38890d5ba 100644 --- a/drivers/clk/imx/clk-gate2.c +++ b/drivers/clk/imx/clk-gate2.c @@ -19,9 +19,11 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_IMX_GATE2 "imx_clk_gate2" diff --git a/drivers/clk/imx/clk-imx8.c b/drivers/clk/imx/clk-imx8.c index a755e26501..671054d9be 100644 --- a/drivers/clk/imx/clk-imx8.c +++ b/drivers/clk/imx/clk-imx8.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <malloc.h> #include <asm/arch/sci/sci.h> #include <asm/arch/clock.h> #include <dt-bindings/clock/imx8qxp-clock.h> diff --git a/drivers/clk/imx/clk-pfd.c b/drivers/clk/imx/clk-pfd.c index 4ae55f5a07..b8be3167c4 100644 --- a/drivers/clk/imx/clk-pfd.c +++ b/drivers/clk/imx/clk-pfd.c @@ -19,10 +19,12 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> #include <div64.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_IMX_PFD "imx_clk_pfd" diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c index 2246beb21b..1673eb26b2 100644 --- a/drivers/clk/imx/clk-pll14xx.c +++ b/drivers/clk/imx/clk-pll14xx.c @@ -10,7 +10,9 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <linux/clk-provider.h> +#include <linux/err.h> #include <linux/iopoll.h> #include <clk.h> #include <div64.h> diff --git a/drivers/clk/imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c index 0cdb9df45d..525442debf 100644 --- a/drivers/clk/imx/clk-pllv3.c +++ b/drivers/clk/imx/clk-pllv3.c @@ -10,9 +10,11 @@ #include <malloc.h> #include <clk-uclass.h> #include <dm/device.h> +#include <dm/devres.h> #include <dm/uclass.h> #include <clk.h> #include "clk.h" +#include <linux/err.h> #define UBOOT_DM_CLK_IMX_PLLV3_GENERIC "imx_clk_pllv3_generic" #define UBOOT_DM_CLK_IMX_PLLV3_SYS "imx_clk_pllv3_sys" diff --git a/drivers/clk/meson/axg.c b/drivers/clk/meson/axg.c index 32cbf752ae..7035b59a13 100644 --- a/drivers/clk/meson/axg.c +++ b/drivers/clk/meson/axg.c @@ -15,6 +15,7 @@ #include <div64.h> #include <dt-bindings/clock/axg-clkc.h> #include "clk_meson.h" +#include <linux/err.h> #define XTAL_RATE 24000000 diff --git a/drivers/clk/meson/g12a.c b/drivers/clk/meson/g12a.c index 1b2523bbf1..686d94ebfe 100644 --- a/drivers/clk/meson/g12a.c +++ b/drivers/clk/meson/g12a.c @@ -14,6 +14,7 @@ #include <syscon.h> #include <div64.h> #include <dt-bindings/clock/g12a-clkc.h> +#include <linux/err.h> #include <linux/kernel.h> #include "clk_meson.h" diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c index abb5337e78..e781e08d9d 100644 --- a/drivers/clk/meson/gxbb.c +++ b/drivers/clk/meson/gxbb.c @@ -15,6 +15,7 @@ #include <syscon.h> #include <dt-bindings/clock/gxbb-clkc.h> #include "clk_meson.h" +#include <linux/err.h> /* This driver support only basic clock tree operations : * - Can calculate clock frequency on a limited tree diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c index b1a35968e1..068e48ea04 100644 --- a/drivers/clk/mvebu/armada-37xx-periph.c +++ b/drivers/clk/mvebu/armada-37xx-periph.c @@ -15,6 +15,7 @@ #include <dm.h> #include <asm/io.h> #include <asm/arch/cpu.h> +#include <dm/device_compat.h> #define TBG_SEL 0x0 #define DIV_SEL0 0x4 diff --git a/drivers/clk/mvebu/armada-37xx-tbg.c b/drivers/clk/mvebu/armada-37xx-tbg.c index aa7ccd690f..233926e9b6 100644 --- a/drivers/clk/mvebu/armada-37xx-tbg.c +++ b/drivers/clk/mvebu/armada-37xx-tbg.c @@ -14,6 +14,7 @@ #include <dm.h> #include <asm/io.h> #include <asm/arch/cpu.h> +#include <dm/device_compat.h> #define NUM_TBG 4 diff --git a/drivers/clk/rockchip/clk_px30.c b/drivers/clk/rockchip/clk_px30.c index 36764c128b..b88534145e 100644 --- a/drivers/clk/rockchip/clk_px30.c +++ b/drivers/clk/rockchip/clk_px30.c @@ -8,6 +8,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_px30.h> diff --git a/drivers/clk/rockchip/clk_rk3036.c b/drivers/clk/rockchip/clk_rk3036.c index 6d5ae3d003..6e085c4136 100644 --- a/drivers/clk/rockchip/clk_rk3036.c +++ b/drivers/clk/rockchip/clk_rk3036.c @@ -7,6 +7,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/io.h> #include <asm/arch-rockchip/clock.h> diff --git a/drivers/clk/rockchip/clk_rk3128.c b/drivers/clk/rockchip/clk_rk3128.c index efda8c830b..a6f7902941 100644 --- a/drivers/clk/rockchip/clk_rk3128.c +++ b/drivers/clk/rockchip/clk_rk3128.c @@ -7,6 +7,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/io.h> #include <asm/arch-rockchip/clock.h> diff --git a/drivers/clk/rockchip/clk_rk3188.c b/drivers/clk/rockchip/clk_rk3188.c index 3ea9a81b32..2b82a40d28 100644 --- a/drivers/clk/rockchip/clk_rk3188.c +++ b/drivers/clk/rockchip/clk_rk3188.c @@ -9,6 +9,7 @@ #include <dm.h> #include <dt-structs.h> #include <errno.h> +#include <malloc.h> #include <mapmem.h> #include <syscon.h> #include <asm/io.h> @@ -20,6 +21,7 @@ #include <dm/device-internal.h> #include <dm/lists.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <linux/log2.h> enum rk3188_clk_type { diff --git a/drivers/clk/rockchip/clk_rk322x.c b/drivers/clk/rockchip/clk_rk322x.c index 6e8a164d62..ef33adbf29 100644 --- a/drivers/clk/rockchip/clk_rk322x.c +++ b/drivers/clk/rockchip/clk_rk322x.c @@ -7,6 +7,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/io.h> #include <asm/arch-rockchip/clock.h> diff --git a/drivers/clk/rockchip/clk_rk3288.c b/drivers/clk/rockchip/clk_rk3288.c index cc1c1e81e9..81cdb8ee9c 100644 --- a/drivers/clk/rockchip/clk_rk3288.c +++ b/drivers/clk/rockchip/clk_rk3288.c @@ -10,6 +10,7 @@ #include <dm.h> #include <dt-structs.h> #include <errno.h> +#include <malloc.h> #include <mapmem.h> #include <syscon.h> #include <asm/io.h> @@ -21,6 +22,7 @@ #include <dm/device-internal.h> #include <dm/lists.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <linux/log2.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/clk/rockchip/clk_rk3308.c b/drivers/clk/rockchip/clk_rk3308.c index f212c5ffc2..c0f1285e4c 100644 --- a/drivers/clk/rockchip/clk_rk3308.c +++ b/drivers/clk/rockchip/clk_rk3308.c @@ -8,6 +8,7 @@ #include <dm.h> #include <div64.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/io.h> #include <asm/arch/cru_rk3308.h> diff --git a/drivers/clk/rockchip/clk_rk3328.c b/drivers/clk/rockchip/clk_rk3328.c index e700a1bc25..8e867c58df 100644 --- a/drivers/clk/rockchip/clk_rk3328.c +++ b/drivers/clk/rockchip/clk_rk3328.c @@ -8,6 +8,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru_rk3328.h> diff --git a/drivers/clk/rockchip/clk_rk3368.c b/drivers/clk/rockchip/clk_rk3368.c index b51d529ade..2cce1b967d 100644 --- a/drivers/clk/rockchip/clk_rk3368.c +++ b/drivers/clk/rockchip/clk_rk3368.c @@ -10,6 +10,7 @@ #include <dm.h> #include <dt-structs.h> #include <errno.h> +#include <malloc.h> #include <mapmem.h> #include <syscon.h> #include <bitfield.h> diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c index 37fc142a7a..865b80cc0f 100644 --- a/drivers/clk/rockchip/clk_rk3399.c +++ b/drivers/clk/rockchip/clk_rk3399.c @@ -9,6 +9,7 @@ #include <dm.h> #include <dt-structs.h> #include <errno.h> +#include <malloc.h> #include <mapmem.h> #include <syscon.h> #include <bitfield.h> diff --git a/drivers/clk/rockchip/clk_rv1108.c b/drivers/clk/rockchip/clk_rv1108.c index 97fdd099ef..da9c48b962 100644 --- a/drivers/clk/rockchip/clk_rv1108.c +++ b/drivers/clk/rockchip/clk_rv1108.c @@ -9,6 +9,7 @@ #include <clk-uclass.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <syscon.h> #include <asm/io.h> #include <asm/arch-rockchip/clock.h> diff --git a/drivers/clk/sifive/fu540-prci.c b/drivers/clk/sifive/fu540-prci.c index ce0769f2d1..8847178001 100644 --- a/drivers/clk/sifive/fu540-prci.c +++ b/drivers/clk/sifive/fu540-prci.c @@ -35,6 +35,7 @@ #include <div64.h> #include <dm.h> #include <errno.h> +#include <linux/err.h> #include <linux/math64.h> #include <linux/clk/analogbits-wrpll-cln28hpc.h> diff --git a/drivers/clk/tegra/tegra-car-clk.c b/drivers/clk/tegra/tegra-car-clk.c index 98be7602b3..6083f14e75 100644 --- a/drivers/clk/tegra/tegra-car-clk.c +++ b/drivers/clk/tegra/tegra-car-clk.c @@ -6,6 +6,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <malloc.h> #include <asm/arch/clock.h> #include <asm/arch-tegra/clk_rst.h> @@ -80,7 +81,7 @@ static int tegra_car_clk_disable(struct clk *clk) static struct clk_ops tegra_car_clk_ops = { .request = tegra_car_clk_request, - .free = tegra_car_clk_free, + .rfree = tegra_car_clk_free, .get_rate = tegra_car_clk_get_rate, .set_rate = tegra_car_clk_set_rate, .enable = tegra_car_clk_enable, diff --git a/drivers/clk/uniphier/clk-uniphier-core.c b/drivers/clk/uniphier/clk-uniphier-core.c index 1da63819e7..9f24050992 100644 --- a/drivers/clk/uniphier/clk-uniphier-core.c +++ b/drivers/clk/uniphier/clk-uniphier-core.c @@ -7,6 +7,7 @@ #include <common.h> #include <clk-uclass.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <linux/io.h> #include <linux/sizes.h> diff --git a/drivers/core/device.c b/drivers/core/device.c index 9f39218423..89ea820d48 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -591,7 +591,8 @@ static int device_find_by_ofnode(ofnode node, struct udevice **devp) } #endif -int device_get_child(struct udevice *parent, int index, struct udevice **devp) +int device_get_child(const struct udevice *parent, int index, + struct udevice **devp) { struct udevice *dev; @@ -603,7 +604,7 @@ int device_get_child(struct udevice *parent, int index, struct udevice **devp) return -ENODEV; } -int device_get_child_count(struct udevice *parent) +int device_get_child_count(const struct udevice *parent) { struct udevice *dev; int count = 0; @@ -614,7 +615,7 @@ int device_get_child_count(struct udevice *parent) return count; } -int device_find_child_by_seq(struct udevice *parent, int seq_or_req_seq, +int device_find_child_by_seq(const struct udevice *parent, int seq_or_req_seq, bool find_req_seq, struct udevice **devp) { struct udevice *dev; @@ -634,7 +635,7 @@ int device_find_child_by_seq(struct udevice *parent, int seq_or_req_seq, return -ENODEV; } -int device_get_child_by_seq(struct udevice *parent, int seq, +int device_get_child_by_seq(const struct udevice *parent, int seq, struct udevice **devp) { struct udevice *dev; @@ -652,7 +653,7 @@ int device_get_child_by_seq(struct udevice *parent, int seq, return device_get_device_tail(dev, ret, devp); } -int device_find_child_by_of_offset(struct udevice *parent, int of_offset, +int device_find_child_by_of_offset(const struct udevice *parent, int of_offset, struct udevice **devp) { struct udevice *dev; @@ -669,7 +670,7 @@ int device_find_child_by_of_offset(struct udevice *parent, int of_offset, return -ENODEV; } -int device_get_child_by_of_offset(struct udevice *parent, int node, +int device_get_child_by_of_offset(const struct udevice *parent, int node, struct udevice **devp) { struct udevice *dev; @@ -712,7 +713,7 @@ int device_get_global_by_ofnode(ofnode ofnode, struct udevice **devp) return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); } -int device_find_first_child(struct udevice *parent, struct udevice **devp) +int device_find_first_child(const struct udevice *parent, struct udevice **devp) { if (list_empty(&parent->child_head)) { *devp = NULL; @@ -739,7 +740,7 @@ int device_find_next_child(struct udevice **devp) return 0; } -int device_find_first_inactive_child(struct udevice *parent, +int device_find_first_inactive_child(const struct udevice *parent, enum uclass_id uclass_id, struct udevice **devp) { @@ -757,7 +758,7 @@ int device_find_first_inactive_child(struct udevice *parent, return -ENODEV; } -int device_find_first_child_by_uclass(struct udevice *parent, +int device_find_first_child_by_uclass(const struct udevice *parent, enum uclass_id uclass_id, struct udevice **devp) { @@ -774,7 +775,7 @@ int device_find_first_child_by_uclass(struct udevice *parent, return -ENODEV; } -int device_find_child_by_name(struct udevice *parent, const char *name, +int device_find_child_by_name(const struct udevice *parent, const char *name, struct udevice **devp) { struct udevice *dev; @@ -791,6 +792,64 @@ int device_find_child_by_name(struct udevice *parent, const char *name, return -ENODEV; } +int device_first_child_err(struct udevice *parent, struct udevice **devp) +{ + struct udevice *dev; + + device_find_first_child(parent, &dev); + if (!dev) + return -ENODEV; + + return device_get_device_tail(dev, 0, devp); +} + +int device_next_child_err(struct udevice **devp) +{ + struct udevice *dev = *devp; + + device_find_next_child(&dev); + if (!dev) + return -ENODEV; + + return device_get_device_tail(dev, 0, devp); +} + +int device_first_child_ofdata_err(struct udevice *parent, struct udevice **devp) +{ + struct udevice *dev; + int ret; + + device_find_first_child(parent, &dev); + if (!dev) + return -ENODEV; + + ret = device_ofdata_to_platdata(dev); + if (ret) + return ret; + + *devp = dev; + + return 0; +} + +int device_next_child_ofdata_err(struct udevice **devp) +{ + struct udevice *dev = *devp; + int ret; + + device_find_next_child(&dev); + if (!dev) + return -ENODEV; + + ret = device_ofdata_to_platdata(dev); + if (ret) + return ret; + + *devp = dev; + + return 0; +} + struct udevice *dev_get_parent(const struct udevice *child) { return child->parent; @@ -827,7 +886,7 @@ bool device_has_children(const struct udevice *dev) return !list_empty(&dev->child_head); } -bool device_has_active_children(struct udevice *dev) +bool device_has_active_children(const struct udevice *dev) { struct udevice *child; @@ -841,7 +900,7 @@ bool device_has_active_children(struct udevice *dev) return false; } -bool device_is_last_sibling(struct udevice *dev) +bool device_is_last_sibling(const struct udevice *dev) { struct udevice *parent = dev->parent; @@ -867,7 +926,7 @@ int device_set_name(struct udevice *dev, const char *name) } #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) -bool device_is_compatible(struct udevice *dev, const char *compat) +bool device_is_compatible(const struct udevice *dev, const char *compat) { return ofnode_device_is_compatible(dev_ofnode(dev), compat); } diff --git a/drivers/core/devres.c b/drivers/core/devres.c index 237b42653c..457e1309c5 100644 --- a/drivers/core/devres.c +++ b/drivers/core/devres.c @@ -10,10 +10,12 @@ #define LOG_CATEGORY LOGC_DEVRES #include <common.h> +#include <malloc.h> #include <linux/compat.h> #include <linux/kernel.h> #include <linux/list.h> #include <dm/device.h> +#include <dm/devres.h> #include <dm/root.h> #include <dm/util.h> diff --git a/drivers/core/dump.c b/drivers/core/dump.c index 4704049aee..e73ebeabcc 100644 --- a/drivers/core/dump.c +++ b/drivers/core/dump.c @@ -96,3 +96,22 @@ void dm_dump_uclass(void) puts("\n"); } } + +void dm_dump_drivers(void) +{ + struct driver *d = ll_entry_start(struct driver, driver); + const int n_ents = ll_entry_count(struct driver, driver); + struct driver *entry; + const struct udevice_id *match; + + puts("Driver Compatible\n"); + puts("--------------------------------\n"); + for (entry = d; entry < d + n_ents; entry++) { + for (match = entry->of_match; match->compatible; match++) + printf("%-20.20s %s\n", + match == entry->of_match ? entry->name : "", + match->compatible); + if (match == entry->of_match) + printf("%-20.20s\n", entry->name); + } +} diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c index 575798fae9..33811e62f7 100644 --- a/drivers/core/fdtaddr.c +++ b/drivers/core/fdtaddr.c @@ -16,7 +16,7 @@ DECLARE_GLOBAL_DATA_PTR; -fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index) +fdt_addr_t devfdt_get_addr_index(const struct udevice *dev, int index) { #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) fdt_addr_t addr; @@ -91,8 +91,8 @@ fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index) #endif } -fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index, - fdt_size_t *size) +fdt_addr_t devfdt_get_addr_size_index(const struct udevice *dev, int index, + fdt_size_t *size) { #if CONFIG_IS_ENABLED(OF_CONTROL) /* @@ -113,7 +113,7 @@ fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index, #endif } -fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name) +fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name) { #if CONFIG_IS_ENABLED(OF_CONTROL) int index; @@ -129,8 +129,8 @@ fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name) #endif } -fdt_addr_t devfdt_get_addr_size_name(struct udevice *dev, const char *name, - fdt_size_t *size) +fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev, + const char *name, fdt_size_t *size) { #if CONFIG_IS_ENABLED(OF_CONTROL) int index; @@ -146,17 +146,17 @@ fdt_addr_t devfdt_get_addr_size_name(struct udevice *dev, const char *name, #endif } -fdt_addr_t devfdt_get_addr(struct udevice *dev) +fdt_addr_t devfdt_get_addr(const struct udevice *dev) { return devfdt_get_addr_index(dev, 0); } -void *devfdt_get_addr_ptr(struct udevice *dev) +void *devfdt_get_addr_ptr(const struct udevice *dev) { return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0); } -void *devfdt_remap_addr_index(struct udevice *dev, int index) +void *devfdt_remap_addr_index(const struct udevice *dev, int index) { fdt_addr_t addr = devfdt_get_addr_index(dev, index); @@ -166,7 +166,7 @@ void *devfdt_remap_addr_index(struct udevice *dev, int index) return map_physmem(addr, 0, MAP_NOCACHE); } -void *devfdt_remap_addr_name(struct udevice *dev, const char *name) +void *devfdt_remap_addr_name(const struct udevice *dev, const char *name) { fdt_addr_t addr = devfdt_get_addr_name(dev, name); @@ -176,12 +176,12 @@ void *devfdt_remap_addr_name(struct udevice *dev, const char *name) return map_physmem(addr, 0, MAP_NOCACHE); } -void *devfdt_remap_addr(struct udevice *dev) +void *devfdt_remap_addr(const struct udevice *dev) { return devfdt_remap_addr_index(dev, 0); } -void *devfdt_map_physmem(struct udevice *dev, unsigned long size) +void *devfdt_map_physmem(const struct udevice *dev, unsigned long size) { fdt_addr_t addr = devfdt_get_addr(dev); @@ -191,7 +191,7 @@ void *devfdt_map_physmem(struct udevice *dev, unsigned long size) return map_physmem(addr, size, MAP_NOCACHE); } -fdt_addr_t devfdt_get_addr_pci(struct udevice *dev) +fdt_addr_t devfdt_get_addr_pci(const struct udevice *dev) { ulong addr; diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c index 945b81448c..acd745c121 100644 --- a/drivers/core/of_access.c +++ b/drivers/core/of_access.c @@ -20,6 +20,7 @@ */ #include <common.h> +#include <malloc.h> #include <linux/libfdt.h> #include <dm/of_access.h> #include <linux/ctype.h> diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 8f0eab2ca6..96a5dd20bd 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -8,6 +8,7 @@ #include <dm.h> #include <fdtdec.h> #include <fdt_support.h> +#include <malloc.h> #include <linux/libfdt.h> #include <dm/of_access.h> #include <dm/of_addr.h> @@ -101,30 +102,47 @@ bool ofnode_read_bool(ofnode node, const char *propname) return prop ? true : false; } -const char *ofnode_read_string(ofnode node, const char *propname) +const void *ofnode_read_prop(ofnode node, const char *propname, int *sizep) { - const char *str = NULL; - int len = -1; + const char *val = NULL; + int len; assert(ofnode_valid(node)); debug("%s: %s: ", __func__, propname); if (ofnode_is_np(node)) { struct property *prop = of_find_property( - ofnode_to_np(node), propname, NULL); + ofnode_to_np(node), propname, &len); if (prop) { - str = prop->value; + val = prop->value; len = prop->length; } } else { - str = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), + val = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname, &len); } - if (!str) { + if (!val) { debug("<not found>\n"); + if (sizep) + *sizep = -FDT_ERR_NOTFOUND; return NULL; } + if (sizep) + *sizep = len; + + return val; +} + +const char *ofnode_read_string(ofnode node, const char *propname) +{ + const char *str; + int len; + + str = ofnode_read_prop(node, propname, &len); + if (!str) + return NULL; + if (strnlen(str, len) >= len) { debug("<invalid>\n"); return NULL; @@ -134,6 +152,16 @@ const char *ofnode_read_string(ofnode node, const char *propname) return str; } +int ofnode_read_size(ofnode node, const char *propname) +{ + int len; + + if (!ofnode_read_prop(node, propname, &len)) + return -EINVAL; + + return len; +} + ofnode ofnode_find_subnode(ofnode node, const char *subnode_name) { ofnode subnode; @@ -236,25 +264,6 @@ ofnode ofnode_get_by_phandle(uint phandle) return node; } -int ofnode_read_size(ofnode node, const char *propname) -{ - int len; - - if (ofnode_is_np(node)) { - struct property *prop = of_find_property( - ofnode_to_np(node), propname, NULL); - - if (prop) - return prop->length; - } else { - if (fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname, - &len)) - return len; - } - - return -EINVAL; -} - fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) { int na, ns; @@ -419,20 +428,25 @@ ofnode ofnode_path(const char *path) return offset_to_ofnode(fdt_path_offset(gd->fdt_blob, path)); } -const char *ofnode_get_chosen_prop(const char *name) +const void *ofnode_read_chosen_prop(const char *propname, int *sizep) { ofnode chosen_node; chosen_node = ofnode_path("/chosen"); - return ofnode_read_string(chosen_node, name); + return ofnode_read_prop(chosen_node, propname, sizep); +} + +const char *ofnode_read_chosen_string(const char *propname) +{ + return ofnode_read_chosen_prop(propname, NULL); } ofnode ofnode_get_chosen_node(const char *name) { const char *prop; - prop = ofnode_get_chosen_prop(name); + prop = ofnode_read_chosen_prop(name, NULL); if (!prop) return ofnode_null(); diff --git a/drivers/core/read.c b/drivers/core/read.c index 9602e52d1b..1f999b1b31 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -11,27 +11,29 @@ #include <mapmem.h> #include <dm/of_access.h> -int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp) +int dev_read_u32(const struct udevice *dev, const char *propname, u32 *outp) { return ofnode_read_u32(dev_ofnode(dev), propname, outp); } -int dev_read_u32_default(struct udevice *dev, const char *propname, int def) +int dev_read_u32_default(const struct udevice *dev, const char *propname, + int def) { return ofnode_read_u32_default(dev_ofnode(dev), propname, def); } -int dev_read_s32(struct udevice *dev, const char *propname, s32 *outp) +int dev_read_s32(const struct udevice *dev, const char *propname, s32 *outp) { return ofnode_read_u32(dev_ofnode(dev), propname, (u32 *)outp); } -int dev_read_s32_default(struct udevice *dev, const char *propname, int def) +int dev_read_s32_default(const struct udevice *dev, const char *propname, + int def) { return ofnode_read_u32_default(dev_ofnode(dev), propname, def); } -int dev_read_u32u(struct udevice *dev, const char *propname, uint *outp) +int dev_read_u32u(const struct udevice *dev, const char *propname, uint *outp) { u32 val; int ret; @@ -44,32 +46,33 @@ int dev_read_u32u(struct udevice *dev, const char *propname, uint *outp) return 0; } -int dev_read_u64(struct udevice *dev, const char *propname, u64 *outp) +int dev_read_u64(const struct udevice *dev, const char *propname, u64 *outp) { return ofnode_read_u64(dev_ofnode(dev), propname, outp); } -u64 dev_read_u64_default(struct udevice *dev, const char *propname, u64 def) +u64 dev_read_u64_default(const struct udevice *dev, const char *propname, + u64 def) { return ofnode_read_u64_default(dev_ofnode(dev), propname, def); } -const char *dev_read_string(struct udevice *dev, const char *propname) +const char *dev_read_string(const struct udevice *dev, const char *propname) { return ofnode_read_string(dev_ofnode(dev), propname); } -bool dev_read_bool(struct udevice *dev, const char *propname) +bool dev_read_bool(const struct udevice *dev, const char *propname) { return ofnode_read_bool(dev_ofnode(dev), propname); } -ofnode dev_read_subnode(struct udevice *dev, const char *subnode_name) +ofnode dev_read_subnode(const struct udevice *dev, const char *subnode_name) { return ofnode_find_subnode(dev_ofnode(dev), subnode_name); } -ofnode dev_read_first_subnode(struct udevice *dev) +ofnode dev_read_first_subnode(const struct udevice *dev) { return ofnode_first_subnode(dev_ofnode(dev)); } @@ -79,12 +82,12 @@ ofnode dev_read_next_subnode(ofnode node) return ofnode_next_subnode(node); } -int dev_read_size(struct udevice *dev, const char *propname) +int dev_read_size(const struct udevice *dev, const char *propname) { return ofnode_read_size(dev_ofnode(dev), propname); } -fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) +fdt_addr_t dev_read_addr_index(const struct udevice *dev, int index) { if (ofnode_is_np(dev_ofnode(dev))) return ofnode_get_addr_index(dev_ofnode(dev), index); @@ -92,7 +95,7 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) return devfdt_get_addr_index(dev, index); } -fdt_addr_t dev_read_addr_size_index(struct udevice *dev, int index, +fdt_addr_t dev_read_addr_size_index(const struct udevice *dev, int index, fdt_size_t *size) { if (ofnode_is_np(dev_ofnode(dev))) @@ -101,7 +104,7 @@ fdt_addr_t dev_read_addr_size_index(struct udevice *dev, int index, return devfdt_get_addr_size_index(dev, index, size); } -void *dev_remap_addr_index(struct udevice *dev, int index) +void *dev_remap_addr_index(const struct udevice *dev, int index) { fdt_addr_t addr = dev_read_addr_index(dev, index); @@ -111,7 +114,7 @@ void *dev_remap_addr_index(struct udevice *dev, int index) return map_physmem(addr, 0, MAP_NOCACHE); } -fdt_addr_t dev_read_addr_name(struct udevice *dev, const char *name) +fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name) { int index = dev_read_stringlist_search(dev, "reg-names", name); @@ -121,7 +124,7 @@ fdt_addr_t dev_read_addr_name(struct udevice *dev, const char *name) return dev_read_addr_index(dev, index); } -fdt_addr_t dev_read_addr_size_name(struct udevice *dev, const char *name, +fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name, fdt_size_t *size) { int index = dev_read_stringlist_search(dev, "reg-names", name); @@ -132,7 +135,7 @@ fdt_addr_t dev_read_addr_size_name(struct udevice *dev, const char *name, return dev_read_addr_size_index(dev, index, size); } -void *dev_remap_addr_name(struct udevice *dev, const char *name) +void *dev_remap_addr_name(const struct udevice *dev, const char *name) { fdt_addr_t addr = dev_read_addr_name(dev, name); @@ -142,52 +145,52 @@ void *dev_remap_addr_name(struct udevice *dev, const char *name) return map_physmem(addr, 0, MAP_NOCACHE); } -fdt_addr_t dev_read_addr(struct udevice *dev) +fdt_addr_t dev_read_addr(const struct udevice *dev) { return dev_read_addr_index(dev, 0); } -void *dev_read_addr_ptr(struct udevice *dev) +void *dev_read_addr_ptr(const struct udevice *dev) { fdt_addr_t addr = dev_read_addr(dev); return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0); } -void *dev_remap_addr(struct udevice *dev) +void *dev_remap_addr(const struct udevice *dev) { return dev_remap_addr_index(dev, 0); } -fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *property, +fdt_addr_t dev_read_addr_size(const struct udevice *dev, const char *property, fdt_size_t *sizep) { return ofnode_get_addr_size(dev_ofnode(dev), property, sizep); } -const char *dev_read_name(struct udevice *dev) +const char *dev_read_name(const struct udevice *dev) { return ofnode_get_name(dev_ofnode(dev)); } -int dev_read_stringlist_search(struct udevice *dev, const char *property, +int dev_read_stringlist_search(const struct udevice *dev, const char *property, const char *string) { return ofnode_stringlist_search(dev_ofnode(dev), property, string); } -int dev_read_string_index(struct udevice *dev, const char *propname, int index, - const char **outp) +int dev_read_string_index(const struct udevice *dev, const char *propname, + int index, const char **outp) { return ofnode_read_string_index(dev_ofnode(dev), propname, index, outp); } -int dev_read_string_count(struct udevice *dev, const char *propname) +int dev_read_string_count(const struct udevice *dev, const char *propname) { return ofnode_read_string_count(dev_ofnode(dev), propname); } -int dev_read_phandle_with_args(struct udevice *dev, const char *list_name, +int dev_read_phandle_with_args(const struct udevice *dev, const char *list_name, const char *cells_name, int cell_count, int index, struct ofnode_phandle_args *out_args) { @@ -196,34 +199,34 @@ int dev_read_phandle_with_args(struct udevice *dev, const char *list_name, out_args); } -int dev_count_phandle_with_args(struct udevice *dev, const char *list_name, - const char *cells_name) +int dev_count_phandle_with_args(const struct udevice *dev, + const char *list_name, const char *cells_name) { return ofnode_count_phandle_with_args(dev_ofnode(dev), list_name, cells_name); } -int dev_read_addr_cells(struct udevice *dev) +int dev_read_addr_cells(const struct udevice *dev) { return ofnode_read_addr_cells(dev_ofnode(dev)); } -int dev_read_size_cells(struct udevice *dev) +int dev_read_size_cells(const struct udevice *dev) { return ofnode_read_size_cells(dev_ofnode(dev)); } -int dev_read_simple_addr_cells(struct udevice *dev) +int dev_read_simple_addr_cells(const struct udevice *dev) { return ofnode_read_simple_addr_cells(dev_ofnode(dev)); } -int dev_read_simple_size_cells(struct udevice *dev) +int dev_read_simple_size_cells(const struct udevice *dev) { return ofnode_read_simple_size_cells(dev_ofnode(dev)); } -int dev_read_phandle(struct udevice *dev) +int dev_read_phandle(const struct udevice *dev) { ofnode node = dev_ofnode(dev); @@ -233,12 +236,13 @@ int dev_read_phandle(struct udevice *dev) return fdt_get_phandle(gd->fdt_blob, ofnode_to_offset(node)); } -const void *dev_read_prop(struct udevice *dev, const char *propname, int *lenp) +const void *dev_read_prop(const struct udevice *dev, const char *propname, + int *lenp) { return ofnode_get_property(dev_ofnode(dev), propname, lenp); } -int dev_read_alias_seq(struct udevice *dev, int *devnump) +int dev_read_alias_seq(const struct udevice *dev, int *devnump) { ofnode node = dev_ofnode(dev); const char *uc_name = dev->uclass->uc_drv->name; @@ -256,19 +260,19 @@ int dev_read_alias_seq(struct udevice *dev, int *devnump) return ret; } -int dev_read_u32_array(struct udevice *dev, const char *propname, +int dev_read_u32_array(const struct udevice *dev, const char *propname, u32 *out_values, size_t sz) { return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz); } -const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, - size_t sz) +const uint8_t *dev_read_u8_array_ptr(const struct udevice *dev, + const char *propname, size_t sz) { return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz); } -int dev_read_enabled(struct udevice *dev) +int dev_read_enabled(const struct udevice *dev) { ofnode node = dev_ofnode(dev); @@ -279,23 +283,24 @@ int dev_read_enabled(struct udevice *dev) ofnode_to_offset(node)); } -int dev_read_resource(struct udevice *dev, uint index, struct resource *res) +int dev_read_resource(const struct udevice *dev, uint index, + struct resource *res) { return ofnode_read_resource(dev_ofnode(dev), index, res); } -int dev_read_resource_byname(struct udevice *dev, const char *name, +int dev_read_resource_byname(const struct udevice *dev, const char *name, struct resource *res) { return ofnode_read_resource_byname(dev_ofnode(dev), name, res); } -u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr) +u64 dev_translate_address(const struct udevice *dev, const fdt32_t *in_addr) { return ofnode_translate_address(dev_ofnode(dev), in_addr); } -u64 dev_translate_dma_address(struct udevice *dev, const fdt32_t *in_addr) +u64 dev_translate_dma_address(const struct udevice *dev, const fdt32_t *in_addr) { return ofnode_translate_dma_address(dev_ofnode(dev), in_addr); } @@ -308,7 +313,7 @@ int dev_read_alias_highest_id(const char *stem) return fdtdec_get_alias_highest_id(gd->fdt_blob, stem); } -fdt_addr_t dev_read_addr_pci(struct udevice *dev) +fdt_addr_t dev_read_addr_pci(const struct udevice *dev) { ulong addr; diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c index b9ae82174e..15f0e42a85 100644 --- a/drivers/core/syscon-uclass.c +++ b/drivers/core/syscon-uclass.c @@ -10,6 +10,7 @@ #include <errno.h> #include <regmap.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dm/root.h> #include <linux/err.h> diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 61192d8a9f..58b19a4210 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -271,9 +271,6 @@ int uclass_find_device_by_name(enum uclass_id id, const char *name, return -ENODEV; } -#if !CONFIG_IS_ENABLED(OF_CONTROL) || \ - CONFIG_IS_ENABLED(OF_PLATDATA) || \ - CONFIG_IS_ENABLED(OF_PRIOR_STAGE) int uclass_find_next_free_req_seq(enum uclass_id id) { struct uclass *uc; @@ -295,7 +292,6 @@ int uclass_find_next_free_req_seq(enum uclass_id id) return max + 1; } -#endif int uclass_find_device_by_seq(enum uclass_id id, int seq_or_req_seq, bool find_req_seq, struct udevice **devp) diff --git a/drivers/ddr/altera/sdram_gen5.c b/drivers/ddr/altera/sdram_gen5.c index 3ea5a7c0c0..314c7aea00 100644 --- a/drivers/ddr/altera/sdram_gen5.c +++ b/drivers/ddr/altera/sdram_gen5.c @@ -15,6 +15,7 @@ #include <asm/arch/sdram.h> #include <asm/arch/system_manager.h> #include <asm/io.h> +#include <dm/device_compat.h> #include "sequencer.h" diff --git a/drivers/ddr/altera/sdram_soc64.c b/drivers/ddr/altera/sdram_soc64.c index e0d04ccca2..1f7ead0c67 100644 --- a/drivers/ddr/altera/sdram_soc64.c +++ b/drivers/ddr/altera/sdram_soc64.c @@ -19,6 +19,7 @@ #include <asm/arch/system_manager.h> #include <asm/arch/reset_manager.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/sizes.h> #define PGTABLE_OFF 0x4000 diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c index 9528a7b4ee..36cd4e945b 100644 --- a/drivers/dfu/dfu_mtd.c +++ b/drivers/dfu/dfu_mtd.c @@ -11,6 +11,7 @@ #include <dfu.h> #include <mtd.h> #include <jffs2/load_kernel.h> +#include <linux/err.h> static bool mtd_is_aligned_with_block_size(struct mtd_info *mtd, u64 size) { diff --git a/drivers/dma/bcm6348-iudma.c b/drivers/dma/bcm6348-iudma.c index 96250eb5d2..d99460f2fb 100644 --- a/drivers/dma/bcm6348-iudma.c +++ b/drivers/dma/bcm6348-iudma.c @@ -20,6 +20,7 @@ #include <cpu_func.h> #include <dm.h> #include <dma-uclass.h> +#include <malloc.h> #include <memalign.h> #include <reset.h> #include <asm/io.h> diff --git a/drivers/dma/dma-uclass.c b/drivers/dma/dma-uclass.c index 5598bca21c..9d5a7fc796 100644 --- a/drivers/dma/dma-uclass.c +++ b/drivers/dma/dma-uclass.c @@ -12,6 +12,7 @@ #include <common.h> #include <cpu_func.h> #include <dm.h> +#include <malloc.h> #include <dm/read.h> #include <dma-uclass.h> #include <dt-structs.h> @@ -122,10 +123,10 @@ int dma_free(struct dma *dma) debug("%s(dma=%p)\n", __func__, dma); - if (!ops->free) + if (!ops->rfree) return 0; - return ops->free(dma); + return ops->rfree(dma); } int dma_enable(struct dma *dma) diff --git a/drivers/dma/sandbox-dma-test.c b/drivers/dma/sandbox-dma-test.c index 8fcef1863e..234a7d2134 100644 --- a/drivers/dma/sandbox-dma-test.c +++ b/drivers/dma/sandbox-dma-test.c @@ -9,6 +9,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/read.h> #include <dma-uclass.h> #include <dt-structs.h> @@ -88,7 +89,7 @@ static int sandbox_dma_request(struct dma *dma) return 0; } -static int sandbox_dma_free(struct dma *dma) +static int sandbox_dma_rfree(struct dma *dma) { struct sandbox_dma_dev *ud = dev_get_priv(dma->dev); struct sandbox_dma_chan *uc; @@ -229,7 +230,7 @@ static const struct dma_ops sandbox_dma_ops = { .transfer = sandbox_dma_transfer, .of_xlate = sandbox_dma_of_xlate, .request = sandbox_dma_request, - .free = sandbox_dma_free, + .rfree = sandbox_dma_rfree, .enable = sandbox_dma_enable, .disable = sandbox_dma_disable, .send = sandbox_dma_send, diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c index 95f6b5a93a..f274100f32 100644 --- a/drivers/dma/ti/k3-udma.c +++ b/drivers/dma/ti/k3-udma.c @@ -12,7 +12,8 @@ #include <malloc.h> #include <asm/dma-mapping.h> #include <dm.h> -#include <dm/device.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/read.h> #include <dm/of_access.h> #include <dma.h> @@ -20,6 +21,7 @@ #include <linux/delay.h> #include <dt-bindings/dma/k3-udma.h> #include <linux/bitmap.h> +#include <linux/err.h> #include <linux/soc/ti/k3-navss-ringacc.h> #include <linux/soc/ti/cppi5.h> #include <linux/soc/ti/ti-udma.h> @@ -1551,7 +1553,7 @@ static int udma_request(struct dma *dma) return 0; } -static int udma_free(struct dma *dma) +static int udma_rfree(struct dma *dma) { struct udma_dev *ud = dev_get_priv(dma->dev); struct udma_chan *uc; @@ -1846,7 +1848,7 @@ static const struct dma_ops udma_ops = { .transfer = udma_transfer, .of_xlate = udma_of_xlate, .request = udma_request, - .free = udma_free, + .rfree = udma_rfree, .enable = udma_enable, .disable = udma_disable, .send = udma_send, diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 62b1dc2006..99b2e5dfed 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -11,7 +11,10 @@ #include <dm.h> #include <errno.h> #include <mailbox.h> +#include <malloc.h> #include <dm/device.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/compat.h> #include <linux/err.h> #include <linux/soc/ti/k3-sec-proxy.h> diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c index 7e8bd7eae8..0917871d49 100644 --- a/drivers/fpga/fpga.c +++ b/drivers/fpga/fpga.c @@ -9,6 +9,7 @@ #include <xilinx.h> /* xilinx specific definitions */ #include <altera.h> /* altera specific definitions */ #include <lattice.h> +#include <dm/device_compat.h> /* Local definitions */ #ifndef CONFIG_MAX_FPGA_DEVICES diff --git a/drivers/gpio/74x164_gpio.c b/drivers/gpio/74x164_gpio.c index dcb1c1b369..64717a6780 100644 --- a/drivers/gpio/74x164_gpio.c +++ b/drivers/gpio/74x164_gpio.c @@ -15,6 +15,7 @@ #include <malloc.h> #include <asm/gpio.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <dt-bindings/gpio/gpio.h> #include <spi.h> diff --git a/drivers/gpio/adi_gpio2.c b/drivers/gpio/adi_gpio2.c index 1012f2d8eb..9d293b6994 100644 --- a/drivers/gpio/adi_gpio2.c +++ b/drivers/gpio/adi_gpio2.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <malloc.h> #include <linux/errno.h> #include <asm/gpio.h> diff --git a/drivers/gpio/at91_gpio.c b/drivers/gpio/at91_gpio.c index 5ea3e77b2d..3621cf2408 100644 --- a/drivers/gpio/at91_gpio.c +++ b/drivers/gpio/at91_gpio.c @@ -11,6 +11,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <asm/io.h> #include <linux/sizes.h> #include <asm/gpio.h> diff --git a/drivers/gpio/atmel_pio4.c b/drivers/gpio/atmel_pio4.c index 8e6f32de1f..a3f5e7a2e0 100644 --- a/drivers/gpio/atmel_pio4.c +++ b/drivers/gpio/atmel_pio4.c @@ -9,6 +9,7 @@ #include <clk.h> #include <dm.h> #include <fdtdec.h> +#include <malloc.h> #include <asm/arch/hardware.h> #include <asm/gpio.h> #include <mach/gpio.h> diff --git a/drivers/gpio/da8xx_gpio.c b/drivers/gpio/da8xx_gpio.c index ac88f0ca8d..0d0e9d2254 100644 --- a/drivers/gpio/da8xx_gpio.c +++ b/drivers/gpio/da8xx_gpio.c @@ -9,6 +9,7 @@ #include <common.h> #include <dm.h> #include <fdtdec.h> +#include <malloc.h> #include <asm/io.h> #include <asm/gpio.h> #include <dt-bindings/gpio/gpio.h> diff --git a/drivers/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c index 2eb1547b4f..e3439eebb5 100644 --- a/drivers/gpio/dwapb_gpio.c +++ b/drivers/gpio/dwapb_gpio.c @@ -12,6 +12,8 @@ #include <asm/io.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <dm/root.h> #include <errno.h> diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c index 594e0a470a..9dc4cd6042 100644 --- a/drivers/gpio/gpio-rcar.c +++ b/drivers/gpio/gpio-rcar.c @@ -6,6 +6,8 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> +#include <dm/device_compat.h> #include <dm/pinctrl.h> #include <errno.h> #include <asm/gpio.h> @@ -128,7 +130,7 @@ static int rcar_gpio_free(struct udevice *dev, unsigned offset) static const struct dm_gpio_ops rcar_gpio_ops = { .request = rcar_gpio_request, - .free = rcar_gpio_free, + .rfree = rcar_gpio_free, .direction_input = rcar_gpio_direction_input, .direction_output = rcar_gpio_direction_output, .get_value = rcar_gpio_get_value, diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index 90fbed455b..0a22441d38 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -364,8 +364,8 @@ int _dm_gpio_free(struct udevice *dev, uint offset) uc_priv = dev_get_uclass_priv(dev); if (!uc_priv->name[offset]) return -ENXIO; - if (gpio_get_ops(dev)->free) { - ret = gpio_get_ops(dev)->free(dev, offset); + if (gpio_get_ops(dev)->rfree) { + ret = gpio_get_ops(dev)->rfree(dev, offset); if (ret) return ret; } @@ -1043,8 +1043,8 @@ static int gpio_post_bind(struct udevice *dev) if (!reloc_done) { if (ops->request) ops->request += gd->reloc_off; - if (ops->free) - ops->free += gd->reloc_off; + if (ops->rfree) + ops->rfree += gd->reloc_off; if (ops->direction_input) ops->direction_input += gd->reloc_off; if (ops->direction_output) diff --git a/drivers/gpio/kona_gpio.c b/drivers/gpio/kona_gpio.c index 912a4cac59..29791882a3 100644 --- a/drivers/gpio/kona_gpio.c +++ b/drivers/gpio/kona_gpio.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <asm/arch/sysmap.h> diff --git a/drivers/gpio/mpc83xx_gpio.c b/drivers/gpio/mpc83xx_gpio.c index dcd78e7e88..276a3b350d 100644 --- a/drivers/gpio/mpc83xx_gpio.c +++ b/drivers/gpio/mpc83xx_gpio.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <malloc.h> #include <mpc83xx.h> #include <asm/gpio.h> #include <asm/io.h> diff --git a/drivers/gpio/mscc_sgpio.c b/drivers/gpio/mscc_sgpio.c index c899454ec4..c65ca81728 100644 --- a/drivers/gpio/mscc_sgpio.c +++ b/drivers/gpio/mscc_sgpio.c @@ -13,6 +13,8 @@ #include <asm/io.h> #include <errno.h> #include <clk.h> +#include <dm/device_compat.h> +#include <linux/err.h> #define MSCC_SGPIOS_PER_BANK 32 #define MSCC_SGPIO_BANK_DEPTH 4 diff --git a/drivers/gpio/mvgpio.c b/drivers/gpio/mvgpio.c index ea2f689d60..12e7197daf 100644 --- a/drivers/gpio/mvgpio.c +++ b/drivers/gpio/mvgpio.c @@ -9,6 +9,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <linux/errno.h> #include "mvgpio.h" diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c index 77778e9ce5..405e9ac135 100644 --- a/drivers/gpio/mxs_gpio.c +++ b/drivers/gpio/mxs_gpio.c @@ -7,6 +7,7 @@ */ #include <common.h> +#include <malloc.h> #include <linux/errno.h> #include <asm/io.h> #include <asm/arch/iomux.h> diff --git a/drivers/gpio/pca953x_gpio.c b/drivers/gpio/pca953x_gpio.c index 5c2944067b..d06b834a3b 100644 --- a/drivers/gpio/pca953x_gpio.c +++ b/drivers/gpio/pca953x_gpio.c @@ -26,6 +26,7 @@ #include <malloc.h> #include <asm/gpio.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <dt-bindings/gpio/gpio.h> #define PCA953X_INPUT 0 diff --git a/drivers/gpio/pca9698.c b/drivers/gpio/pca9698.c index ab0c4c1b97..11274c7810 100644 --- a/drivers/gpio/pca9698.c +++ b/drivers/gpio/pca9698.c @@ -10,6 +10,7 @@ #include <common.h> #include <i2c.h> +#include <malloc.h> #include <linux/errno.h> #include <pca9698.h> diff --git a/drivers/gpio/sh_pfc.c b/drivers/gpio/sh_pfc.c index ad8da9ef28..6320a6280d 100644 --- a/drivers/gpio/sh_pfc.c +++ b/drivers/gpio/sh_pfc.c @@ -10,6 +10,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/bitops.h> #include <asm/io.h> #include <sh_pfc.h> diff --git a/drivers/gpio/spear_gpio.c b/drivers/gpio/spear_gpio.c index 525aa3b9ac..4e4cd12545 100644 --- a/drivers/gpio/spear_gpio.c +++ b/drivers/gpio/spear_gpio.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/arch/hardware.h> #include <asm/gpio.h> #include <asm/io.h> diff --git a/drivers/gpio/stm32_gpio.c b/drivers/gpio/stm32_gpio.c index 302a434947..f55f834e7d 100644 --- a/drivers/gpio/stm32_gpio.c +++ b/drivers/gpio/stm32_gpio.c @@ -12,6 +12,7 @@ #include <asm/arch/stm32.h> #include <asm/gpio.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <linux/io.h> diff --git a/drivers/hwspinlock/hwspinlock-uclass.c b/drivers/hwspinlock/hwspinlock-uclass.c index 195f079707..61d226bcbb 100644 --- a/drivers/hwspinlock/hwspinlock-uclass.c +++ b/drivers/hwspinlock/hwspinlock-uclass.c @@ -8,6 +8,8 @@ #include <errno.h> #include <hwspinlock.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <linux/compat.h> static inline const struct hwspinlock_ops * hwspinlock_dev_ops(struct udevice *dev) diff --git a/drivers/hwspinlock/stm32_hwspinlock.c b/drivers/hwspinlock/stm32_hwspinlock.c index a32bde4906..74afb4aec2 100644 --- a/drivers/hwspinlock/stm32_hwspinlock.c +++ b/drivers/hwspinlock/stm32_hwspinlock.c @@ -7,6 +7,7 @@ #include <clk.h> #include <dm.h> #include <hwspinlock.h> +#include <malloc.h> #include <asm/io.h> #define STM32_MUTEX_COREID BIT(8) diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c index 35dc234160..c84d75ac92 100644 --- a/drivers/i2c/ast_i2c.c +++ b/drivers/i2c/ast_i2c.c @@ -13,6 +13,7 @@ #include <i2c.h> #include <asm/io.h> #include <asm/arch/scu_ast2500.h> +#include <linux/err.h> #include "ast_i2c.h" diff --git a/drivers/i2c/at91_i2c.c b/drivers/i2c/at91_i2c.c index 846b3d5320..c817ed6bf9 100644 --- a/drivers/i2c/at91_i2c.c +++ b/drivers/i2c/at91_i2c.c @@ -5,6 +5,7 @@ * (C) Copyright 2016 Songjun Wu <songjun.wu@atmel.com> */ +#include <malloc.h> #include <asm/io.h> #include <common.h> #include <clk.h> diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index c8c5d2c331..e1d5aeb19d 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -8,10 +8,13 @@ #include <clk.h> #include <dm.h> #include <i2c.h> +#include <malloc.h> #include <pci.h> #include <reset.h> #include <asm/io.h> #include "designware_i2c.h" +#include <dm/device_compat.h> +#include <linux/err.h> #ifdef CONFIG_SYS_I2C_DW_ENABLE_STATUS_UNSUPPORTED static int dw_i2c_enable(struct i2c_regs *i2c_base, bool enable) diff --git a/drivers/i2c/i2c-uniphier-f.c b/drivers/i2c/i2c-uniphier-f.c index 62acd28e1b..d8b4a683bc 100644 --- a/drivers/i2c/i2c-uniphier-f.c +++ b/drivers/i2c/i2c-uniphier-f.c @@ -5,6 +5,7 @@ * Author: Masahiro Yamada <yamada.masahiro@socionext.com> */ +#include <dm/device_compat.h> #include <linux/errno.h> #include <linux/io.h> #include <linux/iopoll.h> diff --git a/drivers/i2c/i2c-uniphier.c b/drivers/i2c/i2c-uniphier.c index 07a7e03033..f06523ab99 100644 --- a/drivers/i2c/i2c-uniphier.c +++ b/drivers/i2c/i2c-uniphier.c @@ -5,6 +5,7 @@ * Author: Masahiro Yamada <yamada.masahiro@socionext.com> */ +#include <dm/device_compat.h> #include <linux/delay.h> #include <linux/errno.h> #include <linux/io.h> diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index c9d3faa911..62e68046d6 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -13,6 +13,7 @@ #include <dm.h> #include <fdtdec.h> #include <i2c.h> +#include <dm/device_compat.h> #define LPI2C_FIFO_SIZE 4 #define LPI2C_NACK_TOUT_MS 1 diff --git a/drivers/i2c/meson_i2c.c b/drivers/i2c/meson_i2c.c index ee59bac123..bcf45160d8 100644 --- a/drivers/i2c/meson_i2c.c +++ b/drivers/i2c/meson_i2c.c @@ -7,6 +7,7 @@ #include <clk.h> #include <dm.h> #include <i2c.h> +#include <linux/err.h> #define I2C_TIMEOUT_MS 100 diff --git a/drivers/i2c/muxes/i2c-arb-gpio-challenge.c b/drivers/i2c/muxes/i2c-arb-gpio-challenge.c index 413aaa6ba3..5029c71adc 100644 --- a/drivers/i2c/muxes/i2c-arb-gpio-challenge.c +++ b/drivers/i2c/muxes/i2c-arb-gpio-challenge.c @@ -8,6 +8,7 @@ #include <dm.h> #include <errno.h> #include <i2c.h> +#include <malloc.h> #include <asm/gpio.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/i2c/muxes/i2c-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c index e8b124f4f5..0575bd8937 100644 --- a/drivers/i2c/muxes/i2c-mux-gpio.c +++ b/drivers/i2c/muxes/i2c-mux-gpio.c @@ -11,6 +11,8 @@ #include <asm-generic/gpio.h> #include <common.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/pinctrl.h> #include <fdtdec.h> #include <i2c.h> diff --git a/drivers/i2c/muxes/i2c-mux-uclass.c b/drivers/i2c/muxes/i2c-mux-uclass.c index 8b1149997a..9a3dd7ec4a 100644 --- a/drivers/i2c/muxes/i2c-mux-uclass.c +++ b/drivers/i2c/muxes/i2c-mux-uclass.c @@ -8,6 +8,7 @@ #include <dm.h> #include <errno.h> #include <i2c.h> +#include <malloc.h> #include <dm/lists.h> #include <dm/root.h> diff --git a/drivers/i2c/muxes/pca954x.c b/drivers/i2c/muxes/pca954x.c index bb2935f8ec..be90a7b24a 100644 --- a/drivers/i2c/muxes/pca954x.c +++ b/drivers/i2c/muxes/pca954x.c @@ -9,6 +9,7 @@ #include <dm.h> #include <errno.h> #include <i2c.h> +#include <malloc.h> #include <asm-generic/gpio.h> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c index 6b7ce985b3..a03c465c8f 100644 --- a/drivers/i2c/mxc_i2c.c +++ b/drivers/i2c/mxc_i2c.c @@ -16,6 +16,7 @@ #include <common.h> #include <asm/arch/clock.h> #include <asm/arch/imx-regs.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <asm/mach-imx/mxc_i2c.h> #include <asm/io.h> diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c index 05d0dc6012..b877602aab 100644 --- a/drivers/i2c/rcar_i2c.c +++ b/drivers/i2c/rcar_i2c.c @@ -17,6 +17,7 @@ #include <i2c.h> #include <asm/io.h> #include <wait_bit.h> +#include <dm/device_compat.h> #define RCAR_I2C_ICSCR 0x00 /* slave ctrl */ #define RCAR_I2C_ICMCR 0x04 /* master ctrl */ diff --git a/drivers/i2c/stm32f7_i2c.c b/drivers/i2c/stm32f7_i2c.c index 21dfa5023b..7d046c1a1e 100644 --- a/drivers/i2c/stm32f7_i2c.c +++ b/drivers/i2c/stm32f7_i2c.c @@ -7,6 +7,7 @@ #include <clk.h> #include <dm.h> #include <i2c.h> +#include <malloc.h> #include <reset.h> #include <dm/device.h> diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c index 142463ef44..66a0148254 100644 --- a/drivers/i2c/tegra_i2c.c +++ b/drivers/i2c/tegra_i2c.c @@ -18,6 +18,7 @@ #endif #include <asm/arch/gpio.h> #include <asm/arch-tegra/tegra_i2c.h> +#include <linux/err.h> enum i2c_type { TYPE_114, diff --git a/drivers/i2c/xilinx_xiic.c b/drivers/i2c/xilinx_xiic.c index 5ce0f869c7..149bd327bd 100644 --- a/drivers/i2c/xilinx_xiic.c +++ b/drivers/i2c/xilinx_xiic.c @@ -15,6 +15,7 @@ #include <i2c.h> #include <wait_bit.h> #include <asm/io.h> +#include <dm/device_compat.h> struct xilinx_xiic_priv { void __iomem *base; diff --git a/drivers/led/led_gpio.c b/drivers/led/led_gpio.c index 93f6b913c6..af6b8245c9 100644 --- a/drivers/led/led_gpio.c +++ b/drivers/led/led_gpio.c @@ -8,6 +8,7 @@ #include <dm.h> #include <errno.h> #include <led.h> +#include <malloc.h> #include <asm/gpio.h> #include <dm/lists.h> diff --git a/drivers/mailbox/k3-sec-proxy.c b/drivers/mailbox/k3-sec-proxy.c index b07b56cf97..a560209f03 100644 --- a/drivers/mailbox/k3-sec-proxy.c +++ b/drivers/mailbox/k3-sec-proxy.c @@ -7,7 +7,9 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/types.h> #include <linux/bitops.h> #include <linux/soc/ti/k3-sec-proxy.h> @@ -291,7 +293,7 @@ static int k3_sec_proxy_recv(struct mbox_chan *chan, void *data) struct mbox_ops k3_sec_proxy_mbox_ops = { .of_xlate = k3_sec_proxy_of_xlate, .request = k3_sec_proxy_request, - .free = k3_sec_proxy_free, + .rfree = k3_sec_proxy_free, .send = k3_sec_proxy_send, .recv = k3_sec_proxy_recv, }; diff --git a/drivers/mailbox/mailbox-uclass.c b/drivers/mailbox/mailbox-uclass.c index 5968c9b7eb..291f5c218e 100644 --- a/drivers/mailbox/mailbox-uclass.c +++ b/drivers/mailbox/mailbox-uclass.c @@ -7,6 +7,7 @@ #include <dm.h> #include <mailbox.h> #include <mailbox-uclass.h> +#include <malloc.h> #include <time.h> static inline struct mbox_ops *mbox_dev_ops(struct udevice *dev) @@ -105,8 +106,8 @@ int mbox_free(struct mbox_chan *chan) debug("%s(chan=%p)\n", __func__, chan); - if (ops->free) - return ops->free(chan); + if (ops->rfree) + return ops->rfree(chan); return 0; } diff --git a/drivers/mailbox/sandbox-mbox-test.c b/drivers/mailbox/sandbox-mbox-test.c index ba1bb1cf95..faca8fcc44 100644 --- a/drivers/mailbox/sandbox-mbox-test.c +++ b/drivers/mailbox/sandbox-mbox-test.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> #include <mailbox.h> +#include <malloc.h> #include <asm/io.h> struct sandbox_mbox_test { diff --git a/drivers/mailbox/sandbox-mbox.c b/drivers/mailbox/sandbox-mbox.c index bc917b3de4..25e23eb05b 100644 --- a/drivers/mailbox/sandbox-mbox.c +++ b/drivers/mailbox/sandbox-mbox.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> #include <mailbox-uclass.h> +#include <malloc.h> #include <asm/io.h> #include <asm/mbox.h> @@ -87,7 +88,7 @@ static const struct udevice_id sandbox_mbox_ids[] = { struct mbox_ops sandbox_mbox_mbox_ops = { .request = sandbox_mbox_request, - .free = sandbox_mbox_free, + .rfree = sandbox_mbox_free, .send = sandbox_mbox_send, .recv = sandbox_mbox_recv, }; diff --git a/drivers/mailbox/stm32-ipcc.c b/drivers/mailbox/stm32-ipcc.c index c3df9678a7..13e642ab70 100644 --- a/drivers/mailbox/stm32-ipcc.c +++ b/drivers/mailbox/stm32-ipcc.c @@ -7,7 +7,9 @@ #include <clk.h> #include <dm.h> #include <mailbox-uclass.h> +#include <malloc.h> #include <asm/io.h> +#include <dm/device_compat.h> /* * IPCC has one set of registers per CPU @@ -152,7 +154,7 @@ static const struct udevice_id stm32_ipcc_ids[] = { struct mbox_ops stm32_ipcc_mbox_ops = { .request = stm32_ipcc_request, - .free = stm32_ipcc_free, + .rfree = stm32_ipcc_free, .send = stm32_ipcc_send, .recv = stm32_ipcc_recv, }; diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c index 9bee886561..60f6a38321 100644 --- a/drivers/mailbox/tegra-hsp.c +++ b/drivers/mailbox/tegra-hsp.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <dm.h> #include <mailbox-uclass.h> @@ -175,7 +176,7 @@ static const struct udevice_id tegra_hsp_ids[] = { struct mbox_ops tegra_hsp_mbox_ops = { .of_xlate = tegra_hsp_of_xlate, .request = tegra_hsp_request, - .free = tegra_hsp_free, + .rfree = tegra_hsp_free, .send = tegra_hsp_send, .recv = tegra_hsp_recv, }; diff --git a/drivers/mailbox/zynqmp-ipi.c b/drivers/mailbox/zynqmp-ipi.c index c181a7b817..17b46545f5 100644 --- a/drivers/mailbox/zynqmp-ipi.c +++ b/drivers/mailbox/zynqmp-ipi.c @@ -9,6 +9,7 @@ #include <asm/io.h> #include <dm.h> #include <mailbox-uclass.h> +#include <dm/device_compat.h> #include <mach/sys_proto.h> #include <linux/ioport.h> #include <linux/io.h> diff --git a/drivers/misc/cros_ec_sandbox.c b/drivers/misc/cros_ec_sandbox.c index 4fcb2d96f5..9dd6a18b2b 100644 --- a/drivers/misc/cros_ec_sandbox.c +++ b/drivers/misc/cros_ec_sandbox.c @@ -11,10 +11,10 @@ #include <ec_commands.h> #include <errno.h> #include <hash.h> -#include <malloc.h> #include <os.h> #include <u-boot/sha256.h> #include <spi.h> +#include <asm/malloc.h> #include <asm/state.h> #include <asm/sdl.h> #include <linux/input.h> @@ -115,7 +115,7 @@ static int cros_ec_read_state(const void *blob, int node) prop = fdt_getprop(blob, node, "flash-data", &len); if (prop) { ec->flash_data_len = len; - ec->flash_data = os_malloc(len); + ec->flash_data = malloc(len); if (!ec->flash_data) return -ENOMEM; memcpy(ec->flash_data, prop, len); @@ -545,14 +545,14 @@ int cros_ec_probe(struct udevice *dev) ec->flash_data_len != ec->ec_config.flash.length) { printf("EC data length is %x, expected %x, discarding data\n", ec->flash_data_len, ec->ec_config.flash.length); - os_free(ec->flash_data); + free(ec->flash_data); ec->flash_data = NULL; } /* Otherwise allocate the memory */ if (!ec->flash_data) { ec->flash_data_len = ec->ec_config.flash.length; - ec->flash_data = os_malloc(ec->flash_data_len); + ec->flash_data = malloc(ec->flash_data_len); if (!ec->flash_data) return -ENOMEM; } diff --git a/drivers/misc/imx8/scu_api.c b/drivers/misc/imx8/scu_api.c index b34191753b..3ad21c1ea0 100644 --- a/drivers/misc/imx8/scu_api.c +++ b/drivers/misc/imx8/scu_api.c @@ -7,6 +7,7 @@ #include <common.h> #include <hang.h> +#include <malloc.h> #include <asm/io.h> #include <dm.h> #include <asm/arch/sci/sci.h> diff --git a/drivers/misc/k3_avs.c b/drivers/misc/k3_avs.c index c19c3c0646..47e42738e0 100644 --- a/drivers/misc/k3_avs.c +++ b/drivers/misc/k3_avs.c @@ -13,6 +13,7 @@ #include <asm/io.h> #include <i2c.h> #include <k3-avs.h> +#include <dm/device_compat.h> #include <power/regulator.h> #define AM6_VTM_DEVINFO(i) (priv->base + 0x100 + 0x20 * (i)) diff --git a/drivers/misc/microchip_flexcom.c b/drivers/misc/microchip_flexcom.c index 1bc19edfcb..4cff160d88 100644 --- a/drivers/misc/microchip_flexcom.c +++ b/drivers/misc/microchip_flexcom.c @@ -9,6 +9,7 @@ #include <errno.h> #include <misc.h> #include <asm/io.h> +#include <linux/err.h> struct microchip_flexcom_regs { u32 cr; diff --git a/drivers/misc/p2sb-uclass.c b/drivers/misc/p2sb-uclass.c index a198700b5f..9fe0aca342 100644 --- a/drivers/misc/p2sb-uclass.c +++ b/drivers/misc/p2sb-uclass.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <mapmem.h> #include <p2sb.h> #include <spl.h> diff --git a/drivers/misc/p2sb_emul.c b/drivers/misc/p2sb_emul.c index c3795c59c0..a6ee9a235e 100644 --- a/drivers/misc/p2sb_emul.c +++ b/drivers/misc/p2sb_emul.c @@ -48,8 +48,9 @@ struct p2sb_emul_priv { u8 regs[16]; }; -static int sandbox_p2sb_emul_read_config(struct udevice *emul, uint offset, - ulong *valuep, enum pci_size_t size) +static int sandbox_p2sb_emul_read_config(const struct udevice *emul, + uint offset, ulong *valuep, + enum pci_size_t size) { struct p2sb_emul_platdata *plat = dev_get_platdata(emul); diff --git a/drivers/misc/stm32_rcc.c b/drivers/misc/stm32_rcc.c index e7efcdeafa..980b84453e 100644 --- a/drivers/misc/stm32_rcc.c +++ b/drivers/misc/stm32_rcc.c @@ -9,6 +9,7 @@ #include <misc.h> #include <stm32_rcc.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> struct stm32_rcc_clk stm32_rcc_clk_f42x = { diff --git a/drivers/misc/swap_case.c b/drivers/misc/swap_case.c index 11189d16c8..97e2afa676 100644 --- a/drivers/misc/swap_case.c +++ b/drivers/misc/swap_case.c @@ -51,7 +51,7 @@ struct swap_case_priv { char mem_text[MEM_TEXT_SIZE]; }; -static int sandbox_swap_case_use_ea(struct udevice *dev) +static int sandbox_swap_case_use_ea(const struct udevice *dev) { return !!ofnode_get_property(dev->node, "use-ea", NULL); } @@ -82,7 +82,7 @@ static const u32 ea_regs[] = { PCI_CAP_EA_SIZE_HI, }; -static int sandbox_swap_case_read_ea(struct udevice *emul, uint offset, +static int sandbox_swap_case_read_ea(const struct udevice *emul, uint offset, ulong *valuep, enum pci_size_t size) { u32 reg; @@ -95,8 +95,9 @@ static int sandbox_swap_case_read_ea(struct udevice *emul, uint offset, return 0; } -static int sandbox_swap_case_read_config(struct udevice *emul, uint offset, - ulong *valuep, enum pci_size_t size) +static int sandbox_swap_case_read_config(const struct udevice *emul, + uint offset, ulong *valuep, + enum pci_size_t size) { struct swap_case_platdata *plat = dev_get_platdata(emul); diff --git a/drivers/misc/tegra186_bpmp.c b/drivers/misc/tegra186_bpmp.c index 89e27dd526..ce2b925173 100644 --- a/drivers/misc/tegra186_bpmp.c +++ b/drivers/misc/tegra186_bpmp.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <time.h> #include <dm/lists.h> #include <dm/root.h> @@ -12,6 +13,7 @@ #include <misc.h> #include <asm/arch-tegra/bpmp_abi.h> #include <asm/arch-tegra/ivc.h> +#include <linux/err.h> #define BPMP_IVC_FRAME_COUNT 1 #define BPMP_IVC_FRAME_SIZE 128 diff --git a/drivers/misc/vexpress_config.c b/drivers/misc/vexpress_config.c index 9f5baa5288..53d7e1d154 100644 --- a/drivers/misc/vexpress_config.c +++ b/drivers/misc/vexpress_config.c @@ -6,6 +6,7 @@ */ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/read.h> #include <asm/io.h> #include <linux/delay.h> diff --git a/drivers/mmc/am654_sdhci.c b/drivers/mmc/am654_sdhci.c index 41a90834ff..aad9d8b85b 100644 --- a/drivers/mmc/am654_sdhci.c +++ b/drivers/mmc/am654_sdhci.c @@ -12,6 +12,8 @@ #include <power-domain.h> #include <regmap.h> #include <sdhci.h> +#include <dm/device_compat.h> +#include <linux/err.h> /* CTL_CFG Registers */ #define CTL_CFG_2 0x14 diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index ea8eb0d509..d396afc14c 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -16,6 +16,7 @@ #include <errno.h> #include <malloc.h> #include <mmc.h> +#include <dm/device_compat.h> #include <asm/io.h> #include <asm-generic/gpio.h> diff --git a/drivers/mmc/aspeed_sdhci.c b/drivers/mmc/aspeed_sdhci.c index 1321ec37e1..8929e603f3 100644 --- a/drivers/mmc/aspeed_sdhci.c +++ b/drivers/mmc/aspeed_sdhci.c @@ -9,6 +9,7 @@ #include <dm.h> #include <malloc.h> #include <sdhci.h> +#include <linux/err.h> struct aspeed_sdhci_plat { struct mmc_config cfg; diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c index 7f70acaf39..8cebf99c58 100644 --- a/drivers/mmc/bcm2835_sdhost.c +++ b/drivers/mmc/bcm2835_sdhost.c @@ -36,6 +36,7 @@ #include <asm/arch/msg.h> #include <asm/arch/mbox.h> #include <asm/unaligned.h> +#include <dm/device_compat.h> #include <linux/compat.h> #include <linux/io.h> #include <linux/iopoll.h> diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 112f115015..ab40019ccb 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -22,6 +22,7 @@ #include <fdt_support.h> #include <asm/io.h> #include <dm.h> +#include <dm/device_compat.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/mmc/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c index 462ad2878a..4900498e9b 100644 --- a/drivers/mmc/fsl_esdhc_imx.c +++ b/drivers/mmc/fsl_esdhc_imx.c @@ -19,6 +19,8 @@ #include <hwconfig.h> #include <mmc.h> #include <part.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <power/regulator.h> #include <malloc.h> #include <fsl_esdhc_imx.h> diff --git a/drivers/mmc/jz_mmc.c b/drivers/mmc/jz_mmc.c index cb2a7c3eb5..8d4f886cb4 100644 --- a/drivers/mmc/jz_mmc.c +++ b/drivers/mmc/jz_mmc.c @@ -12,6 +12,7 @@ #include <asm/io.h> #include <asm/unaligned.h> #include <errno.h> +#include <dm/device_compat.h> #include <mach/jz4780.h> #include <wait_bit.h> diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index c7a832ca90..0b90a97650 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -8,7 +8,9 @@ #include <mmc.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> +#include <linux/compat.h> #include "mmc_private.h" int dm_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c index cae42ec4ac..da3ae2ec35 100644 --- a/drivers/mmc/msm_sdhci.c +++ b/drivers/mmc/msm_sdhci.c @@ -10,6 +10,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <sdhci.h> #include <wait_bit.h> #include <asm/io.h> diff --git a/drivers/mmc/mtk-sd.c b/drivers/mmc/mtk-sd.c index d4870818a8..bd1fb09d1c 100644 --- a/drivers/mmc/mtk-sd.c +++ b/drivers/mmc/mtk-sd.c @@ -15,6 +15,7 @@ #include <mapmem.h> #include <stdbool.h> #include <asm/gpio.h> +#include <dm/device_compat.h> #include <dm/pinctrl.h> #include <linux/bitops.h> #include <linux/io.h> diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c index 5d0cfb2ebd..5334723a9f 100644 --- a/drivers/mmc/omap_hsmmc.c +++ b/drivers/mmc/omap_hsmmc.c @@ -47,6 +47,8 @@ #include <asm/arch/mux.h> #endif #include <dm.h> +#include <dm/devres.h> +#include <linux/err.h> #include <power/regulator.h> #include <thermal.h> diff --git a/drivers/mmc/renesas-sdhi.c b/drivers/mmc/renesas-sdhi.c index e01ac310e9..c3b13136f8 100644 --- a/drivers/mmc/renesas-sdhi.c +++ b/drivers/mmc/renesas-sdhi.c @@ -6,8 +6,10 @@ #include <common.h> #include <clk.h> #include <fdtdec.h> +#include <malloc.h> #include <mmc.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/compat.h> #include <linux/dma-direction.h> #include <linux/io.h> diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c index dd3d5574db..b440996b26 100644 --- a/drivers/mmc/rockchip_sdhci.c +++ b/drivers/mmc/rockchip_sdhci.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> #include <dt-structs.h> +#include <linux/err.h> #include <linux/libfdt.h> #include <malloc.h> #include <mapmem.h> diff --git a/drivers/mmc/sdhci-cadence.c b/drivers/mmc/sdhci-cadence.c index 4736263bf2..e9108dabd1 100644 --- a/drivers/mmc/sdhci-cadence.c +++ b/drivers/mmc/sdhci-cadence.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/bitfield.h> #include <linux/io.h> #include <linux/iopoll.h> diff --git a/drivers/mmc/sh_mmcif.c b/drivers/mmc/sh_mmcif.c index c8875ce8f8..29bbb4b3a6 100644 --- a/drivers/mmc/sh_mmcif.c +++ b/drivers/mmc/sh_mmcif.c @@ -13,6 +13,7 @@ #include <clk.h> #include <dm.h> #include <malloc.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <linux/compat.h> #include <linux/io.h> diff --git a/drivers/mmc/sh_sdhi.c b/drivers/mmc/sh_sdhi.c index e38e8abfef..2202158c88 100644 --- a/drivers/mmc/sh_sdhi.c +++ b/drivers/mmc/sh_sdhi.c @@ -13,6 +13,7 @@ #include <malloc.h> #include <mmc.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <linux/compat.h> #include <linux/io.h> diff --git a/drivers/mmc/snps_dw_mmc.c b/drivers/mmc/snps_dw_mmc.c index 5a413f0ec7..c606ef011b 100644 --- a/drivers/mmc/snps_dw_mmc.c +++ b/drivers/mmc/snps_dw_mmc.c @@ -13,6 +13,7 @@ #include <dwmmc.h> #include <errno.h> #include <fdtdec.h> +#include <dm/device_compat.h> #include <linux/libfdt.h> #include <linux/err.h> #include <malloc.h> diff --git a/drivers/mmc/socfpga_dw_mmc.c b/drivers/mmc/socfpga_dw_mmc.c index 568a3e77d3..786cdc700a 100644 --- a/drivers/mmc/socfpga_dw_mmc.c +++ b/drivers/mmc/socfpga_dw_mmc.c @@ -11,6 +11,7 @@ #include <dwmmc.h> #include <errno.h> #include <fdtdec.h> +#include <dm/device_compat.h> #include <linux/libfdt.h> #include <linux/err.h> #include <malloc.h> diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c index 0a7a2fe624..6f3b2ad653 100644 --- a/drivers/mmc/stm32_sdmmc2.c +++ b/drivers/mmc/stm32_sdmmc2.c @@ -9,6 +9,7 @@ #include <cpu_func.h> #include <dm.h> #include <fdtdec.h> +#include <malloc.h> #include <linux/libfdt.h> #include <mmc.h> #include <reset.h> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c index 22990fa98b..f022e93552 100644 --- a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ -14,6 +14,7 @@ #include <asm/gpio.h> #include <asm/io.h> #include <asm/arch-tegra/tegra_mmc.h> +#include <linux/err.h> struct tegra_mmc_plat { struct mmc_config cfg; diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c index 5a8506dcb6..092b740f56 100644 --- a/drivers/mmc/tmio-common.c +++ b/drivers/mmc/tmio-common.c @@ -11,6 +11,7 @@ #include <fdtdec.h> #include <mmc.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/pinctrl.h> #include <linux/compat.h> #include <linux/dma-direction.h> diff --git a/drivers/mmc/uniphier-sd.c b/drivers/mmc/uniphier-sd.c index 8f89bda233..4dbe71fa2e 100644 --- a/drivers/mmc/uniphier-sd.c +++ b/drivers/mmc/uniphier-sd.c @@ -7,8 +7,10 @@ #include <common.h> #include <clk.h> #include <fdtdec.h> +#include <malloc.h> #include <mmc.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/compat.h> #include <linux/dma-direction.h> #include <linux/io.h> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index 529eec9c45..24fabeee95 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -10,6 +10,8 @@ #include <dm.h> #include <fdtdec.h> #include "mmc_private.h" +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/libfdt.h> #include <malloc.h> #include <sdhci.h> diff --git a/drivers/mtd/hbmc-am654.c b/drivers/mtd/hbmc-am654.c index 5a560f1253..846b0e832b 100644 --- a/drivers/mtd/hbmc-am654.c +++ b/drivers/mtd/hbmc-am654.c @@ -8,6 +8,7 @@ #include <dm.h> #include <regmap.h> #include <syscon.h> +#include <dm/device_compat.h> #define FSS_SYSC_REG 0x4 diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c index 8aeccb016d..db20a6b0b2 100644 --- a/drivers/mtd/mtd_uboot.c +++ b/drivers/mtd/mtd_uboot.c @@ -5,8 +5,10 @@ */ #include <common.h> #include <env.h> +#include <malloc.h> #include <dm/device.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <mtd.h> diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index 592f58dcd3..5621c3fd26 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c @@ -10,6 +10,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index dd04d676d5..f8d3f4d246 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -9,6 +9,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/ptrace.h> @@ -1179,10 +1180,10 @@ int mtd_ooblayout_free(struct mtd_info *mtd, int section, if (!mtd || section < 0) return -EINVAL; - if (!mtd->ooblayout || !mtd->ooblayout->free) + if (!mtd->ooblayout || !mtd->ooblayout->rfree) return -ENOTSUPP; - return mtd->ooblayout->free(mtd, section, oobfree); + return mtd->ooblayout->rfree(mtd, section, oobfree); } EXPORT_SYMBOL_GPL(mtd_ooblayout_free); diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index fd8d8e5ea7..56acdbf65b 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -9,6 +9,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> diff --git a/drivers/mtd/nand/bbt.c b/drivers/mtd/nand/bbt.c index f3d05e6757..133670cb19 100644 --- a/drivers/mtd/nand/bbt.c +++ b/drivers/mtd/nand/bbt.c @@ -10,6 +10,7 @@ #define pr_fmt(fmt) "nand-bbt: " fmt #include <common.h> +#include <dm/devres.h> #include <linux/mtd/nand.h> #ifndef __UBOOT__ #include <linux/slab.h> diff --git a/drivers/mtd/nand/core.c b/drivers/mtd/nand/core.c index 3abaef23c5..bc0accf8c6 100644 --- a/drivers/mtd/nand/core.c +++ b/drivers/mtd/nand/core.c @@ -11,6 +11,7 @@ #include <common.h> #ifndef __UBOOT__ +#include <linux/compat.h> #include <linux/module.h> #endif #include <linux/mtd/nand.h> diff --git a/drivers/mtd/nand/raw/atmel_nand.c b/drivers/mtd/nand/raw/atmel_nand.c index 31ad2cfa88..996d3dbb71 100644 --- a/drivers/mtd/nand/raw/atmel_nand.c +++ b/drivers/mtd/nand/raw/atmel_nand.c @@ -13,6 +13,8 @@ #include <common.h> #include <asm/gpio.h> #include <asm/arch/gpio.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <malloc.h> #include <nand.h> diff --git a/drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c b/drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c index 16b0d4440a..ea7c65a1f6 100644 --- a/drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c +++ b/drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c @@ -4,6 +4,7 @@ #include <asm/io.h> #include <memalign.h> #include <nand.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/io.h> #include <linux/ioport.h> diff --git a/drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c b/drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c index ece944485c..3a136155dd 100644 --- a/drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c +++ b/drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c @@ -4,6 +4,7 @@ #include <asm/io.h> #include <memalign.h> #include <nand.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/io.h> #include <linux/ioport.h> diff --git a/drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c b/drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c index 3586baa4fa..6aca011db2 100644 --- a/drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c +++ b/drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c @@ -4,6 +4,7 @@ #include <asm/io.h> #include <memalign.h> #include <nand.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/io.h> #include <linux/ioport.h> diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c index 0745929253..5232328e1e 100644 --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c @@ -17,6 +17,9 @@ #include <memalign.h> #include <nand.h> #include <clk.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/ioport.h> #include <linux/completion.h> #include <linux/errno.h> diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c index 883948355c..c58679834e 100644 --- a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c @@ -1,6 +1,8 @@ // SPDX-License-Identifier: GPL-2.0+ #include <common.h> +#include <malloc.h> +#include <dm/devres.h> #include "brcmnand_compat.h" static char *devm_kvasprintf(struct udevice *dev, gfp_t gfp, const char *fmt, diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c index be1b3627ad..f51d3e25c7 100644 --- a/drivers/mtd/nand/raw/denali.c +++ b/drivers/mtd/nand/raw/denali.c @@ -7,9 +7,13 @@ #include <asm/dma-mapping.h> #include <dm.h> +#include <malloc.h> #include <nand.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/bitfield.h> #include <linux/dma-direction.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/io.h> #include <linux/mtd/mtd.h> @@ -1156,7 +1160,7 @@ static int denali_ooblayout_free(struct mtd_info *mtd, int section, static const struct mtd_ooblayout_ops denali_ooblayout_ops = { .ecc = denali_ooblayout_ecc, - .free = denali_ooblayout_free, + .rfree = denali_ooblayout_free, }; static int denali_multidev_fixup(struct denali_nand_info *denali) diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c index 759ad40e51..41b93e660a 100644 --- a/drivers/mtd/nand/raw/denali_dt.c +++ b/drivers/mtd/nand/raw/denali_dt.c @@ -6,6 +6,7 @@ #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/io.h> #include <linux/ioport.h> #include <linux/printk.h> diff --git a/drivers/mtd/nand/raw/fsl_elbc_nand.c b/drivers/mtd/nand/raw/fsl_elbc_nand.c index cbf689af63..0c1bd7b474 100644 --- a/drivers/mtd/nand/raw/fsl_elbc_nand.c +++ b/drivers/mtd/nand/raw/fsl_elbc_nand.c @@ -11,6 +11,7 @@ #include <command.h> #include <malloc.h> #include <nand.h> +#include <dm/devres.h> #include <linux/mtd/mtd.h> #include <linux/mtd/rawnand.h> diff --git a/drivers/mtd/nand/raw/fsl_ifc_nand.c b/drivers/mtd/nand/raw/fsl_ifc_nand.c index e2419e18a9..cf20238782 100644 --- a/drivers/mtd/nand/raw/fsl_ifc_nand.c +++ b/drivers/mtd/nand/raw/fsl_ifc_nand.c @@ -10,6 +10,7 @@ #include <command.h> #include <malloc.h> #include <nand.h> +#include <dm/devres.h> #include <linux/mtd/mtd.h> #include <linux/mtd/rawnand.h> diff --git a/drivers/mtd/nand/raw/mxs_nand_spl.c b/drivers/mtd/nand/raw/mxs_nand_spl.c index 975a91a37d..a653dfa5ed 100644 --- a/drivers/mtd/nand/raw/mxs_nand_spl.c +++ b/drivers/mtd/nand/raw/mxs_nand_spl.c @@ -7,6 +7,7 @@ #include <nand.h> #include <malloc.h> #include <mxs_nand.h> +#include <linux/err.h> static struct mtd_info *mtd; static struct nand_chip nand_chip; diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index aba8ac019d..49d5e261b5 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -34,6 +34,7 @@ #endif #include <malloc.h> #include <watchdog.h> +#include <dm/devres.h> #include <linux/err.h> #include <linux/compat.h> #include <linux/mtd/mtd.h> diff --git a/drivers/mtd/nand/raw/nand_bbt.c b/drivers/mtd/nand/raw/nand_bbt.c index ba785c5d53..a6e6e0ef6d 100644 --- a/drivers/mtd/nand/raw/nand_bbt.c +++ b/drivers/mtd/nand/raw/nand_bbt.c @@ -59,6 +59,7 @@ #include <common.h> #include <malloc.h> +#include <dm/devres.h> #include <linux/compat.h> #include <linux/mtd/mtd.h> #include <linux/mtd/bbm.h> diff --git a/drivers/mtd/nand/raw/nand_bch.c b/drivers/mtd/nand/raw/nand_bch.c index afa0418168..11a22e021d 100644 --- a/drivers/mtd/nand/raw/nand_bch.c +++ b/drivers/mtd/nand/raw/nand_bch.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <dm/devres.h> /*#include <asm/io.h>*/ #include <linux/types.h> diff --git a/drivers/mtd/nand/raw/nand_timings.c b/drivers/mtd/nand/raw/nand_timings.c index c0545a4fb1..e6aa790391 100644 --- a/drivers/mtd/nand/raw/nand_timings.c +++ b/drivers/mtd/nand/raw/nand_timings.c @@ -9,6 +9,7 @@ * */ #include <common.h> +#include <linux/err.h> #include <linux/kernel.h> #include <linux/mtd/rawnand.h> diff --git a/drivers/mtd/nand/raw/nand_util.c b/drivers/mtd/nand/raw/nand_util.c index fc2235c1a0..f3c8f7f2cb 100644 --- a/drivers/mtd/nand/raw/nand_util.c +++ b/drivers/mtd/nand/raw/nand_util.c @@ -24,6 +24,7 @@ #include <malloc.h> #include <memalign.h> #include <div64.h> +#include <dm/devres.h> #include <linux/errno.h> #include <linux/mtd/mtd.h> diff --git a/drivers/mtd/nand/raw/pxa3xx_nand.c b/drivers/mtd/nand/raw/pxa3xx_nand.c index 4d2712df4c..03f210bdb0 100644 --- a/drivers/mtd/nand/raw/pxa3xx_nand.c +++ b/drivers/mtd/nand/raw/pxa3xx_nand.c @@ -10,6 +10,9 @@ #include <malloc.h> #include <fdtdec.h> #include <nand.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/errno.h> #include <asm/io.h> #include <asm/arch/cpu.h> diff --git a/drivers/mtd/nand/raw/stm32_fmc2_nand.c b/drivers/mtd/nand/raw/stm32_fmc2_nand.c index f3179cc21f..1c212daa1d 100644 --- a/drivers/mtd/nand/raw/stm32_fmc2_nand.c +++ b/drivers/mtd/nand/raw/stm32_fmc2_nand.c @@ -9,6 +9,7 @@ #include <dm.h> #include <nand.h> #include <reset.h> +#include <linux/err.h> #include <linux/iopoll.h> #include <linux/ioport.h> diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c index 3ccb168d13..9b99be10e6 100644 --- a/drivers/mtd/nand/raw/sunxi_nand.c +++ b/drivers/mtd/nand/raw/sunxi_nand.c @@ -26,8 +26,12 @@ #include <common.h> #include <fdtdec.h> +#include <malloc.h> #include <memalign.h> #include <nand.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/kernel.h> #include <linux/mtd/mtd.h> diff --git a/drivers/mtd/nand/raw/tegra_nand.c b/drivers/mtd/nand/raw/tegra_nand.c index 74acdfb308..ae699d1da5 100644 --- a/drivers/mtd/nand/raw/tegra_nand.c +++ b/drivers/mtd/nand/raw/tegra_nand.c @@ -13,6 +13,7 @@ #include <asm/arch/clock.h> #include <asm/arch/funcmux.h> #include <asm/arch-tegra/clk_rst.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <asm/gpio.h> #include <fdtdec.h> diff --git a/drivers/mtd/nand/raw/vf610_nfc.c b/drivers/mtd/nand/raw/vf610_nfc.c index 3326c2b096..52c8a94778 100644 --- a/drivers/mtd/nand/raw/vf610_nfc.c +++ b/drivers/mtd/nand/raw/vf610_nfc.c @@ -23,6 +23,7 @@ #include <common.h> #include <malloc.h> +#include <dm/device_compat.h> #include <linux/mtd/mtd.h> #include <linux/mtd/rawnand.h> diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index cb8ffa3fa9..cd624ec6ae 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -24,6 +24,8 @@ #include <errno.h> #include <spi.h> #include <spi-mem.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/mtd/spinand.h> #endif @@ -1021,7 +1023,7 @@ static int spinand_noecc_ooblayout_free(struct mtd_info *mtd, int section, static const struct mtd_ooblayout_ops spinand_noecc_ooblayout = { .ecc = spinand_noecc_ooblayout_ecc, - .free = spinand_noecc_ooblayout_free, + .rfree = spinand_noecc_ooblayout_free, }; static int spinand_init(struct spinand_device *spinand) diff --git a/drivers/mtd/nand/spi/gigadevice.c b/drivers/mtd/nand/spi/gigadevice.c index 3681c5eed9..0b228dcb5b 100644 --- a/drivers/mtd/nand/spi/gigadevice.c +++ b/drivers/mtd/nand/spi/gigadevice.c @@ -7,6 +7,7 @@ */ #ifndef __UBOOT__ +#include <malloc.h> #include <linux/device.h> #include <linux/kernel.h> #endif @@ -103,7 +104,7 @@ static int gd5fxgq4xexxg_ecc_get_status(struct spinand_device *spinand, static const struct mtd_ooblayout_ops gd5fxgq4xexxg_ooblayout = { .ecc = gd5fxgq4xexxg_ooblayout_ecc, - .free = gd5fxgq4xexxg_ooblayout_free, + .rfree = gd5fxgq4xexxg_ooblayout_free, }; static const struct spinand_info gigadevice_spinand_table[] = { diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c index 662c561e50..67d092be2c 100644 --- a/drivers/mtd/nand/spi/macronix.c +++ b/drivers/mtd/nand/spi/macronix.c @@ -6,6 +6,7 @@ */ #ifndef __UBOOT__ +#include <malloc.h> #include <linux/device.h> #include <linux/kernel.h> #endif @@ -47,7 +48,7 @@ static int mx35lfxge4ab_ooblayout_free(struct mtd_info *mtd, int section, static const struct mtd_ooblayout_ops mx35lfxge4ab_ooblayout = { .ecc = mx35lfxge4ab_ooblayout_ecc, - .free = mx35lfxge4ab_ooblayout_free, + .rfree = mx35lfxge4ab_ooblayout_free, }; static int mx35lf1ge4ab_get_eccsr(struct spinand_device *spinand, u8 *eccsr) diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 83951c5d0f..687306e33e 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -7,6 +7,7 @@ */ #ifndef __UBOOT__ +#include <malloc.h> #include <linux/device.h> #include <linux/kernel.h> #endif @@ -63,7 +64,7 @@ static int mt29f2g01abagd_ooblayout_free(struct mtd_info *mtd, int section, static const struct mtd_ooblayout_ops mt29f2g01abagd_ooblayout = { .ecc = mt29f2g01abagd_ooblayout_ecc, - .free = mt29f2g01abagd_ooblayout_free, + .rfree = mt29f2g01abagd_ooblayout_free, }; static int mt29f2g01abagd_ecc_get_status(struct spinand_device *spinand, diff --git a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c index 6ba8bc5c7b..6ede98c85d 100644 --- a/drivers/mtd/nand/spi/winbond.c +++ b/drivers/mtd/nand/spi/winbond.c @@ -8,6 +8,7 @@ */ #ifndef __UBOOT__ +#include <malloc.h> #include <linux/device.h> #include <linux/kernel.h> #endif @@ -59,7 +60,7 @@ static int w25m02gv_ooblayout_free(struct mtd_info *mtd, int section, static const struct mtd_ooblayout_ops w25m02gv_ooblayout = { .ecc = w25m02gv_ooblayout_ecc, - .free = w25m02gv_ooblayout_free, + .rfree = w25m02gv_ooblayout_free, }; static int w25m02gv_select_target(struct spinand_device *spinand, diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 371e2ecaa7..693bb78b87 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -21,6 +21,7 @@ #include <common.h> #include <watchdog.h> +#include <dm/devres.h> #include <linux/compat.h> #include <linux/mtd/mtd.h> #include "linux/mtd/flashchip.h" diff --git a/drivers/mtd/renesas_rpc_hf.c b/drivers/mtd/renesas_rpc_hf.c index f5c6515c9b..fc2aa22d7f 100644 --- a/drivers/mtd/renesas_rpc_hf.c +++ b/drivers/mtd/renesas_rpc_hf.c @@ -8,9 +8,11 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/of_access.h> #include <errno.h> #include <fdt_support.h> diff --git a/drivers/mtd/spi/sf-uclass.c b/drivers/mtd/spi/sf-uclass.c index c6107522be..5ebcca590a 100644 --- a/drivers/mtd/spi/sf-uclass.c +++ b/drivers/mtd/spi/sf-uclass.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <spi.h> #include <spi_flash.h> #include <dm/device-internal.h> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c index d7020c190b..7b6ad495ac 100644 --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c @@ -10,6 +10,8 @@ */ #include <common.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/err.h> #include <linux/errno.h> #include <linux/log2.h> diff --git a/drivers/mtd/spi/spi-nor-tiny.c b/drivers/mtd/spi/spi-nor-tiny.c index c19d468d62..ccc0ab07af 100644 --- a/drivers/mtd/spi/spi-nor-tiny.c +++ b/drivers/mtd/spi/spi-nor-tiny.c @@ -10,6 +10,7 @@ */ #include <common.h> +#include <dm/device_compat.h> #include <linux/err.h> #include <linux/errno.h> #include <linux/log2.h> diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c index 19defd8831..f02a06fc35 100644 --- a/drivers/mtd/ubi/attach.c +++ b/drivers/mtd/ubi/attach.c @@ -70,6 +70,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/err.h> #include <linux/slab.h> #include <linux/crc32.h> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 42c5270c7f..7de65bc7c3 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c @@ -17,6 +17,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/stringify.h> diff --git a/drivers/mtd/ubi/debug.c b/drivers/mtd/ubi/debug.c index f3d348da83..d2b7ca5e33 100644 --- a/drivers/mtd/ubi/debug.c +++ b/drivers/mtd/ubi/debug.c @@ -6,10 +6,12 @@ */ #include <hexdump.h> +#include <malloc.h> #include <ubi_uboot.h> #include "ubi.h" #ifndef __UBOOT__ #include <linux/debugfs.h> +#include <linux/err.h> #include <linux/uaccess.h> #include <linux/module.h> #endif diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c index 0c8b998e7e..8428278e21 100644 --- a/drivers/mtd/ubi/eba.c +++ b/drivers/mtd/ubi/eba.c @@ -29,6 +29,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/slab.h> #include <linux/crc32.h> #include <u-boot/crc.h> diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c index 646c778e87..a3f5e3e1a9 100644 --- a/drivers/mtd/ubi/fastmap.c +++ b/drivers/mtd/ubi/fastmap.c @@ -7,7 +7,9 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> +#include <linux/err.h> #include <u-boot/crc.h> #else #include <div64.h> diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c index 608dede492..8ba22d8142 100644 --- a/drivers/mtd/ubi/io.c +++ b/drivers/mtd/ubi/io.c @@ -74,6 +74,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> #include <linux/err.h> #include <linux/slab.h> diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c index bcea71b1b2..41680cdad1 100644 --- a/drivers/mtd/ubi/kapi.c +++ b/drivers/mtd/ubi/kapi.c @@ -8,6 +8,7 @@ /* This file mostly implements UBI kernel API functions */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/namei.h> diff --git a/drivers/mtd/ubi/misc.c b/drivers/mtd/ubi/misc.c index 685324d7d2..3f7ee59c94 100644 --- a/drivers/mtd/ubi/misc.c +++ b/drivers/mtd/ubi/misc.c @@ -7,6 +7,7 @@ /* Here we keep miscellaneous functions which are used all over the UBI code */ +#include <malloc.h> #include <ubi_uboot.h> #include "ubi.h" diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c index d0a6a1bd18..0f7951c859 100644 --- a/drivers/mtd/ubi/upd.c +++ b/drivers/mtd/ubi/upd.c @@ -26,6 +26,7 @@ */ #ifndef __UBOOT__ +#include <malloc.h> #include <linux/uaccess.h> #else #include <div64.h> diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c index a2ff1b5769..2114abbe7c 100644 --- a/drivers/mtd/ubi/vmt.c +++ b/drivers/mtd/ubi/vmt.c @@ -11,6 +11,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/err.h> #include <linux/slab.h> #include <linux/export.h> diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c index 9c46ef6695..123c2f344d 100644 --- a/drivers/mtd/ubi/vtbl.c +++ b/drivers/mtd/ubi/vtbl.c @@ -46,6 +46,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> #include <linux/err.h> #include <linux/slab.h> diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c index 89ca90feb3..4038b7f04e 100644 --- a/drivers/mtd/ubi/wl.c +++ b/drivers/mtd/ubi/wl.c @@ -86,6 +86,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/slab.h> #include <linux/crc32.h> #include <linux/freezer.h> diff --git a/drivers/net/bcm6348-eth.c b/drivers/net/bcm6348-eth.c index 7100e68bd2..fe3532930a 100644 --- a/drivers/net/bcm6348-eth.c +++ b/drivers/net/bcm6348-eth.c @@ -10,6 +10,7 @@ #include <clk.h> #include <dm.h> #include <dma.h> +#include <malloc.h> #include <miiphy.h> #include <net.h> #include <phy.h> diff --git a/drivers/net/bcm6368-eth.c b/drivers/net/bcm6368-eth.c index 110985ed1d..1200049007 100644 --- a/drivers/net/bcm6368-eth.c +++ b/drivers/net/bcm6368-eth.c @@ -10,11 +10,13 @@ #include <clk.h> #include <dm.h> #include <dma.h> +#include <malloc.h> #include <miiphy.h> #include <net.h> #include <reset.h> #include <wait_bit.h> #include <asm/io.h> +#include <dm/device_compat.h> #define ETH_PORT_STR "brcm,enetsw-port" diff --git a/drivers/net/designware.c b/drivers/net/designware.c index 19fc34f771..baac277a84 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -17,6 +17,8 @@ #include <malloc.h> #include <pci.h> #include <reset.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/compiler.h> #include <linux/err.h> #include <linux/kernel.h> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c index 4632111635..0564bebf76 100644 --- a/drivers/net/dwc_eth_qos.c +++ b/drivers/net/dwc_eth_qos.c @@ -31,6 +31,7 @@ #include <cpu_func.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <memalign.h> #include <miiphy.h> #include <net.h> diff --git a/drivers/net/dwmac_socfpga.c b/drivers/net/dwmac_socfpga.c index b7bf5dbe69..e93561dffa 100644 --- a/drivers/net/dwmac_socfpga.c +++ b/drivers/net/dwmac_socfpga.c @@ -14,6 +14,8 @@ #include <reset.h> #include <syscon.h> #include "designware.h" +#include <dm/device_compat.h> +#include <linux/err.h> #include <asm/arch/system_manager.h> diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c index 0946011844..9212920549 100644 --- a/drivers/net/e1000.c +++ b/drivers/net/e1000.c @@ -33,6 +33,7 @@ tested on both gig copper and gig fiber boards #include <cpu_func.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <memalign.h> #include <pci.h> #include "e1000.h" diff --git a/drivers/net/e1000_spi.c b/drivers/net/e1000_spi.c index aecd290d72..52b3c79794 100644 --- a/drivers/net/e1000_spi.c +++ b/drivers/net/e1000_spi.c @@ -1,6 +1,7 @@ #include <common.h> #include <console.h> #include "e1000.h" +#include <malloc.h> #include <linux/compiler.h> /*----------------------------------------------------------------------- diff --git a/drivers/net/fsl-mc/dpio/qbman_portal.c b/drivers/net/fsl-mc/dpio/qbman_portal.c index c51354cfa1..e161b4e077 100644 --- a/drivers/net/fsl-mc/dpio/qbman_portal.c +++ b/drivers/net/fsl-mc/dpio/qbman_portal.c @@ -3,6 +3,7 @@ * Copyright (C) 2014 Freescale Semiconductor */ +#include <malloc.h> #include <asm/arch/clock.h> #include "qbman_portal.h" diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c index 8ff43a91c7..07bbcc9b23 100644 --- a/drivers/net/fsl-mc/mc.c +++ b/drivers/net/fsl-mc/mc.c @@ -8,6 +8,7 @@ #include <cpu_func.h> #include <env.h> #include <errno.h> +#include <malloc.h> #include <linux/bug.h> #include <asm/io.h> #include <linux/libfdt.h> diff --git a/drivers/net/fsl_enetc.c b/drivers/net/fsl_enetc.c index f0d15febcc..bee73153d0 100644 --- a/drivers/net/fsl_enetc.c +++ b/drivers/net/fsl_enetc.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <memalign.h> #include <asm/io.h> #include <pci.h> diff --git a/drivers/net/ftgmac100.c b/drivers/net/ftgmac100.c index ebb74339b2..40e6b3ba39 100644 --- a/drivers/net/ftgmac100.c +++ b/drivers/net/ftgmac100.c @@ -14,9 +14,11 @@ #include <clk.h> #include <cpu_func.h> #include <dm.h> +#include <malloc.h> #include <miiphy.h> #include <net.h> #include <wait_bit.h> +#include <dm/device_compat.h> #include <linux/io.h> #include <linux/iopoll.h> diff --git a/drivers/net/higmacv300.c b/drivers/net/higmacv300.c index 897741ab82..0c1dd6834a 100644 --- a/drivers/net/higmacv300.c +++ b/drivers/net/higmacv300.c @@ -4,6 +4,7 @@ */ #include <cpu_func.h> +#include <malloc.h> #include <asm/io.h> #include <common.h> #include <console.h> diff --git a/drivers/net/mscc_eswitch/jr2_switch.c b/drivers/net/mscc_eswitch/jr2_switch.c index 665517775e..33dd002146 100644 --- a/drivers/net/mscc_eswitch/jr2_switch.c +++ b/drivers/net/mscc_eswitch/jr2_switch.c @@ -6,6 +6,7 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <fdt_support.h> diff --git a/drivers/net/mscc_eswitch/luton_switch.c b/drivers/net/mscc_eswitch/luton_switch.c index dffe81d873..9d24c005c1 100644 --- a/drivers/net/mscc_eswitch/luton_switch.c +++ b/drivers/net/mscc_eswitch/luton_switch.c @@ -6,6 +6,7 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <fdt_support.h> diff --git a/drivers/net/mscc_eswitch/ocelot_switch.c b/drivers/net/mscc_eswitch/ocelot_switch.c index 0ba84ab78a..fe48f371c3 100644 --- a/drivers/net/mscc_eswitch/ocelot_switch.c +++ b/drivers/net/mscc_eswitch/ocelot_switch.c @@ -6,6 +6,7 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <fdt_support.h> diff --git a/drivers/net/mscc_eswitch/serval_switch.c b/drivers/net/mscc_eswitch/serval_switch.c index 1a21360a96..f05fa42ff3 100644 --- a/drivers/net/mscc_eswitch/serval_switch.c +++ b/drivers/net/mscc_eswitch/serval_switch.c @@ -6,6 +6,7 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <fdt_support.h> diff --git a/drivers/net/mscc_eswitch/servalt_switch.c b/drivers/net/mscc_eswitch/servalt_switch.c index d20ec49d56..bf95a38354 100644 --- a/drivers/net/mscc_eswitch/servalt_switch.c +++ b/drivers/net/mscc_eswitch/servalt_switch.c @@ -6,6 +6,7 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <fdt_support.h> diff --git a/drivers/net/mtk_eth.c b/drivers/net/mtk_eth.c index edfa5d1ce8..126b824b1a 100644 --- a/drivers/net/mtk_eth.c +++ b/drivers/net/mtk_eth.c @@ -17,6 +17,7 @@ #include <wait_bit.h> #include <asm/gpio.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/err.h> #include <linux/ioport.h> #include <linux/mdio.h> diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 5fe8500199..d737400a20 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -20,6 +20,8 @@ #include <config.h> #include <malloc.h> #include <asm/io.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/errno.h> #include <phy.h> #include <miiphy.h> diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c index b234b41956..fcd24868af 100644 --- a/drivers/net/mvpp2.c +++ b/drivers/net/mvpp2.c @@ -17,12 +17,15 @@ #include <cpu_func.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <net.h> #include <netdev.h> #include <config.h> #include <malloc.h> #include <asm/io.h> +#include <linux/err.h> #include <linux/errno.h> #include <phy.h> #include <miiphy.h> diff --git a/drivers/net/pch_gbe.c b/drivers/net/pch_gbe.c index e4507bf7fd..b2823701a4 100644 --- a/drivers/net/pch_gbe.c +++ b/drivers/net/pch_gbe.c @@ -9,6 +9,7 @@ #include <cpu_func.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <asm/io.h> #include <pci.h> #include <miiphy.h> diff --git a/drivers/net/pfe_eth/pfe_driver.c b/drivers/net/pfe_eth/pfe_driver.c index 14a8c68276..f70a235217 100644 --- a/drivers/net/pfe_eth/pfe_driver.c +++ b/drivers/net/pfe_eth/pfe_driver.c @@ -4,6 +4,7 @@ * Copyright 2017 NXP */ +#include <malloc.h> #include <net/pfe_eth/pfe_eth.h> #include <net/pfe_eth/pfe_firmware.h> diff --git a/drivers/net/pfe_eth/pfe_eth.c b/drivers/net/pfe_eth/pfe_eth.c index c525674fb8..1b5d11ef32 100644 --- a/drivers/net/pfe_eth/pfe_eth.c +++ b/drivers/net/pfe_eth/pfe_eth.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/platform_data/pfe_dm_eth.h> #include <net.h> #include <net/pfe_eth/pfe_eth.h> diff --git a/drivers/net/pfe_eth/pfe_firmware.c b/drivers/net/pfe_eth/pfe_firmware.c index e4563f192b..13112d9c1a 100644 --- a/drivers/net/pfe_eth/pfe_firmware.c +++ b/drivers/net/pfe_eth/pfe_firmware.c @@ -10,6 +10,7 @@ * files. */ +#include <malloc.h> #include <net/pfe_eth/pfe_eth.h> #include <net/pfe_eth/pfe_firmware.h> #ifdef CONFIG_CHAIN_OF_TRUST diff --git a/drivers/net/pfe_eth/pfe_mdio.c b/drivers/net/pfe_eth/pfe_mdio.c index 62309670fa..b990e7fbe2 100644 --- a/drivers/net/pfe_eth/pfe_mdio.c +++ b/drivers/net/pfe_eth/pfe_mdio.c @@ -5,6 +5,7 @@ */ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/platform_data/pfe_dm_eth.h> #include <net.h> #include <net/pfe_eth/pfe_eth.h> diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c index a43793cd42..08935d9c15 100644 --- a/drivers/net/phy/dp83867.c +++ b/drivers/net/phy/dp83867.c @@ -5,6 +5,7 @@ */ #include <common.h> #include <phy.h> +#include <dm/devres.h> #include <linux/compat.h> #include <malloc.h> diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c index 0ae0edd0e1..9d9f746e1d 100644 --- a/drivers/net/phy/fixed.c +++ b/drivers/net/phy/fixed.c @@ -7,6 +7,7 @@ #include <config.h> #include <common.h> +#include <malloc.h> #include <phy.h> #include <dm.h> #include <fdt_support.h> diff --git a/drivers/net/pic32_eth.c b/drivers/net/pic32_eth.c index 3458440b6f..e966be038a 100644 --- a/drivers/net/pic32_eth.c +++ b/drivers/net/pic32_eth.c @@ -7,6 +7,7 @@ #include <cpu_func.h> #include <errno.h> #include <dm.h> +#include <malloc.h> #include <net.h> #include <miiphy.h> #include <console.h> diff --git a/drivers/net/sandbox-raw-bus.c b/drivers/net/sandbox-raw-bus.c index 0086f25fc1..fb1ba5a8c8 100644 --- a/drivers/net/sandbox-raw-bus.c +++ b/drivers/net/sandbox-raw-bus.c @@ -8,6 +8,7 @@ #include <asm/eth-raw-os.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <dm/device-internal.h> #include <dm/lists.h> diff --git a/drivers/net/sni_ave.c b/drivers/net/sni_ave.c index 6d333e24ee..5d66a63a8b 100644 --- a/drivers/net/sni_ave.c +++ b/drivers/net/sni_ave.c @@ -8,13 +8,16 @@ #include <cpu_func.h> #include <dm.h> #include <fdt_support.h> -#include <linux/io.h> -#include <linux/iopoll.h> +#include <malloc.h> #include <miiphy.h> #include <net.h> #include <regmap.h> #include <reset.h> #include <syscon.h> +#include <dm/device_compat.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/iopoll.h> #define AVE_GRST_DELAY_MSEC 40 #define AVE_MIN_XMITSIZE 60 diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c index 6f10578c88..1ae776b446 100644 --- a/drivers/net/sun8i_emac.c +++ b/drivers/net/sun8i_emac.c @@ -18,6 +18,7 @@ #include <clk.h> #include <dm.h> #include <fdt_support.h> +#include <dm/device_compat.h> #include <linux/err.h> #include <malloc.h> #include <miiphy.h> diff --git a/drivers/net/sunxi_emac.c b/drivers/net/sunxi_emac.c index 9a5f7fd3c7..a9874e4220 100644 --- a/drivers/net/sunxi_emac.c +++ b/drivers/net/sunxi_emac.c @@ -8,6 +8,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/err.h> #include <malloc.h> #include <miiphy.h> diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c index 2590486810..2b77213001 100644 --- a/drivers/net/ti/am65-cpsw-nuss.c +++ b/drivers/net/ti/am65-cpsw-nuss.c @@ -7,10 +7,12 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <asm/processor.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dma-uclass.h> #include <dm/of_access.h> diff --git a/drivers/net/ti/cpsw-common.c b/drivers/net/ti/cpsw-common.c index 21b8bbda3d..ca93edb70e 100644 --- a/drivers/net/ti/cpsw-common.c +++ b/drivers/net/ti/cpsw-common.c @@ -10,6 +10,7 @@ #include <fdt_support.h> #include <asm/io.h> #include <cpsw.h> +#include <dm/device_compat.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/net/ti/cpsw.c b/drivers/net/ti/cpsw.c index 57625623c2..04b01a8129 100644 --- a/drivers/net/ti/cpsw.c +++ b/drivers/net/ti/cpsw.c @@ -14,6 +14,7 @@ #include <net.h> #include <netdev.h> #include <cpsw.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <asm/gpio.h> #include <asm/io.h> diff --git a/drivers/net/ti/cpsw_mdio.c b/drivers/net/ti/cpsw_mdio.c index 6e8f652011..1fa520be0f 100644 --- a/drivers/net/ti/cpsw_mdio.c +++ b/drivers/net/ti/cpsw_mdio.c @@ -6,6 +6,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <miiphy.h> #include <wait_bit.h> diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c index c3fe8e3c56..288037e2a0 100644 --- a/drivers/net/zynq_gem.c +++ b/drivers/net/zynq_gem.c @@ -25,6 +25,8 @@ #include <asm/system.h> #include <asm/arch/hardware.h> #include <asm/arch/sys_proto.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/errno.h> /* Bit/mask specification */ diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c index 2593eb174b..ef4382da1a 100644 --- a/drivers/nvme/nvme.c +++ b/drivers/nvme/nvme.c @@ -8,10 +8,12 @@ #include <cpu_func.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <memalign.h> #include <pci.h> #include <time.h> #include <dm/device-internal.h> +#include <linux/compat.h> #include "nvme.h" #define NVME_Q_DEPTH 2 diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c index aa0b4bc845..d678e0b599 100644 --- a/drivers/pci/pci-aardvark.c +++ b/drivers/pci/pci-aardvark.c @@ -29,6 +29,7 @@ #include <pci.h> #include <asm/io.h> #include <asm-generic/gpio.h> +#include <dm/device_compat.h> #include <linux/ioport.h> /* PCIe core registers */ @@ -297,7 +298,7 @@ static int pcie_advk_check_pio_status(struct pcie_advk *pcie, * * Return: 0 on success */ -static int pcie_advk_read_config(struct udevice *bus, pci_dev_t bdf, +static int pcie_advk_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pci-emul-uclass.c b/drivers/pci/pci-emul-uclass.c index 0f63e491a7..9486e1cb96 100644 --- a/drivers/pci/pci-emul-uclass.c +++ b/drivers/pci/pci-emul-uclass.c @@ -15,7 +15,7 @@ struct sandbox_pci_emul_priv { int dev_count; }; -int sandbox_pci_get_emul(struct udevice *bus, pci_dev_t find_devfn, +int sandbox_pci_get_emul(const struct udevice *bus, pci_dev_t find_devfn, struct udevice **containerp, struct udevice **emulp) { struct pci_emul_uc_priv *upriv; diff --git a/drivers/pci/pci-rcar-gen2.c b/drivers/pci/pci-rcar-gen2.c index d913d53f3c..014d870478 100644 --- a/drivers/pci/pci-rcar-gen2.c +++ b/drivers/pci/pci-rcar-gen2.c @@ -107,7 +107,7 @@ static int rcar_gen2_pci_addr_valid(pci_dev_t d, uint offset) return 0; } -static u32 get_bus_address(struct udevice *dev, pci_dev_t bdf, u32 offset) +static u32 get_bus_address(const struct udevice *dev, pci_dev_t bdf, u32 offset) { struct rcar_gen2_pci_priv *priv = dev_get_priv(dev); @@ -126,7 +126,7 @@ static u32 setup_bus_address(struct udevice *dev, pci_dev_t bdf, u32 offset) return get_bus_address(dev, bdf, offset); } -static int rcar_gen2_pci_read_config(struct udevice *dev, pci_dev_t bdf, +static int rcar_gen2_pci_read_config(const struct udevice *dev, pci_dev_t bdf, uint offset, ulong *value, enum pci_size_t size) { diff --git a/drivers/pci/pci-rcar-gen3.c b/drivers/pci/pci-rcar-gen3.c index 52ca13b70c..30eff67dca 100644 --- a/drivers/pci/pci-rcar-gen3.c +++ b/drivers/pci/pci-rcar-gen3.c @@ -143,7 +143,7 @@ static void rcar_rmw32(struct udevice *dev, int where, u32 mask, u32 data) mask << shift, data << shift); } -static u32 rcar_read_conf(struct udevice *dev, int where) +static u32 rcar_read_conf(const struct udevice *dev, int where) { struct rcar_gen3_pcie_priv *priv = dev_get_platdata(dev); int shift = 8 * (where & 3); @@ -151,7 +151,7 @@ static u32 rcar_read_conf(struct udevice *dev, int where) return readl(priv->regs + (where & ~3)) >> shift; } -static int rcar_pcie_config_access(struct udevice *udev, +static int rcar_pcie_config_access(const struct udevice *udev, unsigned char access_type, pci_dev_t bdf, int where, ulong *data) { @@ -204,7 +204,7 @@ static int rcar_gen3_pcie_addr_valid(pci_dev_t d, uint where) return 0; } -static int rcar_gen3_pcie_read_config(struct udevice *dev, pci_dev_t bdf, +static int rcar_gen3_pcie_read_config(const struct udevice *dev, pci_dev_t bdf, uint where, ulong *val, enum pci_size_t size) { diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 5be2dfd0bf..e2882e3b63 100644 --- a/drivers/pci/pci-uclass.c +++ b/drivers/pci/pci-uclass.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <pci.h> #include <asm/io.h> #include <dm/device-internal.h> @@ -43,7 +44,7 @@ struct udevice *pci_get_controller(struct udevice *dev) return dev; } -pci_dev_t dm_pci_get_bdf(struct udevice *dev) +pci_dev_t dm_pci_get_bdf(const struct udevice *dev) { struct pci_child_platdata *pplat = dev_get_parent_platdata(dev); struct udevice *bus = dev->parent; @@ -124,7 +125,7 @@ static void pci_dev_find_ofnode(struct udevice *bus, phys_addr_t bdf, } }; -int pci_bus_find_devfn(struct udevice *bus, pci_dev_t find_devfn, +int pci_bus_find_devfn(const struct udevice *bus, pci_dev_t find_devfn, struct udevice **devp) { struct udevice *dev; @@ -349,7 +350,7 @@ int dm_pci_write_config32(struct udevice *dev, int offset, u32 value) return dm_pci_write_config(dev, offset, value, PCI_SIZE_32); } -int pci_bus_read_config(struct udevice *bus, pci_dev_t bdf, int offset, +int pci_bus_read_config(const struct udevice *bus, pci_dev_t bdf, int offset, unsigned long *valuep, enum pci_size_t size) { struct dm_pci_ops *ops; @@ -373,10 +374,10 @@ int pci_read_config(pci_dev_t bdf, int offset, unsigned long *valuep, return pci_bus_read_config(bus, bdf, offset, valuep, size); } -int dm_pci_read_config(struct udevice *dev, int offset, unsigned long *valuep, - enum pci_size_t size) +int dm_pci_read_config(const struct udevice *dev, int offset, + unsigned long *valuep, enum pci_size_t size) { - struct udevice *bus; + const struct udevice *bus; for (bus = dev; device_is_on_pci_bus(bus);) bus = bus->parent; @@ -423,7 +424,7 @@ int pci_read_config8(pci_dev_t bdf, int offset, u8 *valuep) return 0; } -int dm_pci_read_config8(struct udevice *dev, int offset, u8 *valuep) +int dm_pci_read_config8(const struct udevice *dev, int offset, u8 *valuep) { unsigned long value; int ret; @@ -436,7 +437,7 @@ int dm_pci_read_config8(struct udevice *dev, int offset, u8 *valuep) return 0; } -int dm_pci_read_config16(struct udevice *dev, int offset, u16 *valuep) +int dm_pci_read_config16(const struct udevice *dev, int offset, u16 *valuep) { unsigned long value; int ret; @@ -449,7 +450,7 @@ int dm_pci_read_config16(struct udevice *dev, int offset, u16 *valuep) return 0; } -int dm_pci_read_config32(struct udevice *dev, int offset, u32 *valuep) +int dm_pci_read_config32(const struct udevice *dev, int offset, u32 *valuep) { unsigned long value; int ret; @@ -551,8 +552,9 @@ int pci_auto_config_devices(struct udevice *bus) } int pci_generic_mmap_write_config( - struct udevice *bus, - int (*addr_f)(struct udevice *bus, pci_dev_t bdf, uint offset, void **addrp), + const struct udevice *bus, + int (*addr_f)(const struct udevice *bus, pci_dev_t bdf, uint offset, + void **addrp), pci_dev_t bdf, uint offset, ulong value, @@ -579,8 +581,9 @@ int pci_generic_mmap_write_config( } int pci_generic_mmap_read_config( - struct udevice *bus, - int (*addr_f)(struct udevice *bus, pci_dev_t bdf, uint offset, void **addrp), + const struct udevice *bus, + int (*addr_f)(const struct udevice *bus, pci_dev_t bdf, uint offset, + void **addrp), pci_dev_t bdf, uint offset, ulong *valuep, @@ -1054,7 +1057,7 @@ static int pci_uclass_child_post_bind(struct udevice *dev) return 0; } -static int pci_bridge_read_config(struct udevice *bus, pci_dev_t bdf, +static int pci_bridge_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { @@ -1201,7 +1204,7 @@ int pci_get_regions(struct udevice *dev, struct pci_region **iop, return (*iop != NULL) + (*memp != NULL) + (*prefp != NULL); } -u32 dm_pci_read_bar32(struct udevice *dev, int barnum) +u32 dm_pci_read_bar32(const struct udevice *dev, int barnum) { u32 addr; int bar; diff --git a/drivers/pci/pci_mpc85xx.c b/drivers/pci/pci_mpc85xx.c index e58ab60ee0..8dff68dbd0 100644 --- a/drivers/pci/pci_mpc85xx.c +++ b/drivers/pci/pci_mpc85xx.c @@ -15,7 +15,7 @@ struct mpc85xx_pci_priv { void __iomem *cfg_data; }; -static int mpc85xx_pci_dm_read_config(struct udevice *dev, pci_dev_t bdf, +static int mpc85xx_pci_dm_read_config(const struct udevice *dev, pci_dev_t bdf, uint offset, ulong *value, enum pci_size_t size) { diff --git a/drivers/pci/pci_mvebu.c b/drivers/pci/pci_mvebu.c index f9b08f38a1..483a87db7d 100644 --- a/drivers/pci/pci_mvebu.c +++ b/drivers/pci/pci_mvebu.c @@ -11,6 +11,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/device-internal.h> #include <dm/lists.h> #include <dm/of_access.h> @@ -136,7 +137,7 @@ static inline struct mvebu_pcie *hose_to_pcie(struct pci_controller *hose) return container_of(hose, struct mvebu_pcie, hose); } -static int mvebu_pcie_read_config(struct udevice *bus, pci_dev_t bdf, +static int mvebu_pcie_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pci_sandbox.c b/drivers/pci/pci_sandbox.c index 2af2b79c05..fa4c476597 100644 --- a/drivers/pci/pci_sandbox.c +++ b/drivers/pci/pci_sandbox.c @@ -39,7 +39,7 @@ static int sandbox_pci_write_config(struct udevice *bus, pci_dev_t devfn, return ops->write_config(emul, offset, value, size); } -static int sandbox_pci_read_config(struct udevice *bus, pci_dev_t devfn, +static int sandbox_pci_read_config(const struct udevice *bus, pci_dev_t devfn, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pci_sh7751.c b/drivers/pci/pci_sh7751.c index 53e1668c99..2f48b96719 100644 --- a/drivers/pci/pci_sh7751.c +++ b/drivers/pci/pci_sh7751.c @@ -80,12 +80,12 @@ static int sh7751_pci_addr_valid(pci_dev_t d, uint offset) return 0; } -static u32 get_bus_address(struct udevice *dev, pci_dev_t bdf, u32 offset) +static u32 get_bus_address(const struct udevice *dev, pci_dev_t bdf, u32 offset) { return BIT(31) | (PCI_DEV(bdf) << 8) | (offset & ~3); } -static int sh7751_pci_read_config(struct udevice *dev, pci_dev_t bdf, +static int sh7751_pci_read_config(const struct udevice *dev, pci_dev_t bdf, uint offset, ulong *value, enum pci_size_t size) { diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c index 56c08585e6..96d308f7bf 100644 --- a/drivers/pci/pci_tegra.c +++ b/drivers/pci/pci_tegra.c @@ -308,7 +308,7 @@ static int tegra_pcie_conf_address(struct tegra_pcie *pcie, pci_dev_t bdf, } } -static int pci_tegra_read_config(struct udevice *bus, pci_dev_t bdf, +static int pci_tegra_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pci_x86.c b/drivers/pci/pci_x86.c index e76a9c6e44..8d036930e7 100644 --- a/drivers/pci/pci_x86.c +++ b/drivers/pci/pci_x86.c @@ -8,8 +8,9 @@ #include <pci.h> #include <asm/pci.h> -static int _pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset, - ulong *valuep, enum pci_size_t size) +static int _pci_x86_read_config(const struct udevice *bus, pci_dev_t bdf, + uint offset, ulong *valuep, + enum pci_size_t size) { return pci_x86_read_config(bdf, offset, valuep, size); } diff --git a/drivers/pci/pcie_dw_mvebu.c b/drivers/pci/pcie_dw_mvebu.c index 693591e375..1f216e1c68 100644 --- a/drivers/pci/pcie_dw_mvebu.c +++ b/drivers/pci/pcie_dw_mvebu.c @@ -240,7 +240,7 @@ static int pcie_dw_addr_valid(pci_dev_t d, int first_busno) * * Return: 0 on success */ -static int pcie_dw_mvebu_read_config(struct udevice *bus, pci_dev_t bdf, +static int pcie_dw_mvebu_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_dw_ti.c b/drivers/pci/pcie_dw_ti.c index b37fc2de7f..f62264cbba 100644 --- a/drivers/pci/pcie_dw_ti.c +++ b/drivers/pci/pcie_dw_ti.c @@ -12,6 +12,8 @@ #include <syscon.h> #include <asm/io.h> #include <asm-generic/gpio.h> +#include <dm/device_compat.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; @@ -289,7 +291,7 @@ static int pcie_dw_addr_valid(pci_dev_t d, int first_busno) * * Return: 0 on success */ -static int pcie_dw_ti_read_config(struct udevice *bus, pci_dev_t bdf, +static int pcie_dw_ti_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_ecam_generic.c b/drivers/pci/pcie_ecam_generic.c index 00644edd26..c875f3a5b7 100644 --- a/drivers/pci/pcie_ecam_generic.c +++ b/drivers/pci/pcie_ecam_generic.c @@ -35,8 +35,9 @@ struct generic_ecam_pcie { * code. Otherwise the address to access will be written to the pointer pointed * to by @paddress. */ -static int pci_generic_ecam_conf_address(struct udevice *bus, pci_dev_t bdf, - uint offset, void **paddress) +static int pci_generic_ecam_conf_address(const struct udevice *bus, + pci_dev_t bdf, uint offset, + void **paddress) { struct generic_ecam_pcie *pcie = dev_get_priv(bus); void *addr; @@ -63,9 +64,9 @@ static int pci_generic_ecam_conf_address(struct udevice *bus, pci_dev_t bdf, * space of the device identified by the bus, device & function numbers in @bdf * on the PCI bus @bus. */ -static int pci_generic_ecam_read_config(struct udevice *bus, pci_dev_t bdf, - uint offset, ulong *valuep, - enum pci_size_t size) +static int pci_generic_ecam_read_config(const struct udevice *bus, + pci_dev_t bdf, uint offset, + ulong *valuep, enum pci_size_t size) { return pci_generic_mmap_read_config(bus, pci_generic_ecam_conf_address, bdf, offset, valuep, size); diff --git a/drivers/pci/pcie_fsl.c b/drivers/pci/pcie_fsl.c index ab25aeee73..dc994b748a 100644 --- a/drivers/pci/pcie_fsl.c +++ b/drivers/pci/pcie_fsl.c @@ -15,6 +15,7 @@ #include <asm/fsl_serdes.h> #include <asm/io.h> #include "pcie_fsl.h" +#include <dm/device_compat.h> LIST_HEAD(fsl_pcie_list); @@ -42,7 +43,7 @@ static int fsl_pcie_addr_valid(struct fsl_pcie *pcie, pci_dev_t bdf) return 0; } -static int fsl_pcie_read_config(struct udevice *bus, pci_dev_t bdf, +static int fsl_pcie_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_imx.c b/drivers/pci/pcie_imx.c index 3621636cb2..f34a157902 100644 --- a/drivers/pci/pcie_imx.c +++ b/drivers/pci/pcie_imx.c @@ -11,6 +11,7 @@ #include <common.h> #include <init.h> +#include <malloc.h> #include <pci.h> #include <asm/arch/clock.h> #include <asm/arch/iomux.h> @@ -748,7 +749,7 @@ void pci_init_board(void) imx_pcie_init(); } #else -static int imx_pcie_dm_read_config(struct udevice *dev, pci_dev_t bdf, +static int imx_pcie_dm_read_config(const struct udevice *dev, pci_dev_t bdf, uint offset, ulong *value, enum pci_size_t size) { diff --git a/drivers/pci/pcie_intel_fpga.c b/drivers/pci/pcie_intel_fpga.c index a5ea4888f3..6a9f29c5c8 100644 --- a/drivers/pci/pcie_intel_fpga.c +++ b/drivers/pci/pcie_intel_fpga.c @@ -10,6 +10,7 @@ #include <dm.h> #include <pci.h> #include <asm/io.h> +#include <dm/device_compat.h> #define RP_TX_REG0 0x2000 #define RP_TX_CNTRL 0x2004 @@ -226,7 +227,7 @@ static int tlp_cfg_dword_write(struct intel_fpga_pcie *pcie, pci_dev_t bdf, return tlp_read_packet(pcie, NULL); } -int intel_fpga_rp_conf_addr(struct udevice *bus, pci_dev_t bdf, +int intel_fpga_rp_conf_addr(const struct udevice *bus, pci_dev_t bdf, uint offset, void **paddress) { struct intel_fpga_pcie *pcie = dev_get_priv(bus); @@ -326,7 +327,7 @@ static int _pcie_intel_fpga_write_config(struct intel_fpga_pcie *pcie, byte_en, data); } -static int pcie_intel_fpga_read_config(struct udevice *bus, pci_dev_t bdf, +static int pcie_intel_fpga_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_layerscape.c b/drivers/pci/pcie_layerscape.c index 2ab67d1fc9..8b313e9278 100644 --- a/drivers/pci/pcie_layerscape.c +++ b/drivers/pci/pcie_layerscape.c @@ -243,7 +243,7 @@ static int ls_pcie_addr_valid(struct ls_pcie *pcie, pci_dev_t bdf) return 0; } -int ls_pcie_conf_address(struct udevice *bus, pci_dev_t bdf, +int ls_pcie_conf_address(const struct udevice *bus, pci_dev_t bdf, uint offset, void **paddress) { struct ls_pcie *pcie = dev_get_priv(bus); @@ -271,7 +271,7 @@ int ls_pcie_conf_address(struct udevice *bus, pci_dev_t bdf, return 0; } -static int ls_pcie_read_config(struct udevice *bus, pci_dev_t bdf, +static int ls_pcie_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_layerscape_gen4.c b/drivers/pci/pcie_layerscape_gen4.c index 1fd8761bbc..cec61fa7d6 100644 --- a/drivers/pci/pcie_layerscape_gen4.c +++ b/drivers/pci/pcie_layerscape_gen4.c @@ -227,7 +227,7 @@ void *ls_pcie_g4_conf_address(struct ls_pcie_g4 *pcie, pci_dev_t bdf, return pcie->cfg + offset; } -static int ls_pcie_g4_read_config(struct udevice *bus, pci_dev_t bdf, +static int ls_pcie_g4_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_mediatek.c b/drivers/pci/pcie_mediatek.c index a0dcb258b0..d8a32d53f6 100644 --- a/drivers/pci/pcie_mediatek.c +++ b/drivers/pci/pcie_mediatek.c @@ -11,9 +11,11 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <pci.h> #include <reset.h> #include <asm/io.h> +#include <dm/devres.h> #include <linux/iopoll.h> #include <linux/list.h> @@ -66,7 +68,7 @@ struct mtk_pcie { struct list_head ports; }; -static int mtk_pcie_config_address(struct udevice *udev, pci_dev_t bdf, +static int mtk_pcie_config_address(const struct udevice *udev, pci_dev_t bdf, uint offset, void **paddress) { struct mtk_pcie *pcie = dev_get_priv(udev); @@ -77,7 +79,7 @@ static int mtk_pcie_config_address(struct udevice *udev, pci_dev_t bdf, return 0; } -static int mtk_pcie_read_config(struct udevice *bus, pci_dev_t bdf, +static int mtk_pcie_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_phytium.c b/drivers/pci/pcie_phytium.c index 92e281e7c2..51b2171f9f 100644 --- a/drivers/pci/pcie_phytium.c +++ b/drivers/pci/pcie_phytium.c @@ -75,9 +75,8 @@ static int phytium_pci_skip_dev(pci_dev_t parent) * code. Otherwise the address to access will be written to the pointer pointed * to by @paddress. */ -static int pci_phytium_conf_address(struct udevice *bus, pci_dev_t bdf, - uint offset, - void **paddress) +static int pci_phytium_conf_address(const struct udevice *bus, pci_dev_t bdf, + uint offset, void **paddress) { struct phytium_pcie *pcie = dev_get_priv(bus); void *addr; @@ -119,7 +118,7 @@ static int pci_phytium_conf_address(struct udevice *bus, pci_dev_t bdf, * space of the device identified by the bus, device & function numbers in @bdf * on the PCI bus @bus. */ -static int pci_phytium_read_config(struct udevice *bus, pci_dev_t bdf, +static int pci_phytium_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/pci/pcie_xilinx.c b/drivers/pci/pcie_xilinx.c index 44a5f1e1f4..05787ae144 100644 --- a/drivers/pci/pcie_xilinx.c +++ b/drivers/pci/pcie_xilinx.c @@ -54,7 +54,7 @@ static bool pcie_xilinx_link_up(struct xilinx_pcie *pcie) * * Return: 0 on success, else -ENODEV */ -static int pcie_xilinx_config_address(struct udevice *udev, pci_dev_t bdf, +static int pcie_xilinx_config_address(const struct udevice *udev, pci_dev_t bdf, uint offset, void **paddress) { struct xilinx_pcie *pcie = dev_get_priv(udev); @@ -97,7 +97,7 @@ static int pcie_xilinx_config_address(struct udevice *udev, pci_dev_t bdf, * * Return: 0 on success, else -ENODEV or -EINVAL */ -static int pcie_xilinx_read_config(struct udevice *bus, pci_dev_t bdf, +static int pcie_xilinx_read_config(const struct udevice *bus, pci_dev_t bdf, uint offset, ulong *valuep, enum pci_size_t size) { diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c index f7309057b9..612c428cf5 100644 --- a/drivers/phy/allwinner/phy-sun4i-usb.c +++ b/drivers/phy/allwinner/phy-sun4i-usb.c @@ -21,6 +21,8 @@ #include <asm/io.h> #include <asm/arch/clock.h> #include <asm/arch/cpu.h> +#include <dm/device_compat.h> +#include <linux/err.h> #define REG_ISCR 0x00 #define REG_PHYCTL_A10 0x04 diff --git a/drivers/phy/bcm6318-usbh-phy.c b/drivers/phy/bcm6318-usbh-phy.c index de055a3585..2de343de29 100644 --- a/drivers/phy/bcm6318-usbh-phy.c +++ b/drivers/phy/bcm6318-usbh-phy.c @@ -11,6 +11,7 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <power-domain.h> #include <reset.h> #include <asm/io.h> diff --git a/drivers/phy/bcm6348-usbh-phy.c b/drivers/phy/bcm6348-usbh-phy.c index e7761e3b28..ed9f02b375 100644 --- a/drivers/phy/bcm6348-usbh-phy.c +++ b/drivers/phy/bcm6348-usbh-phy.c @@ -11,6 +11,7 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <reset.h> #include <asm/io.h> #include <dm/device.h> diff --git a/drivers/phy/bcm6358-usbh-phy.c b/drivers/phy/bcm6358-usbh-phy.c index 189a1c11d3..f0fda0290e 100644 --- a/drivers/phy/bcm6358-usbh-phy.c +++ b/drivers/phy/bcm6358-usbh-phy.c @@ -10,6 +10,7 @@ #include <common.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <reset.h> #include <asm/io.h> #include <dm/device.h> diff --git a/drivers/phy/bcm6368-usbh-phy.c b/drivers/phy/bcm6368-usbh-phy.c index 99da97aa0c..53d1f45bb9 100644 --- a/drivers/phy/bcm6368-usbh-phy.c +++ b/drivers/phy/bcm6368-usbh-phy.c @@ -11,6 +11,7 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <power-domain.h> #include <reset.h> #include <asm/io.h> diff --git a/drivers/phy/marvell/comphy_core.c b/drivers/phy/marvell/comphy_core.c index 9c24692629..244beef18d 100644 --- a/drivers/phy/marvell/comphy_core.c +++ b/drivers/phy/marvell/comphy_core.c @@ -8,6 +8,8 @@ #include <common.h> #include <dm.h> #include <fdtdec.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/errno.h> #include <asm/io.h> diff --git a/drivers/phy/meson-g12a-usb2.c b/drivers/phy/meson-g12a-usb2.c index ad1a77fcfc..c23bc87d0f 100644 --- a/drivers/phy/meson-g12a-usb2.c +++ b/drivers/phy/meson-g12a-usb2.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <bitfield.h> #include <dm.h> diff --git a/drivers/phy/meson-g12a-usb3-pcie.c b/drivers/phy/meson-g12a-usb3-pcie.c index 920675dc99..82655f26dd 100644 --- a/drivers/phy/meson-g12a-usb3-pcie.c +++ b/drivers/phy/meson-g12a-usb3-pcie.c @@ -10,6 +10,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <regmap.h> #include <errno.h> #include <asm/io.h> diff --git a/drivers/phy/meson-gxl-usb2.c b/drivers/phy/meson-gxl-usb2.c index 86e69c73ba..c98d12b627 100644 --- a/drivers/phy/meson-gxl-usb2.c +++ b/drivers/phy/meson-gxl-usb2.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <bitfield.h> #include <dm.h> diff --git a/drivers/phy/meson-gxl-usb3.c b/drivers/phy/meson-gxl-usb3.c index 5cbbd4d8f7..c2a8593b39 100644 --- a/drivers/phy/meson-gxl-usb3.c +++ b/drivers/phy/meson-gxl-usb3.c @@ -8,6 +8,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <bitfield.h> #include <dm.h> diff --git a/drivers/phy/omap-usb2-phy.c b/drivers/phy/omap-usb2-phy.c index 923f2c105d..160a386801 100644 --- a/drivers/phy/omap-usb2-phy.c +++ b/drivers/phy/omap-usb2-phy.c @@ -13,6 +13,7 @@ #include <generic-phy.h> #include <regmap.h> #include <syscon.h> +#include <linux/err.h> #define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT BIT(0) diff --git a/drivers/phy/phy-mtk-tphy.c b/drivers/phy/phy-mtk-tphy.c index fd33062ae4..bd089b7a43 100644 --- a/drivers/phy/phy-mtk-tphy.c +++ b/drivers/phy/phy-mtk-tphy.c @@ -9,8 +9,11 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <mapmem.h> #include <asm/io.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dt-bindings/phy/phy.h> diff --git a/drivers/phy/phy-rcar-gen2.c b/drivers/phy/phy-rcar-gen2.c index ee70b81d88..e93130aee6 100644 --- a/drivers/phy/phy-rcar-gen2.c +++ b/drivers/phy/phy-rcar-gen2.c @@ -11,10 +11,12 @@ #include <dm.h> #include <fdtdec.h> #include <generic-phy.h> +#include <malloc.h> #include <reset.h> #include <syscon.h> #include <usb.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <power/regulator.h> diff --git a/drivers/phy/phy-rcar-gen3.c b/drivers/phy/phy-rcar-gen3.c index b662935626..ce39cd8f9e 100644 --- a/drivers/phy/phy-rcar-gen3.c +++ b/drivers/phy/phy-rcar-gen3.c @@ -11,6 +11,7 @@ #include <dm.h> #include <fdtdec.h> #include <generic-phy.h> +#include <malloc.h> #include <reset.h> #include <syscon.h> #include <usb.h> diff --git a/drivers/phy/phy-stm32-usbphyc.c b/drivers/phy/phy-stm32-usbphyc.c index 6f1119036d..6ba37213cb 100644 --- a/drivers/phy/phy-stm32-usbphyc.c +++ b/drivers/phy/phy-stm32-usbphyc.c @@ -13,6 +13,7 @@ #include <syscon.h> #include <usb.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <power/regulator.h> diff --git a/drivers/phy/phy-ti-am654.c b/drivers/phy/phy-ti-am654.c index 39490124ea..0b2b2410b2 100644 --- a/drivers/phy/phy-ti-am654.c +++ b/drivers/phy/phy-ti-am654.c @@ -10,6 +10,7 @@ #include <clk-uclass.h> #include <dm.h> #include <dm/device.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dt-bindings/phy/phy.h> #include <generic-phy.h> @@ -18,6 +19,7 @@ #include <power-domain.h> #include <regmap.h> #include <syscon.h> +#include <linux/err.h> #define CMU_R07C 0x7c #define CMU_MASTER_CDN_O BIT(24) diff --git a/drivers/phy/ti-pipe3-phy.c b/drivers/phy/ti-pipe3-phy.c index 0c59552bb8..7fc36319cb 100644 --- a/drivers/phy/ti-pipe3-phy.c +++ b/drivers/phy/ti-pipe3-phy.c @@ -12,6 +12,7 @@ #include <asm/arch/sys_proto.h> #include <syscon.h> #include <regmap.h> +#include <linux/err.h> /* PLLCTRL Registers */ #define PLL_STATUS 0x00000004 diff --git a/drivers/pinctrl/broadcom/pinctrl-bcm6838.c b/drivers/pinctrl/broadcom/pinctrl-bcm6838.c index 48c0b6b374..6c8a990f57 100644 --- a/drivers/pinctrl/broadcom/pinctrl-bcm6838.c +++ b/drivers/pinctrl/broadcom/pinctrl-bcm6838.c @@ -4,6 +4,7 @@ #include <dm.h> #include <regmap.h> #include <syscon.h> +#include <dm/device_compat.h> #include <dm/pinctrl.h> #define BCM6838_CMD_LOAD_MUX 0x21 diff --git a/drivers/pinctrl/intel/pinctrl.c b/drivers/pinctrl/intel/pinctrl.c index f4cc55aa3b..e280054f94 100644 --- a/drivers/pinctrl/intel/pinctrl.c +++ b/drivers/pinctrl/intel/pinctrl.c @@ -19,6 +19,7 @@ #include <common.h> #include <dm.h> #include <irq.h> +#include <malloc.h> #include <p2sb.h> #include <spl.h> #include <asm-generic/gpio.h> @@ -28,6 +29,7 @@ #include <asm/itss.h> #include <dm/device-internal.h> #include <dt-bindings/gpio/gpio.h> +#include <linux/err.h> #define GPIO_DW_SIZE(x) (sizeof(u32) * (x)) #define PAD_CFG_OFFSET(x, dw_num) ((x) + GPIO_DW_SIZE(dw_num)) diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c index f664d76b54..7fbe2810a2 100644 --- a/drivers/pinctrl/meson/pinctrl-meson.c +++ b/drivers/pinctrl/meson/pinctrl-meson.c @@ -5,7 +5,9 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dm/pinctrl.h> #include <fdt_support.h> diff --git a/drivers/pinctrl/mscc/mscc-common.c b/drivers/pinctrl/mscc/mscc-common.c index bd3e6ea328..90c54b45c3 100644 --- a/drivers/pinctrl/mscc/mscc-common.c +++ b/drivers/pinctrl/mscc/mscc-common.c @@ -14,6 +14,8 @@ #include <config.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <dm/pinctrl.h> #include <dm/root.h> diff --git a/drivers/pinctrl/mtmips/pinctrl-mtmips-common.c b/drivers/pinctrl/mtmips/pinctrl-mtmips-common.c index ee6a9d1fc8..e361916eb2 100644 --- a/drivers/pinctrl/mtmips/pinctrl-mtmips-common.c +++ b/drivers/pinctrl/mtmips/pinctrl-mtmips-common.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/pinctrl.h> #include <linux/io.h> diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c index f197f4a142..6e0bcae991 100644 --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c @@ -19,7 +19,10 @@ #include <common.h> #include <config.h> #include <dm.h> +#include <malloc.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <dm/pinctrl.h> #include <dm/root.h> diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 69c4144365..474c38a049 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -4,7 +4,10 @@ */ #include <common.h> +#include <malloc.h> #include <mapmem.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/io.h> #include <linux/err.h> #include <dm.h> diff --git a/drivers/pinctrl/nxp/pinctrl-mxs.c b/drivers/pinctrl/nxp/pinctrl-mxs.c index 6f6ca84674..8d61dfe863 100644 --- a/drivers/pinctrl/nxp/pinctrl-mxs.c +++ b/drivers/pinctrl/nxp/pinctrl-mxs.c @@ -5,6 +5,8 @@ */ #include <common.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/io.h> #include <linux/err.h> #include <dm.h> diff --git a/drivers/pinctrl/pinctrl-generic.c b/drivers/pinctrl/pinctrl-generic.c index eecf0f5dc1..1098366b5f 100644 --- a/drivers/pinctrl/pinctrl-generic.c +++ b/drivers/pinctrl/pinctrl-generic.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/compat.h> #include <dm/pinctrl.h> diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 1dfc97dcea..380b0da271 100644 --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <dm/pinctrl.h> #include <linux/libfdt.h> #include <asm/io.h> diff --git a/drivers/pinctrl/pinctrl-stmfx.c b/drivers/pinctrl/pinctrl-stmfx.c index 0b5a0433cd..c8e61e2918 100644 --- a/drivers/pinctrl/pinctrl-stmfx.c +++ b/drivers/pinctrl/pinctrl-stmfx.c @@ -11,6 +11,7 @@ #include <asm/gpio.h> #include <dm/device.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dm/pinctrl.h> #include <linux/bitfield.h> diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c index 3425ed11b1..aba8810474 100644 --- a/drivers/pinctrl/pinctrl-uclass.c +++ b/drivers/pinctrl/pinctrl-uclass.c @@ -4,6 +4,8 @@ */ #include <common.h> +#include <malloc.h> +#include <dm/device_compat.h> #include <linux/libfdt.h> #include <linux/err.h> #include <linux/list.h> diff --git a/drivers/pinctrl/pinctrl_stm32.c b/drivers/pinctrl/pinctrl_stm32.c index 3a235ae5a7..9926235b52 100644 --- a/drivers/pinctrl/pinctrl_stm32.c +++ b/drivers/pinctrl/pinctrl_stm32.c @@ -1,11 +1,14 @@ #include <common.h> #include <dm.h> #include <hwspinlock.h> +#include <malloc.h> #include <asm/arch/gpio.h> #include <asm/gpio.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dm/pinctrl.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/pinctrl/renesas/pfc.c b/drivers/pinctrl/renesas/pfc.c index 5ec560ec0f..ab64f4f0c8 100644 --- a/drivers/pinctrl/renesas/pfc.c +++ b/drivers/pinctrl/renesas/pfc.c @@ -14,6 +14,8 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/pinctrl.h> #include <linux/io.h> #include <linux/sizes.h> diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c index a5935e84de..abeba965c4 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-core.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/io.h> #include <linux/err.h> #include <linux/kernel.h> diff --git a/drivers/power/acpi_pmc/pmc_emul.c b/drivers/power/acpi_pmc/pmc_emul.c index 15cc7acaf3..dfff335e54 100644 --- a/drivers/power/acpi_pmc/pmc_emul.c +++ b/drivers/power/acpi_pmc/pmc_emul.c @@ -42,7 +42,7 @@ struct pmc_emul_priv { u8 regs[MEMMAP_SIZE]; }; -static int sandbox_pmc_emul_read_config(struct udevice *emul, uint offset, +static int sandbox_pmc_emul_read_config(const struct udevice *emul, uint offset, ulong *valuep, enum pci_size_t size) { struct pmc_emul_platdata *plat = dev_get_platdata(emul); diff --git a/drivers/power/domain/bcm6328-power-domain.c b/drivers/power/domain/bcm6328-power-domain.c index a90b2c83df..a6426bee27 100644 --- a/drivers/power/domain/bcm6328-power-domain.c +++ b/drivers/power/domain/bcm6328-power-domain.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <asm/io.h> @@ -62,7 +63,7 @@ static const struct udevice_id bcm6328_power_domain_ids[] = { }; struct power_domain_ops bcm6328_power_domain_ops = { - .free = bcm6328_power_domain_free, + .rfree = bcm6328_power_domain_free, .off = bcm6328_power_domain_off, .on = bcm6328_power_domain_on, .request = bcm6328_power_domain_request, diff --git a/drivers/power/domain/imx8-power-domain-legacy.c b/drivers/power/domain/imx8-power-domain-legacy.c index d51dbaa6c0..6f01a60b34 100644 --- a/drivers/power/domain/imx8-power-domain-legacy.c +++ b/drivers/power/domain/imx8-power-domain-legacy.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <asm/io.h> #include <asm/arch/power-domain.h> @@ -296,7 +297,7 @@ static const struct udevice_id imx8_power_domain_ids[] = { struct power_domain_ops imx8_power_domain_ops = { .request = imx8_power_domain_request, - .free = imx8_power_domain_free, + .rfree = imx8_power_domain_free, .on = imx8_power_domain_on, .off = imx8_power_domain_off, .of_xlate = imx8_power_domain_of_xlate, diff --git a/drivers/power/domain/imx8-power-domain.c b/drivers/power/domain/imx8-power-domain.c index aa768365b4..571146e19d 100644 --- a/drivers/power/domain/imx8-power-domain.c +++ b/drivers/power/domain/imx8-power-domain.c @@ -6,6 +6,7 @@ #define DEBUG #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <asm/arch/power-domain.h> #include <asm/arch/sci/sci.h> @@ -73,7 +74,7 @@ static const struct udevice_id imx8_power_domain_ids[] = { struct power_domain_ops imx8_power_domain_ops_v2 = { .request = imx8_power_domain_request, - .free = imx8_power_domain_free, + .rfree = imx8_power_domain_free, .on = imx8_power_domain_on, .off = imx8_power_domain_off, }; diff --git a/drivers/power/domain/imx8m-power-domain.c b/drivers/power/domain/imx8m-power-domain.c index 40ece9ee3f..5b6467cda7 100644 --- a/drivers/power/domain/imx8m-power-domain.c +++ b/drivers/power/domain/imx8m-power-domain.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <asm/io.h> #include <asm/arch/power-domain.h> @@ -121,7 +122,7 @@ static const struct udevice_id imx8m_power_domain_ids[] = { struct power_domain_ops imx8m_power_domain_ops = { .request = imx8m_power_domain_request, - .free = imx8m_power_domain_free, + .rfree = imx8m_power_domain_free, .on = imx8m_power_domain_on, .off = imx8m_power_domain_off, .of_xlate = imx8m_power_domain_of_xlate, diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c index 21d4c9d4dd..7082c80bfa 100644 --- a/drivers/power/domain/meson-ee-pwrc.c +++ b/drivers/power/domain/meson-ee-pwrc.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <regmap.h> #include <syscon.h> @@ -13,6 +14,7 @@ #include <clk.h> #include <dt-bindings/power/meson-g12a-power.h> #include <dt-bindings/power/meson-sm1-power.h> +#include <linux/err.h> /* AO Offsets */ @@ -352,7 +354,7 @@ static int meson_ee_pwrc_of_xlate(struct power_domain *power_domain, } struct power_domain_ops meson_ee_pwrc_ops = { - .free = meson_ee_pwrc_free, + .rfree = meson_ee_pwrc_free, .off = meson_ee_pwrc_off, .on = meson_ee_pwrc_on, .request = meson_ee_pwrc_request, diff --git a/drivers/power/domain/meson-gx-pwrc-vpu.c b/drivers/power/domain/meson-gx-pwrc-vpu.c index f44e33bacb..12cdfcdd1f 100644 --- a/drivers/power/domain/meson-gx-pwrc-vpu.c +++ b/drivers/power/domain/meson-gx-pwrc-vpu.c @@ -8,11 +8,13 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <regmap.h> #include <syscon.h> #include <reset.h> #include <clk.h> +#include <linux/err.h> enum { VPU_PWRC_COMPATIBLE_GX = 0, @@ -269,7 +271,7 @@ static int meson_pwrc_vpu_of_xlate(struct power_domain *power_domain, } struct power_domain_ops meson_gx_pwrc_vpu_ops = { - .free = meson_pwrc_vpu_free, + .rfree = meson_pwrc_vpu_free, .off = meson_pwrc_vpu_off, .on = meson_pwrc_vpu_on, .request = meson_pwrc_vpu_request, diff --git a/drivers/power/domain/mtk-power-domain.c b/drivers/power/domain/mtk-power-domain.c index 0bf8a16447..3ff7ca1bef 100644 --- a/drivers/power/domain/mtk-power-domain.c +++ b/drivers/power/domain/mtk-power-domain.c @@ -7,11 +7,13 @@ #include <clk.h> #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <regmap.h> #include <syscon.h> #include <asm/io.h> #include <asm/processor.h> +#include <linux/err.h> #include <linux/iopoll.h> #include <dt-bindings/power/mt7623-power.h> @@ -396,7 +398,7 @@ static const struct udevice_id mtk_power_domain_ids[] = { }; struct power_domain_ops mtk_power_domain_ops = { - .free = scpsys_power_free, + .rfree = scpsys_power_free, .off = scpsys_power_off, .on = scpsys_power_on, .request = scpsys_power_request, diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c index 80df5aff50..d9c623b56e 100644 --- a/drivers/power/domain/power-domain-uclass.c +++ b/drivers/power/domain/power-domain-uclass.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain.h> #include <power-domain-uclass.h> #include <dm/device-internal.h> @@ -87,7 +88,7 @@ int power_domain_free(struct power_domain *power_domain) debug("%s(power_domain=%p)\n", __func__, power_domain); - return ops->free(power_domain); + return ops->rfree(power_domain); } int power_domain_on(struct power_domain *power_domain) diff --git a/drivers/power/domain/sandbox-power-domain-test.c b/drivers/power/domain/sandbox-power-domain-test.c index 148b6b1707..2191a94146 100644 --- a/drivers/power/domain/sandbox-power-domain-test.c +++ b/drivers/power/domain/sandbox-power-domain-test.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain.h> #include <asm/io.h> #include <asm/power-domain.h> diff --git a/drivers/power/domain/sandbox-power-domain.c b/drivers/power/domain/sandbox-power-domain.c index 74db2eba7e..3a834a9f1e 100644 --- a/drivers/power/domain/sandbox-power-domain.c +++ b/drivers/power/domain/sandbox-power-domain.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <power-domain-uclass.h> #include <asm/io.h> #include <asm/power-domain.h> @@ -75,7 +76,7 @@ static const struct udevice_id sandbox_power_domain_ids[] = { struct power_domain_ops sandbox_power_domain_ops = { .request = sandbox_power_domain_request, - .free = sandbox_power_domain_free, + .rfree = sandbox_power_domain_free, .on = sandbox_power_domain_on, .off = sandbox_power_domain_off, }; diff --git a/drivers/power/domain/tegra186-power-domain.c b/drivers/power/domain/tegra186-power-domain.c index f344558227..e87244197f 100644 --- a/drivers/power/domain/tegra186-power-domain.c +++ b/drivers/power/domain/tegra186-power-domain.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <misc.h> #include <power-domain-uclass.h> #include <asm/arch-tegra/bpmp_abi.h> @@ -71,7 +72,7 @@ static int tegra186_power_domain_off(struct power_domain *power_domain) struct power_domain_ops tegra186_power_domain_ops = { .request = tegra186_power_domain_request, - .free = tegra186_power_domain_free, + .rfree = tegra186_power_domain_free, .on = tegra186_power_domain_on, .off = tegra186_power_domain_off, }; diff --git a/drivers/power/domain/ti-sci-power-domain.c b/drivers/power/domain/ti-sci-power-domain.c index 4c4351d2d9..a5866703ae 100644 --- a/drivers/power/domain/ti-sci-power-domain.c +++ b/drivers/power/domain/ti-sci-power-domain.c @@ -11,7 +11,10 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <power-domain-uclass.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> #include <dt-bindings/soc/ti,sci_pm_domain.h> @@ -120,7 +123,7 @@ static const struct udevice_id ti_sci_power_domain_of_match[] = { static struct power_domain_ops ti_sci_power_domain_ops = { .request = ti_sci_power_domain_request, - .free = ti_sci_power_domain_free, + .rfree = ti_sci_power_domain_free, .on = ti_sci_power_domain_on, .off = ti_sci_power_domain_off, .of_xlate = ti_sci_power_domain_of_xlate, diff --git a/drivers/power/pmic/fan53555.c b/drivers/power/pmic/fan53555.c index 11304d2146..a5f855ce2a 100644 --- a/drivers/power/pmic/fan53555.c +++ b/drivers/power/pmic/fan53555.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <i2c.h> #include <power/fan53555.h> diff --git a/drivers/power/pmic/i2c_pmic_emul.c b/drivers/power/pmic/i2c_pmic_emul.c index 80efc0265d..86d7b89b1f 100644 --- a/drivers/power/pmic/i2c_pmic_emul.c +++ b/drivers/power/pmic/i2c_pmic_emul.c @@ -8,6 +8,7 @@ #include <errno.h> #include <dm.h> #include <i2c.h> +#include <malloc.h> #include <power/pmic.h> #include <power/sandbox_pmic.h> @@ -105,12 +106,21 @@ static int sandbox_i2c_pmic_ofdata_to_platdata(struct udevice *emul) { struct sandbox_i2c_pmic_plat_data *plat = dev_get_platdata(emul); struct udevice *pmic_dev = i2c_emul_get_device(emul); - struct uc_pmic_priv *priv = dev_get_uclass_priv(pmic_dev); - const u8 *reg_defaults; debug("%s:%d Setting PMIC default registers\n", __func__, __LINE__); plat->reg_count = pmic_reg_count(pmic_dev); - plat->trans_len = priv->trans_len; + + return 0; +} + +static int sandbox_i2c_pmic_probe(struct udevice *emul) +{ + struct sandbox_i2c_pmic_plat_data *plat = dev_get_platdata(emul); + struct udevice *pmic_dev = i2c_emul_get_device(emul); + struct uc_pmic_priv *upriv = dev_get_uclass_priv(pmic_dev); + const u8 *reg_defaults; + + plat->trans_len = upriv->trans_len; plat->buf_size = plat->reg_count * plat->trans_len; plat->reg = calloc(1, plat->buf_size); @@ -149,6 +159,7 @@ U_BOOT_DRIVER(sandbox_i2c_pmic_emul) = { .id = UCLASS_I2C_EMUL, .of_match = sandbox_i2c_pmic_ids, .ofdata_to_platdata = sandbox_i2c_pmic_ofdata_to_platdata, + .probe = sandbox_i2c_pmic_probe, .platdata_auto_alloc_size = sizeof(struct sandbox_i2c_pmic_plat_data), .ops = &sandbox_i2c_pmic_emul_ops, }; diff --git a/drivers/power/pmic/stpmic1.c b/drivers/power/pmic/stpmic1.c index 2297af4157..2c85410b1b 100644 --- a/drivers/power/pmic/stpmic1.c +++ b/drivers/power/pmic/stpmic1.c @@ -11,6 +11,7 @@ #include <sysreset.h> #include <time.h> #include <dm/device.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <power/pmic.h> #include <power/stpmic1.h> diff --git a/drivers/power/regulator/pbias_regulator.c b/drivers/power/regulator/pbias_regulator.c index 88dc9f273a..60255eeab0 100644 --- a/drivers/power/regulator/pbias_regulator.c +++ b/drivers/power/regulator/pbias_regulator.c @@ -7,6 +7,7 @@ #include <common.h> #include <errno.h> #include <dm.h> +#include <linux/err.h> #include <power/pmic.h> #include <power/regulator.h> #include <regmap.h> diff --git a/drivers/power/regulator/pwm_regulator.c b/drivers/power/regulator/pwm_regulator.c index cd05c9b603..4030144dd3 100644 --- a/drivers/power/regulator/pwm_regulator.c +++ b/drivers/power/regulator/pwm_regulator.c @@ -11,6 +11,7 @@ #include <dm.h> #include <errno.h> #include <pwm.h> +#include <dm/device_compat.h> #include <power/regulator.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/power/regulator/stm32-vrefbuf.c b/drivers/power/regulator/stm32-vrefbuf.c index 645528e84e..08a10f05b4 100644 --- a/drivers/power/regulator/stm32-vrefbuf.c +++ b/drivers/power/regulator/stm32-vrefbuf.c @@ -10,6 +10,7 @@ #include <clk.h> #include <dm.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #include <linux/kernel.h> #include <power/regulator.h> diff --git a/drivers/power/regulator/tps62360_regulator.c b/drivers/power/regulator/tps62360_regulator.c index 2c076c0db5..ce54495490 100644 --- a/drivers/power/regulator/tps62360_regulator.c +++ b/drivers/power/regulator/tps62360_regulator.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <i2c.h> +#include <dm/device_compat.h> #include <power/regulator.h> #define TPS62360_REG_SET0 0 diff --git a/drivers/ram/imxrt_sdram.c b/drivers/ram/imxrt_sdram.c index af7400be82..ac15e94f00 100644 --- a/drivers/ram/imxrt_sdram.c +++ b/drivers/ram/imxrt_sdram.c @@ -9,6 +9,7 @@ #include <dm.h> #include <ram.h> #include <asm/io.h> +#include <linux/err.h> /* SDRAM Command Code */ #define SD_CC_ARD 0x0 /* Master Bus (AXI) command - Read */ diff --git a/drivers/ram/k3-am654-ddrss.c b/drivers/ram/k3-am654-ddrss.c index 7015d8cfe7..8cf74861a8 100644 --- a/drivers/ram/k3-am654-ddrss.c +++ b/drivers/ram/k3-am654-ddrss.c @@ -14,6 +14,7 @@ #include <power-domain.h> #include <dm.h> #include <asm/arch/sys_proto.h> +#include <dm/device_compat.h> #include <power/regulator.h> #include "k3-am654-ddrss.h" diff --git a/drivers/ram/k3-j721e/k3-j721e-ddrss.c b/drivers/ram/k3-j721e/k3-j721e-ddrss.c index a9b7d40890..352483c4d7 100644 --- a/drivers/ram/k3-j721e/k3-j721e-ddrss.c +++ b/drivers/ram/k3-j721e/k3-j721e-ddrss.c @@ -13,6 +13,7 @@ #include <asm/io.h> #include <power-domain.h> #include <wait_bit.h> +#include <dm/device_compat.h> #include "lpddr4_obj_if.h" #include "lpddr4_if.h" diff --git a/drivers/ram/rockchip/dmc-rk3368.c b/drivers/ram/rockchip/dmc-rk3368.c index 8addee8cc3..2d82a176db 100644 --- a/drivers/ram/rockchip/dmc-rk3368.c +++ b/drivers/ram/rockchip/dmc-rk3368.c @@ -19,6 +19,7 @@ #include <asm/arch-rockchip/ddr_rk3368.h> #include <asm/arch-rockchip/sdram.h> #include <asm/arch-rockchip/sdram_rk3288.h> +#include <linux/err.h> struct dram_info { struct ram_info info; diff --git a/drivers/ram/stm32_sdram.c b/drivers/ram/stm32_sdram.c index f6cac8eb90..2d03333b1b 100644 --- a/drivers/ram/stm32_sdram.c +++ b/drivers/ram/stm32_sdram.c @@ -9,6 +9,7 @@ #include <dm.h> #include <ram.h> #include <asm/io.h> +#include <dm/device_compat.h> #define MEM_MODE_MASK GENMASK(2, 0) #define SWP_FMC_OFFSET 10 diff --git a/drivers/remoteproc/k3_system_controller.c b/drivers/remoteproc/k3_system_controller.c index 44e56c759f..88430299c9 100644 --- a/drivers/remoteproc/k3_system_controller.c +++ b/drivers/remoteproc/k3_system_controller.c @@ -11,6 +11,7 @@ #include <remoteproc.h> #include <errno.h> #include <mailbox.h> +#include <dm/device_compat.h> #include <linux/soc/ti/k3-sec-proxy.h> #define K3_MSG_R5_TO_M3_M3FW 0x8105 diff --git a/drivers/remoteproc/rproc-elf-loader.c b/drivers/remoteproc/rproc-elf-loader.c index d234592445..f2e033aa74 100644 --- a/drivers/remoteproc/rproc-elf-loader.c +++ b/drivers/remoteproc/rproc-elf-loader.c @@ -7,6 +7,8 @@ #include <dm.h> #include <elf.h> #include <remoteproc.h> +#include <dm/device_compat.h> +#include <linux/compat.h> /** * struct resource_table - firmware resource table header diff --git a/drivers/remoteproc/stm32_copro.c b/drivers/remoteproc/stm32_copro.c index c25488f54d..e9dce0d173 100644 --- a/drivers/remoteproc/stm32_copro.c +++ b/drivers/remoteproc/stm32_copro.c @@ -12,6 +12,8 @@ #include <reset.h> #include <syscon.h> #include <asm/io.h> +#include <dm/device_compat.h> +#include <linux/err.h> #define RCC_GCR_HOLD_BOOT 0 #define RCC_GCR_RELEASE_BOOT 1 diff --git a/drivers/remoteproc/ti_k3_arm64_rproc.c b/drivers/remoteproc/ti_k3_arm64_rproc.c index 3e35293514..28c6ddb691 100644 --- a/drivers/remoteproc/ti_k3_arm64_rproc.c +++ b/drivers/remoteproc/ti_k3_arm64_rproc.c @@ -15,6 +15,8 @@ #include <reset.h> #include <asm/io.h> #include <power-domain.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> #include "ti_sci_proc.h" diff --git a/drivers/remoteproc/ti_k3_dsp_rproc.c b/drivers/remoteproc/ti_k3_dsp_rproc.c index c5dc6b25da..09e050ffb2 100644 --- a/drivers/remoteproc/ti_k3_dsp_rproc.c +++ b/drivers/remoteproc/ti_k3_dsp_rproc.c @@ -9,12 +9,15 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <remoteproc.h> #include <errno.h> #include <clk.h> #include <reset.h> #include <asm/io.h> #include <power-domain.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> #include "ti_sci_proc.h" diff --git a/drivers/remoteproc/ti_k3_r5f_rproc.c b/drivers/remoteproc/ti_k3_r5f_rproc.c index ae1e4b9e04..ea56689552 100644 --- a/drivers/remoteproc/ti_k3_r5f_rproc.c +++ b/drivers/remoteproc/ti_k3_r5f_rproc.c @@ -8,11 +8,14 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <remoteproc.h> #include <errno.h> #include <clk.h> #include <reset.h> #include <asm/io.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/kernel.h> #include <linux/soc/ti/ti_sci_protocol.h> #include "ti_sci_proc.h" diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c index 753c1108a9..c1f1e7f70b 100644 --- a/drivers/reset/reset-bcm6345.c +++ b/drivers/reset/reset-bcm6345.c @@ -9,6 +9,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset-uclass.h> #include <asm/io.h> @@ -52,7 +53,7 @@ static int bcm6345_reset_request(struct reset_ctl *rst) } struct reset_ops bcm6345_reset_reset_ops = { - .free = bcm6345_reset_free, + .rfree = bcm6345_reset_free, .request = bcm6345_reset_request, .rst_assert = bcm6345_reset_assert, .rst_deassert = bcm6345_reset_deassert, diff --git a/drivers/reset/reset-hisilicon.c b/drivers/reset/reset-hisilicon.c index a9f052a0c5..a678b8f745 100644 --- a/drivers/reset/reset-hisilicon.c +++ b/drivers/reset/reset-hisilicon.c @@ -3,6 +3,7 @@ * Copyright (c) 2019, Linaro Limited */ +#include <malloc.h> #include <asm/io.h> #include <common.h> #include <dm.h> @@ -72,7 +73,7 @@ static int hisi_reset_of_xlate(struct reset_ctl *rst, static const struct reset_ops hisi_reset_reset_ops = { .of_xlate = hisi_reset_of_xlate, .request = hisi_reset_request, - .free = hisi_reset_free, + .rfree = hisi_reset_free, .rst_assert = hisi_reset_assert, .rst_deassert = hisi_reset_deassert, }; diff --git a/drivers/reset/reset-hsdk.c b/drivers/reset/reset-hsdk.c index 213d6c87be..f9a432a7a2 100644 --- a/drivers/reset/reset-hsdk.c +++ b/drivers/reset/reset-hsdk.c @@ -81,7 +81,7 @@ static int hsdk_reset_noop(struct reset_ctl *rst_ctl) static const struct reset_ops hsdk_reset_ops = { .request = hsdk_reset_noop, - .free = hsdk_reset_noop, + .rfree = hsdk_reset_noop, .rst_assert = hsdk_reset_noop, .rst_deassert = hsdk_reset_reset, }; diff --git a/drivers/reset/reset-imx7.c b/drivers/reset/reset-imx7.c index f2ca5cf801..a61855e9ed 100644 --- a/drivers/reset/reset-imx7.c +++ b/drivers/reset/reset-imx7.c @@ -3,6 +3,7 @@ * Copyright (c) 2017, Impinj, Inc. */ +#include <malloc.h> #include <asm/io.h> #include <common.h> #include <dm.h> @@ -272,7 +273,7 @@ static int imx7_reset_request(struct reset_ctl *rst) static const struct reset_ops imx7_reset_reset_ops = { .request = imx7_reset_request, - .free = imx7_reset_free, + .rfree = imx7_reset_free, .rst_assert = imx7_reset_assert, .rst_deassert = imx7_reset_deassert, }; diff --git a/drivers/reset/reset-mediatek.c b/drivers/reset/reset-mediatek.c index e3614e6e2a..6d17f52ac7 100644 --- a/drivers/reset/reset-mediatek.c +++ b/drivers/reset/reset-mediatek.c @@ -8,10 +8,12 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/lists.h> #include <regmap.h> #include <reset-uclass.h> #include <syscon.h> +#include <linux/err.h> struct mediatek_reset_priv { struct regmap *regmap; @@ -55,7 +57,7 @@ static int mediatek_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops mediatek_reset_ops = { .request = mediatek_reset_request, - .free = mediatek_reset_free, + .rfree = mediatek_reset_free, .rst_assert = mediatek_reset_assert, .rst_deassert = mediatek_reset_deassert, }; diff --git a/drivers/reset/reset-meson.c b/drivers/reset/reset-meson.c index 31aa4d41e8..70f96355b3 100644 --- a/drivers/reset/reset-meson.c +++ b/drivers/reset/reset-meson.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset-uclass.h> #include <regmap.h> @@ -62,7 +63,7 @@ static int meson_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops meson_reset_ops = { .request = meson_reset_request, - .free = meson_reset_free, + .rfree = meson_reset_free, .rst_assert = meson_reset_assert, .rst_deassert = meson_reset_deassert, }; diff --git a/drivers/reset/reset-mtmips.c b/drivers/reset/reset-mtmips.c index 59734565d7..677de0a6f9 100644 --- a/drivers/reset/reset-mtmips.c +++ b/drivers/reset/reset-mtmips.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset-uclass.h> #include <linux/io.h> @@ -45,7 +46,7 @@ static int mtmips_reset_deassert(struct reset_ctl *reset_ctl) static const struct reset_ops mtmips_reset_ops = { .request = mtmips_reset_request, - .free = mtmips_reset_free, + .rfree = mtmips_reset_free, .rst_assert = mtmips_reset_assert, .rst_deassert = mtmips_reset_deassert, }; diff --git a/drivers/reset/reset-rockchip.c b/drivers/reset/reset-rockchip.c index 3871fc00d0..100afc8103 100644 --- a/drivers/reset/reset-rockchip.c +++ b/drivers/reset/reset-rockchip.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset-uclass.h> #include <linux/io.h> #include <asm/arch-rockchip/hardware.h> @@ -76,7 +77,7 @@ static int rockchip_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops rockchip_reset_ops = { .request = rockchip_reset_request, - .free = rockchip_reset_free, + .rfree = rockchip_reset_free, .rst_assert = rockchip_reset_assert, .rst_deassert = rockchip_reset_deassert, }; diff --git a/drivers/reset/reset-socfpga.c b/drivers/reset/reset-socfpga.c index 105ce94c71..c0930a624b 100644 --- a/drivers/reset/reset-socfpga.c +++ b/drivers/reset/reset-socfpga.c @@ -14,6 +14,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/lists.h> #include <dm/of_access.h> #include <env.h> @@ -105,7 +106,7 @@ static int socfpga_reset_free(struct reset_ctl *reset_ctl) static const struct reset_ops socfpga_reset_ops = { .request = socfpga_reset_request, - .free = socfpga_reset_free, + .rfree = socfpga_reset_free, .rst_assert = socfpga_reset_assert, .rst_deassert = socfpga_reset_deassert, }; diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c index 364dc52fb7..f21bf3b1ae 100644 --- a/drivers/reset/reset-sunxi.c +++ b/drivers/reset/reset-sunxi.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset-uclass.h> #include <asm/io.h> #include <dm/lists.h> @@ -81,7 +82,7 @@ static int sunxi_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops sunxi_reset_ops = { .request = sunxi_reset_request, - .free = sunxi_reset_free, + .rfree = sunxi_reset_free, .rst_assert = sunxi_reset_assert, .rst_deassert = sunxi_reset_deassert, }; diff --git a/drivers/reset/reset-ti-sci.c b/drivers/reset/reset-ti-sci.c index c8a76dfb04..f5d82b5681 100644 --- a/drivers/reset/reset-ti-sci.c +++ b/drivers/reset/reset-ti-sci.c @@ -11,7 +11,10 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset-uclass.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> /** @@ -190,7 +193,7 @@ static const struct udevice_id ti_sci_reset_of_match[] = { static struct reset_ops ti_sci_reset_ops = { .of_xlate = ti_sci_reset_of_xlate, .request = ti_sci_reset_request, - .free = ti_sci_reset_free, + .rfree = ti_sci_reset_free, .rst_assert = ti_sci_reset_assert, .rst_deassert = ti_sci_reset_deassert, .rst_status = ti_sci_reset_status, diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c index ee1a423ffb..8ec8e462e6 100644 --- a/drivers/reset/reset-uclass.c +++ b/drivers/reset/reset-uclass.c @@ -6,8 +6,10 @@ #include <common.h> #include <dm.h> #include <fdtdec.h> +#include <malloc.h> #include <reset.h> #include <reset-uclass.h> +#include <dm/devres.h> static inline struct reset_ops *reset_dev_ops(struct udevice *dev) { @@ -164,7 +166,7 @@ int reset_free(struct reset_ctl *reset_ctl) debug("%s(reset_ctl=%p)\n", __func__, reset_ctl); - return ops->free(reset_ctl); + return ops->rfree(reset_ctl); } int reset_assert(struct reset_ctl *reset_ctl) diff --git a/drivers/reset/reset-uniphier.c b/drivers/reset/reset-uniphier.c index 39d684be4a..348f3886d1 100644 --- a/drivers/reset/reset-uniphier.c +++ b/drivers/reset/reset-uniphier.c @@ -6,7 +6,9 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset-uclass.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <linux/io.h> #include <linux/sizes.h> @@ -234,7 +236,7 @@ static int uniphier_reset_deassert(struct reset_ctl *reset_ctl) static const struct reset_ops uniphier_reset_ops = { .request = uniphier_reset_request, - .free = uniphier_reset_free, + .rfree = uniphier_reset_free, .rst_assert = uniphier_reset_assert, .rst_deassert = uniphier_reset_deassert, }; diff --git a/drivers/reset/sandbox-reset-test.c b/drivers/reset/sandbox-reset-test.c index 95ce2ca117..ae79be0730 100644 --- a/drivers/reset/sandbox-reset-test.c +++ b/drivers/reset/sandbox-reset-test.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset.h> #include <asm/io.h> #include <asm/reset.h> diff --git a/drivers/reset/sandbox-reset.c b/drivers/reset/sandbox-reset.c index 40f2654d8e..bdf53a3de9 100644 --- a/drivers/reset/sandbox-reset.c +++ b/drivers/reset/sandbox-reset.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset-uclass.h> #include <asm/io.h> #include <asm/reset.h> @@ -79,7 +80,7 @@ static const struct udevice_id sandbox_reset_ids[] = { struct reset_ops sandbox_reset_reset_ops = { .request = sandbox_reset_request, - .free = sandbox_reset_free, + .rfree = sandbox_reset_free, .rst_assert = sandbox_reset_assert, .rst_deassert = sandbox_reset_deassert, }; diff --git a/drivers/reset/sti-reset.c b/drivers/reset/sti-reset.c index d8cc485ce6..31b3e48e0e 100644 --- a/drivers/reset/sti-reset.c +++ b/drivers/reset/sti-reset.c @@ -6,6 +6,7 @@ #include <common.h> #include <errno.h> +#include <malloc.h> #include <wait_bit.h> #include <dm.h> #include <reset-uclass.h> @@ -298,7 +299,7 @@ static int sti_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops sti_reset_ops = { .request = sti_reset_request, - .free = sti_reset_free, + .rfree = sti_reset_free, .rst_assert = sti_reset_assert, .rst_deassert = sti_reset_deassert, }; diff --git a/drivers/reset/stm32-reset.c b/drivers/reset/stm32-reset.c index 16d3dba749..5dda522a4e 100644 --- a/drivers/reset/stm32-reset.c +++ b/drivers/reset/stm32-reset.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset-uclass.h> #include <stm32_rcc.h> #include <asm/io.h> @@ -64,7 +65,7 @@ static int stm32_reset_deassert(struct reset_ctl *reset_ctl) static const struct reset_ops stm32_reset_ops = { .request = stm32_reset_request, - .free = stm32_reset_free, + .rfree = stm32_reset_free, .rst_assert = stm32_reset_assert, .rst_deassert = stm32_reset_deassert, }; diff --git a/drivers/reset/tegra-car-reset.c b/drivers/reset/tegra-car-reset.c index 25947822f1..23c6facff2 100644 --- a/drivers/reset/tegra-car-reset.c +++ b/drivers/reset/tegra-car-reset.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset-uclass.h> #include <asm/arch/clock.h> #include <asm/arch-tegra/clk_rst.h> @@ -51,7 +52,7 @@ static int tegra_car_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops tegra_car_reset_ops = { .request = tegra_car_reset_request, - .free = tegra_car_reset_free, + .rfree = tegra_car_reset_free, .rst_assert = tegra_car_reset_assert, .rst_deassert = tegra_car_reset_deassert, }; diff --git a/drivers/reset/tegra186-reset.c b/drivers/reset/tegra186-reset.c index 9927c063c3..e85f42b3a3 100644 --- a/drivers/reset/tegra186-reset.c +++ b/drivers/reset/tegra186-reset.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <misc.h> #include <reset-uclass.h> #include <asm/arch-tegra/bpmp_abi.h> @@ -60,7 +61,7 @@ static int tegra186_reset_deassert(struct reset_ctl *reset_ctl) struct reset_ops tegra186_reset_ops = { .request = tegra186_reset_request, - .free = tegra186_reset_free, + .rfree = tegra186_reset_free, .rst_assert = tegra186_reset_assert, .rst_deassert = tegra186_reset_deassert, }; diff --git a/drivers/rtc/ds3232.c b/drivers/rtc/ds3232.c index 09a106aa4e..e3b3579c4a 100644 --- a/drivers/rtc/ds3232.c +++ b/drivers/rtc/ds3232.c @@ -8,6 +8,7 @@ #include <dm.h> #include <i2c.h> #include <rtc.h> +#include <dm/device_compat.h> /* * RTC register addresses diff --git a/drivers/rtc/rv3029.c b/drivers/rtc/rv3029.c index 2367062777..87c4320d5f 100644 --- a/drivers/rtc/rv3029.c +++ b/drivers/rtc/rv3029.c @@ -13,6 +13,7 @@ #include <eeprom.h> #include <i2c.h> #include <rtc.h> +#include <dm/device_compat.h> #define RTC_RV3029_PAGE_LEN 7 diff --git a/drivers/rtc/stm32_rtc.c b/drivers/rtc/stm32_rtc.c index 2674714442..3e12f57ce0 100644 --- a/drivers/rtc/stm32_rtc.c +++ b/drivers/rtc/stm32_rtc.c @@ -5,8 +5,10 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <rtc.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #define STM32_RTC_TR 0x00 diff --git a/drivers/serial/atmel_usart.c b/drivers/serial/atmel_usart.c index c450a4e08a..98d209072d 100644 --- a/drivers/serial/atmel_usart.c +++ b/drivers/serial/atmel_usart.c @@ -9,6 +9,7 @@ #include <clk.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <watchdog.h> #include <serial.h> #include <debug_uart.h> diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index 31f6cfe421..1fcbc35015 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -13,6 +13,7 @@ #include <reset.h> #include <serial.h> #include <watchdog.h> +#include <linux/err.h> #include <linux/types.h> #include <asm/io.h> diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index 0f5f1fa406..30f9b8c939 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -7,6 +7,7 @@ #include <dm.h> #include <env_internal.h> #include <errno.h> +#include <malloc.h> #include <os.h> #include <serial.h> #include <stdio_dev.h> diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index 9ad8c770d5..5b963ce45b 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -10,6 +10,7 @@ #include <dm.h> #include <debug_uart.h> #include <errno.h> +#include <malloc.h> #include <serial.h> #include <asm/io.h> #include <asm/types.h> diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index ccb3ce6701..d7907a228f 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -11,6 +11,7 @@ #include <watchdog.h> #include <asm/io.h> #include <serial.h> +#include <dm/device_compat.h> #include <linux/compiler.h> #include <asm/arch/imx-regs.h> #include <asm/arch/clock.h> diff --git a/drivers/serial/serial_msm.c b/drivers/serial/serial_msm.c index c462394dbd..0cc1aadce4 100644 --- a/drivers/serial/serial_msm.c +++ b/drivers/serial/serial_msm.c @@ -12,6 +12,7 @@ #include <clk.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <serial.h> #include <watchdog.h> #include <asm/io.h> diff --git a/drivers/serial/serial_mtk.c b/drivers/serial/serial_mtk.c index 18530a4fd1..e63f2306f0 100644 --- a/drivers/serial/serial_mtk.c +++ b/drivers/serial/serial_mtk.c @@ -15,6 +15,7 @@ #include <watchdog.h> #include <asm/io.h> #include <asm/types.h> +#include <linux/err.h> struct mtk_serial_regs { u32 rbr; @@ -454,4 +455,4 @@ static inline void _debug_uart_putc(int ch) DEBUG_UART_FUNCS -#endif
\ No newline at end of file +#endif diff --git a/drivers/serial/serial_omap.c b/drivers/serial/serial_omap.c index a31d73766d..4d4d919358 100644 --- a/drivers/serial/serial_omap.c +++ b/drivers/serial/serial_omap.c @@ -12,6 +12,7 @@ #include <ns16550.h> #include <serial.h> #include <clk.h> +#include <linux/err.h> #ifndef CONFIG_SYS_NS16550_CLK #define CONFIG_SYS_NS16550_CLK 0 diff --git a/drivers/serial/serial_pic32.c b/drivers/serial/serial_pic32.c index 84600b1201..bac506ed79 100644 --- a/drivers/serial/serial_pic32.c +++ b/drivers/serial/serial_pic32.c @@ -6,6 +6,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <serial.h> #include <wait_bit.h> #include <mach/pic32.h> diff --git a/drivers/serial/serial_sifive.c b/drivers/serial/serial_sifive.c index c142ccdf3d..5a02f0c8fe 100644 --- a/drivers/serial/serial_sifive.c +++ b/drivers/serial/serial_sifive.c @@ -13,6 +13,7 @@ #include <asm/io.h> #include <linux/compiler.h> #include <serial.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/serial/serial_stm32.c b/drivers/serial/serial_stm32.c index 00a8e7249b..016082814f 100644 --- a/drivers/serial/serial_stm32.c +++ b/drivers/serial/serial_stm32.c @@ -13,6 +13,7 @@ #include <asm/io.h> #include <asm/arch/stm32.h> #include "serial_stm32.h" +#include <dm/device_compat.h> static void _stm32_serial_setbrg(fdt_addr_t base, struct stm32_uart_info *uart_info, diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c index 7e486a68ff..e4e4c39285 100644 --- a/drivers/serial/serial_zynq.c +++ b/drivers/serial/serial_zynq.c @@ -12,8 +12,10 @@ #include <fdtdec.h> #include <watchdog.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/compiler.h> #include <serial.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/smem/msm_smem.c b/drivers/smem/msm_smem.c index 9fa653ad28..5557fd29ce 100644 --- a/drivers/smem/msm_smem.c +++ b/drivers/smem/msm_smem.c @@ -8,9 +8,12 @@ #include <common.h> #include <errno.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/of_access.h> #include <dm/of_addr.h> #include <asm/io.h> +#include <linux/err.h> #include <linux/ioport.h> #include <linux/io.h> #include <smem.h> diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c index 17949d2d0a..8cbfe2bf49 100644 --- a/drivers/soc/ti/k3-navss-ringacc.c +++ b/drivers/soc/ti/k3-navss-ringacc.c @@ -12,9 +12,12 @@ #include <asm/dma-mapping.h> #include <asm/bitops.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/read.h> #include <dm/uclass.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/soc/ti/k3-navss-ringacc.h> #include <linux/soc/ti/ti_sci_protocol.h> diff --git a/drivers/sound/sandbox.c b/drivers/sound/sandbox.c index 363c687baf..9034a8385a 100644 --- a/drivers/sound/sandbox.c +++ b/drivers/sound/sandbox.c @@ -26,7 +26,8 @@ struct sandbox_i2s_priv { }; struct sandbox_sound_priv { - int setup_called; + int setup_called; /* Incremented when setup() method is called */ + bool active; /* TX data is being sent */ int sum; /* Use to sum the provided audio data */ bool allow_beep; /* true to allow the start_beep() interface */ int frequency_hz; /* Beep frequency if active, else 0 */ @@ -59,6 +60,13 @@ int sandbox_get_setup_called(struct udevice *dev) return priv->setup_called; } +int sandbox_get_sound_active(struct udevice *dev) +{ + struct sandbox_sound_priv *priv = dev_get_priv(dev); + + return priv->active; +} + int sandbox_get_sound_sum(struct udevice *dev) { struct sandbox_sound_priv *priv = dev_get_priv(dev); @@ -163,6 +171,16 @@ static int sandbox_sound_play(struct udevice *dev, void *data, uint data_size) return i2s_tx_data(uc_priv->i2s, data, data_size); } +static int sandbox_sound_stop_play(struct udevice *dev) +{ + struct sandbox_sound_priv *priv = dev_get_priv(dev); + + sandbox_sdl_sound_stop(); + priv->active = false; + + return 0; +} + int sandbox_sound_start_beep(struct udevice *dev, int frequency_hz) { struct sandbox_sound_priv *priv = dev_get_priv(dev); @@ -228,6 +246,7 @@ U_BOOT_DRIVER(sandbox_i2s) = { static const struct sound_ops sandbox_sound_ops = { .setup = sandbox_sound_setup, .play = sandbox_sound_play, + .stop_play = sandbox_sound_stop_play, .start_beep = sandbox_sound_start_beep, .stop_beep = sandbox_sound_stop_beep, }; diff --git a/drivers/sound/sound-uclass.c b/drivers/sound/sound-uclass.c index d49f29bcd5..d9b3a38f18 100644 --- a/drivers/sound/sound-uclass.c +++ b/drivers/sound/sound-uclass.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <i2s.h> +#include <malloc.h> #include <sound.h> #define SOUND_BITS_IN_BYTE 8 @@ -31,6 +32,16 @@ int sound_play(struct udevice *dev, void *data, uint data_size) return ops->play(dev, data, data_size); } +int sound_stop_play(struct udevice *dev) +{ + struct sound_ops *ops = sound_get_ops(dev); + + if (!ops->play) + return -ENOSYS; + + return ops->stop_play(dev); +} + int sound_start_beep(struct udevice *dev, int frequency_hz) { struct sound_ops *ops = sound_get_ops(dev); @@ -87,16 +98,20 @@ int sound_beep(struct udevice *dev, int msecs, int frequency_hz) sound_create_square_wave(i2s_uc_priv->samplingrate, data, data_size, frequency_hz, i2s_uc_priv->channels); + ret = 0; while (msecs >= 1000) { ret = sound_play(dev, data, data_size); + if (ret) + break; msecs -= 1000; } - if (msecs) { + if (!ret && msecs) { unsigned long size = (data_size * msecs) / (sizeof(int) * 1000); ret = sound_play(dev, data, size); } + sound_stop_play(dev); free(data); diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c index 7d9a54011d..a09bf884e8 100644 --- a/drivers/spi/atmel-quadspi.c +++ b/drivers/spi/atmel-quadspi.c @@ -9,12 +9,15 @@ * Author: Piotr Bugalski <bugalski.piotr@gmail.com> */ +#include <malloc.h> #include <asm/io.h> #include <clk.h> #include <common.h> #include <dm.h> #include <errno.h> #include <fdtdec.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/io.h> #include <linux/iopoll.h> #include <linux/ioport.h> diff --git a/drivers/spi/bcm63xx_hsspi.c b/drivers/spi/bcm63xx_hsspi.c index 529adfbc4e..f88702df4d 100644 --- a/drivers/spi/bcm63xx_hsspi.c +++ b/drivers/spi/bcm63xx_hsspi.c @@ -10,6 +10,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <spi.h> #include <reset.h> #include <wait_bit.h> diff --git a/drivers/spi/bcm63xx_spi.c b/drivers/spi/bcm63xx_spi.c index 69f88c9e08..719f53d08e 100644 --- a/drivers/spi/bcm63xx_spi.c +++ b/drivers/spi/bcm63xx_spi.c @@ -10,6 +10,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <spi.h> #include <reset.h> #include <wait_bit.h> diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c index f8b69406d4..83b114ffe7 100644 --- a/drivers/spi/cadence_qspi.c +++ b/drivers/spi/cadence_qspi.c @@ -13,6 +13,8 @@ #include <reset.h> #include <spi.h> #include <spi-mem.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/sizes.h> #include "cadence_qspi.h" diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c index 66ff8eeccd..2dc16736a3 100644 --- a/drivers/spi/designware_spi.c +++ b/drivers/spi/designware_spi.c @@ -18,6 +18,7 @@ #include <spi.h> #include <fdtdec.h> #include <reset.h> +#include <dm/device_compat.h> #include <linux/compat.h> #include <linux/iopoll.h> #include <asm/io.h> diff --git a/drivers/spi/mvebu_a3700_spi.c b/drivers/spi/mvebu_a3700_spi.c index 99ad505f24..1469771619 100644 --- a/drivers/spi/mvebu_a3700_spi.c +++ b/drivers/spi/mvebu_a3700_spi.c @@ -12,6 +12,7 @@ #include <clk.h> #include <wait_bit.h> #include <asm/io.h> +#include <dm/device_compat.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index d94aaf9fdb..4d1317c364 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -7,6 +7,7 @@ #include <dm.h> #include <malloc.h> #include <spi.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <asm/io.h> #include <asm/gpio.h> diff --git a/drivers/spi/nxp_fspi.c b/drivers/spi/nxp_fspi.c index a2fab7ad0a..0e6c7be785 100644 --- a/drivers/spi/nxp_fspi.c +++ b/drivers/spi/nxp_fspi.c @@ -44,6 +44,7 @@ #include <linux/sizes.h> #include <linux/iopoll.h> #include <linux/bug.h> +#include <linux/err.h> /* * The driver only uses one single LUT entry, that is updated on diff --git a/drivers/spi/spi-mem-nodm.c b/drivers/spi/spi-mem-nodm.c index 4447d44991..83dde4806e 100644 --- a/drivers/spi/spi-mem-nodm.c +++ b/drivers/spi/spi-mem-nodm.c @@ -3,6 +3,7 @@ * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/ */ +#include <malloc.h> #include <spi.h> #include <spi-mem.h> diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c index cc358bd4f7..e900c997bd 100644 --- a/drivers/spi/spi-mem.c +++ b/drivers/spi/spi-mem.c @@ -7,10 +7,12 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/dmaengine.h> #include <linux/pm_runtime.h> #include "internals.h" #else +#include <dm/device_compat.h> #include <spi.h> #include <spi-mem.h> #endif diff --git a/drivers/spi/spi-sunxi.c b/drivers/spi/spi-sunxi.c index dbfeac77ee..c59fee10a8 100644 --- a/drivers/spi/spi-sunxi.c +++ b/drivers/spi/spi-sunxi.c @@ -26,6 +26,7 @@ #include <fdt_support.h> #include <reset.h> #include <wait_bit.h> +#include <dm/device_compat.h> #include <asm/bitops.h> #include <asm/gpio.h> diff --git a/drivers/spi/stm32_qspi.c b/drivers/spi/stm32_qspi.c index 958c394a1a..6857a87dc5 100644 --- a/drivers/spi/stm32_qspi.c +++ b/drivers/spi/stm32_qspi.c @@ -11,6 +11,7 @@ #include <clk.h> #include <reset.h> #include <spi-mem.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #include <linux/ioport.h> #include <linux/sizes.h> diff --git a/drivers/spi/stm32_spi.c b/drivers/spi/stm32_spi.c index 75b6006b45..ebf2b98fcd 100644 --- a/drivers/spi/stm32_spi.c +++ b/drivers/spi/stm32_spi.c @@ -8,8 +8,10 @@ #include <clk.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <reset.h> #include <spi.h> +#include <dm/device_compat.h> #include <asm/io.h> #include <asm/gpio.h> diff --git a/drivers/spi/ti_qspi.c b/drivers/spi/ti_qspi.c index 664b9cad79..e3750b0b17 100644 --- a/drivers/spi/ti_qspi.c +++ b/drivers/spi/ti_qspi.c @@ -17,6 +17,7 @@ #include <asm/omap_gpio.h> #include <asm/omap_common.h> #include <asm/ti-common/ti-edma3.h> +#include <linux/err.h> #include <linux/kernel.h> #include <regmap.h> #include <syscon.h> diff --git a/drivers/spi/uniphier_spi.c b/drivers/spi/uniphier_spi.c index e47b969864..153fbb2889 100644 --- a/drivers/spi/uniphier_spi.c +++ b/drivers/spi/uniphier_spi.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> #include <time.h> +#include <dm/device_compat.h> #include <linux/bitfield.h> #include <linux/io.h> #include <spi.h> diff --git a/drivers/spi/zynqmp_gqspi.c b/drivers/spi/zynqmp_gqspi.c index 4cca418012..02b78df843 100644 --- a/drivers/spi/zynqmp_gqspi.c +++ b/drivers/spi/zynqmp_gqspi.c @@ -16,6 +16,8 @@ #include <spi.h> #include <ubi_uboot.h> #include <wait_bit.h> +#include <dm/device_compat.h> +#include <linux/err.h> #define GQSPI_GFIFO_STRT_MODE_MASK BIT(29) #define GQSPI_CONFIG_MODE_EN_MASK (3 << 30) diff --git a/drivers/spmi/spmi-msm.c b/drivers/spmi/spmi-msm.c index 6f1114699e..ed93faffcb 100644 --- a/drivers/spmi/spmi-msm.c +++ b/drivers/spmi/spmi-msm.c @@ -12,6 +12,7 @@ #include <errno.h> #include <fdtdec.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <spmi/spmi.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/sysreset/sysreset-ti-sci.c b/drivers/sysreset/sysreset-ti-sci.c index 890a607c4b..e7fcfcd4d1 100644 --- a/drivers/sysreset/sysreset-ti-sci.c +++ b/drivers/sysreset/sysreset-ti-sci.c @@ -10,6 +10,8 @@ #include <dm.h> #include <errno.h> #include <sysreset.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/soc/ti/ti_sci_protocol.h> /** diff --git a/drivers/sysreset/sysreset_syscon.c b/drivers/sysreset/sysreset_syscon.c index d0e586f66f..f64701aab3 100644 --- a/drivers/sysreset/sysreset_syscon.c +++ b/drivers/sysreset/sysreset_syscon.c @@ -13,6 +13,7 @@ #include <regmap.h> #include <sysreset.h> #include <syscon.h> +#include <linux/err.h> struct syscon_reboot_priv { struct regmap *regmap; diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 7f870f2f73..9fb5e658f9 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -6,8 +6,10 @@ #include <common.h> #include <dm.h> #include <log.h> +#include <malloc.h> #include <tee.h> #include <linux/arm-smccc.h> +#include <linux/err.h> #include <linux/io.h> #include "optee_smc.h" diff --git a/drivers/tee/optee/rpmb.c b/drivers/tee/optee/rpmb.c index cf1ce77e6e..0804fc963c 100644 --- a/drivers/tee/optee/rpmb.c +++ b/drivers/tee/optee/rpmb.c @@ -8,6 +8,7 @@ #include <log.h> #include <tee.h> #include <mmc.h> +#include <dm/device_compat.h> #include "optee_msg.h" #include "optee_private.h" diff --git a/drivers/tee/optee/supplicant.c b/drivers/tee/optee/supplicant.c index c5726ecb91..ae042b9a20 100644 --- a/drivers/tee/optee/supplicant.c +++ b/drivers/tee/optee/supplicant.c @@ -5,6 +5,7 @@ #include <common.h> #include <log.h> +#include <malloc.h> #include <tee.h> #include <linux/types.h> diff --git a/drivers/tee/tee-uclass.c b/drivers/tee/tee-uclass.c index abb88c0fee..1fb3c16a14 100644 --- a/drivers/tee/tee-uclass.c +++ b/drivers/tee/tee-uclass.c @@ -5,9 +5,10 @@ #include <common.h> #include <dm.h> +#include <malloc.h> +#include <tee.h> #include <dm/device-internal.h> #include <dm/uclass-internal.h> -#include <tee.h> /** * struct tee_uclass_priv - information of a TEE, stored by the uclass diff --git a/drivers/timer/ast_timer.c b/drivers/timer/ast_timer.c index 21ffdbf575..3838601f54 100644 --- a/drivers/timer/ast_timer.c +++ b/drivers/timer/ast_timer.c @@ -9,6 +9,7 @@ #include <timer.h> #include <asm/io.h> #include <asm/arch/timer.h> +#include <linux/err.h> #define AST_TICK_TIMER 1 #define AST_TMC_RELOAD_VAL 0xffffffff diff --git a/drivers/timer/cadence-ttc.c b/drivers/timer/cadence-ttc.c index 75263c5375..ed48a145f2 100644 --- a/drivers/timer/cadence-ttc.c +++ b/drivers/timer/cadence-ttc.c @@ -8,6 +8,7 @@ #include <errno.h> #include <timer.h> #include <asm/io.h> +#include <linux/err.h> #define CNT_CNTRL_RESET BIT(4) diff --git a/drivers/timer/dw-apb-timer.c b/drivers/timer/dw-apb-timer.c index fad22be8c9..35271b20c8 100644 --- a/drivers/timer/dw-apb-timer.c +++ b/drivers/timer/dw-apb-timer.c @@ -8,8 +8,10 @@ #include <common.h> #include <dm.h> #include <clk.h> +#include <malloc.h> #include <reset.h> #include <timer.h> +#include <dm/device_compat.h> #include <asm/io.h> #include <asm/arch/timer.h> diff --git a/drivers/timer/ostm_timer.c b/drivers/timer/ostm_timer.c index f0e25093ca..48a5055b05 100644 --- a/drivers/timer/ostm_timer.c +++ b/drivers/timer/ostm_timer.c @@ -6,6 +6,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <dm.h> #include <clk.h> diff --git a/drivers/timer/stm32_timer.c b/drivers/timer/stm32_timer.c index 76315100e2..76d99a2b86 100644 --- a/drivers/timer/stm32_timer.c +++ b/drivers/timer/stm32_timer.c @@ -9,6 +9,7 @@ #include <dm.h> #include <fdtdec.h> #include <timer.h> +#include <dm/device_compat.h> #include <asm/io.h> diff --git a/drivers/timer/timer-uclass.c b/drivers/timer/timer-uclass.c index 97a4c74851..b619200f00 100644 --- a/drivers/timer/timer-uclass.c +++ b/drivers/timer/timer-uclass.c @@ -11,6 +11,7 @@ #include <clk.h> #include <errno.h> #include <timer.h> +#include <linux/err.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/tpm/Kconfig b/drivers/tpm/Kconfig index 555a76bb1e..9eebab5cfd 100644 --- a/drivers/tpm/Kconfig +++ b/drivers/tpm/Kconfig @@ -155,6 +155,12 @@ config TPM2_TIS_SPI to the device using the standard TPM Interface Specification (TIS) protocol. +config TPM2_FTPM_TEE + bool "TEE based fTPM Interface" + depends on TEE && OPTEE && TPM_V2 + help + This driver supports firmware TPM running in TEE. + endif # TPM_V2 endmenu diff --git a/drivers/tpm/Makefile b/drivers/tpm/Makefile index 4c866b37c5..8f075b9f45 100644 --- a/drivers/tpm/Makefile +++ b/drivers/tpm/Makefile @@ -13,3 +13,4 @@ obj-$(CONFIG_TPM_ST33ZP24_SPI) += tpm_tis_st33zp24_spi.o obj-$(CONFIG_TPM2_CR50_I2C) += cr50_i2c.o obj-$(CONFIG_TPM2_TIS_SANDBOX) += tpm2_tis_sandbox.o obj-$(CONFIG_TPM2_TIS_SPI) += tpm2_tis_spi.o +obj-$(CONFIG_TPM2_FTPM_TEE) += tpm2_ftpm_tee.o diff --git a/drivers/tpm/tpm2_ftpm_tee.c b/drivers/tpm/tpm2_ftpm_tee.c new file mode 100644 index 0000000000..4b79d4ada0 --- /dev/null +++ b/drivers/tpm/tpm2_ftpm_tee.c @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Microsoft Corporation + * + * Authors: + * Thirupathaiah Annapureddy <thiruan@microsoft.com> + * + * Description: + * Device Driver for a firmware TPM as described here: + * https://www.microsoft.com/en-us/research/publication/ftpm-software-implementation-tpm-chip/ + * + * A reference implementation is available here: + * https://github.com/microsoft/ms-tpm-20-ref/tree/master/Samples/ARM32-FirmwareTPM/optee_ta/fTPM + */ + +#include <common.h> +#include <dm.h> +#include <tpm-v2.h> +#include <tee.h> + +#include "tpm_tis.h" +#include "tpm2_ftpm_tee.h" + +/** + * ftpm_tee_transceive() - send fTPM commands and retrieve fTPM response. + * @sendbuf - address of the data to send, byte by byte + * @send_size - length of the data to send + * @recvbuf - address where to read the response, byte by byte. + * @recv_len - pointer to the size of buffer + * + * Return: + * In case of success, returns 0. + * On failure, -errno + */ +static int ftpm_tee_transceive(struct udevice *dev, const u8 *sendbuf, + size_t send_size, u8 *recvbuf, + size_t *recv_len) +{ + struct ftpm_tee_private *context = dev_get_priv(dev); + int rc = 0; + size_t resp_len; + u8 *resp_buf; + struct tpm_output_header *resp_header; + struct tee_invoke_arg transceive_args; + struct tee_param command_params[4]; + struct tee_shm *shm; + + if (send_size > MAX_COMMAND_SIZE) { + debug("%s:send_size=%zd exceeds MAX_COMMAND_SIZE\n", + __func__, send_size); + return -EIO; + } + + shm = context->shm; + memset(&transceive_args, 0, sizeof(transceive_args)); + memset(command_params, 0, sizeof(command_params)); + + /* Invoke FTPM_OPTEE_TA_SUBMIT_COMMAND function of fTPM TA */ + transceive_args = (struct tee_invoke_arg) { + .func = FTPM_OPTEE_TA_SUBMIT_COMMAND, + .session = context->session, + }; + + /* Fill FTPM_OPTEE_TA_SUBMIT_COMMAND parameters */ + /* request */ + command_params[0] = (struct tee_param) { + .attr = TEE_PARAM_ATTR_TYPE_MEMREF_INPUT, + .u.memref = { + .shm = shm, + .size = send_size, + .shm_offs = 0, + }, + }; + memset(command_params[0].u.memref.shm->addr, 0, + (MAX_COMMAND_SIZE + MAX_RESPONSE_SIZE)); + memcpy(command_params[0].u.memref.shm->addr, sendbuf, send_size); + + /* response */ + command_params[1] = (struct tee_param) { + .attr = TEE_PARAM_ATTR_TYPE_MEMREF_INOUT, + .u.memref = { + .shm = shm, + .size = MAX_RESPONSE_SIZE, + .shm_offs = MAX_COMMAND_SIZE, + }, + }; + + rc = tee_invoke_func(context->tee_dev, &transceive_args, 4, + command_params); + if ((rc < 0) || (transceive_args.ret != 0)) { + debug("%s:SUBMIT_COMMAND invoke error: 0x%x\n", + __func__, transceive_args.ret); + return (rc < 0) ? rc : transceive_args.ret; + } + + resp_buf = command_params[1].u.memref.shm->addr + + command_params[1].u.memref.shm_offs; + resp_header = (struct tpm_output_header *)resp_buf; + resp_len = be32_to_cpu(resp_header->length); + + /* sanity check resp_len*/ + if (resp_len < TPM_HEADER_SIZE) { + debug("%s:tpm response header too small\n", __func__); + return -EIO; + } + if (resp_len > MAX_RESPONSE_SIZE) { + debug("%s:resp_len=%zd exceeds MAX_RESPONSE_SIZE\n", + __func__, resp_len); + return -EIO; + } + if (resp_len > *recv_len) { + debug("%s:response length is bigger than receive buffer\n", + __func__); + return -EIO; + } + + /* sanity checks look good, copy the response */ + memcpy(recvbuf, resp_buf, resp_len); + *recv_len = resp_len; + + return 0; +} + +static int ftpm_tee_open(struct udevice *dev) +{ + struct ftpm_tee_private *context = dev_get_priv(dev); + + if (context->is_open) + return -EBUSY; + + context->is_open = 1; + + return 0; +} + +static int ftpm_tee_close(struct udevice *dev) +{ + struct ftpm_tee_private *context = dev_get_priv(dev); + + if (context->is_open) + context->is_open = 0; + + return 0; +} + +static int ftpm_tee_desc(struct udevice *dev, char *buf, int size) +{ + if (size < 32) + return -ENOSPC; + + return snprintf(buf, size, "Microsoft OP-TEE fTPM"); +} + +static int ftpm_tee_match(struct tee_version_data *vers, const void *data) +{ + debug("%s:vers->gen_caps =0x%x\n", __func__, vers->gen_caps); + + /* + * Currently this driver only support GP Complaint OPTEE based fTPM TA + */ + return vers->gen_caps & TEE_GEN_CAP_GP; +} + +static int ftpm_tee_probe(struct udevice *dev) +{ + int rc; + struct tpm_chip_priv *priv = dev_get_uclass_priv(dev); + struct ftpm_tee_private *context = dev_get_priv(dev); + struct tee_open_session_arg sess_arg; + const struct tee_optee_ta_uuid uuid = TA_FTPM_UUID; + + memset(context, 0, sizeof(*context)); + + /* Use the TPM v2 stack */ + priv->version = TPM_V2; + priv->pcr_count = 24; + priv->pcr_select_min = 3; + + /* Find TEE device */ + context->tee_dev = tee_find_device(NULL, ftpm_tee_match, NULL, NULL); + if (!context->tee_dev) { + debug("%s:tee_find_device failed\n", __func__); + return -ENODEV; + } + + /* Open a session with the fTPM TA */ + memset(&sess_arg, 0, sizeof(sess_arg)); + tee_optee_ta_uuid_to_octets(sess_arg.uuid, &uuid); + + rc = tee_open_session(context->tee_dev, &sess_arg, 0, NULL); + if ((rc < 0) || (sess_arg.ret != 0)) { + debug("%s:tee_open_session failed, err=%x\n", + __func__, sess_arg.ret); + return -EIO; + } + context->session = sess_arg.session; + + /* Allocate dynamic shared memory with fTPM TA */ + rc = tee_shm_alloc(context->tee_dev, + MAX_COMMAND_SIZE + MAX_RESPONSE_SIZE, + 0, &context->shm); + if (rc) { + debug("%s:tee_shm_alloc failed with rc = %d\n", __func__, rc); + goto out_shm_alloc; + } + + return 0; + +out_shm_alloc: + tee_close_session(context->tee_dev, context->session); + + return rc; +} + +static int ftpm_tee_remove(struct udevice *dev) +{ + struct ftpm_tee_private *context = dev_get_priv(dev); + int rc; + + /* tee_pre_remove frees any leftover TEE shared memory */ + + /* close the existing session with fTPM TA*/ + rc = tee_close_session(context->tee_dev, context->session); + debug("%s: tee_close_session - rc =%d\n", __func__, rc); + + return 0; +} + +static const struct tpm_ops ftpm_tee_ops = { + .open = ftpm_tee_open, + .close = ftpm_tee_close, + .get_desc = ftpm_tee_desc, + .xfer = ftpm_tee_transceive, +}; + +static const struct udevice_id ftpm_tee_ids[] = { + { .compatible = "microsoft,ftpm" }, + { } +}; + +U_BOOT_DRIVER(ftpm_tee) = { + .name = "ftpm_tee", + .id = UCLASS_TPM, + .of_match = ftpm_tee_ids, + .ops = &ftpm_tee_ops, + .probe = ftpm_tee_probe, + .remove = ftpm_tee_remove, + .flags = DM_FLAG_OS_PREPARE, + .priv_auto_alloc_size = sizeof(struct ftpm_tee_private), +}; diff --git a/drivers/tpm/tpm2_ftpm_tee.h b/drivers/tpm/tpm2_ftpm_tee.h new file mode 100644 index 0000000000..44f9598c28 --- /dev/null +++ b/drivers/tpm/tpm2_ftpm_tee.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) Microsoft Corporation + */ + +#ifndef __TPM2_FTPM_TEE_H__ +#define __TPM2_FTPM_TEE_H__ + +/* This UUID is generated with uuidgen */ +#define TA_FTPM_UUID { 0xBC50D971, 0xD4C9, 0x42C4, \ + {0x82, 0xCB, 0x34, 0x3F, 0xB7, 0xF3, 0x78, 0x96} } + +/* The TAFs ID implemented in this TA */ +#define FTPM_OPTEE_TA_SUBMIT_COMMAND (0) +#define FTPM_OPTEE_TA_EMULATE_PPI (1) + +/* max. buffer size supported by fTPM */ +#define MAX_COMMAND_SIZE 4096 +#define MAX_RESPONSE_SIZE 4096 + +/** + * struct ftpm_tee_private - fTPM's private context + * @tee_dev: struct udevice for TEE. + * @session: fTPM TA session identifier. + * @is_open: Indicates whether the driver is already opened by client or not. + * @shm: Memory pool shared with fTPM TA in TEE. + */ +struct ftpm_tee_private { + struct udevice *tee_dev; + u32 session; + int is_open; + struct tee_shm *shm; +}; + +#endif /* __TPM2_FTPM_TEE_H__ */ diff --git a/drivers/ufs/cdns-platform.c b/drivers/ufs/cdns-platform.c index c80f4253e4..41ee6a60c9 100644 --- a/drivers/ufs/cdns-platform.c +++ b/drivers/ufs/cdns-platform.c @@ -9,6 +9,8 @@ #include <common.h> #include <dm.h> #include <ufs.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include "ufs.h" diff --git a/drivers/ufs/ti-j721e-ufs.c b/drivers/ufs/ti-j721e-ufs.c index 24ec3ebea1..4990fba6eb 100644 --- a/drivers/ufs/ti-j721e-ufs.c +++ b/drivers/ufs/ti-j721e-ufs.c @@ -7,6 +7,8 @@ #include <clk.h> #include <common.h> #include <dm.h> +#include <dm/device_compat.h> +#include <linux/err.h> #define UFS_SS_CTRL 0x4 #define UFS_SS_RST_N_PCS BIT(0) diff --git a/drivers/ufs/ufs.c b/drivers/ufs/ufs.c index 23306863d5..c9346c2edc 100644 --- a/drivers/ufs/ufs.c +++ b/drivers/ufs/ufs.c @@ -11,6 +11,8 @@ #include <charset.h> #include <common.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <dm/device-internal.h> #include <malloc.h> diff --git a/drivers/usb/cdns3/cdns3-ti.c b/drivers/usb/cdns3/cdns3-ti.c index 2fa0104f1b..652cd5cb17 100644 --- a/drivers/usb/cdns3/cdns3-ti.c +++ b/drivers/usb/cdns3/cdns3-ti.c @@ -9,6 +9,7 @@ #include <asm-generic/io.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/io.h> #include <linux/usb/otg.h> #include <malloc.h> diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index 8c8e02169e..f947e6983c 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -14,6 +14,8 @@ #include <common.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/lists.h> #include <linux/kernel.h> #include <linux/io.h> diff --git a/drivers/usb/cdns3/drd.c b/drivers/usb/cdns3/drd.c index 13eb4899d4..47874fec29 100644 --- a/drivers/usb/cdns3/drd.c +++ b/drivers/usb/cdns3/drd.c @@ -11,6 +11,7 @@ * */ #include <dm.h> +#include <dm/device_compat.h> #include <linux/delay.h> #include <linux/iopoll.h> #include <linux/kernel.h> diff --git a/drivers/usb/cdns3/ep0.c b/drivers/usb/cdns3/ep0.c index f35a924839..1957a3b91d 100644 --- a/drivers/usb/cdns3/ep0.c +++ b/drivers/usb/cdns3/ep0.c @@ -11,6 +11,7 @@ */ #include <cpu_func.h> +#include <dm/device_compat.h> #include <linux/usb/composite.h> #include <linux/iopoll.h> diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index 0e02b77965..22e90a5717 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -57,6 +57,9 @@ */ #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/usb/gadget.h> #include <linux/compat.h> #include <linux/iopoll.h> diff --git a/drivers/usb/cdns3/host.c b/drivers/usb/cdns3/host.c index 425d9d053d..b44e7df113 100644 --- a/drivers/usb/cdns3/host.c +++ b/drivers/usb/cdns3/host.c @@ -9,6 +9,7 @@ * Pawel Laszczak <pawell@cadence.com> */ #include <dm.h> +#include <dm/devres.h> #include <linux/compat.h> #include <usb.h> #include <usb/xhci.h> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 77c555e769..c5066529b7 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -18,6 +18,9 @@ #include <malloc.h> #include <dwc3-uboot.h> #include <asm/dma-mapping.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/ioport.h> #include <dm.h> #include <generic-phy.h> diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c index 8b19140182..9596bf144c 100644 --- a/drivers/usb/dwc3/dwc3-omap.c +++ b/drivers/usb/dwc3/dwc3-omap.c @@ -18,6 +18,8 @@ #include <asm/io.h> #include <dm.h> #include <dwc3-omap-uboot.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/usb/dwc3-omap.h> #include <linux/ioport.h> diff --git a/drivers/usb/dwc3/dwc3-uniphier.c b/drivers/usb/dwc3/dwc3-uniphier.c index 6e9c52189d..88317b19ac 100644 --- a/drivers/usb/dwc3/dwc3-uniphier.c +++ b/drivers/usb/dwc3/dwc3-uniphier.c @@ -7,6 +7,7 @@ */ #include <dm.h> +#include <dm/device_compat.h> #include <linux/bitops.h> #include <linux/errno.h> #include <linux/io.h> diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 0c8c11d743..4af58941d8 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -14,6 +14,7 @@ */ #include <common.h> #include <cpu_func.h> +#include <dm/device_compat.h> #include <linux/kernel.h> #include <linux/list.h> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 4353dffb6b..1502d67362 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -17,6 +17,8 @@ #include <cpu_func.h> #include <malloc.h> #include <asm/dma-mapping.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/bug.h> #include <linux/list.h> diff --git a/drivers/usb/dwc3/ti_usb_phy.c b/drivers/usb/dwc3/ti_usb_phy.c index e7ea12c163..6b0166a1e0 100644 --- a/drivers/usb/dwc3/ti_usb_phy.c +++ b/drivers/usb/dwc3/ti_usb_phy.c @@ -19,6 +19,8 @@ #include <common.h> #include <malloc.h> #include <ti-usb-phy-uboot.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/ioport.h> #include <asm/io.h> #include <asm/arch/sys_proto.h> diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 2a6626b443..13dec517f6 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -14,6 +14,8 @@ #undef PACKET_TRACE #include <common.h> +#include <dm/devres.h> +#include <linux/err.h> #include <linux/errno.h> #include <asm/io.h> #include <asm/gpio.h> diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 4a6f4271d5..b2b279358e 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -7,6 +7,7 @@ */ #undef DEBUG +#include <dm/devres.h> #include <linux/bitops.h> #include <linux/usb/composite.h> diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 49f342eb21..496abf38e7 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -23,6 +23,8 @@ #include <generic-phy.h> #include <malloc.h> #include <reset.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/errno.h> #include <linux/list.h> diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c index c1e6506659..5250fc8b26 100644 --- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -245,6 +245,7 @@ #include <common.h> #include <console.h> #include <g_dnl.h> +#include <dm/devres.h> #include <linux/err.h> #include <linux/usb/ch9.h> diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c index 09c0a30b2b..6e1e57f9fd 100644 --- a/drivers/usb/gadget/pxa25x_udc.c +++ b/drivers/usb/gadget/pxa25x_udc.c @@ -22,6 +22,7 @@ #include <asm/system.h> #include <asm/mach-types.h> #include <asm/unaligned.h> +#include <dm/devres.h> #include <linux/compat.h> #include <malloc.h> #include <asm/io.h> diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c index 4bbd030aad..f40779b13a 100644 --- a/drivers/usb/gadget/storage_common.c +++ b/drivers/usb/gadget/storage_common.c @@ -269,6 +269,7 @@ struct device_attribute { int i; }; #define ETOOSMALL 525 #include <usb_mass_storage.h> +#include <dm/device_compat.h> /*-------------------------------------------------------------------------*/ diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index 8d1d90e3e3..a33ab5c95d 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -13,6 +13,8 @@ * usb_ */ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/compat.h> #include <malloc.h> #include <asm/cache.h> diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c index b9c56f763b..e4efaf1e59 100644 --- a/drivers/usb/host/dwc2.c +++ b/drivers/usb/host/dwc2.c @@ -15,6 +15,7 @@ #include <usbroothubdes.h> #include <wait_bit.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <power/regulator.h> #include <reset.h> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index 6900848df1..67eec0e0bb 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -8,6 +8,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <usb.h> #include <asm/io.h> #include <asm/arch/clk.h> diff --git a/drivers/usb/host/ehci-generic.c b/drivers/usb/host/ehci-generic.c index 682a070306..0643681846 100644 --- a/drivers/usb/host/ehci-generic.c +++ b/drivers/usb/host/ehci-generic.c @@ -5,6 +5,8 @@ #include <common.h> #include <clk.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/ofnode.h> #include <generic-phy.h> #include <reset.h> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index ef20c3c982..1cc02052f5 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -17,6 +17,7 @@ #include <malloc.h> #include <memalign.h> #include <watchdog.h> +#include <dm/device_compat.h> #include <linux/compiler.h> #include "ehci.h" diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c index 233df57b4d..692018243c 100644 --- a/drivers/usb/host/ohci-da8xx.c +++ b/drivers/usb/host/ohci-da8xx.c @@ -4,9 +4,12 @@ */ #include <common.h> +#include <malloc.h> #include <asm/io.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/ofnode.h> #include <generic-phy.h> #include <reset.h> diff --git a/drivers/usb/host/ohci-generic.c b/drivers/usb/host/ohci-generic.c index 916ea0b955..04d5fdb2a8 100644 --- a/drivers/usb/host/ohci-generic.c +++ b/drivers/usb/host/ohci-generic.c @@ -6,6 +6,8 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <dm/device_compat.h> +#include <dm/devres.h> #include <dm/ofnode.h> #include <generic-phy.h> #include <reset.h> diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c index a37696d83f..8fc9d211db 100644 --- a/drivers/usb/host/r8a66597-hcd.c +++ b/drivers/usb/host/r8a66597-hcd.c @@ -10,6 +10,7 @@ #include <dm.h> #include <usb.h> #include <asm/io.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #include <power/regulator.h> diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c index c4d8811343..d86584b847 100644 --- a/drivers/usb/host/xhci-rcar.c +++ b/drivers/usb/host/xhci-rcar.c @@ -9,8 +9,10 @@ #include <clk.h> #include <dm.h> #include <fdtdec.h> +#include <malloc.h> #include <usb.h> #include <wait_bit.h> +#include <dm/device_compat.h> #include <usb/xhci.h> #include "xhci-rcar-r8a779x_usb3_v3.h" diff --git a/drivers/usb/musb-new/am35x.c b/drivers/usb/musb-new/am35x.c index bda099c63f..6e5be90fe5 100644 --- a/drivers/usb/musb-new/am35x.c +++ b/drivers/usb/musb-new/am35x.c @@ -12,6 +12,8 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/init.h> #include <linux/module.h> #include <linux/clk.h> diff --git a/drivers/usb/musb-new/da8xx.c b/drivers/usb/musb-new/da8xx.c index 899b30db68..2ddcf33b5f 100644 --- a/drivers/usb/musb-new/da8xx.c +++ b/drivers/usb/musb-new/da8xx.c @@ -16,6 +16,7 @@ #include <common.h> #include <dm.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <asm/arch/hardware.h> #include <asm/arch/da8xx-usb.h> diff --git a/drivers/usb/musb-new/musb_core.c b/drivers/usb/musb-new/musb_core.c index ab5e3aa9d1..f678aa4826 100644 --- a/drivers/usb/musb-new/musb_core.c +++ b/drivers/usb/musb-new/musb_core.c @@ -65,6 +65,8 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/sched.h> diff --git a/drivers/usb/musb-new/musb_dsps.c b/drivers/usb/musb-new/musb_dsps.c index 0c794b310a..eb590885bc 100644 --- a/drivers/usb/musb-new/musb_dsps.c +++ b/drivers/usb/musb-new/musb_dsps.c @@ -15,6 +15,8 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/init.h> #include <linux/io.h> #include <linux/err.h> diff --git a/drivers/usb/musb-new/musb_gadget.c b/drivers/usb/musb-new/musb_gadget.c index b35d33ffed..35d2123ddd 100644 --- a/drivers/usb/musb-new/musb_gadget.c +++ b/drivers/usb/musb-new/musb_gadget.c @@ -9,6 +9,8 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/timer.h> diff --git a/drivers/usb/musb-new/musb_gadget_ep0.c b/drivers/usb/musb-new/musb_gadget_ep0.c index 3ef8fe1373..79e8222e3b 100644 --- a/drivers/usb/musb-new/musb_gadget_ep0.c +++ b/drivers/usb/musb-new/musb_gadget_ep0.c @@ -9,6 +9,7 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/timer.h> diff --git a/drivers/usb/musb-new/musb_host.c b/drivers/usb/musb-new/musb_host.c index 8e92ade471..b98f0ed40e 100644 --- a/drivers/usb/musb-new/musb_host.c +++ b/drivers/usb/musb-new/musb_host.c @@ -9,6 +9,8 @@ */ #ifndef __UBOOT__ +#include <dm/device_compat.h> +#include <dm/devres.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/delay.h> diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c index 9eb593402e..72f14b9343 100644 --- a/drivers/usb/musb-new/musb_uboot.c +++ b/drivers/usb/musb-new/musb_uboot.c @@ -1,6 +1,8 @@ #include <common.h> #include <console.h> +#include <malloc.h> #include <watchdog.h> +#include <linux/err.h> #include <linux/errno.h> #include <linux/usb/ch9.h> #include <linux/usb/gadget.h> diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c index 05059ce3cb..0d34dcfc5d 100644 --- a/drivers/usb/musb-new/omap2430.c +++ b/drivers/usb/musb-new/omap2430.c @@ -12,7 +12,9 @@ #include <dm.h> #include <serial.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> +#include <linux/err.h> #include <linux/usb/otg.h> #include <asm/omap_common.h> #include <asm/omap_musb.h> diff --git a/drivers/usb/musb-new/pic32.c b/drivers/usb/musb-new/pic32.c index 3a19900e21..c7867fef8a 100644 --- a/drivers/usb/musb-new/pic32.c +++ b/drivers/usb/musb-new/pic32.c @@ -10,6 +10,7 @@ */ #include <common.h> +#include <dm/device_compat.h> #include <linux/usb/musb.h> #include "linux-compat.h" #include "musb_core.h" diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c index 45eecfeee6..98bf736978 100644 --- a/drivers/usb/musb-new/sunxi.c +++ b/drivers/usb/musb-new/sunxi.c @@ -19,12 +19,14 @@ #include <clk.h> #include <dm.h> #include <generic-phy.h> +#include <malloc.h> #include <phy-sun4i-usb.h> #include <reset.h> #include <asm/arch/cpu.h> #include <asm/arch/clock.h> #include <asm/arch/gpio.h> #include <asm-generic/gpio.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <dm/root.h> #include <linux/usb/musb.h> diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c index 20ca2731b4..00759f3e83 100644 --- a/drivers/usb/musb-new/ti-musb.c +++ b/drivers/usb/musb-new/ti-musb.c @@ -9,6 +9,7 @@ #include <command.h> #include <console.h> #include <dm.h> +#include <malloc.h> #include <linux/usb/otg.h> #include <dm/device-internal.h> #include <dm/lists.h> diff --git a/drivers/usb/phy/omap_usb_phy.c b/drivers/usb/phy/omap_usb_phy.c index 897e6f19f7..9209942430 100644 --- a/drivers/usb/phy/omap_usb_phy.c +++ b/drivers/usb/phy/omap_usb_phy.c @@ -10,6 +10,7 @@ #include <common.h> #include <usb.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <asm/omap_common.h> #include <asm/arch/cpu.h> diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c index 734bc12c7b..62acccedf3 100644 --- a/drivers/video/atmel_hlcdfb.c +++ b/drivers/video/atmel_hlcdfb.c @@ -7,6 +7,7 @@ #include <common.h> #include <cpu_func.h> +#include <malloc.h> #include <asm/io.h> #include <asm/arch/gpio.h> #include <asm/arch/clk.h> diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c index 30086600fb..6d7661db89 100644 --- a/drivers/video/console_truetype.c +++ b/drivers/video/console_truetype.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <video.h> #include <video_console.h> @@ -287,6 +288,27 @@ static int console_truetype_putc_xy(struct udevice *dev, uint x, uint y, break; } #endif +#ifdef CONFIG_VIDEO_BPP32 + case VIDEO_BPP32: { + u32 *dst = (u32 *)line + xoff; + int i; + + for (i = 0; i < width; i++) { + int val = *bits; + int out; + + if (vid_priv->colour_bg) + val = 255 - val; + out = val | val << 8 | val << 16; + if (vid_priv->colour_fg) + *dst++ |= out; + else + *dst++ &= out; + bits++; + } + break; + } +#endif default: free(data); return -ENOSYS; diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c index 285633b14d..5fb68865ef 100644 --- a/drivers/video/da8xx-fb.c +++ b/drivers/video/da8xx-fb.c @@ -13,6 +13,7 @@ */ #include <common.h> +#include <malloc.h> #include <memalign.h> #include <video_fb.h> #include <linux/list.h> diff --git a/drivers/video/dw_mipi_dsi.c b/drivers/video/dw_mipi_dsi.c index 83d7c7b2c0..5dd75e7ec8 100644 --- a/drivers/video/dw_mipi_dsi.c +++ b/drivers/video/dw_mipi_dsi.c @@ -19,6 +19,7 @@ #include <asm/io.h> #include <asm/arch/gpio.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <linux/iopoll.h> #include <video_bridge.h> diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c index 74a66e83d2..ad5ef93e01 100644 --- a/drivers/video/exynos/exynos_mipi_dsi.c +++ b/drivers/video/exynos/exynos_mipi_dsi.c @@ -9,6 +9,7 @@ #include <common.h> #include <malloc.h> #include <fdtdec.h> +#include <dm/devres.h> #include <linux/libfdt.h> #include <linux/compat.h> #include <linux/err.h> diff --git a/drivers/video/hitachi_tx18d42vm_lcd.c b/drivers/video/hitachi_tx18d42vm_lcd.c index 1629f558d0..a57abd23f7 100644 --- a/drivers/video/hitachi_tx18d42vm_lcd.c +++ b/drivers/video/hitachi_tx18d42vm_lcd.c @@ -6,6 +6,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/gpio.h> #include <errno.h> diff --git a/drivers/video/mali_dp.c b/drivers/video/mali_dp.c index 71151a87aa..87a75a9ca2 100644 --- a/drivers/video/mali_dp.c +++ b/drivers/video/mali_dp.c @@ -6,6 +6,7 @@ */ #define DEBUG #include <common.h> +#include <malloc.h> #include <video.h> #include <dm.h> #ifdef CONFIG_DISPLAY @@ -16,6 +17,7 @@ #include <os.h> #include <fdt_support.h> #include <clk.h> +#include <dm/device_compat.h> #include <linux/sizes.h> #define MALIDP_CORE_ID 0x0018 diff --git a/drivers/video/mipi_dsi.c b/drivers/video/mipi_dsi.c index cdc3ef58ab..ecacea1dbe 100644 --- a/drivers/video/mipi_dsi.c +++ b/drivers/video/mipi_dsi.c @@ -38,6 +38,7 @@ #include <dm.h> #include <mipi_display.h> #include <mipi_dsi.h> +#include <dm/devres.h> /** * DOC: dsi helpers diff --git a/drivers/video/mvebu_lcd.c b/drivers/video/mvebu_lcd.c index dc6254514a..3ff5b28ae2 100644 --- a/drivers/video/mvebu_lcd.c +++ b/drivers/video/mvebu_lcd.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> #include <video.h> +#include <dm/device_compat.h> #include <linux/mbus.h> #include <asm/io.h> #include <asm/arch/cpu.h> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c index c097682d00..585af3d571 100644 --- a/drivers/video/mxsfb.c +++ b/drivers/video/mxsfb.c @@ -7,6 +7,7 @@ #include <common.h> #include <dm.h> #include <env.h> +#include <dm/device_compat.h> #include <linux/errno.h> #include <malloc.h> #include <video.h> diff --git a/drivers/video/orisetech_otm8009a.c b/drivers/video/orisetech_otm8009a.c index 89d9cfdbb3..650ed07239 100644 --- a/drivers/video/orisetech_otm8009a.c +++ b/drivers/video/orisetech_otm8009a.c @@ -13,6 +13,7 @@ #include <mipi_dsi.h> #include <panel.h> #include <asm/gpio.h> +#include <dm/device_compat.h> #include <power/regulator.h> #define OTM8009A_BACKLIGHT_DEFAULT 240 diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c index ad20bf2441..742579aba7 100644 --- a/drivers/video/pwm_backlight.c +++ b/drivers/video/pwm_backlight.c @@ -9,6 +9,7 @@ #include <common.h> #include <dm.h> #include <backlight.h> +#include <malloc.h> #include <pwm.h> #include <asm/gpio.h> #include <power/regulator.h> diff --git a/drivers/video/raydium-rm68200.c b/drivers/video/raydium-rm68200.c index 91555e26ed..853dbc52d6 100644 --- a/drivers/video/raydium-rm68200.c +++ b/drivers/video/raydium-rm68200.c @@ -13,6 +13,7 @@ #include <mipi_dsi.h> #include <panel.h> #include <asm/gpio.h> +#include <dm/device_compat.h> #include <power/regulator.h> /*** Manufacturer Command Set ***/ diff --git a/drivers/video/rockchip/rk3288_hdmi.c b/drivers/video/rockchip/rk3288_hdmi.c index 3d25ce924c..51eb41540b 100644 --- a/drivers/video/rockchip/rk3288_hdmi.c +++ b/drivers/video/rockchip/rk3288_hdmi.c @@ -9,6 +9,7 @@ #include <dm.h> #include <dw_hdmi.h> #include <edid.h> +#include <malloc.h> #include <regmap.h> #include <syscon.h> #include <asm/gpio.h> diff --git a/drivers/video/rockchip/rk3288_mipi.c b/drivers/video/rockchip/rk3288_mipi.c index 65891ce45c..f4444b9c34 100644 --- a/drivers/video/rockchip/rk3288_mipi.c +++ b/drivers/video/rockchip/rk3288_mipi.c @@ -16,6 +16,7 @@ #include <asm/gpio.h> #include <asm/io.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <linux/kernel.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru.h> diff --git a/drivers/video/rockchip/rk3399_mipi.c b/drivers/video/rockchip/rk3399_mipi.c index a5b7ba69a8..74ebe770a9 100644 --- a/drivers/video/rockchip/rk3399_mipi.c +++ b/drivers/video/rockchip/rk3399_mipi.c @@ -16,6 +16,7 @@ #include <asm/gpio.h> #include <asm/io.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <linux/kernel.h> #include <asm/arch-rockchip/clock.h> #include <asm/arch-rockchip/cru.h> diff --git a/drivers/video/rockchip/rk_edp.c b/drivers/video/rockchip/rk_edp.c index 4330725a25..8703df0ec0 100644 --- a/drivers/video/rockchip/rk_edp.c +++ b/drivers/video/rockchip/rk_edp.c @@ -9,6 +9,7 @@ #include <display.h> #include <dm.h> #include <edid.h> +#include <malloc.h> #include <panel.h> #include <regmap.h> #include <syscon.h> diff --git a/drivers/video/rockchip/rk_vop.c b/drivers/video/rockchip/rk_vop.c index b56c3f336c..e91d4dfa7f 100644 --- a/drivers/video/rockchip/rk_vop.c +++ b/drivers/video/rockchip/rk_vop.c @@ -19,6 +19,7 @@ #include <asm/arch-rockchip/vop_rk3288.h> #include <dm/device-internal.h> #include <dm/uclass-internal.h> +#include <linux/err.h> #include <power/regulator.h> #include "rk_vop.h" diff --git a/drivers/video/sandbox_osd.c b/drivers/video/sandbox_osd.c index dd84489add..7e722326b3 100644 --- a/drivers/video/sandbox_osd.c +++ b/drivers/video/sandbox_osd.c @@ -6,6 +6,7 @@ #include <common.h> #include <display.h> #include <dm.h> +#include <malloc.h> #include <video_osd.h> #include "sandbox_osd.h" diff --git a/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c index 913651c565..1196e6c671 100644 --- a/drivers/video/sandbox_sdl.c +++ b/drivers/video/sandbox_sdl.c @@ -8,6 +8,7 @@ #include <fdtdec.h> #include <video.h> #include <asm/sdl.h> +#include <asm/state.h> #include <asm/u-boot-sandbox.h> #include <dm/test.h> @@ -23,9 +24,11 @@ static int sandbox_sdl_probe(struct udevice *dev) { struct sandbox_sdl_plat *plat = dev_get_platdata(dev); struct video_priv *uc_priv = dev_get_uclass_priv(dev); + struct sandbox_state *state = state_get_current(); int ret; - ret = sandbox_sdl_init_display(plat->xres, plat->yres, plat->bpix); + ret = sandbox_sdl_init_display(plat->xres, plat->yres, plat->bpix, + state->double_lcd); if (ret) { puts("LCD init failed\n"); return ret; @@ -44,13 +47,11 @@ static int sandbox_sdl_bind(struct udevice *dev) { struct video_uc_platdata *uc_plat = dev_get_uclass_platdata(dev); struct sandbox_sdl_plat *plat = dev_get_platdata(dev); - const void *blob = gd->fdt_blob; - int node = dev_of_offset(dev); int ret = 0; - plat->xres = fdtdec_get_int(blob, node, "xres", LCD_MAX_WIDTH); - plat->yres = fdtdec_get_int(blob, node, "yres", LCD_MAX_HEIGHT); - plat->bpix = VIDEO_BPP16; + plat->xres = dev_read_u32_default(dev, "xres", LCD_MAX_WIDTH); + plat->yres = dev_read_u32_default(dev, "yres", LCD_MAX_HEIGHT); + plat->bpix = dev_read_u32_default(dev, "log2-depth", VIDEO_BPP16); uc_plat->size = plat->xres * plat->yres * (1 << plat->bpix) / 8; debug("%s: Frame buffer size %x\n", __func__, uc_plat->size); diff --git a/drivers/video/scf0403_lcd.c b/drivers/video/scf0403_lcd.c index 58564e8cfe..60075a6cf3 100644 --- a/drivers/video/scf0403_lcd.c +++ b/drivers/video/scf0403_lcd.c @@ -14,6 +14,7 @@ */ #include <common.h> +#include <malloc.h> #include <asm/gpio.h> #include <spi.h> diff --git a/drivers/video/ssd2828.c b/drivers/video/ssd2828.c index 4d40dca0c8..83566bc6d6 100644 --- a/drivers/video/ssd2828.c +++ b/drivers/video/ssd2828.c @@ -10,6 +10,7 @@ */ #include <common.h> +#include <malloc.h> #include <mipi_display.h> #include <asm/arch/gpio.h> #include <asm/gpio.h> diff --git a/drivers/video/stm32/stm32_dsi.c b/drivers/video/stm32/stm32_dsi.c index 12895a8f5d..ded03b109c 100644 --- a/drivers/video/stm32/stm32_dsi.c +++ b/drivers/video/stm32/stm32_dsi.c @@ -20,6 +20,7 @@ #include <asm/io.h> #include <asm/arch/gpio.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/lists.h> #include <linux/iopoll.h> #include <power/regulator.h> diff --git a/drivers/video/stm32/stm32_ltdc.c b/drivers/video/stm32/stm32_ltdc.c index 59ff692b0b..be7e9bff01 100644 --- a/drivers/video/stm32/stm32_ltdc.c +++ b/drivers/video/stm32/stm32_ltdc.c @@ -16,6 +16,7 @@ #include <asm/io.h> #include <asm/arch/gpio.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> struct stm32_ltdc_priv { void __iomem *regs; diff --git a/drivers/video/tegra124/sor.c b/drivers/video/tegra124/sor.c index 172bb14d6c..8dc3df61aa 100644 --- a/drivers/video/tegra124/sor.c +++ b/drivers/video/tegra124/sor.c @@ -15,6 +15,7 @@ #include <asm/arch-tegra/dc.h> #include "displayport.h" #include "sor.h" +#include <linux/err.h> #define DEBUG_SOR 0 diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 12057c8a5b..3d658e61d7 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -6,6 +6,7 @@ #include <common.h> #include <cpu_func.h> #include <dm.h> +#include <malloc.h> #include <mapmem.h> #include <stdio_dev.h> #include <video.h> diff --git a/drivers/virtio/virtio-uclass.c b/drivers/virtio/virtio-uclass.c index 436faa46ee..23f281cd6e 100644 --- a/drivers/virtio/virtio-uclass.c +++ b/drivers/virtio/virtio-uclass.c @@ -17,6 +17,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <virtio_types.h> #include <virtio.h> #include <dm/lists.h> diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c index a67b354122..60ece133ab 100644 --- a/drivers/virtio/virtio_mmio.c +++ b/drivers/virtio/virtio_mmio.c @@ -13,6 +13,7 @@ #include <virtio.h> #include <virtio_ring.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/io.h> #include "virtio_mmio.h" diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c index 202e5ab1d3..d9be2601bb 100644 --- a/drivers/virtio/virtio_pci_legacy.c +++ b/drivers/virtio/virtio_pci_legacy.c @@ -13,6 +13,7 @@ #include <virtio_ring.h> #include <dm/device.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/io.h> #include "virtio_pci.h" diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c index da76aea8d1..4673f4ab55 100644 --- a/drivers/virtio/virtio_pci_modern.c +++ b/drivers/virtio/virtio_pci_modern.c @@ -13,6 +13,7 @@ #include <virtio_ring.h> #include <dm/device.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/io.h> #include "virtio_pci.h" diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 0eeb3501c2..45c48a927a 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -12,6 +12,7 @@ #include <virtio_types.h> #include <virtio.h> #include <virtio_ring.h> +#include <linux/compat.h> int virtqueue_add(struct virtqueue *vq, struct virtio_sg *sgs[], unsigned int out_sgs, unsigned int in_sgs) diff --git a/drivers/virtio/virtio_sandbox.c b/drivers/virtio/virtio_sandbox.c index 2addb1ebc5..61f6a96008 100644 --- a/drivers/virtio/virtio_sandbox.c +++ b/drivers/virtio/virtio_sandbox.c @@ -11,6 +11,7 @@ #include <virtio.h> #include <virtio_ring.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/io.h> struct virtio_sandbox_priv { diff --git a/drivers/w1-eeprom/ds2502.c b/drivers/w1-eeprom/ds2502.c index 76ca460ed7..19ee4b17ea 100644 --- a/drivers/w1-eeprom/ds2502.c +++ b/drivers/w1-eeprom/ds2502.c @@ -22,6 +22,7 @@ #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/err.h> #include <w1-eeprom.h> #include <w1.h> diff --git a/drivers/w1/mxc_w1.c b/drivers/w1/mxc_w1.c index 9279ba32b8..08715c6a66 100644 --- a/drivers/w1/mxc_w1.c +++ b/drivers/w1/mxc_w1.c @@ -20,6 +20,7 @@ #include <asm/arch/clock.h> #include <common.h> #include <dm.h> +#include <dm/device_compat.h> #include <linux/io.h> #include <w1.h> diff --git a/drivers/watchdog/armada-37xx-wdt.c b/drivers/watchdog/armada-37xx-wdt.c index 91cd8a6e6a..5da8e56505 100644 --- a/drivers/watchdog/armada-37xx-wdt.c +++ b/drivers/watchdog/armada-37xx-wdt.c @@ -11,6 +11,7 @@ #include <asm/io.h> #include <asm/arch/cpu.h> #include <asm/arch/soc.h> +#include <dm/device_compat.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/watchdog/ast_wdt.c b/drivers/watchdog/ast_wdt.c index d344d54aee..fe2f6be5a7 100644 --- a/drivers/watchdog/ast_wdt.c +++ b/drivers/watchdog/ast_wdt.c @@ -9,6 +9,7 @@ #include <wdt.h> #include <asm/io.h> #include <asm/arch/wdt.h> +#include <linux/err.h> #define WDT_AST2500 2500 #define WDT_AST2400 2400 diff --git a/drivers/watchdog/cdns_wdt.c b/drivers/watchdog/cdns_wdt.c index 6a608b6371..775f06a6e1 100644 --- a/drivers/watchdog/cdns_wdt.c +++ b/drivers/watchdog/cdns_wdt.c @@ -11,6 +11,8 @@ #include <wdt.h> #include <clk.h> #include <div64.h> +#include <dm/device_compat.h> +#include <linux/err.h> #include <linux/io.h> DECLARE_GLOBAL_DATA_PTR; diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c index f1e781e4e6..ca3ccbe76c 100644 --- a/drivers/watchdog/sp805_wdt.c +++ b/drivers/watchdog/sp805_wdt.c @@ -13,6 +13,7 @@ #include <linux/bitops.h> #include <watchdog.h> #include <wdt.h> +#include <linux/err.h> #define WDTLOAD 0x000 #define WDTCONTROL 0x008 diff --git a/drivers/watchdog/xilinx_tb_wdt.c b/drivers/watchdog/xilinx_tb_wdt.c index 929c8e60d3..5580764da7 100644 --- a/drivers/watchdog/xilinx_tb_wdt.c +++ b/drivers/watchdog/xilinx_tb_wdt.c @@ -11,6 +11,7 @@ #include <common.h> #include <dm.h> #include <wdt.h> +#include <linux/err.h> #include <linux/io.h> #define XWT_CSR0_WRS_MASK 0x00000008 /* Reset status Mask */ diff --git a/fs/ext4/ext4_write.c b/fs/ext4/ext4_write.c index 3368bd8c00..67aeba1339 100644 --- a/fs/ext4/ext4_write.c +++ b/fs/ext4/ext4_write.c @@ -22,6 +22,7 @@ #include <common.h> +#include <malloc.h> #include <memalign.h> #include <linux/stat.h> #include <div64.h> diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c index 37b31d9f0f..1c616a26a2 100644 --- a/fs/ext4/ext4fs.c +++ b/fs/ext4/ext4fs.c @@ -25,6 +25,7 @@ #include <ext4fs.h> #include "ext4_common.h" #include <div64.h> +#include <malloc.h> int ext4fs_symlinknest; struct ext_filesystem ext_fs; diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 8e4a235d7c..4f96699e36 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -9,6 +9,7 @@ #include <command.h> #include <config.h> #include <fat.h> +#include <malloc.h> #include <asm/byteorder.h> #include <part.h> #include <linux/ctype.h> diff --git a/fs/sandbox/sandboxfs.c b/fs/sandbox/sandboxfs.c index 1e253611c3..af47224b6c 100644 --- a/fs/sandbox/sandboxfs.c +++ b/fs/sandbox/sandboxfs.c @@ -5,6 +5,7 @@ #include <common.h> #include <fs.h> +#include <malloc.h> #include <os.h> int sandbox_fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info) diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index 782aa9a250..6835f86fec 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c @@ -16,6 +16,7 @@ */ #include <hexdump.h> +#include <dm/devres.h> #ifndef __UBOOT__ #include <linux/module.h> diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c index 42f22a487e..f923d07652 100644 --- a/fs/ubifs/gc.c +++ b/fs/ubifs/gc.c @@ -41,6 +41,7 @@ * good, and GC takes extra care when moving them. */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/slab.h> #include <linux/pagemap.h> #include <linux/list_sort.h> diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c index 7fe94e1093..8148055f67 100644 --- a/fs/ubifs/io.c +++ b/fs/ubifs/io.c @@ -59,6 +59,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> #include <linux/slab.h> #include <u-boot/crc.h> diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c index 331a891a57..5cbb8aa1b2 100644 --- a/fs/ubifs/log.c +++ b/fs/ubifs/log.c @@ -16,6 +16,7 @@ */ #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/err.h> #endif #include "ubifs.h" diff --git a/fs/ubifs/lprops.c b/fs/ubifs/lprops.c index 5473d33997..a7c45dd5ec 100644 --- a/fs/ubifs/lprops.c +++ b/fs/ubifs/lprops.c @@ -17,6 +17,7 @@ */ #ifdef __UBOOT__ +#include <malloc.h> #include <linux/err.h> #endif #include "ubifs.h" diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c index c0076bde74..ebfb1d4dd7 100644 --- a/fs/ubifs/lpt.c +++ b/fs/ubifs/lpt.c @@ -33,6 +33,7 @@ #include "ubifs.h" #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc16.h> #include <linux/math64.h> #include <linux/slab.h> diff --git a/fs/ubifs/lpt_commit.c b/fs/ubifs/lpt_commit.c index 260216205d..aa5956c52e 100644 --- a/fs/ubifs/lpt_commit.c +++ b/fs/ubifs/lpt_commit.c @@ -14,6 +14,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc16.h> #include <linux/slab.h> #include <linux/random.h> diff --git a/fs/ubifs/master.c b/fs/ubifs/master.c index 5654d45dfb..2740aaee8b 100644 --- a/fs/ubifs/master.c +++ b/fs/ubifs/master.c @@ -12,6 +12,7 @@ #include "ubifs.h" #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/compat.h> #include <linux/err.h> #include <ubi_uboot.h> diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c index c807ff1beb..a67b3eec93 100644 --- a/fs/ubifs/orphan.c +++ b/fs/ubifs/orphan.c @@ -7,6 +7,7 @@ * Author: Adrian Hunter */ +#include <dm/devres.h> #include <linux/err.h> #include "ubifs.h" diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c index b568012fec..3388efe2b7 100644 --- a/fs/ubifs/recovery.c +++ b/fs/ubifs/recovery.c @@ -36,6 +36,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> #include <linux/slab.h> #include <u-boot/crc.h> diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c index 4064157f15..3a9fa4130e 100644 --- a/fs/ubifs/replay.c +++ b/fs/ubifs/replay.c @@ -21,6 +21,7 @@ */ #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/compat.h> #include <linux/err.h> #endif diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index 52db611d1c..599e1a35fb 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c @@ -16,6 +16,7 @@ #include "ubifs.h" #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/slab.h> #include <linux/random.h> #include <linux/math64.h> diff --git a/fs/ubifs/scan.c b/fs/ubifs/scan.c index 8ff668eec6..876a6ee661 100644 --- a/fs/ubifs/scan.c +++ b/fs/ubifs/scan.c @@ -17,6 +17,7 @@ #ifdef __UBOOT__ #include <hexdump.h> +#include <dm/devres.h> #include <linux/err.h> #endif #include "ubifs.h" diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 9939b4404f..b38513660b 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -15,6 +15,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/init.h> #include <linux/slab.h> #include <linux/module.h> diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index 8afc08ad7d..fc6fdaff8d 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c @@ -19,6 +19,7 @@ */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/crc32.h> #include <linux/slab.h> #include <u-boot/crc.h> diff --git a/fs/ubifs/tnc_misc.c b/fs/ubifs/tnc_misc.c index b8ea7e9ddb..dfa9e91903 100644 --- a/fs/ubifs/tnc_misc.c +++ b/fs/ubifs/tnc_misc.c @@ -16,6 +16,7 @@ */ #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/err.h> #endif #include "ubifs.h" diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c index 1ffdfe0d90..e097d28444 100644 --- a/fs/ubifs/ubifs.c +++ b/fs/ubifs/ubifs.c @@ -14,8 +14,10 @@ #include <common.h> #include <env.h> #include <gzip.h> +#include <malloc.h> #include <memalign.h> #include "ubifs.h" +#include <dm/devres.h> #include <u-boot/zlib.h> #include <linux/compat.h> diff --git a/fs/yaffs2/yaffs_allocator.c b/fs/yaffs2/yaffs_allocator.c index 611061fb45..961dc22ef3 100644 --- a/fs/yaffs2/yaffs_allocator.c +++ b/fs/yaffs2/yaffs_allocator.c @@ -15,6 +15,7 @@ #include "yaffs_guts.h" #include "yaffs_trace.h" #include "yportenv.h" +#include <dm/devres.h> /* * Each entry in yaffs_tnode_list and yaffs_obj_list hold blocks diff --git a/fs/yaffs2/yaffs_checkptrw.c b/fs/yaffs2/yaffs_checkptrw.c index 997a618aee..628f02bb48 100644 --- a/fs/yaffs2/yaffs_checkptrw.c +++ b/fs/yaffs2/yaffs_checkptrw.c @@ -13,6 +13,7 @@ #include "yaffs_checkptrw.h" #include "yaffs_getblockinfo.h" +#include <dm/devres.h> static int yaffs2_checkpt_space_ok(struct yaffs_dev *dev) { diff --git a/fs/yaffs2/yaffs_guts.c b/fs/yaffs2/yaffs_guts.c index c8b27adda9..e13a73298b 100644 --- a/fs/yaffs2/yaffs_guts.c +++ b/fs/yaffs2/yaffs_guts.c @@ -13,6 +13,7 @@ #include "yportenv.h" #include "yaffs_trace.h" +#include <dm/devres.h> #include "yaffs_guts.h" #include "yaffs_getblockinfo.h" diff --git a/fs/yaffs2/yaffs_nandif.c b/fs/yaffs2/yaffs_nandif.c index 79b00ab3b7..ee5a172060 100644 --- a/fs/yaffs2/yaffs_nandif.c +++ b/fs/yaffs2/yaffs_nandif.c @@ -13,6 +13,7 @@ #include "yportenv.h" #include "yaffs_guts.h" +#include <malloc.h> #include "yaffs_nandif.h" diff --git a/fs/yaffs2/yaffs_summary.c b/fs/yaffs2/yaffs_summary.c index e9e1b5d857..4f9449a844 100644 --- a/fs/yaffs2/yaffs_summary.c +++ b/fs/yaffs2/yaffs_summary.c @@ -28,6 +28,7 @@ #include "yaffs_nand.h" #include "yaffs_getblockinfo.h" #include "yaffs_bitmap.h" +#include <dm/devres.h> /* * The summary is built up in an array of summary tags. diff --git a/fs/yaffs2/yaffs_uboot_glue.c b/fs/yaffs2/yaffs_uboot_glue.c index 2a70e4a543..7a15a02974 100644 --- a/fs/yaffs2/yaffs_uboot_glue.c +++ b/fs/yaffs2/yaffs_uboot_glue.c @@ -21,6 +21,7 @@ #include <common.h> #include <div64.h> +#include <malloc.h> #include <config.h> #include "nand.h" diff --git a/fs/yaffs2/yaffs_yaffs1.c b/fs/yaffs2/yaffs_yaffs1.c index 357d8f75dd..8c176b982f 100644 --- a/fs/yaffs2/yaffs_yaffs1.c +++ b/fs/yaffs2/yaffs_yaffs1.c @@ -18,6 +18,7 @@ #include "yaffs_getblockinfo.h" #include "yaffs_nand.h" #include "yaffs_attribs.h" +#include <dm/devres.h> int yaffs1_scan(struct yaffs_dev *dev) { diff --git a/fs/yaffs2/yaffs_yaffs2.c b/fs/yaffs2/yaffs_yaffs2.c index f76dcaeeb1..14d497eb99 100644 --- a/fs/yaffs2/yaffs_yaffs2.c +++ b/fs/yaffs2/yaffs_yaffs2.c @@ -21,6 +21,7 @@ #include "yaffs_verify.h" #include "yaffs_attribs.h" #include "yaffs_summary.h" +#include <dm/devres.h> /* * Checkpoints are really no benefit on very small partitions. diff --git a/fs/yaffs2/yaffsfs.c b/fs/yaffs2/yaffsfs.c index 47abc6beda..510faaeed1 100644 --- a/fs/yaffs2/yaffsfs.c +++ b/fs/yaffs2/yaffsfs.c @@ -17,6 +17,7 @@ #include "yaffscfg.h" #include "yportenv.h" #include "yaffs_trace.h" +#include <dm/devres.h> #define YAFFSFS_MAX_SYMLINK_DEREFERENCES 5 diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index d6cf18744f..05777e6afe 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -248,7 +248,7 @@ int gpio_xlate_offs_flags(struct udevice *dev, struct gpio_desc *desc, */ struct dm_gpio_ops { int (*request)(struct udevice *dev, unsigned offset, const char *label); - int (*free)(struct udevice *dev, unsigned offset); + int (*rfree)(struct udevice *dev, unsigned int offset); int (*direction_input)(struct udevice *dev, unsigned offset); int (*direction_output)(struct udevice *dev, unsigned offset, int value); diff --git a/include/bloblist.h b/include/bloblist.h index 85144010ab..609ac421d6 100644 --- a/include/bloblist.h +++ b/include/bloblist.h @@ -152,6 +152,19 @@ int bloblist_ensure_size(uint tag, int size, void **blobp); void *bloblist_ensure(uint tag, int size); /** + * bloblist_ensure_size_ret() - Find or add a blob + * + * Find an existing blob, or add a new one if not found + * + * @tag: Tag to add (enum bloblist_tag_t) + * @sizep: Size of the blob to create; returns size of actual blob + * @blobp: Returns a pointer to blob on success + * @return 0 if OK, -ENOSPC if it is missing and could not be added due to lack + * of space + */ +int bloblist_ensure_size_ret(uint tag, int *sizep, void **blobp); + +/** * bloblist_new() - Create a new, empty bloblist of a given size * * @addr: Address of bloblist @@ -170,7 +183,8 @@ int bloblist_new(ulong addr, uint size, uint flags); * @return 0 if OK, -ENOENT if the magic number doesn't match (indicating that * there problem is no bloblist at the given address), -EPROTONOSUPPORT * if the version does not match, -EIO if the checksum does not match, - * -EFBIG if the expected size does not match the detected size + * -EFBIG if the expected size does not match the detected size, -ENOSPC + * if the size is not large enough to hold the headers */ int bloblist_check(ulong addr, uint size); diff --git a/include/clk-uclass.h b/include/clk-uclass.h index e76d98e2f6..dac42dab36 100644 --- a/include/clk-uclass.h +++ b/include/clk-uclass.h @@ -53,14 +53,14 @@ struct clk_ops { */ int (*request)(struct clk *clock); /** - * free - Free a previously requested clock. + * rfree - Free a previously requested clock. * * This is the implementation of the client clk_free() API. * * @clock: The clock to free. * @return 0 if OK, or a negative error code. */ - int (*free)(struct clk *clock); + int (*rfree)(struct clk *clock); /** * get_rate() - Get current clock rate. * diff --git a/include/console.h b/include/console.h index e935c601f1..74afe22b7e 100644 --- a/include/console.h +++ b/include/console.h @@ -42,6 +42,25 @@ void console_record_reset(void); void console_record_reset_enable(void); /** + * console_record_readline() - Read a line from the console output + * + * This reads the next available line from the console output previously + * recorded. + * + * @str: Place to put string + * @maxlen: Maximum length of @str including nul terminator + * @return length of string returned + */ +int console_record_readline(char *str, int maxlen); + +/** + * console_record_avail() - Get the number of available bytes in console output + * + * @return available bytes (0 if empty) + */ +int console_record_avail(void); + +/** * console_announce_r() - print a U-Boot console on non-serial consoles * * When U-Boot starts up with a display it generally does not announce itself diff --git a/include/dm/device.h b/include/dm/device.h index 1138a09149..ab806d0b7e 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -14,7 +14,6 @@ #include <dm/uclass-id.h> #include <fdtdec.h> #include <linker_lists.h> -#include <linux/compat.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/printk.h> @@ -409,7 +408,8 @@ const char *dev_get_uclass_name(const struct udevice *dev); * @return 0 if OK, -ENODEV if no such device, other error if the device fails * to probe */ -int device_get_child(struct udevice *parent, int index, struct udevice **devp); +int device_get_child(const struct udevice *parent, int index, + struct udevice **devp); /** * device_get_child_count() - Get the available child count of a device @@ -418,7 +418,7 @@ int device_get_child(struct udevice *parent, int index, struct udevice **devp); * * @parent: Parent device to check */ -int device_get_child_count(struct udevice *parent); +int device_get_child_count(const struct udevice *parent); /** * device_find_child_by_seq() - Find a child device based on a sequence @@ -439,7 +439,7 @@ int device_get_child_count(struct udevice *parent); * Set to NULL if none is found * @return 0 if OK, -ve on error */ -int device_find_child_by_seq(struct udevice *parent, int seq_or_req_seq, +int device_find_child_by_seq(const struct udevice *parent, int seq_or_req_seq, bool find_req_seq, struct udevice **devp); /** @@ -457,7 +457,7 @@ int device_find_child_by_seq(struct udevice *parent, int seq_or_req_seq, * Set to NULL if none is found * @return 0 if OK, -ve on error */ -int device_get_child_by_seq(struct udevice *parent, int seq, +int device_get_child_by_seq(const struct udevice *parent, int seq, struct udevice **devp); /** @@ -470,7 +470,7 @@ int device_get_child_by_seq(struct udevice *parent, int seq, * @devp: Returns pointer to device if found, otherwise this is set to NULL * @return 0 if OK, -ve on error */ -int device_find_child_by_of_offset(struct udevice *parent, int of_offset, +int device_find_child_by_of_offset(const struct udevice *parent, int of_offset, struct udevice **devp); /** @@ -485,7 +485,7 @@ int device_find_child_by_of_offset(struct udevice *parent, int of_offset, * @devp: Returns pointer to device if found, otherwise this is set to NULL * @return 0 if OK, -ve on error */ -int device_get_child_by_of_offset(struct udevice *parent, int of_offset, +int device_get_child_by_of_offset(const struct udevice *parent, int of_offset, struct udevice **devp); /** @@ -524,7 +524,8 @@ int device_get_global_by_ofnode(ofnode node, struct udevice **devp); * @devp: Returns first child device, or NULL if none * @return 0 */ -int device_find_first_child(struct udevice *parent, struct udevice **devp); +int device_find_first_child(const struct udevice *parent, + struct udevice **devp); /** * device_find_next_child() - Find the next child of a device @@ -548,7 +549,7 @@ int device_find_next_child(struct udevice **devp); * @devp: Returns device found, if any * @return 0 if found, else -ENODEV */ -int device_find_first_inactive_child(struct udevice *parent, +int device_find_first_inactive_child(const struct udevice *parent, enum uclass_id uclass_id, struct udevice **devp); @@ -560,7 +561,7 @@ int device_find_first_inactive_child(struct udevice *parent, * @devp: Returns first child device in that uclass, if any * @return 0 if found, else -ENODEV */ -int device_find_first_child_by_uclass(struct udevice *parent, +int device_find_first_child_by_uclass(const struct udevice *parent, enum uclass_id uclass_id, struct udevice **devp); @@ -572,10 +573,57 @@ int device_find_first_child_by_uclass(struct udevice *parent, * @devp: Returns device found, if any * @return 0 if found, else -ENODEV */ -int device_find_child_by_name(struct udevice *parent, const char *name, +int device_find_child_by_name(const struct udevice *parent, const char *name, struct udevice **devp); /** + * device_first_child_ofdata_err() - Find the first child and reads its platdata + * + * The ofdata_to_platdata() method is called on the child before it is returned, + * but the child is not probed. + * + * @parent: Parent to check + * @devp: Returns child that was found, if any + * @return 0 on success, -ENODEV if no children, other -ve on error + */ +int device_first_child_ofdata_err(struct udevice *parent, + struct udevice **devp); + +/* + * device_next_child_ofdata_err() - Find the next child and read its platdata + * + * The ofdata_to_platdata() method is called on the child before it is returned, + * but the child is not probed. + * + * @devp: On entry, points to the previous child; on exit returns the child that + * was found, if any + * @return 0 on success, -ENODEV if no children, other -ve on error + */ +int device_next_child_ofdata_err(struct udevice **devp); + +/** + * device_first_child_err() - Get the first child of a device + * + * The device returned is probed if necessary, and ready for use + * + * @parent: Parent device to search + * @devp: Returns device found, if any + * @return 0 if found, -ENODEV if not, -ve error if device failed to probe + */ +int device_first_child_err(struct udevice *parent, struct udevice **devp); + +/** + * device_next_child_err() - Get the next child of a parent device + * + * The device returned is probed if necessary, and ready for use + * + * @devp: On entry, pointer to device to lookup. On exit, returns pointer + * to the next sibling if no error occurred + * @return 0 if found, -ENODEV if not, -ve error if device failed to probe + */ +int device_next_child_err(struct udevice **devp); + +/** * device_has_children() - check if a device has any children * * @dev: Device to check @@ -590,7 +638,7 @@ bool device_has_children(const struct udevice *dev); * @return true if the device has one or more children and at least one of * them is active (probed). */ -bool device_has_active_children(struct udevice *dev); +bool device_has_active_children(const struct udevice *dev); /** * device_is_last_sibling() - check if a device is the last sibling @@ -603,7 +651,7 @@ bool device_has_active_children(struct udevice *dev); * @return true if there are no more siblings after this one - i.e. is it * last in the list. */ -bool device_is_last_sibling(struct udevice *dev); +bool device_is_last_sibling(const struct udevice *dev); /** * device_set_name() - set the name of a device @@ -643,7 +691,7 @@ void device_set_name_alloced(struct udevice *dev); * device * @return true if OK, false if the compatible is not found */ -bool device_is_compatible(struct udevice *dev, const char *compat); +bool device_is_compatible(const struct udevice *dev, const char *compat); /** * of_machine_is_compatible() - check if the machine is compatible with @@ -678,7 +726,7 @@ int dev_enable_by_path(const char *path); * @dev: device to test * @return: true if it is on a PCI bus, false otherwise */ -static inline bool device_is_on_pci_bus(struct udevice *dev) +static inline bool device_is_on_pci_bus(const struct udevice *dev) { return device_get_uclass_id(dev->parent) == UCLASS_PCI; } @@ -705,6 +753,40 @@ static inline bool device_is_on_pci_bus(struct udevice *dev) list_for_each_entry(pos, &parent->child_head, sibling_node) /** + * device_foreach_child_ofdata_to_platdata() - iterate through children + * + * This stops when it gets an error, with @pos set to the device that failed to + * read ofdata. + + * This creates a for() loop which works through the available children of + * a device in order from start to end. Device ofdata is read by calling + * device_ofdata_to_platdata() on each one. The devices are not probed. + * + * @pos: struct udevice * for the current device + * @parent: parent device to scan + */ +#define device_foreach_child_ofdata_to_platdata(pos, parent) \ + for (int _ret = device_first_child_ofdata_err(parent, &dev); !_ret; \ + _ret = device_next_child_ofdata_err(&dev)) + +/** + * device_foreach_child_probe() - iterate through children, probing them + * + * This creates a for() loop which works through the available children of + * a device in order from start to end. Devices are probed if necessary, + * and ready for use. + * + * This stops when it gets an error, with @pos set to the device that failed to + * probe + * + * @pos: struct udevice * for the current device + * @parent: parent device to scan + */ +#define device_foreach_child_probe(pos, parent) \ + for (int _ret = device_first_child_err(parent, &dev); !_ret; \ + _ret = device_next_child_err(&dev)) + +/** * dm_scan_fdt_dev() - Bind child device in a the device tree * * This handles device which have sub-nodes in the device tree. It scans all @@ -720,77 +802,4 @@ static inline bool device_is_on_pci_bus(struct udevice *dev) */ int dm_scan_fdt_dev(struct udevice *dev); -#include <dm/devres.h> - -/* - * REVISIT: - * remove the following after resolving conflicts with <linux/compat.h> - */ -#ifdef dev_dbg -#undef dev_dbg -#endif -#ifdef dev_vdbg -#undef dev_vdbg -#endif -#ifdef dev_info -#undef dev_info -#endif -#ifdef dev_err -#undef dev_err -#endif -#ifdef dev_warn -#undef dev_warn -#endif - -/* - * REVISIT: - * print device name like Linux - */ -#define dev_printk(dev, fmt, ...) \ -({ \ - printk(fmt, ##__VA_ARGS__); \ -}) - -#define __dev_printk(level, dev, fmt, ...) \ -({ \ - if (level < CONFIG_VAL(LOGLEVEL)) \ - dev_printk(dev, fmt, ##__VA_ARGS__); \ -}) - -#define dev_emerg(dev, fmt, ...) \ - __dev_printk(0, dev, fmt, ##__VA_ARGS__) -#define dev_alert(dev, fmt, ...) \ - __dev_printk(1, dev, fmt, ##__VA_ARGS__) -#define dev_crit(dev, fmt, ...) \ - __dev_printk(2, dev, fmt, ##__VA_ARGS__) -#define dev_err(dev, fmt, ...) \ - __dev_printk(3, dev, fmt, ##__VA_ARGS__) -#define dev_warn(dev, fmt, ...) \ - __dev_printk(4, dev, fmt, ##__VA_ARGS__) -#define dev_notice(dev, fmt, ...) \ - __dev_printk(5, dev, fmt, ##__VA_ARGS__) -#define dev_info(dev, fmt, ...) \ - __dev_printk(6, dev, fmt, ##__VA_ARGS__) - -#ifdef DEBUG -#define dev_dbg(dev, fmt, ...) \ - __dev_printk(7, dev, fmt, ##__VA_ARGS__) -#else -#define dev_dbg(dev, fmt, ...) \ -({ \ - if (0) \ - __dev_printk(7, dev, fmt, ##__VA_ARGS__); \ -}) -#endif - -#ifdef VERBOSE_DEBUG -#define dev_vdbg dev_dbg -#else -#define dev_vdbg(dev, fmt, ...) \ -({ \ - if (0) \ - __dev_printk(7, dev, fmt, ##__VA_ARGS__); \ -}) -#endif - #endif diff --git a/include/dm/device_compat.h b/include/dm/device_compat.h new file mode 100644 index 0000000000..3d8cd09f4c --- /dev/null +++ b/include/dm/device_compat.h @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) 2013 Google, Inc + * + * (C) Copyright 2012 + * Pavel Herrmann <morpheus.ibis@gmail.com> + * Marek Vasut <marex@denx.de> + */ + +#ifndef _DM_DEVICE_COMPAT_H +#define _DM_DEVICE_COMPAT_H + +#include <linux/compat.h> + +/* + * REVISIT: + * remove the following after resolving conflicts with <linux/compat.h> + */ +#ifdef dev_dbg +#undef dev_dbg +#endif +#ifdef dev_vdbg +#undef dev_vdbg +#endif +#ifdef dev_info +#undef dev_info +#endif +#ifdef dev_err +#undef dev_err +#endif +#ifdef dev_warn +#undef dev_warn +#endif + +/* + * REVISIT: + * print device name like Linux + */ +#define dev_printk(dev, fmt, ...) \ +({ \ + printk(fmt, ##__VA_ARGS__); \ +}) + +#define __dev_printk(level, dev, fmt, ...) \ +({ \ + if (level < CONFIG_VAL(LOGLEVEL)) \ + dev_printk(dev, fmt, ##__VA_ARGS__); \ +}) + +#define dev_emerg(dev, fmt, ...) \ + __dev_printk(0, dev, fmt, ##__VA_ARGS__) +#define dev_alert(dev, fmt, ...) \ + __dev_printk(1, dev, fmt, ##__VA_ARGS__) +#define dev_crit(dev, fmt, ...) \ + __dev_printk(2, dev, fmt, ##__VA_ARGS__) +#define dev_err(dev, fmt, ...) \ + __dev_printk(3, dev, fmt, ##__VA_ARGS__) +#define dev_warn(dev, fmt, ...) \ + __dev_printk(4, dev, fmt, ##__VA_ARGS__) +#define dev_notice(dev, fmt, ...) \ + __dev_printk(5, dev, fmt, ##__VA_ARGS__) +#define dev_info(dev, fmt, ...) \ + __dev_printk(6, dev, fmt, ##__VA_ARGS__) + +#ifdef DEBUG +#define dev_dbg(dev, fmt, ...) \ + __dev_printk(7, dev, fmt, ##__VA_ARGS__) +#else +#define dev_dbg(dev, fmt, ...) \ +({ \ + if (0) \ + __dev_printk(7, dev, fmt, ##__VA_ARGS__); \ +}) +#endif + +#ifdef VERBOSE_DEBUG +#define dev_vdbg dev_dbg +#else +#define dev_vdbg(dev, fmt, ...) \ +({ \ + if (0) \ + __dev_printk(7, dev, fmt, ##__VA_ARGS__); \ +}) +#endif + +#endif diff --git a/include/dm/devres.h b/include/dm/devres.h index 9c69196054..17bb1ee8da 100644 --- a/include/dm/devres.h +++ b/include/dm/devres.h @@ -11,6 +11,10 @@ #ifndef _DM_DEVRES_H #define _DM_DEVRES_H +#include <linux/compat.h> + +struct udevice; + /* device resource management */ typedef void (*dr_release_t)(struct udevice *dev, void *res); typedef int (*dr_match_t)(struct udevice *dev, void *res, void *match_data); diff --git a/include/dm/fdtaddr.h b/include/dm/fdtaddr.h index 959d3bc2d6..a4fda581a7 100644 --- a/include/dm/fdtaddr.h +++ b/include/dm/fdtaddr.h @@ -21,7 +21,7 @@ struct udevice; * * @return addr */ -fdt_addr_t devfdt_get_addr(struct udevice *dev); +fdt_addr_t devfdt_get_addr(const struct udevice *dev); /** * devfdt_get_addr_ptr() - Return pointer to the address of the reg property @@ -31,7 +31,7 @@ fdt_addr_t devfdt_get_addr(struct udevice *dev); * * @return Pointer to addr, or NULL if there is no such property */ -void *devfdt_get_addr_ptr(struct udevice *dev); +void *devfdt_get_addr_ptr(const struct udevice *dev); /** * devfdt_remap_addr() - Return pointer to the memory-mapped I/O address @@ -41,7 +41,7 @@ void *devfdt_get_addr_ptr(struct udevice *dev); * * @return Pointer to addr, or NULL if there is no such property */ -void *devfdt_remap_addr(struct udevice *dev); +void *devfdt_remap_addr(const struct udevice *dev); /** * devfdt_remap_addr_index() - Return indexed pointer to the memory-mapped @@ -53,7 +53,7 @@ void *devfdt_remap_addr(struct udevice *dev); * * @return Pointer to addr, or NULL if there is no such property */ -void *devfdt_remap_addr_index(struct udevice *dev, int index); +void *devfdt_remap_addr_index(const struct udevice *dev, int index); /** * devfdt_remap_addr_name() - Get the reg property of a device, indexed by @@ -66,7 +66,7 @@ void *devfdt_remap_addr_index(struct udevice *dev, int index); * * @return Pointer to addr, or NULL if there is no such property */ -void *devfdt_remap_addr_name(struct udevice *dev, const char *name); +void *devfdt_remap_addr_name(const struct udevice *dev, const char *name); /** * devfdt_map_physmem() - Read device address from reg property of the @@ -79,7 +79,7 @@ void *devfdt_remap_addr_name(struct udevice *dev, const char *name); * @return mapped address, or NULL if the device does not have reg * property. */ -void *devfdt_map_physmem(struct udevice *dev, unsigned long size); +void *devfdt_map_physmem(const struct udevice *dev, unsigned long size); /** * devfdt_get_addr_index() - Get the indexed reg property of a device @@ -90,7 +90,7 @@ void *devfdt_map_physmem(struct udevice *dev, unsigned long size); * * @return addr */ -fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index); +fdt_addr_t devfdt_get_addr_index(const struct udevice *dev, int index); /** * devfdt_get_addr_size_index() - Get the indexed reg property of a device @@ -105,8 +105,8 @@ fdt_addr_t devfdt_get_addr_index(struct udevice *dev, int index); * * @return addr */ -fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index, - fdt_size_t *size); +fdt_addr_t devfdt_get_addr_size_index(const struct udevice *dev, int index, + fdt_size_t *size); /** * devfdt_get_addr_name() - Get the reg property of a device, indexed by name @@ -118,7 +118,7 @@ fdt_addr_t devfdt_get_addr_size_index(struct udevice *dev, int index, * * @return addr */ -fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name); +fdt_addr_t devfdt_get_addr_name(const struct udevice *dev, const char *name); /** * devfdt_get_addr_size_name() - Get the reg property and its size for a device, @@ -135,8 +135,8 @@ fdt_addr_t devfdt_get_addr_name(struct udevice *dev, const char *name); * * @return addr */ -fdt_addr_t devfdt_get_addr_size_name(struct udevice *dev, const char *name, - fdt_size_t *size); +fdt_addr_t devfdt_get_addr_size_name(const struct udevice *dev, + const char *name, fdt_size_t *size); /** * devfdt_get_addr_pci() - Read an address and handle PCI address translation @@ -144,6 +144,6 @@ fdt_addr_t devfdt_get_addr_size_name(struct udevice *dev, const char *name, * @dev: Device to read from * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t devfdt_get_addr_pci(struct udevice *dev); +fdt_addr_t devfdt_get_addr_pci(const struct udevice *dev); #endif diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 4282169706..b5a50e8849 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -257,9 +257,20 @@ int ofnode_read_u64(ofnode node, const char *propname, u64 *outp); u64 ofnode_read_u64_default(ofnode node, const char *propname, u64 def); /** + * ofnode_read_prop() - Read a property from a node + * + * @node: valid node reference to read property from + * @propname: name of the property to read + * @sizep: if non-NULL, returns the size of the property, or an error code + if not found + * @return property value, or NULL if there is no such property + */ +const void *ofnode_read_prop(ofnode node, const char *propname, int *sizep); + +/** * ofnode_read_string() - Read a string from a property * - * @ref: valid node reference to read property from + * @node: valid node reference to read property from * @propname: name of the property to read * @return string from property value, or NULL if there is no such property */ @@ -510,21 +521,37 @@ int ofnode_count_phandle_with_args(ofnode node, const char *list_name, ofnode ofnode_path(const char *path); /** - * ofnode_get_chosen_prop() - get the value of a chosen property + * ofnode_read_chosen_prop() - get the value of a chosen property * * This looks for a property within the /chosen node and returns its value * * @propname: Property name to look for + * @sizep: Returns size of property, or FDT_ERR_... error code if function + * returns NULL * @return property value if found, else NULL */ -const char *ofnode_get_chosen_prop(const char *propname); +const void *ofnode_read_chosen_prop(const char *propname, int *sizep); /** - * ofnode_get_chosen_node() - get the chosen node + * ofnode_read_chosen_string() - get the string value of a chosen property + * + * This looks for a property within the /chosen node and returns its value, + * checking that it is a valid nul-terminated string + * + * @propname: Property name to look for + * @return string value if found, else NULL + */ +const char *ofnode_read_chosen_string(const char *propname); + +/** + * ofnode_get_chosen_node() - get a referenced node from the chosen node + * + * This looks up a named property in the chosen node and uses that as a path to + * look up a code. * - * @return the chosen node if present, else ofnode_null() + * @return the referenced node if present, else ofnode_null() */ -ofnode ofnode_get_chosen_node(const char *name); +ofnode ofnode_get_chosen_node(const char *propname); struct display_timing; /** diff --git a/include/dm/read.h b/include/dm/read.h index d37fcb504d..da8c7f25e7 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -16,12 +16,12 @@ struct resource; #if CONFIG_IS_ENABLED(OF_LIVE) -static inline const struct device_node *dev_np(struct udevice *dev) +static inline const struct device_node *dev_np(const struct udevice *dev) { return ofnode_to_np(dev->node); } #else -static inline const struct device_node *dev_np(struct udevice *dev) +static inline const struct device_node *dev_np(const struct udevice *dev) { return NULL; } @@ -33,12 +33,12 @@ static inline const struct device_node *dev_np(struct udevice *dev) * @dev: device to check * @return reference of the the device's DT node */ -static inline ofnode dev_ofnode(struct udevice *dev) +static inline ofnode dev_ofnode(const struct udevice *dev) { return dev->node; } -static inline bool dev_of_valid(struct udevice *dev) +static inline bool dev_of_valid(const struct udevice *dev) { return ofnode_valid(dev_ofnode(dev)); } @@ -53,7 +53,7 @@ static inline bool dev_of_valid(struct udevice *dev) * @outp: place to put value (if found) * @return 0 if OK, -ve on error */ -int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp); +int dev_read_u32(const struct udevice *dev, const char *propname, u32 *outp); /** * dev_read_u32_default() - read a 32-bit integer from a device's DT property @@ -63,7 +63,8 @@ int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp); * @def: default value to return if the property has no value * @return property value, or @def if not found */ -int dev_read_u32_default(struct udevice *dev, const char *propname, int def); +int dev_read_u32_default(const struct udevice *dev, const char *propname, + int def); /** * dev_read_s32() - read a signed 32-bit integer from a device's DT property @@ -73,7 +74,7 @@ int dev_read_u32_default(struct udevice *dev, const char *propname, int def); * @outp: place to put value (if found) * @return 0 if OK, -ve on error */ -int dev_read_s32(struct udevice *dev, const char *propname, s32 *outp); +int dev_read_s32(const struct udevice *dev, const char *propname, s32 *outp); /** * dev_read_s32_default() - read a signed 32-bit int from a device's DT property @@ -83,7 +84,8 @@ int dev_read_s32(struct udevice *dev, const char *propname, s32 *outp); * @def: default value to return if the property has no value * @return property value, or @def if not found */ -int dev_read_s32_default(struct udevice *dev, const char *propname, int def); +int dev_read_s32_default(const struct udevice *dev, const char *propname, + int def); /** * dev_read_u32u() - read a 32-bit integer from a device's DT property @@ -95,7 +97,7 @@ int dev_read_s32_default(struct udevice *dev, const char *propname, int def); * @outp: place to put value (if found) * @return 0 if OK, -ve on error */ -int dev_read_u32u(struct udevice *dev, const char *propname, uint *outp); +int dev_read_u32u(const struct udevice *dev, const char *propname, uint *outp); /** * dev_read_u64() - read a 64-bit integer from a device's DT property @@ -105,7 +107,7 @@ int dev_read_u32u(struct udevice *dev, const char *propname, uint *outp); * @outp: place to put value (if found) * @return 0 if OK, -ve on error */ -int dev_read_u64(struct udevice *dev, const char *propname, u64 *outp); +int dev_read_u64(const struct udevice *dev, const char *propname, u64 *outp); /** * dev_read_u64_default() - read a 64-bit integer from a device's DT property @@ -115,7 +117,8 @@ int dev_read_u64(struct udevice *dev, const char *propname, u64 *outp); * @def: default value to return if the property has no value * @return property value, or @def if not found */ -u64 dev_read_u64_default(struct udevice *dev, const char *propname, u64 def); +u64 dev_read_u64_default(const struct udevice *dev, const char *propname, + u64 def); /** * dev_read_string() - Read a string from a device's DT property @@ -124,7 +127,7 @@ u64 dev_read_u64_default(struct udevice *dev, const char *propname, u64 def); * @propname: name of the property to read * @return string from property value, or NULL if there is no such property */ -const char *dev_read_string(struct udevice *dev, const char *propname); +const char *dev_read_string(const struct udevice *dev, const char *propname); /** * dev_read_bool() - read a boolean value from a device's DT property @@ -133,7 +136,7 @@ const char *dev_read_string(struct udevice *dev, const char *propname); * @propname: name of property to read * @return true if property is present (meaning true), false if not present */ -bool dev_read_bool(struct udevice *dev, const char *propname); +bool dev_read_bool(const struct udevice *dev, const char *propname); /** * dev_read_subnode() - find a named subnode of a device @@ -143,7 +146,7 @@ bool dev_read_bool(struct udevice *dev, const char *propname); * @return reference to subnode (which can be invalid if there is no such * subnode) */ -ofnode dev_read_subnode(struct udevice *dev, const char *subbnode_name); +ofnode dev_read_subnode(const struct udevice *dev, const char *subbnode_name); /** * dev_read_size() - read the size of a property @@ -152,7 +155,7 @@ ofnode dev_read_subnode(struct udevice *dev, const char *subbnode_name); * @propname: property to check * @return size of property if present, or -EINVAL if not */ -int dev_read_size(struct udevice *dev, const char *propname); +int dev_read_size(const struct udevice *dev, const char *propname); /** * dev_read_addr_index() - Get the indexed reg property of a device @@ -163,7 +166,7 @@ int dev_read_size(struct udevice *dev, const char *propname); * * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr_index(struct udevice *dev, int index); +fdt_addr_t dev_read_addr_index(const struct udevice *dev, int index); /** * dev_read_addr_size_index() - Get the indexed reg property of a device @@ -175,7 +178,7 @@ fdt_addr_t dev_read_addr_index(struct udevice *dev, int index); * * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr_size_index(struct udevice *dev, int index, +fdt_addr_t dev_read_addr_size_index(const struct udevice *dev, int index, fdt_size_t *size); /** @@ -188,7 +191,7 @@ fdt_addr_t dev_read_addr_size_index(struct udevice *dev, int index, * * @return pointer or NULL if not found */ -void *dev_remap_addr_index(struct udevice *dev, int index); +void *dev_remap_addr_index(const struct udevice *dev, int index); /** * dev_read_addr_name() - Get the reg property of a device, indexed by name @@ -200,7 +203,7 @@ void *dev_remap_addr_index(struct udevice *dev, int index); * * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr_name(struct udevice *dev, const char* name); +fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name); /** * dev_read_addr_size_name() - Get the reg property of a device, indexed by name @@ -213,7 +216,7 @@ fdt_addr_t dev_read_addr_name(struct udevice *dev, const char* name); * * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr_size_name(struct udevice *dev, const char *name, +fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name, fdt_size_t *size); /** @@ -227,7 +230,7 @@ fdt_addr_t dev_read_addr_size_name(struct udevice *dev, const char *name, * * @return pointer or NULL if not found */ -void *dev_remap_addr_name(struct udevice *dev, const char* name); +void *dev_remap_addr_name(const struct udevice *dev, const char *name); /** * dev_read_addr() - Get the reg property of a device @@ -236,7 +239,7 @@ void *dev_remap_addr_name(struct udevice *dev, const char* name); * * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr(struct udevice *dev); +fdt_addr_t dev_read_addr(const struct udevice *dev); /** * dev_read_addr_ptr() - Get the reg property of a device @@ -246,7 +249,7 @@ fdt_addr_t dev_read_addr(struct udevice *dev); * * @return pointer or NULL if not found */ -void *dev_read_addr_ptr(struct udevice *dev); +void *dev_read_addr_ptr(const struct udevice *dev); /** * dev_read_addr_pci() - Read an address and handle PCI address translation @@ -266,7 +269,7 @@ void *dev_read_addr_ptr(struct udevice *dev); * @dev: Device to read from * @return address or FDT_ADDR_T_NONE if not found */ -fdt_addr_t dev_read_addr_pci(struct udevice *dev); +fdt_addr_t dev_read_addr_pci(const struct udevice *dev); /** * dev_remap_addr() - Get the reg property of a device as a @@ -276,7 +279,7 @@ fdt_addr_t dev_read_addr_pci(struct udevice *dev); * * @return pointer or NULL if not found */ -void *dev_remap_addr(struct udevice *dev); +void *dev_remap_addr(const struct udevice *dev); /** * dev_read_addr_size() - get address and size from a device property @@ -289,8 +292,8 @@ void *dev_remap_addr(struct udevice *dev); * @sizep: place to put size value (on success) * @return address value, or FDT_ADDR_T_NONE on error */ -fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, - fdt_size_t *sizep); +fdt_addr_t dev_read_addr_size(const struct udevice *dev, const char *propname, + fdt_size_t *sizep); /** * dev_read_name() - get the name of a device's node @@ -298,7 +301,7 @@ fdt_addr_t dev_read_addr_size(struct udevice *dev, const char *propname, * @dev: Device to read from * @return name of node */ -const char *dev_read_name(struct udevice *dev); +const char *dev_read_name(const struct udevice *dev); /** * dev_read_stringlist_search() - find string in a string list and return index @@ -318,8 +321,8 @@ const char *dev_read_name(struct udevice *dev); * -ENODATA if the property is not found * -EINVAL on some other error */ -int dev_read_stringlist_search(struct udevice *dev, const char *property, - const char *string); +int dev_read_stringlist_search(const struct udevice *dev, const char *property, + const char *string); /** * dev_read_string_index() - obtain an indexed string from a string list @@ -332,8 +335,8 @@ int dev_read_stringlist_search(struct udevice *dev, const char *property, * @return: * length of string, if found or -ve error value if not found */ -int dev_read_string_index(struct udevice *dev, const char *propname, int index, - const char **outp); +int dev_read_string_index(const struct udevice *dev, const char *propname, + int index, const char **outp); /** * dev_read_string_count() - find the number of strings in a string list @@ -343,7 +346,7 @@ int dev_read_string_index(struct udevice *dev, const char *propname, int index, * @return: * number of strings in the list, or -ve error value if not found */ -int dev_read_string_count(struct udevice *dev, const char *propname); +int dev_read_string_count(const struct udevice *dev, const char *propname); /** * dev_read_phandle_with_args() - Find a node pointed by phandle in a list * @@ -382,10 +385,9 @@ int dev_read_string_count(struct udevice *dev, const char *propname); * @cells_name could not be found, the arguments were truncated or there * were too many arguments. */ -int dev_read_phandle_with_args(struct udevice *dev, const char *list_name, - const char *cells_name, int cell_count, - int index, - struct ofnode_phandle_args *out_args); +int dev_read_phandle_with_args(const struct udevice *dev, const char *list_name, + const char *cells_name, int cell_count, + int index, struct ofnode_phandle_args *out_args); /** * dev_count_phandle_with_args() - Return phandle number in a list @@ -402,8 +404,8 @@ int dev_read_phandle_with_args(struct udevice *dev, const char *list_name, * errno value. */ -int dev_count_phandle_with_args(struct udevice *dev, const char *list_name, - const char *cells_name); +int dev_count_phandle_with_args(const struct udevice *dev, + const char *list_name, const char *cells_name); /** * dev_read_addr_cells() - Get the number of address cells for a device's node @@ -414,7 +416,7 @@ int dev_count_phandle_with_args(struct udevice *dev, const char *list_name, * @dev: device to check * @return number of address cells this node uses */ -int dev_read_addr_cells(struct udevice *dev); +int dev_read_addr_cells(const struct udevice *dev); /** * dev_read_size_cells() - Get the number of size cells for a device's node @@ -425,7 +427,7 @@ int dev_read_addr_cells(struct udevice *dev); * @dev: device to check * @return number of size cells this node uses */ -int dev_read_size_cells(struct udevice *dev); +int dev_read_size_cells(const struct udevice *dev); /** * dev_read_addr_cells() - Get the address cells property in a node @@ -435,7 +437,7 @@ int dev_read_size_cells(struct udevice *dev); * @dev: device to check * @return number of address cells this node uses */ -int dev_read_simple_addr_cells(struct udevice *dev); +int dev_read_simple_addr_cells(const struct udevice *dev); /** * dev_read_size_cells() - Get the size cells property in a node @@ -445,7 +447,7 @@ int dev_read_simple_addr_cells(struct udevice *dev); * @dev: device to check * @return number of size cells this node uses */ -int dev_read_simple_size_cells(struct udevice *dev); +int dev_read_simple_size_cells(const struct udevice *dev); /** * dev_read_phandle() - Get the phandle from a device @@ -453,7 +455,7 @@ int dev_read_simple_size_cells(struct udevice *dev); * @dev: device to check * @return phandle (1 or greater), or 0 if no phandle or other error */ -int dev_read_phandle(struct udevice *dev); +int dev_read_phandle(const struct udevice *dev); /** * dev_read_prop()- - read a property from a device's node @@ -463,7 +465,8 @@ int dev_read_phandle(struct udevice *dev); * @lenp: place to put length on success * @return pointer to property, or NULL if not found */ -const void *dev_read_prop(struct udevice *dev, const char *propname, int *lenp); +const void *dev_read_prop(const struct udevice *dev, const char *propname, + int *lenp); /** * dev_read_alias_seq() - Get the alias sequence number of a node @@ -476,7 +479,7 @@ const void *dev_read_prop(struct udevice *dev, const char *propname, int *lenp); * @devnump: set to the sequence number if one is found * @return 0 if a sequence was found, -ve if not */ -int dev_read_alias_seq(struct udevice *dev, int *devnump); +int dev_read_alias_seq(const struct udevice *dev, int *devnump); /** * dev_read_u32_array() - Find and read an array of 32 bit integers @@ -494,7 +497,7 @@ int dev_read_alias_seq(struct udevice *dev, int *devnump); * property does not have a value, and -EOVERFLOW if the property data isn't * large enough. */ -int dev_read_u32_array(struct udevice *dev, const char *propname, +int dev_read_u32_array(const struct udevice *dev, const char *propname, u32 *out_values, size_t sz); /** @@ -504,7 +507,7 @@ int dev_read_u32_array(struct udevice *dev, const char *propname, * @return reference to the first subnode (which can be invalid if the device's * node has no subnodes) */ -ofnode dev_read_first_subnode(struct udevice *dev); +ofnode dev_read_first_subnode(const struct udevice *dev); /** * ofnode_next_subnode() - find the next sibling of a subnode @@ -529,8 +532,8 @@ ofnode dev_read_next_subnode(ofnode node); * @return pointer to byte array if found, or NULL if the property is not * found or there is not enough data */ -const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, - size_t sz); +const uint8_t *dev_read_u8_array_ptr(const struct udevice *dev, + const char *propname, size_t sz); /** * dev_read_enabled() - check whether a node is enabled @@ -543,7 +546,7 @@ const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname, * @dev: device to examine * @return integer value 0 (not enabled) or 1 (enabled) */ -int dev_read_enabled(struct udevice *dev); +int dev_read_enabled(const struct udevice *dev); /** * dev_read_resource() - obtain an indexed resource from a device. @@ -553,7 +556,8 @@ int dev_read_enabled(struct udevice *dev); * @res returns the resource * @return 0 if ok, negative on error */ -int dev_read_resource(struct udevice *dev, uint index, struct resource *res); +int dev_read_resource(const struct udevice *dev, uint index, + struct resource *res); /** * dev_read_resource_byname() - obtain a named resource from a device. @@ -563,7 +567,7 @@ int dev_read_resource(struct udevice *dev, uint index, struct resource *res); * @res: returns the resource * @return 0 if ok, negative on error */ -int dev_read_resource_byname(struct udevice *dev, const char *name, +int dev_read_resource_byname(const struct udevice *dev, const char *name, struct resource *res); /** @@ -577,7 +581,7 @@ int dev_read_resource_byname(struct udevice *dev, const char *name, * @in_addr: pointer to the address to translate * @return the translated address; OF_BAD_ADDR on error */ -u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr); +u64 dev_translate_address(const struct udevice *dev, const fdt32_t *in_addr); /** * dev_translate_dma_address() - Translate a device-tree DMA address @@ -590,7 +594,8 @@ u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr); * @in_addr: pointer to the DMA address to translate * @return the translated DMA address; OF_BAD_ADDR on error */ -u64 dev_translate_dma_address(struct udevice *dev, const fdt32_t *in_addr); +u64 dev_translate_dma_address(const struct udevice *dev, + const fdt32_t *in_addr); /** * dev_read_alias_highest_id - Get highest alias id for the given stem @@ -604,31 +609,31 @@ int dev_read_alias_highest_id(const char *stem); #else /* CONFIG_DM_DEV_READ_INLINE is enabled */ -static inline int dev_read_u32(struct udevice *dev, +static inline int dev_read_u32(const struct udevice *dev, const char *propname, u32 *outp) { return ofnode_read_u32(dev_ofnode(dev), propname, outp); } -static inline int dev_read_u32_default(struct udevice *dev, +static inline int dev_read_u32_default(const struct udevice *dev, const char *propname, int def) { return ofnode_read_u32_default(dev_ofnode(dev), propname, def); } -static inline int dev_read_s32(struct udevice *dev, +static inline int dev_read_s32(const struct udevice *dev, const char *propname, s32 *outp) { return ofnode_read_s32(dev_ofnode(dev), propname, outp); } -static inline int dev_read_s32_default(struct udevice *dev, +static inline int dev_read_s32_default(const struct udevice *dev, const char *propname, int def) { return ofnode_read_s32_default(dev_ofnode(dev), propname, def); } -static inline int dev_read_u32u(struct udevice *dev, +static inline int dev_read_u32u(const struct udevice *dev, const char *propname, uint *outp) { u32 val; @@ -642,128 +647,131 @@ static inline int dev_read_u32u(struct udevice *dev, return 0; } -static inline int dev_read_u64(struct udevice *dev, +static inline int dev_read_u64(const struct udevice *dev, const char *propname, u64 *outp) { return ofnode_read_u64(dev_ofnode(dev), propname, outp); } -static inline u64 dev_read_u64_default(struct udevice *dev, +static inline u64 dev_read_u64_default(const struct udevice *dev, const char *propname, u64 def) { return ofnode_read_u64_default(dev_ofnode(dev), propname, def); } -static inline const char *dev_read_string(struct udevice *dev, +static inline const char *dev_read_string(const struct udevice *dev, const char *propname) { return ofnode_read_string(dev_ofnode(dev), propname); } -static inline bool dev_read_bool(struct udevice *dev, const char *propname) +static inline bool dev_read_bool(const struct udevice *dev, + const char *propname) { return ofnode_read_bool(dev_ofnode(dev), propname); } -static inline ofnode dev_read_subnode(struct udevice *dev, +static inline ofnode dev_read_subnode(const struct udevice *dev, const char *subbnode_name) { return ofnode_find_subnode(dev_ofnode(dev), subbnode_name); } -static inline int dev_read_size(struct udevice *dev, const char *propname) +static inline int dev_read_size(const struct udevice *dev, const char *propname) { return ofnode_read_size(dev_ofnode(dev), propname); } -static inline fdt_addr_t dev_read_addr_index(struct udevice *dev, int index) +static inline fdt_addr_t dev_read_addr_index(const struct udevice *dev, + int index) { return devfdt_get_addr_index(dev, index); } -static inline fdt_addr_t dev_read_addr_size_index(struct udevice *dev, +static inline fdt_addr_t dev_read_addr_size_index(const struct udevice *dev, int index, fdt_size_t *size) { return devfdt_get_addr_size_index(dev, index, size); } -static inline fdt_addr_t dev_read_addr_name(struct udevice *dev, +static inline fdt_addr_t dev_read_addr_name(const struct udevice *dev, const char *name) { return devfdt_get_addr_name(dev, name); } -static inline fdt_addr_t dev_read_addr_size_name(struct udevice *dev, +static inline fdt_addr_t dev_read_addr_size_name(const struct udevice *dev, const char *name, fdt_size_t *size) { return devfdt_get_addr_size_name(dev, name, size); } -static inline fdt_addr_t dev_read_addr(struct udevice *dev) +static inline fdt_addr_t dev_read_addr(const struct udevice *dev) { return devfdt_get_addr(dev); } -static inline void *dev_read_addr_ptr(struct udevice *dev) +static inline void *dev_read_addr_ptr(const struct udevice *dev) { return devfdt_get_addr_ptr(dev); } -static inline fdt_addr_t dev_read_addr_pci(struct udevice *dev) +static inline fdt_addr_t dev_read_addr_pci(const struct udevice *dev) { return devfdt_get_addr_pci(dev); } -static inline void *dev_remap_addr(struct udevice *dev) +static inline void *dev_remap_addr(const struct udevice *dev) { return devfdt_remap_addr(dev); } -static inline void *dev_remap_addr_index(struct udevice *dev, int index) +static inline void *dev_remap_addr_index(const struct udevice *dev, int index) { return devfdt_remap_addr_index(dev, index); } -static inline void *dev_remap_addr_name(struct udevice *dev, const char *name) +static inline void *dev_remap_addr_name(const struct udevice *dev, + const char *name) { return devfdt_remap_addr_name(dev, name); } -static inline fdt_addr_t dev_read_addr_size(struct udevice *dev, +static inline fdt_addr_t dev_read_addr_size(const struct udevice *dev, const char *propname, fdt_size_t *sizep) { return ofnode_get_addr_size(dev_ofnode(dev), propname, sizep); } -static inline const char *dev_read_name(struct udevice *dev) +static inline const char *dev_read_name(const struct udevice *dev) { return ofnode_get_name(dev_ofnode(dev)); } -static inline int dev_read_stringlist_search(struct udevice *dev, +static inline int dev_read_stringlist_search(const struct udevice *dev, const char *propname, const char *string) { return ofnode_stringlist_search(dev_ofnode(dev), propname, string); } -static inline int dev_read_string_index(struct udevice *dev, +static inline int dev_read_string_index(const struct udevice *dev, const char *propname, int index, const char **outp) { return ofnode_read_string_index(dev_ofnode(dev), propname, index, outp); } -static inline int dev_read_string_count(struct udevice *dev, +static inline int dev_read_string_count(const struct udevice *dev, const char *propname) { return ofnode_read_string_count(dev_ofnode(dev), propname); } -static inline int dev_read_phandle_with_args(struct udevice *dev, +static inline int dev_read_phandle_with_args(const struct udevice *dev, const char *list_name, const char *cells_name, int cell_count, int index, struct ofnode_phandle_args *out_args) { @@ -772,59 +780,60 @@ static inline int dev_read_phandle_with_args(struct udevice *dev, out_args); } -static inline int dev_count_phandle_with_args(struct udevice *dev, +static inline int dev_count_phandle_with_args(const struct udevice *dev, const char *list_name, const char *cells_name) { return ofnode_count_phandle_with_args(dev_ofnode(dev), list_name, cells_name); } -static inline int dev_read_addr_cells(struct udevice *dev) +static inline int dev_read_addr_cells(const struct udevice *dev) { /* NOTE: this call should walk up the parent stack */ return fdt_address_cells(gd->fdt_blob, dev_of_offset(dev)); } -static inline int dev_read_size_cells(struct udevice *dev) +static inline int dev_read_size_cells(const struct udevice *dev) { /* NOTE: this call should walk up the parent stack */ return fdt_size_cells(gd->fdt_blob, dev_of_offset(dev)); } -static inline int dev_read_simple_addr_cells(struct udevice *dev) +static inline int dev_read_simple_addr_cells(const struct udevice *dev) { return fdt_address_cells(gd->fdt_blob, dev_of_offset(dev)); } -static inline int dev_read_simple_size_cells(struct udevice *dev) +static inline int dev_read_simple_size_cells(const struct udevice *dev) { return fdt_size_cells(gd->fdt_blob, dev_of_offset(dev)); } -static inline int dev_read_phandle(struct udevice *dev) +static inline int dev_read_phandle(const struct udevice *dev) { return fdt_get_phandle(gd->fdt_blob, dev_of_offset(dev)); } -static inline const void *dev_read_prop(struct udevice *dev, +static inline const void *dev_read_prop(const struct udevice *dev, const char *propname, int *lenp) { return ofnode_get_property(dev_ofnode(dev), propname, lenp); } -static inline int dev_read_alias_seq(struct udevice *dev, int *devnump) +static inline int dev_read_alias_seq(const struct udevice *dev, int *devnump) { return fdtdec_get_alias_seq(gd->fdt_blob, dev->uclass->uc_drv->name, dev_of_offset(dev), devnump); } -static inline int dev_read_u32_array(struct udevice *dev, const char *propname, - u32 *out_values, size_t sz) +static inline int dev_read_u32_array(const struct udevice *dev, + const char *propname, u32 *out_values, + size_t sz) { return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz); } -static inline ofnode dev_read_first_subnode(struct udevice *dev) +static inline ofnode dev_read_first_subnode(const struct udevice *dev) { return ofnode_first_subnode(dev_ofnode(dev)); } @@ -834,36 +843,39 @@ static inline ofnode dev_read_next_subnode(ofnode node) return ofnode_next_subnode(node); } -static inline const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, - const char *propname, size_t sz) +static inline const uint8_t *dev_read_u8_array_ptr(const struct udevice *dev, + const char *propname, + size_t sz) { return ofnode_read_u8_array_ptr(dev_ofnode(dev), propname, sz); } -static inline int dev_read_enabled(struct udevice *dev) +static inline int dev_read_enabled(const struct udevice *dev) { return fdtdec_get_is_enabled(gd->fdt_blob, dev_of_offset(dev)); } -static inline int dev_read_resource(struct udevice *dev, uint index, +static inline int dev_read_resource(const struct udevice *dev, uint index, struct resource *res) { return ofnode_read_resource(dev_ofnode(dev), index, res); } -static inline int dev_read_resource_byname(struct udevice *dev, +static inline int dev_read_resource_byname(const struct udevice *dev, const char *name, struct resource *res) { return ofnode_read_resource_byname(dev_ofnode(dev), name, res); } -static inline u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr) +static inline u64 dev_translate_address(const struct udevice *dev, + const fdt32_t *in_addr) { return ofnode_translate_address(dev_ofnode(dev), in_addr); } -static inline u64 dev_translate_dma_address(struct udevice *dev, const fdt32_t *in_addr) +static inline u64 dev_translate_dma_address(const struct udevice *dev, + const fdt32_t *in_addr) { return ofnode_translate_dma_address(dev_ofnode(dev), in_addr); } diff --git a/include/dm/util.h b/include/dm/util.h index 348c2ace3c..0ccb3fbadf 100644 --- a/include/dm/util.h +++ b/include/dm/util.h @@ -39,6 +39,9 @@ static inline void dm_dump_devres(void) } #endif +/* Dump out a list of drivers */ +void dm_dump_drivers(void); + /** * Check if an of node should be or was bound before relocation. * diff --git a/include/dma-uclass.h b/include/dma-uclass.h index a1d9d26ac5..340437acc1 100644 --- a/include/dma-uclass.h +++ b/include/dma-uclass.h @@ -58,14 +58,14 @@ struct dma_ops { */ int (*request)(struct dma *dma); /** - * free - Free a previously requested dma. + * rfree - Free a previously requested dma. * * This is the implementation of the client dma_free() API. * * @dma: The DMA to free. * @return 0 if OK, or a negative error code. */ - int (*free)(struct dma *dma); + int (*rfree)(struct dma *dma); /** * enable() - Enable a DMA Channel. * diff --git a/include/fdtdec.h b/include/fdtdec.h index c8a143db5f..166f29c55b 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -441,7 +441,7 @@ int fdtdec_get_pci_vendev(const void *blob, int node, * @param bar returns base address of the pci device's registers * @return 0 if ok, negative on error */ -int fdtdec_get_pci_bar32(struct udevice *dev, struct fdt_pci_addr *addr, +int fdtdec_get_pci_bar32(const struct udevice *dev, struct fdt_pci_addr *addr, u32 *bar); /** diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 0ef6e685ad..8a20743ad8 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -13,6 +13,7 @@ #include <linux/bitops.h> #include <linux/err.h> #include <clk-uclass.h> +#include <linux/err.h> static inline void clk_dm(ulong id, struct clk *clk) { diff --git a/include/linux/compat.h b/include/linux/compat.h index d0f51baab4..171188a76f 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -123,7 +123,10 @@ static inline void kmem_cache_destroy(struct kmem_cache *cachep) #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +/* This is also defined in ARMv8's mmu.h */ +#ifndef PAGE_SIZE #define PAGE_SIZE 4096 +#endif /* drivers/char/random.c */ #define get_random_bytes(...) diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index ceffd994de..1b9151714c 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h @@ -129,8 +129,8 @@ struct mtd_oob_region { struct mtd_ooblayout_ops { int (*ecc)(struct mtd_info *mtd, int section, struct mtd_oob_region *oobecc); - int (*free)(struct mtd_info *mtd, int section, - struct mtd_oob_region *oobfree); + int (*rfree)(struct mtd_info *mtd, int section, + struct mtd_oob_region *oobfree); }; /* diff --git a/include/linux/string.h b/include/linux/string.h index 5d63be4ce5..d67998e5c4 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -91,10 +91,15 @@ extern __kernel_size_t strnlen(const char *,__kernel_size_t); size_t strcspn(const char *s, const char *reject); #endif +#ifdef CONFIG_SANDBOX +# define strdup sandbox_strdup +# define strndup sandbox_strndup +#endif + #ifndef __HAVE_ARCH_STRDUP extern char * strdup(const char *); -#endif extern char * strndup(const char *, size_t); +#endif #ifndef __HAVE_ARCH_STRSWAB extern char * strswab(const char *); #endif diff --git a/include/mailbox-uclass.h b/include/mailbox-uclass.h index e0618aad97..3c60c76506 100644 --- a/include/mailbox-uclass.h +++ b/include/mailbox-uclass.h @@ -49,14 +49,14 @@ struct mbox_ops { */ int (*request)(struct mbox_chan *chan); /** - * free - Free a previously requested channel. + * rfree - Free a previously requested channel. * * This is the implementation of the client mbox_free() API. * * @chan: The channel to free. * @return 0 if OK, or a negative error code. */ - int (*free)(struct mbox_chan *chan); + int (*rfree)(struct mbox_chan *chan); /** * send - Send a message over a mailbox channel * diff --git a/include/malloc.h b/include/malloc.h index 5efa6920b2..f66c2e8617 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -788,8 +788,13 @@ struct mallinfo { */ -/* #define USE_DL_PREFIX */ - +/* + * Rename the U-Boot alloc functions so that sandbox can still use the system + * ones + */ +#ifdef CONFIG_SANDBOX +#define USE_DL_PREFIX +#endif /* @@ -892,6 +897,21 @@ void malloc_simple_info(void); # define pvALLOc dlpvalloc # define mALLINFo dlmallinfo # define mALLOPt dlmallopt + +/* Ensure that U-Boot actually uses these too */ +#define calloc dlcalloc +#define free(ptr) dlfree(ptr) +#define malloc(x) dlmalloc(x) +#define memalign dlmemalign +#define realloc dlrealloc +#define valloc dlvalloc +#define pvalloc dlpvalloc +#define mallinfo() dlmallinfo() +#define mallopt dlmallopt +#define malloc_trim dlmalloc_trim +#define malloc_usable_size dlmalloc_usable_size +#define malloc_stats dlmalloc_stats + # else /* USE_DL_PREFIX */ # define cALLOc calloc # define fREe free diff --git a/include/os.h b/include/os.h index 7a4f78b9b1..1874ae674f 100644 --- a/include/os.h +++ b/include/os.h @@ -119,7 +119,7 @@ void os_fd_restore(void); void *os_malloc(size_t length); /** - * Free memory previous allocated with os_malloc()/os_realloc() + * Free memory previous allocated with os_malloc() * * This returns the memory to the OS. * @@ -128,26 +128,6 @@ void *os_malloc(size_t length); void os_free(void *ptr); /** - * Reallocate previously-allocated memory to increase/decrease space - * - * This works in a similar way to the C library realloc() function. If - * length is 0, then ptr is freed. Otherwise the space used by ptr is - * expanded or reduced depending on whether length is larger or smaller - * than before. - * - * If ptr is NULL, then this is similar to calling os_malloc(). - * - * This function may need to move the memory block to make room for any - * extra space, in which case the new pointer is returned. - * - * \param ptr Pointer to memory block to reallocate - * \param length New length for memory block - * \return pointer to new memory block, or NULL on failure or if length - * is 0. - */ -void *os_realloc(void *ptr, size_t length); - -/** * Access to the usleep function of the os * * \param usec Time to sleep in micro seconds diff --git a/include/pci.h b/include/pci.h index 8c761d8da3..50ca249f2d 100644 --- a/include/pci.h +++ b/include/pci.h @@ -899,8 +899,8 @@ struct dm_pci_ops { * @size: Access size * @return 0 if OK, -ve on error */ - int (*read_config)(struct udevice *bus, pci_dev_t bdf, uint offset, - ulong *valuep, enum pci_size_t size); + int (*read_config)(const struct udevice *bus, pci_dev_t bdf, + uint offset, ulong *valuep, enum pci_size_t size); /** * write_config() - Write a PCI configuration value * @@ -924,7 +924,7 @@ struct dm_pci_ops { * @dev: Device to check * @return bus/device/function value (see PCI_BDF()) */ -pci_dev_t dm_pci_get_bdf(struct udevice *dev); +pci_dev_t dm_pci_get_bdf(const struct udevice *dev); /** * pci_bind_bus_devices() - scan a PCI bus and bind devices @@ -974,7 +974,7 @@ int dm_pci_bus_find_bdf(pci_dev_t bdf, struct udevice **devp); * @devp: Returns the device for this address, if found * @return 0 if OK, -ENODEV if not found */ -int pci_bus_find_devfn(struct udevice *bus, pci_dev_t find_devfn, +int pci_bus_find_devfn(const struct udevice *bus, pci_dev_t find_devfn, struct udevice **devp); /** @@ -1067,7 +1067,7 @@ int dm_pci_hose_probe_bus(struct udevice *bus); * @size: Access size * @return 0 if OK, -ve on error */ -int pci_bus_read_config(struct udevice *bus, pci_dev_t bdf, int offset, +int pci_bus_read_config(const struct udevice *bus, pci_dev_t bdf, int offset, unsigned long *valuep, enum pci_size_t size); /** @@ -1102,12 +1102,12 @@ int pci_bus_clrset_config32(struct udevice *bus, pci_dev_t bdf, int offset, * Driver model PCI config access functions. Use these in preference to others * when you have a valid device */ -int dm_pci_read_config(struct udevice *dev, int offset, unsigned long *valuep, - enum pci_size_t size); +int dm_pci_read_config(const struct udevice *dev, int offset, + unsigned long *valuep, enum pci_size_t size); -int dm_pci_read_config8(struct udevice *dev, int offset, u8 *valuep); -int dm_pci_read_config16(struct udevice *dev, int offset, u16 *valuep); -int dm_pci_read_config32(struct udevice *dev, int offset, u32 *valuep); +int dm_pci_read_config8(const struct udevice *dev, int offset, u8 *valuep); +int dm_pci_read_config16(const struct udevice *dev, int offset, u16 *valuep); +int dm_pci_read_config32(const struct udevice *dev, int offset, u32 *valuep); int dm_pci_write_config(struct udevice *dev, int offset, unsigned long value, enum pci_size_t size); @@ -1155,8 +1155,9 @@ int pci_read_config8(pci_dev_t pcidev, int offset, u8 *valuep); * Return: 0 on success, else -EINVAL */ int pci_generic_mmap_write_config( - struct udevice *bus, - int (*addr_f)(struct udevice *bus, pci_dev_t bdf, uint offset, void **addrp), + const struct udevice *bus, + int (*addr_f)(const struct udevice *bus, pci_dev_t bdf, uint offset, + void **addrp), pci_dev_t bdf, uint offset, ulong value, @@ -1180,8 +1181,9 @@ int pci_generic_mmap_write_config( * Return: 0 on success, else -EINVAL */ int pci_generic_mmap_read_config( - struct udevice *bus, - int (*addr_f)(struct udevice *bus, pci_dev_t bdf, uint offset, void **addrp), + const struct udevice *bus, + int (*addr_f)(const struct udevice *bus, pci_dev_t bdf, uint offset, + void **addrp), pci_dev_t bdf, uint offset, ulong *valuep, @@ -1311,7 +1313,7 @@ void dm_pci_write_bar32(struct udevice *dev, int barnum, u32 addr); * @barnum: Bar number to read (numbered from 0) * @return: value of BAR */ -u32 dm_pci_read_bar32(struct udevice *dev, int barnum); +u32 dm_pci_read_bar32(const struct udevice *dev, int barnum); /** * dm_pci_bus_to_phys() - convert a PCI bus address to a physical address @@ -1523,8 +1525,8 @@ struct dm_pci_emul_ops { * @size: Access size * @return 0 if OK, -ve on error */ - int (*read_config)(struct udevice *dev, uint offset, ulong *valuep, - enum pci_size_t size); + int (*read_config)(const struct udevice *dev, uint offset, + ulong *valuep, enum pci_size_t size); /** * write_config() - Write a PCI configuration value * @@ -1609,7 +1611,7 @@ struct dm_pci_emul_ops { * @emulp: Returns emulated device if found * @return 0 if found, -ENODEV if not found */ -int sandbox_pci_get_emul(struct udevice *bus, pci_dev_t find_devfn, +int sandbox_pci_get_emul(const struct udevice *bus, pci_dev_t find_devfn, struct udevice **containerp, struct udevice **emulp); /** diff --git a/include/phy.h b/include/phy.h index 6ace9b3a0c..42cfc59ec0 100644 --- a/include/phy.h +++ b/include/phy.h @@ -10,6 +10,7 @@ #define _PHY_H #include <dm.h> +#include <linux/errno.h> #include <linux/list.h> #include <linux/mii.h> #include <linux/ethtool.h> diff --git a/include/power-domain-uclass.h b/include/power-domain-uclass.h index bd9906b2e7..acf749b38e 100644 --- a/include/power-domain-uclass.h +++ b/include/power-domain-uclass.h @@ -54,14 +54,14 @@ struct power_domain_ops { */ int (*request)(struct power_domain *power_domain); /** - * free - Free a previously requested power domain. + * rfree - Free a previously requested power domain. * * This is the implementation of the client power_domain_free() API. * * @power_domain: The power domain to free. * @return 0 if OK, or a negative error code. */ - int (*free)(struct power_domain *power_domain); + int (*rfree)(struct power_domain *power_domain); /** * on - Power on a power domain. * diff --git a/include/reset-uclass.h b/include/reset-uclass.h index 7b5cc3cb3b..9a0696dd1e 100644 --- a/include/reset-uclass.h +++ b/include/reset-uclass.h @@ -51,14 +51,14 @@ struct reset_ops { */ int (*request)(struct reset_ctl *reset_ctl); /** - * free - Free a previously requested reset control. + * rfree - Free a previously requested reset control. * * This is the implementation of the client reset_free() API. * * @reset_ctl: The reset control to free. * @return 0 if OK, or a negative error code. */ - int (*free)(struct reset_ctl *reset_ctl); + int (*rfree)(struct reset_ctl *reset_ctl); /** * rst_assert - Assert a reset signal. * diff --git a/include/sound.h b/include/sound.h index 47de9fa3ed..71bd850652 100644 --- a/include/sound.h +++ b/include/sound.h @@ -69,6 +69,18 @@ struct sound_ops { int (*play)(struct udevice *dev, void *data, uint data_size); /** + * stop_play() - Indicate that there is no more data coming + * + * This is called once play() has finished sending all the data to the + * output device. This may be used to tell the hardware to turn off the + * codec, for example. + * + * @dev: Sound device + * @return 0 if OK, -ve on error + */ + int (*stop_play)(struct udevice *dev); + + /** * start_beep() - Start beeping (optional) * * This tells the sound hardware to start a beep. It will continue until diff --git a/include/test/test.h b/include/test/test.h index e5bef4759a..2a75211008 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -15,12 +15,16 @@ * @start: Store the starting mallinfo when doing leak test * @priv: A pointer to some other info some suites want to track * @of_root: Record of the livetree root node (used for setting up tests) + * @expect_str: Temporary string used to hold expected string value + * @actual_str: Temporary string used to hold actual string value */ struct unit_test_state { int fail_count; struct mallinfo start; void *priv; struct device_node *of_root; + char expect_str[256]; + char actual_str[256]; }; /** diff --git a/include/test/ut.h b/include/test/ut.h index f616c202f3..04df8ba3af 100644 --- a/include/test/ut.h +++ b/include/test/ut.h @@ -38,6 +38,43 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, const char *func, const char *cond, const char *fmt, ...) __attribute__ ((format (__printf__, 6, 7))); +/** + * ut_check_console_line() - Check the next console line against expectations + * + * This creates a string and then checks it against the next line of console + * output obtained with console_record_readline(). + * + * After the function returns, uts->expect_str holds the expected string and + * uts->actual_str holds the actual string read from the console. + * + * @uts: Test state + * @fmt: printf() format string for the error, followed by args + * @return 0 if OK, other value on error + */ +int ut_check_console_line(struct unit_test_state *uts, const char *fmt, ...) + __attribute__ ((format (__printf__, 2, 3))); + +/** + * ut_check_console_end() - Check there is no more console output + * + * After the function returns, uts->actual_str holds the actual string read + * from the console + * + * @uts: Test state + * @return 0 if OK (console has no output), other value on error + */ +int ut_check_console_end(struct unit_test_state *uts); + +/** + * ut_check_console_dump() - Check that next lines have a print_buffer() dump + * + * This only supports a byte dump. + * + * @total_bytes: Size of the expected dump in bytes` + * @return 0 if OK (looks like a dump and the length matches), other value on + * error + */ +int ut_check_console_dump(struct unit_test_state *uts, int total_bytes); /* Assert that a condition is non-zero */ #define ut_assert(cond) \ @@ -56,39 +93,39 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, /* Assert that two int expressions are equal */ #define ut_asserteq(expr1, expr2) { \ - unsigned int val1 = (expr1), val2 = (expr2); \ + unsigned int _val1 = (expr1), _val2 = (expr2); \ \ - if (val1 != val2) { \ + if (_val1 != _val2) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr1 " == " #expr2, \ - "Expected %#x (%d), got %#x (%d)", val1, val1, \ - val2, val2); \ + "Expected %#x (%d), got %#x (%d)", \ + _val1, _val1, _val2, _val2); \ return CMD_RET_FAILURE; \ } \ } /* Assert that two string expressions are equal */ #define ut_asserteq_str(expr1, expr2) { \ - const char *val1 = (expr1), *val2 = (expr2); \ + const char *_val1 = (expr1), *_val2 = (expr2); \ \ - if (strcmp(val1, val2)) { \ + if (strcmp(_val1, _val2)) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr1 " = " #expr2, \ - "Expected \"%s\", got \"%s\"", val1, val2); \ + "Expected \"%s\", got \"%s\"", _val1, _val2); \ return CMD_RET_FAILURE; \ } \ } /* Assert that two memory areas are equal */ #define ut_asserteq_mem(expr1, expr2, len) { \ - const u8 *val1 = (u8 *)(expr1), *val2 = (u8 *)(expr2); \ + const u8 *_val1 = (u8 *)(expr1), *_val2 = (u8 *)(expr2); \ const uint __len = len; \ \ - if (memcmp(val1, val2, __len)) { \ + if (memcmp(_val1, _val2, __len)) { \ char __buf1[64 + 1] = "\0"; \ char __buf2[64 + 1] = "\0"; \ - bin2hex(__buf1, val1, min(__len, (uint)32)); \ - bin2hex(__buf2, val2, min(__len, (uint)32)); \ + bin2hex(__buf1, _val1, min(__len, (uint)32)); \ + bin2hex(__buf2, _val2, min(__len, (uint)32)); \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr1 " = " #expr2, \ "Expected \"%s\", got \"%s\"", \ @@ -99,33 +136,33 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, /* Assert that two pointers are equal */ #define ut_asserteq_ptr(expr1, expr2) { \ - const void *val1 = (expr1), *val2 = (expr2); \ + const void *_val1 = (expr1), *_val2 = (expr2); \ \ - if (val1 != val2) { \ + if (_val1 != _val2) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr1 " = " #expr2, \ - "Expected %p, got %p", val1, val2); \ + "Expected %p, got %p", _val1, _val2); \ return CMD_RET_FAILURE; \ } \ } /* Assert that a pointer is NULL */ #define ut_assertnull(expr) { \ - const void *val = (expr); \ + const void *_val = (expr); \ \ - if (val != NULL) { \ + if (_val) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr " != NULL", \ - "Expected NULL, got %p", val); \ + "Expected NULL, got %p", _val); \ return CMD_RET_FAILURE; \ } \ } /* Assert that a pointer is not NULL */ #define ut_assertnonnull(expr) { \ - const void *val = (expr); \ + const void *_val = (expr); \ \ - if (val == NULL) { \ + if (!_val) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr " = NULL", \ "Expected non-null, got NULL"); \ @@ -135,13 +172,13 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, /* Assert that a pointer is not an error pointer */ #define ut_assertok_ptr(expr) { \ - const void *val = (expr); \ + const void *_val = (expr); \ \ - if (IS_ERR(val)) { \ + if (IS_ERR(_val)) { \ ut_failf(uts, __FILE__, __LINE__, __func__, \ #expr " = NULL", \ "Expected pointer, got error %ld", \ - PTR_ERR(val)); \ + PTR_ERR(_val)); \ return CMD_RET_FAILURE; \ } \ } @@ -149,6 +186,34 @@ void ut_failf(struct unit_test_state *uts, const char *fname, int line, /* Assert that an operation succeeds (returns 0) */ #define ut_assertok(cond) ut_asserteq(0, cond) +/* Assert that the next console output line matches */ +#define ut_assert_nextline(fmt, args...) \ + if (ut_check_console_line(uts, fmt, ##args)) { \ + ut_failf(uts, __FILE__, __LINE__, __func__, \ + "console", "\nExpected '%s',\n got '%s'", \ + uts->expect_str, uts->actual_str); \ + return CMD_RET_FAILURE; \ + } \ + +/* Assert that there is no more console output */ +#define ut_assert_console_end() \ + if (ut_check_console_end(uts)) { \ + ut_failf(uts, __FILE__, __LINE__, __func__, \ + "console", "Expected no more output, got '%s'",\ + uts->actual_str); \ + return CMD_RET_FAILURE; \ + } \ + +/* Assert that the next lines are print_buffer() dump at an address */ +#define ut_assert_nextlines_are_dump(total_bytes) \ + if (ut_check_console_dump(uts, total_bytes)) { \ + ut_failf(uts, __FILE__, __LINE__, __func__, \ + "console", \ + "Expected dump of length %x bytes, got '%s'", \ + total_bytes, uts->actual_str); \ + return CMD_RET_FAILURE; \ + } \ + /** * ut_check_free() - Return the number of bytes free in the malloc() pool * diff --git a/include/tpm-common.h b/include/tpm-common.h index f9c2ca2053..702cd6e93b 100644 --- a/include/tpm-common.h +++ b/include/tpm-common.h @@ -293,4 +293,7 @@ static inline cmd_tbl_t *get_tpm2_commands(unsigned int *size) */ enum tpm_version tpm_get_version(struct udevice *dev); +/* Iterate on all TPM devices */ +#define for_each_tpm_device(dev) uclass_foreach_dev_probe(UCLASS_TPM, (dev)) + #endif /* __TPM_COMMON_H */ @@ -55,7 +55,9 @@ #ifndef USE_HOSTCC #include <common.h> +#include <malloc.h> #include <ubi_uboot.h> +#include <dm/devres.h> #include <linux/bitops.h> #else diff --git a/lib/binman.c b/lib/binman.c index 1774bdf2e5..6cf6dcfdad 100644 --- a/lib/binman.c +++ b/lib/binman.c @@ -9,6 +9,7 @@ #include <common.h> #include <binman.h> #include <dm.h> +#include <malloc.h> struct binman_info { ofnode image; diff --git a/lib/bzip2/bzlib.c b/lib/bzip2/bzlib.c index 9262e4055e..377b269b06 100644 --- a/lib/bzip2/bzlib.c +++ b/lib/bzip2/bzlib.c @@ -1,5 +1,6 @@ #include <config.h> #include <common.h> +#include <malloc.h> #include <watchdog.h> /* diff --git a/lib/crypto/asymmetric_type.c b/lib/crypto/asymmetric_type.c index e04666c080..7aa55092ac 100644 --- a/lib/crypto/asymmetric_type.c +++ b/lib/crypto/asymmetric_type.c @@ -7,6 +7,7 @@ * Written by David Howells (dhowells@redhat.com) */ #ifndef __UBOOT__ +#include <dm/devres.h> #include <keys/asymmetric-subtype.h> #include <keys/asymmetric-parser.h> #endif @@ -14,6 +15,7 @@ #ifdef __UBOOT__ #include <linux/compat.h> #include <linux/ctype.h> +#include <linux/err.h> #include <linux/string.h> #else #include <linux/seq_file.h> diff --git a/lib/crypto/pkcs7_parser.c b/lib/crypto/pkcs7_parser.c index bf9e7e888f..f5dda1179f 100644 --- a/lib/crypto/pkcs7_parser.c +++ b/lib/crypto/pkcs7_parser.c @@ -7,6 +7,7 @@ #define pr_fmt(fmt) "PKCS7: "fmt #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/bitops.h> #include <linux/compat.h> #endif diff --git a/lib/crypto/public_key.c b/lib/crypto/public_key.c index 634377472f..8b4821767a 100644 --- a/lib/crypto/public_key.c +++ b/lib/crypto/public_key.c @@ -9,7 +9,9 @@ #define pr_fmt(fmt) "PKEY: "fmt #ifdef __UBOOT__ +#include <dm/devres.h> #include <linux/compat.h> +#include <linux/err.h> #else #include <linux/module.h> #include <linux/export.h> diff --git a/lib/crypto/rsa_helper.c b/lib/crypto/rsa_helper.c index aca627a4a6..cc0c0d6637 100644 --- a/lib/crypto/rsa_helper.c +++ b/lib/crypto/rsa_helper.c @@ -6,6 +6,7 @@ * Authors: Tadeusz Struk <tadeusz.struk@intel.com> */ #ifndef __UBOOT__ +#include <linux/compat.h> #include <linux/kernel.h> #include <linux/export.h> #endif diff --git a/lib/crypto/x509_cert_parser.c b/lib/crypto/x509_cert_parser.c index e6d2a426a0..4e41cffd23 100644 --- a/lib/crypto/x509_cert_parser.c +++ b/lib/crypto/x509_cert_parser.c @@ -6,6 +6,7 @@ */ #define pr_fmt(fmt) "X.509: "fmt +#include <dm/devres.h> #include <linux/kernel.h> #ifndef __UBOOT__ #include <linux/export.h> diff --git a/lib/crypto/x509_public_key.c b/lib/crypto/x509_public_key.c index 04bdb672b4..676c0df174 100644 --- a/lib/crypto/x509_public_key.c +++ b/lib/crypto/x509_public_key.c @@ -8,7 +8,9 @@ #define pr_fmt(fmt) "X.509: "fmt #ifdef __UBOOT__ #include <common.h> +#include <dm/devres.h> #include <linux/compat.h> +#include <linux/err.h> #include <linux/errno.h> #else #include <linux/module.h> diff --git a/lib/efi/efi.c b/lib/efi/efi.c index 7cba57b131..0c16a5fdd3 100644 --- a/lib/efi/efi.c +++ b/lib/efi/efi.c @@ -11,6 +11,7 @@ #include <common.h> #include <debug_uart.h> #include <errno.h> +#include <malloc.h> #include <linux/err.h> #include <linux/types.h> #include <efi.h> diff --git a/lib/efi/efi_app.c b/lib/efi/efi_app.c index af5a878fc3..7c64077d42 100644 --- a/lib/efi/efi_app.c +++ b/lib/efi/efi_app.c @@ -13,6 +13,7 @@ #include <debug_uart.h> #include <dm.h> #include <errno.h> +#include <malloc.h> #include <linux/err.h> #include <linux/types.h> #include <efi.h> diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c index 6dd93ff435..7d650d512e 100644 --- a/lib/efi/efi_stub.c +++ b/lib/efi/efi_stub.c @@ -14,6 +14,7 @@ #include <efi.h> #include <efi_api.h> #include <errno.h> +#include <malloc.h> #include <ns16550.h> #include <asm/cpu.h> #include <asm/io.h> diff --git a/lib/efi_driver/efi_block_device.c b/lib/efi_driver/efi_block_device.c index cf02341931..33e66fcad2 100644 --- a/lib/efi_driver/efi_block_device.c +++ b/lib/efi_driver/efi_block_device.c @@ -29,6 +29,7 @@ */ #include <efi_driver.h> +#include <malloc.h> #include <dm/device-internal.h> #include <dm/root.h> diff --git a/lib/efi_driver/efi_uclass.c b/lib/efi_driver/efi_uclass.c index 25b27ece6d..f8badadf66 100644 --- a/lib/efi_driver/efi_uclass.c +++ b/lib/efi_driver/efi_uclass.c @@ -18,6 +18,7 @@ */ #include <efi_driver.h> +#include <malloc.h> /** * check_node_type() - check node type diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c index 8494044799..ac0dec1146 100644 --- a/lib/efi_loader/efi_console.c +++ b/lib/efi_loader/efi_console.c @@ -7,6 +7,7 @@ #include <common.h> #include <charset.h> +#include <malloc.h> #include <time.h> #include <dm/device.h> #include <efi_loader.h> diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c index df0485cdad..4b3c843b2c 100644 --- a/lib/efi_loader/efi_runtime.c +++ b/lib/efi_loader/efi_runtime.c @@ -11,6 +11,7 @@ #include <dm.h> #include <elf.h> #include <efi_loader.h> +#include <malloc.h> #include <rtc.h> #include <u-boot/crc.h> diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 17051d409c..eb11fc898e 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -9,6 +9,7 @@ #include <dm.h> #include <hang.h> #include <init.h> +#include <malloc.h> #include <dm/of_extra.h> #include <env.h> #include <errno.h> @@ -224,7 +225,7 @@ int fdtdec_get_pci_vendev(const void *blob, int node, u16 *vendor, u16 *device) return -ENOENT; } -int fdtdec_get_pci_bar32(struct udevice *dev, struct fdt_pci_addr *addr, +int fdtdec_get_pci_bar32(const struct udevice *dev, struct fdt_pci_addr *addr, u32 *bar) { int barnum; diff --git a/lib/libavb/avb_cmdline.c b/lib/libavb/avb_cmdline.c index 684c512bb9..dd859d3467 100644 --- a/lib/libavb/avb_cmdline.c +++ b/lib/libavb/avb_cmdline.c @@ -7,6 +7,7 @@ #include "avb_sha.h" #include "avb_util.h" #include "avb_version.h" +#include <malloc.h> #define NUM_GUIDS 3 diff --git a/lib/libavb/avb_descriptor.c b/lib/libavb/avb_descriptor.c index 9f03b9777a..86b8d1b994 100644 --- a/lib/libavb/avb_descriptor.c +++ b/lib/libavb/avb_descriptor.c @@ -6,6 +6,7 @@ #include "avb_descriptor.h" #include "avb_util.h" #include "avb_vbmeta_image.h" +#include <malloc.h> bool avb_descriptor_validate_and_byteswap(const AvbDescriptor* src, AvbDescriptor* dest) { diff --git a/lib/libavb/avb_rsa.c b/lib/libavb/avb_rsa.c index bbf15626b8..d7bf8905be 100644 --- a/lib/libavb/avb_rsa.c +++ b/lib/libavb/avb_rsa.c @@ -12,6 +12,7 @@ #include "avb_sha.h" #include "avb_util.h" #include "avb_vbmeta_image.h" +#include <malloc.h> typedef struct IAvbKey { unsigned int len; /* Length of n[] in number of uint32_t */ diff --git a/lib/libavb/avb_slot_verify.c b/lib/libavb/avb_slot_verify.c index c0defdf9c9..58baf522fc 100644 --- a/lib/libavb/avb_slot_verify.c +++ b/lib/libavb/avb_slot_verify.c @@ -14,6 +14,7 @@ #include "avb_util.h" #include "avb_vbmeta_image.h" #include "avb_version.h" +#include <malloc.h> /* Maximum number of partitions that can be loaded with avb_slot_verify(). */ #define MAX_NUMBER_OF_LOADED_PARTITIONS 32 diff --git a/lib/libavb/avb_sysdeps_posix.c b/lib/libavb/avb_sysdeps_posix.c index 0bb0cc1498..6ffdb0b7eb 100644 --- a/lib/libavb/avb_sysdeps_posix.c +++ b/lib/libavb/avb_sysdeps_posix.c @@ -4,6 +4,7 @@ */ #include <hang.h> +#include <malloc.h> #include <stdarg.h> #include <stdlib.h> diff --git a/lib/libavb/avb_util.c b/lib/libavb/avb_util.c index 405d625351..94773b77e7 100644 --- a/lib/libavb/avb_util.c +++ b/lib/libavb/avb_util.c @@ -4,6 +4,7 @@ */ #include "avb_util.h" +#include <malloc.h> #include <stdarg.h> diff --git a/lib/linux_compat.c b/lib/linux_compat.c index 3f440deaa0..89a6fd6ec9 100644 --- a/lib/linux_compat.c +++ b/lib/linux_compat.c @@ -1,5 +1,6 @@ #include <common.h> +#include <malloc.h> #include <memalign.h> #include <linux/compat.h> diff --git a/lib/list_sort.c b/lib/list_sort.c index e841da53ee..beb7273fd3 100644 --- a/lib/list_sort.c +++ b/lib/list_sort.c @@ -1,4 +1,5 @@ #ifndef __UBOOT__ +#include <dm/devres.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> @@ -8,6 +8,7 @@ #include <common.h> #include <lmb.h> +#include <malloc.h> #define LMB_ALLOC_ANYWHERE 0 diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c index 5b5905aeb5..6400ef63d6 100644 --- a/lib/rsa/rsa-sign.c +++ b/lib/rsa/rsa-sign.c @@ -4,6 +4,7 @@ */ #include "mkimage.h" +#include <malloc.h> #include <stdio.h> #include <string.h> #include <image.h> diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c index 82dc513260..326a5e4ea9 100644 --- a/lib/rsa/rsa-verify.c +++ b/lib/rsa/rsa-verify.c @@ -6,6 +6,7 @@ #ifndef USE_HOSTCC #include <common.h> #include <fdtdec.h> +#include <malloc.h> #include <asm/types.h> #include <asm/byteorder.h> #include <linux/errno.h> diff --git a/lib/string.c b/lib/string.c index 9b779ddc3b..ae7835f600 100644 --- a/lib/string.c +++ b/lib/string.c @@ -324,7 +324,6 @@ char * strdup(const char *s) strcpy (new, s); return new; } -#endif char * strndup(const char *s, size_t n) { @@ -348,6 +347,7 @@ char * strndup(const char *s, size_t n) return new; } +#endif #ifndef __HAVE_ARCH_STRSPN /** diff --git a/lib/zstd/decompress.c b/lib/zstd/decompress.c index ac5ab528bb..ae3be3f02a 100644 --- a/lib/zstd/decompress.c +++ b/lib/zstd/decompress.c @@ -23,6 +23,7 @@ #include "huf.h" #include "mem.h" /* low level memory routines */ #include "zstd_internal.h" +#include <malloc.h> #include <linux/kernel.h> #include <linux/compat.h> #include <linux/string.h> /* memcpy, memmove, memset */ diff --git a/lib/zstd/zstd_common.c b/lib/zstd/zstd_common.c index 9a217e1573..6b2c79eeb6 100644 --- a/lib/zstd/zstd_common.c +++ b/lib/zstd/zstd_common.c @@ -9,6 +9,7 @@ ***************************************/ #include "error_private.h" #include "zstd_internal.h" /* declaration of ZSTD_isError, ZSTD_getErrorName, ZSTD_getErrorCode, ZSTD_getErrorString, ZSTD_versionNumber */ +#include <malloc.h> #include <linux/kernel.h> /*=************************************************************** diff --git a/net/mdio-uclass.c b/net/mdio-uclass.c index f75e4df626..8e7872155a 100644 --- a/net/mdio-uclass.c +++ b/net/mdio-uclass.c @@ -6,9 +6,12 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <miiphy.h> #include <dm/device-internal.h> +#include <dm/device_compat.h> #include <dm/uclass-internal.h> +#include <linux/compat.h> /* DT node properties for MAC-PHY interface */ #define PHY_MODE_STR_CNT 2 diff --git a/post/post.c b/post/post.c index f27138ddaa..696a60f70a 100644 --- a/post/post.c +++ b/post/post.c @@ -6,6 +6,7 @@ #include <common.h> #include <env.h> +#include <malloc.h> #include <stdio_dev.h> #include <time.h> #include <watchdog.h> diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c index c07ba4da9e..40879677c8 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c @@ -579,6 +579,8 @@ static void fixup_phandle_references(struct check *c, struct dt_info *dti, phandle = get_node_phandle(dt, refnode); *((fdt32_t *)(prop->val.val + m->offset)) = cpu_to_fdt32(phandle); + + reference_node(refnode); } } } @@ -609,11 +611,21 @@ static void fixup_path_references(struct check *c, struct dt_info *dti, path = refnode->fullpath; prop->val = data_insert_at_marker(prop->val, m, path, strlen(path) + 1); + + reference_node(refnode); } } } ERROR(path_references, fixup_path_references, NULL, &duplicate_node_names); +static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, + struct node *node) +{ + if (node->omit_if_unused && !node->is_referenced) + delete_node(node); +} +ERROR(omit_unused_nodes, fixup_omit_unused_nodes, NULL, &phandle_references, &path_references); + /* * Semantic checks */ @@ -1367,6 +1379,7 @@ static struct check *check_table[] = { &explicit_phandles, &phandle_references, &path_references, + &omit_unused_nodes, &address_cells_is_cell, &size_cells_is_cell, &interrupt_cells_is_cell, &device_type_is_string, &model_is_string, &status_is_string, diff --git a/scripts/dtc/dtc-lexer.l b/scripts/dtc/dtc-lexer.l index 24af549977..d3694d6cf2 100644 --- a/scripts/dtc/dtc-lexer.l +++ b/scripts/dtc/dtc-lexer.l @@ -152,6 +152,13 @@ static void PRINTF(1, 2) lexical_error(const char *fmt, ...); return DT_DEL_NODE; } +<*>"/omit-if-no-ref/" { + DPRINT("Keyword: /omit-if-no-ref/\n"); + DPRINT("<PROPNODENAME>\n"); + BEGIN(PROPNODENAME); + return DT_OMIT_NO_REF; + } + <*>{LABEL}: { DPRINT("Label: %s\n", yytext); yylval.labelref = xstrdup(yytext); diff --git a/scripts/dtc/dtc-parser.y b/scripts/dtc/dtc-parser.y index 44af170abf..66ff7f7d8e 100644 --- a/scripts/dtc/dtc-parser.y +++ b/scripts/dtc/dtc-parser.y @@ -63,6 +63,7 @@ extern bool treesource_error; %token DT_BITS %token DT_DEL_PROP %token DT_DEL_NODE +%token DT_OMIT_NO_REF %token <propnodename> DT_PROPNODENAME %token <integer> DT_LITERAL %token <integer> DT_CHAR_LITERAL @@ -219,6 +220,18 @@ devicetree: $$ = $1; } + | devicetree DT_OMIT_NO_REF DT_REF ';' + { + struct node *target = get_node_by_ref($1, $3); + + if (target) + omit_node_if_unused(target); + else + ERROR(&@3, "Label or path %s not found", $3); + + + $$ = $1; + } ; nodedef: @@ -523,6 +536,10 @@ subnode: { $$ = name_node(build_node_delete(), $2); } + | DT_OMIT_NO_REF subnode + { + $$ = omit_node_if_unused($2); + } | DT_LABEL subnode { add_label(&$2->labels, $1); diff --git a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h index 3b18a42b86..6d667701ab 100644 --- a/scripts/dtc/dtc.h +++ b/scripts/dtc/dtc.h @@ -168,6 +168,8 @@ struct node { struct label *labels; const struct bus_type *bus; + + bool omit_if_unused, is_referenced; }; #define for_each_label_withdel(l0, l) \ @@ -202,6 +204,8 @@ struct property *reverse_properties(struct property *first); struct node *build_node(struct property *proplist, struct node *children); struct node *build_node_delete(void); struct node *name_node(struct node *node, char *name); +struct node *omit_node_if_unused(struct node *node); +struct node *reference_node(struct node *node); struct node *chain_node(struct node *first, struct node *list); struct node *merge_nodes(struct node *old_node, struct node *new_node); struct node *add_orphan_node(struct node *old_node, struct node *new_node, char *ref); diff --git a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c index 57b7db2ed1..81b6c48454 100644 --- a/scripts/dtc/livetree.c +++ b/scripts/dtc/livetree.c @@ -134,6 +134,20 @@ struct node *name_node(struct node *node, char *name) return node; } +struct node *omit_node_if_unused(struct node *node) +{ + node->omit_if_unused = 1; + + return node; +} + +struct node *reference_node(struct node *node) +{ + node->is_referenced = 1; + + return node; +} + struct node *merge_nodes(struct node *old_node, struct node *new_node) { struct property *new_prop, *old_prop; diff --git a/test/bloblist.c b/test/bloblist.c index d0f7296e0d..bdcca0291c 100644 --- a/test/bloblist.c +++ b/test/bloblist.c @@ -24,6 +24,7 @@ enum { TEST_SIZE = 10, TEST_SIZE2 = 20, + TEST_SIZE_LARGE = 0xe0, TEST_ADDR = CONFIG_BLOBLIST_ADDR, TEST_BLOBLIST_SIZE = 0x100, @@ -33,13 +34,31 @@ static struct bloblist_hdr *clear_bloblist(void) { struct bloblist_hdr *hdr; - /* Clear out any existing bloblist so we have a clean slate */ + /* + * Clear out any existing bloblist so we have a clean slate. Zero the + * header so that existing records are removed, but set everything else + * to 0xff for testing purposes. + */ hdr = map_sysmem(CONFIG_BLOBLIST_ADDR, TEST_BLOBLIST_SIZE); - memset(hdr, '\0', TEST_BLOBLIST_SIZE); + memset(hdr, '\xff', TEST_BLOBLIST_SIZE); + memset(hdr, '\0', sizeof(*hdr)); return hdr; } +static int check_zero(void *data, int size) +{ + u8 *ptr; + int i; + + for (ptr = data, i = 0; i < size; i++, ptr++) { + if (*ptr) + return -EINVAL; + } + + return 0; +} + static int bloblist_test_init(struct unit_test_state *uts) { struct bloblist_hdr *hdr; @@ -83,10 +102,14 @@ static int bloblist_test_blob(struct unit_test_state *uts) data = bloblist_find(TEST_TAG, TEST_SIZE); ut_asserteq_ptr(rec + 1, data); + /* Check the data is zeroed */ + ut_assertok(check_zero(data, TEST_SIZE)); + /* Check the 'ensure' method */ ut_asserteq_ptr(data, bloblist_ensure(TEST_TAG, TEST_SIZE)); ut_assertnull(bloblist_ensure(TEST_TAG, TEST_SIZE2)); rec2 = (struct bloblist_rec *)(data + ALIGN(TEST_SIZE, BLOBLIST_ALIGN)); + ut_assertok(check_zero(data, TEST_SIZE)); /* Check for a non-existent record */ ut_asserteq_ptr(data, bloblist_ensure(TEST_TAG, TEST_SIZE)); @@ -97,6 +120,40 @@ static int bloblist_test_blob(struct unit_test_state *uts) } BLOBLIST_TEST(bloblist_test_blob, 0); +/* Check bloblist_ensure_size_ret() */ +static int bloblist_test_blob_ensure(struct unit_test_state *uts) +{ + void *data, *data2; + int size; + + /* At the start there should be no records */ + clear_bloblist(); + ut_assertok(bloblist_new(TEST_ADDR, TEST_BLOBLIST_SIZE, 0)); + + /* Test with an empty bloblist */ + size = TEST_SIZE; + ut_assertok(bloblist_ensure_size_ret(TEST_TAG, &size, &data)); + ut_asserteq(TEST_SIZE, size); + ut_assertok(check_zero(data, TEST_SIZE)); + + /* Check that we get the same thing again */ + ut_assertok(bloblist_ensure_size_ret(TEST_TAG, &size, &data2)); + ut_asserteq(TEST_SIZE, size); + ut_asserteq_ptr(data, data2); + + /* Check that the size remains the same */ + size = TEST_SIZE2; + ut_assertok(bloblist_ensure_size_ret(TEST_TAG, &size, &data)); + ut_asserteq(TEST_SIZE, size); + + /* Check running out of space */ + size = TEST_SIZE_LARGE; + ut_asserteq(-ENOSPC, bloblist_ensure_size_ret(TEST_TAG2, &size, &data)); + + return 0; +} +BLOBLIST_TEST(bloblist_test_blob_ensure, 0); + static int bloblist_test_bad_blob(struct unit_test_state *uts) { struct bloblist_hdr *hdr; diff --git a/test/dm/clk.c b/test/dm/clk.c index 31335a543f..003b78934f 100644 --- a/test/dm/clk.c +++ b/test/dm/clk.c @@ -6,6 +6,7 @@ #include <common.h> #include <clk.h> #include <dm.h> +#include <malloc.h> #include <asm/clk.h> #include <dm/test.h> #include <dm/device-internal.h> diff --git a/test/dm/devres.c b/test/dm/devres.c index e7331897de..cbd0972c9b 100644 --- a/test/dm/devres.c +++ b/test/dm/devres.c @@ -10,6 +10,7 @@ #include <dm.h> #include <malloc.h> #include <dm/device-internal.h> +#include <dm/devres.h> #include <dm/test.h> #include <dm/uclass-internal.h> #include <test/ut.h> diff --git a/test/dm/dma.c b/test/dm/dma.c index b56d17731d..12cba57a56 100644 --- a/test/dm/dma.c +++ b/test/dm/dma.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/test.h> #include <dma.h> #include <test/ut.h> diff --git a/test/dm/gpio.c b/test/dm/gpio.c index bb4b20cea9..349123a657 100644 --- a/test/dm/gpio.c +++ b/test/dm/gpio.c @@ -6,6 +6,7 @@ #include <common.h> #include <fdtdec.h> #include <dm.h> +#include <malloc.h> #include <dm/root.h> #include <dm/test.h> #include <dm/util.h> diff --git a/test/dm/mailbox.c b/test/dm/mailbox.c index 4562d2ac4f..e6c521b8b5 100644 --- a/test/dm/mailbox.c +++ b/test/dm/mailbox.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/test.h> #include <asm/mbox.h> #include <test/ut.h> diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index 745de50c7b..1c49eaf38b 100644 --- a/test/dm/ofnode.c +++ b/test/dm/ofnode.c @@ -58,3 +58,58 @@ static int dm_test_ofnode_fmap(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_ofnode_fmap, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); + +static int dm_test_ofnode_read(struct unit_test_state *uts) +{ + const u32 *val; + ofnode node; + int size; + + node = ofnode_path("/a-test"); + ut_assert(ofnode_valid(node)); + + val = ofnode_read_prop(node, "int-value", &size); + ut_assertnonnull(val); + ut_asserteq(4, size); + ut_asserteq(1234, fdt32_to_cpu(val[0])); + + val = ofnode_read_prop(node, "missing", &size); + ut_assertnull(val); + ut_asserteq(-FDT_ERR_NOTFOUND, size); + + /* Check it works without a size parameter */ + val = ofnode_read_prop(node, "missing", NULL); + ut_assertnull(val); + + return 0; +} +DM_TEST(dm_test_ofnode_read, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); + +static int dm_test_ofnode_read_chosen(struct unit_test_state *uts) +{ + const char *str; + const u32 *val; + ofnode node; + int size; + + str = ofnode_read_chosen_string("setting"); + ut_assertnonnull(str); + ut_asserteq_str("sunrise ohoka", str); + ut_asserteq_ptr(NULL, ofnode_read_chosen_string("no-setting")); + + node = ofnode_get_chosen_node("other-node"); + ut_assert(ofnode_valid(node)); + ut_asserteq_str("c-test@5", ofnode_get_name(node)); + + node = ofnode_get_chosen_node("setting"); + ut_assert(!ofnode_valid(node)); + + val = ofnode_read_chosen_prop("int-values", &size); + ut_assertnonnull(val); + ut_asserteq(8, size); + ut_asserteq(0x1937, fdt32_to_cpu(val[0])); + ut_asserteq(72993, fdt32_to_cpu(val[1])); + + return 0; +} +DM_TEST(dm_test_ofnode_read_chosen, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); diff --git a/test/dm/power-domain.c b/test/dm/power-domain.c index 48318218a9..8baf5d09d1 100644 --- a/test/dm/power-domain.c +++ b/test/dm/power-domain.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/test.h> #include <asm/power-domain.h> #include <test/ut.h> diff --git a/test/dm/regmap.c b/test/dm/regmap.c index 6fd1f20656..b21f66732b 100644 --- a/test/dm/regmap.c +++ b/test/dm/regmap.c @@ -10,6 +10,7 @@ #include <syscon.h> #include <asm/test.h> #include <dm/test.h> +#include <linux/err.h> #include <test/ut.h> /* Base test of register maps */ diff --git a/test/dm/reset.c b/test/dm/reset.c index c61daed490..8370820428 100644 --- a/test/dm/reset.c +++ b/test/dm/reset.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <reset.h> #include <dm/test.h> #include <asm/reset.h> diff --git a/test/dm/sound.c b/test/dm/sound.c index 3767abbd1c..aa5368f05b 100644 --- a/test/dm/sound.c +++ b/test/dm/sound.c @@ -28,6 +28,7 @@ static int dm_test_sound(struct unit_test_state *uts) ut_asserteq(4560, sandbox_get_sound_sum(dev)); ut_assertok(sound_beep(dev, 1, 100)); ut_asserteq(9120, sandbox_get_sound_sum(dev)); + ut_asserteq(false, sandbox_get_sound_active(dev)); return 0; } diff --git a/test/dm/spmi.c b/test/dm/spmi.c index e6a910859e..668b7e133f 100644 --- a/test/dm/spmi.c +++ b/test/dm/spmi.c @@ -6,6 +6,7 @@ #include <common.h> #include <fdtdec.h> #include <dm.h> +#include <malloc.h> #include <dm/device.h> #include <dm/root.h> #include <dm/test.h> diff --git a/test/dm/syscon.c b/test/dm/syscon.c index 0ff9da7ec6..f1021f374b 100644 --- a/test/dm/syscon.c +++ b/test/dm/syscon.c @@ -9,6 +9,7 @@ #include <regmap.h> #include <asm/test.h> #include <dm/test.h> +#include <linux/err.h> #include <test/ut.h> /* Base test of system controllers */ diff --git a/test/dm/tee.c b/test/dm/tee.c index 22f05a4219..d40f13d291 100644 --- a/test/dm/tee.c +++ b/test/dm/tee.c @@ -5,6 +5,7 @@ #include <common.h> #include <dm.h> +#include <malloc.h> #include <dm/test.h> #include <sandboxtee.h> #include <tee.h> diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c index 698ca0e7cf..75ae08081c 100644 --- a/test/dm/test-fdt.c +++ b/test/dm/test-fdt.c @@ -12,6 +12,7 @@ #include <dm/test.h> #include <dm/root.h> #include <dm/device-internal.h> +#include <dm/devres.h> #include <dm/uclass-internal.h> #include <dm/util.h> #include <dm/lists.h> @@ -914,3 +915,41 @@ static int dm_test_uclass_drvdata(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_uclass_drvdata, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); + +/* Test device_first_child_ofdata_err(), etc. */ +static int dm_test_child_ofdata(struct unit_test_state *uts) +{ + struct udevice *bus, *dev; + int count; + + ut_assertok(uclass_first_device_err(UCLASS_TEST_BUS, &bus)); + count = 0; + device_foreach_child_ofdata_to_platdata(dev, bus) { + ut_assert(dev->flags & DM_FLAG_PLATDATA_VALID); + ut_assert(!(dev->flags & DM_FLAG_ACTIVATED)); + count++; + } + ut_asserteq(3, count); + + return 0; +} +DM_TEST(dm_test_child_ofdata, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); + +/* Test device_first_child_err(), etc. */ +static int dm_test_first_child_probe(struct unit_test_state *uts) +{ + struct udevice *bus, *dev; + int count; + + ut_assertok(uclass_first_device_err(UCLASS_TEST_BUS, &bus)); + count = 0; + device_foreach_child_probe(dev, bus) { + ut_assert(dev->flags & DM_FLAG_PLATDATA_VALID); + ut_assert(dev->flags & DM_FLAG_ACTIVATED); + count++; + } + ut_asserteq(3, count); + + return 0; +} +DM_TEST(dm_test_first_child_probe, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT); diff --git a/test/dm/test-main.c b/test/dm/test-main.c index 72648162a9..d7dc8d1f91 100644 --- a/test/dm/test-main.c +++ b/test/dm/test-main.c @@ -97,11 +97,11 @@ static int dm_do_test(struct unit_test_state *uts, struct unit_test *test, * Silence the console and rely on console recording to get * our output. */ - console_record_reset(); + console_record_reset_enable(); if (!state->show_test_output) gd->flags |= GD_FLG_SILENT; test->func(uts); - gd->flags &= ~GD_FLG_SILENT; + gd->flags &= ~(GD_FLG_SILENT | GD_FLG_RECORD); state_set_skip_delays(false); ut_assertok(dm_test_destroy(uts)); diff --git a/test/dm/video.c b/test/dm/video.c index 3151ebb73f..f72979fac4 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -7,6 +7,7 @@ #include <common.h> #include <bzlib.h> #include <dm.h> +#include <malloc.h> #include <mapmem.h> #include <os.h> #include <video.h> diff --git a/test/lib/lmb.c b/test/lib/lmb.c index ec68227bb6..1336b54b11 100644 --- a/test/lib/lmb.c +++ b/test/lib/lmb.c @@ -5,6 +5,7 @@ #include <common.h> #include <lmb.h> +#include <malloc.h> #include <dm/test.h> #include <test/ut.h> diff --git a/test/unicode_ut.c b/test/unicode_ut.c index 47532a64df..4d99c20bc0 100644 --- a/test/unicode_ut.c +++ b/test/unicode_ut.c @@ -9,6 +9,7 @@ #include <charset.h> #include <command.h> #include <errno.h> +#include <malloc.h> #include <test/test.h> #include <test/suites.h> #include <test/ut.h> @@ -6,6 +6,7 @@ */ #include <common.h> +#include <console.h> #include <malloc.h> #include <test/test.h> #include <test/ut.h> @@ -46,3 +47,48 @@ long ut_check_delta(ulong last) return ut_check_free() - last; } +int ut_check_console_line(struct unit_test_state *uts, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vsnprintf(uts->expect_str, sizeof(uts->expect_str), fmt, args); + va_end(args); + console_record_readline(uts->actual_str, sizeof(uts->actual_str)); + + return strcmp(uts->expect_str, uts->actual_str); +} + +int ut_check_console_end(struct unit_test_state *uts) +{ + if (!console_record_avail()) + return 0; + + console_record_readline(uts->actual_str, sizeof(uts->actual_str)); + + return 1; +} + +int ut_check_console_dump(struct unit_test_state *uts, int total_bytes) +{ + char *str = uts->actual_str; + int upto; + + /* Handle empty dump */ + if (!total_bytes) + return 0; + + for (upto = 0; upto < total_bytes;) { + int len; + int bytes; + + len = console_record_readline(str, sizeof(uts->actual_str)); + if (str[8] != ':' || str[9] != ' ') + return 1; + + bytes = len - 8 - 2 - 3 * 16 - 4; + upto += bytes; + } + + return upto == total_bytes ? 0 : 1; +} diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index 4f39bfd0ce..89c54d688a 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -487,6 +487,8 @@ class Toolchains: URL containing this toolchain, if avaialble, else None """ arch = command.OutputOneLine('uname', '-m') + if arch == 'aarch64': + arch = 'arm64' base = 'https://www.kernel.org/pub/tools/crosstool/files/bin' versions = ['7.3.0', '6.4.0', '4.9.4'] links = [] |