All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/33] sandbox: Move to SDL2
@ 2020-01-12 19:05 Simon Glass
  2020-01-12 19:05 ` [PATCH 01/33] sandbox: Sort the help options Simon Glass
                   ` (33 more replies)
  0 siblings, 34 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This series handles moving sandbox to the latest version of SDL, SDL2. It
provides a few more features, better performance and has been around for
long enough that it is present in distributions in the last several years.

Unfortunately it requires considerable rework of how memory allocation is
handled in sandbox.

At present sandbox is built such that it uses U-Boot's malloc() instead
of the C library's malloc. This mostly works but it is fragile, since any
use of libraries can cause strange behaviour. For example SDL ends up
calling U-Boot's malloc/free and this can confuse valgrind and even cause
a crash in some cases.

The simplest solution seems to be to set a prefix for the allocation
functions so that U-Boot's functions can co-exist with the C library's.
This requires a little bit of fiddling but it guarantees that things work
correctly in all circumstances.

We have got away with this for a long time partly due to the way that
SDL1.2 operates on init. But with SDL2 this does not seem to be possible.

As a result of this series, malloc() is #defined to dlmalloc() within
U-Boot (for sandbox only). The use of 'free' as a function in U-Boot is
thus best avoided, since it is #defined to dlfree. The series updates some
APIs to deal with this.


Simon Glass (33):
  sandbox: Sort the help options
  video: Support truetype fonts on a 32-bit display
  video: sandbox: Enable all colour depths
  mailbox: Rename free() to rfree()
  power-domain: Rename free() to rfree()
  reset: Rename free() to rfree()
  gpio: Rename free() to rfree()
  clk: Rename free() to rfree()
  dma: Rename free() to rfree()
  mtd: Rename free() to rfree()
  sandbox: Rename 'free' variable
  sandbox: Use a prefix for all allocation functions
  exports: Add the malloc.h header
  string: Allow arch override of strndup() also
  sandbox: Rename strdup() functions
  sandbox: Drop use of special os_malloc() where possible
  sandbox: Drop os_realloc()
  sandbox: Ensure that long-options array is terminated
  sandbox: Add a new header for the system malloc()
  sound: Add a new stop_play() method
  sandbox: sound: Handle errors better in sound_beep()
  sandbox: Add comments to the sdl struct
  sandbox: sdl: Improve error handling
  sandbox: sdl: Support waiting for audio to complete
  gitlab: Disable SDL when building sandbox
  sandbox: sdl: Move to use SDL2
  sandbox: sdl: Add an option to double the screen size
  sandbox: Support changing the LCD colour depth
  dm: core: Require users of devres to include the header
  dm: core: Create a new header file for 'compat' features
  dm: core: Drop the inclusion of linux/compat.h in dm.h
  sandbox: Complete migration away from os_malloc()
  video: Drop the Nimbus font

 .gitlab-ci.yml                                |   5 +-
 .travis.yml                                   |   2 +-
 arch/arm/mach-aspeed/ast2500/clk_ast2500.c    |   1 +
 arch/arm/mach-imx/cmd_nandbcb.c               |   2 +
 arch/arm/mach-imx/imx8/image.c                |   1 +
 arch/arm/mach-meson/board-info.c              |   1 +
 arch/arm/mach-meson/sm.c                      |   1 +
 arch/arm/mach-mvebu/mbus.c                    |   1 +
 arch/arm/mach-rockchip/px30/clk_px30.c        |   1 +
 arch/arm/mach-rockchip/rk3036/clk_rk3036.c    |   1 +
 arch/arm/mach-rockchip/rk3128/clk_rk3128.c    |   1 +
 arch/arm/mach-rockchip/rk3188/clk_rk3188.c    |   1 +
 arch/arm/mach-rockchip/rk3188/rk3188.c        |   1 +
 arch/arm/mach-rockchip/rk322x/clk_rk322x.c    |   1 +
 arch/arm/mach-rockchip/rk3288/clk_rk3288.c    |   1 +
 arch/arm/mach-rockchip/rk3288/rk3288.c        |   2 +
 arch/arm/mach-rockchip/rk3308/clk_rk3308.c    |   1 +
 arch/arm/mach-rockchip/rk3308/rk3308.c        |   1 +
 arch/arm/mach-rockchip/rk3328/clk_rk3328.c    |   1 +
 arch/arm/mach-rockchip/rk3368/clk_rk3368.c    |   1 +
 arch/arm/mach-rockchip/rk3399/clk_rk3399.c    |   1 +
 arch/arm/mach-rockchip/rv1108/clk_rv1108.c    |   1 +
 arch/arm/mach-socfpga/clock_manager_agilex.c  |   1 +
 arch/arm/mach-socfpga/clock_manager_arria10.c |   1 +
 arch/arm/mach-stm32mp/pwr_regulator.c         |   2 +
 arch/arm/mach-tegra/cboot.c                   |   1 +
 arch/arm/mach-zynq/clk.c                      |   1 +
 arch/arm/mach-zynq/timer.c                    |   1 +
 arch/mips/mach-mtmips/cpu.c                   |   1 +
 arch/mips/mach-pic32/cpu.c                    |   1 +
 arch/riscv/lib/andes_plic.c                   |   1 +
 arch/riscv/lib/andes_plmt.c                   |   1 +
 arch/riscv/lib/sifive_clint.c                 |   1 +
 arch/sandbox/config.mk                        |   2 +-
 arch/sandbox/cpu/cpu.c                        |   1 +
 arch/sandbox/cpu/eth-raw-os.c                 |   6 +-
 arch/sandbox/cpu/os.c                         |  48 +--
 arch/sandbox/cpu/sdl.c                        | 338 +++++++++++-------
 arch/sandbox/cpu/start.c                      |  62 +++-
 arch/sandbox/cpu/state.c                      |  23 +-
 arch/sandbox/dts/sandbox.dtsi                 |   1 +
 arch/sandbox/include/asm/malloc.h             |  26 ++
 arch/sandbox/include/asm/sdl.h                |   9 +-
 arch/sandbox/include/asm/state.h              |   1 +
 arch/sandbox/include/asm/test.h               |   7 +
 arch/x86/cpu/apollolake/fsp_s.c               |   1 +
 arch/x86/cpu/apollolake/itss.c                |   1 +
 arch/x86/cpu/apollolake/spl.c                 |   1 +
 arch/x86/cpu/apollolake/uart.c                |   1 +
 arch/x86/cpu/qemu/e820.c                      |   1 +
 arch/x86/cpu/qfw_cpu.c                        |   1 +
 arch/x86/lib/coreboot_table.c                 |   1 +
 arch/x86/lib/fsp1/fsp_common.c                |   1 +
 arch/x86/lib/mrccache.c                       |   1 +
 arch/x86/lib/tables.c                         |   1 +
 board/compulab/common/common.c                |   1 +
 board/corscience/tricorder/tricorder.c        |   1 +
 board/gardena/smart-gateway-mt7688/board.c    |   1 +
 board/ge/common/vpd_reader.c                  |   1 +
 board/google/veyron/veyron.c                  |   1 +
 board/hisilicon/poplar/poplar.c               |   2 +-
 board/isee/igep003x/board.c                   |   1 +
 board/isee/igep00x0/igep00x0.c                |   1 +
 board/menlo/m53menlo/m53menlo.c               |   1 +
 board/microchip/pic32mzda/pic32mzda.c         |   1 +
 board/overo/overo.c                           |   1 +
 board/siemens/common/board.c                  |   1 +
 board/siemens/pxm2/board.c                    |   1 +
 board/siemens/rut/board.c                     |   1 +
 board/st/stm32mp1/stm32mp1.c                  |   2 +
 board/synopsys/hsdk/clk-lib.c                 |   1 +
 board/technexion/tao3530/tao3530.c            |   1 +
 board/ti/am335x/board.c                       |   1 +
 board/ti/am57xx/board.c                       |   1 +
 board/timll/devkit8000/devkit8000.c           |   1 +
 cmd/bootefi.c                                 |   1 +
 cmd/gpio.c                                    |   2 +
 cmd/gpt.c                                     |   1 +
 cmd/host.c                                    |   1 +
 cmd/mtd.c                                     |   2 +
 cmd/rng.c                                     |   1 +
 cmd/tpm-common.c                              |   1 +
 cmd/ubi.c                                     |   2 +
 cmd/usb_mass_storage.c                        |   1 +
 cmd/ximg.c                                    |   1 +
 common/android_ab.c                           |   1 +
 common/autoboot.c                             |   1 +
 common/exports.c                              |   1 +
 common/image-fdt.c                            |   1 +
 common/image.c                                |   1 +
 common/usb.c                                  |   1 +
 common/usb_hub.c                              |   1 +
 configs/sandbox64_defconfig                   |   1 -
 configs/sandbox_defconfig                     |   1 -
 configs/sandbox_flattree_defconfig            |   1 -
 configs/sandbox_spl_defconfig                 |   1 -
 doc/README.video                              |   2 +-
 doc/arch/sandbox.rst                          |   2 +-
 doc/device-tree-bindings/video/sandbox-fb.txt |   6 +-
 drivers/adc/rockchip-saradc.c                 |   1 +
 drivers/adc/stm32-adc-core.c                  |   1 +
 drivers/adc/stm32-adc.c                       |   1 +
 drivers/axi/sandbox_store.c                   |   1 +
 drivers/block/blk-uclass.c                    |   2 +
 drivers/block/sandbox.c                       |   1 +
 drivers/clk/altera/clk-arria10.c              |   3 +
 drivers/clk/aspeed/clk_ast2500.c              |   1 +
 drivers/clk/at91/clk-generated.c              |   2 +
 drivers/clk/at91/clk-h32mx.c                  |   1 +
 drivers/clk/at91/clk-peripheral.c             |   1 +
 drivers/clk/at91/clk-usb.c                    |   1 +
 drivers/clk/clk-cdce9xx.c                     |   1 +
 drivers/clk/clk-composite.c                   |   2 +
 drivers/clk/clk-divider.c                     |   2 +
 drivers/clk/clk-fixed-factor.c                |   2 +
 drivers/clk/clk-gate.c                        |   2 +
 drivers/clk/clk-mux.c                         |   2 +
 drivers/clk/clk-ti-sci.c                      |   5 +-
 drivers/clk/clk-uclass.c                      |   9 +-
 drivers/clk/clk_fixed_factor.c                |   1 +
 drivers/clk/clk_sandbox.c                     |   3 +-
 drivers/clk/clk_sandbox_ccf.c                 |   3 +
 drivers/clk/clk_sandbox_test.c                |   3 +
 drivers/clk/clk_versal.c                      |   2 +
 drivers/clk/clk_vexpress_osc.c                |   1 +
 drivers/clk/clk_zynq.c                        |   1 +
 drivers/clk/clk_zynqmp.c                      |   3 +
 drivers/clk/imx/clk-composite-8m.c            |   2 +
 drivers/clk/imx/clk-gate2.c                   |   2 +
 drivers/clk/imx/clk-imx8.c                    |   1 +
 drivers/clk/imx/clk-pfd.c                     |   2 +
 drivers/clk/imx/clk-pll14xx.c                 |   2 +
 drivers/clk/imx/clk-pllv3.c                   |   2 +
 drivers/clk/meson/axg.c                       |   1 +
 drivers/clk/meson/g12a.c                      |   1 +
 drivers/clk/meson/gxbb.c                      |   1 +
 drivers/clk/mvebu/armada-37xx-periph.c        |   1 +
 drivers/clk/mvebu/armada-37xx-tbg.c           |   1 +
 drivers/clk/rockchip/clk_px30.c               |   1 +
 drivers/clk/rockchip/clk_rk3036.c             |   1 +
 drivers/clk/rockchip/clk_rk3128.c             |   1 +
 drivers/clk/rockchip/clk_rk3188.c             |   2 +
 drivers/clk/rockchip/clk_rk322x.c             |   1 +
 drivers/clk/rockchip/clk_rk3288.c             |   2 +
 drivers/clk/rockchip/clk_rk3308.c             |   1 +
 drivers/clk/rockchip/clk_rk3328.c             |   1 +
 drivers/clk/rockchip/clk_rk3368.c             |   1 +
 drivers/clk/rockchip/clk_rk3399.c             |   1 +
 drivers/clk/rockchip/clk_rv1108.c             |   1 +
 drivers/clk/sifive/fu540-prci.c               |   1 +
 drivers/clk/tegra/tegra-car-clk.c             |   3 +-
 drivers/clk/uniphier/clk-uniphier-core.c      |   1 +
 drivers/core/devres.c                         |   2 +
 drivers/core/of_access.c                      |   1 +
 drivers/core/ofnode.c                         |   1 +
 drivers/core/syscon-uclass.c                  |   1 +
 drivers/ddr/altera/sdram_gen5.c               |   1 +
 drivers/ddr/altera/sdram_soc64.c              |   1 +
 drivers/dfu/dfu_mtd.c                         |   1 +
 drivers/dma/bcm6348-iudma.c                   |   1 +
 drivers/dma/dma-uclass.c                      |   5 +-
 drivers/dma/sandbox-dma-test.c                |   3 +-
 drivers/dma/ti/k3-udma.c                      |   5 +-
 drivers/firmware/ti_sci.c                     |   3 +
 drivers/fpga/fpga.c                           |   1 +
 drivers/gpio/74x164_gpio.c                    |   1 +
 drivers/gpio/adi_gpio2.c                      |   1 +
 drivers/gpio/at91_gpio.c                      |   1 +
 drivers/gpio/atmel_pio4.c                     |   1 +
 drivers/gpio/da8xx_gpio.c                     |   1 +
 drivers/gpio/dwapb_gpio.c                     |   2 +
 drivers/gpio/gpio-rcar.c                      |   4 +-
 drivers/gpio/gpio-uclass.c                    |   4 +-
 drivers/gpio/kona_gpio.c                      |   1 +
 drivers/gpio/mpc83xx_gpio.c                   |   1 +
 drivers/gpio/mscc_sgpio.c                     |   2 +
 drivers/gpio/mvgpio.c                         |   1 +
 drivers/gpio/mxs_gpio.c                       |   1 +
 drivers/gpio/pca953x_gpio.c                   |   1 +
 drivers/gpio/pca9698.c                        |   1 +
 drivers/gpio/sh_pfc.c                         |   1 +
 drivers/gpio/spear_gpio.c                     |   1 +
 drivers/gpio/stm32_gpio.c                     |   1 +
 drivers/hwspinlock/hwspinlock-uclass.c        |   2 +
 drivers/hwspinlock/stm32_hwspinlock.c         |   1 +
 drivers/i2c/ast_i2c.c                         |   1 +
 drivers/i2c/at91_i2c.c                        |   1 +
 drivers/i2c/designware_i2c.c                  |   3 +
 drivers/i2c/i2c-uniphier-f.c                  |   1 +
 drivers/i2c/i2c-uniphier.c                    |   1 +
 drivers/i2c/imx_lpi2c.c                       |   1 +
 drivers/i2c/meson_i2c.c                       |   1 +
 drivers/i2c/muxes/i2c-arb-gpio-challenge.c    |   1 +
 drivers/i2c/muxes/i2c-mux-gpio.c              |   2 +
 drivers/i2c/muxes/i2c-mux-uclass.c            |   1 +
 drivers/i2c/muxes/pca954x.c                   |   1 +
 drivers/i2c/mxc_i2c.c                         |   1 +
 drivers/i2c/rcar_i2c.c                        |   1 +
 drivers/i2c/stm32f7_i2c.c                     |   1 +
 drivers/i2c/tegra_i2c.c                       |   1 +
 drivers/i2c/xilinx_xiic.c                     |   1 +
 drivers/led/led_gpio.c                        |   1 +
 drivers/mailbox/k3-sec-proxy.c                |   4 +-
 drivers/mailbox/mailbox-uclass.c              |   5 +-
 drivers/mailbox/sandbox-mbox-test.c           |   1 +
 drivers/mailbox/sandbox-mbox.c                |   3 +-
 drivers/mailbox/stm32-ipcc.c                  |   4 +-
 drivers/mailbox/tegra-hsp.c                   |   3 +-
 drivers/mailbox/zynqmp-ipi.c                  |   1 +
 drivers/misc/cros_ec_sandbox.c                |   8 +-
 drivers/misc/imx8/scu_api.c                   |   1 +
 drivers/misc/k3_avs.c                         |   1 +
 drivers/misc/microchip_flexcom.c              |   1 +
 drivers/misc/p2sb-uclass.c                    |   1 +
 drivers/misc/stm32_rcc.c                      |   1 +
 drivers/misc/tegra186_bpmp.c                  |   2 +
 drivers/misc/vexpress_config.c                |   1 +
 drivers/mmc/am654_sdhci.c                     |   2 +
 drivers/mmc/arm_pl180_mmci.c                  |   1 +
 drivers/mmc/aspeed_sdhci.c                    |   1 +
 drivers/mmc/bcm2835_sdhost.c                  |   1 +
 drivers/mmc/fsl_esdhc.c                       |   1 +
 drivers/mmc/fsl_esdhc_imx.c                   |   2 +
 drivers/mmc/jz_mmc.c                          |   1 +
 drivers/mmc/mmc-uclass.c                      |   2 +
 drivers/mmc/msm_sdhci.c                       |   1 +
 drivers/mmc/mtk-sd.c                          |   1 +
 drivers/mmc/omap_hsmmc.c                      |   2 +
 drivers/mmc/renesas-sdhi.c                    |   2 +
 drivers/mmc/rockchip_sdhci.c                  |   1 +
 drivers/mmc/sdhci-cadence.c                   |   1 +
 drivers/mmc/sh_mmcif.c                        |   1 +
 drivers/mmc/sh_sdhi.c                         |   1 +
 drivers/mmc/snps_dw_mmc.c                     |   1 +
 drivers/mmc/socfpga_dw_mmc.c                  |   1 +
 drivers/mmc/stm32_sdmmc2.c                    |   1 +
 drivers/mmc/tegra_mmc.c                       |   1 +
 drivers/mmc/tmio-common.c                     |   1 +
 drivers/mmc/uniphier-sd.c                     |   2 +
 drivers/mmc/zynq_sdhci.c                      |   2 +
 drivers/mtd/hbmc-am654.c                      |   1 +
 drivers/mtd/mtd_uboot.c                       |   2 +
 drivers/mtd/mtdconcat.c                       |   1 +
 drivers/mtd/mtdcore.c                         |   5 +-
 drivers/mtd/mtdpart.c                         |   1 +
 drivers/mtd/nand/bbt.c                        |   1 +
 drivers/mtd/nand/core.c                       |   1 +
 drivers/mtd/nand/raw/atmel_nand.c             |   2 +
 drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c |   1 +
 drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c  |   1 +
 drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c  |   1 +
 drivers/mtd/nand/raw/brcmnand/brcmnand.c      |   3 +
 .../mtd/nand/raw/brcmnand/brcmnand_compat.c   |   2 +
 drivers/mtd/nand/raw/denali.c                 |   6 +-
 drivers/mtd/nand/raw/denali_dt.c              |   1 +
 drivers/mtd/nand/raw/fsl_elbc_nand.c          |   1 +
 drivers/mtd/nand/raw/fsl_ifc_nand.c           |   1 +
 drivers/mtd/nand/raw/mxs_nand_spl.c           |   1 +
 drivers/mtd/nand/raw/nand_base.c              |   1 +
 drivers/mtd/nand/raw/nand_bbt.c               |   1 +
 drivers/mtd/nand/raw/nand_bch.c               |   1 +
 drivers/mtd/nand/raw/nand_timings.c           |   1 +
 drivers/mtd/nand/raw/nand_util.c              |   1 +
 drivers/mtd/nand/raw/pxa3xx_nand.c            |   3 +
 drivers/mtd/nand/raw/stm32_fmc2_nand.c        |   1 +
 drivers/mtd/nand/raw/sunxi_nand.c             |   4 +
 drivers/mtd/nand/raw/tegra_nand.c             |   1 +
 drivers/mtd/nand/raw/vf610_nfc.c              |   1 +
 drivers/mtd/nand/spi/core.c                   |   4 +-
 drivers/mtd/nand/spi/gigadevice.c             |   3 +-
 drivers/mtd/nand/spi/macronix.c               |   3 +-
 drivers/mtd/nand/spi/micron.c                 |   3 +-
 drivers/mtd/nand/spi/winbond.c                |   3 +-
 drivers/mtd/onenand/onenand_base.c            |   1 +
 drivers/mtd/renesas_rpc_hf.c                  |   2 +
 drivers/mtd/spi/sf-uclass.c                   |   1 +
 drivers/mtd/spi/spi-nor-core.c                |   2 +
 drivers/mtd/spi/spi-nor-tiny.c                |   1 +
 drivers/mtd/ubi/attach.c                      |   1 +
 drivers/mtd/ubi/build.c                       |   1 +
 drivers/mtd/ubi/debug.c                       |   2 +
 drivers/mtd/ubi/eba.c                         |   1 +
 drivers/mtd/ubi/fastmap.c                     |   2 +
 drivers/mtd/ubi/io.c                          |   1 +
 drivers/mtd/ubi/kapi.c                        |   1 +
 drivers/mtd/ubi/misc.c                        |   1 +
 drivers/mtd/ubi/upd.c                         |   1 +
 drivers/mtd/ubi/vmt.c                         |   1 +
 drivers/mtd/ubi/vtbl.c                        |   1 +
 drivers/mtd/ubi/wl.c                          |   1 +
 drivers/net/bcm6348-eth.c                     |   1 +
 drivers/net/bcm6368-eth.c                     |   2 +
 drivers/net/designware.c                      |   2 +
 drivers/net/dwc_eth_qos.c                     |   1 +
 drivers/net/dwmac_socfpga.c                   |   2 +
 drivers/net/e1000.c                           |   1 +
 drivers/net/e1000_spi.c                       |   1 +
 drivers/net/fsl-mc/dpio/qbman_portal.c        |   1 +
 drivers/net/fsl-mc/mc.c                       |   1 +
 drivers/net/fsl_enetc.c                       |   1 +
 drivers/net/ftgmac100.c                       |   2 +
 drivers/net/higmacv300.c                      |   1 +
 drivers/net/mscc_eswitch/jr2_switch.c         |   1 +
 drivers/net/mscc_eswitch/luton_switch.c       |   1 +
 drivers/net/mscc_eswitch/ocelot_switch.c      |   1 +
 drivers/net/mscc_eswitch/serval_switch.c      |   1 +
 drivers/net/mscc_eswitch/servalt_switch.c     |   1 +
 drivers/net/mtk_eth.c                         |   1 +
 drivers/net/mvneta.c                          |   2 +
 drivers/net/mvpp2.c                           |   3 +
 drivers/net/pch_gbe.c                         |   1 +
 drivers/net/pfe_eth/pfe_driver.c              |   1 +
 drivers/net/pfe_eth/pfe_eth.c                 |   1 +
 drivers/net/pfe_eth/pfe_firmware.c            |   1 +
 drivers/net/pfe_eth/pfe_mdio.c                |   1 +
 drivers/net/phy/dp83867.c                     |   1 +
 drivers/net/phy/fixed.c                       |   1 +
 drivers/net/pic32_eth.c                       |   1 +
 drivers/net/sandbox-raw-bus.c                 |   1 +
 drivers/net/sni_ave.c                         |   7 +-
 drivers/net/sun8i_emac.c                      |   1 +
 drivers/net/sunxi_emac.c                      |   1 +
 drivers/net/ti/am65-cpsw-nuss.c               |   2 +
 drivers/net/ti/cpsw-common.c                  |   1 +
 drivers/net/ti/cpsw.c                         |   1 +
 drivers/net/ti/cpsw_mdio.c                    |   1 +
 drivers/net/zynq_gem.c                        |   2 +
 drivers/nvme/nvme.c                           |   2 +
 drivers/pci/pci-aardvark.c                    |   1 +
 drivers/pci/pci-uclass.c                      |   1 +
 drivers/pci/pci_mvebu.c                       |   1 +
 drivers/pci/pcie_dw_ti.c                      |   2 +
 drivers/pci/pcie_fsl.c                        |   1 +
 drivers/pci/pcie_imx.c                        |   1 +
 drivers/pci/pcie_intel_fpga.c                 |   1 +
 drivers/pci/pcie_mediatek.c                   |   2 +
 drivers/phy/allwinner/phy-sun4i-usb.c         |   2 +
 drivers/phy/bcm6318-usbh-phy.c                |   1 +
 drivers/phy/bcm6348-usbh-phy.c                |   1 +
 drivers/phy/bcm6358-usbh-phy.c                |   1 +
 drivers/phy/bcm6368-usbh-phy.c                |   1 +
 drivers/phy/marvell/comphy_core.c             |   2 +
 drivers/phy/meson-g12a-usb2.c                 |   1 +
 drivers/phy/meson-g12a-usb3-pcie.c            |   1 +
 drivers/phy/meson-gxl-usb2.c                  |   1 +
 drivers/phy/meson-gxl-usb3.c                  |   1 +
 drivers/phy/omap-usb2-phy.c                   |   1 +
 drivers/phy/phy-mtk-tphy.c                    |   3 +
 drivers/phy/phy-rcar-gen2.c                   |   2 +
 drivers/phy/phy-rcar-gen3.c                   |   1 +
 drivers/phy/phy-stm32-usbphyc.c               |   1 +
 drivers/phy/phy-ti-am654.c                    |   2 +
 drivers/phy/ti-pipe3-phy.c                    |   1 +
 drivers/pinctrl/broadcom/pinctrl-bcm6838.c    |   1 +
 drivers/pinctrl/intel/pinctrl.c               |   2 +
 drivers/pinctrl/meson/pinctrl-meson.c         |   2 +
 drivers/pinctrl/mscc/mscc-common.c            |   2 +
 .../pinctrl/mtmips/pinctrl-mtmips-common.c    |   1 +
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c   |   3 +
 drivers/pinctrl/nxp/pinctrl-imx.c             |   3 +
 drivers/pinctrl/nxp/pinctrl-mxs.c             |   2 +
 drivers/pinctrl/pinctrl-generic.c             |   1 +
 drivers/pinctrl/pinctrl-single.c              |   1 +
 drivers/pinctrl/pinctrl-stmfx.c               |   1 +
 drivers/pinctrl/pinctrl-uclass.c              |   2 +
 drivers/pinctrl/pinctrl_stm32.c               |   3 +
 drivers/pinctrl/renesas/pfc.c                 |   2 +
 .../pinctrl/uniphier/pinctrl-uniphier-core.c  |   1 +
 drivers/power/domain/bcm6328-power-domain.c   |   3 +-
 .../power/domain/imx8-power-domain-legacy.c   |   3 +-
 drivers/power/domain/imx8-power-domain.c      |   3 +-
 drivers/power/domain/imx8m-power-domain.c     |   3 +-
 drivers/power/domain/meson-ee-pwrc.c          |   4 +-
 drivers/power/domain/meson-gx-pwrc-vpu.c      |   4 +-
 drivers/power/domain/mtk-power-domain.c       |   4 +-
 drivers/power/domain/power-domain-uclass.c    |   3 +-
 .../power/domain/sandbox-power-domain-test.c  |   1 +
 drivers/power/domain/sandbox-power-domain.c   |   3 +-
 drivers/power/domain/tegra186-power-domain.c  |   3 +-
 drivers/power/domain/ti-sci-power-domain.c    |   5 +-
 drivers/power/pmic/fan53555.c                 |   1 +
 drivers/power/pmic/i2c_pmic_emul.c            |   1 +
 drivers/power/pmic/stpmic1.c                  |   1 +
 drivers/power/regulator/pbias_regulator.c     |   1 +
 drivers/power/regulator/pwm_regulator.c       |   1 +
 drivers/power/regulator/stm32-vrefbuf.c       |   1 +
 drivers/power/regulator/tps62360_regulator.c  |   1 +
 drivers/ram/k3-am654-ddrss.c                  |   1 +
 drivers/ram/k3-j721e/k3-j721e-ddrss.c         |   1 +
 drivers/ram/rockchip/dmc-rk3368.c             |   1 +
 drivers/ram/stm32_sdram.c                     |   1 +
 drivers/remoteproc/k3_system_controller.c     |   1 +
 drivers/remoteproc/rproc-elf-loader.c         |   2 +
 drivers/remoteproc/stm32_copro.c              |   2 +
 drivers/remoteproc/ti_k3_arm64_rproc.c        |   2 +
 drivers/remoteproc/ti_k3_dsp_rproc.c          |   3 +
 drivers/remoteproc/ti_k3_r5f_rproc.c          |   3 +
 drivers/reset/reset-bcm6345.c                 |   3 +-
 drivers/reset/reset-hisilicon.c               |   3 +-
 drivers/reset/reset-hsdk.c                    |   2 +-
 drivers/reset/reset-imx7.c                    |   3 +-
 drivers/reset/reset-mediatek.c                |   4 +-
 drivers/reset/reset-meson.c                   |   3 +-
 drivers/reset/reset-mtmips.c                  |   3 +-
 drivers/reset/reset-rockchip.c                |   3 +-
 drivers/reset/reset-socfpga.c                 |   3 +-
 drivers/reset/reset-sunxi.c                   |   3 +-
 drivers/reset/reset-ti-sci.c                  |   5 +-
 drivers/reset/reset-uclass.c                  |   4 +-
 drivers/reset/reset-uniphier.c                |   4 +-
 drivers/reset/sandbox-reset-test.c            |   1 +
 drivers/reset/sandbox-reset.c                 |   3 +-
 drivers/reset/sti-reset.c                     |   3 +-
 drivers/reset/stm32-reset.c                   |   3 +-
 drivers/reset/tegra-car-reset.c               |   3 +-
 drivers/reset/tegra186-reset.c                |   3 +-
 drivers/rtc/ds3232.c                          |   1 +
 drivers/rtc/rv3029.c                          |   1 +
 drivers/rtc/stm32_rtc.c                       |   2 +
 drivers/serial/atmel_usart.c                  |   1 +
 drivers/serial/ns16550.c                      |   1 +
 drivers/serial/serial-uclass.c                |   1 +
 drivers/serial/serial_bcm6345.c               |   1 +
 drivers/serial/serial_lpuart.c                |   1 +
 drivers/serial/serial_msm.c                   |   1 +
 drivers/serial/serial_mtk.c                   |   3 +-
 drivers/serial/serial_omap.c                  |   1 +
 drivers/serial/serial_pic32.c                 |   1 +
 drivers/serial/serial_sifive.c                |   1 +
 drivers/serial/serial_stm32.c                 |   1 +
 drivers/serial/serial_zynq.c                  |   2 +
 drivers/smem/msm_smem.c                       |   3 +
 drivers/soc/ti/k3-navss-ringacc.c             |   3 +
 drivers/sound/sandbox.c                       |  21 +-
 drivers/sound/sound-uclass.c                  |  17 +-
 drivers/spi/atmel-quadspi.c                   |   3 +
 drivers/spi/bcm63xx_hsspi.c                   |   1 +
 drivers/spi/bcm63xx_spi.c                     |   1 +
 drivers/spi/cadence_qspi.c                    |   2 +
 drivers/spi/designware_spi.c                  |   1 +
 drivers/spi/mvebu_a3700_spi.c                 |   1 +
 drivers/spi/mxc_spi.c                         |   1 +
 drivers/spi/spi-mem-nodm.c                    |   1 +
 drivers/spi/spi-mem.c                         |   2 +
 drivers/spi/spi-sunxi.c                       |   1 +
 drivers/spi/stm32_qspi.c                      |   1 +
 drivers/spi/stm32_spi.c                       |   2 +
 drivers/spi/ti_qspi.c                         |   1 +
 drivers/spi/uniphier_spi.c                    |   1 +
 drivers/spi/zynqmp_gqspi.c                    |   2 +
 drivers/spmi/spmi-msm.c                       |   1 +
 drivers/sysreset/sysreset-ti-sci.c            |   2 +
 drivers/sysreset/sysreset_syscon.c            |   1 +
 drivers/tee/optee/core.c                      |   2 +
 drivers/tee/optee/rpmb.c                      |   1 +
 drivers/tee/optee/supplicant.c                |   1 +
 drivers/tee/tee-uclass.c                      |   3 +-
 drivers/timer/ast_timer.c                     |   1 +
 drivers/timer/cadence-ttc.c                   |   1 +
 drivers/timer/dw-apb-timer.c                  |   2 +
 drivers/timer/ostm_timer.c                    |   1 +
 drivers/timer/stm32_timer.c                   |   1 +
 drivers/timer/timer-uclass.c                  |   1 +
 drivers/ufs/cdns-platform.c                   |   2 +
 drivers/ufs/ti-j721e-ufs.c                    |   2 +
 drivers/ufs/ufs.c                             |   2 +
 drivers/usb/cdns3/cdns3-ti.c                  |   1 +
 drivers/usb/cdns3/core.c                      |   2 +
 drivers/usb/cdns3/drd.c                       |   1 +
 drivers/usb/cdns3/ep0.c                       |   1 +
 drivers/usb/cdns3/gadget.c                    |   3 +
 drivers/usb/cdns3/host.c                      |   1 +
 drivers/usb/dwc3/core.c                       |   3 +
 drivers/usb/dwc3/dwc3-omap.c                  |   2 +
 drivers/usb/dwc3/dwc3-uniphier.c              |   1 +
 drivers/usb/dwc3/ep0.c                        |   1 +
 drivers/usb/dwc3/gadget.c                     |   2 +
 drivers/usb/dwc3/ti_usb_phy.c                 |   2 +
 drivers/usb/gadget/at91_udc.c                 |   2 +
 drivers/usb/gadget/composite.c                |   1 +
 drivers/usb/gadget/dwc2_udc_otg.c             |   2 +
 drivers/usb/gadget/f_mass_storage.c           |   1 +
 drivers/usb/gadget/pxa25x_udc.c               |   1 +
 drivers/usb/gadget/storage_common.c           |   1 +
 drivers/usb/gadget/udc/udc-core.c             |   2 +
 drivers/usb/host/dwc2.c                       |   1 +
 drivers/usb/host/ehci-atmel.c                 |   1 +
 drivers/usb/host/ehci-generic.c               |   2 +
 drivers/usb/host/ehci-hcd.c                   |   1 +
 drivers/usb/host/ohci-da8xx.c                 |   3 +
 drivers/usb/host/ohci-generic.c               |   2 +
 drivers/usb/host/r8a66597-hcd.c               |   1 +
 drivers/usb/host/xhci-rcar.c                  |   2 +
 drivers/usb/musb-new/am35x.c                  |   2 +
 drivers/usb/musb-new/da8xx.c                  |   1 +
 drivers/usb/musb-new/musb_core.c              |   2 +
 drivers/usb/musb-new/musb_dsps.c              |   2 +
 drivers/usb/musb-new/musb_gadget.c            |   2 +
 drivers/usb/musb-new/musb_gadget_ep0.c        |   1 +
 drivers/usb/musb-new/musb_host.c              |   2 +
 drivers/usb/musb-new/musb_uboot.c             |   2 +
 drivers/usb/musb-new/omap2430.c               |   2 +
 drivers/usb/musb-new/pic32.c                  |   1 +
 drivers/usb/musb-new/sunxi.c                  |   2 +
 drivers/usb/musb-new/ti-musb.c                |   1 +
 drivers/usb/phy/omap_usb_phy.c                |   1 +
 drivers/video/Kconfig                         |   4 +-
 drivers/video/atmel_hlcdfb.c                  |   1 +
 drivers/video/console_truetype.c              |  28 +-
 drivers/video/da8xx-fb.c                      |   1 +
 drivers/video/dw_mipi_dsi.c                   |   1 +
 drivers/video/exynos/exynos_mipi_dsi.c        |   1 +
 drivers/video/fonts/Kconfig                   |  20 +-
 drivers/video/fonts/Makefile                  |   2 +-
 drivers/video/fonts/nimbus_sans_l_regular.ttf | Bin 61660 -> 0 bytes
 drivers/video/fonts/roboto_regular.ttf        | Bin 0 -> 162876 bytes
 drivers/video/hitachi_tx18d42vm_lcd.c         |   1 +
 drivers/video/mali_dp.c                       |   2 +
 drivers/video/mipi_dsi.c                      |   1 +
 drivers/video/mvebu_lcd.c                     |   1 +
 drivers/video/mxsfb.c                         |   1 +
 drivers/video/orisetech_otm8009a.c            |   1 +
 drivers/video/pwm_backlight.c                 |   1 +
 drivers/video/raydium-rm68200.c               |   1 +
 drivers/video/rockchip/rk3288_hdmi.c          |   1 +
 drivers/video/rockchip/rk3288_mipi.c          |   1 +
 drivers/video/rockchip/rk3399_mipi.c          |   1 +
 drivers/video/rockchip/rk_edp.c               |   1 +
 drivers/video/rockchip/rk_vop.c               |   1 +
 drivers/video/sandbox_osd.c                   |   1 +
 drivers/video/sandbox_sdl.c                   |  13 +-
 drivers/video/scf0403_lcd.c                   |   1 +
 drivers/video/ssd2828.c                       |   1 +
 drivers/video/stm32/stm32_dsi.c               |   1 +
 drivers/video/stm32/stm32_ltdc.c              |   1 +
 drivers/video/tegra124/sor.c                  |   1 +
 drivers/video/video-uclass.c                  |   1 +
 drivers/virtio/virtio-uclass.c                |   1 +
 drivers/virtio/virtio_mmio.c                  |   1 +
 drivers/virtio/virtio_pci_legacy.c            |   1 +
 drivers/virtio/virtio_pci_modern.c            |   1 +
 drivers/virtio/virtio_ring.c                  |   1 +
 drivers/virtio/virtio_sandbox.c               |   1 +
 drivers/w1-eeprom/ds2502.c                    |   1 +
 drivers/w1/mxc_w1.c                           |   1 +
 drivers/watchdog/armada-37xx-wdt.c            |   1 +
 drivers/watchdog/ast_wdt.c                    |   1 +
 drivers/watchdog/cdns_wdt.c                   |   2 +
 drivers/watchdog/sp805_wdt.c                  |   1 +
 drivers/watchdog/xilinx_tb_wdt.c              |   1 +
 fs/ext4/ext4_write.c                          |   1 +
 fs/ext4/ext4fs.c                              |   1 +
 fs/fat/fat_write.c                            |   1 +
 fs/sandbox/sandboxfs.c                        |   1 +
 fs/ubifs/debug.c                              |   1 +
 fs/ubifs/gc.c                                 |   1 +
 fs/ubifs/io.c                                 |   1 +
 fs/ubifs/log.c                                |   1 +
 fs/ubifs/lprops.c                             |   1 +
 fs/ubifs/lpt.c                                |   1 +
 fs/ubifs/lpt_commit.c                         |   1 +
 fs/ubifs/master.c                             |   1 +
 fs/ubifs/orphan.c                             |   1 +
 fs/ubifs/recovery.c                           |   1 +
 fs/ubifs/replay.c                             |   1 +
 fs/ubifs/sb.c                                 |   1 +
 fs/ubifs/scan.c                               |   1 +
 fs/ubifs/super.c                              |   1 +
 fs/ubifs/tnc.c                                |   1 +
 fs/ubifs/tnc_misc.c                           |   1 +
 fs/ubifs/ubifs.c                              |   2 +
 fs/yaffs2/yaffs_allocator.c                   |   1 +
 fs/yaffs2/yaffs_checkptrw.c                   |   1 +
 fs/yaffs2/yaffs_guts.c                        |   1 +
 fs/yaffs2/yaffs_nandif.c                      |   1 +
 fs/yaffs2/yaffs_summary.c                     |   1 +
 fs/yaffs2/yaffs_uboot_glue.c                  |   1 +
 fs/yaffs2/yaffs_yaffs1.c                      |   1 +
 fs/yaffs2/yaffs_yaffs2.c                      |   1 +
 fs/yaffs2/yaffsfs.c                           |   1 +
 include/asm-generic/gpio.h                    |   2 +-
 include/clk-uclass.h                          |   4 +-
 include/dm/device.h                           |  74 ----
 include/dm/device_compat.h                    |  86 +++++
 include/dm/devres.h                           |   4 +
 include/dma-uclass.h                          |   4 +-
 include/linux/clk-provider.h                  |   1 +
 include/linux/compat.h                        |   3 +
 include/linux/mtd/mtd.h                       |   4 +-
 include/linux/string.h                        |   7 +-
 include/mailbox-uclass.h                      |   4 +-
 include/malloc.h                              |  24 +-
 include/os.h                                  |  22 +-
 include/phy.h                                 |   1 +
 include/power-domain-uclass.h                 |   4 +-
 include/reset-uclass.h                        |   4 +-
 include/sound.h                               |  12 +
 lib/bch.c                                     |   2 +
 lib/binman.c                                  |   1 +
 lib/bzip2/bzlib.c                             |   1 +
 lib/crypto/asymmetric_type.c                  |   2 +
 lib/crypto/pkcs7_parser.c                     |   1 +
 lib/crypto/public_key.c                       |   2 +
 lib/crypto/rsa_helper.c                       |   1 +
 lib/crypto/x509_cert_parser.c                 |   1 +
 lib/crypto/x509_public_key.c                  |   2 +
 lib/efi/efi.c                                 |   1 +
 lib/efi/efi_app.c                             |   1 +
 lib/efi/efi_stub.c                            |   1 +
 lib/efi_driver/efi_block_device.c             |   1 +
 lib/efi_driver/efi_uclass.c                   |   1 +
 lib/efi_loader/efi_console.c                  |   1 +
 lib/efi_loader/efi_runtime.c                  |   1 +
 lib/fdtdec.c                                  |   1 +
 lib/libavb/avb_cmdline.c                      |   1 +
 lib/libavb/avb_descriptor.c                   |   1 +
 lib/libavb/avb_rsa.c                          |   1 +
 lib/libavb/avb_slot_verify.c                  |   1 +
 lib/libavb/avb_sysdeps_posix.c                |   1 +
 lib/libavb/avb_util.c                         |   1 +
 lib/linux_compat.c                            |   1 +
 lib/list_sort.c                               |   1 +
 lib/lmb.c                                     |   1 +
 lib/rsa/rsa-sign.c                            |   1 +
 lib/rsa/rsa-verify.c                          |   1 +
 lib/string.c                                  |   2 +-
 lib/zstd/decompress.c                         |   1 +
 lib/zstd/zstd_common.c                        |   1 +
 net/mdio-uclass.c                             |   3 +
 post/post.c                                   |   1 +
 test/dm/clk.c                                 |   1 +
 test/dm/devres.c                              |   1 +
 test/dm/dma.c                                 |   1 +
 test/dm/gpio.c                                |   1 +
 test/dm/mailbox.c                             |   1 +
 test/dm/power-domain.c                        |   1 +
 test/dm/regmap.c                              |   1 +
 test/dm/reset.c                               |   1 +
 test/dm/sound.c                               |   1 +
 test/dm/spmi.c                                |   1 +
 test/dm/syscon.c                              |   1 +
 test/dm/tee.c                                 |   1 +
 test/dm/test-fdt.c                            |   1 +
 test/dm/video.c                               |   1 +
 test/lib/lmb.c                                |   1 +
 test/unicode_ut.c                             |   1 +
 646 files changed, 1411 insertions(+), 399 deletions(-)
 create mode 100644 arch/sandbox/include/asm/malloc.h
 delete mode 100644 drivers/video/fonts/nimbus_sans_l_regular.ttf
 create mode 100644 drivers/video/fonts/roboto_regular.ttf
 create mode 100644 include/dm/device_compat.h

-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 01/33] sandbox: Sort the help options
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
                   ` (32 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

At present options are presented in essentially random order. It is easier
to browse them if they are sorted into alphabetical order. Adjust the
help function to handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/start.c | 46 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
index fff9cbdd79..d3ce61856e 100644
--- a/arch/sandbox/cpu/start.c
+++ b/arch/sandbox/cpu/start.c
@@ -9,13 +9,45 @@
 #include <os.h>
 #include <cli.h>
 #include <malloc.h>
+#include <sort.h>
 #include <asm/getopt.h>
 #include <asm/io.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)
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 02/33] video: Support truetype fonts on a 32-bit display
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
  2020-01-12 19:05 ` [PATCH 01/33] sandbox: Sort the help options Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 19:59   ` Anatolij Gustschin
  2020-01-12 19:05 ` [PATCH 03/33] video: sandbox: Enable all colour depths Simon Glass
                   ` (31 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

At present only a 16bpp display is supported for Truetype fonts. Add
support for 32bpp also since this is quite common.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/video/console_truetype.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
index 30086600fb..0a725c5c15 100644
--- a/drivers/video/console_truetype.c
+++ b/drivers/video/console_truetype.c
@@ -286,6 +286,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);
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 03/33] video: sandbox: Enable all colour depths
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
  2020-01-12 19:05 ` [PATCH 01/33] sandbox: Sort the help options Simon Glass
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 20:02   ` Anatolij Gustschin
  2020-01-12 19:05 ` [PATCH 04/33] mailbox: Rename free() to rfree() Simon Glass
                   ` (30 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

For sandbox we want to have the maximum possible build coverage, so enable
all colour depths for video.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 configs/sandbox64_defconfig        | 1 -
 configs/sandbox_defconfig          | 1 -
 configs/sandbox_flattree_defconfig | 1 -
 configs/sandbox_spl_defconfig      | 1 -
 drivers/video/Kconfig              | 4 +++-
 5 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 64d1d3102f..b5a38070a6 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -189,7 +189,6 @@ CONFIG_USB_EMUL=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_USB_KEYBOARD_FN_KEYS=y
 CONFIG_DM_VIDEO=y
-CONFIG_VIDEO_BPP16=y
 CONFIG_CONSOLE_ROTATION=y
 CONFIG_CONSOLE_TRUETYPE=y
 CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index d8d8645425..8532de9d79 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -210,7 +210,6 @@ CONFIG_USB_EMUL=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_USB_KEYBOARD_FN_KEYS=y
 CONFIG_DM_VIDEO=y
-CONFIG_VIDEO_BPP16=y
 CONFIG_CONSOLE_ROTATION=y
 CONFIG_CONSOLE_TRUETYPE=y
 CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 2a9161c53b..40a4b2a761 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -169,7 +169,6 @@ CONFIG_USB_EMUL=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_USB_KEYBOARD_FN_KEYS=y
 CONFIG_DM_VIDEO=y
-CONFIG_VIDEO_BPP16=y
 CONFIG_CONSOLE_ROTATION=y
 CONFIG_CONSOLE_TRUETYPE=y
 CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
index 138bb9896f..77c56747fb 100644
--- a/configs/sandbox_spl_defconfig
+++ b/configs/sandbox_spl_defconfig
@@ -188,7 +188,6 @@ CONFIG_USB_EMUL=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_USB_KEYBOARD_FN_KEYS=y
 CONFIG_DM_VIDEO=y
-CONFIG_VIDEO_BPP16=y
 CONFIG_CONSOLE_ROTATION=y
 CONFIG_CONSOLE_TRUETYPE=y
 CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 50ab3650ee..d7e62bea9c 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -38,6 +38,7 @@ config BACKLIGHT_GPIO
 config VIDEO_BPP8
 	bool "Support 8-bit-per-pixel displays"
 	depends on DM_VIDEO
+	default y if SANDBOX || X86
 	help
 	  Support drawing text and bitmaps onto a 8-bit-per-pixel display.
 	  Enabling this will include code to support this display. Without
@@ -47,6 +48,7 @@ config VIDEO_BPP8
 config VIDEO_BPP16
 	bool "Support 16-bit-per-pixel displays"
 	depends on DM_VIDEO
+	default y if SANDBOX || X86
 	help
 	  Support drawing text and bitmaps onto a 16-bit-per-pixel display.
 	  Enabling this will include code to support this display. Without
@@ -56,7 +58,7 @@ config VIDEO_BPP16
 config VIDEO_BPP32
 	bool "Support 32-bit-per-pixel displays"
 	depends on DM_VIDEO
-	default y if X86
+	default y if SANDBOX || X86
 	help
 	  Support drawing text and bitmaps onto a 32-bit-per-pixel display.
 	  Enabling this will include code to support this display. Without
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 04/33] mailbox: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (2 preceding siblings ...)
  2020-01-12 19:05 ` [PATCH 03/33] video: sandbox: Enable all colour depths Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 19:05   ` Simon Glass
                   ` (29 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/mailbox/k3-sec-proxy.c   | 2 +-
 drivers/mailbox/mailbox-uclass.c | 4 ++--
 drivers/mailbox/sandbox-mbox.c   | 2 +-
 drivers/mailbox/stm32-ipcc.c     | 2 +-
 drivers/mailbox/tegra-hsp.c      | 2 +-
 include/mailbox-uclass.h         | 4 ++--
 6 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/mailbox/k3-sec-proxy.c b/drivers/mailbox/k3-sec-proxy.c
index b07b56cf97..1194c6f029 100644
--- a/drivers/mailbox/k3-sec-proxy.c
+++ b/drivers/mailbox/k3-sec-proxy.c
@@ -291,7 +291,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..a6d2d1f5b8 100644
--- a/drivers/mailbox/mailbox-uclass.c
+++ b/drivers/mailbox/mailbox-uclass.c
@@ -105,8 +105,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.c b/drivers/mailbox/sandbox-mbox.c
index bc917b3de4..442ca633a1 100644
--- a/drivers/mailbox/sandbox-mbox.c
+++ b/drivers/mailbox/sandbox-mbox.c
@@ -87,7 +87,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..d4035a85f2 100644
--- a/drivers/mailbox/stm32-ipcc.c
+++ b/drivers/mailbox/stm32-ipcc.c
@@ -152,7 +152,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..c463e6a2be 100644
--- a/drivers/mailbox/tegra-hsp.c
+++ b/drivers/mailbox/tegra-hsp.c
@@ -175,7 +175,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/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
 	*
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 05/33] power-domain: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
@ 2020-01-12 19:05   ` Simon Glass
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
                     ` (32 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/power/domain/bcm6328-power-domain.c     | 2 +-
 drivers/power/domain/imx8-power-domain-legacy.c | 2 +-
 drivers/power/domain/imx8-power-domain.c        | 2 +-
 drivers/power/domain/imx8m-power-domain.c       | 2 +-
 drivers/power/domain/meson-ee-pwrc.c            | 2 +-
 drivers/power/domain/meson-gx-pwrc-vpu.c        | 2 +-
 drivers/power/domain/mtk-power-domain.c         | 2 +-
 drivers/power/domain/power-domain-uclass.c      | 2 +-
 drivers/power/domain/sandbox-power-domain.c     | 2 +-
 drivers/power/domain/tegra186-power-domain.c    | 2 +-
 drivers/power/domain/ti-sci-power-domain.c      | 2 +-
 include/power-domain-uclass.h                   | 4 ++--
 12 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/power/domain/bcm6328-power-domain.c b/drivers/power/domain/bcm6328-power-domain.c
index a90b2c83df..425451e4cd 100644
--- a/drivers/power/domain/bcm6328-power-domain.c
+++ b/drivers/power/domain/bcm6328-power-domain.c
@@ -62,7 +62,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..74fcb05c15 100644
--- a/drivers/power/domain/imx8-power-domain-legacy.c
+++ b/drivers/power/domain/imx8-power-domain-legacy.c
@@ -296,7 +296,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..8e328f02c2 100644
--- a/drivers/power/domain/imx8-power-domain.c
+++ b/drivers/power/domain/imx8-power-domain.c
@@ -73,7 +73,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..fbfd17718b 100644
--- a/drivers/power/domain/imx8m-power-domain.c
+++ b/drivers/power/domain/imx8m-power-domain.c
@@ -121,7 +121,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..7f5d13e872 100644
--- a/drivers/power/domain/meson-ee-pwrc.c
+++ b/drivers/power/domain/meson-ee-pwrc.c
@@ -352,7 +352,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..bd69aea8dd 100644
--- a/drivers/power/domain/meson-gx-pwrc-vpu.c
+++ b/drivers/power/domain/meson-gx-pwrc-vpu.c
@@ -269,7 +269,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 c67e8804b1..992ee51947 100644
--- a/drivers/power/domain/mtk-power-domain.c
+++ b/drivers/power/domain/mtk-power-domain.c
@@ -390,7 +390,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..be0a8026f6 100644
--- a/drivers/power/domain/power-domain-uclass.c
+++ b/drivers/power/domain/power-domain-uclass.c
@@ -87,7 +87,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.c b/drivers/power/domain/sandbox-power-domain.c
index 74db2eba7e..a5ae235d53 100644
--- a/drivers/power/domain/sandbox-power-domain.c
+++ b/drivers/power/domain/sandbox-power-domain.c
@@ -75,7 +75,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..d2a25ca333 100644
--- a/drivers/power/domain/tegra186-power-domain.c
+++ b/drivers/power/domain/tegra186-power-domain.c
@@ -71,7 +71,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..b59af2b13b 100644
--- a/drivers/power/domain/ti-sci-power-domain.c
+++ b/drivers/power/domain/ti-sci-power-domain.c
@@ -120,7 +120,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/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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 05/33] power-domain: Rename free() to rfree()
@ 2020-01-12 19:05   ` Simon Glass
  0 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Simon Glass, Anatolij Gustschin, GSS_MTK_Uboot_upstream,
	Jaehoon Chung, Lokesh Vutla, Neil Armstrong, Nishanth Menon,
	Patrick Wildt, Peng Fan, Ryder Lee, Weijie Gao, Ye Li,
	u-boot-amlogic

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/power/domain/bcm6328-power-domain.c     | 2 +-
 drivers/power/domain/imx8-power-domain-legacy.c | 2 +-
 drivers/power/domain/imx8-power-domain.c        | 2 +-
 drivers/power/domain/imx8m-power-domain.c       | 2 +-
 drivers/power/domain/meson-ee-pwrc.c            | 2 +-
 drivers/power/domain/meson-gx-pwrc-vpu.c        | 2 +-
 drivers/power/domain/mtk-power-domain.c         | 2 +-
 drivers/power/domain/power-domain-uclass.c      | 2 +-
 drivers/power/domain/sandbox-power-domain.c     | 2 +-
 drivers/power/domain/tegra186-power-domain.c    | 2 +-
 drivers/power/domain/ti-sci-power-domain.c      | 2 +-
 include/power-domain-uclass.h                   | 4 ++--
 12 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/power/domain/bcm6328-power-domain.c b/drivers/power/domain/bcm6328-power-domain.c
index a90b2c83df..425451e4cd 100644
--- a/drivers/power/domain/bcm6328-power-domain.c
+++ b/drivers/power/domain/bcm6328-power-domain.c
@@ -62,7 +62,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..74fcb05c15 100644
--- a/drivers/power/domain/imx8-power-domain-legacy.c
+++ b/drivers/power/domain/imx8-power-domain-legacy.c
@@ -296,7 +296,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..8e328f02c2 100644
--- a/drivers/power/domain/imx8-power-domain.c
+++ b/drivers/power/domain/imx8-power-domain.c
@@ -73,7 +73,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..fbfd17718b 100644
--- a/drivers/power/domain/imx8m-power-domain.c
+++ b/drivers/power/domain/imx8m-power-domain.c
@@ -121,7 +121,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..7f5d13e872 100644
--- a/drivers/power/domain/meson-ee-pwrc.c
+++ b/drivers/power/domain/meson-ee-pwrc.c
@@ -352,7 +352,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..bd69aea8dd 100644
--- a/drivers/power/domain/meson-gx-pwrc-vpu.c
+++ b/drivers/power/domain/meson-gx-pwrc-vpu.c
@@ -269,7 +269,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 c67e8804b1..992ee51947 100644
--- a/drivers/power/domain/mtk-power-domain.c
+++ b/drivers/power/domain/mtk-power-domain.c
@@ -390,7 +390,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..be0a8026f6 100644
--- a/drivers/power/domain/power-domain-uclass.c
+++ b/drivers/power/domain/power-domain-uclass.c
@@ -87,7 +87,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.c b/drivers/power/domain/sandbox-power-domain.c
index 74db2eba7e..a5ae235d53 100644
--- a/drivers/power/domain/sandbox-power-domain.c
+++ b/drivers/power/domain/sandbox-power-domain.c
@@ -75,7 +75,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..d2a25ca333 100644
--- a/drivers/power/domain/tegra186-power-domain.c
+++ b/drivers/power/domain/tegra186-power-domain.c
@@ -71,7 +71,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..b59af2b13b 100644
--- a/drivers/power/domain/ti-sci-power-domain.c
+++ b/drivers/power/domain/ti-sci-power-domain.c
@@ -120,7 +120,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/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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog


^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 06/33] reset: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
@ 2020-01-12 19:05   ` Simon Glass
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
                     ` (32 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/reset/reset-bcm6345.c   | 2 +-
 drivers/reset/reset-hisilicon.c | 2 +-
 drivers/reset/reset-hsdk.c      | 2 +-
 drivers/reset/reset-imx7.c      | 2 +-
 drivers/reset/reset-mediatek.c  | 2 +-
 drivers/reset/reset-meson.c     | 2 +-
 drivers/reset/reset-mtmips.c    | 2 +-
 drivers/reset/reset-rockchip.c  | 2 +-
 drivers/reset/reset-socfpga.c   | 2 +-
 drivers/reset/reset-sunxi.c     | 2 +-
 drivers/reset/reset-ti-sci.c    | 2 +-
 drivers/reset/reset-uclass.c    | 2 +-
 drivers/reset/reset-uniphier.c  | 2 +-
 drivers/reset/sandbox-reset.c   | 2 +-
 drivers/reset/sti-reset.c       | 2 +-
 drivers/reset/stm32-reset.c     | 2 +-
 drivers/reset/tegra-car-reset.c | 2 +-
 drivers/reset/tegra186-reset.c  | 2 +-
 include/reset-uclass.h          | 4 ++--
 19 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c
index 753c1108a9..bbaaea9bb3 100644
--- a/drivers/reset/reset-bcm6345.c
+++ b/drivers/reset/reset-bcm6345.c
@@ -52,7 +52,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..d449e3d25e 100644
--- a/drivers/reset/reset-hisilicon.c
+++ b/drivers/reset/reset-hisilicon.c
@@ -72,7 +72,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..a2bad65a3b 100644
--- a/drivers/reset/reset-imx7.c
+++ b/drivers/reset/reset-imx7.c
@@ -272,7 +272,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..cfbf2af863 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -55,7 +55,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..9026e034c3 100644
--- a/drivers/reset/reset-meson.c
+++ b/drivers/reset/reset-meson.c
@@ -62,7 +62,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..71254a93dd 100644
--- a/drivers/reset/reset-mtmips.c
+++ b/drivers/reset/reset-mtmips.c
@@ -45,7 +45,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..4fb9571b18 100644
--- a/drivers/reset/reset-rockchip.c
+++ b/drivers/reset/reset-rockchip.c
@@ -76,7 +76,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 93ec9cfdb6..98524eb2b7 100644
--- a/drivers/reset/reset-socfpga.c
+++ b/drivers/reset/reset-socfpga.c
@@ -101,7 +101,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..1c717b20c3 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
@@ -81,7 +81,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..7b6f736f5e 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -190,7 +190,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..bf1cba4124 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -164,7 +164,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..97f7b0ed5f 100644
--- a/drivers/reset/reset-uniphier.c
+++ b/drivers/reset/reset-uniphier.c
@@ -234,7 +234,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.c b/drivers/reset/sandbox-reset.c
index 40f2654d8e..c03fce3531 100644
--- a/drivers/reset/sandbox-reset.c
+++ b/drivers/reset/sandbox-reset.c
@@ -79,7 +79,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..614da9da59 100644
--- a/drivers/reset/sti-reset.c
+++ b/drivers/reset/sti-reset.c
@@ -298,7 +298,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..4d7745abce 100644
--- a/drivers/reset/stm32-reset.c
+++ b/drivers/reset/stm32-reset.c
@@ -64,7 +64,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..886ea04e2e 100644
--- a/drivers/reset/tegra-car-reset.c
+++ b/drivers/reset/tegra-car-reset.c
@@ -51,7 +51,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..84ed77b96f 100644
--- a/drivers/reset/tegra186-reset.c
+++ b/drivers/reset/tegra186-reset.c
@@ -60,7 +60,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/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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 06/33] reset: Rename free() to rfree()
@ 2020-01-12 19:05   ` Simon Glass
  0 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Simon Glass, Eugeniy Paltsev, Fabio Estevam,
	GSS_MTK_Uboot_upstream, Jagan Teki, Joe Hershberger, Kever Yang,
	Masahiro Yamada, Maxime Ripard, Neil Armstrong, Patrice Chotard,
	Patrick Delaunay, Patrick Wildt, Philipp Tomsich, Ryder Lee,
	Shawn Guo, Simon Goldschmidt, Weijie Gao, u-boot-amlogic,
	uboot-snps-arc, uboot-stm32

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/reset/reset-bcm6345.c   | 2 +-
 drivers/reset/reset-hisilicon.c | 2 +-
 drivers/reset/reset-hsdk.c      | 2 +-
 drivers/reset/reset-imx7.c      | 2 +-
 drivers/reset/reset-mediatek.c  | 2 +-
 drivers/reset/reset-meson.c     | 2 +-
 drivers/reset/reset-mtmips.c    | 2 +-
 drivers/reset/reset-rockchip.c  | 2 +-
 drivers/reset/reset-socfpga.c   | 2 +-
 drivers/reset/reset-sunxi.c     | 2 +-
 drivers/reset/reset-ti-sci.c    | 2 +-
 drivers/reset/reset-uclass.c    | 2 +-
 drivers/reset/reset-uniphier.c  | 2 +-
 drivers/reset/sandbox-reset.c   | 2 +-
 drivers/reset/sti-reset.c       | 2 +-
 drivers/reset/stm32-reset.c     | 2 +-
 drivers/reset/tegra-car-reset.c | 2 +-
 drivers/reset/tegra186-reset.c  | 2 +-
 include/reset-uclass.h          | 4 ++--
 19 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c
index 753c1108a9..bbaaea9bb3 100644
--- a/drivers/reset/reset-bcm6345.c
+++ b/drivers/reset/reset-bcm6345.c
@@ -52,7 +52,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..d449e3d25e 100644
--- a/drivers/reset/reset-hisilicon.c
+++ b/drivers/reset/reset-hisilicon.c
@@ -72,7 +72,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..a2bad65a3b 100644
--- a/drivers/reset/reset-imx7.c
+++ b/drivers/reset/reset-imx7.c
@@ -272,7 +272,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..cfbf2af863 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -55,7 +55,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..9026e034c3 100644
--- a/drivers/reset/reset-meson.c
+++ b/drivers/reset/reset-meson.c
@@ -62,7 +62,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..71254a93dd 100644
--- a/drivers/reset/reset-mtmips.c
+++ b/drivers/reset/reset-mtmips.c
@@ -45,7 +45,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..4fb9571b18 100644
--- a/drivers/reset/reset-rockchip.c
+++ b/drivers/reset/reset-rockchip.c
@@ -76,7 +76,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 93ec9cfdb6..98524eb2b7 100644
--- a/drivers/reset/reset-socfpga.c
+++ b/drivers/reset/reset-socfpga.c
@@ -101,7 +101,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..1c717b20c3 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
@@ -81,7 +81,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..7b6f736f5e 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -190,7 +190,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..bf1cba4124 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -164,7 +164,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..97f7b0ed5f 100644
--- a/drivers/reset/reset-uniphier.c
+++ b/drivers/reset/reset-uniphier.c
@@ -234,7 +234,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.c b/drivers/reset/sandbox-reset.c
index 40f2654d8e..c03fce3531 100644
--- a/drivers/reset/sandbox-reset.c
+++ b/drivers/reset/sandbox-reset.c
@@ -79,7 +79,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..614da9da59 100644
--- a/drivers/reset/sti-reset.c
+++ b/drivers/reset/sti-reset.c
@@ -298,7 +298,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..4d7745abce 100644
--- a/drivers/reset/stm32-reset.c
+++ b/drivers/reset/stm32-reset.c
@@ -64,7 +64,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..886ea04e2e 100644
--- a/drivers/reset/tegra-car-reset.c
+++ b/drivers/reset/tegra-car-reset.c
@@ -51,7 +51,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..84ed77b96f 100644
--- a/drivers/reset/tegra186-reset.c
+++ b/drivers/reset/tegra186-reset.c
@@ -60,7 +60,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/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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog


^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 07/33] gpio: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (5 preceding siblings ...)
  2020-01-12 19:05   ` Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 19:05 ` [PATCH 08/33] clk: " Simon Glass
                   ` (26 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/gpio/gpio-rcar.c   | 2 +-
 drivers/gpio/gpio-uclass.c | 4 ++--
 include/asm-generic/gpio.h | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
index 594e0a470a..a8c5b7f879 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
@@ -128,7 +128,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..4c155fceb5 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;
 	}
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);
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 08/33] clk: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (6 preceding siblings ...)
  2020-01-12 19:05 ` [PATCH 07/33] gpio: " Simon Glass
@ 2020-01-12 19:05 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 09/33] dma: " Simon Glass
                   ` (25 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:05 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/clk/clk-ti-sci.c          | 2 +-
 drivers/clk/clk-uclass.c          | 4 ++--
 drivers/clk/clk_sandbox.c         | 2 +-
 drivers/clk/tegra/tegra-car-clk.c | 2 +-
 include/clk-uclass.h              | 4 ++--
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/clk/clk-ti-sci.c b/drivers/clk/clk-ti-sci.c
index 478349f22f..5ef9035ece 100644
--- a/drivers/clk/clk-ti-sci.c
+++ b/drivers/clk/clk-ti-sci.c
@@ -204,7 +204,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 9aa8537004..7ac580d661 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -395,10 +395,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_sandbox.c b/drivers/clk/clk_sandbox.c
index de6b2f7c82..cc084b0644 100644
--- a/drivers/clk/clk_sandbox.c
+++ b/drivers/clk/clk_sandbox.c
@@ -107,7 +107,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/tegra/tegra-car-clk.c b/drivers/clk/tegra/tegra-car-clk.c
index 98be7602b3..07e8734b3a 100644
--- a/drivers/clk/tegra/tegra-car-clk.c
+++ b/drivers/clk/tegra/tegra-car-clk.c
@@ -80,7 +80,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/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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 09/33] dma: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (7 preceding siblings ...)
  2020-01-12 19:05 ` [PATCH 08/33] clk: " Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-13  7:41   ` Peter Ujfalusi
  2020-01-12 19:06 ` [PATCH 10/33] mtd: " Simon Glass
                   ` (24 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/dma/dma-uclass.c       | 4 ++--
 drivers/dma/sandbox-dma-test.c | 2 +-
 drivers/dma/ti/k3-udma.c       | 2 +-
 include/dma-uclass.h           | 4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/dma/dma-uclass.c b/drivers/dma/dma-uclass.c
index 5598bca21c..a0159d7888 100644
--- a/drivers/dma/dma-uclass.c
+++ b/drivers/dma/dma-uclass.c
@@ -122,10 +122,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..5aa7838ff5 100644
--- a/drivers/dma/sandbox-dma-test.c
+++ b/drivers/dma/sandbox-dma-test.c
@@ -229,7 +229,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_free,
 	.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 f7128610c5..23d6ed0697 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -1720,7 +1720,7 @@ static const struct dma_ops udma_ops = {
 	.transfer	= udma_transfer,
 	.of_xlate	= udma_of_xlate,
 	.request	= udma_request,
-	.free		= udma_free,
+	.rfree		= udma_free,
 	.enable		= udma_enable,
 	.disable	= udma_disable,
 	.send		= udma_send,
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.
 	 *
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 10/33] mtd: Rename free() to rfree()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (8 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 09/33] dma: " Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-02-12 13:13   ` Masahiro Yamada
  2020-01-12 19:06 ` [PATCH 11/33] sandbox: Rename 'free' variable Simon Glass
                   ` (23 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

This function name conflicts with our desire to #define free() to
something else on sandbox. Since it deals with resources, rename it to
rfree().

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/mtd/mtdcore.c             | 4 ++--
 drivers/mtd/nand/raw/denali.c     | 2 +-
 drivers/mtd/nand/spi/core.c       | 2 +-
 drivers/mtd/nand/spi/gigadevice.c | 2 +-
 drivers/mtd/nand/spi/macronix.c   | 2 +-
 drivers/mtd/nand/spi/micron.c     | 2 +-
 drivers/mtd/nand/spi/winbond.c    | 2 +-
 include/linux/mtd/mtd.h           | 4 ++--
 8 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index dd04d676d5..838c288318 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -1179,10 +1179,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/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
index 0a7ca8a8df..f0b528485c 100644
--- a/drivers/mtd/nand/raw/denali.c
+++ b/drivers/mtd/nand/raw/denali.c
@@ -1178,7 +1178,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/spi/core.c b/drivers/mtd/nand/spi/core.c
index cb8ffa3fa9..fba8cc056a 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -1021,7 +1021,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..e329c3cfc0 100644
--- a/drivers/mtd/nand/spi/gigadevice.c
+++ b/drivers/mtd/nand/spi/gigadevice.c
@@ -103,7 +103,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..1119677f6f 100644
--- a/drivers/mtd/nand/spi/macronix.c
+++ b/drivers/mtd/nand/spi/macronix.c
@@ -47,7 +47,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..9c24542f96 100644
--- a/drivers/mtd/nand/spi/micron.c
+++ b/drivers/mtd/nand/spi/micron.c
@@ -63,7 +63,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 eac811d97c..f3446e71b9 100644
--- a/drivers/mtd/nand/spi/winbond.c
+++ b/drivers/mtd/nand/spi/winbond.c
@@ -59,7 +59,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/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);
 };
 
 /*
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 11/33] sandbox: Rename 'free' variable
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (9 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 10/33] mtd: " Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 12/33] sandbox: Use a prefix for all allocation functions Simon Glass
                   ` (22 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

This name conflicts with our desire to #define free() to something else on
sandbox. Rename it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/state.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c
index cd46e000f5..ef2e63f37a 100644
--- a/arch/sandbox/cpu/state.c
+++ b/arch/sandbox/cpu/state.c
@@ -16,14 +16,14 @@ 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;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 12/33] sandbox: Use a prefix for all allocation functions
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (10 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 11/33] sandbox: Rename 'free' variable Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 13/33] exports: Add the malloc.h header Simon Glass
                   ` (21 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

In order to allow use of both U-Boot's malloc() and the C library's
version, set a prefix for the allocation functions so that they can
co-exist.

This is only done for sandbox. For other archs everything remains the
same.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/malloc.h | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

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
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 13/33] exports: Add the malloc.h header
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (11 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 12/33] sandbox: Use a prefix for all allocation functions Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 14/33] string: Allow arch override of strndup() also Simon Glass
                   ` (20 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

This file should include the malloc.h header since it references malloc().
Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 common/exports.c | 1 +
 1 file changed, 1 insertion(+)

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>
 
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 14/33] string: Allow arch override of strndup() also
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (12 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 13/33] exports: Add the malloc.h header Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 15/33] sandbox: Rename strdup() functions Simon Glass
                   ` (19 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present architectures can override strdup() but not strndup(). Use
the same option for both.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/linux/string.h | 2 +-
 lib/string.c           | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/string.h b/include/linux/string.h
index 5d63be4ce5..bb1d5ab07e 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -93,8 +93,8 @@ size_t strcspn(const char *s, const char *reject);
 
 #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/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
 /**
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 15/33] sandbox: Rename strdup() functions
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (13 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 14/33] string: Allow arch override of strndup() also Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 16/33] sandbox: Drop use of special os_malloc() where possible Simon Glass
                   ` (18 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

These functions include calls to a memory-allocation routine and so need
to use the system routine when called from a library.

To preserve access to these functions for libraries that need it, such as
SDL, rename these functions within U-Boot.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/linux/string.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/linux/string.h b/include/linux/string.h
index bb1d5ab07e..d67998e5c4 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -91,6 +91,11 @@ 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 *);
 extern char * strndup(const char *, size_t);
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 16/33] sandbox: Drop use of special os_malloc() where possible
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (14 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 15/33] sandbox: Rename strdup() functions Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 17/33] sandbox: Drop os_realloc() Simon Glass
                   ` (17 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Some sandbox files are not built with U-Boot headers, so with the renamed
malloc functions there is now no need to use the special os_... allocation
functions to access the system routines. Instead we can just call them
directly.

Update the affected files accordingly.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/eth-raw-os.c |  6 +++---
 arch/sandbox/cpu/os.c         | 24 ++++++++++++------------
 2 files changed, 15 insertions(+), 15 deletions(-)

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..d5e5b561b6 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;
@@ -306,8 +306,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);
 	if (!short_opts || !long_opts)
 		return 1;
 
@@ -385,7 +385,7 @@ void os_dirent_free(struct os_dirent_node *node)
 
 	while (node) {
 		next = node->next;
-		os_free(node);
+		free(node);
 		node = next;
 	}
 }
@@ -410,7 +410,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 +423,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 +432,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 +469,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 +586,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 +669,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);
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 17/33] sandbox: Drop os_realloc()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (15 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 16/33] sandbox: Drop use of special os_malloc() where possible Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 18/33] sandbox: Ensure that long-options array is terminated Simon Glass
                   ` (16 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Due to recent changes this function is no-longer used. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/os.c | 23 -----------------------
 include/os.h          | 22 +---------------------
 2 files changed, 1 insertion(+), 44 deletions(-)

diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index d5e5b561b6..60011f7abc 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -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);
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.
  *
@@ -127,26 +127,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
  *
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 18/33] sandbox: Ensure that long-options array is terminated
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (16 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 17/33] sandbox: Drop os_realloc() Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 19/33] sandbox: Add a new header for the system malloc() Simon Glass
                   ` (15 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

The last member of this array is supposed to be all zeroes according to
the getopt_long() man page. Fix the function to do this.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/os.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index 60011f7abc..f7c73e3a0b 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -284,7 +284,7 @@ int os_parse_args(struct sandbox_state *state, int argc, char *argv[])
 
 	/* dynamically construct the arguments to the system getopt_long */
 	short_opts = malloc(sizeof(*short_opts) * num_options * 2 + 1);
-	long_opts = malloc(sizeof(*long_opts) * num_options);
+	long_opts = malloc(sizeof(*long_opts) * (num_options + 1));
 	if (!short_opts || !long_opts)
 		return 1;
 
@@ -314,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
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 19/33] sandbox: Add a new header for the system malloc()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (17 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 18/33] sandbox: Ensure that long-options array is terminated Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 20/33] sound: Add a new stop_play() method Simon Glass
                   ` (14 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Some files use U-Boot headers but still need to access the system
malloc(). Allow this by creating a new asm/malloc.h which can be used so
long as U-Boot's malloc.h has not been included.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/start.c          |  6 +++---
 arch/sandbox/cpu/state.c          | 17 +++++++++--------
 arch/sandbox/include/asm/malloc.h | 26 ++++++++++++++++++++++++++
 3 files changed, 38 insertions(+), 11 deletions(-)
 create mode 100644 arch/sandbox/include/asm/malloc.h

diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
index d3ce61856e..fa53428436 100644
--- a/arch/sandbox/cpu/start.c
+++ b/arch/sandbox/cpu/start.c
@@ -8,10 +8,10 @@
 #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>
@@ -181,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]);
@@ -201,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]);
diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c
index ef2e63f37a..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 */
@@ -27,17 +28,17 @@ static int state_ensure_space(int 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/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
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 20/33] sound: Add a new stop_play() method
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (18 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 19/33] sandbox: Add a new header for the system malloc() Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 21/33] sandbox: sound: Handle errors better in sound_beep() Simon Glass
                   ` (13 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present there is no positive indication that U-Boot has finished
sending sound data. This means that it is not possible to power down an
audio codec, for example. Add a new method that is called once all sound
data has been sent.

Add a new method for this, called when the sound_play() call is done.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/include/asm/test.h |  7 +++++++
 drivers/sound/sandbox.c         | 21 ++++++++++++++++++++-
 drivers/sound/sound-uclass.c    | 11 +++++++++++
 include/sound.h                 | 12 ++++++++++++
 test/dm/sound.c                 |  1 +
 5 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/include/asm/test.h b/arch/sandbox/include/asm/test.h
index 2421922c9e..92ff494453 100644
--- a/arch/sandbox/include/asm/test.h
+++ b/arch/sandbox/include/asm/test.h
@@ -165,6 +165,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
  *
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..c213472d60 100644
--- a/drivers/sound/sound-uclass.c
+++ b/drivers/sound/sound-uclass.c
@@ -31,6 +31,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);
@@ -97,6 +107,7 @@ int sound_beep(struct udevice *dev, int msecs, int frequency_hz)
 
 		ret = sound_play(dev, data, size);
 	}
+	sound_stop_play(dev);
 
 	free(data);
 
diff --git a/include/sound.h b/include/sound.h
index 47de9fa3ed..71bd850652 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -68,6 +68,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)
 	 *
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;
 }
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 21/33] sandbox: sound: Handle errors better in sound_beep()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (19 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 20/33] sound: Add a new stop_play() method Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 22/33] sandbox: Add comments to the sdl struct Simon Glass
                   ` (12 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present an error does not stop the sound-output loop. This is incorrect
since nothing can be gained by trying to continue. Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/sound/sound-uclass.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/sound/sound-uclass.c b/drivers/sound/sound-uclass.c
index c213472d60..bada0c2ba5 100644
--- a/drivers/sound/sound-uclass.c
+++ b/drivers/sound/sound-uclass.c
@@ -97,11 +97,14 @@ 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);
 
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 22/33] sandbox: Add comments to the sdl struct
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (20 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 21/33] sandbox: sound: Handle errors better in sound_beep() Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 23/33] sandbox: sdl: Improve error handling Simon Glass
                   ` (11 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Add comments for each struct member. Drop frequency since it is not used.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/sdl.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index 080c7c8d74..dad059f257 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -24,13 +24,28 @@ struct buf_info {
 	uint8_t *data;
 };
 
+/**
+ * struct sdl_info - Information about our use of the SDL library
+ *
+ * @screen: Surface used to draw on the screen
+ * @width: Width of simulated LCD display
+ * @height: Height of simulated LCD display
+ * @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
+ */
 static struct sdl_info {
 	SDL_Surface *screen;
 	int width;
 	int height;
 	int depth;
 	int pitch;
-	uint frequency;
 	uint sample_rate;
 	bool audio_active;
 	bool inited;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 23/33] sandbox: sdl: Improve error handling
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (21 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 22/33] sandbox: Add comments to the sdl struct Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 24/33] sandbox: sdl: Support waiting for audio to complete Simon Glass
                   ` (10 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

A few errors are not checked. Fix these and use my preferred spelling for
init.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/sdl.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index dad059f257..ee62da265b 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -77,7 +77,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;
 		}
@@ -100,7 +100,7 @@ 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");
@@ -298,7 +298,7 @@ void sandbox_sdl_fill_audio(void *udata, Uint8 *stream, int len)
 
 int sandbox_sdl_sound_init(int rate, int channels)
 {
-	SDL_AudioSpec wanted;
+	SDL_AudioSpec wanted, have;
 	int i;
 
 	if (sandbox_sdl_ensure_init())
@@ -331,15 +331,19 @@ 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;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 24/33] sandbox: sdl: Support waiting for audio to complete
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (22 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 23/33] sandbox: sdl: Improve error handling Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 25/33] gitlab: Disable SDL when building sandbox Simon Glass
                   ` (9 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present when audio stops, any in-progress output is cut off. Fix this
by waiting for output to finish.

Also use booleans for the boolean variables.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/sdl.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index ee62da265b..dedf00ed35 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -5,6 +5,7 @@
 
 #include <errno.h>
 #include <unistd.h>
+#include <stdbool.h>
 #include <linux/input.h>
 #include <SDL.h>
 #include <asm/state.h>
@@ -39,6 +40,7 @@ struct buf_info {
  * @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
  */
 static struct sdl_info {
 	SDL_Surface *screen;
@@ -52,6 +54,7 @@ static struct sdl_info {
 	int cur_buf;
 	struct buf_info buf[2];
 	bool running;
+	bool stopping;
 } sdl;
 
 static void sandbox_sdl_poll_events(void)
@@ -271,6 +274,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++) {
@@ -282,6 +286,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);
@@ -294,6 +299,7 @@ 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)
@@ -347,7 +353,7 @@ int sandbox_sdl_sound_init(int rate, int channels)
 	sdl.audio_active = true;
 	sdl.sample_rate = wanted.freq;
 	sdl.cur_buf = 0;
-	sdl.running = 0;
+	sdl.running = false;
 
 	return 0;
 
@@ -378,7 +384,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;
@@ -387,8 +394,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;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 25/33] gitlab: Disable SDL when building sandbox
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (23 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 24/33] sandbox: sdl: Support waiting for audio to complete Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 26/33] sandbox: sdl: Move to use SDL2 Simon Glass
                   ` (8 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

I am not sure how to add libsdl2-dev to the gitlab image, so disable
building sandbox with SDL for now.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 .gitlab-ci.yml | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d799cc30a8..5fb2113987 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -32,7 +32,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;
@@ -164,7 +165,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;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 26/33] sandbox: sdl: Move to use SDL2
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (24 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 25/33] gitlab: Disable SDL when building sandbox Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 27/33] sandbox: sdl: Add an option to double the screen size Simon Glass
                   ` (7 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Sandbox currently uses SDL1.2. SDL2 has been around for quite a while and
is widely supported. It has a number of useful features. It seems
appropriate to move sandbox over.

Update the code to use SDL2 instead of SDL1.2.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 .travis.yml            |   2 +-
 arch/sandbox/config.mk |   2 +-
 arch/sandbox/cpu/sdl.c | 279 +++++++++++++++++++++++------------------
 doc/arch/sandbox.rst   |   2 +-
 4 files changed, 158 insertions(+), 127 deletions(-)

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/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/sdl.c b/arch/sandbox/cpu/sdl.c
index dedf00ed35..58a9cc8168 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -7,7 +7,7 @@
 #include <unistd.h>
 #include <stdbool.h>
 #include <linux/input.h>
-#include <SDL.h>
+#include <SDL2/SDL.h>
 #include <asm/state.h>
 
 /**
@@ -28,7 +28,6 @@ struct buf_info {
 /**
  * struct sdl_info - Information about our use of the SDL library
  *
- * @screen: Surface used to draw on the screen
  * @width: Width of simulated LCD display
  * @height: Height of simulated LCD display
  * @depth: Depth of the display in bits per pixel (16 or 32)
@@ -41,9 +40,10 @@ struct buf_info {
  *	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 depth;
@@ -55,6 +55,8 @@ static struct sdl_info {
 	struct buf_info buf[2];
 	bool running;
 	bool stopping;
+	SDL_Texture *texture;
+	SDL_Renderer *renderer;
 } sdl;
 
 static void sandbox_sdl_poll_events(void)
@@ -106,13 +108,41 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp)
 		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;
 	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.width, sdl.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;
@@ -120,136 +150,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;
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::
 
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 27/33] sandbox: sdl: Add an option to double the screen size
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (25 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 26/33] sandbox: sdl: Move to use SDL2 Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 20:11   ` Anatolij Gustschin
  2020-01-12 19:06 ` [PATCH 28/33] sandbox: Support changing the LCD colour depth Simon Glass
                   ` (6 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

On high-DPI displays U-Boot's LCD window can look very small. Add a
-K flag to expand it to make things easier to read, while still using
the existing resolution internally.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/cpu/sdl.c           | 17 +++++++++++++++--
 arch/sandbox/cpu/start.c         | 10 ++++++++++
 arch/sandbox/include/asm/sdl.h   |  9 ++++++---
 arch/sandbox/include/asm/state.h |  1 +
 drivers/video/sandbox_sdl.c      |  5 ++++-
 5 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index 58a9cc8168..6416cab96c 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -30,6 +30,8 @@ struct buf_info {
  *
  * @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
@@ -46,6 +48,8 @@ struct buf_info {
 static struct sdl_info {
 	int width;
 	int height;
+	int vis_width;
+	int vis_height;
 	int depth;
 	int pitch;
 	uint sample_rate;
@@ -94,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;
@@ -110,11 +115,19 @@ int sandbox_sdl_init_display(int width, int height, int log2_bpp)
 	}
 	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_Window *screen = SDL_CreateWindow("U-Boot", SDL_WINDOWPOS_UNDEFINED,
 					      SDL_WINDOWPOS_UNDEFINED,
-					      sdl.width, sdl.height, 0);
+					      sdl.vis_width, sdl.vis_height, 0);
 	if (!screen) {
 		printf("Unable to initialise SDL screen: %s\n",
 		       SDL_GetError());
diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
index fa53428436..3655ebf157 100644
--- a/arch/sandbox/cpu/start.c
+++ b/arch/sandbox/cpu/start.c
@@ -308,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",
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/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c
index 913651c565..d1272d0918 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;
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 28/33] sandbox: Support changing the LCD colour depth
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (26 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 27/33] sandbox: sdl: Add an option to double the screen size Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 20:15   ` Anatolij Gustschin
  2020-01-12 19:06   ` Simon Glass
                   ` (5 subsequent siblings)
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Add a new device-tree property to control the colour depth. At present we
support 16bpp and 32bpp.

While we are here, update the code to use livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/sandbox/dts/sandbox.dtsi                 | 1 +
 doc/device-tree-bindings/video/sandbox-fb.txt | 6 +++++-
 drivers/video/sandbox_sdl.c                   | 8 +++-----
 3 files changed, 9 insertions(+), 6 deletions(-)

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/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/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c
index d1272d0918..1196e6c671 100644
--- a/drivers/video/sandbox_sdl.c
+++ b/drivers/video/sandbox_sdl.c
@@ -47,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);
 
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 29/33] dm: core: Require users of devres to include the header
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
@ 2020-01-12 19:06   ` Simon Glass
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
                     ` (32 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present devres.h is included in all files that include dm.h but few
make use of it. Also this pulls in linux/compat which adds several more
headers. Drop the automatic inclusion and require files to include devres
themselves. This provides a good indication of which files use devres.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/arm/mach-aspeed/ast2500/clk_ast2500.c      | 1 +
 arch/arm/mach-imx/cmd_nandbcb.c                 | 1 +
 arch/arm/mach-meson/board-info.c                | 1 +
 arch/arm/mach-meson/sm.c                        | 1 +
 arch/arm/mach-rockchip/px30/clk_px30.c          | 1 +
 arch/arm/mach-rockchip/rk3036/clk_rk3036.c      | 1 +
 arch/arm/mach-rockchip/rk3128/clk_rk3128.c      | 1 +
 arch/arm/mach-rockchip/rk3188/clk_rk3188.c      | 1 +
 arch/arm/mach-rockchip/rk3188/rk3188.c          | 1 +
 arch/arm/mach-rockchip/rk322x/clk_rk322x.c      | 1 +
 arch/arm/mach-rockchip/rk3288/clk_rk3288.c      | 1 +
 arch/arm/mach-rockchip/rk3288/rk3288.c          | 1 +
 arch/arm/mach-rockchip/rk3308/clk_rk3308.c      | 1 +
 arch/arm/mach-rockchip/rk3328/clk_rk3328.c      | 1 +
 arch/arm/mach-rockchip/rk3368/clk_rk3368.c      | 1 +
 arch/arm/mach-rockchip/rk3399/clk_rk3399.c      | 1 +
 arch/arm/mach-rockchip/rv1108/clk_rv1108.c      | 1 +
 arch/arm/mach-stm32mp/pwr_regulator.c           | 1 +
 arch/riscv/lib/andes_plic.c                     | 1 +
 arch/riscv/lib/andes_plmt.c                     | 1 +
 arch/riscv/lib/sifive_clint.c                   | 1 +
 board/google/veyron/veyron.c                    | 1 +
 board/st/stm32mp1/stm32mp1.c                    | 1 +
 cmd/gpio.c                                      | 1 +
 cmd/gpt.c                                       | 1 +
 cmd/mtd.c                                       | 2 ++
 cmd/ubi.c                                       | 1 +
 drivers/adc/rockchip-saradc.c                   | 1 +
 drivers/block/blk-uclass.c                      | 1 +
 drivers/clk/altera/clk-arria10.c                | 1 +
 drivers/clk/aspeed/clk_ast2500.c                | 1 +
 drivers/clk/at91/clk-generated.c                | 1 +
 drivers/clk/at91/clk-usb.c                      | 1 +
 drivers/clk/clk-composite.c                     | 2 ++
 drivers/clk/clk-divider.c                       | 2 ++
 drivers/clk/clk-fixed-factor.c                  | 2 ++
 drivers/clk/clk-gate.c                          | 2 ++
 drivers/clk/clk-mux.c                           | 2 ++
 drivers/clk/clk-ti-sci.c                        | 1 +
 drivers/clk/clk-uclass.c                        | 4 +++-
 drivers/clk/clk_fixed_factor.c                  | 1 +
 drivers/clk/clk_sandbox_ccf.c                   | 2 ++
 drivers/clk/clk_sandbox_test.c                  | 1 +
 drivers/clk/clk_versal.c                        | 1 +
 drivers/clk/clk_zynqmp.c                        | 1 +
 drivers/clk/imx/clk-composite-8m.c              | 2 ++
 drivers/clk/imx/clk-gate2.c                     | 2 ++
 drivers/clk/imx/clk-pfd.c                       | 2 ++
 drivers/clk/imx/clk-pll14xx.c                   | 2 ++
 drivers/clk/imx/clk-pllv3.c                     | 2 ++
 drivers/clk/meson/axg.c                         | 1 +
 drivers/clk/meson/g12a.c                        | 1 +
 drivers/clk/meson/gxbb.c                        | 1 +
 drivers/clk/rockchip/clk_rk3188.c               | 1 +
 drivers/clk/rockchip/clk_rk3288.c               | 1 +
 drivers/clk/sifive/fu540-prci.c                 | 1 +
 drivers/core/devres.c                           | 1 +
 drivers/dfu/dfu_mtd.c                           | 1 +
 drivers/dma/ti/k3-udma.c                        | 2 ++
 drivers/firmware/ti_sci.c                       | 1 +
 drivers/gpio/dwapb_gpio.c                       | 1 +
 drivers/gpio/mscc_sgpio.c                       | 1 +
 drivers/i2c/ast_i2c.c                           | 1 +
 drivers/i2c/designware_i2c.c                    | 1 +
 drivers/i2c/meson_i2c.c                         | 1 +
 drivers/i2c/muxes/i2c-mux-gpio.c                | 1 +
 drivers/i2c/tegra_i2c.c                         | 1 +
 drivers/misc/microchip_flexcom.c                | 1 +
 drivers/misc/tegra186_bpmp.c                    | 1 +
 drivers/mmc/am654_sdhci.c                       | 1 +
 drivers/mmc/aspeed_sdhci.c                      | 1 +
 drivers/mmc/fsl_esdhc_imx.c                     | 1 +
 drivers/mmc/omap_hsmmc.c                        | 2 ++
 drivers/mmc/rockchip_sdhci.c                    | 1 +
 drivers/mmc/tegra_mmc.c                         | 1 +
 drivers/mmc/zynq_sdhci.c                        | 1 +
 drivers/mtd/mtd_uboot.c                         | 1 +
 drivers/mtd/mtdconcat.c                         | 1 +
 drivers/mtd/mtdcore.c                           | 1 +
 drivers/mtd/mtdpart.c                           | 1 +
 drivers/mtd/nand/bbt.c                          | 1 +
 drivers/mtd/nand/raw/atmel_nand.c               | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c   | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c    | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c    | 1 +
 drivers/mtd/nand/raw/brcmnand/brcmnand.c        | 2 ++
 drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c | 1 +
 drivers/mtd/nand/raw/denali.c                   | 2 ++
 drivers/mtd/nand/raw/fsl_elbc_nand.c            | 1 +
 drivers/mtd/nand/raw/fsl_ifc_nand.c             | 1 +
 drivers/mtd/nand/raw/mxs_nand_spl.c             | 1 +
 drivers/mtd/nand/raw/nand_base.c                | 1 +
 drivers/mtd/nand/raw/nand_bbt.c                 | 1 +
 drivers/mtd/nand/raw/nand_bch.c                 | 1 +
 drivers/mtd/nand/raw/nand_timings.c             | 1 +
 drivers/mtd/nand/raw/nand_util.c                | 1 +
 drivers/mtd/nand/raw/pxa3xx_nand.c              | 2 ++
 drivers/mtd/nand/raw/stm32_fmc2_nand.c          | 1 +
 drivers/mtd/nand/raw/sunxi_nand.c               | 2 ++
 drivers/mtd/nand/spi/core.c                     | 1 +
 drivers/mtd/onenand/onenand_base.c              | 1 +
 drivers/mtd/spi/spi-nor-core.c                  | 1 +
 drivers/mtd/ubi/attach.c                        | 1 +
 drivers/mtd/ubi/build.c                         | 1 +
 drivers/mtd/ubi/debug.c                         | 1 +
 drivers/mtd/ubi/eba.c                           | 1 +
 drivers/mtd/ubi/fastmap.c                       | 2 ++
 drivers/mtd/ubi/io.c                            | 1 +
 drivers/mtd/ubi/kapi.c                          | 1 +
 drivers/mtd/ubi/vmt.c                           | 1 +
 drivers/mtd/ubi/vtbl.c                          | 1 +
 drivers/mtd/ubi/wl.c                            | 1 +
 drivers/net/designware.c                        | 1 +
 drivers/net/dwmac_socfpga.c                     | 1 +
 drivers/net/mvneta.c                            | 1 +
 drivers/net/mvpp2.c                             | 2 ++
 drivers/net/phy/dp83867.c                       | 1 +
 drivers/net/sni_ave.c                           | 1 +
 drivers/net/zynq_gem.c                          | 1 +
 drivers/pci/pcie_dw_ti.c                        | 1 +
 drivers/pci/pcie_mediatek.c                     | 1 +
 drivers/phy/allwinner/phy-sun4i-usb.c           | 1 +
 drivers/phy/marvell/comphy_core.c               | 1 +
 drivers/phy/omap-usb2-phy.c                     | 1 +
 drivers/phy/phy-mtk-tphy.c                      | 1 +
 drivers/phy/phy-ti-am654.c                      | 1 +
 drivers/phy/ti-pipe3-phy.c                      | 1 +
 drivers/pinctrl/intel/pinctrl.c                 | 1 +
 drivers/pinctrl/mscc/mscc-common.c              | 1 +
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c     | 1 +
 drivers/pinctrl/nxp/pinctrl-imx.c               | 1 +
 drivers/pinctrl/nxp/pinctrl-mxs.c               | 1 +
 drivers/pinctrl/pinctrl_stm32.c                 | 1 +
 drivers/pinctrl/renesas/pfc.c                   | 1 +
 drivers/power/domain/meson-ee-pwrc.c            | 1 +
 drivers/power/domain/meson-gx-pwrc-vpu.c        | 1 +
 drivers/power/domain/mtk-power-domain.c         | 1 +
 drivers/power/domain/ti-sci-power-domain.c      | 1 +
 drivers/power/regulator/pbias_regulator.c       | 1 +
 drivers/ram/rockchip/dmc-rk3368.c               | 1 +
 drivers/remoteproc/rproc-elf-loader.c           | 1 +
 drivers/remoteproc/stm32_copro.c                | 1 +
 drivers/remoteproc/ti_k3_arm64_rproc.c          | 1 +
 drivers/remoteproc/ti_k3_dsp_rproc.c            | 1 +
 drivers/remoteproc/ti_k3_r5f_rproc.c            | 1 +
 drivers/reset/reset-mediatek.c                  | 1 +
 drivers/reset/reset-ti-sci.c                    | 1 +
 drivers/reset/reset-uclass.c                    | 1 +
 drivers/serial/ns16550.c                        | 1 +
 drivers/serial/serial_mtk.c                     | 3 ++-
 drivers/serial/serial_omap.c                    | 1 +
 drivers/serial/serial_sifive.c                  | 1 +
 drivers/serial/serial_zynq.c                    | 1 +
 drivers/smem/msm_smem.c                         | 2 ++
 drivers/soc/ti/k3-navss-ringacc.c               | 2 ++
 drivers/spi/atmel-quadspi.c                     | 1 +
 drivers/spi/cadence_qspi.c                      | 1 +
 drivers/spi/spi-mem.c                           | 1 +
 drivers/spi/ti_qspi.c                           | 1 +
 drivers/spi/zynqmp_gqspi.c                      | 1 +
 drivers/sysreset/sysreset-ti-sci.c              | 1 +
 drivers/sysreset/sysreset_syscon.c              | 1 +
 drivers/tee/optee/core.c                        | 1 +
 drivers/timer/ast_timer.c                       | 1 +
 drivers/timer/cadence-ttc.c                     | 1 +
 drivers/timer/timer-uclass.c                    | 1 +
 drivers/ufs/cdns-platform.c                     | 1 +
 drivers/ufs/ti-j721e-ufs.c                      | 1 +
 drivers/ufs/ufs.c                               | 1 +
 drivers/usb/cdns3/core.c                        | 1 +
 drivers/usb/cdns3/gadget.c                      | 2 ++
 drivers/usb/cdns3/host.c                        | 1 +
 drivers/usb/dwc3/core.c                         | 2 ++
 drivers/usb/dwc3/dwc3-omap.c                    | 1 +
 drivers/usb/dwc3/gadget.c                       | 1 +
 drivers/usb/dwc3/ti_usb_phy.c                   | 1 +
 drivers/usb/gadget/at91_udc.c                   | 2 ++
 drivers/usb/gadget/composite.c                  | 1 +
 drivers/usb/gadget/dwc2_udc_otg.c               | 1 +
 drivers/usb/gadget/f_mass_storage.c             | 1 +
 drivers/usb/gadget/pxa25x_udc.c                 | 1 +
 drivers/usb/gadget/udc/udc-core.c               | 1 +
 drivers/usb/host/ehci-generic.c                 | 1 +
 drivers/usb/host/ohci-da8xx.c                   | 1 +
 drivers/usb/host/ohci-generic.c                 | 1 +
 drivers/usb/musb-new/am35x.c                    | 1 +
 drivers/usb/musb-new/musb_core.c                | 1 +
 drivers/usb/musb-new/musb_dsps.c                | 1 +
 drivers/usb/musb-new/musb_gadget.c              | 1 +
 drivers/usb/musb-new/musb_host.c                | 1 +
 drivers/usb/musb-new/musb_uboot.c               | 1 +
 drivers/usb/musb-new/omap2430.c                 | 1 +
 drivers/video/exynos/exynos_mipi_dsi.c          | 1 +
 drivers/video/mipi_dsi.c                        | 1 +
 drivers/video/rockchip/rk3288_mipi.c            | 1 +
 drivers/video/rockchip/rk3399_mipi.c            | 1 +
 drivers/video/rockchip/rk_vop.c                 | 1 +
 drivers/video/tegra124/sor.c                    | 1 +
 drivers/virtio/virtio_mmio.c                    | 1 +
 drivers/virtio/virtio_pci_legacy.c              | 1 +
 drivers/virtio/virtio_pci_modern.c              | 1 +
 drivers/virtio/virtio_sandbox.c                 | 1 +
 drivers/watchdog/ast_wdt.c                      | 1 +
 drivers/watchdog/cdns_wdt.c                     | 1 +
 drivers/watchdog/sp805_wdt.c                    | 1 +
 drivers/watchdog/xilinx_tb_wdt.c                | 1 +
 fs/ubifs/debug.c                                | 1 +
 fs/ubifs/gc.c                                   | 1 +
 fs/ubifs/io.c                                   | 1 +
 fs/ubifs/log.c                                  | 1 +
 fs/ubifs/lpt.c                                  | 1 +
 fs/ubifs/lpt_commit.c                           | 1 +
 fs/ubifs/master.c                               | 1 +
 fs/ubifs/orphan.c                               | 1 +
 fs/ubifs/recovery.c                             | 1 +
 fs/ubifs/replay.c                               | 1 +
 fs/ubifs/sb.c                                   | 1 +
 fs/ubifs/scan.c                                 | 1 +
 fs/ubifs/super.c                                | 1 +
 fs/ubifs/tnc.c                                  | 1 +
 fs/ubifs/tnc_misc.c                             | 1 +
 fs/ubifs/ubifs.c                                | 1 +
 fs/yaffs2/yaffs_allocator.c                     | 1 +
 fs/yaffs2/yaffs_checkptrw.c                     | 1 +
 fs/yaffs2/yaffs_guts.c                          | 1 +
 fs/yaffs2/yaffs_summary.c                       | 1 +
 fs/yaffs2/yaffs_yaffs1.c                        | 1 +
 fs/yaffs2/yaffs_yaffs2.c                        | 1 +
 fs/yaffs2/yaffsfs.c                             | 1 +
 include/dm/device.h                             | 2 --
 include/dm/devres.h                             | 4 ++++
 lib/bch.c                                       | 1 +
 lib/crypto/asymmetric_type.c                    | 2 ++
 lib/crypto/pkcs7_parser.c                       | 1 +
 lib/crypto/public_key.c                         | 2 ++
 lib/crypto/x509_cert_parser.c                   | 1 +
 lib/crypto/x509_public_key.c                    | 2 ++
 lib/list_sort.c                                 | 1 +
 test/dm/devres.c                                | 1 +
 test/dm/regmap.c                                | 1 +
 test/dm/syscon.c                                | 1 +
 test/dm/test-fdt.c                              | 1 +
 242 files changed, 275 insertions(+), 4 deletions(-)

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..a1c265f46f 100644
--- a/arch/arm/mach-imx/cmd_nandbcb.c
+++ b/arch/arm/mach-imx/cmd_nandbcb.c
@@ -11,6 +11,7 @@
 
 #include <common.h>
 #include <nand.h>
+#include <dm/devres.h>
 
 #include <asm/io.h>
 #include <jffs2/jffs2.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-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 1b012f7f67..ecb9af1470 100644
--- a/arch/arm/mach-rockchip/rk3188/rk3188.c
+++ b/arch/arm/mach-rockchip/rk3188/rk3188.c
@@ -10,6 +10,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 e64ee86f08..1b97a2e9f2 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_rk3288.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 9572f7ea9c..05ba48ab27 100644
--- a/arch/arm/mach-rockchip/rk3288/rk3288.c
+++ b/arch/arm/mach-rockchip/rk3288/rk3288.c
@@ -17,6 +17,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/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 f0411c0a21..08f677ac4d 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_rk3399.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-stm32mp/pwr_regulator.c b/arch/arm/mach-stm32mp/pwr_regulator.c
index 9484645dbd..977cc7d348 100644
--- a/arch/arm/mach-stm32mp/pwr_regulator.c
+++ b/arch/arm/mach-stm32mp/pwr_regulator.c
@@ -8,6 +8,7 @@
 #include <errno.h>
 #include <regmap.h>
 #include <syscon.h>
+#include <linux/err.h>
 #include <power/pmic.h>
 #include <power/regulator.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/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/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 1d4a54c902..d57a50de11 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -31,6 +31,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/cmd/gpio.c b/cmd/gpio.c
index eff36ab2af..5f4c7ff114 100644
--- a/cmd/gpio.c
+++ b/cmd/gpio.c
@@ -11,6 +11,7 @@
 #include <errno.h>
 #include <dm.h>
 #include <asm/gpio.h>
+#include <linux/err.h>
 
 __weak int name_to_gpio(const char *name)
 {
diff --git a/cmd/gpt.c b/cmd/gpt.c
index 0c4349f4b2..ca17070805 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -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/mtd.c b/cmd/mtd.c
index 1b6b8dda2b..21afce03ca 100644
--- a/cmd/mtd.c
+++ b/cmd/mtd.c
@@ -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>
 
diff --git a/cmd/ubi.c b/cmd/ubi.c
index 22ba5b1a2c..7fb4cdfc2a 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -19,6 +19,7 @@
 #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/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/block/blk-uclass.c b/drivers/block/blk-uclass.c
index ca8978f0e1..7771114491 100644
--- a/drivers/block/blk-uclass.c
+++ b/drivers/block/blk-uclass.c
@@ -10,6 +10,7 @@
 #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/clk/altera/clk-arria10.c b/drivers/clk/altera/clk-arria10.c
index 179869df45..a39cd34fe5 100644
--- a/drivers/clk/altera/clk-arria10.c
+++ b/drivers/clk/altera/clk-arria10.c
@@ -7,6 +7,7 @@
 #include <asm/io.h>
 #include <clk-uclass.h>
 #include <dm.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..d8562e131d 100644
--- a/drivers/clk/at91/clk-generated.c
+++ b/drivers/clk/at91/clk-generated.c
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <clk-uclass.h>
 #include <dm.h>
+#include <linux/err.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-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 5ef9035ece..4612fbcdc7 100644
--- a/drivers/clk/clk-ti-sci.c
+++ b/drivers/clk/clk-ti-sci.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <clk-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <k3-avs.h>
 
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 7ac580d661..a4f6b15e3d 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -10,10 +10,12 @@
 #include <clk.h>
 #include <clk-uclass.h>
 #include <dm.h>
-#include <dm/read.h>
 #include <dt-structs.h>
 #include <errno.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)
 {
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_ccf.c b/drivers/clk/clk_sandbox_ccf.c
index 9fa27229e1..0903c817a6 100644
--- a/drivers/clk/clk_sandbox_ccf.c
+++ b/drivers/clk/clk_sandbox_ccf.c
@@ -11,8 +11,10 @@
 #include <clk.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..628110de3e 100644
--- a/drivers/clk/clk_sandbox_test.c
+++ b/drivers/clk/clk_sandbox_test.c
@@ -7,6 +7,7 @@
 #include <dm.h>
 #include <clk.h>
 #include <asm/clk.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..66cbef15ab 100644
--- a/drivers/clk/clk_versal.c
+++ b/drivers/clk/clk_versal.c
@@ -13,6 +13,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_zynqmp.c b/drivers/clk/clk_zynqmp.c
index 72fc39fa47..a365b565e1 100644
--- a/drivers/clk/clk_zynqmp.c
+++ b/drivers/clk/clk_zynqmp.c
@@ -11,6 +11,7 @@
 #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-pfd.c b/drivers/clk/imx/clk-pfd.c
index 188b2b3b90..f0f2eeb4a7 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 fbb7b24d5e..77efd394e9 100644
--- a/drivers/clk/imx/clk-pllv3.c
+++ b/drivers/clk/imx/clk-pllv3.c
@@ -9,9 +9,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 "imx_clk_pllv3"
 
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/rockchip/clk_rk3188.c b/drivers/clk/rockchip/clk_rk3188.c
index 3ea9a81b32..82eea40063 100644
--- a/drivers/clk/rockchip/clk_rk3188.c
+++ b/drivers/clk/rockchip/clk_rk3188.c
@@ -20,6 +20,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_rk3288.c b/drivers/clk/rockchip/clk_rk3288.c
index 85d1b67e43..14dfa85942 100644
--- a/drivers/clk/rockchip/clk_rk3288.c
+++ b/drivers/clk/rockchip/clk_rk3288.c
@@ -21,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>
 
 DECLARE_GLOBAL_DATA_PTR;
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/core/devres.c b/drivers/core/devres.c
index 237b42653c..d98e80de26 100644
--- a/drivers/core/devres.c
+++ b/drivers/core/devres.c
@@ -14,6 +14,7 @@
 #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/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/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index 23d6ed0697..4859b3f32c 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -12,12 +12,14 @@
 #include <malloc.h>
 #include <asm/dma-mapping.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/read.h>
 #include <dm/of_access.h>
 #include <dma.h>
 #include <dma-uclass.h>
 #include <linux/delay.h>
 #include <dt-bindings/dma/k3-udma.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>
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index 62b1dc2006..5e37ee0570 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -12,6 +12,7 @@
 #include <errno.h>
 #include <mailbox.h>
 #include <dm/device.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/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c
index 2eb1547b4f..58e3e7b1f7 100644
--- a/drivers/gpio/dwapb_gpio.c
+++ b/drivers/gpio/dwapb_gpio.c
@@ -12,6 +12,7 @@
 #include <asm/io.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/root.h>
 #include <errno.h>
diff --git a/drivers/gpio/mscc_sgpio.c b/drivers/gpio/mscc_sgpio.c
index c899454ec4..3378ebb442 100644
--- a/drivers/gpio/mscc_sgpio.c
+++ b/drivers/gpio/mscc_sgpio.c
@@ -13,6 +13,7 @@
 #include <asm/io.h>
 #include <errno.h>
 #include <clk.h>
+#include <linux/err.h>
 
 #define MSCC_SGPIOS_PER_BANK	32
 #define MSCC_SGPIO_BANK_DEPTH	4
diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c
index 763183d649..3f7382a0c9 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/designware_i2c.c b/drivers/i2c/designware_i2c.c
index b8cdd1c661..03d6ca09f7 100644
--- a/drivers/i2c/designware_i2c.c
+++ b/drivers/i2c/designware_i2c.c
@@ -12,6 +12,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include "designware_i2c.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/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-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c
index e8b124f4f5..29e283ce25 100644
--- a/drivers/i2c/muxes/i2c-mux-gpio.c
+++ b/drivers/i2c/muxes/i2c-mux-gpio.c
@@ -11,6 +11,7 @@
 #include <asm-generic/gpio.h>
 #include <common.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/pinctrl.h>
 #include <fdtdec.h>
 #include <i2c.h>
diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c
index 4be41ddbf0..f37db31c3c 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/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/tegra186_bpmp.c b/drivers/misc/tegra186_bpmp.c
index 89e27dd526..489337c3d0 100644
--- a/drivers/misc/tegra186_bpmp.c
+++ b/drivers/misc/tegra186_bpmp.c
@@ -12,6 +12,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/mmc/am654_sdhci.c b/drivers/mmc/am654_sdhci.c
index 7cd5516197..37952d6ace 100644
--- a/drivers/mmc/am654_sdhci.c
+++ b/drivers/mmc/am654_sdhci.c
@@ -12,6 +12,7 @@
 #include <power-domain.h>
 #include <regmap.h>
 #include <sdhci.h>
+#include <linux/err.h>
 
 /* CTL_CFG Registers */
 #define CTL_CFG_2		0x14
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/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c
index f7b754bd9d..ab1ef8d77c 100644
--- a/drivers/mmc/fsl_esdhc_imx.c
+++ b/drivers/mmc/fsl_esdhc_imx.c
@@ -19,6 +19,7 @@
 #include <hwconfig.h>
 #include <mmc.h>
 #include <part.h>
+#include <linux/err.h>
 #include <power/regulator.h>
 #include <malloc.h>
 #include <fsl_esdhc_imx.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/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/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/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c
index 529eec9c45..83c32a361a 100644
--- a/drivers/mmc/zynq_sdhci.c
+++ b/drivers/mmc/zynq_sdhci.c
@@ -10,6 +10,7 @@
 #include <dm.h>
 #include <fdtdec.h>
 #include "mmc_private.h"
+#include <linux/err.h>
 #include <linux/libfdt.h>
 #include <malloc.h>
 #include <sdhci.h>
diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c
index 8aeccb016d..17df8b0ffc 100644
--- a/drivers/mtd/mtd_uboot.c
+++ b/drivers/mtd/mtd_uboot.c
@@ -7,6 +7,7 @@
 #include <env.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 838c288318..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>
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/raw/atmel_nand.c b/drivers/mtd/nand/raw/atmel_nand.c
index 31ad2cfa88..3526585349 100644
--- a/drivers/mtd/nand/raw/atmel_nand.c
+++ b/drivers/mtd/nand/raw/atmel_nand.c
@@ -13,6 +13,7 @@
 #include <common.h>
 #include <asm/gpio.h>
 #include <asm/arch/gpio.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..d3e39661e1 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
@@ -17,6 +17,8 @@
 #include <memalign.h>
 #include <nand.h>
 #include <clk.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..bb8aea2d01 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
@@ -2,6 +2,7 @@
 
 #include <common.h>
 #include "brcmnand_compat.h"
+#include <dm/devres.h>
 
 static char *devm_kvasprintf(struct udevice *dev, gfp_t gfp, const char *fmt,
 			     va_list ap)
diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
index f0b528485c..0bd7eb7f1f 100644
--- a/drivers/mtd/nand/raw/denali.c
+++ b/drivers/mtd/nand/raw/denali.c
@@ -8,8 +8,10 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <nand.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>
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..e179a780db 100644
--- a/drivers/mtd/nand/raw/pxa3xx_nand.c
+++ b/drivers/mtd/nand/raw/pxa3xx_nand.c
@@ -10,6 +10,8 @@
 #include <malloc.h>
 #include <fdtdec.h>
 #include <nand.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..cd5c31e76b 100644
--- a/drivers/mtd/nand/raw/sunxi_nand.c
+++ b/drivers/mtd/nand/raw/sunxi_nand.c
@@ -28,6 +28,8 @@
 #include <fdtdec.h>
 #include <memalign.h>
 #include <nand.h>
+#include <dm/devres.h>
+#include <linux/err.h>
 
 #include <linux/kernel.h>
 #include <linux/mtd/mtd.h>
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index fba8cc056a..d976c19b7a 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -24,6 +24,7 @@
 #include <errno.h>
 #include <spi.h>
 #include <spi-mem.h>
+#include <dm/devres.h>
 #include <linux/mtd/spinand.h>
 #endif
 
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/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
index 6e7fc2311e..277ec68bce 100644
--- a/drivers/mtd/spi/spi-nor-core.c
+++ b/drivers/mtd/spi/spi-nor-core.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <dm/devres.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..aec2613a09 100644
--- a/drivers/mtd/ubi/debug.c
+++ b/drivers/mtd/ubi/debug.c
@@ -10,6 +10,7 @@
 #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/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/designware.c b/drivers/net/designware.c
index 19fc34f771..aa33fd511b 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -17,6 +17,7 @@
 #include <malloc.h>
 #include <pci.h>
 #include <reset.h>
+#include <dm/devres.h>
 #include <linux/compiler.h>
 #include <linux/err.h>
 #include <linux/kernel.h>
diff --git a/drivers/net/dwmac_socfpga.c b/drivers/net/dwmac_socfpga.c
index b7bf5dbe69..66a5f95112 100644
--- a/drivers/net/dwmac_socfpga.c
+++ b/drivers/net/dwmac_socfpga.c
@@ -14,6 +14,7 @@
 #include <reset.h>
 #include <syscon.h>
 #include "designware.h"
+#include <linux/err.h>
 
 #include <asm/arch/system_manager.h>
 
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
index 5fe8500199..505fabd3fa 100644
--- a/drivers/net/mvneta.c
+++ b/drivers/net/mvneta.c
@@ -20,6 +20,7 @@
 #include <config.h>
 #include <malloc.h>
 #include <asm/io.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 917d06b6e0..d120278ab1 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -17,12 +17,14 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <dm/device-internal.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/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/sni_ave.c b/drivers/net/sni_ave.c
index 6d333e24ee..64e92abb03 100644
--- a/drivers/net/sni_ave.c
+++ b/drivers/net/sni_ave.c
@@ -8,6 +8,7 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <fdt_support.h>
+#include <linux/err.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <miiphy.h>
diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
index 78f94148b4..3cf6570fc2 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -25,6 +25,7 @@
 #include <asm/system.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/sys_proto.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 
 /* Bit/mask specification */
diff --git a/drivers/pci/pcie_dw_ti.c b/drivers/pci/pcie_dw_ti.c
index b37fc2de7f..199a3bb50a 100644
--- a/drivers/pci/pcie_dw_ti.c
+++ b/drivers/pci/pcie_dw_ti.c
@@ -12,6 +12,7 @@
 #include <syscon.h>
 #include <asm/io.h>
 #include <asm-generic/gpio.h>
+#include <linux/err.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
diff --git a/drivers/pci/pcie_mediatek.c b/drivers/pci/pcie_mediatek.c
index a0dcb258b0..1271227c6a 100644
--- a/drivers/pci/pcie_mediatek.c
+++ b/drivers/pci/pcie_mediatek.c
@@ -14,6 +14,7 @@
 #include <pci.h>
 #include <reset.h>
 #include <asm/io.h>
+#include <dm/devres.h>
 #include <linux/iopoll.h>
 #include <linux/list.h>
 
diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 5e8f87717f..f4ad4c3cc3 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -21,6 +21,7 @@
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/cpu.h>
+#include <linux/err.h>
 
 #define REG_ISCR			0x00
 #define REG_PHYCTL_A10			0x04
diff --git a/drivers/phy/marvell/comphy_core.c b/drivers/phy/marvell/comphy_core.c
index 9c24692629..d52f42df84 100644
--- a/drivers/phy/marvell/comphy_core.c
+++ b/drivers/phy/marvell/comphy_core.c
@@ -8,6 +8,7 @@
 #include <common.h>
 #include <dm.h>
 #include <fdtdec.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 #include <asm/io.h>
 
diff --git a/drivers/phy/omap-usb2-phy.c b/drivers/phy/omap-usb2-phy.c
index be3bb0d367..321569e4c0 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 3701481256..31345764a7 100644
--- a/drivers/phy/phy-mtk-tphy.c
+++ b/drivers/phy/phy-mtk-tphy.c
@@ -11,6 +11,7 @@
 #include <generic-phy.h>
 #include <mapmem.h>
 #include <asm/io.h>
+#include <dm/devres.h>
 
 #include <dt-bindings/phy/phy.h>
 
diff --git a/drivers/phy/phy-ti-am654.c b/drivers/phy/phy-ti-am654.c
index 39490124ea..1c7db0dd0f 100644
--- a/drivers/phy/phy-ti-am654.c
+++ b/drivers/phy/phy-ti-am654.c
@@ -18,6 +18,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/intel/pinctrl.c b/drivers/pinctrl/intel/pinctrl.c
index 4875a3b0b5..c4287ec406 100644
--- a/drivers/pinctrl/intel/pinctrl.c
+++ b/drivers/pinctrl/intel/pinctrl.c
@@ -28,6 +28,7 @@
 #include <asm/arch/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/mscc/mscc-common.c b/drivers/pinctrl/mscc/mscc-common.c
index bd3e6ea328..2d76c41dea 100644
--- a/drivers/pinctrl/mscc/mscc-common.c
+++ b/drivers/pinctrl/mscc/mscc-common.c
@@ -14,6 +14,7 @@
 #include <config.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/pinctrl.h>
 #include <dm/root.h>
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index f197f4a142..da1f091aec 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -20,6 +20,7 @@
 #include <config.h>
 #include <dm.h>
 #include <dm/device-internal.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..77a8a53202 100644
--- a/drivers/pinctrl/nxp/pinctrl-imx.c
+++ b/drivers/pinctrl/nxp/pinctrl-imx.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <mapmem.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..5147bdc3cc 100644
--- a/drivers/pinctrl/nxp/pinctrl-mxs.c
+++ b/drivers/pinctrl/nxp/pinctrl-mxs.c
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <dm/devres.h>
 #include <linux/io.h>
 #include <linux/err.h>
 #include <dm.h>
diff --git a/drivers/pinctrl/pinctrl_stm32.c b/drivers/pinctrl/pinctrl_stm32.c
index 3a235ae5a7..e0380c349a 100644
--- a/drivers/pinctrl/pinctrl_stm32.c
+++ b/drivers/pinctrl/pinctrl_stm32.c
@@ -6,6 +6,7 @@
 #include <asm/io.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..5ee11615de 100644
--- a/drivers/pinctrl/renesas/pfc.c
+++ b/drivers/pinctrl/renesas/pfc.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <dm.h>
 #include <errno.h>
+#include <dm/devres.h>
 #include <dm/pinctrl.h>
 #include <linux/io.h>
 #include <linux/sizes.h>
diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c
index 7f5d13e872..aa11866591 100644
--- a/drivers/power/domain/meson-ee-pwrc.c
+++ b/drivers/power/domain/meson-ee-pwrc.c
@@ -13,6 +13,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 */
 
diff --git a/drivers/power/domain/meson-gx-pwrc-vpu.c b/drivers/power/domain/meson-gx-pwrc-vpu.c
index bd69aea8dd..02f73548d6 100644
--- a/drivers/power/domain/meson-gx-pwrc-vpu.c
+++ b/drivers/power/domain/meson-gx-pwrc-vpu.c
@@ -13,6 +13,7 @@
 #include <syscon.h>
 #include <reset.h>
 #include <clk.h>
+#include <linux/err.h>
 
 enum {
 	VPU_PWRC_COMPATIBLE_GX		= 0,
diff --git a/drivers/power/domain/mtk-power-domain.c b/drivers/power/domain/mtk-power-domain.c
index 992ee51947..5084bff766 100644
--- a/drivers/power/domain/mtk-power-domain.c
+++ b/drivers/power/domain/mtk-power-domain.c
@@ -12,6 +12,7 @@
 #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>
diff --git a/drivers/power/domain/ti-sci-power-domain.c b/drivers/power/domain/ti-sci-power-domain.c
index b59af2b13b..3866db589a 100644
--- a/drivers/power/domain/ti-sci-power-domain.c
+++ b/drivers/power/domain/ti-sci-power-domain.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <power-domain-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <dt-bindings/soc/ti,sci_pm_domain.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/ram/rockchip/dmc-rk3368.c b/drivers/ram/rockchip/dmc-rk3368.c
index 9df8f8f4af..7dcfa2943f 100644
--- a/drivers/ram/rockchip/dmc-rk3368.c
+++ b/drivers/ram/rockchip/dmc-rk3368.c
@@ -18,6 +18,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/remoteproc/rproc-elf-loader.c b/drivers/remoteproc/rproc-elf-loader.c
index 538481241f..b2007fd31d 100644
--- a/drivers/remoteproc/rproc-elf-loader.c
+++ b/drivers/remoteproc/rproc-elf-loader.c
@@ -7,6 +7,7 @@
 #include <dm.h>
 #include <elf.h>
 #include <remoteproc.h>
+#include <linux/err.h>
 
 /**
  * struct resource_table - firmware resource table header
diff --git a/drivers/remoteproc/stm32_copro.c b/drivers/remoteproc/stm32_copro.c
index c25488f54d..80e8dffdbb 100644
--- a/drivers/remoteproc/stm32_copro.c
+++ b/drivers/remoteproc/stm32_copro.c
@@ -12,6 +12,7 @@
 #include <reset.h>
 #include <syscon.h>
 #include <asm/io.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..d048cf4161 100644
--- a/drivers/remoteproc/ti_k3_arm64_rproc.c
+++ b/drivers/remoteproc/ti_k3_arm64_rproc.c
@@ -15,6 +15,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include <power-domain.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..913aca36d6 100644
--- a/drivers/remoteproc/ti_k3_dsp_rproc.c
+++ b/drivers/remoteproc/ti_k3_dsp_rproc.c
@@ -15,6 +15,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include <power-domain.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..cecfb0ef86 100644
--- a/drivers/remoteproc/ti_k3_r5f_rproc.c
+++ b/drivers/remoteproc/ti_k3_r5f_rproc.c
@@ -13,6 +13,7 @@
 #include <clk.h>
 #include <reset.h>
 #include <asm/io.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-mediatek.c b/drivers/reset/reset-mediatek.c
index cfbf2af863..4684cbfb6a 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -12,6 +12,7 @@
 #include <regmap.h>
 #include <reset-uclass.h>
 #include <syscon.h>
+#include <linux/err.h>
 
 struct mediatek_reset_priv {
 	struct regmap *regmap;
diff --git a/drivers/reset/reset-ti-sci.c b/drivers/reset/reset-ti-sci.c
index 7b6f736f5e..99e3d9ad5c 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <reset-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 
 /**
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index bf1cba4124..8e6c0a4fd0 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -8,6 +8,7 @@
 #include <fdtdec.h>
 #include <reset.h>
 #include <reset-uclass.h>
+#include <dm/devres.h>
 
 static inline struct reset_ops *reset_dev_ops(struct udevice *dev)
 {
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 754b6e9921..3faf2cd4b9 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -12,6 +12,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_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_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_zynq.c b/drivers/serial/serial_zynq.c
index 7e486a68ff..c07375901b 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -14,6 +14,7 @@
 #include <asm/io.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..711ce626aa 100644
--- a/drivers/smem/msm_smem.c
+++ b/drivers/smem/msm_smem.c
@@ -8,9 +8,11 @@
 #include <common.h>
 #include <errno.h>
 #include <dm.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 64ebc0ba00..2eba1c1d18 100644
--- a/drivers/soc/ti/k3-navss-ringacc.c
+++ b/drivers/soc/ti/k3-navss-ringacc.c
@@ -11,9 +11,11 @@
 #include <asm/dma-mapping.h>
 #include <asm/bitops.h>
 #include <dm.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/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
index 7d9a54011d..195ea5fae6 100644
--- a/drivers/spi/atmel-quadspi.c
+++ b/drivers/spi/atmel-quadspi.c
@@ -15,6 +15,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <fdtdec.h>
+#include <linux/err.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/ioport.h>
diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
index 8fd23a7702..2425f5ad8e 100644
--- a/drivers/spi/cadence_qspi.c
+++ b/drivers/spi/cadence_qspi.c
@@ -11,6 +11,7 @@
 #include <malloc.h>
 #include <reset.h>
 #include <spi.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 #include "cadence_qspi.h"
 
diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
index 7788ab9953..c907729b54 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -7,6 +7,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.h>
 #include <linux/dmaengine.h>
 #include <linux/pm_runtime.h>
 #include "internals.h"
diff --git a/drivers/spi/ti_qspi.c b/drivers/spi/ti_qspi.c
index c3d9e7f2ee..1fdd0ca448 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/zynqmp_gqspi.c b/drivers/spi/zynqmp_gqspi.c
index 4cca418012..c05d46e084 100644
--- a/drivers/spi/zynqmp_gqspi.c
+++ b/drivers/spi/zynqmp_gqspi.c
@@ -16,6 +16,7 @@
 #include <spi.h>
 #include <ubi_uboot.h>
 #include <wait_bit.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/sysreset/sysreset-ti-sci.c b/drivers/sysreset/sysreset-ti-sci.c
index 890a607c4b..6caea3aab3 100644
--- a/drivers/sysreset/sysreset-ti-sci.c
+++ b/drivers/sysreset/sysreset-ti-sci.c
@@ -10,6 +10,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <sysreset.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..a7b175ee62 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -8,6 +8,7 @@
 #include <log.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/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/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/ufs/cdns-platform.c b/drivers/ufs/cdns-platform.c
index c80f4253e4..5bd0c1e0c7 100644
--- a/drivers/ufs/cdns-platform.c
+++ b/drivers/ufs/cdns-platform.c
@@ -9,6 +9,7 @@
 #include <common.h>
 #include <dm.h>
 #include <ufs.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..6e4d0cd3ac 100644
--- a/drivers/ufs/ti-j721e-ufs.c
+++ b/drivers/ufs/ti-j721e-ufs.c
@@ -7,6 +7,7 @@
 #include <clk.h>
 #include <common.h>
 #include <dm.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..512c63a8f2 100644
--- a/drivers/ufs/ufs.c
+++ b/drivers/ufs/ufs.c
@@ -11,6 +11,7 @@
 #include <charset.h>
 #include <common.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/device-internal.h>
 #include <malloc.h>
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
index 8c8e02169e..6f5e5af47d 100644
--- a/drivers/usb/cdns3/core.c
+++ b/drivers/usb/cdns3/core.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <linux/kernel.h>
 #include <linux/io.h>
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
index 0e02b77965..e095760099 100644
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@ -57,6 +57,8 @@
  */
 
 #include <dm.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..cbf21d31dd 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -18,6 +18,8 @@
 #include <malloc.h>
 #include <dwc3-uboot.h>
 #include <asm/dma-mapping.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..7ffec12fc5 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -18,6 +18,7 @@
 #include <asm/io.h>
 #include <dm.h>
 #include <dwc3-omap-uboot.h>
+#include <dm/devres.h>
 #include <linux/usb/dwc3-omap.h>
 #include <linux/ioport.h>
 
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 4353dffb6b..677607ab32 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -17,6 +17,7 @@
 #include <cpu_func.h>
 #include <malloc.h>
 #include <asm/dma-mapping.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..a90868216a 100644
--- a/drivers/usb/dwc3/ti_usb_phy.c
+++ b/drivers/usb/dwc3/ti_usb_phy.c
@@ -19,6 +19,7 @@
 #include <common.h>
 #include <malloc.h>
 #include <ti-usb-phy-uboot.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 35f4147840..229a61affd 100644
--- a/drivers/usb/gadget/dwc2_udc_otg.c
+++ b/drivers/usb/gadget/dwc2_udc_otg.c
@@ -23,6 +23,7 @@
 #include <generic-phy.h>
 #include <malloc.h>
 #include <reset.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/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 8d1d90e3e3..52384b9afb 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -13,6 +13,7 @@
  *		       usb_
  */
 
+#include <dm/devres.h>
 #include <linux/compat.h>
 #include <malloc.h>
 #include <asm/cache.h>
diff --git a/drivers/usb/host/ehci-generic.c b/drivers/usb/host/ehci-generic.c
index 682a070306..80ac876d89 100644
--- a/drivers/usb/host/ehci-generic.c
+++ b/drivers/usb/host/ehci-generic.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <clk.h>
+#include <dm/devres.h>
 #include <dm/ofnode.h>
 #include <generic-phy.h>
 #include <reset.h>
diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c
index 233df57b4d..29a702052e 100644
--- a/drivers/usb/host/ohci-da8xx.c
+++ b/drivers/usb/host/ohci-da8xx.c
@@ -7,6 +7,7 @@
 #include <asm/io.h>
 #include <clk.h>
 #include <dm.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..7b6ec51704 100644
--- a/drivers/usb/host/ohci-generic.c
+++ b/drivers/usb/host/ohci-generic.c
@@ -6,6 +6,7 @@
 #include <common.h>
 #include <clk.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/ofnode.h>
 #include <generic-phy.h>
 #include <reset.h>
diff --git a/drivers/usb/musb-new/am35x.c b/drivers/usb/musb-new/am35x.c
index bda099c63f..58cde22615 100644
--- a/drivers/usb/musb-new/am35x.c
+++ b/drivers/usb/musb-new/am35x.c
@@ -12,6 +12,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/clk.h>
diff --git a/drivers/usb/musb-new/musb_core.c b/drivers/usb/musb-new/musb_core.c
index ab5e3aa9d1..cc6e0a71c9 100644
--- a/drivers/usb/musb-new/musb_core.c
+++ b/drivers/usb/musb-new/musb_core.c
@@ -65,6 +65,7 @@
  */
 
 #ifndef __UBOOT__
+#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..d342eeba80 100644
--- a/drivers/usb/musb-new/musb_dsps.c
+++ b/drivers/usb/musb-new/musb_dsps.c
@@ -15,6 +15,7 @@
  */
 
 #ifndef __UBOOT__
+#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..74b645715d 100644
--- a/drivers/usb/musb-new/musb_gadget.c
+++ b/drivers/usb/musb-new/musb_gadget.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.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..55ad8ead70 100644
--- a/drivers/usb/musb-new/musb_host.c
+++ b/drivers/usb/musb-new/musb_host.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#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..f4d0e1fdc2 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -1,6 +1,7 @@
 #include <common.h>
 #include <console.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..8a45b05613 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -13,6 +13,7 @@
 #include <serial.h>
 #include <dm/device-internal.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/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/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/rockchip/rk3288_mipi.c b/drivers/video/rockchip/rk3288_mipi.c
index 7c4a4cc53b..a6c222bcd9 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_rk3288.h>
diff --git a/drivers/video/rockchip/rk3399_mipi.c b/drivers/video/rockchip/rk3399_mipi.c
index a93b73400b..7c696bc1ea 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_rk3399.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/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/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_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/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..13952e1e97 100644
--- a/drivers/watchdog/cdns_wdt.c
+++ b/drivers/watchdog/cdns_wdt.c
@@ -11,6 +11,7 @@
 #include <wdt.h>
 #include <clk.h>
 #include <div64.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/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/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..388451512a 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -16,6 +16,7 @@
 #include <gzip.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_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_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/dm/device.h b/include/dm/device.h
index 1138a09149..a93fa22d5d 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -720,8 +720,6 @@ 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>
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/lib/bch.c b/lib/bch.c
index c4fac77d61..86709cc875 100644
--- a/lib/bch.c
+++ b/lib/bch.c
@@ -56,6 +56,7 @@
 #ifndef USE_HOSTCC
 #include <common.h>
 #include <ubi_uboot.h>
+#include <dm/devres.h>
 
 #include <linux/bitops.h>
 #else
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 at 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/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/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>
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/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/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/test-fdt.c b/test/dm/test-fdt.c
index d59c449ce0..64a94a521b 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>
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 29/33] dm: core: Require users of devres to include the header
@ 2020-01-12 19:06   ` Simon Glass
  0 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Simon Glass, AKASHI Takahiro, Adam Ford, Alexander Graf,
	Anatolij Gustschin, Andre Przywara, Andreas Dannenberg,
	Andrew F. Davis, Andy Yan, Anup Patel, Atish Patra, Bin Meng,
	Boris Brezillon, Carlo Caione, Cédric Le Goater,
	Daniel Schwierzeck, Derald D. Woods, Eddie James, Eugen Hristev,
	Eugeniu Rosca, Fabien Dessenne, Fabio Estevam, Faiz Abbas,
	Frank Wunderlich, Fugang Duan, GSS_MTK_Uboot_upstream,
	Gregory CLEMENT, Grygorii Strashko, Heiko Schocher,
	Heiko Stuebner, Heinrich Schuchardt, Horatiu Vultur,
	Jaehoon Chung, Jagan Teki, Jean-Jacques Hiblot, Jens Wiklander,
	Joe Hershberger, Joel Stanley, Keerthy, Kever Yang,
	Kyungmin Park, Lars Povlsen, Levin Du, Lokesh Vutla, Lukas Auer,
	Lukasz Majewski, Marek Szyprowski, Marek Vasut, Marek Vasut,
	Maxime Ripard, Michal Simek, Michal Suchanek, Miquel Raynal,
	NXP i.MX U-Boot Team, Neil Armstrong, Nishanth Menon,
	Patrice Chotard, Patrick Delaunay, Pavel Herrmann, Peng Fan,
	Peter Ujfalusi, Philipp Tomsich, Philippe Reynes, Priyanka Jain,
	Quentin Schulz, Ramon Fried, Rick Chen, Roger Quadros, Ryder Lee,
	Sagar Shrikant Kadam, Sekhar Nori, Sergey Kubushyn, Sherry Sun,
	Shyam Saini, Simon Goldschmidt, Stefan Agner, Stefan Roese,
	Stefano Babic, Suman Anna, T Karthik Reddy, Trent Piepho,
	Vignesh R, Vladimir Oltean, Weijie Gao, William Zhang, Ye Li,
	titron, u-boot-amlogic, uboot-stm32, 默默

At present devres.h is included in all files that include dm.h but few
make use of it. Also this pulls in linux/compat which adds several more
headers. Drop the automatic inclusion and require files to include devres
themselves. This provides a good indication of which files use devres.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/arm/mach-aspeed/ast2500/clk_ast2500.c      | 1 +
 arch/arm/mach-imx/cmd_nandbcb.c                 | 1 +
 arch/arm/mach-meson/board-info.c                | 1 +
 arch/arm/mach-meson/sm.c                        | 1 +
 arch/arm/mach-rockchip/px30/clk_px30.c          | 1 +
 arch/arm/mach-rockchip/rk3036/clk_rk3036.c      | 1 +
 arch/arm/mach-rockchip/rk3128/clk_rk3128.c      | 1 +
 arch/arm/mach-rockchip/rk3188/clk_rk3188.c      | 1 +
 arch/arm/mach-rockchip/rk3188/rk3188.c          | 1 +
 arch/arm/mach-rockchip/rk322x/clk_rk322x.c      | 1 +
 arch/arm/mach-rockchip/rk3288/clk_rk3288.c      | 1 +
 arch/arm/mach-rockchip/rk3288/rk3288.c          | 1 +
 arch/arm/mach-rockchip/rk3308/clk_rk3308.c      | 1 +
 arch/arm/mach-rockchip/rk3328/clk_rk3328.c      | 1 +
 arch/arm/mach-rockchip/rk3368/clk_rk3368.c      | 1 +
 arch/arm/mach-rockchip/rk3399/clk_rk3399.c      | 1 +
 arch/arm/mach-rockchip/rv1108/clk_rv1108.c      | 1 +
 arch/arm/mach-stm32mp/pwr_regulator.c           | 1 +
 arch/riscv/lib/andes_plic.c                     | 1 +
 arch/riscv/lib/andes_plmt.c                     | 1 +
 arch/riscv/lib/sifive_clint.c                   | 1 +
 board/google/veyron/veyron.c                    | 1 +
 board/st/stm32mp1/stm32mp1.c                    | 1 +
 cmd/gpio.c                                      | 1 +
 cmd/gpt.c                                       | 1 +
 cmd/mtd.c                                       | 2 ++
 cmd/ubi.c                                       | 1 +
 drivers/adc/rockchip-saradc.c                   | 1 +
 drivers/block/blk-uclass.c                      | 1 +
 drivers/clk/altera/clk-arria10.c                | 1 +
 drivers/clk/aspeed/clk_ast2500.c                | 1 +
 drivers/clk/at91/clk-generated.c                | 1 +
 drivers/clk/at91/clk-usb.c                      | 1 +
 drivers/clk/clk-composite.c                     | 2 ++
 drivers/clk/clk-divider.c                       | 2 ++
 drivers/clk/clk-fixed-factor.c                  | 2 ++
 drivers/clk/clk-gate.c                          | 2 ++
 drivers/clk/clk-mux.c                           | 2 ++
 drivers/clk/clk-ti-sci.c                        | 1 +
 drivers/clk/clk-uclass.c                        | 4 +++-
 drivers/clk/clk_fixed_factor.c                  | 1 +
 drivers/clk/clk_sandbox_ccf.c                   | 2 ++
 drivers/clk/clk_sandbox_test.c                  | 1 +
 drivers/clk/clk_versal.c                        | 1 +
 drivers/clk/clk_zynqmp.c                        | 1 +
 drivers/clk/imx/clk-composite-8m.c              | 2 ++
 drivers/clk/imx/clk-gate2.c                     | 2 ++
 drivers/clk/imx/clk-pfd.c                       | 2 ++
 drivers/clk/imx/clk-pll14xx.c                   | 2 ++
 drivers/clk/imx/clk-pllv3.c                     | 2 ++
 drivers/clk/meson/axg.c                         | 1 +
 drivers/clk/meson/g12a.c                        | 1 +
 drivers/clk/meson/gxbb.c                        | 1 +
 drivers/clk/rockchip/clk_rk3188.c               | 1 +
 drivers/clk/rockchip/clk_rk3288.c               | 1 +
 drivers/clk/sifive/fu540-prci.c                 | 1 +
 drivers/core/devres.c                           | 1 +
 drivers/dfu/dfu_mtd.c                           | 1 +
 drivers/dma/ti/k3-udma.c                        | 2 ++
 drivers/firmware/ti_sci.c                       | 1 +
 drivers/gpio/dwapb_gpio.c                       | 1 +
 drivers/gpio/mscc_sgpio.c                       | 1 +
 drivers/i2c/ast_i2c.c                           | 1 +
 drivers/i2c/designware_i2c.c                    | 1 +
 drivers/i2c/meson_i2c.c                         | 1 +
 drivers/i2c/muxes/i2c-mux-gpio.c                | 1 +
 drivers/i2c/tegra_i2c.c                         | 1 +
 drivers/misc/microchip_flexcom.c                | 1 +
 drivers/misc/tegra186_bpmp.c                    | 1 +
 drivers/mmc/am654_sdhci.c                       | 1 +
 drivers/mmc/aspeed_sdhci.c                      | 1 +
 drivers/mmc/fsl_esdhc_imx.c                     | 1 +
 drivers/mmc/omap_hsmmc.c                        | 2 ++
 drivers/mmc/rockchip_sdhci.c                    | 1 +
 drivers/mmc/tegra_mmc.c                         | 1 +
 drivers/mmc/zynq_sdhci.c                        | 1 +
 drivers/mtd/mtd_uboot.c                         | 1 +
 drivers/mtd/mtdconcat.c                         | 1 +
 drivers/mtd/mtdcore.c                           | 1 +
 drivers/mtd/mtdpart.c                           | 1 +
 drivers/mtd/nand/bbt.c                          | 1 +
 drivers/mtd/nand/raw/atmel_nand.c               | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm63158_nand.c   | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm6838_nand.c    | 1 +
 drivers/mtd/nand/raw/brcmnand/bcm6858_nand.c    | 1 +
 drivers/mtd/nand/raw/brcmnand/brcmnand.c        | 2 ++
 drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c | 1 +
 drivers/mtd/nand/raw/denali.c                   | 2 ++
 drivers/mtd/nand/raw/fsl_elbc_nand.c            | 1 +
 drivers/mtd/nand/raw/fsl_ifc_nand.c             | 1 +
 drivers/mtd/nand/raw/mxs_nand_spl.c             | 1 +
 drivers/mtd/nand/raw/nand_base.c                | 1 +
 drivers/mtd/nand/raw/nand_bbt.c                 | 1 +
 drivers/mtd/nand/raw/nand_bch.c                 | 1 +
 drivers/mtd/nand/raw/nand_timings.c             | 1 +
 drivers/mtd/nand/raw/nand_util.c                | 1 +
 drivers/mtd/nand/raw/pxa3xx_nand.c              | 2 ++
 drivers/mtd/nand/raw/stm32_fmc2_nand.c          | 1 +
 drivers/mtd/nand/raw/sunxi_nand.c               | 2 ++
 drivers/mtd/nand/spi/core.c                     | 1 +
 drivers/mtd/onenand/onenand_base.c              | 1 +
 drivers/mtd/spi/spi-nor-core.c                  | 1 +
 drivers/mtd/ubi/attach.c                        | 1 +
 drivers/mtd/ubi/build.c                         | 1 +
 drivers/mtd/ubi/debug.c                         | 1 +
 drivers/mtd/ubi/eba.c                           | 1 +
 drivers/mtd/ubi/fastmap.c                       | 2 ++
 drivers/mtd/ubi/io.c                            | 1 +
 drivers/mtd/ubi/kapi.c                          | 1 +
 drivers/mtd/ubi/vmt.c                           | 1 +
 drivers/mtd/ubi/vtbl.c                          | 1 +
 drivers/mtd/ubi/wl.c                            | 1 +
 drivers/net/designware.c                        | 1 +
 drivers/net/dwmac_socfpga.c                     | 1 +
 drivers/net/mvneta.c                            | 1 +
 drivers/net/mvpp2.c                             | 2 ++
 drivers/net/phy/dp83867.c                       | 1 +
 drivers/net/sni_ave.c                           | 1 +
 drivers/net/zynq_gem.c                          | 1 +
 drivers/pci/pcie_dw_ti.c                        | 1 +
 drivers/pci/pcie_mediatek.c                     | 1 +
 drivers/phy/allwinner/phy-sun4i-usb.c           | 1 +
 drivers/phy/marvell/comphy_core.c               | 1 +
 drivers/phy/omap-usb2-phy.c                     | 1 +
 drivers/phy/phy-mtk-tphy.c                      | 1 +
 drivers/phy/phy-ti-am654.c                      | 1 +
 drivers/phy/ti-pipe3-phy.c                      | 1 +
 drivers/pinctrl/intel/pinctrl.c                 | 1 +
 drivers/pinctrl/mscc/mscc-common.c              | 1 +
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c     | 1 +
 drivers/pinctrl/nxp/pinctrl-imx.c               | 1 +
 drivers/pinctrl/nxp/pinctrl-mxs.c               | 1 +
 drivers/pinctrl/pinctrl_stm32.c                 | 1 +
 drivers/pinctrl/renesas/pfc.c                   | 1 +
 drivers/power/domain/meson-ee-pwrc.c            | 1 +
 drivers/power/domain/meson-gx-pwrc-vpu.c        | 1 +
 drivers/power/domain/mtk-power-domain.c         | 1 +
 drivers/power/domain/ti-sci-power-domain.c      | 1 +
 drivers/power/regulator/pbias_regulator.c       | 1 +
 drivers/ram/rockchip/dmc-rk3368.c               | 1 +
 drivers/remoteproc/rproc-elf-loader.c           | 1 +
 drivers/remoteproc/stm32_copro.c                | 1 +
 drivers/remoteproc/ti_k3_arm64_rproc.c          | 1 +
 drivers/remoteproc/ti_k3_dsp_rproc.c            | 1 +
 drivers/remoteproc/ti_k3_r5f_rproc.c            | 1 +
 drivers/reset/reset-mediatek.c                  | 1 +
 drivers/reset/reset-ti-sci.c                    | 1 +
 drivers/reset/reset-uclass.c                    | 1 +
 drivers/serial/ns16550.c                        | 1 +
 drivers/serial/serial_mtk.c                     | 3 ++-
 drivers/serial/serial_omap.c                    | 1 +
 drivers/serial/serial_sifive.c                  | 1 +
 drivers/serial/serial_zynq.c                    | 1 +
 drivers/smem/msm_smem.c                         | 2 ++
 drivers/soc/ti/k3-navss-ringacc.c               | 2 ++
 drivers/spi/atmel-quadspi.c                     | 1 +
 drivers/spi/cadence_qspi.c                      | 1 +
 drivers/spi/spi-mem.c                           | 1 +
 drivers/spi/ti_qspi.c                           | 1 +
 drivers/spi/zynqmp_gqspi.c                      | 1 +
 drivers/sysreset/sysreset-ti-sci.c              | 1 +
 drivers/sysreset/sysreset_syscon.c              | 1 +
 drivers/tee/optee/core.c                        | 1 +
 drivers/timer/ast_timer.c                       | 1 +
 drivers/timer/cadence-ttc.c                     | 1 +
 drivers/timer/timer-uclass.c                    | 1 +
 drivers/ufs/cdns-platform.c                     | 1 +
 drivers/ufs/ti-j721e-ufs.c                      | 1 +
 drivers/ufs/ufs.c                               | 1 +
 drivers/usb/cdns3/core.c                        | 1 +
 drivers/usb/cdns3/gadget.c                      | 2 ++
 drivers/usb/cdns3/host.c                        | 1 +
 drivers/usb/dwc3/core.c                         | 2 ++
 drivers/usb/dwc3/dwc3-omap.c                    | 1 +
 drivers/usb/dwc3/gadget.c                       | 1 +
 drivers/usb/dwc3/ti_usb_phy.c                   | 1 +
 drivers/usb/gadget/at91_udc.c                   | 2 ++
 drivers/usb/gadget/composite.c                  | 1 +
 drivers/usb/gadget/dwc2_udc_otg.c               | 1 +
 drivers/usb/gadget/f_mass_storage.c             | 1 +
 drivers/usb/gadget/pxa25x_udc.c                 | 1 +
 drivers/usb/gadget/udc/udc-core.c               | 1 +
 drivers/usb/host/ehci-generic.c                 | 1 +
 drivers/usb/host/ohci-da8xx.c                   | 1 +
 drivers/usb/host/ohci-generic.c                 | 1 +
 drivers/usb/musb-new/am35x.c                    | 1 +
 drivers/usb/musb-new/musb_core.c                | 1 +
 drivers/usb/musb-new/musb_dsps.c                | 1 +
 drivers/usb/musb-new/musb_gadget.c              | 1 +
 drivers/usb/musb-new/musb_host.c                | 1 +
 drivers/usb/musb-new/musb_uboot.c               | 1 +
 drivers/usb/musb-new/omap2430.c                 | 1 +
 drivers/video/exynos/exynos_mipi_dsi.c          | 1 +
 drivers/video/mipi_dsi.c                        | 1 +
 drivers/video/rockchip/rk3288_mipi.c            | 1 +
 drivers/video/rockchip/rk3399_mipi.c            | 1 +
 drivers/video/rockchip/rk_vop.c                 | 1 +
 drivers/video/tegra124/sor.c                    | 1 +
 drivers/virtio/virtio_mmio.c                    | 1 +
 drivers/virtio/virtio_pci_legacy.c              | 1 +
 drivers/virtio/virtio_pci_modern.c              | 1 +
 drivers/virtio/virtio_sandbox.c                 | 1 +
 drivers/watchdog/ast_wdt.c                      | 1 +
 drivers/watchdog/cdns_wdt.c                     | 1 +
 drivers/watchdog/sp805_wdt.c                    | 1 +
 drivers/watchdog/xilinx_tb_wdt.c                | 1 +
 fs/ubifs/debug.c                                | 1 +
 fs/ubifs/gc.c                                   | 1 +
 fs/ubifs/io.c                                   | 1 +
 fs/ubifs/log.c                                  | 1 +
 fs/ubifs/lpt.c                                  | 1 +
 fs/ubifs/lpt_commit.c                           | 1 +
 fs/ubifs/master.c                               | 1 +
 fs/ubifs/orphan.c                               | 1 +
 fs/ubifs/recovery.c                             | 1 +
 fs/ubifs/replay.c                               | 1 +
 fs/ubifs/sb.c                                   | 1 +
 fs/ubifs/scan.c                                 | 1 +
 fs/ubifs/super.c                                | 1 +
 fs/ubifs/tnc.c                                  | 1 +
 fs/ubifs/tnc_misc.c                             | 1 +
 fs/ubifs/ubifs.c                                | 1 +
 fs/yaffs2/yaffs_allocator.c                     | 1 +
 fs/yaffs2/yaffs_checkptrw.c                     | 1 +
 fs/yaffs2/yaffs_guts.c                          | 1 +
 fs/yaffs2/yaffs_summary.c                       | 1 +
 fs/yaffs2/yaffs_yaffs1.c                        | 1 +
 fs/yaffs2/yaffs_yaffs2.c                        | 1 +
 fs/yaffs2/yaffsfs.c                             | 1 +
 include/dm/device.h                             | 2 --
 include/dm/devres.h                             | 4 ++++
 lib/bch.c                                       | 1 +
 lib/crypto/asymmetric_type.c                    | 2 ++
 lib/crypto/pkcs7_parser.c                       | 1 +
 lib/crypto/public_key.c                         | 2 ++
 lib/crypto/x509_cert_parser.c                   | 1 +
 lib/crypto/x509_public_key.c                    | 2 ++
 lib/list_sort.c                                 | 1 +
 test/dm/devres.c                                | 1 +
 test/dm/regmap.c                                | 1 +
 test/dm/syscon.c                                | 1 +
 test/dm/test-fdt.c                              | 1 +
 242 files changed, 275 insertions(+), 4 deletions(-)

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..a1c265f46f 100644
--- a/arch/arm/mach-imx/cmd_nandbcb.c
+++ b/arch/arm/mach-imx/cmd_nandbcb.c
@@ -11,6 +11,7 @@
 
 #include <common.h>
 #include <nand.h>
+#include <dm/devres.h>
 
 #include <asm/io.h>
 #include <jffs2/jffs2.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-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 1b012f7f67..ecb9af1470 100644
--- a/arch/arm/mach-rockchip/rk3188/rk3188.c
+++ b/arch/arm/mach-rockchip/rk3188/rk3188.c
@@ -10,6 +10,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 e64ee86f08..1b97a2e9f2 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_rk3288.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 9572f7ea9c..05ba48ab27 100644
--- a/arch/arm/mach-rockchip/rk3288/rk3288.c
+++ b/arch/arm/mach-rockchip/rk3288/rk3288.c
@@ -17,6 +17,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/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 f0411c0a21..08f677ac4d 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_rk3399.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-stm32mp/pwr_regulator.c b/arch/arm/mach-stm32mp/pwr_regulator.c
index 9484645dbd..977cc7d348 100644
--- a/arch/arm/mach-stm32mp/pwr_regulator.c
+++ b/arch/arm/mach-stm32mp/pwr_regulator.c
@@ -8,6 +8,7 @@
 #include <errno.h>
 #include <regmap.h>
 #include <syscon.h>
+#include <linux/err.h>
 #include <power/pmic.h>
 #include <power/regulator.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/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/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index 1d4a54c902..d57a50de11 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -31,6 +31,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/cmd/gpio.c b/cmd/gpio.c
index eff36ab2af..5f4c7ff114 100644
--- a/cmd/gpio.c
+++ b/cmd/gpio.c
@@ -11,6 +11,7 @@
 #include <errno.h>
 #include <dm.h>
 #include <asm/gpio.h>
+#include <linux/err.h>
 
 __weak int name_to_gpio(const char *name)
 {
diff --git a/cmd/gpt.c b/cmd/gpt.c
index 0c4349f4b2..ca17070805 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -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/mtd.c b/cmd/mtd.c
index 1b6b8dda2b..21afce03ca 100644
--- a/cmd/mtd.c
+++ b/cmd/mtd.c
@@ -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>
 
diff --git a/cmd/ubi.c b/cmd/ubi.c
index 22ba5b1a2c..7fb4cdfc2a 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -19,6 +19,7 @@
 #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/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/block/blk-uclass.c b/drivers/block/blk-uclass.c
index ca8978f0e1..7771114491 100644
--- a/drivers/block/blk-uclass.c
+++ b/drivers/block/blk-uclass.c
@@ -10,6 +10,7 @@
 #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/clk/altera/clk-arria10.c b/drivers/clk/altera/clk-arria10.c
index 179869df45..a39cd34fe5 100644
--- a/drivers/clk/altera/clk-arria10.c
+++ b/drivers/clk/altera/clk-arria10.c
@@ -7,6 +7,7 @@
 #include <asm/io.h>
 #include <clk-uclass.h>
 #include <dm.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..d8562e131d 100644
--- a/drivers/clk/at91/clk-generated.c
+++ b/drivers/clk/at91/clk-generated.c
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <clk-uclass.h>
 #include <dm.h>
+#include <linux/err.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-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 5ef9035ece..4612fbcdc7 100644
--- a/drivers/clk/clk-ti-sci.c
+++ b/drivers/clk/clk-ti-sci.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <clk-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <k3-avs.h>
 
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 7ac580d661..a4f6b15e3d 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -10,10 +10,12 @@
 #include <clk.h>
 #include <clk-uclass.h>
 #include <dm.h>
-#include <dm/read.h>
 #include <dt-structs.h>
 #include <errno.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)
 {
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_ccf.c b/drivers/clk/clk_sandbox_ccf.c
index 9fa27229e1..0903c817a6 100644
--- a/drivers/clk/clk_sandbox_ccf.c
+++ b/drivers/clk/clk_sandbox_ccf.c
@@ -11,8 +11,10 @@
 #include <clk.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..628110de3e 100644
--- a/drivers/clk/clk_sandbox_test.c
+++ b/drivers/clk/clk_sandbox_test.c
@@ -7,6 +7,7 @@
 #include <dm.h>
 #include <clk.h>
 #include <asm/clk.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..66cbef15ab 100644
--- a/drivers/clk/clk_versal.c
+++ b/drivers/clk/clk_versal.c
@@ -13,6 +13,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_zynqmp.c b/drivers/clk/clk_zynqmp.c
index 72fc39fa47..a365b565e1 100644
--- a/drivers/clk/clk_zynqmp.c
+++ b/drivers/clk/clk_zynqmp.c
@@ -11,6 +11,7 @@
 #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-pfd.c b/drivers/clk/imx/clk-pfd.c
index 188b2b3b90..f0f2eeb4a7 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 fbb7b24d5e..77efd394e9 100644
--- a/drivers/clk/imx/clk-pllv3.c
+++ b/drivers/clk/imx/clk-pllv3.c
@@ -9,9 +9,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 "imx_clk_pllv3"
 
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/rockchip/clk_rk3188.c b/drivers/clk/rockchip/clk_rk3188.c
index 3ea9a81b32..82eea40063 100644
--- a/drivers/clk/rockchip/clk_rk3188.c
+++ b/drivers/clk/rockchip/clk_rk3188.c
@@ -20,6 +20,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_rk3288.c b/drivers/clk/rockchip/clk_rk3288.c
index 85d1b67e43..14dfa85942 100644
--- a/drivers/clk/rockchip/clk_rk3288.c
+++ b/drivers/clk/rockchip/clk_rk3288.c
@@ -21,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>
 
 DECLARE_GLOBAL_DATA_PTR;
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/core/devres.c b/drivers/core/devres.c
index 237b42653c..d98e80de26 100644
--- a/drivers/core/devres.c
+++ b/drivers/core/devres.c
@@ -14,6 +14,7 @@
 #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/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/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index 23d6ed0697..4859b3f32c 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -12,12 +12,14 @@
 #include <malloc.h>
 #include <asm/dma-mapping.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/read.h>
 #include <dm/of_access.h>
 #include <dma.h>
 #include <dma-uclass.h>
 #include <linux/delay.h>
 #include <dt-bindings/dma/k3-udma.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>
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index 62b1dc2006..5e37ee0570 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -12,6 +12,7 @@
 #include <errno.h>
 #include <mailbox.h>
 #include <dm/device.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/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c
index 2eb1547b4f..58e3e7b1f7 100644
--- a/drivers/gpio/dwapb_gpio.c
+++ b/drivers/gpio/dwapb_gpio.c
@@ -12,6 +12,7 @@
 #include <asm/io.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/root.h>
 #include <errno.h>
diff --git a/drivers/gpio/mscc_sgpio.c b/drivers/gpio/mscc_sgpio.c
index c899454ec4..3378ebb442 100644
--- a/drivers/gpio/mscc_sgpio.c
+++ b/drivers/gpio/mscc_sgpio.c
@@ -13,6 +13,7 @@
 #include <asm/io.h>
 #include <errno.h>
 #include <clk.h>
+#include <linux/err.h>
 
 #define MSCC_SGPIOS_PER_BANK	32
 #define MSCC_SGPIO_BANK_DEPTH	4
diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c
index 763183d649..3f7382a0c9 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/designware_i2c.c b/drivers/i2c/designware_i2c.c
index b8cdd1c661..03d6ca09f7 100644
--- a/drivers/i2c/designware_i2c.c
+++ b/drivers/i2c/designware_i2c.c
@@ -12,6 +12,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include "designware_i2c.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/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-mux-gpio.c b/drivers/i2c/muxes/i2c-mux-gpio.c
index e8b124f4f5..29e283ce25 100644
--- a/drivers/i2c/muxes/i2c-mux-gpio.c
+++ b/drivers/i2c/muxes/i2c-mux-gpio.c
@@ -11,6 +11,7 @@
 #include <asm-generic/gpio.h>
 #include <common.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/pinctrl.h>
 #include <fdtdec.h>
 #include <i2c.h>
diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c
index 4be41ddbf0..f37db31c3c 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/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/tegra186_bpmp.c b/drivers/misc/tegra186_bpmp.c
index 89e27dd526..489337c3d0 100644
--- a/drivers/misc/tegra186_bpmp.c
+++ b/drivers/misc/tegra186_bpmp.c
@@ -12,6 +12,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/mmc/am654_sdhci.c b/drivers/mmc/am654_sdhci.c
index 7cd5516197..37952d6ace 100644
--- a/drivers/mmc/am654_sdhci.c
+++ b/drivers/mmc/am654_sdhci.c
@@ -12,6 +12,7 @@
 #include <power-domain.h>
 #include <regmap.h>
 #include <sdhci.h>
+#include <linux/err.h>
 
 /* CTL_CFG Registers */
 #define CTL_CFG_2		0x14
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/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c
index f7b754bd9d..ab1ef8d77c 100644
--- a/drivers/mmc/fsl_esdhc_imx.c
+++ b/drivers/mmc/fsl_esdhc_imx.c
@@ -19,6 +19,7 @@
 #include <hwconfig.h>
 #include <mmc.h>
 #include <part.h>
+#include <linux/err.h>
 #include <power/regulator.h>
 #include <malloc.h>
 #include <fsl_esdhc_imx.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/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/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/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c
index 529eec9c45..83c32a361a 100644
--- a/drivers/mmc/zynq_sdhci.c
+++ b/drivers/mmc/zynq_sdhci.c
@@ -10,6 +10,7 @@
 #include <dm.h>
 #include <fdtdec.h>
 #include "mmc_private.h"
+#include <linux/err.h>
 #include <linux/libfdt.h>
 #include <malloc.h>
 #include <sdhci.h>
diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c
index 8aeccb016d..17df8b0ffc 100644
--- a/drivers/mtd/mtd_uboot.c
+++ b/drivers/mtd/mtd_uboot.c
@@ -7,6 +7,7 @@
 #include <env.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 838c288318..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>
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/raw/atmel_nand.c b/drivers/mtd/nand/raw/atmel_nand.c
index 31ad2cfa88..3526585349 100644
--- a/drivers/mtd/nand/raw/atmel_nand.c
+++ b/drivers/mtd/nand/raw/atmel_nand.c
@@ -13,6 +13,7 @@
 #include <common.h>
 #include <asm/gpio.h>
 #include <asm/arch/gpio.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..d3e39661e1 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
@@ -17,6 +17,8 @@
 #include <memalign.h>
 #include <nand.h>
 #include <clk.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..bb8aea2d01 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
@@ -2,6 +2,7 @@
 
 #include <common.h>
 #include "brcmnand_compat.h"
+#include <dm/devres.h>
 
 static char *devm_kvasprintf(struct udevice *dev, gfp_t gfp, const char *fmt,
 			     va_list ap)
diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
index f0b528485c..0bd7eb7f1f 100644
--- a/drivers/mtd/nand/raw/denali.c
+++ b/drivers/mtd/nand/raw/denali.c
@@ -8,8 +8,10 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <nand.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>
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..e179a780db 100644
--- a/drivers/mtd/nand/raw/pxa3xx_nand.c
+++ b/drivers/mtd/nand/raw/pxa3xx_nand.c
@@ -10,6 +10,8 @@
 #include <malloc.h>
 #include <fdtdec.h>
 #include <nand.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..cd5c31e76b 100644
--- a/drivers/mtd/nand/raw/sunxi_nand.c
+++ b/drivers/mtd/nand/raw/sunxi_nand.c
@@ -28,6 +28,8 @@
 #include <fdtdec.h>
 #include <memalign.h>
 #include <nand.h>
+#include <dm/devres.h>
+#include <linux/err.h>
 
 #include <linux/kernel.h>
 #include <linux/mtd/mtd.h>
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index fba8cc056a..d976c19b7a 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -24,6 +24,7 @@
 #include <errno.h>
 #include <spi.h>
 #include <spi-mem.h>
+#include <dm/devres.h>
 #include <linux/mtd/spinand.h>
 #endif
 
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/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
index 6e7fc2311e..277ec68bce 100644
--- a/drivers/mtd/spi/spi-nor-core.c
+++ b/drivers/mtd/spi/spi-nor-core.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <dm/devres.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..aec2613a09 100644
--- a/drivers/mtd/ubi/debug.c
+++ b/drivers/mtd/ubi/debug.c
@@ -10,6 +10,7 @@
 #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/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/designware.c b/drivers/net/designware.c
index 19fc34f771..aa33fd511b 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -17,6 +17,7 @@
 #include <malloc.h>
 #include <pci.h>
 #include <reset.h>
+#include <dm/devres.h>
 #include <linux/compiler.h>
 #include <linux/err.h>
 #include <linux/kernel.h>
diff --git a/drivers/net/dwmac_socfpga.c b/drivers/net/dwmac_socfpga.c
index b7bf5dbe69..66a5f95112 100644
--- a/drivers/net/dwmac_socfpga.c
+++ b/drivers/net/dwmac_socfpga.c
@@ -14,6 +14,7 @@
 #include <reset.h>
 #include <syscon.h>
 #include "designware.h"
+#include <linux/err.h>
 
 #include <asm/arch/system_manager.h>
 
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
index 5fe8500199..505fabd3fa 100644
--- a/drivers/net/mvneta.c
+++ b/drivers/net/mvneta.c
@@ -20,6 +20,7 @@
 #include <config.h>
 #include <malloc.h>
 #include <asm/io.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 917d06b6e0..d120278ab1 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -17,12 +17,14 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <dm/device-internal.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/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/sni_ave.c b/drivers/net/sni_ave.c
index 6d333e24ee..64e92abb03 100644
--- a/drivers/net/sni_ave.c
+++ b/drivers/net/sni_ave.c
@@ -8,6 +8,7 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <fdt_support.h>
+#include <linux/err.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <miiphy.h>
diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
index 78f94148b4..3cf6570fc2 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -25,6 +25,7 @@
 #include <asm/system.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/sys_proto.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 
 /* Bit/mask specification */
diff --git a/drivers/pci/pcie_dw_ti.c b/drivers/pci/pcie_dw_ti.c
index b37fc2de7f..199a3bb50a 100644
--- a/drivers/pci/pcie_dw_ti.c
+++ b/drivers/pci/pcie_dw_ti.c
@@ -12,6 +12,7 @@
 #include <syscon.h>
 #include <asm/io.h>
 #include <asm-generic/gpio.h>
+#include <linux/err.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
diff --git a/drivers/pci/pcie_mediatek.c b/drivers/pci/pcie_mediatek.c
index a0dcb258b0..1271227c6a 100644
--- a/drivers/pci/pcie_mediatek.c
+++ b/drivers/pci/pcie_mediatek.c
@@ -14,6 +14,7 @@
 #include <pci.h>
 #include <reset.h>
 #include <asm/io.h>
+#include <dm/devres.h>
 #include <linux/iopoll.h>
 #include <linux/list.h>
 
diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 5e8f87717f..f4ad4c3cc3 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -21,6 +21,7 @@
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/cpu.h>
+#include <linux/err.h>
 
 #define REG_ISCR			0x00
 #define REG_PHYCTL_A10			0x04
diff --git a/drivers/phy/marvell/comphy_core.c b/drivers/phy/marvell/comphy_core.c
index 9c24692629..d52f42df84 100644
--- a/drivers/phy/marvell/comphy_core.c
+++ b/drivers/phy/marvell/comphy_core.c
@@ -8,6 +8,7 @@
 #include <common.h>
 #include <dm.h>
 #include <fdtdec.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 #include <asm/io.h>
 
diff --git a/drivers/phy/omap-usb2-phy.c b/drivers/phy/omap-usb2-phy.c
index be3bb0d367..321569e4c0 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 3701481256..31345764a7 100644
--- a/drivers/phy/phy-mtk-tphy.c
+++ b/drivers/phy/phy-mtk-tphy.c
@@ -11,6 +11,7 @@
 #include <generic-phy.h>
 #include <mapmem.h>
 #include <asm/io.h>
+#include <dm/devres.h>
 
 #include <dt-bindings/phy/phy.h>
 
diff --git a/drivers/phy/phy-ti-am654.c b/drivers/phy/phy-ti-am654.c
index 39490124ea..1c7db0dd0f 100644
--- a/drivers/phy/phy-ti-am654.c
+++ b/drivers/phy/phy-ti-am654.c
@@ -18,6 +18,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/intel/pinctrl.c b/drivers/pinctrl/intel/pinctrl.c
index 4875a3b0b5..c4287ec406 100644
--- a/drivers/pinctrl/intel/pinctrl.c
+++ b/drivers/pinctrl/intel/pinctrl.c
@@ -28,6 +28,7 @@
 #include <asm/arch/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/mscc/mscc-common.c b/drivers/pinctrl/mscc/mscc-common.c
index bd3e6ea328..2d76c41dea 100644
--- a/drivers/pinctrl/mscc/mscc-common.c
+++ b/drivers/pinctrl/mscc/mscc-common.c
@@ -14,6 +14,7 @@
 #include <config.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/pinctrl.h>
 #include <dm/root.h>
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index f197f4a142..da1f091aec 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -20,6 +20,7 @@
 #include <config.h>
 #include <dm.h>
 #include <dm/device-internal.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..77a8a53202 100644
--- a/drivers/pinctrl/nxp/pinctrl-imx.c
+++ b/drivers/pinctrl/nxp/pinctrl-imx.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <mapmem.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..5147bdc3cc 100644
--- a/drivers/pinctrl/nxp/pinctrl-mxs.c
+++ b/drivers/pinctrl/nxp/pinctrl-mxs.c
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <dm/devres.h>
 #include <linux/io.h>
 #include <linux/err.h>
 #include <dm.h>
diff --git a/drivers/pinctrl/pinctrl_stm32.c b/drivers/pinctrl/pinctrl_stm32.c
index 3a235ae5a7..e0380c349a 100644
--- a/drivers/pinctrl/pinctrl_stm32.c
+++ b/drivers/pinctrl/pinctrl_stm32.c
@@ -6,6 +6,7 @@
 #include <asm/io.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..5ee11615de 100644
--- a/drivers/pinctrl/renesas/pfc.c
+++ b/drivers/pinctrl/renesas/pfc.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <dm.h>
 #include <errno.h>
+#include <dm/devres.h>
 #include <dm/pinctrl.h>
 #include <linux/io.h>
 #include <linux/sizes.h>
diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c
index 7f5d13e872..aa11866591 100644
--- a/drivers/power/domain/meson-ee-pwrc.c
+++ b/drivers/power/domain/meson-ee-pwrc.c
@@ -13,6 +13,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 */
 
diff --git a/drivers/power/domain/meson-gx-pwrc-vpu.c b/drivers/power/domain/meson-gx-pwrc-vpu.c
index bd69aea8dd..02f73548d6 100644
--- a/drivers/power/domain/meson-gx-pwrc-vpu.c
+++ b/drivers/power/domain/meson-gx-pwrc-vpu.c
@@ -13,6 +13,7 @@
 #include <syscon.h>
 #include <reset.h>
 #include <clk.h>
+#include <linux/err.h>
 
 enum {
 	VPU_PWRC_COMPATIBLE_GX		= 0,
diff --git a/drivers/power/domain/mtk-power-domain.c b/drivers/power/domain/mtk-power-domain.c
index 992ee51947..5084bff766 100644
--- a/drivers/power/domain/mtk-power-domain.c
+++ b/drivers/power/domain/mtk-power-domain.c
@@ -12,6 +12,7 @@
 #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>
diff --git a/drivers/power/domain/ti-sci-power-domain.c b/drivers/power/domain/ti-sci-power-domain.c
index b59af2b13b..3866db589a 100644
--- a/drivers/power/domain/ti-sci-power-domain.c
+++ b/drivers/power/domain/ti-sci-power-domain.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <power-domain-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <dt-bindings/soc/ti,sci_pm_domain.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/ram/rockchip/dmc-rk3368.c b/drivers/ram/rockchip/dmc-rk3368.c
index 9df8f8f4af..7dcfa2943f 100644
--- a/drivers/ram/rockchip/dmc-rk3368.c
+++ b/drivers/ram/rockchip/dmc-rk3368.c
@@ -18,6 +18,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/remoteproc/rproc-elf-loader.c b/drivers/remoteproc/rproc-elf-loader.c
index 538481241f..b2007fd31d 100644
--- a/drivers/remoteproc/rproc-elf-loader.c
+++ b/drivers/remoteproc/rproc-elf-loader.c
@@ -7,6 +7,7 @@
 #include <dm.h>
 #include <elf.h>
 #include <remoteproc.h>
+#include <linux/err.h>
 
 /**
  * struct resource_table - firmware resource table header
diff --git a/drivers/remoteproc/stm32_copro.c b/drivers/remoteproc/stm32_copro.c
index c25488f54d..80e8dffdbb 100644
--- a/drivers/remoteproc/stm32_copro.c
+++ b/drivers/remoteproc/stm32_copro.c
@@ -12,6 +12,7 @@
 #include <reset.h>
 #include <syscon.h>
 #include <asm/io.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..d048cf4161 100644
--- a/drivers/remoteproc/ti_k3_arm64_rproc.c
+++ b/drivers/remoteproc/ti_k3_arm64_rproc.c
@@ -15,6 +15,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include <power-domain.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..913aca36d6 100644
--- a/drivers/remoteproc/ti_k3_dsp_rproc.c
+++ b/drivers/remoteproc/ti_k3_dsp_rproc.c
@@ -15,6 +15,7 @@
 #include <reset.h>
 #include <asm/io.h>
 #include <power-domain.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..cecfb0ef86 100644
--- a/drivers/remoteproc/ti_k3_r5f_rproc.c
+++ b/drivers/remoteproc/ti_k3_r5f_rproc.c
@@ -13,6 +13,7 @@
 #include <clk.h>
 #include <reset.h>
 #include <asm/io.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-mediatek.c b/drivers/reset/reset-mediatek.c
index cfbf2af863..4684cbfb6a 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -12,6 +12,7 @@
 #include <regmap.h>
 #include <reset-uclass.h>
 #include <syscon.h>
+#include <linux/err.h>
 
 struct mediatek_reset_priv {
 	struct regmap *regmap;
diff --git a/drivers/reset/reset-ti-sci.c b/drivers/reset/reset-ti-sci.c
index 7b6f736f5e..99e3d9ad5c 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <reset-uclass.h>
+#include <linux/err.h>
 #include <linux/soc/ti/ti_sci_protocol.h>
 
 /**
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index bf1cba4124..8e6c0a4fd0 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -8,6 +8,7 @@
 #include <fdtdec.h>
 #include <reset.h>
 #include <reset-uclass.h>
+#include <dm/devres.h>
 
 static inline struct reset_ops *reset_dev_ops(struct udevice *dev)
 {
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 754b6e9921..3faf2cd4b9 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -12,6 +12,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_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_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_zynq.c b/drivers/serial/serial_zynq.c
index 7e486a68ff..c07375901b 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -14,6 +14,7 @@
 #include <asm/io.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..711ce626aa 100644
--- a/drivers/smem/msm_smem.c
+++ b/drivers/smem/msm_smem.c
@@ -8,9 +8,11 @@
 #include <common.h>
 #include <errno.h>
 #include <dm.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 64ebc0ba00..2eba1c1d18 100644
--- a/drivers/soc/ti/k3-navss-ringacc.c
+++ b/drivers/soc/ti/k3-navss-ringacc.c
@@ -11,9 +11,11 @@
 #include <asm/dma-mapping.h>
 #include <asm/bitops.h>
 #include <dm.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/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
index 7d9a54011d..195ea5fae6 100644
--- a/drivers/spi/atmel-quadspi.c
+++ b/drivers/spi/atmel-quadspi.c
@@ -15,6 +15,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <fdtdec.h>
+#include <linux/err.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
 #include <linux/ioport.h>
diff --git a/drivers/spi/cadence_qspi.c b/drivers/spi/cadence_qspi.c
index 8fd23a7702..2425f5ad8e 100644
--- a/drivers/spi/cadence_qspi.c
+++ b/drivers/spi/cadence_qspi.c
@@ -11,6 +11,7 @@
 #include <malloc.h>
 #include <reset.h>
 #include <spi.h>
+#include <linux/err.h>
 #include <linux/errno.h>
 #include "cadence_qspi.h"
 
diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
index 7788ab9953..c907729b54 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -7,6 +7,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.h>
 #include <linux/dmaengine.h>
 #include <linux/pm_runtime.h>
 #include "internals.h"
diff --git a/drivers/spi/ti_qspi.c b/drivers/spi/ti_qspi.c
index c3d9e7f2ee..1fdd0ca448 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/zynqmp_gqspi.c b/drivers/spi/zynqmp_gqspi.c
index 4cca418012..c05d46e084 100644
--- a/drivers/spi/zynqmp_gqspi.c
+++ b/drivers/spi/zynqmp_gqspi.c
@@ -16,6 +16,7 @@
 #include <spi.h>
 #include <ubi_uboot.h>
 #include <wait_bit.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/sysreset/sysreset-ti-sci.c b/drivers/sysreset/sysreset-ti-sci.c
index 890a607c4b..6caea3aab3 100644
--- a/drivers/sysreset/sysreset-ti-sci.c
+++ b/drivers/sysreset/sysreset-ti-sci.c
@@ -10,6 +10,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <sysreset.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..a7b175ee62 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -8,6 +8,7 @@
 #include <log.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/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/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/ufs/cdns-platform.c b/drivers/ufs/cdns-platform.c
index c80f4253e4..5bd0c1e0c7 100644
--- a/drivers/ufs/cdns-platform.c
+++ b/drivers/ufs/cdns-platform.c
@@ -9,6 +9,7 @@
 #include <common.h>
 #include <dm.h>
 #include <ufs.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..6e4d0cd3ac 100644
--- a/drivers/ufs/ti-j721e-ufs.c
+++ b/drivers/ufs/ti-j721e-ufs.c
@@ -7,6 +7,7 @@
 #include <clk.h>
 #include <common.h>
 #include <dm.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..512c63a8f2 100644
--- a/drivers/ufs/ufs.c
+++ b/drivers/ufs/ufs.c
@@ -11,6 +11,7 @@
 #include <charset.h>
 #include <common.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <dm/device-internal.h>
 #include <malloc.h>
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c
index 8c8e02169e..6f5e5af47d 100644
--- a/drivers/usb/cdns3/core.c
+++ b/drivers/usb/cdns3/core.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <dm.h>
 #include <dm/device-internal.h>
+#include <dm/devres.h>
 #include <dm/lists.h>
 #include <linux/kernel.h>
 #include <linux/io.h>
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
index 0e02b77965..e095760099 100644
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@ -57,6 +57,8 @@
  */
 
 #include <dm.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..cbf21d31dd 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -18,6 +18,8 @@
 #include <malloc.h>
 #include <dwc3-uboot.h>
 #include <asm/dma-mapping.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..7ffec12fc5 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -18,6 +18,7 @@
 #include <asm/io.h>
 #include <dm.h>
 #include <dwc3-omap-uboot.h>
+#include <dm/devres.h>
 #include <linux/usb/dwc3-omap.h>
 #include <linux/ioport.h>
 
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 4353dffb6b..677607ab32 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -17,6 +17,7 @@
 #include <cpu_func.h>
 #include <malloc.h>
 #include <asm/dma-mapping.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..a90868216a 100644
--- a/drivers/usb/dwc3/ti_usb_phy.c
+++ b/drivers/usb/dwc3/ti_usb_phy.c
@@ -19,6 +19,7 @@
 #include <common.h>
 #include <malloc.h>
 #include <ti-usb-phy-uboot.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 35f4147840..229a61affd 100644
--- a/drivers/usb/gadget/dwc2_udc_otg.c
+++ b/drivers/usb/gadget/dwc2_udc_otg.c
@@ -23,6 +23,7 @@
 #include <generic-phy.h>
 #include <malloc.h>
 #include <reset.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/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 8d1d90e3e3..52384b9afb 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -13,6 +13,7 @@
  *		       usb_
  */
 
+#include <dm/devres.h>
 #include <linux/compat.h>
 #include <malloc.h>
 #include <asm/cache.h>
diff --git a/drivers/usb/host/ehci-generic.c b/drivers/usb/host/ehci-generic.c
index 682a070306..80ac876d89 100644
--- a/drivers/usb/host/ehci-generic.c
+++ b/drivers/usb/host/ehci-generic.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <clk.h>
+#include <dm/devres.h>
 #include <dm/ofnode.h>
 #include <generic-phy.h>
 #include <reset.h>
diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c
index 233df57b4d..29a702052e 100644
--- a/drivers/usb/host/ohci-da8xx.c
+++ b/drivers/usb/host/ohci-da8xx.c
@@ -7,6 +7,7 @@
 #include <asm/io.h>
 #include <clk.h>
 #include <dm.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..7b6ec51704 100644
--- a/drivers/usb/host/ohci-generic.c
+++ b/drivers/usb/host/ohci-generic.c
@@ -6,6 +6,7 @@
 #include <common.h>
 #include <clk.h>
 #include <dm.h>
+#include <dm/devres.h>
 #include <dm/ofnode.h>
 #include <generic-phy.h>
 #include <reset.h>
diff --git a/drivers/usb/musb-new/am35x.c b/drivers/usb/musb-new/am35x.c
index bda099c63f..58cde22615 100644
--- a/drivers/usb/musb-new/am35x.c
+++ b/drivers/usb/musb-new/am35x.c
@@ -12,6 +12,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/clk.h>
diff --git a/drivers/usb/musb-new/musb_core.c b/drivers/usb/musb-new/musb_core.c
index ab5e3aa9d1..cc6e0a71c9 100644
--- a/drivers/usb/musb-new/musb_core.c
+++ b/drivers/usb/musb-new/musb_core.c
@@ -65,6 +65,7 @@
  */
 
 #ifndef __UBOOT__
+#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..d342eeba80 100644
--- a/drivers/usb/musb-new/musb_dsps.c
+++ b/drivers/usb/musb-new/musb_dsps.c
@@ -15,6 +15,7 @@
  */
 
 #ifndef __UBOOT__
+#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..74b645715d 100644
--- a/drivers/usb/musb-new/musb_gadget.c
+++ b/drivers/usb/musb-new/musb_gadget.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/devres.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..55ad8ead70 100644
--- a/drivers/usb/musb-new/musb_host.c
+++ b/drivers/usb/musb-new/musb_host.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#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..f4d0e1fdc2 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -1,6 +1,7 @@
 #include <common.h>
 #include <console.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..8a45b05613 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -13,6 +13,7 @@
 #include <serial.h>
 #include <dm/device-internal.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/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/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/rockchip/rk3288_mipi.c b/drivers/video/rockchip/rk3288_mipi.c
index 7c4a4cc53b..a6c222bcd9 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_rk3288.h>
diff --git a/drivers/video/rockchip/rk3399_mipi.c b/drivers/video/rockchip/rk3399_mipi.c
index a93b73400b..7c696bc1ea 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_rk3399.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/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/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_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/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..13952e1e97 100644
--- a/drivers/watchdog/cdns_wdt.c
+++ b/drivers/watchdog/cdns_wdt.c
@@ -11,6 +11,7 @@
 #include <wdt.h>
 #include <clk.h>
 #include <div64.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/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/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..388451512a 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -16,6 +16,7 @@
 #include <gzip.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_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_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/dm/device.h b/include/dm/device.h
index 1138a09149..a93fa22d5d 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -720,8 +720,6 @@ 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>
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/lib/bch.c b/lib/bch.c
index c4fac77d61..86709cc875 100644
--- a/lib/bch.c
+++ b/lib/bch.c
@@ -56,6 +56,7 @@
 #ifndef USE_HOSTCC
 #include <common.h>
 #include <ubi_uboot.h>
+#include <dm/devres.h>
 
 #include <linux/bitops.h>
 #else
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/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/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>
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/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/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/test-fdt.c b/test/dm/test-fdt.c
index d59c449ce0..64a94a521b 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>
-- 
2.25.0.rc1.283.g88dfdc4193-goog


^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 30/33] dm: core: Create a new header file for 'compat' features
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (28 preceding siblings ...)
  2020-01-12 19:06   ` Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 31/33] dm: core: Drop the inclusion of linux/compat.h in dm.h Simon Glass
                   ` (3 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

At present dm/device.h includes the linux-compatible features. This
requires including linux/compat.h which in turn includes a lot of headers.
One of these is malloc.h which we thus end up including in every file in
U-Boot. Apart from the inefficiency of this, it is problematic for sandbox
which needs to use the system malloc() in some files.

Move the compatibility features into a separate header file.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/arm/mach-imx/cmd_nandbcb.c               |  1 +
 arch/arm/mach-imx/imx8/image.c                |  1 +
 arch/arm/mach-mvebu/mbus.c                    |  1 +
 arch/arm/mach-rockchip/rk3288/rk3288.c        |  1 +
 arch/arm/mach-rockchip/rk3308/rk3308.c        |  1 +
 arch/arm/mach-socfpga/clock_manager_agilex.c  |  1 +
 arch/arm/mach-socfpga/clock_manager_arria10.c |  1 +
 arch/arm/mach-stm32mp/pwr_regulator.c         |  1 +
 arch/arm/mach-tegra/cboot.c                   |  1 +
 arch/arm/mach-zynq/clk.c                      |  1 +
 arch/arm/mach-zynq/timer.c                    |  1 +
 arch/mips/mach-mtmips/cpu.c                   |  1 +
 arch/mips/mach-pic32/cpu.c                    |  1 +
 arch/sandbox/cpu/cpu.c                        |  1 +
 arch/x86/cpu/apollolake/fsp_s.c               |  1 +
 arch/x86/cpu/apollolake/itss.c                |  1 +
 arch/x86/cpu/apollolake/spl.c                 |  1 +
 arch/x86/cpu/apollolake/uart.c                |  1 +
 arch/x86/cpu/qemu/e820.c                      |  1 +
 arch/x86/cpu/qfw_cpu.c                        |  1 +
 arch/x86/lib/coreboot_table.c                 |  1 +
 arch/x86/lib/fsp1/fsp_common.c                |  1 +
 arch/x86/lib/mrccache.c                       |  1 +
 arch/x86/lib/tables.c                         |  1 +
 board/compulab/common/common.c                |  1 +
 board/corscience/tricorder/tricorder.c        |  1 +
 board/gardena/smart-gateway-mt7688/board.c    |  1 +
 board/ge/common/vpd_reader.c                  |  1 +
 board/isee/igep003x/board.c                   |  1 +
 board/isee/igep00x0/igep00x0.c                |  1 +
 board/menlo/m53menlo/m53menlo.c               |  1 +
 board/microchip/pic32mzda/pic32mzda.c         |  1 +
 board/overo/overo.c                           |  1 +
 board/siemens/common/board.c                  |  1 +
 board/siemens/pxm2/board.c                    |  1 +
 board/siemens/rut/board.c                     |  1 +
 board/st/stm32mp1/stm32mp1.c                  |  1 +
 board/synopsys/hsdk/clk-lib.c                 |  1 +
 board/technexion/tao3530/tao3530.c            |  1 +
 board/ti/am335x/board.c                       |  1 +
 board/ti/am57xx/board.c                       |  1 +
 board/timll/devkit8000/devkit8000.c           |  1 +
 cmd/bootefi.c                                 |  1 +
 cmd/gpio.c                                    |  1 +
 cmd/host.c                                    |  1 +
 cmd/rng.c                                     |  1 +
 cmd/tpm-common.c                              |  1 +
 cmd/ubi.c                                     |  1 +
 cmd/usb_mass_storage.c                        |  1 +
 cmd/ximg.c                                    |  1 +
 common/android_ab.c                           |  1 +
 common/autoboot.c                             |  1 +
 common/image-fdt.c                            |  1 +
 common/image.c                                |  1 +
 common/usb.c                                  |  1 +
 common/usb_hub.c                              |  1 +
 drivers/adc/stm32-adc-core.c                  |  1 +
 drivers/adc/stm32-adc.c                       |  1 +
 drivers/axi/sandbox_store.c                   |  1 +
 drivers/block/blk-uclass.c                    |  1 +
 drivers/block/sandbox.c                       |  1 +
 drivers/clk/altera/clk-arria10.c              |  2 +
 drivers/clk/at91/clk-generated.c              |  1 +
 drivers/clk/at91/clk-h32mx.c                  |  1 +
 drivers/clk/at91/clk-peripheral.c             |  1 +
 drivers/clk/clk-cdce9xx.c                     |  1 +
 drivers/clk/clk-ti-sci.c                      |  2 +
 drivers/clk/clk-uclass.c                      |  1 +
 drivers/clk/clk_sandbox.c                     |  1 +
 drivers/clk/clk_sandbox_ccf.c                 |  1 +
 drivers/clk/clk_sandbox_test.c                |  2 +
 drivers/clk/clk_versal.c                      |  1 +
 drivers/clk/clk_vexpress_osc.c                |  1 +
 drivers/clk/clk_zynq.c                        |  1 +
 drivers/clk/clk_zynqmp.c                      |  2 +
 drivers/clk/imx/clk-imx8.c                    |  1 +
 drivers/clk/mvebu/armada-37xx-periph.c        |  1 +
 drivers/clk/mvebu/armada-37xx-tbg.c           |  1 +
 drivers/clk/rockchip/clk_px30.c               |  1 +
 drivers/clk/rockchip/clk_rk3036.c             |  1 +
 drivers/clk/rockchip/clk_rk3128.c             |  1 +
 drivers/clk/rockchip/clk_rk3188.c             |  1 +
 drivers/clk/rockchip/clk_rk322x.c             |  1 +
 drivers/clk/rockchip/clk_rk3288.c             |  1 +
 drivers/clk/rockchip/clk_rk3308.c             |  1 +
 drivers/clk/rockchip/clk_rk3328.c             |  1 +
 drivers/clk/rockchip/clk_rk3368.c             |  1 +
 drivers/clk/rockchip/clk_rk3399.c             |  1 +
 drivers/clk/rockchip/clk_rv1108.c             |  1 +
 drivers/clk/tegra/tegra-car-clk.c             |  1 +
 drivers/clk/uniphier/clk-uniphier-core.c      |  1 +
 drivers/core/devres.c                         |  1 +
 drivers/core/of_access.c                      |  1 +
 drivers/core/ofnode.c                         |  1 +
 drivers/core/syscon-uclass.c                  |  1 +
 drivers/ddr/altera/sdram_gen5.c               |  1 +
 drivers/ddr/altera/sdram_soc64.c              |  1 +
 drivers/dma/bcm6348-iudma.c                   |  1 +
 drivers/dma/dma-uclass.c                      |  1 +
 drivers/dma/sandbox-dma-test.c                |  1 +
 drivers/dma/ti/k3-udma.c                      |  1 +
 drivers/firmware/ti_sci.c                     |  2 +
 drivers/fpga/fpga.c                           |  1 +
 drivers/gpio/74x164_gpio.c                    |  1 +
 drivers/gpio/adi_gpio2.c                      |  1 +
 drivers/gpio/at91_gpio.c                      |  1 +
 drivers/gpio/atmel_pio4.c                     |  1 +
 drivers/gpio/da8xx_gpio.c                     |  1 +
 drivers/gpio/dwapb_gpio.c                     |  1 +
 drivers/gpio/gpio-rcar.c                      |  2 +
 drivers/gpio/kona_gpio.c                      |  1 +
 drivers/gpio/mpc83xx_gpio.c                   |  1 +
 drivers/gpio/mscc_sgpio.c                     |  1 +
 drivers/gpio/mvgpio.c                         |  1 +
 drivers/gpio/mxs_gpio.c                       |  1 +
 drivers/gpio/pca953x_gpio.c                   |  1 +
 drivers/gpio/pca9698.c                        |  1 +
 drivers/gpio/sh_pfc.c                         |  1 +
 drivers/gpio/spear_gpio.c                     |  1 +
 drivers/gpio/stm32_gpio.c                     |  1 +
 drivers/hwspinlock/hwspinlock-uclass.c        |  2 +
 drivers/hwspinlock/stm32_hwspinlock.c         |  1 +
 drivers/i2c/at91_i2c.c                        |  1 +
 drivers/i2c/designware_i2c.c                  |  2 +
 drivers/i2c/i2c-uniphier-f.c                  |  1 +
 drivers/i2c/i2c-uniphier.c                    |  1 +
 drivers/i2c/imx_lpi2c.c                       |  1 +
 drivers/i2c/muxes/i2c-arb-gpio-challenge.c    |  1 +
 drivers/i2c/muxes/i2c-mux-gpio.c              |  1 +
 drivers/i2c/muxes/i2c-mux-uclass.c            |  1 +
 drivers/i2c/muxes/pca954x.c                   |  1 +
 drivers/i2c/mxc_i2c.c                         |  1 +
 drivers/i2c/rcar_i2c.c                        |  1 +
 drivers/i2c/stm32f7_i2c.c                     |  1 +
 drivers/i2c/xilinx_xiic.c                     |  1 +
 drivers/led/led_gpio.c                        |  1 +
 drivers/mailbox/k3-sec-proxy.c                |  2 +
 drivers/mailbox/mailbox-uclass.c              |  1 +
 drivers/mailbox/sandbox-mbox-test.c           |  1 +
 drivers/mailbox/sandbox-mbox.c                |  1 +
 drivers/mailbox/stm32-ipcc.c                  |  2 +
 drivers/mailbox/tegra-hsp.c                   |  1 +
 drivers/mailbox/zynqmp-ipi.c                  |  1 +
 drivers/misc/imx8/scu_api.c                   |  1 +
 drivers/misc/k3_avs.c                         |  1 +
 drivers/misc/p2sb-uclass.c                    |  1 +
 drivers/misc/stm32_rcc.c                      |  1 +
 drivers/misc/tegra186_bpmp.c                  |  1 +
 drivers/misc/vexpress_config.c                |  1 +
 drivers/mmc/am654_sdhci.c                     |  1 +
 drivers/mmc/arm_pl180_mmci.c                  |  1 +
 drivers/mmc/bcm2835_sdhost.c                  |  1 +
 drivers/mmc/fsl_esdhc.c                       |  1 +
 drivers/mmc/fsl_esdhc_imx.c                   |  1 +
 drivers/mmc/jz_mmc.c                          |  1 +
 drivers/mmc/mmc-uclass.c                      |  2 +
 drivers/mmc/msm_sdhci.c                       |  1 +
 drivers/mmc/mtk-sd.c                          |  1 +
 drivers/mmc/renesas-sdhi.c                    |  2 +
 drivers/mmc/sdhci-cadence.c                   |  1 +
 drivers/mmc/sh_mmcif.c                        |  1 +
 drivers/mmc/sh_sdhi.c                         |  1 +
 drivers/mmc/snps_dw_mmc.c                     |  1 +
 drivers/mmc/socfpga_dw_mmc.c                  |  1 +
 drivers/mmc/stm32_sdmmc2.c                    |  1 +
 drivers/mmc/tmio-common.c                     |  1 +
 drivers/mmc/uniphier-sd.c                     |  2 +
 drivers/mmc/zynq_sdhci.c                      |  1 +
 drivers/mtd/hbmc-am654.c                      |  1 +
 drivers/mtd/mtd_uboot.c                       |  1 +
 drivers/mtd/nand/core.c                       |  1 +
 drivers/mtd/nand/raw/atmel_nand.c             |  1 +
 drivers/mtd/nand/raw/brcmnand/brcmnand.c      |  1 +
 .../mtd/nand/raw/brcmnand/brcmnand_compat.c   |  3 +-
 drivers/mtd/nand/raw/denali.c                 |  2 +
 drivers/mtd/nand/raw/denali_dt.c              |  1 +
 drivers/mtd/nand/raw/pxa3xx_nand.c            |  1 +
 drivers/mtd/nand/raw/sunxi_nand.c             |  2 +
 drivers/mtd/nand/raw/tegra_nand.c             |  1 +
 drivers/mtd/nand/raw/vf610_nfc.c              |  1 +
 drivers/mtd/nand/spi/core.c                   |  1 +
 drivers/mtd/nand/spi/gigadevice.c             |  1 +
 drivers/mtd/nand/spi/macronix.c               |  1 +
 drivers/mtd/nand/spi/micron.c                 |  1 +
 drivers/mtd/nand/spi/winbond.c                |  1 +
 drivers/mtd/renesas_rpc_hf.c                  |  2 +
 drivers/mtd/spi/sf-uclass.c                   |  1 +
 drivers/mtd/spi/spi-nor-core.c                |  1 +
 drivers/mtd/spi/spi-nor-tiny.c                |  1 +
 drivers/mtd/ubi/debug.c                       |  1 +
 drivers/mtd/ubi/misc.c                        |  1 +
 drivers/mtd/ubi/upd.c                         |  1 +
 drivers/net/bcm6348-eth.c                     |  1 +
 drivers/net/bcm6368-eth.c                     |  2 +
 drivers/net/designware.c                      |  1 +
 drivers/net/dwc_eth_qos.c                     |  1 +
 drivers/net/dwmac_socfpga.c                   |  1 +
 drivers/net/e1000.c                           |  1 +
 drivers/net/e1000_spi.c                       |  1 +
 drivers/net/fsl-mc/dpio/qbman_portal.c        |  1 +
 drivers/net/fsl-mc/mc.c                       |  1 +
 drivers/net/fsl_enetc.c                       |  1 +
 drivers/net/ftgmac100.c                       |  2 +
 drivers/net/higmacv300.c                      |  1 +
 drivers/net/mscc_eswitch/jr2_switch.c         |  1 +
 drivers/net/mscc_eswitch/luton_switch.c       |  1 +
 drivers/net/mscc_eswitch/ocelot_switch.c      |  1 +
 drivers/net/mscc_eswitch/serval_switch.c      |  1 +
 drivers/net/mscc_eswitch/servalt_switch.c     |  1 +
 drivers/net/mtk_eth.c                         |  1 +
 drivers/net/mvneta.c                          |  1 +
 drivers/net/mvpp2.c                           |  1 +
 drivers/net/pch_gbe.c                         |  1 +
 drivers/net/pfe_eth/pfe_driver.c              |  1 +
 drivers/net/pfe_eth/pfe_eth.c                 |  1 +
 drivers/net/pfe_eth/pfe_firmware.c            |  1 +
 drivers/net/pfe_eth/pfe_mdio.c                |  1 +
 drivers/net/phy/fixed.c                       |  1 +
 drivers/net/pic32_eth.c                       |  1 +
 drivers/net/sandbox-raw-bus.c                 |  1 +
 drivers/net/sni_ave.c                         |  8 +-
 drivers/net/sun8i_emac.c                      |  1 +
 drivers/net/sunxi_emac.c                      |  1 +
 drivers/net/ti/am65-cpsw-nuss.c               |  2 +
 drivers/net/ti/cpsw-common.c                  |  1 +
 drivers/net/ti/cpsw.c                         |  1 +
 drivers/net/ti/cpsw_mdio.c                    |  1 +
 drivers/net/zynq_gem.c                        |  1 +
 drivers/nvme/nvme.c                           |  2 +
 drivers/pci/pci-aardvark.c                    |  1 +
 drivers/pci/pci-uclass.c                      |  1 +
 drivers/pci/pci_mvebu.c                       |  1 +
 drivers/pci/pcie_dw_ti.c                      |  1 +
 drivers/pci/pcie_fsl.c                        |  1 +
 drivers/pci/pcie_imx.c                        |  1 +
 drivers/pci/pcie_intel_fpga.c                 |  1 +
 drivers/pci/pcie_mediatek.c                   |  1 +
 drivers/phy/allwinner/phy-sun4i-usb.c         |  1 +
 drivers/phy/bcm6318-usbh-phy.c                |  1 +
 drivers/phy/bcm6348-usbh-phy.c                |  1 +
 drivers/phy/bcm6358-usbh-phy.c                |  1 +
 drivers/phy/bcm6368-usbh-phy.c                |  1 +
 drivers/phy/marvell/comphy_core.c             |  1 +
 drivers/phy/meson-g12a-usb2.c                 |  1 +
 drivers/phy/meson-g12a-usb3-pcie.c            |  1 +
 drivers/phy/meson-gxl-usb2.c                  |  1 +
 drivers/phy/meson-gxl-usb3.c                  |  1 +
 drivers/phy/phy-mtk-tphy.c                    |  2 +
 drivers/phy/phy-rcar-gen2.c                   |  2 +
 drivers/phy/phy-rcar-gen3.c                   |  1 +
 drivers/phy/phy-stm32-usbphyc.c               |  1 +
 drivers/phy/phy-ti-am654.c                    |  1 +
 drivers/pinctrl/broadcom/pinctrl-bcm6838.c    |  1 +
 drivers/pinctrl/intel/pinctrl.c               |  1 +
 drivers/pinctrl/meson/pinctrl-meson.c         |  2 +
 drivers/pinctrl/mscc/mscc-common.c            |  1 +
 .../pinctrl/mtmips/pinctrl-mtmips-common.c    |  1 +
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c   |  2 +
 drivers/pinctrl/nxp/pinctrl-imx.c             |  2 +
 drivers/pinctrl/nxp/pinctrl-mxs.c             |  1 +
 drivers/pinctrl/pinctrl-generic.c             |  1 +
 drivers/pinctrl/pinctrl-single.c              |  1 +
 drivers/pinctrl/pinctrl-stmfx.c               |  1 +
 drivers/pinctrl/pinctrl-uclass.c              |  2 +
 drivers/pinctrl/pinctrl_stm32.c               |  2 +
 drivers/pinctrl/renesas/pfc.c                 |  1 +
 .../pinctrl/uniphier/pinctrl-uniphier-core.c  |  1 +
 drivers/power/domain/bcm6328-power-domain.c   |  1 +
 .../power/domain/imx8-power-domain-legacy.c   |  1 +
 drivers/power/domain/imx8-power-domain.c      |  1 +
 drivers/power/domain/imx8m-power-domain.c     |  1 +
 drivers/power/domain/meson-ee-pwrc.c          |  1 +
 drivers/power/domain/meson-gx-pwrc-vpu.c      |  1 +
 drivers/power/domain/mtk-power-domain.c       |  1 +
 drivers/power/domain/power-domain-uclass.c    |  1 +
 .../power/domain/sandbox-power-domain-test.c  |  1 +
 drivers/power/domain/sandbox-power-domain.c   |  1 +
 drivers/power/domain/tegra186-power-domain.c  |  1 +
 drivers/power/domain/ti-sci-power-domain.c    |  2 +
 drivers/power/pmic/fan53555.c                 |  1 +
 drivers/power/pmic/i2c_pmic_emul.c            |  1 +
 drivers/power/pmic/stpmic1.c                  |  1 +
 drivers/power/regulator/pwm_regulator.c       |  1 +
 drivers/power/regulator/stm32-vrefbuf.c       |  1 +
 drivers/power/regulator/tps62360_regulator.c  |  1 +
 drivers/ram/k3-am654-ddrss.c                  |  1 +
 drivers/ram/k3-j721e/k3-j721e-ddrss.c         |  1 +
 drivers/ram/stm32_sdram.c                     |  1 +
 drivers/remoteproc/k3_system_controller.c     |  1 +
 drivers/remoteproc/rproc-elf-loader.c         |  3 +-
 drivers/remoteproc/stm32_copro.c              |  1 +
 drivers/remoteproc/ti_k3_arm64_rproc.c        |  1 +
 drivers/remoteproc/ti_k3_dsp_rproc.c          |  2 +
 drivers/remoteproc/ti_k3_r5f_rproc.c          |  2 +
 drivers/reset/reset-bcm6345.c                 |  1 +
 drivers/reset/reset-hisilicon.c               |  1 +
 drivers/reset/reset-imx7.c                    |  1 +
 drivers/reset/reset-mediatek.c                |  1 +
 drivers/reset/reset-meson.c                   |  1 +
 drivers/reset/reset-mtmips.c                  |  1 +
 drivers/reset/reset-rockchip.c                |  1 +
 drivers/reset/reset-socfpga.c                 |  1 +
 drivers/reset/reset-sunxi.c                   |  1 +
 drivers/reset/reset-ti-sci.c                  |  2 +
 drivers/reset/reset-uclass.c                  |  1 +
 drivers/reset/reset-uniphier.c                |  2 +
 drivers/reset/sandbox-reset-test.c            |  1 +
 drivers/reset/sandbox-reset.c                 |  1 +
 drivers/reset/sti-reset.c                     |  1 +
 drivers/reset/stm32-reset.c                   |  1 +
 drivers/reset/tegra-car-reset.c               |  1 +
 drivers/reset/tegra186-reset.c                |  1 +
 drivers/rtc/ds3232.c                          |  1 +
 drivers/rtc/rv3029.c                          |  1 +
 drivers/rtc/stm32_rtc.c                       |  2 +
 drivers/serial/atmel_usart.c                  |  1 +
 drivers/serial/serial-uclass.c                |  1 +
 drivers/serial/serial_bcm6345.c               |  1 +
 drivers/serial/serial_lpuart.c                |  1 +
 drivers/serial/serial_msm.c                   |  1 +
 drivers/serial/serial_pic32.c                 |  1 +
 drivers/serial/serial_stm32.c                 |  1 +
 drivers/serial/serial_zynq.c                  |  1 +
 drivers/smem/msm_smem.c                       |  1 +
 drivers/soc/ti/k3-navss-ringacc.c             |  1 +
 drivers/sound/sound-uclass.c                  |  1 +
 drivers/spi/atmel-quadspi.c                   |  2 +
 drivers/spi/bcm63xx_hsspi.c                   |  1 +
 drivers/spi/bcm63xx_spi.c                     |  1 +
 drivers/spi/cadence_qspi.c                    |  1 +
 drivers/spi/designware_spi.c                  |  1 +
 drivers/spi/mvebu_a3700_spi.c                 |  1 +
 drivers/spi/mxc_spi.c                         |  1 +
 drivers/spi/spi-mem-nodm.c                    |  1 +
 drivers/spi/spi-mem.c                         |  1 +
 drivers/spi/spi-sunxi.c                       |  1 +
 drivers/spi/stm32_qspi.c                      |  1 +
 drivers/spi/stm32_spi.c                       |  2 +
 drivers/spi/uniphier_spi.c                    |  1 +
 drivers/spi/zynqmp_gqspi.c                    |  1 +
 drivers/spmi/spmi-msm.c                       |  1 +
 drivers/sysreset/sysreset-ti-sci.c            |  1 +
 drivers/tee/optee/core.c                      |  1 +
 drivers/tee/optee/rpmb.c                      |  1 +
 drivers/tee/optee/supplicant.c                |  1 +
 drivers/tee/tee-uclass.c                      |  3 +-
 drivers/timer/dw-apb-timer.c                  |  2 +
 drivers/timer/ostm_timer.c                    |  1 +
 drivers/timer/stm32_timer.c                   |  1 +
 drivers/ufs/cdns-platform.c                   |  1 +
 drivers/ufs/ti-j721e-ufs.c                    |  1 +
 drivers/ufs/ufs.c                             |  1 +
 drivers/usb/cdns3/cdns3-ti.c                  |  1 +
 drivers/usb/cdns3/core.c                      |  1 +
 drivers/usb/cdns3/drd.c                       |  1 +
 drivers/usb/cdns3/ep0.c                       |  1 +
 drivers/usb/cdns3/gadget.c                    |  1 +
 drivers/usb/dwc3/core.c                       |  1 +
 drivers/usb/dwc3/dwc3-omap.c                  |  1 +
 drivers/usb/dwc3/dwc3-uniphier.c              |  1 +
 drivers/usb/dwc3/ep0.c                        |  1 +
 drivers/usb/dwc3/gadget.c                     |  1 +
 drivers/usb/dwc3/ti_usb_phy.c                 |  1 +
 drivers/usb/gadget/dwc2_udc_otg.c             |  1 +
 drivers/usb/gadget/storage_common.c           |  1 +
 drivers/usb/gadget/udc/udc-core.c             |  1 +
 drivers/usb/host/dwc2.c                       |  1 +
 drivers/usb/host/ehci-atmel.c                 |  1 +
 drivers/usb/host/ehci-generic.c               |  1 +
 drivers/usb/host/ehci-hcd.c                   |  1 +
 drivers/usb/host/ohci-da8xx.c                 |  2 +
 drivers/usb/host/ohci-generic.c               |  1 +
 drivers/usb/host/r8a66597-hcd.c               |  1 +
 drivers/usb/host/xhci-rcar.c                  |  2 +
 drivers/usb/musb-new/am35x.c                  |  1 +
 drivers/usb/musb-new/da8xx.c                  |  1 +
 drivers/usb/musb-new/musb_core.c              |  1 +
 drivers/usb/musb-new/musb_dsps.c              |  1 +
 drivers/usb/musb-new/musb_gadget.c            |  1 +
 drivers/usb/musb-new/musb_gadget_ep0.c        |  1 +
 drivers/usb/musb-new/musb_host.c              |  1 +
 drivers/usb/musb-new/musb_uboot.c             |  1 +
 drivers/usb/musb-new/omap2430.c               |  1 +
 drivers/usb/musb-new/pic32.c                  |  1 +
 drivers/usb/musb-new/sunxi.c                  |  2 +
 drivers/usb/musb-new/ti-musb.c                |  1 +
 drivers/usb/phy/omap_usb_phy.c                |  1 +
 drivers/video/atmel_hlcdfb.c                  |  1 +
 drivers/video/console_truetype.c              |  1 +
 drivers/video/da8xx-fb.c                      |  1 +
 drivers/video/dw_mipi_dsi.c                   |  1 +
 drivers/video/hitachi_tx18d42vm_lcd.c         |  1 +
 drivers/video/mali_dp.c                       |  2 +
 drivers/video/mvebu_lcd.c                     |  1 +
 drivers/video/mxsfb.c                         |  1 +
 drivers/video/orisetech_otm8009a.c            |  1 +
 drivers/video/pwm_backlight.c                 |  1 +
 drivers/video/raydium-rm68200.c               |  1 +
 drivers/video/rockchip/rk3288_hdmi.c          |  1 +
 drivers/video/rockchip/rk_edp.c               |  1 +
 drivers/video/sandbox_osd.c                   |  1 +
 drivers/video/scf0403_lcd.c                   |  1 +
 drivers/video/ssd2828.c                       |  1 +
 drivers/video/stm32/stm32_dsi.c               |  1 +
 drivers/video/stm32/stm32_ltdc.c              |  1 +
 drivers/video/video-uclass.c                  |  1 +
 drivers/virtio/virtio-uclass.c                |  1 +
 drivers/virtio/virtio_ring.c                  |  1 +
 drivers/w1-eeprom/ds2502.c                    |  1 +
 drivers/w1/mxc_w1.c                           |  1 +
 drivers/watchdog/armada-37xx-wdt.c            |  1 +
 drivers/watchdog/cdns_wdt.c                   |  1 +
 fs/ext4/ext4_write.c                          |  1 +
 fs/ext4/ext4fs.c                              |  1 +
 fs/fat/fat_write.c                            |  1 +
 fs/sandbox/sandboxfs.c                        |  1 +
 fs/ubifs/lprops.c                             |  1 +
 fs/ubifs/ubifs.c                              |  1 +
 fs/yaffs2/yaffs_nandif.c                      |  1 +
 fs/yaffs2/yaffs_uboot_glue.c                  |  1 +
 include/dm/device.h                           | 71 ---------------
 include/dm/device_compat.h                    | 86 +++++++++++++++++++
 include/linux/clk-provider.h                  |  1 +
 lib/bch.c                                     |  1 +
 lib/binman.c                                  |  1 +
 lib/bzip2/bzlib.c                             |  1 +
 lib/crypto/rsa_helper.c                       |  1 +
 lib/efi/efi.c                                 |  1 +
 lib/efi/efi_app.c                             |  1 +
 lib/efi/efi_stub.c                            |  1 +
 lib/efi_driver/efi_block_device.c             |  1 +
 lib/efi_driver/efi_uclass.c                   |  1 +
 lib/efi_loader/efi_console.c                  |  1 +
 lib/efi_loader/efi_runtime.c                  |  1 +
 lib/fdtdec.c                                  |  1 +
 lib/libavb/avb_cmdline.c                      |  1 +
 lib/libavb/avb_descriptor.c                   |  1 +
 lib/libavb/avb_rsa.c                          |  1 +
 lib/libavb/avb_slot_verify.c                  |  1 +
 lib/libavb/avb_sysdeps_posix.c                |  1 +
 lib/libavb/avb_util.c                         |  1 +
 lib/linux_compat.c                            |  1 +
 lib/lmb.c                                     |  1 +
 lib/rsa/rsa-sign.c                            |  1 +
 lib/rsa/rsa-verify.c                          |  1 +
 lib/zstd/decompress.c                         |  1 +
 lib/zstd/zstd_common.c                        |  1 +
 net/mdio-uclass.c                             |  3 +
 post/post.c                                   |  1 +
 test/dm/clk.c                                 |  1 +
 test/dm/dma.c                                 |  1 +
 test/dm/gpio.c                                |  1 +
 test/dm/mailbox.c                             |  1 +
 test/dm/power-domain.c                        |  1 +
 test/dm/reset.c                               |  1 +
 test/dm/spmi.c                                |  1 +
 test/dm/tee.c                                 |  1 +
 test/dm/video.c                               |  1 +
 test/lib/lmb.c                                |  1 +
 test/unicode_ut.c                             |  1 +
 460 files changed, 593 insertions(+), 77 deletions(-)
 create mode 100644 include/dm/device_compat.h

diff --git a/arch/arm/mach-imx/cmd_nandbcb.c b/arch/arm/mach-imx/cmd_nandbcb.c
index a1c265f46f..b3e59b1b00 100644
--- a/arch/arm/mach-imx/cmd_nandbcb.c
+++ b/arch/arm/mach-imx/cmd_nandbcb.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <malloc.h>
 #include <nand.h>
 #include <dm/devres.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-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/rk3288/rk3288.c b/arch/arm/mach-rockchip/rk3288/rk3288.c
index 05ba48ab27..7b1f8c3cc8 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>
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-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 977cc7d348..4559ef599d 100644
--- a/arch/arm/mach-stm32mp/pwr_regulator.c
+++ b/arch/arm/mach-stm32mp/pwr_regulator.c
@@ -8,6 +8,7 @@
 #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 0762144ecf..4906fa1598 100644
--- a/arch/arm/mach-tegra/cboot.c
+++ b/arch/arm/mach-tegra/cboot.c
@@ -7,6 +7,7 @@
 #include <env.h>
 #include <fdt_support.h>
 #include <fdtdec.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 8658abb457..666fa7bdde 100644
--- a/arch/arm/mach-zynq/timer.c
+++ b/arch/arm/mach-zynq/timer.c
@@ -31,6 +31,7 @@
 #include <common.h>
 #include <div64.h>
 #include <dm.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 7afc2c5940..8c28bbcc00 100644
--- a/arch/mips/mach-mtmips/cpu.c
+++ b/arch/mips/mach-mtmips/cpu.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <dm.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/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/x86/cpu/apollolake/fsp_s.c b/arch/x86/cpu/apollolake/fsp_s.c
index 9804227f80..92ecacf98a 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/itss.c b/arch/x86/cpu/apollolake/itss.c
index 8789f8e6bb..a44770b7d4 100644
--- a/arch/x86/cpu/apollolake/itss.c
+++ b/arch/x86/cpu/apollolake/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/arch/itss.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/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 12410d9b71..94eeab9748 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/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 d57a50de11..0e17478175 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -15,6 +15,7 @@
 #include <i2c.h>
 #include <init.h>
 #include <led.h>
+#include <malloc.h>
 #include <memalign.h>
 #include <misc.h>
 #include <mtd.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/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 c755821b74..9e97fdd97e 100644
--- a/board/ti/am57xx/board.c
+++ b/board/ti/am57xx/board.c
@@ -10,6 +10,7 @@
 #include <common.h>
 #include <env.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/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>
diff --git a/cmd/gpio.c b/cmd/gpio.c
index 5f4c7ff114..8ce8ba909d 100644
--- a/cmd/gpio.c
+++ b/cmd/gpio.c
@@ -10,6 +10,7 @@
 #include <command.h>
 #include <errno.h>
 #include <dm.h>
+#include <malloc.h>
 #include <asm/gpio.h>
 #include <linux/err.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;
diff --git a/cmd/rng.c b/cmd/rng.c
index 36ca7a101c..76367fed94 100644
--- a/cmd/rng.c
+++ b/cmd/rng.c
@@ -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..9eecb12ec2 100644
--- a/cmd/tpm-common.c
+++ b/cmd/tpm-common.c
@@ -7,6 +7,7 @@
 #include <command.h>
 #include <dm.h>
 #include <env.h>
+#include <malloc.h>
 #include <asm/unaligned.h>
 #include <linux/string.h>
 #include <tpm-common.h>
diff --git a/cmd/ubi.c b/cmd/ubi.c
index 7fb4cdfc2a..cecf251fdb 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -15,6 +15,7 @@
 #include <command.h>
 #include <env.h>
 #include <exports.h>
+#include <malloc.h>
 #include <memalign.h>
 #include <mtd.h>
 #include <nand.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 22b2037a33..5c26d1d04f 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/image-fdt.c b/common/image-fdt.c
index 48388488d9..3b69d5f60f 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>
diff --git a/common/image.c b/common/image.c
index 75d5dd944f..d44983b028 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/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 7771114491..7c39aa5f2f 100644
--- a/drivers/block/blk-uclass.c
+++ b/drivers/block/blk-uclass.c
@@ -7,6 +7,7 @@
 #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>
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 a39cd34fe5..affeb31fc2 100644
--- a/drivers/clk/altera/clk-arria10.c
+++ b/drivers/clk/altera/clk-arria10.c
@@ -4,9 +4,11 @@
  */
 
 #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/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
index d8562e131d..a80f259a72 100644
--- a/drivers/clk/at91/clk-generated.c
+++ b/drivers/clk/at91/clk-generated.c
@@ -7,6 +7,7 @@
 #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>
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/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-ti-sci.c b/drivers/clk/clk-ti-sci.c
index 4612fbcdc7..d65ee963f0 100644
--- a/drivers/clk/clk-ti-sci.c
+++ b/drivers/clk/clk-ti-sci.c
@@ -12,6 +12,8 @@
 #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>
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index a4f6b15e3d..4544f4c7f7 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <dt-structs.h>
 #include <errno.h>
+#include <malloc.h>
 #include <dm/devres.h>
 #include <dm/read.h>
 #include <linux/clk-provider.h>
diff --git a/drivers/clk/clk_sandbox.c b/drivers/clk/clk_sandbox.c
index cc084b0644..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 {
diff --git a/drivers/clk/clk_sandbox_ccf.c b/drivers/clk/clk_sandbox_ccf.c
index 0903c817a6..3543bea70d 100644
--- a/drivers/clk/clk_sandbox_ccf.c
+++ b/drivers/clk/clk_sandbox_ccf.c
@@ -9,6 +9,7 @@
 #include <common.h>
 #include <dm.h>
 #include <clk.h>
+#include <malloc.h>
 #include <asm/clk.h>
 #include <clk-uclass.h>
 #include <dm/devres.h>
diff --git a/drivers/clk/clk_sandbox_test.c b/drivers/clk/clk_sandbox_test.c
index 628110de3e..873383856f 100644
--- a/drivers/clk/clk_sandbox_test.c
+++ b/drivers/clk/clk_sandbox_test.c
@@ -6,7 +6,9 @@
 #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 {
diff --git a/drivers/clk/clk_versal.c b/drivers/clk/clk_versal.c
index 66cbef15ab..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>
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 a365b565e1..e0eb897da8 100644
--- a/drivers/clk/clk_zynqmp.c
+++ b/drivers/clk/clk_zynqmp.c
@@ -6,6 +6,8 @@
  */
 
 #include <common.h>
+#include <malloc.h>
+#include <dm/device_compat.h>
 #include <linux/bitops.h>
 #include <clk-uclass.h>
 #include <clk.h>
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/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 82eea40063..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>
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 14dfa85942..ebb6283471 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>
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 9020a9f202..e0890d0075 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/tegra/tegra-car-clk.c b/drivers/clk/tegra/tegra-car-clk.c
index 07e8734b3a..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>
 
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/devres.c b/drivers/core/devres.c
index d98e80de26..457e1309c5 100644
--- a/drivers/core/devres.c
+++ b/drivers/core/devres.c
@@ -10,6 +10,7 @@
 #define LOG_CATEGORY LOGC_DEVRES
 
 #include <common.h>
+#include <malloc.h>
 #include <linux/compat.h>
 #include <linux/kernel.h>
 #include <linux/list.h>
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..e523c2e2bf 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>
diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c
index 5bb38e329c..ac2de47515 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/ddr/altera/sdram_gen5.c b/drivers/ddr/altera/sdram_gen5.c
index 435f42bc0a..7488fe7e7c 100644
--- a/drivers/ddr/altera/sdram_gen5.c
+++ b/drivers/ddr/altera/sdram_gen5.c
@@ -14,6 +14,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 985a108b1c..1f321e3f58 100644
--- a/drivers/ddr/altera/sdram_soc64.c
+++ b/drivers/ddr/altera/sdram_soc64.c
@@ -18,6 +18,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/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 a0159d7888..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>
diff --git a/drivers/dma/sandbox-dma-test.c b/drivers/dma/sandbox-dma-test.c
index 5aa7838ff5..2d020e0f8f 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>
diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index 4859b3f32c..e55b9a6ecf 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -12,6 +12,7 @@
 #include <malloc.h>
 #include <asm/dma-mapping.h>
 #include <dm.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <dm/read.h>
 #include <dm/of_access.h>
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index 5e37ee0570..99b2e5dfed 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -11,7 +11,9 @@
 #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>
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 bd5a366aef..eb1b22c187 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 58e3e7b1f7..e3439eebb5 100644
--- a/drivers/gpio/dwapb_gpio.c
+++ b/drivers/gpio/dwapb_gpio.c
@@ -12,6 +12,7 @@
 #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>
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
index a8c5b7f879..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>
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 3378ebb442..c65ca81728 100644
--- a/drivers/gpio/mscc_sgpio.c
+++ b/drivers/gpio/mscc_sgpio.c
@@ -13,6 +13,7 @@
 #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
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 07a3356b3c..5527e575e9 100644
--- a/drivers/gpio/pca953x_gpio.c
+++ b/drivers/gpio/pca953x_gpio.c
@@ -27,6 +27,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/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 03d6ca09f7..5dedb43acf 100644
--- a/drivers/i2c/designware_i2c.c
+++ b/drivers/i2c/designware_i2c.c
@@ -8,10 +8,12 @@
 #include <common.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
diff --git a/drivers/i2c/i2c-uniphier-f.c b/drivers/i2c/i2c-uniphier-f.c
index ced606bf36..3fbf3d5576 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 e427415e7e..00a610598a 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 2de99d019e..7af5364d93 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/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 29e283ce25..0575bd8937 100644
--- a/drivers/i2c/muxes/i2c-mux-gpio.c
+++ b/drivers/i2c/muxes/i2c-mux-gpio.c
@@ -11,6 +11,7 @@
 #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>
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 786b5a2226..5afb6a2958 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 2ebae349ed..112f374a95 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 2b18735fea..9aa6dc8c02 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/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 1194c6f029..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>
diff --git a/drivers/mailbox/mailbox-uclass.c b/drivers/mailbox/mailbox-uclass.c
index a6d2d1f5b8..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)
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 442ca633a1..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>
 
diff --git a/drivers/mailbox/stm32-ipcc.c b/drivers/mailbox/stm32-ipcc.c
index d4035a85f2..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
diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
index c463e6a2be..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>
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/imx8/scu_api.c b/drivers/misc/imx8/scu_api.c
index b2fdeef13a..1079099dbc 100644
--- a/drivers/misc/imx8/scu_api.c
+++ b/drivers/misc/imx8/scu_api.c
@@ -6,6 +6,7 @@
  */
 
 #include <common.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/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/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/tegra186_bpmp.c b/drivers/misc/tegra186_bpmp.c
index 489337c3d0..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>
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 37952d6ace..bbfe177f63 100644
--- a/drivers/mmc/am654_sdhci.c
+++ b/drivers/mmc/am654_sdhci.c
@@ -12,6 +12,7 @@
 #include <power-domain.h>
 #include <regmap.h>
 #include <sdhci.h>
+#include <dm/device_compat.h>
 #include <linux/err.h>
 
 /* CTL_CFG Registers */
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/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 1e7d606cd8..15b3183afa 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 ab1ef8d77c..0acd2c4f02 100644
--- a/drivers/mmc/fsl_esdhc_imx.c
+++ b/drivers/mmc/fsl_esdhc_imx.c
@@ -19,6 +19,7 @@
 #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>
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 eaa584a4df..3f458f583f 100644
--- a/drivers/mmc/mtk-sd.c
+++ b/drivers/mmc/mtk-sd.c
@@ -15,6 +15,7 @@
 #include <stdbool.h>
 #include <watchdog.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/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/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/tmio-common.c b/drivers/mmc/tmio-common.c
index 669410d97f..36868c2d5f 100644
--- a/drivers/mmc/tmio-common.c
+++ b/drivers/mmc/tmio-common.c
@@ -10,6 +10,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 83c32a361a..24fabeee95 100644
--- a/drivers/mmc/zynq_sdhci.c
+++ b/drivers/mmc/zynq_sdhci.c
@@ -10,6 +10,7 @@
 #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>
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 17df8b0ffc..db20a6b0b2 100644
--- a/drivers/mtd/mtd_uboot.c
+++ b/drivers/mtd/mtd_uboot.c
@@ -5,6 +5,7 @@
  */
 #include <common.h>
 #include <env.h>
+#include <malloc.h>
 #include <dm/device.h>
 #include <dm/uclass-internal.h>
 #include <linux/err.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 3526585349..996d3dbb71 100644
--- a/drivers/mtd/nand/raw/atmel_nand.c
+++ b/drivers/mtd/nand/raw/atmel_nand.c
@@ -13,6 +13,7 @@
 #include <common.h>
 #include <asm/gpio.h>
 #include <asm/arch/gpio.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 
 #include <malloc.h>
diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
index d3e39661e1..5232328e1e 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
@@ -17,6 +17,7 @@
 #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>
diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
index bb8aea2d01..c58679834e 100644
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand_compat.c
@@ -1,8 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0+
 
 #include <common.h>
-#include "brcmnand_compat.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,
 			     va_list ap)
diff --git a/drivers/mtd/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
index 0bd7eb7f1f..07f5e24a63 100644
--- a/drivers/mtd/nand/raw/denali.c
+++ b/drivers/mtd/nand/raw/denali.c
@@ -7,7 +7,9 @@
 
 #include <cpu_func.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>
diff --git a/drivers/mtd/nand/raw/denali_dt.c b/drivers/mtd/nand/raw/denali_dt.c
index 0ce81324b9..80c741c3fd 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/pxa3xx_nand.c b/drivers/mtd/nand/raw/pxa3xx_nand.c
index e179a780db..03f210bdb0 100644
--- a/drivers/mtd/nand/raw/pxa3xx_nand.c
+++ b/drivers/mtd/nand/raw/pxa3xx_nand.c
@@ -10,6 +10,7 @@
 #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>
diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c
index cd5c31e76b..9b99be10e6 100644
--- a/drivers/mtd/nand/raw/sunxi_nand.c
+++ b/drivers/mtd/nand/raw/sunxi_nand.c
@@ -26,8 +26,10 @@
 
 #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>
 
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 d976c19b7a..cd624ec6ae 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -24,6 +24,7 @@
 #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
diff --git a/drivers/mtd/nand/spi/gigadevice.c b/drivers/mtd/nand/spi/gigadevice.c
index e329c3cfc0..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
diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
index 1119677f6f..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
diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c
index 9c24542f96..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
diff --git a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c
index f3446e71b9..6151ada26a 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
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 277ec68bce..e9a889103f 100644
--- a/drivers/mtd/spi/spi-nor-core.c
+++ b/drivers/mtd/spi/spi-nor-core.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/err.h>
 #include <linux/errno.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/debug.c b/drivers/mtd/ubi/debug.c
index aec2613a09..d2b7ca5e33 100644
--- a/drivers/mtd/ubi/debug.c
+++ b/drivers/mtd/ubi/debug.c
@@ -6,6 +6,7 @@
  */
 
 #include <hexdump.h>
+#include <malloc.h>
 #include <ubi_uboot.h>
 #include "ubi.h"
 #ifndef __UBOOT__
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/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 aa33fd511b..baac277a84 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -17,6 +17,7 @@
 #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>
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 66a5f95112..e93561dffa 100644
--- a/drivers/net/dwmac_socfpga.c
+++ b/drivers/net/dwmac_socfpga.c
@@ -14,6 +14,7 @@
 #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 02c1ee70d9..9ac7cea51d 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 c22e590387..77589b2a04 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 505fabd3fa..d737400a20 100644
--- a/drivers/net/mvneta.c
+++ b/drivers/net/mvneta.c
@@ -20,6 +20,7 @@
 #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>
diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
index d120278ab1..9f300cc484 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -17,6 +17,7 @@
 #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>
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/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 64e92abb03..5d66a63a8b 100644
--- a/drivers/net/sni_ave.c
+++ b/drivers/net/sni_ave.c
@@ -8,14 +8,16 @@
 #include <cpu_func.h>
 #include <dm.h>
 #include <fdt_support.h>
-#include <linux/err.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 3cf6570fc2..38e743ebb0 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -25,6 +25,7 @@
 #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>
 
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..bf0b7611ba 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 */
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index 5be2dfd0bf..3240a00ac7 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>
diff --git a/drivers/pci/pci_mvebu.c b/drivers/pci/pci_mvebu.c
index f9b08f38a1..ba6c41cb3b 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>
diff --git a/drivers/pci/pcie_dw_ti.c b/drivers/pci/pcie_dw_ti.c
index 199a3bb50a..8938d43802 100644
--- a/drivers/pci/pcie_dw_ti.c
+++ b/drivers/pci/pcie_dw_ti.c
@@ -12,6 +12,7 @@
 #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;
diff --git a/drivers/pci/pcie_fsl.c b/drivers/pci/pcie_fsl.c
index ab25aeee73..b5b72c9abc 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);
 
diff --git a/drivers/pci/pcie_imx.c b/drivers/pci/pcie_imx.c
index 3621636cb2..24ee746b26 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>
diff --git a/drivers/pci/pcie_intel_fpga.c b/drivers/pci/pcie_intel_fpga.c
index a5ea4888f3..4731ba4623 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
diff --git a/drivers/pci/pcie_mediatek.c b/drivers/pci/pcie_mediatek.c
index 1271227c6a..3ec697af0f 100644
--- a/drivers/pci/pcie_mediatek.c
+++ b/drivers/pci/pcie_mediatek.c
@@ -11,6 +11,7 @@
 #include <clk.h>
 #include <dm.h>
 #include <generic-phy.h>
+#include <malloc.h>
 #include <pci.h>
 #include <reset.h>
 #include <asm/io.h>
diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index f4ad4c3cc3..22f2b206f3 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -21,6 +21,7 @@
 #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
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 d52f42df84..244beef18d 100644
--- a/drivers/phy/marvell/comphy_core.c
+++ b/drivers/phy/marvell/comphy_core.c
@@ -8,6 +8,7 @@
 #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/phy-mtk-tphy.c b/drivers/phy/phy-mtk-tphy.c
index 31345764a7..2455af8eb7 100644
--- a/drivers/phy/phy-mtk-tphy.c
+++ b/drivers/phy/phy-mtk-tphy.c
@@ -9,8 +9,10 @@
 #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 1c7db0dd0f..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>
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 c4287ec406..db70762e00 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>
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 2d76c41dea..90c54b45c3 100644
--- a/drivers/pinctrl/mscc/mscc-common.c
+++ b/drivers/pinctrl/mscc/mscc-common.c
@@ -14,6 +14,7 @@
 #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>
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 da1f091aec..6e0bcae991 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -19,7 +19,9 @@
 #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>
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c
index 77a8a53202..474c38a049 100644
--- a/drivers/pinctrl/nxp/pinctrl-imx.c
+++ b/drivers/pinctrl/nxp/pinctrl-imx.c
@@ -4,7 +4,9 @@
  */
 
 #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>
diff --git a/drivers/pinctrl/nxp/pinctrl-mxs.c b/drivers/pinctrl/nxp/pinctrl-mxs.c
index 5147bdc3cc..8d61dfe863 100644
--- a/drivers/pinctrl/nxp/pinctrl-mxs.c
+++ b/drivers/pinctrl/nxp/pinctrl-mxs.c
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/io.h>
 #include <linux/err.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 e0380c349a..9926235b52 100644
--- a/drivers/pinctrl/pinctrl_stm32.c
+++ b/drivers/pinctrl/pinctrl_stm32.c
@@ -1,9 +1,11 @@
 #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>
diff --git a/drivers/pinctrl/renesas/pfc.c b/drivers/pinctrl/renesas/pfc.c
index 5ee11615de..ab64f4f0c8 100644
--- a/drivers/pinctrl/renesas/pfc.c
+++ b/drivers/pinctrl/renesas/pfc.c
@@ -14,6 +14,7 @@
 #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>
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/domain/bcm6328-power-domain.c b/drivers/power/domain/bcm6328-power-domain.c
index 425451e4cd..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>
 
diff --git a/drivers/power/domain/imx8-power-domain-legacy.c b/drivers/power/domain/imx8-power-domain-legacy.c
index 74fcb05c15..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>
diff --git a/drivers/power/domain/imx8-power-domain.c b/drivers/power/domain/imx8-power-domain.c
index 8e328f02c2..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>
diff --git a/drivers/power/domain/imx8m-power-domain.c b/drivers/power/domain/imx8m-power-domain.c
index fbfd17718b..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>
diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c
index aa11866591..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>
diff --git a/drivers/power/domain/meson-gx-pwrc-vpu.c b/drivers/power/domain/meson-gx-pwrc-vpu.c
index 02f73548d6..12cdfcdd1f 100644
--- a/drivers/power/domain/meson-gx-pwrc-vpu.c
+++ b/drivers/power/domain/meson-gx-pwrc-vpu.c
@@ -8,6 +8,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <malloc.h>
 #include <power-domain-uclass.h>
 #include <regmap.h>
 #include <syscon.h>
diff --git a/drivers/power/domain/mtk-power-domain.c b/drivers/power/domain/mtk-power-domain.c
index 5084bff766..f73c1e463d 100644
--- a/drivers/power/domain/mtk-power-domain.c
+++ b/drivers/power/domain/mtk-power-domain.c
@@ -7,6 +7,7 @@
 #include <clk.h>
 #include <common.h>
 #include <dm.h>
+#include <malloc.h>
 #include <power-domain-uclass.h>
 #include <regmap.h>
 #include <syscon.h>
diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c
index be0a8026f6..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>
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 a5ae235d53..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>
diff --git a/drivers/power/domain/tegra186-power-domain.c b/drivers/power/domain/tegra186-power-domain.c
index d2a25ca333..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>
diff --git a/drivers/power/domain/ti-sci-power-domain.c b/drivers/power/domain/ti-sci-power-domain.c
index 3866db589a..a5866703ae 100644
--- a/drivers/power/domain/ti-sci-power-domain.c
+++ b/drivers/power/domain/ti-sci-power-domain.c
@@ -11,7 +11,9 @@
 #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>
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..4926d872fa 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>
 
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/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 3b123f503c..1180b2b414 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/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 9feb0aa766..493404109b 100644
--- a/drivers/ram/k3-j721e/k3-j721e-ddrss.c
+++ b/drivers/ram/k3-j721e/k3-j721e-ddrss.c
@@ -12,6 +12,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/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 b2007fd31d..c7931ee44f 100644
--- a/drivers/remoteproc/rproc-elf-loader.c
+++ b/drivers/remoteproc/rproc-elf-loader.c
@@ -7,7 +7,8 @@
 #include <dm.h>
 #include <elf.h>
 #include <remoteproc.h>
-#include <linux/err.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 80e8dffdbb..e9dce0d173 100644
--- a/drivers/remoteproc/stm32_copro.c
+++ b/drivers/remoteproc/stm32_copro.c
@@ -12,6 +12,7 @@
 #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
diff --git a/drivers/remoteproc/ti_k3_arm64_rproc.c b/drivers/remoteproc/ti_k3_arm64_rproc.c
index d048cf4161..28c6ddb691 100644
--- a/drivers/remoteproc/ti_k3_arm64_rproc.c
+++ b/drivers/remoteproc/ti_k3_arm64_rproc.c
@@ -15,6 +15,7 @@
 #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 913aca36d6..09e050ffb2 100644
--- a/drivers/remoteproc/ti_k3_dsp_rproc.c
+++ b/drivers/remoteproc/ti_k3_dsp_rproc.c
@@ -9,12 +9,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 <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 cecfb0ef86..ea56689552 100644
--- a/drivers/remoteproc/ti_k3_r5f_rproc.c
+++ b/drivers/remoteproc/ti_k3_r5f_rproc.c
@@ -8,11 +8,13 @@
 
 #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>
diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c
index bbaaea9bb3..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>
 
diff --git a/drivers/reset/reset-hisilicon.c b/drivers/reset/reset-hisilicon.c
index d449e3d25e..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>
diff --git a/drivers/reset/reset-imx7.c b/drivers/reset/reset-imx7.c
index a2bad65a3b..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>
diff --git a/drivers/reset/reset-mediatek.c b/drivers/reset/reset-mediatek.c
index 4684cbfb6a..6d17f52ac7 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -8,6 +8,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <malloc.h>
 #include <dm/lists.h>
 #include <regmap.h>
 #include <reset-uclass.h>
diff --git a/drivers/reset/reset-meson.c b/drivers/reset/reset-meson.c
index 9026e034c3..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>
 
diff --git a/drivers/reset/reset-mtmips.c b/drivers/reset/reset-mtmips.c
index 71254a93dd..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>
 
diff --git a/drivers/reset/reset-rockchip.c b/drivers/reset/reset-rockchip.c
index 4fb9571b18..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>
diff --git a/drivers/reset/reset-socfpga.c b/drivers/reset/reset-socfpga.c
index 98524eb2b7..3ad5e35cc2 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>
diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
index 1c717b20c3..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>
diff --git a/drivers/reset/reset-ti-sci.c b/drivers/reset/reset-ti-sci.c
index 99e3d9ad5c..f5d82b5681 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -11,7 +11,9 @@
 #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>
 
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index 8e6c0a4fd0..8ec8e462e6 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -6,6 +6,7 @@
 #include <common.h>
 #include <dm.h>
 #include <fdtdec.h>
+#include <malloc.h>
 #include <reset.h>
 #include <reset-uclass.h>
 #include <dm/devres.h>
diff --git a/drivers/reset/reset-uniphier.c b/drivers/reset/reset-uniphier.c
index 97f7b0ed5f..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>
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 c03fce3531..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>
diff --git a/drivers/reset/sti-reset.c b/drivers/reset/sti-reset.c
index 614da9da59..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>
diff --git a/drivers/reset/stm32-reset.c b/drivers/reset/stm32-reset.c
index 4d7745abce..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>
diff --git a/drivers/reset/tegra-car-reset.c b/drivers/reset/tegra-car-reset.c
index 886ea04e2e..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>
diff --git a/drivers/reset/tegra186-reset.c b/drivers/reset/tegra186-reset.c
index 84ed77b96f..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>
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/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 4b0a964d1b..41e2d18b9f 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_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_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 c07375901b..e4e4c39285 100644
--- a/drivers/serial/serial_zynq.c
+++ b/drivers/serial/serial_zynq.c
@@ -12,6 +12,7 @@
 #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>
diff --git a/drivers/smem/msm_smem.c b/drivers/smem/msm_smem.c
index 711ce626aa..5557fd29ce 100644
--- a/drivers/smem/msm_smem.c
+++ b/drivers/smem/msm_smem.c
@@ -8,6 +8,7 @@
 #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>
diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c
index 2eba1c1d18..ec8741b50c 100644
--- a/drivers/soc/ti/k3-navss-ringacc.c
+++ b/drivers/soc/ti/k3-navss-ringacc.c
@@ -11,6 +11,7 @@
 #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>
diff --git a/drivers/sound/sound-uclass.c b/drivers/sound/sound-uclass.c
index bada0c2ba5..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
diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
index 195ea5fae6..a09bf884e8 100644
--- a/drivers/spi/atmel-quadspi.c
+++ b/drivers/spi/atmel-quadspi.c
@@ -9,12 +9,14 @@
  * 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>
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 2425f5ad8e..3e50de7e0b 100644
--- a/drivers/spi/cadence_qspi.c
+++ b/drivers/spi/cadence_qspi.c
@@ -11,6 +11,7 @@
 #include <malloc.h>
 #include <reset.h>
 #include <spi.h>
+#include <dm/device_compat.h>
 #include <linux/err.h>
 #include <linux/errno.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/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 c907729b54..312fac76dd 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -12,6 +12,7 @@
 #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/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 c05d46e084..02b78df843 100644
--- a/drivers/spi/zynqmp_gqspi.c
+++ b/drivers/spi/zynqmp_gqspi.c
@@ -16,6 +16,7 @@
 #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)
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 6caea3aab3..e7fcfcd4d1 100644
--- a/drivers/sysreset/sysreset-ti-sci.c
+++ b/drivers/sysreset/sysreset-ti-sci.c
@@ -10,6 +10,7 @@
 #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/tee/optee/core.c b/drivers/tee/optee/core.c
index a7b175ee62..9fb5e658f9 100644
--- a/drivers/tee/optee/core.c
+++ b/drivers/tee/optee/core.c
@@ -6,6 +6,7 @@
 #include <common.h>
 #include <dm.h>
 #include <log.h>
+#include <malloc.h>
 #include <tee.h>
 #include <linux/arm-smccc.h>
 #include <linux/err.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/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/ufs/cdns-platform.c b/drivers/ufs/cdns-platform.c
index 5bd0c1e0c7..41ee6a60c9 100644
--- a/drivers/ufs/cdns-platform.c
+++ b/drivers/ufs/cdns-platform.c
@@ -9,6 +9,7 @@
 #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 6e4d0cd3ac..4990fba6eb 100644
--- a/drivers/ufs/ti-j721e-ufs.c
+++ b/drivers/ufs/ti-j721e-ufs.c
@@ -7,6 +7,7 @@
 #include <clk.h>
 #include <common.h>
 #include <dm.h>
+#include <dm/device_compat.h>
 #include <linux/err.h>
 
 #define UFS_SS_CTRL             0x4
diff --git a/drivers/ufs/ufs.c b/drivers/ufs/ufs.c
index 512c63a8f2..c9346c2edc 100644
--- a/drivers/ufs/ufs.c
+++ b/drivers/ufs/ufs.c
@@ -11,6 +11,7 @@
 #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>
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 6f5e5af47d..f947e6983c 100644
--- a/drivers/usb/cdns3/core.c
+++ b/drivers/usb/cdns3/core.c
@@ -14,6 +14,7 @@
 #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>
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 0b6d9cf727..d530c9790b 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 e095760099..22e90a5717 100644
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@ -57,6 +57,7 @@
  */
 
 #include <dm.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/err.h>
 #include <linux/usb/gadget.h>
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index cbf21d31dd..c5066529b7 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -18,6 +18,7 @@
 #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>
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index 7ffec12fc5..9596bf144c 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -18,6 +18,7 @@
 #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 677607ab32..1502d67362 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -17,6 +17,7 @@
 #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 a90868216a..6b0166a1e0 100644
--- a/drivers/usb/dwc3/ti_usb_phy.c
+++ b/drivers/usb/dwc3/ti_usb_phy.c
@@ -19,6 +19,7 @@
 #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>
diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
index 229a61affd..3778cac0bc 100644
--- a/drivers/usb/gadget/dwc2_udc_otg.c
+++ b/drivers/usb/gadget/dwc2_udc_otg.c
@@ -23,6 +23,7 @@
 #include <generic-phy.h>
 #include <malloc.h>
 #include <reset.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 
 #include <linux/errno.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 52384b9afb..a33ab5c95d 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -13,6 +13,7 @@
  *		       usb_
  */
 
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/compat.h>
 #include <malloc.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 80ac876d89..0643681846 100644
--- a/drivers/usb/host/ehci-generic.c
+++ b/drivers/usb/host/ehci-generic.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <clk.h>
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <dm/ofnode.h>
 #include <generic-phy.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 29a702052e..692018243c 100644
--- a/drivers/usb/host/ohci-da8xx.c
+++ b/drivers/usb/host/ohci-da8xx.c
@@ -4,9 +4,11 @@
  */
 
 #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>
diff --git a/drivers/usb/host/ohci-generic.c b/drivers/usb/host/ohci-generic.c
index 7b6ec51704..04d5fdb2a8 100644
--- a/drivers/usb/host/ohci-generic.c
+++ b/drivers/usb/host/ohci-generic.c
@@ -6,6 +6,7 @@
 #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>
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 58cde22615..6e5be90fe5 100644
--- a/drivers/usb/musb-new/am35x.c
+++ b/drivers/usb/musb-new/am35x.c
@@ -12,6 +12,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/init.h>
 #include <linux/module.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 cc6e0a71c9..f678aa4826 100644
--- a/drivers/usb/musb-new/musb_core.c
+++ b/drivers/usb/musb-new/musb_core.c
@@ -65,6 +65,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
diff --git a/drivers/usb/musb-new/musb_dsps.c b/drivers/usb/musb-new/musb_dsps.c
index d342eeba80..eb590885bc 100644
--- a/drivers/usb/musb-new/musb_dsps.c
+++ b/drivers/usb/musb-new/musb_dsps.c
@@ -15,6 +15,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/init.h>
 #include <linux/io.h>
diff --git a/drivers/usb/musb-new/musb_gadget.c b/drivers/usb/musb-new/musb_gadget.c
index 74b645715d..35d2123ddd 100644
--- a/drivers/usb/musb-new/musb_gadget.c
+++ b/drivers/usb/musb-new/musb_gadget.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/kernel.h>
 #include <linux/list.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 55ad8ead70..b98f0ed40e 100644
--- a/drivers/usb/musb-new/musb_host.c
+++ b/drivers/usb/musb-new/musb_host.c
@@ -9,6 +9,7 @@
  */
 
 #ifndef __UBOOT__
+#include <dm/device_compat.h>
 #include <dm/devres.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
index f4d0e1fdc2..72f14b9343 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -1,5 +1,6 @@
 #include <common.h>
 #include <console.h>
+#include <malloc.h>
 #include <watchdog.h>
 #include <linux/err.h>
 #include <linux/errno.h>
diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index 8a45b05613..0d34dcfc5d 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -12,6 +12,7 @@
 #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>
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 0a725c5c15..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>
 
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/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/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 c52981053e..6f80fbaaf3 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/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/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/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/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_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/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/cdns_wdt.c b/drivers/watchdog/cdns_wdt.c
index 13952e1e97..775f06a6e1 100644
--- a/drivers/watchdog/cdns_wdt.c
+++ b/drivers/watchdog/cdns_wdt.c
@@ -11,6 +11,7 @@
 #include <wdt.h>
 #include <clk.h>
 #include <div64.h>
+#include <dm/device_compat.h>
 #include <linux/err.h>
 #include <linux/io.h>
 
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 729cf39630..320a8a7a87 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/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/ubifs.c b/fs/ubifs/ubifs.c
index 388451512a..e097d28444 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -14,6 +14,7 @@
 #include <common.h>
 #include <env.h>
 #include <gzip.h>
+#include <malloc.h>
 #include <memalign.h>
 #include "ubifs.h"
 #include <dm/devres.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_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/include/dm/device.h b/include/dm/device.h
index a93fa22d5d..4c79832597 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -720,75 +720,4 @@ static inline bool device_is_on_pci_bus(struct udevice *dev)
  */
 int dm_scan_fdt_dev(struct udevice *dev);
 
-/*
- * 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/linux/clk-provider.h b/include/linux/clk-provider.h
index 02ff1a311a..c5a1a77ee5 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -9,6 +9,7 @@
 #ifndef __LINUX_CLK_PROVIDER_H
 #define __LINUX_CLK_PROVIDER_H
 #include <clk-uclass.h>
+#include <linux/err.h>
 
 static inline void clk_dm(ulong id, struct clk *clk)
 {
diff --git a/lib/bch.c b/lib/bch.c
index 86709cc875..8945d8d4cf 100644
--- a/lib/bch.c
+++ b/lib/bch.c
@@ -55,6 +55,7 @@
 
 #ifndef USE_HOSTCC
 #include <common.h>
+#include <malloc.h>
 #include <ubi_uboot.h>
 #include <dm/devres.h>
 
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/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/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 0047998ee0..f40549be4c 100644
--- a/lib/efi/efi_app.c
+++ b/lib/efi/efi_app.c
@@ -12,6 +12,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 b14746e6b1..6ce257f448 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 61af3472e6..0e07145d92 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <boot_fit.h>
 #include <dm.h>
+#include <malloc.h>
 #include <dm/of_extra.h>
 #include <env.h>
 #include <errno.h>
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 4ccf41e428..1ad5135fae 100644
--- a/lib/libavb/avb_sysdeps_posix.c
+++ b/lib/libavb/avb_sysdeps_posix.c
@@ -3,6 +3,7 @@
  * Copyright (C) 2016 The Android Open Source Project
  */
 
+#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/lmb.c b/lib/lmb.c
index b3b84e4d37..07b9308adf 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -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/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/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/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/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/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/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/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/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>
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 31/33] dm: core: Drop the inclusion of linux/compat.h in dm.h
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (29 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 30/33] dm: core: Create a new header file for 'compat' features Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 32/33] sandbox: Complete migration away from os_malloc() Simon Glass
                   ` (2 subsequent siblings)
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Most files don't need this header and it pulls in quite of lots of stuff,
malloc() in particular. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 board/hisilicon/poplar/poplar.c | 2 +-
 include/dm/device.h             | 1 -
 include/linux/compat.h          | 3 +++
 include/phy.h                   | 1 +
 4 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/board/hisilicon/poplar/poplar.c b/board/hisilicon/poplar/poplar.c
index 4926419a90..717e726b28 100644
--- a/board/hisilicon/poplar/poplar.c
+++ b/board/hisilicon/poplar/poplar.c
@@ -4,8 +4,8 @@
  * Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org>
  */
 
-#include <dm.h>
 #include <common.h>
+#include <dm.h>
 #include <asm/io.h>
 #include <dm/platform_data/serial_pl01x.h>
 #include <asm/arch/hi3798cv200.h>
diff --git a/include/dm/device.h b/include/dm/device.h
index 4c79832597..cb1cd27738 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>
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/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>
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 32/33] sandbox: Complete migration away from os_malloc()
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (30 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 31/33] dm: core: Drop the inclusion of linux/compat.h in dm.h Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-12 19:06 ` [PATCH 33/33] video: Drop the Nimbus font Simon Glass
  2020-02-12 12:07 ` [PATCH 00/33] sandbox: Move to SDL2 Wolfgang Denk
  33 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

Now that we can use direct access to the system malloc() in sandbox, drop
the remaining uses of os_malloc().

The only one remaining now is for the RAM buffer, which we do want to be
at a known adress, so this is intended.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/misc/cros_ec_sandbox.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

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;
 	}
-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 33/33] video: Drop the Nimbus font
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (31 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 32/33] sandbox: Complete migration away from os_malloc() Simon Glass
@ 2020-01-12 19:06 ` Simon Glass
  2020-01-13  8:28   ` Jonathan Gray
  2020-02-12 12:07 ` [PATCH 00/33] sandbox: Move to SDL2 Wolfgang Denk
  33 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-01-12 19:06 UTC (permalink / raw)
  To: u-boot

There is some concern that this font may be GPLv3 rather than GPLv2. This
is is not desirable in U-Boot. Replace it with Roboto which has an Apache
license.

See discussion here:

https://www.mail-archive.com/u-boot at lists.denx.de/msg335913.html

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 doc/README.video                              |   2 +-
 drivers/video/console_truetype.c              |   6 +++---
 drivers/video/fonts/Kconfig                   |  20 +++++++++---------
 drivers/video/fonts/Makefile                  |   2 +-
 drivers/video/fonts/nimbus_sans_l_regular.ttf | Bin 61660 -> 0 bytes
 drivers/video/fonts/roboto_regular.ttf        | Bin 0 -> 162876 bytes
 6 files changed, 15 insertions(+), 15 deletions(-)
 delete mode 100644 drivers/video/fonts/nimbus_sans_l_regular.ttf
 create mode 100644 drivers/video/fonts/roboto_regular.ttf

diff --git a/doc/README.video b/doc/README.video
index ced35bd2db..ee8ac0ce16 100644
--- a/doc/README.video
+++ b/doc/README.video
@@ -84,7 +84,7 @@ U-Boot supports the use of antialiased TrueType fonts on some platforms. This
 has been tested in x86, ARMv7 and sandbox.
 
 To enable this, select CONFIG_CONSOLE_TRUETYPE. You can choose between several
-fonts, with CONSOLE_TRUETYPE_NIMBUS being the default.
+fonts, with CONSOLE_TRUETYPE_ROBOTO being the default.
 
 TrueType support requires floating point at present. On ARMv7 platforms you
 need to disable use of the private libgcc. You can do this by disabling
diff --git a/drivers/video/console_truetype.c b/drivers/video/console_truetype.c
index 6d7661db89..73444c2f82 100644
--- a/drivers/video/console_truetype.c
+++ b/drivers/video/console_truetype.c
@@ -466,14 +466,14 @@ struct font_info {
 	.end = __ttf_ ## _name ## _end, \
 	}
 
-FONT_DECL(nimbus_sans_l_regular);
+FONT_DECL(roboto_regular);
 FONT_DECL(ankacoder_c75_r);
 FONT_DECL(rufscript010);
 FONT_DECL(cantoraone_regular);
 
 static struct font_info font_table[] = {
-#ifdef CONFIG_CONSOLE_TRUETYPE_NIMBUS
-	FONT_ENTRY(nimbus_sans_l_regular),
+#ifdef CONFIG_CONSOLE_TRUETYPE_ROBOTO
+	FONT_ENTRY(roboto_regular),
 #endif
 #ifdef CONFIG_CONSOLE_TRUETYPE_ANKACODER
 	FONT_ENTRY(ankacoder_c75_r),
diff --git a/drivers/video/fonts/Kconfig b/drivers/video/fonts/Kconfig
index c692fa9602..1b8b59311e 100644
--- a/drivers/video/fonts/Kconfig
+++ b/drivers/video/fonts/Kconfig
@@ -4,19 +4,19 @@
 
 menu "TrueType Fonts"
 
-config CONSOLE_TRUETYPE_NIMBUS
-	bool "Nimbus Sans Regular"
+config CONSOLE_TRUETYPE_ROBOTO
+	bool "Roboto Regular"
 	depends on CONSOLE_TRUETYPE
 	default y
 	help
-	  Nimbus Sans L is a version of Nimbus Sans using Adobe font sources.
-	  It was designed in 1987. A subset of Nimbus Sans L were released
-	  under the GPL. Although the characters are not exactly the same,
-	  Nimbus Sans L has metrics almost identical to Helvetica and Arial.
-	  (From Wikipedia, the free encyclopedia)
-	  From: https://fontlibrary.org/en/font/nimbus-sans-l
-	  License: GNU GPL v3
-	  http://www.gnu.org/copyleft/gpl.html
+	  Roboto was created in 2011 by Christian Robertson at Google, and
+	  received a significant redesign in 2014. It is a sans-serif grotesque,
+	  which is the same classification as Helvetica and Akzidenz-Grotesk.
+	  Roboto is the default font on the Android mobile phone operating
+	  system.
+	  From: https://fontlibrary.org/en/font/roboto
+	  License: Apache 2.0
+	  https://www.apache.org/licenses/LICENSE-2.0
 
 config CONSOLE_TRUETYPE_ANKACODER
 	bool "Anka Coder Narrow"
diff --git a/drivers/video/fonts/Makefile b/drivers/video/fonts/Makefile
index 4fca120b73..30e583276e 100644
--- a/drivers/video/fonts/Makefile
+++ b/drivers/video/fonts/Makefile
@@ -3,7 +3,7 @@
 # (C) Copyright 2000-2007
 # Wolfgang Denk, DENX Software Engineering, wd at denx.de.
 
-obj-$(CONFIG_CONSOLE_TRUETYPE_NIMBUS) += nimbus_sans_l_regular.o
+obj-$(CONFIG_CONSOLE_TRUETYPE_ROBOTO) += roboto_regular.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_ANKACODER) += ankacoder_c75_r.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_RUFSCRIPT) += rufscript010.o
 obj-$(CONFIG_CONSOLE_TRUETYPE_CANTORAONE) += cantoraone_regular.o
diff --git a/drivers/video/fonts/nimbus_sans_l_regular.ttf b/drivers/video/fonts/nimbus_sans_l_regular.ttf
deleted file mode 100644
index 3bd694d8ee55d8eaf468abad40bf072896a757d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 61660
zcmdSC2Ygh=@dv*9P7O(@OQ+sWcc<P?cc<QU>ID^$1QJaWqKINJ%@k7%F1W-7j2rH;
zgNg09_u$@3Z0vxI8!?IPI2b#Q<AR?4-`V%>bSlOqzu)iw`Tqs)-j&_i+1Z)d+1c57
zj5Ef3+4)SvmfLLYjkBIePGjuUA$%KIU0G!dc-(IjV;{BPb6<5!bK8M{CmI<0csXPK
zP1S83<r(^<m+|`p`2C6Iwv6ocadkH`#@FKW^!Y<`m%sAw1J5z$c^hMHuPvCna{0&z
zT4Ep7;CGJ&OV$mzw>@?ZW5LH5d$47&e{P>fpZGR at JB`aSh%ej+Tz&_5Iry9~IJ9c5
z+suWi%iluv!%LRUpZo2i*ka%Ud|Z|c&0V`(+Qb_1dnd}rE}c8n|M1A}9~pZ!l`+l5
z%a^TO6*IK)MaJHE1f9N=QQx`mtfJ<tADHc1_%G(A`5fP{x4OUl$$lScl|R$Snn&^3
zgGux){!mZzsQel0cF7%S9hsq#1tjG+@hX|=8@$#rcjXIFi`pv{p8<nE%CBIqD0Q*)
zIKJDZ-1)~Wi=!Qhxq?pgcRrKuX<@N-$|uHJ2CDi1CH7}Y6FZX2x;2mT$XLd%R(|Ip
z>Yb>7_qaCj`7B3DWj?s#H0xNDbRElKAF@*3$ZByJ_ysIcs$tnEI|HB7#XV%?2b532
zHGnG~S1hhbTsmCzeL5~ZE(6Lhr3*092#&Z?S)=CPsCOOn$JH#o%`$Oy;eEF>A6R>`
zRD5njy*~b(S|*jXXv$bUzHh+q29%vC?r*amyw60vVEopB_tBbrSqScQO~v<-fK$qW
zGwxdcE?}pQe91myWxy{Pmj!La;2w@E5oH2!kHTd`nR52g$VvR3kN1^m-$vi#O2B2o
z6%LwI;rDpdBN~?By(jQ+!`&ZO5Uv>B#8S8m`qBirHLM<W)}buXJ)GS!(u%v6dJ*j^
z*dJLY%4FjGJltpE>Hr*Xf(hJz#`gxg(B=#&3}t&+Ht?e{%fOXI^}wwwaZN%0XXCpN
zT(fWm;c~?liOUz)N?g&nnsFI<<H(1&=iv&}d_MAT)c4}&h;d|~bu>Pw at FA86KB4~h
zqD=<)0ibsx?wdew8qZ(8lyRo99vyEQ^GPn^0kkm%S2Zq<@f*Q?7Wzi?Zy`RgU&IHK
zUHH96T*M#t%g!gnE90+g6@DR}5f}A^$`c;}N3<V=s~qo}?Kn`o)CS?}fT!>k at z!Kl
zir at +23*x);6uv{*#9z3g(541g8EEh`t{*}75}v>+QQppvcAg}@9CKkT75*e1r7K6_
zQ<NkAA9LY%g<n<N#Ak)CsUL}ug;V&BWT6C~MVo-{fPwd!)CPWwLYXi@^S4<L=n^Dd
z%Vy$xlCcCSMaYiCXR{()fw=snUUoHPgLKVo(h=ab5^?WmMH=Pu1N>Ferz8KQi+_PS
zFGAK5pnIa3JIa!Np(_#J`|~fs^N=~TR|Y&3JwxL*pEYYpXVH6Hnh~@^ym17d>7ws%
zhAwQt{Z0H%<BPlap7 at sd;bIo9xs#RRyAbIFe!CFm3URgK+QO!321m=gc(69<DWM;U
zh6$1<v+=t@yKWYZ&tl9qRp51^n-$;V;xg`OxEA3`$3^w%bE%@M_$gLMW23nO^dp^6
zj^8|RJ%H;aTpzJK=|0>O0gHI-d%TaqxRab62ma8p7!x5A;Hy4d9t6iFm$hlW2fkkk
zo+rKBKz+r%P2g&S&H(NN6IVROxSV*Cbfjh#vuVynJ5&Zdg7Q=@i0;yLBi{oT542A_
zV4?N}4dyc!+&#qSFHs+30a_5A3LjxC1TE-JFs~c=iGMdDYqqm#(p~7If|m`v(k7i|
zHWxkc&qsUc8_LHx?ie$o8Q_u}o1N|<DCe)a8~r_o-!YDYj^pl{8(D_*8cVj{iDpi?
zD!8e*IA9RZk^HN7;OIqq6Q8^BeIjtnaK1aiv-e%O(-;s9)w|$F@Wc4Kqpuh*LHF@@
zwNIMW=;K!y8{$FYE8;`&mY~mgx~aGd-3FPq-_aKMVdN8yznF(Ypp(AG^><vSaeXU2
z0iIe7-T-aE8=v4#{LsR83!POuzAvDO(pMU%5R4J&Ws+O<j`<}7@7-wJsBb6}pg9G)
ze8&v1Xvh|#D^jtvT%N%vvZf-Li_33uZ-7PQ%DmYoc91>5H}fl{FzH3<L(Oi at 6E3q|
zo^yH0<u#Xox%?O#6dN8J9UC8Oh|P at 6kFAV77#9*3A1}oR#D~X6$IprH*T3@pOFv5^
z!?05si)A;nyV*m47An0U9TCu&%PyA}U0!v0%jJjIz}V2($k<o`Ezb#>zY47n(4PC5
ztIz<DG5K9_W5YKMZ((dWVAyZiXV`0ait;UEpLBfE@JY@mai6UDH0qNnALqf=j{GF#
zqjx`g=Yxe_C9X?FzZ<v*kLJmknIDs$fabxU1S{MAr&+66ui2#8YX5A%gD)ojX_yNr
z=LS2~gH2(Jm=~xxmHA*z;D?b7V1X=%1v6MxER==8mWcq(qgXVH0d?Y_A9O5%=`lt|
z%pFNAnWeB)md4Uq2Fqkwuvtv7HO<VztSp!1VO}X<g{+7bvl5J08Emgjtddp14y$H0
ztQPiiJ;t(;HL+&a!ltoS*2dad2b<1juuj&+y4g%Ni}k=Rna$>~xojSr&-&OxHoyzn
zAiIEPu}j$!p2xG<R&L~}T+a<`Gdq{9VmmRL{)VmR={${Ru#N0mb`86Z-N5#-{cIPz
ziT#${&hB8hVZ49O?qLUc6nl_8!X9Rivd6#yN$hg=9D9~M&z@l~@fcX!$Jht3p+9Et
zvrpKS>@)T``y2a${gs_!U$bx6Ngl_(XFswZ*iY<d_HT^U9`3?5+?7ihyLj%+UgJLO
zdT7@h*{9&L<C2FoMe>xq*e&cY>{fOH;~UG~<i3)(G?o31{hb|PU$Hycmy(a<%kE<T
zko+Wn_Gcb01xSHXkQ6M1NLuz5_XDSfu|M$$b}ze13YQ|JNGXcF&HXWd{(*hV-r)i4
zKK4&3Mv7&ZvEA%`_8mLS1K9)YUs9YDFX`C3JV;8A^z3o0!LDF?*%NG-y~l&ulRT6?
z#bn7K8QCEo2K#k{z0Rkyr#Y7rr6egCGyV}CBBespyujVqi`<<Z<yt9S%8)XpEcOO_
znNMM_axeA at _mr}EB*gc8b}`$=wzD1VBDRHH$j|4Md<);oxAE=#0=|Rq<QMXb_{IDZ
zzKdVVFXP3$gqQL%Ud}6c6}RzfUc+m79k1sNypcEYX5PZ5 at mAi(+j$3{&S&sW-o?B5
zOg at YE@LoQf&*5|VJU*ZI at d3Vo5Aub45ns%g@FBjGFXPMk3Vse>$yf1n`D(s~ujT9b
zdVU_?z&G+u&?=Ynetrf24Zo6K#dq^Pd at sM6@8j3-Yx#BjdVT|2!7hPi at 5$D%#cUm0
z%g$jd*=nB86QS2UN%YWX{2%kj9ji)d%=Z&NC^i58Ew4<-+f9(Q2iZfAr4JxSA3}yc
zh7^4U3Hn^f(ASV6$Pgsx2guM*?BDEX$c_t14?Bk&h0G7K)sX9}c{b1DDUk6CxEXSM
zxs(H`xAI&z08$t5e3gusLiQQtbPptd9`u8SEfBvfVe8p>cy}!{!DE8oX$)!fFpfN#
zn;@xguzs#%Lu at Hq#+GA5S7ChDvJKE4cR+{S2F)Qf1~dn03kI!0dg3{D75IA#+p2Q-
zPIe)<{9^p>q5g}8RvdtCVc_05;J01;06)YJ^W*#^KMh&5NQ2UC(jn=TCRtMseg2T<
zCCzcocP<_-kuFUxce}jeD!FF5Hn|SCZg9QV^(EK$T)%e<aEo^<bZd9p;I`lG4R;rJ
zn|r7GTK9|Hf9w97`}^+SdboH5cqDjOJSsgpJ#O=O!{hrY@l)ETteW!3l=r8c^z`;L
zc;<Kxc<%5#==q)(^NRGE?zPrypVtAe7rZ|4cJYq%Zt(8*zR>$V at 0Yw!Pi>gmJ$2L6
z`+WR-8hmE?Z1UOXbEnT^K7aM~@s0G&_HFT<<-6YZGT)ngpYi?7kNJiAZSuR<?<v36
z{66xN{k{DY{4@Q_{RjMa`QPOKl>b})9|gDs)CKef><>5+=n^;>xH|B%z?Xvjf*OL(
z3ECa>P|&epkKn at KRl&Cee;Z;5=?&Qtav<cTkk7TA+Ei_wcD42i?P2Zb+S8#yp^2fz
zp|e8Qhh880S{MsU51SQsS=bxlQh0IrrtlXc0wPvLToLg^#PLYa$ehS?B5#U(D)LyQ
z92FT=9Mv0je$@V``=Sm<$<dL~<<ZNdABg@wCNicy=0MEp*rwRq;-t8NxHsYx<2&Oo
zjz6sP(beg;>K at a5pOBrfDB(W6hdx%Hqp#7=(XY~9rhiC(+z at GKFswD)W;kpNFjg7|
zjK4L0nV6Y4CvjKeeThesq@>cMB}sde9!PpG>AU3k<ksZdl8+^yN(o8HPMMRkE9HTd
z_frE>b5pNO{VdHpZC2X$w1a7Hq_gzm^uhE4>4(x!W*9Q+GCDKP$=H?gK*n2{L7A1A
zdovGYew$UAH7o0!tShtb%sQ0ye%6=SvDx#oS7l$H{Yds_rbtt&smU~8y4ZA|>AM{7
zoSdAdoJBd?bFR;MF6T(jPv%5(zPZV~*ZhF_HS^~dW{I?vS{7M$Sq at pgv&LGNSPxh~
zxBieDp4*Unaqhv~&vJjti_go?o1S-0-i3L0=N-!XGCv?cA>WpNMgD>OL;3ILe_P;F
zkXg`Ku)g581 at 9NS6&ea#3I_`J6~15ic at Zm$Et*xdtLR|SYeioc`xP6CdyB6uzO(pn
ziBCy<Nq$LZ$z>%Elzdcjx-`7BskE>3iqfY_zbcC@%Py-dn^m@|?Ao#y%1)JslrJiO
zp#1IfuPXd1GAmju&Z)Sf;y}d<6`xf6R2fiNT)DLJfyy7M@~c)??W($^>XE89s=l(h
z*$lQy+Z@{l+x50bY{zV;t3#_ZtG8CaR+C+GWz9`B at 7Ma(=GXSs?x?-3_PN?m>U`>!
z)a|bOvfi(LRsH_@;|-w=bq$v_yw=DXGaENFKGFDnQ+!itQ*YDOrrVm{Yj$h4G|y?i
zzWMDIzm}Soc`dtI4zwI;`C(e(w3cbBrX8I2*J<Ck=C{sjUD|qn>tn57wZ*ozw5 at M@
zs!eWhXy4KPR{M7yu^qOK<sExFp6EE%ae8|E^oHrHr|+A7@AQ|ZADiJhBX!2~8JEp?
zuG6oxy>n^jzRtJ0Ji7|JmUr#zI at EQ%+pjyhd!YNyv2#rpj6`THxHqMvu=rqc2Ku|}
zjQ)YaI`dm0#*nsl>8O17#~<_7;mZdHQ8tIa#j~X6QPvA(O~EK^6|Xrx5yps{=tX*d
z*^V8{a1m^uk*}m^=}}mSG0?s4reK}8bXJ`^F0)BoCU=ungCF>bgq}q)3(qw+7&hSQ
zKPP6%x`c*=jk?SYu^XjFpR2sP@*Vu)_S|#N$v at l;yEkrRtK_DUU~9s!CNPTT!Mb#A
z3=YwT1P8gfySbw)>D+3<XRW`%XfWqkto~*n9vr0gw^%La9K$~gW-e&vrP=+_9a$+^
z^#zNDT$|kkbk#j^)%|mF3-2k4NzT(q7Wai6R-5!=jDO~$g1He<ZVMK;uN`cP$ehCc
zB128HI~I7$FQ4)#&g$MQ|L7i_SeRu2m7+$z(#!<CrodhfgH at af9J2|rctegw8}Akz
z6k^IIB=jb(<Kh?H_@7>^ncugozt5IbSeTqtSiqN+%jcH!_iN_&S5@~pzLtL9S6kKB
zzpLL?K&6sW3VMf)e0pCEec5L#NJ=g!NK7dJ&2mP*kTwFRDA?xN7!^~HyH;lesn9Y}
zC!OO}pyIBz7>n`Apc9w|8i{N`nE#_CfBjH#R%C9&tQA!~8S#CW%_?lVAnxsg)GUKB
zBkaDLDlLtcTHe&#b#+swf5K3A<xERKm9BhdXO*QP_13%_^*QnS%nV~hiu~J`QmT^8
z_2A1={tdeUd`Mhq3J!8N7jvVow5KOr%QK~;{pWcYT#{2!u687q>rf8XQ=kbH)andU
zj^!)sMHgA?J3FPLAO85m$Me|8SLA^=pe$3$YIUHq(G<;t+<Mfqhec5;Nj6v_yzetm
z)`#G_Tea?5ccZ(}YP4!^Dsf#DxWr~EF3GN161Ye at y4+9@-IdVOlh74ifTbvB+3<9P
z at b^h7z<*#l at V40m3;a#nn{V2<7rnmuCYnLn86!jN5LPC@AF>mqLqChSZpOley0F5*
zwc8BbkP|@V(%C6k#JLzTf@$WFCwXoSZITcSy#5g|@S7FC{c#X~_<rPvk*|0p`hf2P
zO&Z+^>p!g0(cwUpmRQQj7yM_8`&95E<Jm$!#E at GpA+i2`#D_d^VSd$`73Zw3D)?Uh
zY*(F4dcLXmrF$NI{QhTqnwsQ~<zrXSo&pz^6!EnOK2Qg&CVw5*+%QnA&F|ztmP}1=
z9WJ19@pu_QxoF1p!Et1(6SM2$eYm?0(q|G__;P&YKgo%1t;=T3X(>!Bi+AbN=n5~K
zUtGSouPoPn#*A|}m*iMG@*4D|m3@|3xrMW~w^|IP*ug;?vFO)NXd at AQHY*~nHeezy
zc85j?0&g1)H26Z=bnYLv$K_SzCzV9=PS>OTE9aNyZX4Qd4R`Hyt*NPMx=PQh>bZ}$
zHn%K3zwpH1%q7N<=F0xH3o@G;>*_1Ekku_=&C9StdmiIB6}^iybCW;x8%D!l!>i?Y
zd3o8wg`FQA=;2SvIn4)t<QDlAfv*no#}%6J;5c^>ffNEpf-qFo0R+xn7s!vvM<WYr
z1~y-~xNsmk!ml&toSL@w>ZJUbX=ds9884)4Te$qPw8XgPHJuI3Go$nz%X=}-0)9BO
zB1R{j6EH_BqyeqPphJkelltM`c6t at 3H%#OC3umw2*1x8pur#(Wf7;@g%352Ci(2X=
zZ&U6iTbnn{AKcm5ednWn8J2lJw3S!RoKaETMq`lfpapo<O~T*?SmVr+$J$GxdJ{Kn
zmbXaH*WDz)dEg%I`QQw2r(UH&AUFf##ub$a%tn=uVH7<Wu&SQqJJ(<E_66%K$!nfi
zle}_yMMbW)GH-k9w6cmees2Dnx$DoHyE;F<G^=gVqPFbPPm4_1MTOZpUo~!MYAh)R
zZ4BU*VbGp*F{DrMgB8jc8c*RxcOQ_;5GdLfirK6Zru-1mrLeFprXO^96*M`&t at V}(
zRFTp;L6Y{es+odEmg4n2$s0Y!o*zjn&8+W{v<?pP+el_5wiNo{&!P-z9{jEu)e3*c
za+LIf<UKej&$25A&eBHyE%c2Wpqll;Q+aS2|3Y5PFMgrw&E}hLYbLnaY#GYTRoVup
znO$*7A#x=D4A)$n?V!y@W0wtB5zt+L#e-eVY1}MD$Xb3ez<JrB5j@&G9ERUJ3O*jD
z*9kTf6R0lU-7Q#06r^DU1*0UWtGe#Use!5Ww*1y;|Bhu#=B`T3HAQy6XwBC92PRgO
znMyEDE7uHmW;dBKQsXXDXc0ehj^<&sVa8gEag%0rf>fp;Q?^wLQ4w6Ca4`g&gq!3?
z8APMXH~86VF-X_6b$dq#l at 9*t^8J55a%1y3k;~87 at b<d)y7K$F?)iCo!_qlE<qfu;
z>-*ac=a<aOPs&dXjOUVt|4aT{=Nk}yS?9)wzP#b`XJadp7e6vI@5ze7s$=`k>+5Q)
zS=cmm=M3%E_N=P1$VK`jD+U at g^2f`i(7*1a-Su(qI;<9TUJ`#_{#)aG?y{D%!T#lI
zKllJj*~pW4gG`&`7$F+4WvJ(?aHh#WPH0A<yU;%k`fbTE8dA7Fy~8|)x6M3pfi=J1
zR+5`H@YMq~@rjA?H4pryEH*wqw(Kv`QBzLq@{EY~^3H-Heq(sd>X`81S9J*%Yl04A
zo(cK89dw2c<2ooFJ9VKxttKfB$`Zqi0hRX7_BCY9UUc61Lj_$SAzpLh<bPe-x at e$v
z&q@C8dR_W0yDqvpD=oQN{<vf4(TA6T=_PpNm~@?>fgfYklMp{Qol!A!Qs8?DyJY{3
z7e8 at u$@1k(4oXL#kq<uGdd0<;Tmd?8`0|+4kGf=C2FC@*`QyUBhxy&Z|KdN&eQ^0S
z{M0HPZT+IvQN9A@h2^TVm+pZqtb%_B<h2(C>{RsmdGwj)B!3t at 3dc|{L$r#PgmI${
z0iu|Wp<fHMgTLARSXD{K1siV;ob9`!ZPl)%gvwQYTR!4j<n!jPI(+B6Tg|rh%WTtb
z-BG#TShs0j5Rl^VPBLk`(gz;ruk!~9aOotYd~t6NU(?g0;3YrL3x<s---n(&gYq<I
zqxdtu#2olcu>7H~4&Xf*1SWqmOB8Xa2Ve;{;Eg at YX7>)w&NUZCX;JIL*-HnzN;66;
z)8dIds84)#rGg7I3((-EDKIn-0*S?I<v;V(rSb?H8G)65IbR|FS#E*<p6a!rUNGt*
z79o(R>i>H_C>NlKbs#=|ugC8{;+;2RaXJlkG6MMN{Q2Q|Z+31ua(GLpG=CVz-0%g`
zdFaf1f{7RrX$R_HtU!PK_cy@@xnrTcv$LOX6rFA!{sZm at rFIl0T`m0;<K+!cGwc<i
zTWHYy$Z+-x5!#twaMRNj1v7W<f99DRR$X@a=a*k5oj81N_l?<&@9^pGwB9a%d;4wM
zFa9n1B*9C}q=jhT3;t_CX>g{{9>kkD5U59bc-oS4OY+-JJX29$U-1k#%dbjDmo1o^
zm(yCgwo<|Ad4ZD;Nsg<#U?M-_AOJFI$+jWXFgQl(!;FQ~7Xq*SH$1ywe^)c%wyLnO
zj_1!X5pHiEIJja<ZPz6`ZYLxoi)p+hc(Ivu2XG7}E+uXdIJ!X(Xz at Q-XE0k~J}JUP
zI^eM$-m-Y5rKrHjCBN_$!92hC)Teb-hS=IqdA|Gt%;w(W*68rM?%Lb{ZDw^@MM-O6
zS$Qmpz0d(epl=F3IQTyXPG(Z#AT*gHZX^%Tq~@FquISegslAi;&Zz6Mls{ZIEk$3u
z{dWz?@TnS2=XRxOqjo%a`6X*N?UFRrjg{8q%z&(*ITaZ*qjCrHddo73V*IU9ZMsbT
z1@l*~5qt(qRGNnVVs<2k(3#_c`MjP}QlYeSc%8JfwH0`FfDbM}87CPqgOh`VsG6n3
zo@>tEx~Io%Zt3g;AG4)fw=9#G%$k!7?RC^o*q)+3=C?TLV=yYeuuuM}@4Z*%gW0Z@
z7NQI|Omj2Z5d7 at Lp>R<Q|E13d?!0y2@xhC3>HF=DL21VD?@;Alsf8|rje62Ws0V!o
zxk5!QYQjq`t$gvN6<qpu#p6#b<E!P1d8YgpU(M&s$2kz9y099hJ*Z1IG>MMDY+H}~
zx0Ua`wTwqoLH at XW1D}twWNTKVEXhtVhd`P+=JG1Jfj>0-E`LZKkdC$wzuwv^nMv at m
zmKsTAKcPJ6D&!ur|I>m6k4Z;sPXDDw^Lr}eyjF-nk2C&Z{RcW1DE$NVwW$9mrM}h-
z!N#RU{lhhysG8GIaMVUB{OrGjEd{y;ngXfw&(~g8wSHZd^t`;Cr^<)X#+M^4Qu)YM
z(rv=}C?CFaQ+Bpezl?v#_M<-OZdel*Yp|Qvw7(}aEsJOJ5Bm!$T@3DRkcniBzgCKX
zHEY708cZrcRo*nk)8a`iP}K!RNU(p9Dcfi!J4Dr!l2#XznB>~t+uSoNEO$nhp(r=M
z(6wC?XI(S5FKx<2as3qqmaLkbxU7;X`ozZe>H&kNmzP_3c!(h}Ewe^nRBMx8OIqFQ
z>*JZ0l$e?!#!q4v;N=Ax`C!fl1^g8?K!Ovjg8^w@*<0H377ni6Fu1s&{zQ38OL=8S
z8`$)#>AN>?y`j5;zrO5|Wy`vHmn$@hfxiC`eFel(nS=zIgjuRusr=9F9;G>zjZIaH
zgWElp_b%SJdC|(eC_c+tuxwt>qD^xa at 7cWd`lb}nE*$W_29Cb)zz~<g@!>F({57K%
zwt;_L7vF4IwEnz-CFZLt+uN&vD!9Q|m6dYM1skuP#(m}Qmd~8EZ0XG2Wq_NAzH{Ii
z1Zxm>j+i!8B!xQEhPcKlD?K-f%bR#aO51?0-EVdG((|_s)vX8%me1z~-d<GF`ejXG
z<-+N6_HgOCx>9SZ<Wkl}i(Bv)$-9L8`5@fEzoZ>Z3I&1<y7(yUG0kYR*~;>@p at E+H
zl6R$?%U`PO$}MrN;*bIfz83 at k0yxHD?~!445~e9J5BY*<{w%_}lhoW;yOGf5*Efbm
zhs`dSwbZ@CEj*!Mnl4&bpVe7heqP_a;;So~nkvg1>LqWvu4hR?OhS8IVo+pO(m+IZ
zs;zO$`TJ-3EbW~=w77TPkm!dEt^XBcfPR2W#L_Dmy at 3r!R+qod)~2t|ZRl!?k4-LZ
zBHs9Wrm?Xc2Fzk>Xz1J)`D65 at 9FX<`hFC|?yg+M-y>0N%c at KXldB47JA<;}4IXPlr
z*Pxs?c511$AoS0S&RWF6!`62BR9}CMA-b&%^>z+vs(G|gqZgGq_F)<S9(Bp~^0%7Y
z19ciW&-^d_Xz@euE%?JU!mQ(?2j$=K$d=bo41XN^wAj57c!}9+AN++5+XelWeiHNt
zCc)Hi?P%xKzWWQ&B_cG&*XPVl)z{?IHn*G7O*P7k<XxAM+>)A5UoEfU3$v{)dGf>d
zJGD=={Tte#8C_`u@(<eDN!zHKmfz6bmY-eP1X6WcGn>kYuo<~3T@xT5GU|IOJ`u7p
z>=uSye!1U at jhmM)-?(X+t)<0QHLY2S*mL2Q-Fvvlp2nf4hK6R%r9~db$TDJpK8R5C
zffl}iQH9{|tPdIsmJF^tuYYdol|mh~x4kd@wYm4&?HjLdlE0SjaMA}PzmQA;GaMRJ
z=TF!v>}ocRS-*d6*D{55C#r<_Hown9+DOTC*h+-tb_*rLv9r#2nSg1hnKl>`KIm4}
zm{5`E6<i-*0AkH9Fljn?SjtlQ6!j0j9MI}j)YIdGP7pXKL^T({Wr|Rd at MK^=9XMu(
z at P|4z1E#`sQ%jTW-1)D%b-D$_Ra+|zDNQ}KOCOrY*SDu6MC!Z)1FJAb_h$s@()3aB
zo`E41#kDhF0aBYjBVS;D`Fa{1n#Y9QD`o(*&<3Vpd3s<(n6EJ^E2p{|OkF8o6B+1Y
zb5BX+yDG1^Lck~k-p8 at N29Lzq6(HFULM&i|9<SH8<TuO&law{J)#ju&mGRy3rNkmU
ziEzM54)W_w^BinlF-u3ye57~R?p|ns8T at xt2ER$qq09vPA$j(q{@#7F7WWM-80_WO
z$^ED^$oJ7j^{`&#M^O(l#{+dn_<S at bt<}U69-O=Fg4vJWGkepfUZ~!0UVfQ-asJd(
zR3`{L@e%3>dq|_0YC^_KV0;Af?cHC5=;Bjj!Xo^`V?1O3(6s}yz9TO at Y-+umHnL6f
zk>Pb9IOLIk8E`QFj at lHkI9}#e@^qdjAA|78J8SFt+FDUQ1-{fE$U0X4(8uv^QShX?
zhu}4&fIb^&9ySVRCR_nL$X6epklq at u_f5~qi%(6B&&!dHmPHyLMEtm6?Ssb1vZ~@c
zstTu6O)0S5QCtOl`e1Y1r0Now9DRj_(owsu5rwwh at LMcnut#WxmSYtSrf_@|NN9uM
zcmPVeC_jBfYioqwFC!;EE+r){Kj$#DyH-E8*}^Jn7VXw^Z+ at CTB<5T!tsr8sb;+mU
zt|NUF!--M&i{`vcWAZ$0P?Vpm#_VFviikKjG9)sTU+0%!6<*?_^NF(6`&IetKr4x@
z8!@rhL0hq>qJ=iq`fK11UXMMM_V(9#>&G9<cS|c2pGVHfh0sB(&_0a_HYG6GE4vnu
zA}eaa@`rt{@h4{p&z%#{?z(73a{syK_9u7FcWrmg>)ckw-;fu0t?C|fnLBUFRcqGo
z^Xl$$n?F6fP#)rYLm%nD#x^Hg0Cv<-MBUK%iRBbDl$Z+1r$W<_yKwg#G0_SUrj;?)
z#`uAn##_GhLSIuwL5VKI8k(4roL86L7Z+#F&8*4|T{<m3@S^_G{)h<P>9W1F(Kph?
zo3FK|L>gNwjlO=-<+(a9eR;w3bVH&wFDq{5c{v&BGp@DeM<!>vgc5%tYW^$U0(%g)
zB6&@CNWNT{FFh~T$dC`jqC78Fg7C4L96olSDnwGlzdmr_K<B}O2d{p;<I(#&Ugq;m
zji!6<!3%8er+B%11JS^1Bo+Hn#|5Q>b*k`KF~C-spe8s!h$8OjurKHDY^o1Tx3(k%
z`iF(rg*2_$7~+>^D%GV%#|Bkvz4;q9dF6tPJkNH&75oO<U`uLdU~|AGOh`2TDI+QH
zNgu^-ei@q8sU|9js3=U~*8$CGKgy&oWU#_g+*+jIiKRKMCo^E9VAS7gH>Vm*VX;>h
zWe!Da7q^u326%M at L|IeJ)&p57+1Av>*Uy!|`fY9P&BoYp$$N at _hBZ?k5+B at ath204
ziqDCynNyS#XSRf<W*V{$=f>A%WmiX;OjUE{H3!LmI?q^AWEu)jD}*ang6Hi5*iA-Q
zj0V_tVvS4tAV7=uLWn at v8xafMQ6rb1$Tueznv+bqnX$2!Tx+U1Kd~Us8Xk2+YH>+w
zN=flk7ISo%DK9IfATP~owuVQV^Q}oa*%>bvPcJG;PA$gRWa0$JWf)^uF_&X!F|#)!
zQQ1xuG{vHTr-=0e&GwEJgVyoxQf2KhehD#XUrL~F^VlN(B4pi-R$ss)*j*c}-sbIF
zw8)I>FJ0@~@V8F60k4^efcvMYW3MrDv>1Nx!0%rxzXt}po2^Fk*Vist!i!V at z+FT0
z0)If*vZ1t=qq%H?JsYQ*b*G)oTJ8%}#@n_Ii%<9)`Q0j9lIn?2_4tZ&XOJ!v0KRUw
z*+zb5r=%?Vo)cD>S;McWn at +Ts)-3iFXs&X!ggq|)Oy|>2ck=IBhwqX)T4|SSv at Ax7
z$~xp#owZTt8LFk!lV5Lr>#bI9QtQs(>4-_Yi}V2KWPWD at ziZ=0;t#a%37LXrtG17>
zkpyA7kv#KCTT2@=Tere{R(kp&P2K5-_yaD9m8<(NA$+pgF~k79M{`|(@FYR at a?Ts9
ztuy7+^7rb@*|oKp6=~gkK4Sj{X-!UhbM9t~QCHT}o1@7bqzy>19?cjzpQobC6tXCk
zQnXV!`YuD+v%E>UiHg{{wBH3UXMvZ~9lR`B8Ve(93=HXcb^CJ^h{DUy+Id;!JXeJQ
zPZI;qb>c!hHxn<e#LKy2@6es>4q8dXsn-XC{6YG!{sC2Z5T=ZLsreK-lWb(#H%Uj#
zW(CH^K}U5XTR7w<?qdfjo;v-Q;_8?COJ;Ny6?b+P>CKipvzaG~t?jL&-<s>-<t!ij
zSvt~LTGZLKp|jAeH<;<N4SVtw$Cs#r?+V9#roKpQ_J|QtlHQQPSPVDOoh)BrR$8Em
zNhQ;y3#Wo)3g&^`kpTtu)#?t$JnUfPM0WEkY+-24<90Ao;>8XI at lXg{Lw}P#6a0&f
z^__DH_eh`Z-i`J-&at%cH1#)=yY7h<dkXOz;Rd at -YKFt<1lf{-CRB9St(rZjWLk5n
zbYkzEIZ7E<sh^ifuPe46uoaWGFjHtA=dSs_b-|@NAFXG;M_QaV!x$PSy*?N=Ri9-E
zBy$nxTh@T@o+R8jIg!%klhTv44TRr(r4C*QT>@PdDE1+(Ceea#fk%5{rl!E_(&@=T
z(y{XR*qwP4bG=gPV;>+sUX{}i2Bp_v&`5|Y at 8gNmtN32=J_+vHF~~g!rB at f=kH(={
zs$e71x5~Op;UqzMB_u*{(j9tJPEAfuLO^(ULU@?;tx2C?%1O}Wq=x(BEB`=pkuc*(
zG9qso{H3gbJ8g1Wi5!?d$)vg6pq=V#NGi|EXbPT^AES*)_x1D6m2|Nw+3|@kQQ?7l
z4<IUyd?+>XSz>GmZ;Xx}R}n^t`-oxMyLYdkQ{IRPQL8v$NNtjn3DyIxNrWc4)@C)<
z=)*H3;}S|tF{v>Y&os}ep?L`+=#aBOjB&O)#&F}p)PGwY<7WF9kNlgR(tI(hgEe2A
z_EB}PMDnV62s+T0bdT6yqU{m&Ul_c2{ILAbjs=(}m&%v&Ir2^X0y(<x;`iPY`yfBH
z@<cvcz8T14bo3mj#-zXET>>Jr1wRPyn%%i3#DIf at FoZGd!?qsvtC2-qD*v6w`}t*f
zWaVb&BGf%HxFSBvwLr6Jz1F4Or`Q;mr?<cgGtEwQOG(K|Ee@OND*5<NO%07*(tE$Q
z+T`Zx8Wx%XlLO<3KST^4rCB);lQQ+lA5*En>GyZt#m|!yTUvVf-gOP@|J}+%^BQyc
zxxhLa_Uz}<KS7BIM4aPjl$Z(Z)(H)WyOj)i$TyCY33iB{*6{2N7xm0Y>}r4ZhAZYa
zF68Ie&Rcak|C7A2Zt<$i1G^SodElLCvlHen+JE4k?)Inot);hvbCcznb+_+02Yj1?
zc%DCE{KCX4n9ww<BM+Sc%gC$@g{wc>b$9b4E|eDW4!Nn~+-)s07U&19>x%jB<$HOJ
zJhNa!zr|#-^ljwT|7xx4oz?fq8~ysE&W6^Lt-s;@YnvM7Pa2xg&qRz<r5GpSY2;{g
za*2V*|Ho~Wb at e;2d0|XTYf4Kc@?$~R-rU{YI;}gW)S6pbV$CZha%*TkuW7`3J`=I`
z@Z;zeA0xc}s*e!XuyC%TCu*#QaNi(qMDh3Ooqep<IN@`VzJ`;pE5A3~#XGmZpkY=|
z<{DGN>gAr~Y(4k<jEGs5+U4QFibJqpzCW(NGT)M3l%3VW4K1Z5tv7beO*Og&=jXIn
z_Zx#fUBaV6ntI@XZ8fCAIk+6I!Ug?4zMiQ`#x#TB-fHp`a>V^Jb{}*)=^<DI_o+TH
zd at J~h9R^=PZiuh&v*4;L%gftJO4|7Crc#r99nZ at y&E|86CIKVIC4bOF<ta{fuHYnL
z|3V71R(FlUORj+mZ%O_osT-FqC at hLC&)l@Ezbt>&$&?aXi~PmcNmaHMK2lvfw0%!;
zRb*ZD%I$l~%I=i^nK?AO{9!&dXJ|Iaj`77fY(tyTh{wvbkAo_N)Z$pGvr(t5R-w5j
zfoQ(HxMbUk4I5VMEQ;wb5*}8?>neBe5^k$bmBQ2KELd>W&K*}S%Fb0u%J&WR&KX+L
zJJ&=6<!lpT_AH=T5(r3ZZ4t0T?je7%B}|sTJ*385z{T%I15ck)*jS!pEpN*yo!vDw
zR9mrbL9o^%vUFNzN(}F5EzZg;D#{uDs}$ayZXIYHObnZ0Te`)islCEf<%t;&Cr-rP
zx#mjD8lLc>VY(XKKPNkoY?N{P=-o7_IB%v)3&jMZQDNPs!g7WLojwlAwb1TkfNZ4+
z`Aje{Igf+UiAjDO3;?miI4JNy|D1ZH%<$vD)F_j|7)aZciNOx*Rsl=v1WV&QS&su4
z<2-kd0lQwz<KYe*cMG_}n{SU=Ky=*%3u9~`!}}BMjWLZZ9<@E}<NK&+Cz$LnCu#`e
zaJ&UDt}koG7zAV5xniPmfVI(xNqPW$ti=f>ds~<boM&t6*w~CY_L)1wlHdr_NH4Ie
zb9jzc4cVZzNV15Zu+T0rgj7`%&SnQfnT)ic7cPZ~F&6y1sftyS*%&+}FIHG3UNO0a
zag_}eU6Dd@7rl!|<1VyuV=a~{k6>-q!9|F<IH|;8+>(`+f;bGYF6Jo_-=VonwR0!7
zJ{sX+gg~4j%Hv(Ke<q9ccme!vZ|5M|!3=!HND`xB?wp~iKPt>WX=_<R2sBD;iH79K
z592y9y2PrqGB(KMHPyr#jWxO4E>qp;L_c(nmts*l$DCk|DRhog?1}tuQaFwX6v?KT
zv!H_l=Pm&Ut5z~!6iYw@@;X6ykH~3{V3B4E8vbHkxc!Vyb>-7gGR~DrO*z^=h_<0K
zo!jP$j&TNYLZz_-g*ikCJN}cv&?p3Tg7L&S5d0NEOgoILCZPc+=>*_mCkj at R3lwus
zH)M4eWEH!V)PwP2YNsZkkc_5B#pz2j&2rvoNKjgl-O at IPIAVSzCFVzSE21gL!u|EA
zpE0`hOd&wmJ1f>-jt7$BRW%Dei!}oe)LephV%=@u#iM!c>7J=#eIz!|?h{-k;q)Wp
zp^)LxJwNc$(>)cm7!d{ECI*m%mGkzPa^Rb%dwgi!sg@%?qtmNA8nUCI9Sv$7>knFG
zKHcML7ZCCTy`#v6gfo?lJ*T<KseNGjZ13zr1?ppB=+Hh^k5Vw&SI-X+?_>8+CnAQX
zE67sR5U`b;;)>wKQ6h`5c at X3VH-5HJsq%DRPNGM?hT at i~+5&T>VY=vN1KQbvcBarO
z0b_~(6hR~um_3T<cXr}9B8iAd5>x6PL|yV8jn-9_lD+yKCqg(N6si2Jz}O8K6h1Qw
zW8y672x^)+aefrUbHIMwF+sX0 at lMc16z>#HQ7gX?^Q2J~6Q2<KbfsXTNdurpR8@u1
z6meCcqtebVwt^v?*g_Z4cd`a}DCm6Fu)%i|Veck}{RP;&9k34yykV#O5_MF=Y65X?
zQ^$7F7Q)0B+wtEm+93N^Ozad4H74pzGjYf#cE@*;v7fYUK7j}9V{--`!03>BVq&wG
zV}ulk#iWgek{3gx#F>EyD9+5FXoFvgG$V(|8KTXer)JL-amEv940|AqcR&YGyPz*=
zp<ij&s)*<rntorMkj~V)GT|%s$`JaUBIbktAnJ|g at w1A2`+_9o*Q4Kfk<d$IrwxG~
zDdHr~e}IqOoI0Ceyg#d)|La)Yspx*izNOf}sx#QPh(n}<Rg;7Wj)v1Z!U=h^uaA%2
z2`9{5AAhfyDN^dp1=9H7K|~We0t{=5azkUCEnj!HDvf*K1wG@U2^TxX8<s5z3xUoT
zv4z4`L|i>h7G%$<bW?&1PpX7bV+{q9Xq0$E=-~jNhZ(2HA at U24#vIx;@R-=cBgzau
zE&x$_)L|ovI7aXu!JQN;v6yo-<L$&s<0Bd+F^~Q#ENIv<u-+Hez<A`|7H(<KN`ZF}
zxRG0Rk{&BsbqvTaRq9Q^P*@OlIz9 at RQR0lpBv2<^_Kj)e@iB|OiPZRH;>wTaA!qtv
z^*3pc6b(A2wT~Ujb3&)yCdDc25Lh459*m<0W(mPpB63q`V|(<be1rfwg>VW}4RjW9
zoT#hVFpfx0s_Y!i$#r7r?IE3t4Wrbx+c2YbRU5`B7?fM=Lt}?vw_y|*S50UiCdHWc
z3t;5g>netx-T$y%tluF~qpNrFNRC^pb0(i0vqGOqn+%Xi`7<@%mm*(OnWTLfHzOH<
zidf3`_gT`(0#xO4xM)FcIfoUfQDSBxn?!rXl2hVl^>&-cF#@-WrJB<asDfx;r)-~W
zof7A~PMIg499?bYD)<Kh>j2~-8nwyM at H4%4%Zg2Wm)J^yMP5FVgS;F^$x9z7;x<&T
zgV<d{jDK#VHXtH4BC9YyC55V*a<x%Y(xzl4#^uDIn&7i$&`OEjSEHZo(ff2dQlZzF
zIDQX>YU9HB<tCMQ0%i+fDslb3gc;fDqtJxK{s)!ziuHZ^@AlfTp;31SkQ4i!qxSFU
z=sC<@`LqLwQF7S2qp<9D)^=fMk$g^WXIY7{CKz%-*t43<w)sX7A2tT?w8zk=QZIki
z#uz2R8O)3els=u&$Z>Eg at p>xoP|lkG3((8%(*30qCv at yf8P+o`JaPV!WaF2YoN|SI
z$Q*io`!CNqpzs(Cm<{4i(0#<#6o+pTarAnM<rbbn+A1A4HPR%h?5SesqdPMK3-x$o
zUh1~JN`QV(wr^%xjeaj}isi;+gibwwxg%De-n3T)r5C5ds|J6t68HV8i2Jr8N6>#2
z`|X&j&o&19H>5YtHV|BD5VN~R#q~24*Z&Svngh-jOIlZ-HIn@>HKDN-dj8LFB(vgd
zal8a3$A5sMSU)N_o)C1*|1U>eHC4_Q&6}0E@~kl(P;6v7J&y at oOaD7uxwGs3tO+as
z;Ou-lYs7oho%>N<cwOL*iTS at dRWZpT_^f*{$=dj=yV2xWE<1F at x1t}#$QAbA^<;80
z^lTaEoG~WqS@&b*M9Y=-mrYVT_5!n!3yu0RZo6W_!53w7Ud$+yoO=mvs4;{mN5!O+
z#OU+frp;~c=?Tr7k)=O3zW~QyVsls1@t2F8j=w|~iM@`X!l=X`&kCG`={M3zn6QYD
zrnJmz!(<0xB&M8M`3x%u^2#{Yu&{W>oLZq3^e>!Txr40b at uydKIjJqoVG4ZObB{d}
zeEZ67^20Iv6e*w3%I`^<5etnt5;}KdI@5YrZ0FF9tkZc>rI*}es*jI8SqU+*#w#Hv
zF?k7DIpSoFo6~t6*H!9HPF#{2ds6Kc9>1ZP4(!-)fM<TsqRqWSB%>6sdm-#CI=cfO
z4J?RXJiQ|f7{!M=*+HHoqb}7+5A<+v#mnlVp6huPXI1EwH)i@XpY5^l%l^t4pYv!=
zo$R0wZ&&9}<vh`6YP-MID$SH<K2>x#IBL=chm^VSKWmR>y)(DB8gtz*v?t~@rM(lP
ze+j=zRdohCbCU}dj-IsDrS>`MKWbNXwf#z0U;5>Ck0{N8ca?TuJInE;)#sTz`|9NE
z(_!C(NF2!#=h2Mh*K_df=ovt=SF!d&NDIADkEppTkqz!j+iBDK_3b_ti7|$FLwHhT
zNkgP(bYkT4&EmXTNH?8TbNSMiT)D8ZBH0`j8sSOHHGPby*5fMfg0pLR$!<8hhAD_-
zS2=rjOq@M~9V7e?N@|I-IDIx|6Y8vvqCH>W-Z2`Y_v`1<xQ~-9fVdex6}dtu*_Zl5
zo3bw@4w*e7WK|Lo?E#KBIjpW|x91OSVqZ!WJVG)iA(oi2*T$5C9Q~n9>`STTP*6f%
zYwUBu*EoJ(>JM%9eJN4;sKQ(l&5Ya+K9tclINIOWK2x|%Xa`F;TO^8ULar)0Ge>zf
zfTz<=)4ukLoOGgnmr3kp;XK)AShr($8Cq4u-Z-BqBR9Cs`Bd2{YIgj|GBu{t4(|lu
zVU;@>Jg#_e#(?BZ5wVG2)gVDT+}8n at y!Vsf$tP}6jBO)llI at 8J-EfK>bz#a`xmVRV
zV8;%OeQ!iLPlY2uc2~^!b8~&dK|0~^+^}FPjFJNXGZnt-6BrL&SP|nPr_&fr0L()a
zU4M3P!J89K`pqY&>11$)PFLWb5ctxLps*q*;tRkqe8!`^S{>qv(6x5mt-ya>z(<ti
z<nSkp(HY-X%p^lSp<OoOY*(XgWR<m##V?LEjfQZ1j&E`yMnu_#n$Qpr5uQ{@oI|Wf
z8zR<A<zf3tL=rQn(};V7kU5=5R0K>?&m?{ZONDmp>?f7Zcq&nF(3wvr-a^=)@pK}O
z5;{(8{{-46AJ18}Z?{v=jKbv#f1DYM3)T4+bdWz&&t_7b!&%`m>Tdd#bDF1AkJA|m
zGCZt$ohawu7raapi~W~a=q8;0n0RUvqix^wA9H}yY*)(T4|4J#dmMm<Dd#y~6*?O6
zB9oozbm*WlXFLBv3TWH`&p#^Kht?SiTvhi^3KdK__O$3@V3ctHY4ST8Sfp>pVD~kY
z%>-B!Goj$6&LNZIrRbP3;6 at Y%8V6CCMC~;E7Br-&)5&Q#>8f}v&VL%S^c~mMUneeb
zg>8iXAVal6=U*B>yIvX7rLXNuWn4o?NTEpTx!BL_zRvL{W0B1R!#DACY^2aF<4(v*
z%N6;Kfi%4gT*vL#kj3MCQuerjVLvUa*gxv|+7qZtI~9)o8mltnJ6HeSKHu9RRM>4D
zrTy0?w2wK~8Nknjqi1ywDK at c2rN^s+9^_+3HZ6)|Q1StYv%+ at g=p<AL7nAk)gTvAc
z)duvzla7>g*}!me86VXzV?;bp-5MA#;lqzO+}5xK6hGjT!mnc$o)Ao|sskNS=}KU_
z;f&r7#F3fL+94GppFC^FO|iPqpsaD8Ji9dx?UDV;8i&WqCnsIa*{DHj<P@amZ{q9@
zolhaV8(grb?e>2wIUxQZ(1IM~V=nj}cCQ!hfIDY$5L#F4vpI4)+^CMmnA8rAjT+e6
z80TAs4NWIA(B|l<?rV3oS0<y|Q3+VWJ_Qa+UIy3>li8<Q$7aVEv(%2ycuTa<!5nrw
z@yRpWiDK($yj4<;&5a56$k%qdl>uiZF9J>zjk8CPwN~Amak5HW?5yl$m^cu%>+L7S
zJT<w7rR}XT8m?MCIZn5UQRSEea_}qwZ*l6x-=5fpvNk|0u&lLvhDOsG@Z-AVgcxnO
zmlWz-TsJ3VG{pgNOHe^nXryPF#NDz}inGQwN#mCZebJ0HnUCNhHG7AeB?5U0=-`qQ
zAr9E}mlGi*b*(~qBa($}f_0nrmtv*uNm<6^k8qqkcSMnV=QBwV$(@?<i6utUPUNH;
z#)pqo``<J!)kNcH9*T^nAZ$#l>vv72Sik3z?)*=($6z>++&9=A>5R^5^{xRQNx9hX
z{`H0XRv`ymqP$39*kgVQvKd6D-vXVuLhyveswRoiMn{JDMZ`p86vigUDhXqP3PQtT
zu-%+xjLnW$v&Ue}v0tg=12dz?4nMAg_;eOv(u`nEJHTfXjwHXO%FVCGBMnb?$UWwF
zFec>{^b%`x9M at M<3&sT^DWb&>+0c*|psT8ihhMyZ|HblOdw#!o`SQiTzl*n3 at Cr&Z
z$lK(RD|pD|-&6=4^}h{oCh$Yp1opH68M+y#o=wV{a5TYO&s&3Q&*?hxOj&Jh*)vZ*
zDIHzAV*bo?mF#jPcjWU;1B?)nWy3_rtm%N6da})oP9xue)3N)LB_(yXc>^0Loy^|7
zZ6}bqsj|GKS-R9bd}l%H4O=%{-E at h$K|ZzgzNJgLX2GqDHk5Vc-xRNMAf4<tT0_K{
zevuMb@sq*JZ9sw<`=b7Xxd|Q7IjQ=(xryC#Of?&hZy3xe4mBEG?KyG!(~ODQs8qj<
zG<{NS<I?kYUUk)u`^t4w69*>b$nlh3fnGtJ(HU~&wB;@wSU)C5j^?(Jmg~1p%#nli
z&Y)Qg&QjA}Kj}iNNloLBE;8T7xyNA}MGK3K&TWa4nv`i*XKj|6LrQ#2w)5xp##(9<
zOQ!|%NUi*>#J>-H&#*0_s;IH6WKmRVKwAjU3kwM>m|fpr(UKT5yRX16$k(^v#qfk4
zWLc;gD8T+f5szdaiSyi)nSd-5lfUk!`M#EfsVT)$Wjc3_%9Lk-{3siUtj<WROtJ2;
z3Py7xQ^FDDD2b8~xk7%+#Z;4Dkd<K4dTNSYt}1PvQxX?5g-_3~Z7{^dX2hl#{ZsbY
za$7TE{dMp_0Ja|vq?Q9Vd4<gC(Jgl*XI0>;r`eEmA{vJkN!J<;J4@4(kd}5ziRRMM
z`n>86TTOGZl$w^D85{1)kD0=Cu?aeV{bi-O1>vC$MYVO6=_x6O2&0Q6c<E|90p$hh
zZZQ{+dMI)%A)}|%ct&woS7}jK*FaOQ)sUDg-Q87O+S$FKD=*hz%(W&O3GYPqycEm5
zpn1hPR4G>WK+<fOJ@{=lo?iDk@&VusA9qU1%^%9T@~Z5suEhVWEBRg7;zJfb{0306
z!RR6U2;PZUd$PV<VJ*>qg~)(wp!~bOHrpMzEf)qeY#pAUp<J8pB)`~g5%GdJQj2$#
z^anQ{Re3EQ0b{YPtLWXnZDxgZi@cR@vRd)lA>YLxl=t#Qay{<=+K{vCk$>R{Jj;|g
zBb+8d+d_VWg=MN_27eQocyCgYgUi>6{%Tke&X_g`UYaUmWF7oOSy9Gh(H_S!c7Efp
zip(ju`~v?t*pdHk*x2+-yyPPAn5N<pDo$pM#RTM3GhP>QcSqZQ5pDZF at mhLCMe&v~
zZLKZfp7JSk-!%sgP<)3U`bqE&ctVsJPl7sIj-?a>NI&e<_!)Wl9f6R$iqIKZ`io)X
z7#ulU1^f5N$a7eKu~Cb4l`?-hOg*L<`RB-&($_enOZgFm2S(_gASCUi4MMw}1}RL4
zRgQ{5qbI~dFOg0%=SZ>DQ_~XjDii#&LZ=5+`-NrAn7(AFbDR7gFZ|@wTdw^Wu`#C~
zd3f^$kMakzQ+oEN1&3{D*4wrWEZn;H<NY^%eEj<Tw>+_Z+mny)*hakP;=o6XRVYyx
zQUxx~h7mh4l_=Ce3O7uO7x%Nhaj7;Y(vNcwpJrbk9lv8sy)JP}(FC-r9_3GNici)C
zB$-p9J;QX#i3zbK6}s4C<I$7EYWNN5bLG4UPQ>Um5fYMH`5Zb_eCSZ at O*h>veJ<~k
zckxwx)o?q{<+<`pLY{DHMZ$~;nRdg;FG^&qiSy)!KAt51_Ap1p7nUJ|!(XB-M^5;^
zNiO`au)Udh!~{Zrk+cT$DXuto;|&{c%lnYKG-Mat@Lb-oe5}E=%r;=VAaWsIFN{Kc
z_mN`~)BFay06NEuW0FKN_Jn=k^akvHTJsy%(=Gg)^tf7i70G#;kn_#J3m8H^&HhS8
zZYUb9l9W5QqJo>$RN9l2w`bi}%8Sg~RAa3p`8Mgt>ClgBL~fioQcQ{b2b<i)*T^4#
zK>hU}xlwvZ`a$f#i|FgPDLf9d9p%6#{xj&};@#;Kyfo+ at 5}02t|IDY#AMxqwDZajb
ze%v)Q(l;hcj!TN?UGg1yxzaZ`R;9}O<$I@0^^P!VJQuE?;(}*fJqvP3EM(*x{)%)G
zo}(1VtWlX->@2PXw}GW8GliSGdPbVK+-ey}EVixOV~8w2r)6nfc1>b|$;)b}iHJ at 6
z*-%k5JtH}(A~0CmpA-4)-p0F4tCzPfXvhvX)+DWI$e9u(UskelMp<oXexcxn(OhA)
z7KUyP#)XVwlrv0Tc8R<UG$|WNkYcfBg73qT*8q;e(KQl`dIYJ(#)Y<N3I;6+ZEg8k
z$N-n-0Z%|%TlmLdLp2MW+>nHRi}T51exPwa+uYvBbpfJLZf`%*p?XSJt{i7GWk+jV
zp&kUWQn<7XdAyO`5UH!binbP{M9M{fQImPUKd+z&huRK%MrSlXu1hE_Lk{o%_j86*
zKXTCzS4ba1Dud$=iagsu3_}9?#E-1gP<|d)k~%&0G05E##*zFQGasFD<8HiO{^|8)
z{F#|8!;iEeS?xdHTV>)}UNyYpPdj)131dcWbOQ#R*LONad2sUl-wF-7&wPH<sjmDz
zd9_A^dhO>oIqfNG=&Uft7<qiBa1+)Ph>WFN**NI+s(gGYlH#3Mb+YH=D)|JjS}lLs
z!z<+{U<}NYU*kFA+Am*3-wFLA&UIk@OuGW3XXurLa&&;6CIR7$8?&M^=s52z>*=bS
z(Tg(>yEd)8WZ~8c8J1_(@UqtFCTnG5_2M-v=Pyai+Bi1BazQnXheAurO^mq<5~3I|
zy5>&4vA<K^iA31Lw@WjjGN%t8pz;czUZlBR#N?uekXdCH(cMw~UFXQNopxB7>y_=~
z-#CF(+8;vukQVTZJ$RWyma~@0ckuNa<i{bbZ}4pS4rGIE6gbD>IVzN4+!q}H|M=iR
z0+=6>KwZbblYa_IYs<^CaAZi|`Onr}>utRc>;msl4t3(2Vbt>$IU1cTwj;lskDTh9
zk2+*mq5)v2<Y|wWFF~I6)xEuA^0fbN=Ob5eruJ!$q4se})V7p`{vrD{<}=5*^awmf
zG`Skh4DPWnD<Owx&Rb6BdH%2R{d47<joJ@%gJgX|4sYmSX|Ynqq_c{QeWzD!`g+Cv
zPc8d5KQ3Q}$BpAp!%Fc2RR=ptk0*sP9_t_E<4True7dXIFAi(|>|#w$I&232cpptr
zv<A<`YmP9MSnAVbX2+!0TS|-(ym_`Zv&L*Rnrkw(qi>}R@;8<lxrssEQZF)h1|{as
zuyEg=;Xk`-^>ux9dabLxgRggdAbgbk-dhCi$L9Cm!r9_ipA-4LA9{LF<o8a7u}1m5
zzu*WRpt{W?>!fFux_U5|(1N&2 at x2u-!^e7CG00GR80K|qdC({i<%#!c$&a#>S`#-N
zKX!OlPmej}EeMaxKsOJTkEUhtZNwl7A0cx$@v$Dw2rkB*zy3_`@Vwq<L_=`UQa*J%
zUK%`5iP}jb=#GEEI_Z<)WvKBCFjOi~C18nq5}v%uG<ducWDI^~Fsm8jGV0$DRwU2;
z8?XFu{<f`sA094komO@jDct2Rx6GNpxwW;Zw1xU9bhai8a6A>ys2-=QNbmp)vmq@?
zQ#c17Nz1nO$uIN(np~s;8|pnie=~H(ms?H|I6g>@XMr2ZGR?6B6LaiDh!dfW0Y!AQ
z%Lwhc#F^vBf>#$<<QIXw#Ue0ASo9XDM*a<7;=Q(ac9y|+cFM^;tpkf%FO~llH^(a^
zq^n at TX5P@ca%;M-{^ZPM4?jB8!Q-lv)3UCj{!6S4`CgvF+#vQxIRu6}uLPQ4QV_{^
zxbhSMA_h0E?(JFUch{x+@2M!r=qcIr2VTBn<HmDVY}#PgPgmdjr~C29gGBw){EJ)U
zuWq?{=cTuzomiD7!q-AGnd;fW&>>S4`UbBE_>12v|9vU<AJ_o%gV*-hZ4Nr;!1LF4
z;PD}NR7pN>)FoIgusi<0n~z=iwKVR^X|q7pEET@9VyT4V83rcIC*)c|k}<nq>)h03
zN_J=81Y7n6+PFHGpp3+wiTPKlel7m4O(c8X-mv}r4zF<6_@Joh#E2<To=rtgel3m2
zLwy*wCOsDd`>Djuf at zdQIrR9JVhMxk^aK}V2LYqoKBzS&R%NHR*4{YJ6y`m}W2#?h
z&b;mE+7RyP6=T>gc_-)#ro{&pW)ydFQ@|9 at z^OsOQv>Bo!b4*Grv|zQfp6g@;TzC4
z?6N?ZS;(c$Eys}rsX;Ck{1!cOA)co|xRGCyQaVB0RFjO{RKY<rbQ!#@)Fv;r{r<y)
zr7kzjc~#DNWbN8Vy!ool*9jQPUf2I+zIS`<Ddm%M2Ne-}iZ!dS8w1anU!LQUy`F<F
zoH5C~^cwA3%F(}=YaVu*CKxn={l|l`yNj?aG>%PPY;~CVD~A?;%L5jD+V<%p9`Nnr
zLz4H)FaIQ;JdQse@YBmLgG3kydwy*A-jKCdXfj#?iR^rKn-4y8=nyikzzw=X#hF=!
zri?rodjm6OE-jnx$dYX-O-uf;!5o*6l9JTWF{8F#Z<ub+ksXWWJheyT{ta+e>^oWn
z`D=8x_P;M_`}+{K66W(8hQH%C$n#0(C}kf<S)4sZQML3KD^IOj;%wqM!;v1h2MsE1
ze}=YU+XXu4<$ulLIX??JN#2JK3j(2tf-9aB|2KTVoD&HBLrkaIcDs37`$1n_IsC@7
zGsO>WE*a|2Z`rlX-bXxnTIAIZRGn}%_v>tfJ9iGYZ_VBcK9?WkHdI_JKglcPJ!*TP
z&F82`>j=2vVK>0}77XhA)Q<m>_n-ef{M{E{P+7Y_{C^_{yh0c1Cu};UpCpYpxBrMH
zsc(?T|BF2F6u<tz`P>MO=dm+>ue~3nQ~Y&>eAN~0R|vJj4-x;_^N^FwIL8(^(vSxy
zC~3$u1IK0|H`$YrldsdDX_aol%Ge-Iz>jKeBia;mA*FZCM$&I5tsOV&T}FERw7!8Q
zLw#Ary0(}SbN_<H{k>Uj+e#}cN-JzOxv!$U9Pi5clfC<PY~G_wk-z34X@)Dd?YO4*
z#JfwLTC!x;oTWp(vzILHnM>Ov=oj_pKh4Q*gN`LW1;06&Q)U}RzQ_g^EydVFr3&~Y
zi_f4eMWtd}S+VfUG*Q{wE3as8zqG7d at _yXL`S5ptY at n?wMb at RI3j8rP-uAui!$;cp
zwm0xYlogoTQOX0K11LY4jn_AP95wc~7upe1kV8EQnO*7mWh8H~@knUmocFMVZFcHm
z?sZFDPjBrl8_F|t^EdEA4G;IW)b=)HB$=^oEapOK31F!9U7!j9&n^pew(qXJrG8d#
z?f2~}l(&(USiqrP5Gbyp9;v$PFDg7}8^z{yhBg+`I56lI=x3LYNTHjBbJp>^7;(BE
zY8l8`Z~erpHb1A-qunhkZ{?!R8yEL3_h=7ZT-NCNd1Gx$fz_7Mbp6)Ndlt{x)Z0$<
zvSD5IC!8AzrTkZcImMXiX=#rq)M-fHV4l^F8XG@(#%9g1lD%P_ksasN+uqLW>~@AZ
zAgeOhNVbL{x28Dq3#h1T92N#*>QtWeAs>=>NTSsO#(`499HrQD$Py20?t_Zfq{O-(
z+N)k&z}H-4w<9k4(5<1SI5lPXyZ7JcPdjV}`&sBc7&UMT<(twtd0qHygrr$VT`!tF
zyLS&iJo at -G&^36ZRrq9qm8+QZ at aPQ;4b%nA++wUKdjfweGsSF9d7<Ye{?&`GU at 0@}
z?$(SnZcNLNH_}s{?i=Wqhr0)8tQ4FoG<#srU}jT1O%x9Lu<$lfdJ}k@xX*4eu1+?4
zpxDzQcc(O(-3%cFiX$>E_%gT63&uagPGnh|-MiMCFX0WFu5x~o9c5M9x{{thW%uQz
zfI|PluJ~DH3ptBSA)=psc%A$iaT at Xbr~u6_VK>oyr&>)~jKXp<jY4}hyU6^xU#yn?
zr_Yqb`UOIc^X`hBjmbPHIK;;dej2MqlOxuIT3Rf@IpOeZ@=qm=<n14uRBUJsp2GPJ
zS9~9a)y7MIRQ#KNly>?XQs?%~>uSi2?R|YVH--erFT9DBN2~h4Lctf*E<JdL@=0L*
zNoIt)*v%f_BL7r=3qG8zp3S16hwoMzy4${D;sq1nD}Ia at 0Us+!?AoZ$kr`!Xo^M}+
z6BF}y!LolJ<zVn_Gnn^E at GWJpboO`=^Qs5+`}mDZ<qIil6suS~{|_#9_zb0KU}k%c
zsy*O(inVgM+(;@L?4CAmppbO&h&+rYj at FY*qOS0-XfA}^0UO`$VbMGL@J_GT^6iR8
zA6X`sIiD5zj-QY(;OE_Ax9re$tWVd8bKc-3^4i*|%y+kZ(+juQPT{hETfhj8Q`QBP
z>pGMo76O4QKclt&Gw{c*#hIQ6h1l-hvfE^)I&xHxtdQt=&NxHmN*rfaAEOjS>uB-F
zWvp!Mr#49OlqJ*iFzLZc)26jO^^|zhQdh&}wV|O_t`pB!`blcARae{Y5f5FuuAKak
zioHA}y`<<MWmP3kesJSE?U#sPPpqz_moRQ)<`%t9+3<5RT<m8B@p$vj<F1WmV;<Qh
z4hH7edVTzPd#~fMT{s2UQVY2D^#rYi&MKn&SK_$O97~RFqu=Ft-3$7To~;1~OnA<e
z2EUIzGvuUm7L(4I+AcjuI_D8(4*wrKmr9I<CIj<-6h$>a>J at EM>|%zt!3;ywEqOwP
zal)@U$R$2yYFJ!WbYP^Prwiw;D~>qXDp9t&`l_PT at RrD`qIGq3UTzQH?J!-Gaffe=
z)`5_yICToACwY%=XE!Y*+MGatK~wghN1=gNiJ+h*Y>q&JFv^(rhkq$tJIBtK>Jz}G
zNmq{YBd>HYDS^ue-M<H43LQf$FZgwk`$QbULQtoCif1m6<u=O3C3%1Jk$hVI;m8rm
z`w7w!WOx1zb?y4az6ONMV(B-p?eFuCl5%lcIfB7ynnhj3)_)v!A;tST>lIgL)88U&
z|9Q?DhR02O9+A3`+&C`i8axj>+P-eH>mIVFdA{v#tlQSERZQIB?|{?D_jpl!ewYue
zqtgvJH!xmeP5`@*Ryb()YR#JUfS3{Fhr7CZ)Y*jx**4H*BSqL?pi5#trM08zs|r`~
z))>`cRE<0We(gTHjkT}6y{2aM^1;?x`N!gh@DOc)pVmF-!<rgfeZw?(Z}4cC(Pxl)
zlN~3Xg^mdZsN=yZZepqt+0gLhdHzKVo<RCcsMeC*kdS#oc=!wRv-!Pomcq&r=4#2l
z$4_}W>FnHmM7sbsJ%7v_wx|zjV!d!MD7Gh{$6yN^Rw*s2?9V0Rml at jVDSzd0k)>JN
zO0p_4iszQLi-(h~w086^$8*ShO0&0>WLHGdbIHUb$~FUOk?XWVlZUxRSZAO~9Bi{)
zJ at P8)=$!kAUzBz5kaRAU2_*4>cDB9K{tlMG3m?QHSd?)A(zKr_W;-e&#)|e87cJ_k
zuNTko{fABN;&<4-B0J0jfXUBA<rV8vtwjE=%F6a)Uh`bTTAM6$iC7&uMO!6$HZUU1
z6f4qhj^dy+=?h`1Dput|GD&lUjd~}nOVu1zO;pjJkrn(dp@U#w312NeYKl%=(_;kT
z%Av<$(WdCNer0*J#a#{In0FGAi%jj@$PYc5X{@!qS>8yq&ZT+jGpF}q87*i~f<05(
zcf at K-4=R~OQcI@|NUm8`+JYoTJ<1N`r)#kTxmNzP?oT_#_Tz*tNW#@;<U)-JxH at 1`
zawJ#U)Wj+pDuYX3)Y;;oC1iO4o=SRZ@kec>IZ7W{djx;ngS&i$KlwDl%0xZ_iU}>m
ze5*LYmGc9_mpL{Z6n4KLt02Z$ua~<UUt=jrh>Oe&*Vlx_?W%BkVC<ZVC7mU+$8C8Q
zg~VI)LZ>3{vL##}>^;-*@YwYB)|u(!wm#E=XFQ(CK+mSjnH0}amzxuggd#20#9k~9
zbKn;qcdPQGI!kFmN}ce~4QM*~yocbQn;on-+wn34``#h~iDN9nQP<wsuK4LHI~D$>
z{U6%@gf%!iwq(|EDWSF{ReoIE38leol<&9ig$lkPJxKmFM_m!PAUtiimD&<MZEJ(8
z4I_5^xNx<JI%I#+vlwB&1`0v<hZ~Z{J6OyS$1;0*GHw4_D__M|uaadOk4TcAATu=i
zqQ-aS7h2`}Kf*3JXsOIG;(2*iwOIkjJs2}Zu<og>wze$Wg2iutyWkSrJxQ2dKFV6G
zU-0sZw^t=o{gI!52j#5_AlZj1RvtO6inr<DoH_L9X~h!m>FD@>y1VlDsETY|=XN%d
zkPrzVL7>ADmPp9H04mv<Ed)$LSWM6WAqix`kbr<VjG~C5s83u5M55xjpyQyT$jB%z
zgQ$!P0!mO+lvNM}!eYALcdF{%?ku3bnZI88SLxf`Rp&dWmQz)yPE{2eRgSyOkuVtQ
z=a>N+P7pc+`I!d5nT*xf^-LI)J8YP{vl~KRM at 2bi=+2HF;j at Z(t!e>yfccSlp~~bz
zE>L;k^ZJxE4%ch<Yy)`#*hmXs&TtF(#OoB`MupkK>|cS$V`iQ^pwCxj?Vg?(i_^zm
ztCy6ysO6>P49a<J+KsGq3Cd~!ok<6WI7UiyCCXWiE|9&91=+R&3wkhIt{Tf}5cH<8
zc(THwC*Yc3;jr$6LNqo(CYi><Ko?5~rAZXyS_Q#sNy?LBI|K~wrQ|9fX7QeC6Q#-X
zFJrN%=45nKs9)7&-eZE#i`j~<1LOCz;DguL)K#dh>QU|t=s<H-%2rh8g%-M$&8i@Y
zKXtz67U(N=4nQnlTBb~jz8!I`o9qI4zXV$p-G`!cU)i%qhftb7I&QclJ|QEjcSPdg
z(9v`CP4~)5Fk`_Y>fIr%>)^<oxhVzNj_NU2bk6GE?izLRy*`A!Zec=tQZja)gBP|r
z{Q#X5fg6)VZxdg;a+}ivb@z~)O_P<E+js92)gv}j-|cIiAkw8%<kh_+uPML0Q)r5>
z at 6dquc6HY;A02|bf7>Jtk4<w#jj{EJ9&$CTaa at +H!`CWb6mM8VT8PhfFSeSnBE-bq
zQt&jo!ZE`-i~f4ZU!m+L_CpD#G7szEKcZrz`w;p%X+k-9SueMmlst5Ye&+L4`oWJ<
zUoF`36qV)-?42;Z#qlY=1=&d!cxdqbH=5_B@WsdZr2)MXwSMk`$pYJ_=E?I0F_+ct
zQW~acO8VHbxMln}8l=2soZ}9G&Sjf-^SE}j!~0<TMl(dC=LYh}?(R--C8Hk*<naq%
z#-?r%y{+)X>=&P@%9po%Z*V?Ae2a;jZac)~k*m5CT<X7`6j5KVE(doWtFJHI><Gga
zKwJ;*%nWmEMp_d`_Zd8z(3d09ZHQlAuMi!(cRO%nI3vQp0r|r|LYDpsz&f$IP|?Vb
z8{5-;hxr-ST^@IstNRo~kY{Wwx6)&;ySl>EmtKr?bg?cmeF?c|USiq^QGt!Jv8nTI
zpbMl209fWRHT*{=Qtjk|v5oKiX!L=l;X~~zq3(l6IpJOhwU#7Hlh at DHisqI(=!QGa
z<z4G==5bNMiPSW^1CRUTn;|RuN3$+?dRZ7Ls1v4%hlTZUw2=IApX>rI`Xubag}weN
zGR^nspJ?MK81C7Cf0YAf`^{{?hsmFDp$yos18yN0A;D3RSL)cO#d7k9qdtzR!on&?
zcj at Ip`Ae6wa|d}XTxdFbfDR98dEEdjcu8(_lOikiAHA6aKSx?#UYcg2q(rVG6ngN1
zvVtMr)4mnA&Xl{biCv48wi_4q3UbHGX$nt>J9eNg=7Pm0hZ9-D%N2$g2>*s^<233!
zc5YGxPEEq-I9Oe7$;;x<y!Zl&Z!qyj4SV}ek;GdxV1Sp-s=UuA!R8a_4^N8x+Ky$@
zOGaPg2*1o0+a|SN)WCitJB`S>hu|ZE>#au6f*EcX4Ek(L=zy5%*X0<sx!HwLUHWCD
z4Ne|fGjg2saWB8%Wlv~-4A#xOzqAhe$WN|1nOBwjdZ;FgM>*QJE<Ms`T2Z*ZzI^hS
zF>(E)ItAEz_(WdOt$UaBz&}m(xP3?7c|PM7+_}d0n%_ec2gP6AJ-A!cfIht=D;DVs
zc*^o`SSs@^PUqV&cfP at cwht;=YmBv;dChgGJ0CaB&7A&wva;{TZtZU7sIzn6=&IK`
zUOZp-w)52ZoWF58e_>G~Gk at FbD^a-n^{fUhv$(k!R({_wZkqRRWqD9>mNlC1qO;yP
zCwTFUi)8=k>-~CK(~Ul|&R^W#j(s8+f4u@*YY3mw-_l#O>FGV%b<~`=QD!A3bETe3
z>=*MRwcTkMW##%0=5(7BW^a$loU;Ek#hlx8Vy8?(6`n>J&uN~t5Lrw6tS2yUUJiW)
z3m7IydVGdK0?%_*<L5aHJ?EY?pT|r_j_K!4pR{(;bd3Byz{<`Z)5Z;&gD`*I3EhS9
zWRe=;VqTJDQCG9*J`v~2bLCugbk;;Qh3;X03*Hty(5BI8^VJMG85S|HhB0 at Ju~_MI
z&(#2PplU?uLHA at ivv-e&8&jA?6f^5K at Wr+s^a<ha`Mk#%T(S`^hvAIgDS4~3^Kn}4
zPgt*WT4?h)w?3Ckx^!r4x~W!|eENo|$d%Wg!oE}LbM8;f^zJT&<~pv@9m-9w|4DZ!
zFnpQkFyD#!NvJxd2#S-P{8?|3<(9s&NgcC04~(8lUN?~_#l=Qu)oQ#QWrTjFA7>8o
z!`yezcD^|F#cc0s>7x#S_=B79=XlmSTGO**-+tbClgAVmbWR>06LD4YpdsFTHQZc2
zh;V6mar)rInBno^rl(2cGuO1~-519YPLJSY2*biUM)VyJjr-t6IGi8#n=?5$$bUe;
zzE=)JJGAZ(E0wnEVD6=f#}f$ctxTa<HcnSI&5TkuR5#9UnibaBk}D;>C_aC-y-Dx?
zkP$yK at K3*2{*{uYhkmd0|J{2b|9{*IXs&H at JAt}rQj<Lwx!>}vq5d9=-CF%No^daD
zo9kWNKEkoDswve=FMK`ci9`99UIEkU*jd!tDj1JnFvgN|IzQZ_A+URwmz@%mdiNP@
z_O;DCS67;&DR?2#4fI-*aTB|)e(|dsJ7s&0l;F7vtR}vH?Zf4Qy0-7NlNuqSw;sMF
z_N7~?OJweJIqa!iB#+MPK#QDT5g(sNVOkug6X)e6T`9*zXu4=?QXcfFyzbPFbJlFT
zw%?YG26Nl`>Nh2{-6>mD%|!&2d?;BrOFpCzqS at x@l5)#^CC;;#l-}6P at XmsZ<bh3(
zD@xJF^F7P0j4Ui(S{+ne#<_6O!Gu(DoY(R+Jd7n)nm8>-6BbUZ1BpP!X)%D18cWfa
z{t~uQ?0t!5d+a5w!rWtdo+uE})23A{_QA9;3XfR)Y*rJ)@lYvoYD<f7a;b;G*yzLg
z4!PBO>PoB~_vL*#ZXeAimSFJYHWyp`C{Inx4(#ElIXE(&*-*}!mJQhS)$E=~ve>!5
z=X{xk at d6trU@3<~Fucq|gVY_P((uwOGl)hdTpQWJIi1dSye7KkPM{mou at fjRdrYsK
z)Vr31G~Wgkl?O~EGq0U$c^T4&N7p=D@DP**#C->4;dW0a)WMN^v!=&n<v)6v+x at hA
zB6I?*Ah?Tbn6;LucNg(KYqzh$(|neE<2oZxyDALh4bFyMhn#Pv)$5R)R<A?SB&76Q
zhn%m@Xt8NrzI(kb>M!)Kxv$C87jAUH#nJ at dqYdy}`T*L1n~u2}sw<%8<P}N8lNGa~
zoA-68@kS`m1xy}%d09bih-}AqqqkExpi>zW>$c|Y^ugCHS-oY;V>S0KKe+r}n`G;@
z9WTL!fAr^+|9Q?@=gGBCExzk%=tXr_gBpWKzZbJ at Dh!OrB!cPAeo7)JkM>)t%(EFJ
z%ZsERJNc~`ZMl`9O~|{zU>oESFm#SOW0312=wi}|dAhH6csE?~O73eIXpP_9vnuZK
zHEfN}z`J)W^Sq3~xoY8xhi-P%-n~re0>wZ3*0y82g`zL1dq-iDgGt;xsE54#MlZ_t
z#g5+He%Uu?yASI*mow?QYaQ7WCcq;@-CtI!dFFG9FU7a1P%h5DQ=SXgx)es8R2~q<
z+bRnsi^mOZE#$GZ*hS=eR@N%(BqB>Vqpd=-NnNoPI<!0d3Na)7t^Ft_;BW3rd6SV_
z-<)FnMe9lBE4dPW3wHLifu6j$zoZF#algrbGh$2UNqSjltm(Tn3_U+Aucq%(A7}&9
zW$AI}G3}>Rsq}#9k1!uKm}?c{w&I3Bw?d(Xw)8%LGO29tdBFW5=DWsB<T>*J8=1+8
zd9{qmjdK%Aq#0VS^Gx|isCEiEW-IN~(mA4 at Q&+a+N;cBv7w7BY7JR|2jL+V*___&B
zAM(si&D-XO_{Jjh9Jp<G@?{y>kBQT@!W-X&EGevN$=^0m>)Vn&P?h#gJ$7Ror#VYP
zvuLu1tq)7Sz?>2n>fzYU%_hcbFU=N1jlod5W?u3UTpqsC2bkI()BdOiSL;2zroEXj
zTQ8I+k9hcOde#$cf9FLGX>N|?!x^yP!W(f+6kD&!<K;f=!dK2X^S{>{u;uKHr^*No
z>?-o5^L^*b$~n>KBI|&+Tw_~-K85kR$d)VdEDvhFYDeNJXA%?9Sdr_TFsG`F{YLWK
z-Xt4XK6SF&m!rpCJ%K%6Os5ihMKvB}o4wTDA9GJsxZH^>`z0<G+}jdG&38q0L|0{Y
zB&0Q0bV7JoP|t)e*4C)daPq#v>{yfrTRdS_pP;Ci0X at 9k`=h+Ow2er!IvPX#=X;Qp
ztOsDLVV at FSe8j8S-iqI|Z$YgQuC>+S6bblj>pODcU?=^A)qxz%oQP?pK8$r8U&`#U
z5Ekw{t(ORGbvUunc~srRtQNt(Q453I51MxvYy+m9TObzFeS3Oa&cvt|O|DA#QsYhb
zxHrIW)?~dFXz+!*yVZK1<unKk=?iUJi24T%ZiSZ?>cvtTdvSRdmX<o_w<eA$%PQbt
zRH<-e2cazZO$4E<O37$lh*bc1tGN&|uO=bGilI;bKhE2)#2nx~oL%n2E1_oH`|Yct
zXp*iG9}ezRdjErOWL`7w_JwuruMfU4w`N(tUKush{`|G=d9H%x&ILs^JD!>HWP)RU
zmE+nc at 5q?nXXGtYLUWL{Tw<;WI%Iqe{JuOlGi%}>I^OPE%}bZjox63uesDph?>L{Z
zUW2dg*{$cOm<d;>Etodt>W9;_voq4NMj2m&sUgmhh2_1v_sSdDH}r~_e$%_eUg;S9
z=S8cp3#y!aeZ|blQz~S+tGwa*%QGadzrQ16-n^0KT_R7o8hc$dOU(Ru1DI;RIZ!+O
zq0FE$rLX>;e844oFaDlvKs$zihq2i9Fv^H+m`Ya=D?EKb0S(awFv at usoZROY7TO->
zq95giCmB1IsB;5c`;huaNe5PUUD6OvF1E-c?Ulw0={Z!<o1QDZqqP^Rq}kVbM7l-S
z&`jxuitFWZ4g&c5S=zn1w~v!fcv2rr|LgFCIA8Wfc_KTz5d4iAB{_tf`&?t9qwyzc
zhHvj!v}n=$wV0ps=<P?)y10)lbJ{b(k-L1kCwI}t<AVk{Ry1P{2+A*%qHSf!Jsv%@
zJO|$w6wkCg620$aTbX$T`b@c10<?~Rzuv~GOVT>hlGcDcW0jj0Z({;2cBtzo^%_?9
zo2=OIRt+yt``~+%O%we>#R;cBiS*sE1|)AjY>__5GyOmFOcVM->3}WU*EHy!YUH&X
zGq(q1IM;Lx2jrrITz$n=hV=Kss_Q3LT%VjUq-!TV<k@?DW$DDB1BYe|=pprp7w$KV
z(042Fjsv!@f*zko%dH2Ng#=!ckjJgD^Z2UV<!ysQY!TgZvB`@W`nas@<HjWwwqew*
zkF9rEndC17`~}GR$}>?_?`30b$|7Z{>RRN%r>d-t&G|H3`&<#iWebsWMbrfk-fRj0
z6-%+^qo{&EldnQFDllUC!|A=Q+T+^8+uGC98tr2&3XAVpR5!jOPi*p at MVfQ-XexCM
zrWY12q$}m!<`5h4;VnePGCq%NkdLhU9?7F{I4f}JJ9jKx$nl0E-T_+&*euZR^3Flu
zgsZ6!#_{HU2e_3-@X9(`bYWpwCyMs*yr{y~p?HB`gjfG7>n0>cXQw*RrUxb$jYX4&
zj9FMq<GUSsEemRw?^Wl@VY*8iU7brN6w|^9>?PYf*?p&@TubZK1+D>VEsf9og|@NQ
z(%8vXu>=PVrFrOpTG|^FJ2X2_F{sw{Xr$stUweVPG4F}wu|Q|J!_IR(s#EJ`mY+Qv
z!h<cWE!wPqV{7&n^K4;mW1ZNt-elE4;h{1%F}ck5gj><v^r8*<l`V}gYP?n<>w7G+
zulbnpcO1KF*ZshQ9`_};I4<apSC`*?(=E$X7vXV9a?>+|a(hPizJ2QKxm?eb&5*~c
zu#%c11k-2Zl2<Ei(G2Ce58$;drAg@#k=cbKDmP4#<JULbXYQJ|(yl%H+jmUAdc^oV
zZWn4l*0rdUn2S?_T*+fUC{#|247}NStDvB8BGvtvlk=m)xt6YDzt6U=L!uG-8rC at Y
zZc5*O={$vmYIrJ_?yiDQ=r|fSEH@v2?Yndi?$b3Uei)_Qk#XOB8Fx5VUeVsm;Tzfa
zEm#SWAL=e)?oW6pPRstp)KMN6MAIiN`-EwQk1o1(g}MgQqo-+hB{T5UdH>w!@HnU?
z9s~=5Wlm47S<j-m*0uzkH_CnJbFRBTYFygNdCy8lZfEe!Y*OpJbtmB=-L57}%VRy|
z(yeP@bE!BVm0aAm?9DJx94#bT&;(?96IpbtYMk3b62?KVZ>y8-3fjyZKlOxToAhhL
zNuIP$*V9$gpLufnrqZQPOndr{QrSX&bs6IupM~Ci$r#Il>G|N_yEwDfhqYs?^z?Ph
zlz07%;>nK`%$zp8q;#^Z=8YfGN at p?V?xpky2c`!fT-+bc<2$a|s@+Sq&j%b(xZ-U~
zp>p+8?Y66Q6O`V5+%`=67xRR^(rlwGjZNFMpkb}qb8fhyHG2-B-U%{{dRT0E-vqZI
zxdXog6nTf|a~+P<L7gsd?>~sPW=u at J#ygV|V5i1<fbBEchq0}N=hf)L+MD)<Cg;Jz
z2U7PiwpWhTHa#2G`BRzdXsGM(;WVMyL9si~8(Oysb3X7)q1t$#PQkuxm!}biDpNbU
zoZhmxk>i^_vT{jBU~knOakSdZ{EUqL1Jj7YhsNfYl#YuT+M~zNm~o{g`LRQ(XWGF2
z85#MR6gMz=(16Gxi35}R7r$QIKQU3hJsgubByzx at Wac7Bya>&s{^p9G^)qx4E!NM5
z at TDj8vrWVpLHgNCbTG>Gv$tq#tk%z{83vz&LSEPbEsi0mXA)t=_ALG$K0)+=ezu7z
z^qhXiy}8Cv{p>Bmj9c}ykLYHs6X~K#%o6iNwI~xMqEyr%-};JiB1eqJj5HFjD_e~d
zgOdUHWfxPBx_KHq#xTWVwxn5!Un3Csn>h&O60rhLl|UPeU(z*xIese>Q}Im+p5}qC
zQqZuAA~6lGVgwT{AK#VZo0<5=fi#?M7G70AU|!O}yB(f<(Rjs(0s1LHi1eyi^Qy~A
zN^9(W$K{Og7a4h_`<s}Qlob1vdFC(njN;j4C6)FFJj^LBubNd+Tv;>No{se8<z-Xt
zCFS#GmCm*oO`BFcjg#dUl^4&nJIcz-X3eUaWAB^Z&mJ2c9Wwy`0GtgDE09;UQleb&
zUn!r^PO{4?rqs^1=N47Yw&P<C<SIeDa>S{|$KsOO@*+GqARXrzzgHthv6L_h6525$
zwO<0k-i)S-pNxEoL28vdF+BTsR8`hEs;Wzh?XgkO_CfY0oY^%e_&#|+Of=+*L6VEh
z)f}~{oF+9P@*zpJtSc;^9Xzp2iFgwE#nrRRsw(X<QPGL`=!vCrFbmw9`K9S28?y#5
zt7s%>6Y|eBmc2S#{uwA3v at jg(3XSCr-RUd*Fq(c1_I}<O5d?kQ4y%fnLC=R`4Zb7B
zfR{s?g<(W{1;*Un&^Ov)MeYIp)(c~S2&~NXMa}CkTg?E-F;LdOSoluG<ILSe_`fEj
z%?v`VA0n<2S7U{LC~nV76C2PvGEuU_#BkhMJ5r2-{u~W?$6)SoEhNkpd1#aQXp<Af
zMC`Y_P85hjF&QUe-+)^3q*yF&7yl3siKoRKg73k2MLa7ui+_r@#M@%MxK(Ts?}$6a
z67jBhPrNFg6VHqH#S>^H_lVu%OYxQ1BkIMyVz2mGd?WUWZ^g^vKJl3NPTVhE605};
zu}gd}>crp0Qq<rN#0%nIWI)GFB^%mgqi~Uz*oIR4P;4b{oayN+&Wi2gBk^zXu{e+I
zV{OQv0>pIG*-ymh;#2WA3Z%9;b}Lxy7Z<1<TKNvKQ+z=obeT9p?ZuB2iY-bV#U`8t
zdO3BbFzSL6(z{YO>P~hFm#uw<m`Od*qAIDUaFP&J)C+ZJmbg(=Q*Xi{Y2uuii`G&r
z=1^bwv-PJ)ag(?iT4laiATZye0Td;Epn()E{w!`0e-eu*hGNB0iW3JYUc5mGlt@W9
zZ8!yIoeicTI3<fuW*;hkrBq6zba99>#7{)xusBAU;)FOUei65c<Iwl7i)G?}#3^xF
zoFRv}Tihi!if6=fu~s}NR*0v>qv8>9P&`b-XgH0aku-|3Xf$Qh7#d60QV!)(9*v`X
z8joY3CekFjjtZ!dCe!tB)G4AVG?k`NF- at lu9CTGiGiW9btEiw#s-jtRBURIEs-apO
zJvf(cqIoo*7SPSKkZ!@r?2G8na7nq17Sru?2Q8sHX(`=BchfSuhwi22bRW+2eSrRl
z9;6lY5Iszf(4+JhT1l(uF<MQJ(;BLyC+JCfiq_K8^jCU@o~7sLd0Iy=(2MjpdWrr{
z>*-~Bg<ho%a4LG8HqslkiT*)v(q{T6y+v=+7J7%?rT6H4`WJ1b4`>^GNFUM1w4MG<
zpU|iD8GTMW=nL9OyJ$CkNng<(s;9m5HGM<-=v(@ZzNh{41N}$`a0>h(I!s6CDE)+U
zACJ?|bb?OOFLa7d(-~@@vviKm(*^pK8p#P?ePLiAgQF+B3~$57 at HPB!hl;-ufL*d}
zal2ix(as3LO;qiTP|Vjm8l8;Gjm}1x(Z#sJ=xTJsodR|v+~{HS#K}IrjR@>S=xg*d
z`WunPmAIoJ${1)w8!<+#5og332}Yukgx#zu#vo&`F+ at DzlRBju{fKXBRY_H4@l2nL
zsYTUQl|GsB%|CNmRZY><spw&RGj)WlqN%kt#XeaoUbgy_EkCs#Q(9YDQdC`AQC?JA
z<CCL)%TY0N)u%l9$$MONS!GGvaZTb+k}>=zxiM2Kil%~_z`Utd6%|D$BkD`v5$3yM
zEO3-Zq`)lC57{0ce8*^-IUZjI4)gfnJ5CcGrzI{@IaH)SPE+y}%QydGH at C$)Lb;N(
zT*a$YpDN|2wpC3eu2#RzmT!TxJ(%#Rk at 3B2Wj@t5Ni|<a_n&Ve2iAC`^exit7wh*j
zE$~c_NP*>^A1XaQ_*UuY)t+D0YFf2g#A?Z1V2Nj(GWA<vuE&?CPSsUKHC~yu)l~r=
z-?u56URD-^VMvnolx#hvm`}0M)>Dl26l*=jSx at oSQ-bxBXgygNu@*+Gg%M|A#90_|
z7Dk+f5ock<Sr~B^Mx2EaXJN!y81WWHyoC{OVZ>V)@fJqBg%NLI#9J8g7Dl{<k!Ynz
zv{EEmDH5#|iB^gvi>oAyt0apn>|)hrlw@(0WML#(7)cgJl7*3EVI*4^$reVkg^_Gw
zBwHBC7Dlp#k!)ckTNud}Mv8 at zVqv6M7%3J;iiMG4VWe0XDM`Mym1WWK(H6A?i&}z3
zEy1FeU{Oo3s3lm`5-g4rERGW_juS16#2Ag5Vdi$Ci4_x{pnglRVyBoC&~kMAm}ryB
zm}o0yw8>>mw8>>mw8>>mw8>>mw8>>mw8>>mbc#kbIf{v~uu|gGZ^`NUJwv}|>UW1J
zg$K{c>bI0w{jO=G#Ou#m%9KR?S(ihKnNIVQlB$1C)9;#x6wO15<{`zQeou|o?>dK5
zHGZnbPu2LT8b4Lzr)vCEji0LVQ#F37#!uDwsTx03<ELu;G>xC8 at zXSZn#NDl_-PtH
zP2;C&{4|Z9rt#A>ewxNl)A(r`KTYGOY5a7JpRV!KHGaCrPuKYA8ZTYrrEB`>ntq0+
zlcDKkXgV31PKKtFq2<WXa%5<_8D`B&jyHeNl4NM43=>I9lA$HZ(2`_o4l*?dnVN%4
z%|WK-AX9UYsc|wj2bo&3Or4XN8b4FxXKMURji0IUGc~?L<2y9IL*qL%zC+_XG`>UQ
zIV7GVQROt=<?ncx{NY{lhxg=w^r>alQ)?@xmlxj at FxCC+pKf*W{!^_-pG-L(@hO&X
z0mIz!14`V_{==*U{w3C9z;JhrfKvCf*YGJt)n29e=QE<FtbAIrPnmifp|Hy2n=xXf
zQ8puBq&r=}4EJ;3%#!Nj;>z-(%4ua&y|RGmRgQlFl|{3vX4h0#%_=RnWmcBhiYrTe
z#wfB?N`zcDk$~CmXRkbFs)m^wr?{zAZ{t+zT9tadJ4L`;kLQUV&-2{R-sM%5C9|cX
zN{oq1&=YWSxiH_xgblN6fmv+<{_}1X8|MBbEklO5k@^e5hR#R~*RM1>!}y3XxG*pZ
z?}lfL!toq##Ns*5h{JQd5s$Q9k`mA7-N7Go at FBv;aAf6)pz at -cO3dFmo&XoT%RoKJ
z6y;?lMVS4YX}#pHe8vo6&dY0>-7vS01+{F<!GUIkf$stGsXLx(<P*5TY#qNc@0k0u
ztvC>~Qa%f=3jecYEXab{J=1_BGNmu9Yy)BWNW$zt3vrnvf21GTg!ix}9J{%P1!HD$
zb)^WB|3kG5ED75-e2~*@2f<xn>Yb{QyV;UfTi7k8fWKQXW8I7y`&XEko*^%a#XL6{
zXRE!7dt}~)pX=*lnCqy>as7z3k7FVqVZ7^{n21w3CV^%FPWV{ndR{z&c#k5iM!?-S
zuI)G_YL%Gh+9f}Ij87}|r%=~tq7zbwx%fnmVAlrVY!K~TTM*|i>;vC~eduo@#^1!{
zc<+qw!(2~`F0OxyD-hU&u^zwf!M6wGr+;f|-^fqvV5fnl)3sH8dIg_gCk5}E?hF0t
zJJh*g*HYjv#kU^<b3ZT-fzFe_{0^AAk>*!m?uU=e%QEdJI;}zhC08Tj>_HBAp|r3X
z%y|Z^5WEc7jIKZ`3OX!vdMvCi2VwJA1Mh}*hQs)WaSVs1<=Ecx3i3+!y4TywJIZ^%
zPngd-->ZE~eb4)O`9=5*@f+!v=U3_Xir;p>-G1M-vA2n6liVh!&8#-_+bs5v@=x}k
z<A1aNcLBo#rUZNxa5C`nz}UbEfwu%M4t$`kSKB%A^;A$;kUeNn&{+AJ9JDBCHC|8Y
z*ZQFKL2m`^#B2Y5Sl(?=OU{WT*GnP=Wjo0A6HZTf3bo=iYQ;I!igTzH=TO`HQGUTF
zop#8(5WGjAB>TJe;%>BWL_9oHl92z&$kP<ptDy2Rs5~YzP!5^MMF*%2bDb5#ar5m+
zoc5LD`bFg7^LTuo;5vo+_$|(OI)eK6wJ3M(5EUrHd8h?zfUyDew}9?D2=5}ihp-<s
zLcsSCpq~TcE+8HN;tueAL@bAnxX*O~{2u}TN5o2m#}HN{Y(V_i5MD>vh~N(@`$Qyo
zhyu-6 at U#qgkKnsU5mqB?z;~}9pvAd%;)bXTko0q4ehkd-#bDIHA+EQPVkc7U6n{Zj
ziSQW0YJ{$+s}Ca2PNKd(2nw4(;bY(&M&5jb{5Xj9`ZHoQ at N>Z3IOOL9eE$F_ufXSr
zP_G|Bnnw}-g0K?dF@)6!8$jbL#NC6i58(i4H6YDdgg_vj2cJ8@=XUV9A3Sb>WR0M9
z9 at Nf*+Idhr4{GN@?L5ke^I;jvfn{g8L&5c at DCLh)%FOX6IF;-x=($jEej1$b1IOQk
z+n-QsTae$MgX?qP>J#MFC*bTfxH=7vz6VF&lYw~HJK&lLs<)vwg@E!dP~Hj3yFmFT
zaQiUo&t7o+FgX4PI9>wk=Rkcc>cVX3xlmZ&LSTanfn_rUbz=|Eb^&b{N^=)VbC-An
zVT)@o(9WS12jhPTLN8YX&>Df}1n(E1=M6}D9{f6C)$@YH4ak!QNZkOcjo|$Pa`giE
zzaSbA_bdX}lfB?^C;0mu{2fBce+C}k1EnuPVJ|4`1%<t^HV3=rLCW30o`+QHQR3@?
zyB~S>E%NLKq<9Y42T{U5poI4$^?IaUkJRgdy&u^7fxRCk`YrPB2jt%ms7LL<Z3Nm&
zf7c1**)QPb5c2Cd`1un2;9M_g$PD~8T-K!q<Xr>u?kq~?G|)}~=`^JK8F}^#^6VGn
z({Z4k0NM$lodDV?pfv!k0r}TJHaxS`hk>*oC_8mM`UI`E5i%SG--p5XVeowz{b?|I
zjCRnsA$afVS^z)cKOuD;c-{e?KSwUC0^d7P)(2rp4}>kf9r|RhO{<_Eo(A7_&<%e@
zduT*^Kq)~BjYG&snBZCq9Z?4z at g!tg1s$;jI^u3{@i<!hF37kSGCqzReHL8RfvY;y
z at H*7+I@Itwa99VqcS7!+s4F{BS9YSV>_nRmM$Uymcl3g$84GQ7EkZ7||2Vv>lC1}|
zdQhqdrFu}RN9_#;pY6~ZLh#<zwHdN*28E4~^$T66cSBCp7ii23)REz?e?hkGkd5Wq
z2I at N@(=Nzz6tcVkSzZF#ddR|U{{zUe9dc|0@<zz95$GF%z7gmfA;)gWu^V#ih8(*g
z$8O2dR&ewSINA!1J_1J{f}`!==nyzMjGR9zb3O^}A_JUr`yC0nv!E-v9gjm9Pe9-i
zLAmRFaI_5^Z3RcafTOR$(E)I@9UN^3N87>Cc5t*E9Bl_jN5RoiaC8(L9R){6QFGcs
zYeYa3#G>ruQ3q7rtOwdRKspGdcaZXP$@~3?y$-zJ58j^z at 6UkuHAwwFcz+)hwu1Lv
z$jwfm@(g(YD|mka<1HJgJ%`f+wt?c?s3G;>{dVxa6udtQ-nW7Gb>RI)@V*ATuL19C
z!225Tz6QLn0S8;b`&RJ26})c+?_1H at CxXWU<dPrwcoX&i0%~g@T37?<{vEX51g$rb
z{!R3Q{>b6cs4WwrcPAmY3gmcYB3j!d)Z_xRECZ`TgwdxjMs)si1a=0oPvG|kaUJSk
z0kmHTBx`_VCoqoeh*EJ%nqxpA2mQl%jD8;g7b_6wA+*!4 at V*COAHo5oX+WH_2tJ^4
z0Wn=thbjGKgZ{Fy21C38pc|0q9H=*<Zni_NW&mqAcpnMfkONNg at yi6(8Ho86e%phv
z58(jfG~oBMuAiVE&O at RCV0odncte_BAPwv4V^YSGz*y7b7hmvj1iw564Z=Ba3~A2j
z95 at WL@yNvjaA9CQ%@1RBtbd~(@kzm(!0D%`ADd7=4x@f>?|A`Q<2*(cE^vPuxfTWq
zewE|&Z1BJ%@f`e~3rcyAC?C|uV_Y`@)F(olPQnV{b<jQq$k{@y9CDtmK>UZGF-`qn
z4~)GCoR9luPM;PBfprL>0ddbFoI^N|!1;SvYQ|tZxxnXs at VOuL_AGd19#4u<vNTWW
zoOK~*U7+nk&YlFlQ=oSWT>B$MXD#z7E%PDJIs`h$AoI_<v`#|4<0!2L at O~1!vo=2l
zn#V*v!d`@L5cVN($sI&EBunr(aE^oT;}T^%a@GZu?cmr%IRTV&KskjRJr9%ypm41^
zEpy21GwM;F_9A?PVD=vek>(JB?ni*qAnW9DP&@>R`$6ph%Ht?_+K&<ocD(_79vi&@
z{2w6Y50LUOV*iBL2Z4VaXLJ0DR7b%Bat_k0z;9n6&K`t%guMvgAnZfnG0;JTLkJB>
za~9zo0*`S&g8pcOo+lV>xeIz8Z?xsN(3U?!TmA at b`6C%?2kPe%^mfmnw|f^Yei34Q
zf>=8cYX at TOfIPi0qfEjmHwE=^5Om`Z^iIq09iw~*lmLwq1{7bU-;DGhBK?O*|DlYv
z9qDgH`X`ZoGtw_WtZj&;^egLB0xh1cOhkEeE8(8v3e=7Nd<_0a#^3)P#6L3X=ly!#
z(1yQne$n;6k|TeFKc1Cv*?i0OfO~lK<jqHfyuY;RFFa1PS#kN3AL_n)<dKPAn~y$x
zo5X1TEAvn<>qpaGNA)V)qj<NfWw}Nvy<33xLNbm4O`vAM?Jy<-Wq3mv(i_4D<GO+1
zH3ohV0q}#k3KofUXy;DwcF002%7*^5!<T0!VpZZ5jg|WOh`k)Ic<8wYkmeDw68;m9
zVaz at V{s?Q(CN_vSKxqp+8q#35s0Y1$c#RMT at ER!&;WY~5?(;z4Kenid50+NN at cWis
NJMQK8PbU3X at xSEV^uGWA

diff --git a/drivers/video/fonts/roboto_regular.ttf b/drivers/video/fonts/roboto_regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..8c082c8de090865264d37594e396c4d6c0099fe4
GIT binary patch
literal 162876
zcma%k2S60Z_y5f7?j21yx)lyku!B@J_FiIdpixn=VDE~(i=txhJ;rW0PAp&nY$z&%
zy^FoX#PnFWz5i!+xdZ&>`~UvVynDN|d$Vs|pEt9FP(p|czC at yL*{pesn>}tu5$5!s
z5Z0_^#|~ZEjLknxm`e~Loh!EN(yhta1sj|Ri|I;;=bH{)0)w~jN#0Ee-HTqL2aM=9
zy3xkg6A39h4V_*bFmb%TVq?uqLINM+`nQ8d4<0f2&+iTpQllAub8>LMaifV1amDlU
zaou6?@VG(cA8nEdsq-tLH^PU+jF=oz+u4&4_vIk){g8qEVm`Jw;E3N=$Nk|$&|sHl
zHwWi2IIlQl#Q4c?=EcW at b{j%m<A;wL&@cbu;C+MyRVKvt!iav8M{8Z!C)|&Fh<;?h
z5d*`z48V9x;W}GCdepe_<`E<Y^knesqsI;$J$`#4coB$G at _=w&F+%25je679sor0t
z93F$uxnG@Ya-931{l?GbOt)-<Y{uc#mfx#<@H_2r*#S+hKbMo+*aj&*6<*{>e8yYw
zok%=LS0WW&$4D7rZbXA~L7Y#Q;|h^BN+B45w~B>4GKfFM at +d;`iJiG4 at tKK6AKrJ%
z4jo#OMueD68X^-iNV|~{J)zt9HL<Q_z=@tPVF|`v_@Q6WKY%%r?JSYRi$9Y|;tVoU
zdPri$Ph=n+NCvZ$WInq{{DrZkyts(8rz=SX7Dg(ua%8#iEpfs9;{f{sy#ajyVStT*
zd4P6+(SR8GD_KC3NfptVv=U>;da)*1AY_rY+CVZ?s*S$CkbP1ZnIttN`@|)H;W!^h
zrbsDdAFDx*i9<=4B%-}N*{3PMHMC2!$VACO!6QKXUNN0?6fclkQV>}pd6M$lGNe9!
zQ%B4pPGUCc&b-M=p%tkNY%4^PM#5$yvN&AtNk)j%$r3S$d?(H&eZ~5uH_IaR&=xHY
zAxr3QWGQ`XP8S`4e<Pc<0!aWpOT^`*m-4$Mq%S*yb3O1DVk^dycp;zoXarJC_=i*x
zE)fslNZiwi{y~y}U8ON(E{+q#Xz+SB>4ovcig$@O{fVp+-;kc5Z;+-n=_RZptAtE4
zNE}IKYTBTEKbg!-WRBQ^^kW}L6F>tthfEdY$wuKVY05mvD#&y^+NTKL12V`U$g`U!
zjC9o0A)`P`Gwl at f?_x6&#rY?uk=^1MlAy^X?L`BbA+8`T(N`~VGg%{TBo*jqvPm2V
zd3GSatP1g!639+mU!mPWhG?6SezbsWmllFwspc2b3^Gt$iLopPFa99$OfaX25v0Fx
zj_ebbk|n|cGFcc(W^;bBLnMw>CBec4GL;pOKCCC1K}f+KLQJE86M*{w2hb0u+N>1h
zZ%@WBPw-|ONtSjIZ}4xh)PMwo-pSGtVgzn3ognR`MWm<HnT!$VlNj+7*)B3t6ZA%l
z9mxQ(666fp#bsm)TSv}<r<H{Fp!pp1lDD_RF~7Gu=_K|hiPHC^2YAp|vyMy=caS)-
ziTS>!6=@@xNmVI^Oto1-YT4`}$(lK&0pw?p?8#1zNP at LZNja{IXiJv%kw8gH+G(nj
zF48 at cBuyb}wF`+sn?Vd37oyYrM2wO|zDIwnv;pLpRGLIV_xpj5TZCTV`%O|)qbKg7
zjzo%E$!4)LU^}TUeIQ%JEjUJ-aF<k;t}5f*EJl&Rn#p9dW-G??5Ao83<Gx5hI})Q=
z2pmHK#UbW5I3KLJL;^G~(8nUPiT9(m!SAY(*<yF|Lv1zC@{w#1uanBqH7Bh-xumft
zCpCFwmGqRXwH3)xZ60*Pk8~6skZ-v>#01FRj(CUysi~YpkF*qhRwOeleM`Y)g4hzY
zn#g#_cQ9ZKWIYJ5i;&Od0M+^PrE;+6MbM)GWT&tkV|hT5MTxACY{~cVCmS_ONHb|J
zX`sDE_JYqVY-)j at f8zQtko^rZLR+1LO5Z_GMv=9!)w$AWvRD&H8j7dPkCi at pl8urP
zeM0VBf5p9I2q0EGM(PT!$v5KPq=#lTi2{FOG~G$KRE^XUTa(VBmc(f at Ni)p^(ohSZ
zrP)E2<KBs41u{@NMEoQ@X#rWT74&43=thW56?or5%u?ZN?cj62LmT`yL$swk;f(WC
zhs;9ZR{>HZ=ut!X*WIKP-9VxNL3ACd2;70)BtzH(QjcYlitsZn#6;4A8OdVU*lMXK
zSxx>X{@VSd85=}~1ESyqzJV_Y7owrV at H3ij#9OnR?6H|h_G$-^I*|7g at UyRUpLmPD
zq^dZc=%rSqx6}c=dkz1QLx$MYB|9Ywd-EjgHU6Zl<_>srjSSEXg{~&Te=mbyP9n{r
zvwOw!q#^F_&m7DKaSrT>`+8^6Knx`FMH^C$eM^oY){JBVeC;3bu_N)^1X53PQw8xC
z;7z12=ZH-R>17j!`}B~<R??Fen2*vGWU#P{%oVnh*}^u!pOBd&i531Z_Yppjk+?RS
zn#eZTzbkBhu{aI(JPZ7J1-Oj!gYW~-$zuA3tP`%0YGPNkr$9FtuAyB#f&0HxaFo~v
zSWlXY{;+{*WV|?-xM|#>2VIH3SdEl|?zaSQI|8NvR9_5U<G2@~JD@J01E96AmL$UO
zZx!njFYzpik-mj*s0hF1N>)nsft|=o<yj#lNUVo=k%VXCc?vzi!Xof62ef`54W+>(
z8nTEMe<u^9v7iNG)HWso+74u~G#<2G#c!i<ToJy*9{g<xpZ*?g?GbM>Nr31LKVBK<
zLrHy2Cyf0d?yW#<q~DZ#7K>9!Tg^lqFGM_bCia?^=p&9Kz-|(x2<Z43Ji9N(znA!H
z`r-NL2e4Q=OBmv8ALV(Rj~I*aoHViVMPCO%7mu;QkmoAImnDd8aioWcxPVyGi^p6Z
zZ>8B}hV&y~75rj8 at N+UlxCK8x2Que8i9{^FhM1 at F{a<-44ujs+ByBXiKtn2-BN4<*
zjX8yh<`l%nP4tWTvx><At|Lkggq%j|t%A4!_K7@#Z887JbCdrH$XAqHh36}Uz-pND
zk*^ql-vVyKH>r6F&sB;8&rynjlB4iE<i7#WO*oH=0sU;gfcU%?_!{6OWT56GJTEB@
z$VYfiVgcj;9vqas3(xxx%*Tc2@qFxGF>*Ai4DuvCW=_xlz&wvrWc%MRc*OH8 at aq`H
zu?6 at j@Mhrmz}Lag()2g;7vTMf#m9vEWGTiP#`6p0cl&r=2HoC4e?xwN{1CVY$7~^D
z8^>44W-bTLpRchv)O=FOgTSw^v51@!HoK${cPYdJlspr;-v7jk4j~^bj?WWYE_W`A
z|10KsEYBsmj&Qjtx`KR`=af9JEsl9^$8$MlEIf~!Wj?I{_hH;8{x^URQG6u#lZ8Ov
zm`}q`E(6X2q*(nUx9#G<ePeOpzOndoxDPH47JppqS^SxbZ|45l0*aqDufeld1F}Jj
z2Czsd^4oK`@3w$KANS!FKW?Fs`*90!e_k9oUo23348@KWpU=ls=<~VX=b+flujXGh
zrOh&1K}2b_`Lh&ko-7SAo7g(@CgnPE1jRleC$4+Y;bUB9zn;Tz9pQ4twL08yC^F_b
zEYDk!qbT_*a#AH1=eEuBeatZ+`zm<WE1s_^HV>@itK24$D{~#?&s6&4b11|d{(PR3
zTIu8W;eODUT!Jp-)yn*e`vK6$X;b_Yw|Sn6aykm<O^QzeE!-a{c`NJ#cDR)LC1vh}
zyp`W$(dDnPMYokXC!dRYVNMGB=D822iO;z#e#%0t;(I`clJg@^S94GE7n>;3%eFOg
zGCm(f-fZz>3QsW~;QY`cN9TF9A`d?QEanF-He~T at N`8oW44=zberN3)Jmb9Jyi+ir
zQ*mEn$%ic%`906UIo}oE`!&YAK*`-PAK*DV=QWotpO5l6gvfLLujnj!Zq6=w{x5$0
z|NDEyp8w&;#U<un#ro#7|8^heCF0R0;O`;(`Ct3fV&^Tz<>qt6&Q+dScxRbM{xAHs
zA6*W=ig~AH{`udqMc4iV?|@GSD0vz5Rf!dRjs at LU=2(R?kqTvH!Q9Tc&RcZDGSA>K
zO_IzvIp7{a=w&W|jO at h#^9`%M at VJC$D0YWAoki9bUA5`~_XER;3!fJtUoTl}SqVR}
zn=G`(Sxc-_<y{Bz;x&yb@Bw!8v;1oz-$TToNjG-HoKP5ts)@VJb$K0z+q6=L;kw7`
zF&y(g`FINBtpyjx+XYq|wLIHF?FY}`F?5bKRu;xW<gewq|FU3<Kd{6z>4H32i6Oq`
zZIZY7B&%r75YL;Rh=a{N!~*k2<r;D~C2nwkti%ek4!OCS%X8n)^LXytx!*?4uEa1L
zEAfrzl86I*9>CizF@@*G*1mC%(m!(N67vJ(;Y!~;rt$vye1PZJJnrx|JVWBSFwePp
zuFdoHLff<04yHF0S>_8{I}sB>#srO|)i6O2C7g(o^}`qrMH>x1lBCfvNh2vI%9#zm
znaD&@Q0~V!Zf7?9M8H2$E8-HmMjsl9Y52LM#m$0%i+H9eYPDL?1{WpeNBl;nk!)?4
z2K4Z!p#zZ#OcVqV%n6l10Z8Fj at hkO%&eQ{qMk`5Lt;Wtyi$nB_Z>`40Rtu6jt#~@W
z5nrNuBmYK&4W4eJ<^KU}w05?Vs60YB!;$iA!pX#gIHPPew)}ohh?djBFX1=%Ee>q8
zwm^8cDA`K30;ic#kgm~U%osHWFA1WC+Jf8Qw^nP1zVK)eE823pamxF%<*di80$2hP
zHCke8%Q?(>!WpAn#-RrC68VGG4<8VoQTXAaQTT;c&L!Lm${<9}4~2MTMCe^%1)j|L
z%BkVKiFhDK{0kQ#EPh<rHNQ>6N2H99|4iUr^AEqDx2tEC7T&6Sl%H5mFcg)8)^FwK
z>Sb%2(jEUD0}Y%ZToa&4>J5qna47J9){a3?(JktYU at Zo~M<FU4D7u$(m3Lq4;g*a1
zlF9;p1LrnAg`>3GQ;0e9Ijgjs6#yJFsGfSjFDcZi2E*?K>o|A#eT8OK_<Sy6K4#Df
zt>R=e0q3gN6k$lVcEG$38!f2jB2~_DuZ0~d7B&1IbQub%a^c^;IdR25e5C(&pS4Y)
zTcKTHr}|K6mm*D0Hm5^VWJ#P<P at otbKUDs44&Vr4EI}H^1pVX}aHqiO=N#Z2Dy{^q
z!2#zV*8{Ms&}Bg?Ry*K5q67X^m@ju99LnPxeow)uglXc5s2Ps)cVre;KZfFnky5Ax
zZzl)IA(BomkZa@>`9NgqM4f3R8bE_+7uuH&rZebFnn+jD9n?U7rDj%+MX)G#l4Y?=
z>=FAzps*5K!AbBF77I&+mBJ3eAfyVHgdE|za9gY-28zwa4q|_Clo%&25Oc&k;#2W2
ziAp-j)r)#H^qTMWo7W#+pS;`Y?e)%jcfFV1S0A7c(ue5l>g(y7>BsA5>UZh)>ksOa
z^=bN3K9Y~CkB5)1kH1e%pFY0KSL5sC>*8D1*UPt>Z!6zu-+`5~e_?;0{UXX{v&n46
zNY%0GG1eUz>yIRZWRYC*n*2)4R7YK?Kdnq_(XKR_4k;Y#cAA8-erBZ$$9e%{y^FCT
zwJ03xJdAajuuAw|NEXtBY#|S0C8EC=B(@MciUY*a;uJAnye8fipNW4%cFtbJtAW=n
zukBvHd;N*A61`6Es`u3E^_4KzV0|6ySijfr)*rxFQ}riHjI~$cSe=WFH3nm)7%RnC
z3ouql-2Aus1^vN%hHfxtBJ?c*ECkF2%m$zuN+$v0%<g85S(N{g-_aACMRJVXl>BPC
zW4dj+XgX}#W7=)nVcKk3gdQ)Ov-uq+TO1!KFco}8Eg2Qof at HvMz;^ulFTn3OZcWI`
zq?e;!>R)zvk at B+L%id3WJ?%lr)2>guJni(f_4A2O8$TcUwDwcmd`Kq$KHye<PX5*W
z1^IFLlk$f@S(V=}KkUiM#|NG)cryRVj3-l{jC#`LNxdg^9^7)>X7 at z%Jv%^?6wT%&
z6 at AbXd4X~9wM?u%T7heNu at 4<eQ4Rn15ADy}aR;hWbgOy~J&I!)3gi!H1&9PZ17NIz
z=0E#kAOEurcfV2L->&_yHuf!R$J(<FtRw40X0ul8JJy@^VSQON>qk(lWBu6x7Q+Uj
z20f3=XM@=g7R!dRVQe^AKo+t|Y%+^uQ`l5Cjl`2hY&x64X0lmqHd)MCiY-Y3YmIu4
zfh98|JIqp$K`v!S*)evUrLr`30(O3iEJH>0G)re0ER&sKXW2P|bpm#tU4Rd`2+PPO
zE6FN$kKKnqc+8%#eAb4wWu4gw_K|&JpV=372iEg|J>=FWbRkJXSD~BGofweK_ZIpH
zeTh+s7W$FHLVsZZNfBbm5n&)XDhv_^qXspE94DzltT0p<CJYxw2qT42!f0|<7%Pk;
z=Y%ojJbYIcxkxUNY;su`Pp*)wu*oSTPnb%s3)6(@!VF<1xj}A{Tf%I?D9j<Zg}LO8
zFi)6I?g|UYJ#wEs5Ecrv$U`AsSOhPY0NY+FEF+J|V<8c1B5&a}e<JUN7362~3;7_d
zgy;B;{7(K5R*^r2)xsL`7pl&G3+sf#!g@-D4U`ERg-ya{VG9+gNF`ybkRoiO8mgr>
zVsGJyaFlvbPg<Im5snGR;XhL0Z!5z`4iLYiRcKXOjaH{M#6DtQT9XEfJ;X@igm6-9
zEw+JIt|dl`{b(=^5!;I2(oh;k!)XMqP3s7!gwtX>vAvKkWQaq>Veq;gX<hn_*h%b6
z>(TnOf!K>Sq>aQVv8RwJoDt5_#<YnzM2w|PX)`fK94K}XyNZLv!L&KN_f_GVkPE+d
zUARG8(3WC1vAgg_cuQN+*1|jCCvmtqg0>Ofiz9`fg<oha9SWZ}ip~^U(fI@`^VojS
zNY!nM#M}DeF^Ls}QaI+oW0oE;1HkX!t^#WgyaR9$FaU5!1=a%iM?g9N>zE`1a2{QM
z3w)sv;P0Rr1d)xfF2K1ea62Y^CFnNVu|h=d0PX_j0PX=Ep`H7J$ABk*d4PPtOSBIL
zepLtyfL{YXpnW9puZ6G>_&31cXos&Q{{XmOhzEQEn9x2Q7=A^8#lY}})CujNf$CIX
zErFd?fTa at Z0;q(0Rss8~K(KyG15|(|t9}owU2G4IYpFnZ3<w59pxppmTLrQdxDKEZ
z+PR-=3}^ycmH{^fpg(pRxDB8!+Lr@^zqAwD!E4$X!1=loxGSJ9+Ajk~1Nz|@yyQL=
zl_tW#Q#uGR7{|Q7AppplJq4br0 at l<BO;mxb0p|Sz$Xej-fE_qq2b=`JILHRzUsb@0
zH=&4292lnyyDgN}h7rI80PvUlW>y+d25<*Z7Jzk7tnv}Yc>^GufTL6(n}JWNAVB}v
z1wa<=*#dk?1+oqJE&$^r+kyX3f$UaQTA*l$EcmoencD3GwpD at b2Zqc!5YR99slatz
zfX=}`Df$i{MHB$9g at q~*@IZh*3D6w@ycZy21$qEOe(+HQI~xc*6cNBz_*w!#MTB*L
z-hlNg5F;@7C~O2o12BFL<S;PCFJP<!WGHM^fusOq%nHN+Z&!gF0fu}OfV{C9ssMpr
zVWp4=KL7>+I9~wd7%=Ax2k3&Z7XaSC*As#Bh0_}gNCu>$Jq_3bqj7vf1#%V`G7?S!
z#sZ+P9LPD~^g<W|oB_Ci_Vd75g)koYBH$9*uK;HQasU$md4TI^=jXRo;Qm8I69-P0
z2-$K#tikpc6}Vr)s=NY-KSadM90>Ztsye~SED@#wLkF<af*>vt(Ln`aHZXi42LW=y
zYKsDhSOlw<3UHq#>Qq1!BUm+5fcr4f1>lO`&I5K+f%`SlT?MW~q6eTfo_i0tj0#+*
z#Ih;~vw+K~Kpp~@2l%4Tcwj$3Mf?`JE>==ONCfr=1fu;3aF7a!nnbJx2u1r_;4l>s
zLx~s;sEziYf$ONi^%X0&1l2RekBSX&4B+~UijM;1PvAy?#%Ny++(ZTP7jRP*5QmA_
zOa<<L#pWt-y%$>mI-vi5fIF%nK+nZaDsY<+JF7ssY`dty?E{r31t^zuH$Wt4*a#d2
z=mr16W&WKC+*ZWiDhMgSeN^B!BlZRK!~GiI{)NEr9RL`GcCHtr0b|hr5#X_a325hX
zn+TYM_G7 at 4Rp2%u#;L&VM4SRxfcwh=bD1r|aR4y<1XlmmXTn#YI;PUQ6c{q0Re-q+
zIKMf)oWE<(UK5z}l=H6#fb$6a;Pxl- at oxgO25bgw!TntReEfW@(SYrM9cT{*-U;{~
z&=#-@un+B_z_53$S}Qh;6)7Sf0<;7C2uMPEI<Ntd3>XS90=V2DOOf*ze4=%Mj{-Pv
zxIB*o($HQHnA6Ik7vLn|6xtgCp9b*0xePM^XYi~{;In{pxTi5N`~|Ag1Ql5#W&tju
zy(#b|0Q?1ZT at djy;0l22%T)k;hBydt4R8m2qA%<?Q-E@Pyr%;9HR6301pd1RfG4=0
z|1KZ!6whh_{0#6H+HV5?4fqGp4e$~03GHuyKLftt{#L*R02A8Z0m}e0U^w<U5*2tn
zm#7NZl|>{5(BZd`i{z{Vc8d_n1>lN)ekQ~VzxBdz1jxgy0Ra3H4gt>s%*XL|U=F|G
z_yh3ofIo1&8~9HE=;U_m-A)BAb3Fmr<GGNF9?#d~**rhc<C%Il9LEB?tH5nS?+E}Q
zbQmyxtoOz7IN(YE=s1Oa=z~<Calp_yeF$jS3tR_K7xzp7hE8zcaYo-v1v(9Qyb5$W
z at JtnWj-rRoa^Uu<-=zZ2S@am29(~YRzz0+i!GAq;m;>@)qEA+VE&xsiq at jHw@JRsI
z!$kz8c@<~^FviY-E&=vXfi4BcSUJ#T!2T)_^ygDk1)ewgfR8?XaL;mrErcr2)xa7R
z2x#$jQh}}k2ETnFW4ac&tO^wN?F$}rz=|O8t)>Fq2#m3DpqqfBRiK-JVFSJc(Y}R{
zO4%yVZG`+n0ic6!M=E?)1-=XG3);VkXa_H4vkDY^G#3D%xAcI4RBvmr?HHL%>9VNf
z)I8rXuR^k|(6>(w1Ff#tH;-**pwTr9th#|#^{HVHs_R=Agi0+sNBTwS7wZ?dj#;d4
zp&!yO#voQwFfI&S92KZHkS>w2`0g6%V`vmr&U!d7DynV`gUGwVFL3wbD0DEiumfPF
zDbQ5IAXRUxHwgY6BRfSJW;H8kXw)pKoR5#bxgn!tq#>hOIiIMg8U~G(M$kGvwzNvE
zwz@%6wT8h)?V(Ggp;0*liCVmv_tz!T&&M!p@#1oeF#^kZM#=NzlziRLsCWZ7(EK=^
z)e&6*`T3ON4Sqg;KA<qFSq+12^|oCin}b9jkZ4!kP_cOpgMD>FB_N0D$pJK8zqm_e
zY9pjK1CHB}_^y$uq at wU<bW}NmABfe*AJ>6zg>8J4rK%em#UIy`o{`CwNV9UO*y8!7
z8QLAH8Avr^q>ii_H9ApzA9Jc3RH>Yf*kG$8ZS_q}A2%ExW09?DS5}UM&P_urdGI!|
zPrG{6%J3s8yt;20Cw`<E)4N4*Iew&FG3mRye*DO0#^8>1%JL)IuFb>!J^7K{#OSu+
z*j!cZnEl+C_Ue5O_l%1N)Z=ZX+?-3<YWR_3z2JcI&Nw1Qot+lMsxmSLxzKS&gB!j&
zy3z5*S^R6X8=YWuDv!2N<>>@Msv`Hto(eJ<)r1(*p7bOONi^wBLRmd>lINVnO^zmR
zY!lH7K3IROi+yEFiB2+LKU-<yPInV$O$Kqqef-nU`fn9Ejv4%ZR+n96F9b)SHfkNq
zg(Ts;@JcX=ZN$l9mQ+ugDLv6N&<xW&(YDa`(vH?9YL9Af*@W2Kwsp51Z+p?MlwCW!
zxpqI<*RXG8Kh-|h{!fP{4l^8Xl=3Pyx6~8IHjd*Rk2=0``o?LwQ-;$=U3p!IE>bsB
zw^5ho9PGT@`MFDDm%T2ZUB|noy8h-?-)*&9l6zVAf$oPrJUu3R9P#w_9OHT1^G)gS
z($h<yDgC+3H)T4PSy|>@S%<Pi%HA(mzue|>C(1{cPplAD;rj|n6|Q*A^V;Zj+q;Z+
ztoIAOsBfo_)34XxKt;2IPcNSdK8Zg2eC>Qk_#W`{_nYGPuHxQGo|T4Fy60cpf2}{1
zF`#Wge89cRp_PwS=~QJ-mDg3<S3O>>bhTmC&Q<%pdbjFxtM93Pq<VgJbB)?HhSxCE
zcwW<|W`ml&YR1%DSMy at c7l9<OX<&!I34uF<Dg?C&S`w5N^mnbnwK9XN1aA#-4QUZ_
zEYvS_W@vU;o3Ke?x#11M6T{y|G>h02 at wm2k?fBX+>a?wMrmlP4gu1W3>HE#CdM)d1
zs&}V;&H4-K|Jfk6!H*3-Hf+=|x#8<Z)f>e&GB&nrJfd-Glkg^4O?{iLY-Zamu-W`(
zADfS9zP|-+(W=Gr7Vle at ZP}t_UMp>@maXQsy4c#g_3YM{+thD!wyjs&HQ%~_yZGCG
z+VyF-v0Xv?@7ka1(4xcBjx{<?>-f4;_fD5P*X?}1ONTB`x=!g@&~1FT<K5)$L%Zko
zSRC0b@@!O-s8vz<J>7fO>N%w6jGn7|4eWLIyGGw_>h0LOLGK~GPxW!>6Wix<U+=y%
z`d*B#6`dIUbH641{rZpVe{_ImK-U3lV>B_7Vy+Dg8F+Az-=Ks+KMig+xXa+dgHwih
z4%r&(7&|rg at z4fC4-Ru5wsp9E__X0UBlIK2jCeKD{lEUJFtXCfz>#%Eb{si=<oc0m
zBX5m-I`ZdHl|~I1b#Bz_QGbjUMthEaGe#WaGbVIQt1*dVJ;$buYdWsOc&G7W$Nw@R
zVZzT72Te?$RAth=$qgsph^rO1DsETYk+=(Scc!$OGIGl9DVbCLn!0f6#c5rpt(ulR
z?b>vk>F(1TPVYZ`<n-G!D$hun={s}vtRAy^%+bslJ7?RRH*;O*R++nD?x%Sz=cUZI
zpWkKvrupv{hzpu7*tfv6u-U?e3s1*ai0>007oQaW`y!7;gBNXI^vB}*i#IL)BOx+j
zPC|OZhb1kSEMJnb<m1xDONTE#v8?K{;ma;2`Xshb%w8U_y#Df?E84F3ai#Ohek*sc
ze7&m5s?Dp(>XED0ug+N$x at OQC<C+(1{njp8o4>B{x^3&7*3Vu4aYLI8i#FtMjM#W!
zQ^ifun+%&iZf>wSZgbk^Pg|O9*|cTPmOr-+*qXmBVq4rcd3)dO89OTMFzm?OS$^k`
zokw?m{C>#ymv;s3+V(@OACBy9yZh9h3VTNFxwg0U-cEau?(^Iix9`{eZTFuzpgl0?
zK+b`W2iqQ;bTI3X{UPr|A%~hDiaIpx(40eS5551<<;PV&{*}};scll1q+Usbl13&?
zNqU5TFAZ%C$;rCp&dEoUuO`1p{$g}7Rx>s;b~Jux9A{i?++j>J<{94@&4)`L4m{lA
zaPPz84<{Vnb@;^L>xbW_u#_?>K`AX$dZ&y_S(5TYN^;7nl$$9(9id0c9tk?q;z;i!
z6OSx8^8JytBe_Rj9WfvEI9lUq)1%)V9d|V0=+2|Zk6t_a>R9VzPmcY4ywvfE$Lk*N
zbbQG1na9^0KY0An at jp}TQhicur*=pkl$w*)IW0DAX4=}cgK1~e?x+2B!sdkAiE1aB
zoalOD*oiqOHk>e=$U5=(#M={pp0q#ddD8D>-IJY8_C6VVa at NUpC%-?Lbn at KEPp70)
z&ZjD$YIv&csUD|Bo|<=R^{E4=GEdz-_2IP5X`j=zPj@)o>-6B$GfuBQec<$&)Avq)
zIQ=DEo9>$KogSY4ZF*#SO#0~bY3Zxdx1}FVzmonu{Zoc6BOs$uMpVYwjD(Cgne8(N
zW=_jomANnTOy<4JU(aaIc%2D5)AmgNGjV5 at pV@OJ`^@iWrL*PFhMaAEw(r@=XIGrv
za(3U@jI(#n{(Me4SMFS`bFI$xJ2&}U;<?@DPMy1X?&tI3`EuuLoo{o#-}y=Bm!1FZ
zg3Sf53t<<&z0m){<O|C#{E+3CRWYk>R;R2XS>v-3vUX;rX60r*$olP~%|*A1RWF8L
zY<scC#gP}MTwHN+@5S_scQ1ap_~nxGrOKBYTxxSE`qJ=Ab1p5rwChsZrMye;vW4uv
z*%PyuWbev8k$pY;P4*wz=F9e%JumxR4!r!$<sO&&ULJgT)a6N+XI@@-Iq~wk%iAvR
zxtw(Q*yZ%gS(o!Kf4ZW(5^$x#m9AGtU72)c=9Pt460fYgl5{2O%Hu14U3Iux>1w^J
zd#)y3y?8bE>fNg!ax^)PIUYG)IsQ5IbDHP0%juTWJ7-|dh at 1&I({twMEX~=Kb1*06
zn)aI0HP357*IHidaIMF+(bpzlOT6~OwUgIwTzi*GbIaz2<hIG}mm8ZqCU<)7>fFt_
zhjX)YZ|6SC{gkK63&?Ab*CMZd-r&4hc}w!v=k3Zf<ekjBn3tP(H!nZ$pX-j-J+9Zd
z-t2m>>*KFayFTywrt8M*m#^Qr{{Dt^!|O)GjSe>k-I#V`&5a*#WZlTW@#e;_H*IhF
z-u&ifmzzUx&bqnbX7bJKo6m0++;Y2B>sI?)J#P)VHS*S!TMKTjytVb#ky}@8y}V_*
z?Qy&2?UuLu-kyAW`RxO@&)<H0`=2|yJ5}y9xzp>;_&ZDQ?7egL&b2!a?)-k&_OAYJ
z_}vb72j87_cm3VuyO-`hyZiZ``@O(>E$;Qc7kh8Qz1jDc-rIHW#J!vM-rtw*SGXU3
zzy1Be_h;VUct7R-<@?X>e|n&M5b&VEgKiIoJ(%=h?t{b!n;sY+TzZiI;Gc(%4=X*a
z_pr;up$}(0T=H=J!(9&z53?RVe)!iT`$w}Mt$nof(T|VP9$k2J{n6t`?;idAm_2rU
zT=ud5<KV{)9=Cbi{c-=tBOgzEeDg{0lkrau=X>T)$X}j+ApcnY+5Bty5At8<|M9f`
z)1^;eKKtfb(`Ox?MLp~HEcV%$XK~MFKU?%{`?F)ua-O|>CO`Ll9`wBR^Zw7LK41O(
z(DMt=pFIEg!udso7gb(_y=eTR-HWIf17D1JG5y8r7rS2=Uz~oC{o?kEXD at zv@%g3Z
zWrdfaFB`r5_GRSDn3tnpPJ6lP<-V6kUS__$`tsh(moI;NX?kV*%Keqks~WHBylVcc
z)2pag{a(es8uKdd)$CV`Uafew;nj{;`(7o#N_}<x)w|d1b(z;budBRn^199Iey=CJ
zp80y=>%`aVUjO*|=<Cz3FTBoqef#y}*RNjx@@Ddzb8mg$R(%`(w%ywSZ->2|^mgvs
z#J89UVOkx7xnyPJcmmN7TdaLJkugRGowKt`9fO0;KyvxFM)|f?zDwm218E*<V1eb5
zS@{N0$_c><(KU!NqLheV8Zj&9NUI_n1tr@#{AqMhTS_U&z;wxu4u1yK^6_!@5u7R3
z?gbw#3Hb<>P4(EhaQPQGjXJzwf-F;JGD(KdyCkh?I-B&xnN2qJVSVCRAHv9X^IvqT
zG6Dw at _%FoSgE)ImoJO*%7U^@h+ at DcKs$n27s224TLWI!pU=KHquRrazr_`BC5yNZO
z9v(qAiSC~d)u>;;=QrQr8S$bE^TSkB1dqxPgAizBb^_-S3p8kR4T8>KlZ)O2Ki3e6
ze^Ga at QFIA)<loX{c_aNLo`0dIN$BJTs4YjlNuo-v0|<1muu_K;o#jMfGDugLTozZ#
z@^Msf;KWZeR0u3>B!Xp31~J!AL6H@{?Q;$GfkvC6i}pH$BieKZmt2F5&fuop>yc|9
zIzwrt#f#JL1KRz<utxz9B5(+C2ZsQDIP+m9`D4e#jvuIPbBLru=fuv`rt|X7S6(-N
z`laLYt<<Ku{E=>y2hoj-X#WJdU5 at 6EAa7kH4`P1Gataw~4icR;n=#88q>kPe!?Lvu
z*cT_he2mQ3mb2GZXK={n-#Y$nbfwnOGM%wZ(V4H#;GJv0w?F?jR<T~ephEov{Qbj1
z!z02%+&w(p{X+fyd^PTF9wJWMG+KARFkB9C^9TtJ7b0hGxOFyt&zij_jxQKHX~uk7
z>p-W=$5yA^NL{&L?piwOyBQ&k^LFgI?)KoJ=liQmcTXKTC~m-{twZ<axTdE&zrK*L
zb_Q%J*8Gz+S2~Zi!Lr1kgp%5rb15PeFg(FBRzIBhap6LH>~alufktQ1Iy^yVEM0Ww
zr!!Q5!~zX|I%CzM<_bDvE$f*v%umtCus~yk;K!L45g1g<H8eaV*uxzI_4D-)^HfF|
z78dFc4$#nWy>dlg`~v5V6hJ*=_spID!=Bl5_AicX)3QhR)!o at Qd#Gmb9=U+GwCdiY
zb;~GO8_Tj{#r1RdABb-`Z_l0tZTo@!yR~jVXi(>Zyt(`KCbXQpZ%=}z!@vRE+H{B+
z(Djcd;@BqeGy~1=#XqETD9i<r5HkN?^q@R=Q{JNZrEyZ4D}`@)t`x?qw&ghze5-P#
ztLn><v)bsY-cm+I9?oTO%}`!v^tNh*(Z^fyZcwLM)<%U<5sI2{c0nz)G#pBy_4EtS
zfOQq6;0UVaS|hl5MudlhgJ9Ia2|x5}a&GV1b5Wy)(Pqu|OwE1VuT9qATQH70tER|X
zeD-Ycoj9>saLl)zqv^s}!-R>;TkbxYG(U1p=MM7pIor&8KaFeB{8`)4bYJPIb0#hm
zUPdqP64awX)2LAdZ_<fA1aE1>=jc?ABNcia5X*gx$$d6mBdw5^(<iulzFd{9(F`Nb
z at K6TFK!d0V-^C@u6B|agI#&-*t$zTUANT8Q|CJ|f>C$c!{O8BLXC0o=?X+u)DWm03
z`FS^ahWuiG^q4k3DodioAALrA)hBhs=DvV%7uT>*#sVTdTwGYhgx}@`Y&^jtxAYH~
z_hAxi{zM)u?`}P2BK?g9>aSyY-K*o6*7ANi26UEZ{e*7te~v`2%3XwXMa3p^%NR&t
zX at f1WZD46wZlwqb?zxhu<f;{f0NO^rUX#|e-C#$n)ReDYn3k3@UAWV8-Dnyqe?M}4
zFZs7VR4>0qA(5iGu~H00P2C<Ah|YK%gS<6Xc^d@9-MRZX`#HneIft;VbgeuzO&&_u
zrU|8z<WPDgiS9#B739aL^FJUq#FO`A6s<vocS<;y0~FWdrdbf%M?5k>e%xwq!k!fa
zQB0(GQ`4K3!uqrTxgb^;sg(lmZNq$6DY-O#!@Sqw-sOm66R`$oi`bxe3oSUKRh*&q
znL)K8c(j6o`uZ=gGxnQr#@6W<)TmKV%?1t7gNu2t!0R;vaYYXpb+I@dRLj$kh9qxe
z(Oai$YG9$4jDr>0!3s;^d3Dq$+Tn?I7XPF;D{g~!I-|3dZg?wWY3mtAp<{l&ObFAt
zgao^|1}Ju+byoaLglPBp{o8!;@y|a!7E<RWE}O#^B`lgRuo3bJ`5Xd$$UoS`QCq$t
zUnup{o!gJ)yYHXge1UPGp33e?$B>Z}(j|c|$wF6AvVn>}tXm8;3RZ%Q*no*f<P?6+
zQdp%Bb}vm%U@jHJyhVGnxI}uxph7TePtr~ubBTa!?c3AZqk-ib1)V2<l1^u|Eo#^C
z*kp9~)Tz(&!Csa^zknE1QE?-b`iLO~E$GM5-4>5qydjke_b$IjS~G<`n9qV{ZtFI7
z<(4IvKHf^cBj1suKwTg6d*KtP^S4BdQW$wD%gD>%qzqRGQcCe_B+z(`(B8&vgpM%=
z@}s_ljy04jq3NY`uqecNqra7OqpLs9&kSXBhVr at iF6JE}&=3qm$HRc18av<&d88Ee
z6$_&zoL_(+U63$$t$A`{s_AUbyQxDb&ovWykZev{J7dAJ&8rfGV76c^C5y%!dU^j$
zUt@KD!_0H99v>aIc*)$E@%S?qBn)!s2wk;<CuproqC_U3xCK5|YAbSDDN-)$01U`T
zDbI3@HX3_eHI`Ct;>5fADJD%rsE at N&Sdg8aW{PD?&YNb_^B(l=I{8Q1d4%v=K^>M|
z8T{S|8>j&)DxjLFm<t7qsfFJP^SK33ol&$t+^8)@IYrt)W7(ocNn4gTg4 at oyTmo*^
zO9m~E-tZHyKJGpO!m*3H8*IiuAjE^`97-tBYIEAKcc#PDhs9^T`{RD*pUz3n%O}oW
zwQXKp^IF)OcKd)luA%%X|EX-ceQNql!={zVVU@wfd7!_%luX=+4}6|70!4-YV+4?Y
zk?+9>6!~KW?nPvR=<?Pxu+rTR?*drKC1GJYRLOmjFsVsIsK3y`_pX_^jmtXy{I8rm
zxq$YdU9R`t?!7Z^dg2Nxd5ie*={)(*n@{E6X=77M?84nAnMRN8-Yn(e@il8x!F{Z!
ziIu>84GC6hFJb43C^+{eU2y{^g$7QkANQbQCDRXQSX9A#;jYx`^Kq#(7J&pZ8hmk7
ztlS5gW}$4|AzOC~XB1`Q`W0a7&IK0$TMB>$6%(mYHUL+QP63K!5kHEO2!p%M=v$mw
zg+`)eSx7Z4nS{VIErnlH$vK0=!M69~`j4G&&b at A$J+|NI_n8?#uiNx_-Kx2BR?F{3
zES&#%{$eq7#QvaKCnufCe|mD_=~_YihabOtw_wMVjq5)yOBBm496xH&qQ_WdV<g6G
z7CtKDtVkkN9xBrv%P3tjWLG{)!Ij$ypSTb~IdUzbq9vR<rU}J{3Qgb{kTN2!4bJX5
zBKd{EOH>L*;Im}YLW8<HqGy~KH0nzH-A}SXK2$N_<=^rzy|+}{8aHKiBAeB`>$Iow
zE8k6%Pswk?<sNdJv{`)pd2H7<M_-)SuqKmW2k-(!z!BI1;ZI!tCRB@f_Kz@*Ap7Bg
zOfkmN4Wfc-;m#_E%H42h0PcArjKhuuoddDlsRS<NPUu)G?6#aDwt<d$6w@(Wg<nTR
z#^@w>gd%rp!^Rfmz-`SlougA%(kWOFVPri`6z*e9TOe9e34f0x5Q&4rM62v!-Nk$Z
zy5s2tK)7FUT4=&SsJX+Gv7N`B1=#cX5IYF0v?%jCPK%UlkT at +0C1FB2(=efX!G5-w
z3a8}-E9Lnaprx((FJU5NT^hFDNgYdx*rkW8^<38Ftm%T0l;hFKh+Q{a`u`fgh#J2T
zydom3@hcpXhR?@)IqpT%<AE%=-Q2DtV+T!3WzUbEy0LRa>&(L0^2SMvyDscIB6ia7
zUOTfcCnxP6-f6vjws86k+K0;DXl_gE;Pso3A;b`@<|a0v*oIrUkZW`bw&5f?1sWwA
zCw^q3GuC0&`H*|AAy{WDSJZ$>Y}H&t)j*?PQJa&_*vNXu^%ibcN#Fe=!d>`?JOvFr
zZiEY#qeZ6GxQP7BQ%UfdtBVVQw&+4N9=tWem1p>xY=^r?PK1Rgv{|;&)hRALw$rSR
zp{}dOEYY~isj~5sd@;q|VL1)R>v^PJr3P1HKg;V6J2*V1(>{EnF+YC!-LX?-y-^iu
z&DxD7Y at mPtF2C8^t;?IMKTu(HwT7nKuk%yre7ZhMj{p0kyehN0-?)I_r*sc3M_uW$
z5BYLWdHJ&SgZkRie=7XKwXr-3HWlD6wTPN6R1GM~o-Mf^=O?!p4VbIp>R>DKaskg>
ziB)Tjc1j~xR{?1uccp at G)wFfd1y+48t8w1cj(+$^r^)kBbm_>-vVE`s?06C5 at pMO6
zk~it5KEFh~EXtmU5+OYUv4(09q0z=kNum&mbk;^5S&O`CP^}PWA9ebr%+38MPLYiG
zRN at Gp#%CXW`16PHF%uWbZ{#dmf59gCnVdm=XRKS2D8G;l=Q0LuspgY9>s&tDXZkZ?
z3e|3$F?{j}ZhMmu5$?iz%9G|Q<t6;2HP=Oj#EI8Qj4nkq!Z{WzHDI=0o=+Y$qMx2P
zhlO&jA)bEzP#1=IHqzkm2=Q(?`ROmREMHnd?ULTm(w>=R_N+agcfq**KzW+;`U at RP
z!<Ss9p+Cr`mp^WnfBmxbXZg*F6v&u!`2x6XPuwlp at 4xbxbIzfNMsT&1^-SfX=;Db)
zL(~e+ at Y<O3vw(ec(`j098{H<~J9i`d@jq{GONPC2_NCrAa`tW}xqL~WZsu+usVm?3
zpit66p`<XgP&CRCS*-b)y{O^pg>qAodKpAriEK at 0v?)d$GBadCDhT<eMeI?*0AZD>
z2KM{!FcoZ(3|r;uh0hPf^KD6^|BtR4ZJClEmQZj0{G!Po*K(c|@@EQHOj|O91*W=q
z at nEiLI)9cUo;3y9 at etbKP5S?zwBx_chm2loboB~Maq{x^V!cxudUXIYRwy?9N>Cl&
ziYx#Ll~1tf>BoF9fhyD-9y-K_ZRCFpM*00Z2GjI-K|Q=P!sW-ASu{U=_|7mniRsdZ
z#_pk^muJ$}bm-gL)JOhJHc$FXeiBrNw%n}p4liqREh at Cr60$2X&9fM-;xsH$#e9L!
z8o<<Twsfp9&=#3dQTnaSt~g6!uFfHnO{U2=BZEE8g!uYO2GcS&mg~<kd`$uk0<vqR
z^M5TFD}9B~Nf{Zq6~79 at 4Co3Dok&gfS0(aUB|+pK4#XiXEHVJdIK){ka;c@f2*Ez{
zOWwWTGZxL6w2DfGFQ4+>KfXA9$y#h+Qgj=yoN at k)SD#WM^He6 at 7DX>ngSFO at 3Eqlw
zsnf_Ae{78mB~!4iVk4%lX~d?tu at 0Yz;Z0h8-8Ed(LepI{NHbBhK(kh}TXR%n+Z(iM
z73M*@)Q^=jf_V$yn9j1Huh<W%vKv?!#Bxp33vQ^CBEvVJs#sa2^j|%GG208ORf%hQ
z2p!6d1xquxz at 7?6tm%wHM-uffd@UiGA|*f=vBqc~Q<O?Ik0}%zcac|URb;22pjx&p
z1mki=G;sySOLq_H!%rD5vhOO{&lU3h@}0N~;Ut2^d>JUNH*GUrveKq#t1bD~NbPuf
z`Y%FJ2(bvIgwk4^w~<NevV(%SVo}a!s;a18W+r=*F82Sj6 at +XM2gBD+G{48ozvob!
z@wWKd67y{<BQP~8Hc^6eDKSxklU40mi3OsIdw^0C!9<DIL?R^H<?=_vLHX}hY$dfn
zm_+TDr{|tHnkU>yO}iqneYfSzz58gLoY?EM$$@=x`YnbRZ`|dd{vP&4eoCFNsZ5Ou
z+(7J5*=c9Ab5o`)cDw+ga!O%=g*ldqlhIyK!f;8~jA&LA+n|bI5xfxQ_kM*@Ho%9*
zX0S3JsFVE9Kk_~rwQ<+3M0qo-YeHQ5^U}?iTUIQZvsnODBg}Sq{qr0ml`p8W at v8{Q
z@zsSgg;Y5s1#z}eWl<!fV58Juol8VjWPAEzE)rEnylq_x^A7GO|C6tJu$3-|qvBlo
zYO9V`-WtH$jH{=Q<Oz9nJm>8V`C9iYaeum4`MY1vyhZWx<ox|C=NIx9yDUYnjE<-a
z^)pJPmGX+DGk6q^<X?@hXj;NeLZ_x#y5e!rXs=iX4@VxwN2i1%&UB3y(`>3{Hvv8@
zUEZHbpZ!g3SIwo}b4(*?K;pg~>*f2bo$0V-$iE$*9c)_bz}~H%ws1K%B2v;3ace9j
z;18-vKxM1tlyLW!g(HK8mrU?&bhHv<^e?M~Z~qe0!LrJ7O4+aGxO@u8>snv0p>XZD
zte}MYv+n;qrLGUx{xmyt?}laD*3n^C2gvVVua)79&VIjs=UTR?<+b$(pN_v0H*eka
zQBhL|P2Dvr`PR6LGv{rXb{qTDD5(W$tb;VPmKacCI97*@ffP?Ul!`9bW<=0+a`kk%
zhB!!a`TUFIvK4(U0jKt(PZv_pD7m^>IaMOOl&C;iVofn_adXiSt=5+WAoi(s5NB~e
z-e7$g@<D#VPXD;$`$LkUz&A(!tYeft6Y>lEw<i6#Rd~S1h5TJKfd&n!Z6sPg-%+i%
zM1of$5?Ngvp}hDH->xL<Aq=Z)*G(_>n_lLb#pKVtkcR&26QcQ98DpW3FX0wSIM5QN
zspJDZs&XIi1fz9Qe7s<XM;bLMDy1MWz%v3Qct&82(~kyd at fAX!m#;$gJ87B9-p?}S
zZAtP?Pfz($lDs{GUd}iqd at QgroD*Jr?kH9oHR{U)&`05IvC|w!_GH+<u%JYKVs*lt
zIBQ9qP#%C9*)G5fR=dejyt9CWPi<PH*`V2{N!6eUi`sk$*gL5(k17F|7mjEMn at 4*;
zLz(~13wfiw{yDuXhddSLu$rctCSO+DbP+FuUgtc;o at 4O@D7ArBD*P!StP+`mg;HoG
zrv$vh^LQW(VFT&3`?6hzZ1<4eVh;*NnVvFl{yGW8{!6^~fc|YsGqwK`U0QU#n4%j+
zqRi(|caVzA*jCaikL0l*E9hZ9?s%uN@t22!SHTD2pDkOKi*vSOD>fx7<%`T-GYhum
zOHexJRm|c>RJ_!N0U&(xteM%Tr^^dzob=|?<n`L)yr0TgYp4ynm9++}f^+FuYzeha
zXh&rOi#AAxPdtmUl`qn{%2QEA!QC_vi~q&w=d+pO3A-yE8ir)TmQIluWM*n+eQdQJ
ze+B?OHDdP!WJs`~fD$%Tr0Tgwia8G=5gsCOr%*V<-GBNZtu~WZJs_Ttz1SU774#;W
zWBHpi7)9ZlOEH79Ok9I%NxYu3zF@epdfhrsLmlxhy)Vi5l^@}SX(vj1V>L)!zCvAE
zsVt>9VeN<UWRIK3{cW=R1V6*}cOEz23-9nZalDYz#Th-T at O4asr_P`+j5eMyK~G*5
z;!L$@RS}1|aWYS?Vn%xfVe*Ba7oTgp*ei2w#GRtqHJ{b`Sv3afk$(W<tK!o`3d?w?
z_$y@+XE#rGrMl;*=S!ZIb#}84Z@)_E+m!KR1}sP$cYflDo1(vL-($1i3i;r8edh&7
z684?w)^A))%TDVePwbK%*F@@;_H6Yyt4Du~m-}8lRx%y2cOu5<Qnnl)uZzwgV7xY}
z>L{6|WylsGC_`3!KOeGW!=-Apb5MlqP&|#{i&8}^Hefj~um@=Q1SMSW;;gJnX`Ojp
zN7TQ_xH{T)f9hzu_-X3OMaMdJOPRl#Ie(OIteCDLrn3q1ZP_H9%Gobh-=70ne+OB;
zhpZ}))<&I|Hz-ieR4Kh#2)5=n#Y_o#5Nd^3B*I<`6yA!H$5|WV2oibyK;^hnKhU6l
z;K3RUSZ$LeO*}vHk^E)+z12s5vq`c^j9t2E<J`$Td+&|G+t$Q;>)-MBe~evtIm7P+
z))^V;3o3sFhn=wA8DlJ6jxUfKN~;{!s2o<9Y9ZK?$SWMSQZES(3WpVhjX%ZrTa>5}
z!@xt4+j at e(SRY5>L)}>r;p~r^S>N~Rr$?pkw;gri<j<+=7Z^HqIT*j5`G2B;b6DtS
zGCrP$e$*b%-AaGk01wMZZ_xe+IP4A{#~N)E9`h{Hl6xuSSqQfz{>HL4N=dV9U`l$~
zYh^LRE}9Es@>;CKWOP;UM21;B2a|lUqM<M!6>T47B?gs1ROz)o*bl<mJ(S;1eKh;V
zJCmPycya&ukTLP{z0vDkn3qkw8}<3!cZVraekYsSZ9m_!No1ao{rxJ(rJJBH^)RGt
z{4GFtGQjBM!L3l$7iAP)g*IJ67D_1odVE}?ixzBnF|??>17~S)&4pg^Iu9!G7zSja
z<-B)y=L=x34;)C_->9KoU|7%ouU`uX5=Z at b+Ig*QZ2z%|1>L~$Xt}%aJ2+m3R3vka
zzLosBwqWy&eWCv;L7rlN7V?z&uS?-56gQ<<rohK(bn;YI7T{)z$|FX1<r;TSMI{hE
zxZ<lPsxn0sPT;Yr0EQYC#`P+K=UA#*MZe3uFv@n{r|T2)zlol7aN)X98K-|rTe~o+
zbGQ8qp<gCiZOP;>`PYAs=`m{6`o+Cx(cnLh<!z(CY*OMlmP>>uun=e1v7L*nA{U)%
z8A_0~jL?$xDVE^~N9 at Q)s808J%(5%yL1}o1p3ii7?N6gj>1p$+=V=f8Nrc!@J>&gT
zQ-x#e<msj`c4flo==KGCHwPm;3=cuhE?~D^1EZ#tBj-L+b6Uv#669F)9gi;DBviDE
zO)Z@i)#tmVre0L*@nT)-U86yRp7rVxW=@ye(kML70d-sWFwfHbdGJekC0H5cf4W`>
zxLCoC?*K&k-96B#vo0*a#X9SJd;`K1Q8|MK%nOt~bZzCA^+WZc4H~;fgoR@#UAS2H
zOKbU}%W9jZUBnaAyLv-~ELaNoAUc2}4rGE#h!W{6CQ`!cEoqQKZ&3}#Myav5*Ck(9
zVX}!G^1;H(|5<{$ps_0|!tit!Av$e*YU%*m>8ad{-o8iwij(JQNI~C8G)AsxS`2D8
zLu%bXZOLkug<6Z4RFP0f0=ME<cq>jbS&1H#jAF6qQNqGX3{~mLqKuZID&uy8GP*$-
zm6LKfDaSRF+Hj*oa8zs$exg`$y)@5$JRurS1Q|tB3%6(ZIfwfBa)qUJrAgV(JBJ^d
zNMkgqL#Gdpw at -V0v}vkXck+ at S+ega_P1RWT_;FK*n1b2)_nQjd;jJLdrMN9&RL-P}
z(Z0}@c&bujR3!#t3E~Rv#by}F+!NlwzPMF^;*w at XztK#)Sj?=%y78Nfn-z$HUG+ki
z5ellDkjphSI+U-#^&GnETBzrWdRaJY34p~z9I~aNIzJC_JTw!&cMh(IST at foEbKM?
zN#Y~w9QSnPL-|A6o+V3n?_08HFALZvFP3xUQd_?)p}_^VDfb^`86VvTZA;{6(MzGN
zEE#EZRpYa3QT?Wb4Jxxx3!w_<EFM>3FqgWdBtgY;p<+8DzlzjqE(BSJa7`$g40%1v
zJU=FNpY51SXP>8Tj^Eq0%Ype at nDamK_35U6r2CVX$oJ*X;<1}+OkY;t;5_atM++Yc
z$1&`yJmWt!phV<Ql-x27EB8xe9K~hv)gY`9!q1t9g%at;yYm^NY>?2UoqL<QW&RI6
zB6lv>%KXi=%Ip!J{h2tK)+(?`ySb9NB;HbWm#xDHN|6>u(UGq-s?J9-H4D>ASfn)~
zAg~qHz>T){>P909=dbvF#n9Ngs<n<bPE8Sd?Flb0tk!Na;ZFlhU%}THc#d`gPv*56
z+hVnv65_UOd^8Hm4o1H9wUn}Vt(aMZH^r)v<#h(1T)xGzVsRS^^{;5zgYfl^S7j|<
z-FqUiG4kslIy_A}{xWTL|AAwNQul*h-lWdCI3`s}7#lm2dbjOTuj}}Z^N*ii{q4xe
zmQ9;A=pNT&MbdXaME4%i4P&x3zh~X0M#y&h8Xb#eJIW;4!cAopg5{*xo*G0TzDo^L
zzoPwHeCtfnS`iWjzMaN}`!UQ!{gjeRggaEgKa6KS&U9gRc6eib?bgkw%{YHvY9xP7
zH1%uT*kP^P+Qn>JBK8GP5)ZyVgp1I at TcM(1m3RsDwCpZW98`&Lqa^y==13`J-u+b$
zz-yHLN;QZlD#*u#%ER*x9igcgZ?;G^44ZlBJj*aO|9h+8`sD(T2tM$gX`tp`Yd{tz
zDJo|<u^K&5Hh@}dK-gXBa7v!GRGxh5i_q}P1?~kYcDoSi1`Zuav{6!W3st{MNTh^*
zm(YC6!xTPPyta|pD^o8?MRp1T9ekG0V`qq~Ylzq;H&s5rR{mrrYvl{aZxyUD3*UUX
zAcPiN5$hJ*7OH}_Dj0h<XtO6>{)H%|>SGyniCJ$^)yGbm^=ee~b#({iU_U=*`-tfO
z{CZd3N=MxO{P_+YA#c6Sl4yeIt?3b6BM)PK%oEgj$ZZ7!sBuD8giR1uy(qycB?Gh&
zrHF+mN5qlae(}wKST8HZwG=ckzkq-+Prii!bo^3qL2ftjp<nahKC!-4<Qdu2NvQV4
zTmD@rwO0Ig;7GA1D2W7L4ug`CH6Y7VE!tSDPV;}R0o7%31wXKErW7G`-MV<8%!avK
zM;gg1*;Y+`>?EmWbS=YoHxX>Ffh`u>80M|zt60_-2#l^saFv=C+)7xeUs!Nh7<P<!
zYMil41iQ#xJlW*r!#8iTq{IGsd-e!9^2*?sC$s)o@q6yEry=8-%CEAYNA-M}Bmdll
zQ;>u`Va+VnqyN~c%F9l)*_t)- at 0!#6ZdcGdwvb+_kY1ELN at K^oy^_s32O7PdL9a^@
zy^;%;D0aPuW2bTiXx3p~;ei$L5O-f5(zULawMUNR`6nCc&6`J(zBHzG4_|lf{Pr>}
z+jLy;)70x9R{W8D@>wu{{#?3J{2=&ZZJ>$KSy>xU)mKSmJa|TyYj9E~`fkPdqN439
zUuMr$gs)Q8#N=P&u2s at z4^JpdnE2tuqE at r^wW->^>yG0I-!3sUs_<=J!FKDtu+<fZ
z^<mp{8tt%S<NG28C&=sRApDIHK7R-<Hh<vxd|@HZV$vmEd0{-+;-xuPKUbcr^Nqy&
z_gde0VF$mwm%c5WHBh|6V2_=s{_t0wjl|ba(Gecul`Pbvn%2UxHn*5|V#BZjr4Kj7
zcjFr`n7Co@PO<Q$6hQFzSNXda4C>^fzMG-$qEM?KZDLRb(Og)bdiY{?a_ZU)jamfR
zG&e44#-*}v-}%z=5B+Y^3O>)Cc-~xVDTPpi?cXAwUHOn{#`0g&ZCQ)5gmj~~8#iQw
zcc8JaH`cimy|Ixt-5Z)ztdLV;`=J4E``93CDPh at L*(~y}Bcz^gS|5}WuuU!^EC8WO
zog!IcF}8xzOq&Mm5&iP9UFBeA^TT%Azb>ABoIZ0@>>OL#kd1t}vDcO at wsWIx9&Mpw
z)-N}chfUi!T`t(dv#?n6OR1Om8}i($q at j^jtIo%O31UEDrfcyS{H+<xaS^eKRRK|p
z3MeiLXk&mj02UG&5fGu|FcF at xXuSHMrEVS`!OEs)f2gZQ?658G+O`FA5{8UkHD}e<
zv*)(0nYV7_pu~9v(c{iNJ2z&``O#y}jT=30PW-~9o3nGiUl+f2a at _hw8^6DNZrk#B
zHg)RFDN}DuopK{?@=b14-jEa)OE4=fTm$gHoW{c<q7r3xYrg2@DpWHP2M-K5#mUv%
zmGw3ti-xjcJEMzr>z4uBgJF*l6)e!PsM(I2ADl93<oq9UVib1yKUC-k(cur|KG=;u
zi_Vf~Wy%Y9<(bxz`#cmJ*-lf?^dF|lr)iUEKTK!2Tn4M)!P+SvObb71*=?^xObh{~
zZJ`=$4G96yyjP{ArNQNU7Q7WMvcK``p0cwT2Q3Xn)qj@JuXzhDLA>P?1_>5cME$@G
zKi-vx4YxjnhtAm0DmNqZXviB;CUfMkZxye&1o<gD>4J2|h@$%|L<AK+A|O|Ji^zJ3
zdn9#(H&0~z!<3Q>-)$98lX1_fF8YZU&4o&cUaS&o$NX&=4-r#K+$+YVHE$&sycm6{
zMM7H2=J?&q@{VToKH8)uwSWAEim7`OmhGs$kb3VMQ`hvgXWNc#!{^iT)!TPXph>5?
z)rybVn^n8cn5%5gx(U%yu?>PoZ5ovpiRRrGpIx24X<Yy29UFIS)o=EJ(&bzSHgD0f
zNoQxbfz2aFa5)STe`O!=t`&-We4h!HGnlnX!B;!6`C738Wj?3YC@NWA_#0HXd+|pV
zOTGAp#d`Is6*@t9*j{*(>lNh0Ev*h&V+^SK4QFG3qI38TFSNLt5LQi#>W1SaoM((e
zcujt{fXzUHw}2X at UCnUbU>BG|>~wZ$a8%wRG&&dQD4+OP&y3}iRX0O8R>!R`dKqfM
zf~{wT0fh%;UW2iSsc at 5aB{vuB+jqg{uZn(r%Oh6O_1K_LxMM-=duZ#HQ|X(wA6(hD
zSD)d-`+V2igx7&wX(Q^geXIQQj_vaMZR1YRwsaP4b0S4Pa^bvu<S6U5VaJW5BMmop
ztr^g5@zgPs7k3>v at 1Xo(_ikG0;C|}6=Lh-W{%qPaD@)#;eO}(1ca0*!fyJ=Hf|J6_
zN at Tdv5lJ&x;mG&KtI^c5J=-YyE882eI7M=eOynm<dj;`@4(z;kEDH0^_UgUZl3{J+
z3mrx50)s3I9pNFUmGZzFpz;dK9O^0u*JU=;LG$gbNptob96qgihaCqO&EHs7-c>EK
z{OB%GEYsJ&`?SHMCWkHz4{;bgCvky%u3x9AmCG%o4MX~1Kk^{_f5Kw$_t^aDl+QBJ
z(kZl=S%#0BNhb-X1wD4};5{S^h~m8kyqi^gA_ at 8wKO~$^Gffp5(n-{22j2PW3C(*6
zZaHF=C=@HZ`;6fY6q65E7V+_o5-`5~3c05w?iLNS)Qya;Rz2Z0*K*b~qh8734f;T%
zuexK+7dq*y^My`^>3z9m at E&1$810=x!gOJ1^)6D%%HCo82EEP at m}>|O<S$&-w_fFT
zRzk@lpn@U6MLH;Px2tR}=GmC1yPtn(fPX*$f9nLL6~CTetJ^pz<n|rZZOaz<y`qpb
zV<~m}f1G^>cofyw_uiS=-Gq?dAb}J at 5~Kx4LKNvJRf>XuBGNn3dl3Yr_W%hs^o}e;
zO=t;4RD^(yDxjjMprE26WN*ITxwEq~gZ%&R`+m;@o83*>d(S=h)ZaO0`L at a9Sn#3%
zIcT_RRnv~Gdd`-vJjHWoh$pwPayxghc;d-F`3Lf=QzwpZP-8`%_DMnIbA!7olck0=
zn;~t^Fds5rZYbnADz&KC#LG at NAj<zWbk~$VvBxg}Cr^>{r3pA2Kj<z`#j%(CC|50+
z0#Kr!JtVptnn_3 at x~2lEMs}YFCxt~!S=zsEW at g`h%Zh6 at Z(cK_MGGar at 2Zvk`Y&4+
z(d30%Em{w3j?e7|KjBZzF7boU0{k!4wZS6uden#&zz}`9&W${36W+rfKxW`RKYO%Y
zBqzOk5GFUaDa~R7`I0Ss5_ at k8YfyAlZX~zQ;@#PrEVlZIKT@U4)=*k0?XVxl-rK1@
zBATq-U*Rh094MlHVWhnbN=PWA3Lw>uTd(>U??VRoT~Na!C=f1)jnYd&76>ycQ4I@}
z;-ww#ZLIP;^=r3ivU&^iSuvoUi!G2=4rEciU#?!~l^2FBnKY>HfYyt!zPi!^X at xxx
zah6$XoGH#?S)VASqV?HIi}<@O<-lOuBvfR}oz;3Mr#cV_`y_>4iIOTT*y&xcS|UIz
zzd}uwaihXSO_f?!`+F#=iu3*gHbof?@18UUAR~){2i~eG6jk}QYu>b8;}=@2-Y{X-
zs>ThMZl5`A^P1L;8aG?jQR!8uT9sO<&vhR^wr at tK($6jEKk?lGRchBx9V*eOj8`s8
zW%QghDh&fAk&}jDvX8a`LkR|=j2yKrN-N28uYHR@Tx#e1D*gTnMD~7#4;o@?qxwIM
zkJ0UY;fU)mL|{aZ=;=&os)bPfoc`L021i7Af+LhHOojkJd;UHn&eYA@;@f$9=Bo%d
zyJu`zl`Y3T`EdA*X1o&SOfp*|aC?2+$P%_ns^mwRNsZ4$@WR4pA`WgNs|WG-V4#r*
zrxYJ7O>g%D|C^Qgf%!{5{HrgEAGe{MW=aFtSh*Rz?Fd!&pbe#zJwCXxm!q%0;V~3&
zHsz8swGvC|3e{Mq)B|JKM(~!@?+tRffocz=+6iq{dIrD<oPad at LLCVX2v5YJ@Pm7t
zo{yje9z_e{H5Nz~ypf#2%9dQdc7d~Xhx*;)(xMl48#*8@rE*0;T!2rO*0cL|s)(!)
zbc2B$5{`_87R1wvQ5fmvL2qFsw2c#mk?j8J%dAI;v|f7Sg~>o&N%#y^PKHz~30+lR
zm9-c(0&qc3X&ALcw8+4tU_HnyBuUIgdS7|P9H{tob-8ogkrgYC9Oj=M+t96D+b-SO
zzS>n%daOBFu(^58i4&U~J%<hN)vCv^LEWe#sJAU!9)n(@No>5o4SIDv>yJKr#XvRN
z?2GKXY{~4);%ibizD{7JY(D5wep&horxT<dicTI;Glavpe=L4yg6$scMf%;Zq-^}o
zS28*V>c697z{KyMYoh%Z$U6G_S>kst%M=oDvP+o!xKjU}cvyV#IEHG~LC2T)BzX+{
z^HM<AbWnXYR3v0`8PL&_aTGs~dxW at CJQxG@r6QUApX+m6@zCC0yB6{!Kz2Gc{8_4~
z&Vr?m>K)<N!w{?yA-%$$>w3sf8u3ogiMi4 at 2Ty&q_ML{FY8`27|4E|?dL+Ixd}yb2
zpMJb|*Y2UM7PC6AdaG0x8N=T}>JGShfsh8HHA?D^jbLvJuj`RI705X3#f4am5hZs4
zqi2M30f!U`9{^IV*?N<H3h`jI;^Sp1O at Vr%vdPeR6sR~m6wM2Ce|qj)d5C<_-7-vS
z<vtW46+GU}K8j`Cc#hqb&7aG1|H8(gqcsE0`Mmr!dei!${{q!)`D(xsVA@Ogig2bP
zi*^D`L=!30Y`>s76#~6c*qvfEp$y&W(d-`Q&E7!$`JvGO+&3G|53%N>`F_41uiCKI
z<M|%(z+L0nt9&=a7LdgoP^ohd5u-RnJ$tK4#Y*&N71755k4c_8WhvnDQZgz?ggFz$
z7jg@u1%$+uKnFmx`~|WjjiO#Kg)r*@d&x-h)TKmbq&g!)?O~CWqyVBeEtx?Q>yYFf
zQ at hPyc#JT~UoGh~FK3oiRJps9)_XIc$#VGf?rWXKdhyAxt-O=Z`nDy6^2ANWhxyeW
z59i4<2LnXwe_(3Sg8Brbl>o#84i9|e58D8ouVtD+N?n2ozR{(X*G6SFk-CJ<6{I}_
zgw|AMjr4%Q9@r!qkI<Y-0{QQuctwge8S_sfGp~>4kG|u-=H;>Q`D at prR*7HhcjDa>
zcla4RZREa at HD-Jk182-Zrm(*w1U_9qHC{wdOyWXM>FTAE7LHd-go?;-fSnKo6m>Aw
zi^gf+OVGZDuu%n*lO2zot8maT95^gS(o{c%B!y)_uC`_%1hbcN3-k7!p4{R{`?CjL
z-Jevc`i%4eLz^G%FsE<Ft4fCpclYK@Jo|ELmxVK5$x$npSs7RP?bp(}X3l=~jly<s
z58&6peXWY`IVK>}R1x)db!;E1lIA(U0H}(Z#~{}W9`3W?%*sNBmDP2-<%WBsWl~wX
z;c7{{0GE{n^rmECNmv#DcNpm@HMFEagG6aRTuXd$)xr<gDy#)v81E$t;dBzcuha_K
zPga5f9i*ms-zTU-P25F$oL0(5ey)yJ)BHHfZlkDLL-AxFCT%!%5gMQe0g7MwlbH>^
zoww!4cVFKe)VJT<L%$y$?y6DmgMOd==&s=WVCj;vDfQPB`8His<Mzn8{pB{pmj+8w
z)5G?)e|uNf>JMHYFn-Xhp$qo6ZQHs7FaBw`>-a0NGsiA#Uh@}eP}`QB<+L4hVy9)2
z7JV1IRmD*mv4~2rkDZmP5T76jQNcrVVR-61=1pt_mZs=BRX+xcXC`<Ie%ZoE40t7x
zk*3HD?L0C`#P7gMkr|OPdfkwRtLX+g?VpjCr_Z=Pc1YoS8^%_fcePpmw1Y3)-+i=M
zUnzdhTZ`6jnLKg1J)A${eLAmkFMRLT^vs{83_Ce*Nsp<Ws^`?4^Ip%QKc27C?D&?s
zr@lQza;=GNr&0yIsb$>pNLwq_sUhXDKX at K^48|@kZ7#rWdrErDo;?o3{@D|xzZv0q
zf~!rDIB$CkTo>Udl}l2p6h+BDxYugNn8zgRc!<>!R$1M;MO?JNfO&>>bt)bQ6u=>Y
zCQAYaOA#IbNnQw1JSKR~!GZ?xA`%RIq#B<<LKupd;@6P0M*LbW9W5$U(LN!Ll!SH)
zBx+HCL<TNN;80EIIy^GBW_qXb-z*sPcC!h+PfobCuy6b36MCM@?Z!IPZ903a)Vl-U
znbC00761s`b1E)5w}R)d;j<E!o?Xf^P7Ia~#9iHgV6eMQ>1(;*u%*BfBm-XZG}f;q
zcJ?eZrBL0vov!Ei{{IjJ!F16qaLQzXAjlnh;u!z}=UVqC)1F2Ul!Zk_RivTdA5Yv@
zP+wOI!n!AeK1?eEMn)wlOpu#wC!q%oD5VRLUxYyIBEjG^L<X?5CFn;fcaA`?$RB$;
zLqKUz;#gF!5yRP~>C+3`2?cnRzAh;0E`1He-~9PSHY#RQFxI#nO3ll;=bwPyK*uyx
zo!0`FnJe0!mYF&RD38*-_^lPtiuLfcBvn3>!){?cODfhIxThb}6(mV)1hgHf#d9DY
zbKFr#E=3BStHtzSzytwK({enp at d^8yszIBM56H{w#OB at Pwb_q9v2#3Csl{uuPuzdF
zf$3ndQZY3_Xzfng`b4x{KM!vXn3WW^8^TvO1t?{ck%v=&oo95&AX^Ga64dA+Pl6b%
zh`T3-+eHbcGaYGi^aOJ9f2cqWbeCJSo7m1>xLR6NabiVjy=P5Q3Glcdpk0DyBGaUc
zO|PNEG;8fYtqCGYECCA<?b$NI38<khVBnfHc?%cj$-U}~uj7u8He`&?kiG>q*7Fw1
zZ-PJHR2`zuN?U-%cKNs2rr$3SWB~h;#4wB))jvSg;fDl}0wp7cJbwXnOi!m00n`a7
zzwKC6r)EH6otf at b6a=0Fa^Af)FJwi)g(gb>C(BT at mQ9WPnQamB)(@cFqktpv7hamS
zLUFY%%&5N*#M4*k?WV;_X>ObuIF6GuVN0-3N(cehVJtV8q8I`?mf=6*?A}AtmX%m_
zLc>{uC+>a~9KYg&3ulWSZafsS+W&;~_ngV^7kvTVmu!8D?>ed0E)tmeMJg+wNWv9<
zaFj<LTbRxgs<GH2y8NOLlG*04i6~BJin;F!%nJkYOFJ|A7LkcznA5ni@i>npDLFWe
z`UFH$P)z(s+b at A>rjABV-y)YfY(1aL=J53sw#$vFVwtL!pUfTF`<;QiFkLKs84KLO
z(s#1ptS}TYuXYzj2PpFczc1uxKEF%asax?q)J(R5S5O&I-DRpHT_gk?qH!G_t369Q
zS%48b=vLecVY892be0e{S9S5lRXxRIGLv;?6#S`S+D}GlKdCtp6%EN*#jDUFgjt2u
zz5qwVs-pDJzmaf>0x_MI)NSmw`LjN*)8N#Q!k^tWoExVf8Pj~$pEJ(Yt9xepb^a)K
z?VMR_*Ug@>Ua8V!S%efYOG;kLXN~OHdpN&4V*BZV?@k-iv&T?Yjr$(FeChmwD_?!J
zVRqC+H1}t=wJ at uu08vfZZrOxr5mG=G30@|#+&cnD3lqr+rVS5X%UtVUY!_J}^`P>>
zwqxP*{l0$Em25U3(Cs0DH)Cy`R9hVR<k0%swX)oG{bN+S=CRvTpk+)KolII2m%#@x
z%my-H0r-zkr|M8AQm%kG+F;8`N-|usc!K`t^6z+o{P5w|o95I>iCFU^CaCpX#ed$i
z?M7fx;pbuSL0=x}WD+Y=D{6s%M?Qn^X?L0*Kd^?`ua&!s&RNB`c?;<XXcdDlo?)?Z
z*oU?Wkz3JeC3d9C28-D*EPWCb=qzZ>fE%!9lIh4f1_BXm_I at BM0M7!G2&q;xT>#U)
zw0DN5N?p%xT~Vh-Kun_sO?K>%cCUM}T|`pt9m-jG#}mHgU`VEa-?tQH!I&*a!ZS;p
z97pGZK7sbtjtt0*L}0fREn@^5uAJv+M9@)JR9>YJ=r0U6=zXA;5&SkzfP}Iccdj|i
z-U?GnWu^w%(J9YdzZ<MPqWaw({I8{GVdS^-!OE_kxA1?uv15ftMG^1uvsw-BR#vyL
z=Vz?J&Xvxo)A-&xJO5H}R1tb1Zxmy+Cqk*_VIoWf<X~GhRFi|qVe4|xVjSo`sOnIJ
zzX=I}{DQ^nq&*ofmDd^-TOnYM6}+m&pve?1oY|!QvchJtMQ`xma<|Nzvt`>HSfXTr
z&i3g!nSY%+ds_sIP?q`xIM!>qLHn<YI5BE at 9AzC6w9hMQNt5;of%_PupM|J6)n9l+
z!^~eaQi9Njae#v{gfo~YoK_52POwAzSAFI1ZaI5Su!o;FGu2pr={GC$vx_C&@1EgB
z5g@d=)KXyn?19QcR5)~1oub}Iy9fV<BI@@*w>yPg^?JPFK7#Jy6gmf>T)ePgtg&)h
zw5WnH!2rYSO6m5%%(X7X00X}CQdwo;zD%X)uo)FNRZ3_&5I1)pQ2M=~DgE_2e<5o0
z)d{Y^#WaZ;e6r=fv0mG=UreLx)fABXcebnAjmiYibq50SCrlg)Lj`It)u(I>$v4=|
z;huYB`6!(bs=tV+3t*T<*M?~CgA67VDvr~TdsvzWH=T_1MtVHCr05yRfQch9$BM7B
zfC-n!UHC~l=Ug{4Z+tU!%I%&N?*3zz(wcwqPx+;f<}v=$h^-$DoH)HGed8=r1nAkI
z+{UbC8=|mjTIC|lJ0v%pu}+x7m^+M3l|~n(Qb@9vMh34GZiY)j%1L~OI4l8<Svq>!
zI+ib6y8N#p%C9B1Z!gJ$NXN`ozLWm47vpcEE2W;N-51DW8U8i~r3r$;iliP*8L8oD
zhnt?t@|UgUL!Yd+zrMW$|CNQ5KwR3BMMS)R2qMZQD3iEHlF{NApYfh at R=RAz1U;6d
z`g-&j!jge9Y<OR99!WFxan12bB6zN~vq+aNZ{iO(XT8#_acldfv6)N8G;ZCh3I6Il
z<yTaboWROUsgf@RFP{QI2$7%xALe;*4juH`5ZhQ~pOoxqgIq|Mt)eQ2i|ib%ck1#i
zi`K>fRMZ0$kW6|wQ*iNxGbIvN<e=L{ph0A|q~r;m-Wost(0IPTQT1vsHL6~tp?z|P
zk)w8w8`nPNrH0*KZcLP}!CPZ4;`6p3TU8aIG_hV!R9rVxRl7Hla3C-!HYg=XM!7~j
zwO>UVNf;uCd}Oe9YYlBxEzQ62n{V`)KE6t)_D!S4R_@#WjTO(+=Zsgb$aU>MLU+^^
zTY<>&0k`<X`XFG1&A=@Im;g*1=>0G<5yOmEP#}@oDd>1T5pIf+C}Jnq9skyIwYya+
z^IWY7V>>52-!(P1(hK(M1E+`8^{-dmIbd#Bt&o?h;O at PxT#ze+v#5jEiyA-=KFKqZ
za->)7=xRcEEe{i5nNIMsQ_t9;8ES&mxsd;{?VZzCm)VQ?MV7)Zl2&<_4?s3!zsN}A
zcE~C9{cLiO94A+k>&y1e<cj&G)c39CTi>^hZ&zQGM%&QRh4eT+g9^za_249|JRpEX
zP!(~ccY8K((!Fc5SGspdYh0~bLSl{I8+Ys4q;coBUrxZw at -@;hpmK|HnKu=g#~9*w
zxQC^&L0rRU6~gkSD1^Nw3SpUhuyVOLNdHZ$3MO=f=hhJwEa^&KO;1;1T=X2}N^vWk
zuG6-$2p8DK+;1ya_!7qm<mISu46YTru#o%b#I{LBq&Vw2mChh6dY6zR3-RUwv?kX?
zQ@(@@5o~fg-6L3w#+_O?m#%2lk||e~+hbZK_wVz1oi=_=Y*JCOa=X}R|5co3#?!mi
zPR~KE`hh@4tRuxCgVjJ{&?LyEfGmnQNva1%S8XnB<LAF&#moLWuiR!O_+P99_VGMl
z&qIqx;XVV0fKZy#l=ZRGjibDz`+4mq|EVLD&}|2DV5Os;7Mma#C~=vff+~w{>z>Rn
z<X^%sAB-5{sHbHrhAI!_sVJ=`G-<dEd%~@d5GB^JD#kIm0IM;I&&U8ovn&+1hLKRj
zU-hoei?3qe9O*TK=WA<~GPJLbnfy_r1!x7i>B-4LZjQleI%wxYX6`|3q8hw$JEEyV
zGYdtiTNd7M32Y$4T*Ybxv`?w#Zdf2s5-lKHxFf(D+K1zBQKx$kYC|Z#r~jHMkfFlR
z0k6>h7 at CkVY5I1l(c_)WA-}@=P;0c+N(KDAKCtN?!+(%L!35iA)km}Hpkcw$c+~5<
zEln4^dREf<q2R0wk+WBe=^+IV`;JS6k~Gv5-*Nr-o+%W~@*umsJyWc<Y=)fgej?df
ztp)ti9&gu_-OOi^q_w2Ec$iW?nb}jm<R`X!o2G2#rwje`rZk?WDUjr#rwn>J^v(!g
z3=BoD1b&kOA at ss)PuWCA8qkxf2GIKm&En5XAv>keLS at zyG>f7Py-Yly#EX-1LZY?S
zPF~RKUuR_;I|&SN1Jx8eC}?yOAR%wKFX*7`$tlYCI!4}B)S-j)yE~w*yrgL0>eX_+
z)p7v!3sJE<w2gv<LH3aL@IPljDF|jn#Y7lTFru9mxNGDqtv#H`(18wfKJm9pqFPw|
zZOh*D5Qq8Tu`$aoAlZnB*g-maM&b*Te&>zkz#_)J;j!|0cX at VLI**vz0*o_nvT%(X
zh+CQZt=dQ6bHi-W;M0L>35`zy*M_HrN6JvsR)v+UlUn4%DaH^IDq8Y~kZe(Xd^KA*
zg%l~4W&~5{Z-tnRd#znw4Taz?N&+C?=oS+M&k&esU^N^;5h(2u`bKWJmdOhi7u(jJ
zSkL)_Ma3IVoUrdad4i2lcAh+`{5`j5<!bkw-Mi;KX3x9l<~~^?m-vilUyw at _{dIBw
zUg$xFW?VKqaZV}QTR`?`l?}8bi`cMSLlIBW_o|0n)d)r8BqM|z1@hKZd@X{Ra8?js
zg>OZXuq4q92E_%zsdB`s4+<vzl2dSp-<R{*rlkdvU*x6jlE3>w&Yziqd>QK>$twOL
zm2%(TaH+Jsk=8sE+;A4sqdeAJTGV1|ryw##`pUd<McPdQd@V6Kz!C%_`wUVa$RiW)
zBL*IikqF?H#F{|arzOP^ydIqa0ZrGS_Y~k0odTU`^&x#Tdxd<0e~`a=5fA&i|Co7v
z-CFm2c})N7yv+J&R_5pFcm8_({m=*ea+&q3d$ZK_gY(c(a23D3Z^~MJuD3v^_bk4v
zj7E$rLSXP?1qR;*sC=lIyL87!V7~Pix=0jEsAIl~yNvoUBwz{sqK1nv6vi_Wu;dsU
zKzG~^>i8h+MS>ln&VYK9qkWB0Q!f81wF(W4tkyg;X~4z&+uxo#J0RHo>Eao?UVDA(
z^rfg<`fjd$R=G`^SoFg{=ELf&o9E8keKL<7JMtY_U2FMdr6o=dwlgxxHVubQaic)+
z4bI7;UiAH_6>NlMa#ct%CqEsD6=+)lB}w1FTrhc4v`NdhG)qP6kSWkqNI+rA1 at 01h
zTwu#0A&w+Rjha&Dg1g;2j-UF^x&34E#uc(YGY1S@#wss-d-{sG?<{+L%)9ne*FNZ!
zUA4-|Dd+BY;pz501CI>g<9pATKcMJjTD`UJjoKt<j|Puc1v=~|yi*_QT;%aGXoo_|
z>&It7hj~3#o0GyZB(3yjI3-xAqx}6mKJ6$Alarnl^JI2Qehhkcg&s|IltJ{WqU~)p
zOrs~tEA)7ekc at g1%Ucc&tK9 at Ki4GG{?dTM>f*&%AV%!S_O;CYi4*iI^7 at nR9VWLx}
z7TTm*6r at l?wfrf71?3!HpWQuYx|B7ceJ^&n&_3$gq8t35BMVuN0d?2Snz?q{#F-nF
zKWFA-tbMU*-GR&bAE%O+|M5Oc{@s5Q^GUEL&vo~3o&Ds)nb%66108$76Tb&+P at -+H
zDvNlQcGpFGPN$>rgGk~UY){e|h9w@$;WnqJDdnKzj?;rFV;Pu0z+JU;xWMlsI%n-t
zCpZHk7J?jVxPH3&I$%636$vs2i^&`{bY*Vwho3$=*RlJZPxAiBT`*wCjEARg{miPh
z>^|t#mAQK|^BR^P*KEn=z4IIQ>ePJg5~{I$hrcJEgxrm_wNQOT{PbU!z^o$J1vMP8
zPb^jn7YvWZ8tFT=jEz9uV3}~Vo<_hRG7`)VSqn=Y$UZU6B_spMJNYDEKf8CM*ZzLB
zi8QcL_mourY0W;J7EfYj-BazZG5qy)- at pH6x6(~Zb!_$W&YJDgU$62~t5Q{#zc+=|
zU&b0`W8I5*H<3#TK`gGM3H2yAO+ODyctkL{o=XvtR5~dZB)AT&XaJkAeoyuU&=2i)
z0{Hm6-<Xe%eZX=DPJU}jIpj-bt~&kcla0!&GbeOtRdgR$40 at Wnky1RGa5OQt#i}eK
zx#X$=^Nq)7k0ce0qH74R*#LArsD~LKYL@^oNHHGvEeOa7kcRF%9#DucYDxggoC at ii
zc-DE}{eWV;3+6HxU_-SS0Udm(DU6DZi2$iA1Zqeq+9Qemh1)5*6NmP<A@^=x`&GGj
z^Tu7p9WN!$nK^x~l<2;;m?`rlX)-^~cd=Jk+BsH-wc<zkxyl*e{r1~;g~{JPegL`3
zY$uB!N-aQ&lFy8Vc?}XH;fNJ!rNI;&2o7cwGU``LW{sQu0}+0yUj33;p)3g~e9Yr0
zzOTFp|1AnA*C0K5sR?Uc_Y27_Oa!uC;q#anQwJ!CgMg4WGSOH8@?;F+R|`-iCCe~z
z35-F3FMIbf@oYy}m4qZm`HC%D)h+u2|Mona-8C}3N(!rJ|Fun*Cp%J;<?ND)?b}GN
z7X7K%?>=8unqLwt?!`yT+rSG|Z0%LKY6?!)=8Du-TnT1CB^<xW=u~~G3ZR*f8A7GT
zXm7 at tGkt2JuLhVUXc#V8JY9dfY)V8VS!$G at NKdP(P^86E0~9F_o7QdKTGsOYWe3hI
zWPuanTK8=_;Dze1{IG3wgN@5ZO=Z&UMMLa9<@>yTEn8Z(VaVzRiDA|I)!$O5UH#g1
zldGmS?6-XIqO(;iW_QiWO~&4yD}JbK#5sq-^6?X~CzJiD-#%R$igVF{8l>t?raxHM
zZsf4wY{L{nY(p;{_tcGR%t0nOW?U&lSJiBwF$o`>yG>~-uX7Kp-$1a6G^41Cyly!(
z(js6jVqwcrPl*m{h}KgAovZZTDHhS7$FIanz0e+C5oa)^;H=u67$+n$QZ%f>%Am?+
zj|!(_k=hhK^h4X<lf&|co}1Qo$Bbo*-XFP8X~low4Il6yC%7NUx7Xa8T=Y@q$&=@9
zT}Jb0;+Wa;H&}Bys%sYLQyYAA!ywTKtG5urdJvqTRT-S_iZ<K4g1L1?5gugM#W8UR
zO2(*yvt~`H&e1!&rw^XClGUHyy^YkPdH0m+joaUQH2RX#>dSqDre50{$BTL-mF?Q5
z-j=$r*R0*RQl-!|#y+o@{bZI$_m2lJP!-oJrY=x=jM|d4@*0XrzM0qnmZB*njcrAf
zmlPl20ZeHPpEBZw0Z2;+g_ZIA_DAEso_m%5HR{S-seVz;+Szk**3FrfBd=S+?+4Gl
zJCmgp`)B_?lesS)ymaO4&hwvw#;-z;U%_gFsGE?fr-0y3oxr-FqAEnwDp8<eNG>A2
zU{+daus6P$OqGf96+W+DrRo)5=|6EK<D2A}@<w;R_oJqyWiFO7DI&fAtN076pq`ci
zChcY6N<k}qNxB<hGA;1I!9ip+CdsK0!9g}k^9HkKAHTQVKI-I9UVQb$M-uS)V|n4@
z19w>bZ~Q0z4==cNNy@^hb>QXfuV4kG!EJA;fg08sfzv2xs8Slw3BOtYe9I{ssq71s
zq&6Ayu-9<1ao#J9)M<GenP!m=pq?W&BqgL2aPA4AFbXKa5H1bG2%5X^P3pC-#Qx2*
zhfeus3ctah<mPTaW#2TVVQ?feSzDR2!~1jp-1U8w^l86|^ByhzgI@~gDE^GNv2okw
z*XZ_i;T7zS#Ev?uHc#e=YU6ctUf+pjTb8tv*U&eBIWXZVUWSOMXvu?|v`%eo0RCez
zoJsN@<uW@?+Q*$3g*5PAxyAfRp0s&AR9LH0->W~e=zAc&n_md$FR+iJSWVRF{lEiG
z+%7He!Mb5HI7(yP3AQ)YXyMmuved#0mUZgWgv8!rpi5%Nk}>3{>T45;qJRr(bSM?P
zfKwz7=v=JVU>fSSNA|N69F)OM&2|p!KXB+_HgrJ$Vb0knXA~ZJ at cMHbM;|Gi0pQX1
z_s at Q}Ycs3D&u`rR?WgzQS)q;EFTC*Akz*O!C$L!HBqZBdSU_X#AHtrjfPOh)T8Bh<
z0!bdr$Ko4%AxdRS3y4x#GXh=p)80gE#+XGwu_BmK7?hYG9A*oO8fEFU7jziO@U(bM
zPXhA^V>uXU2Vy|tH)U+?w$k?>o&7s+?t~FjuJAt&Ez42sHFYmpKii(UL>eCHyZQ59
z|GvbUNZhqx<>Ktku`KG!+QX++zRn)XUVHy&4D0(Lri`#+BvzF{_9L)LAhC6;1Po`1
zT37-V-khpUp&A=X0vl)}Ek%QS0dJRp4^9Rq6K!geX%mrB`EM!>=+HE+ynk}z^8C_q
zemS{OvVZxsCLIS<lpX9zkB-q<KCRuO-5*M|r5UY#mX&GO8E4WQ92PC4O_FVh>Z9Q*
z5#5aOoQb86oqi^Qxx6YI at k>Jxsy at NuxNtF0p^K<d1UWb+J5!A<Av#5uCn=r~5l%*@
z at Z^KjGN8dx))`OY0BlH&SA^&5h at M&h$d2FIwtcYuX#ElPi<~RXiw?I?x_0b0R5~mT
z?cctuyl&@dexIMaf1g!jVaL_w?!UI5`DokO@3yQbOxpS_gaWHr{HJ}7h$D3aBG-r`
zSq{M~-yytA+fpJ$oD5k+NO~jiNM~dqmPqc4EepAiV^M;X1S$j~QAR-}$bV&t`>)m0
z9<mT#^oz7ITiURG+3W(|P3dnB;V)GCjko%4*`g)$msNGYNiB}C>hZWW+7yH7s_gN?
zNN@?$_Gv!>rmYskH<>1CgjNh10kn2RVFX--!U%W?IT7#|is at MjJ#>knRtfZA*uUf<
z815!HDY0~F&l-~9M7UC)lW|?2ld*vLxoA#Ce(5b)x#uNnHf|Y~G3R5Jz6HZFcCO*S
z{k&Szr)5+}I`~C#PVu%8s;?Gn at -;e;3+bot+-o%uO$^sfOJ`H!%5q##Kn83IqTAFP
z4Dn59IL*2Uj*p<`=}rK~WJz)$!<<o9$_S-01z{Z_Ez|D?b8vpc{W-Tq1-`L!VZ92S
zd#3rt$fH@8x$9TYM!WyB@`JM<{-M}I+{dA_uFsNIOU?m5{~?`lS8?aBnKpS9O-w^B
z#D_W#guoV^qB6}Eg-X%mY8C{BNR8+l_gc-gaj$x^Ndi`jERiAx%2M7NBru9Ch+|EC
z#Sn%vhMEbs1&G$Wd9W<vJ9;(7FzI|g>;El7XY8Bq&)qc&3gr2$%lx(3v*i~6np-1(
zd-V8EinPkz6T4^bKj)7dF;@l$*G2sH3+yr6hT3?@SslM5f<5|no_UTG;4xpqF!FA&
zC3EN&cP``t=%wE|e1O)xQNM7T-4E98e*C*!z-DdSwmF~oMJtgI-loFUuXz=AK6`pa
zcU`TUxQj1Wim^^VTT^cxu7%euqWhV`(B!qbXc}dxfFxs}2JXJA0QBSa3wRBrM1HY{
zK5oO8Gn!ZcaI8XdiE?$FJpDxp;VgS(u;r$E<rAD(6KNzrA)k<MGDWo^s*Hmd^f8Xs
zd#p;lyCLg;o7vFI*!`J239q^=$XPxQG<rq8ed_ej3QjY~{dM-_@$-peYw#7QxTCK6
zwAv7Ho^*Gp&nPk5)1t|g&!fy4`j(g?*_unIDGO}KXfcY_f at HzSs3O9R#?h(qbQc|x
z{mk(vck|ikw+9Er$$gGJIV^q1L&N<C@Rh6=Um?l;S+6gp!H<7YM)Gz~IOTkzQTLWE
zxNo{<JP8WwY-d56S#k*8b<>V4hwTkg!r*|CLuFG+5F}_JJs3v<_e=HBO8`L~HB=wU
z1y?mV0f7X>P6 at NF0lJl~tMWJTo)6g1y!Ll&>ZbfPZ0ffFcmI4}%69jq{}|5Ta?iw&
zZ2JFdQ8D&LlLGo9j!?liOqGQ_rESr|F(Ml83454=kI)p33u<D7$cZE(Pnn42=OjWY
zl=qtGYOt0}iV%esNSVZVzl8(R;zKCsCQV1t1u<}<90Cg-cuP<s0 at m<-muy=;c~}0V
z+p`}6A~YEC<NCuzzf8+NFn9G~esbU5#mkiEM$DSmcf_GS*G~4@T&;casUP|rn>u{?
z;xWu-Un9SZokC8EyXlKrpN8G8pQ7-~^%s_d^Cl^^2J7{GXDcg|?EvcmE#WJAuGjZ{
z-*>6+Cg1%4P+(JN_7)7*OAS`)<>$Lo3koQI=@~F0^l=JS@)!6i7}GHnQ=d$Wq_8AP
zy;l~3*mMB6ot6%nBqPk)M)@n>{g+v{&`SQTO~^)QiR{c-v8LvhHHl^DbP>u?f8mW}
zpzIYg)wB{d(CHZ-2mYjf)@UG9qaKD9Nvm1wn{Id7n`1k*j&OA9ms&cB2VIhS$St2V
z8qqD)H(TkI_J&fEVx4V^Puagir6f(Ys|YDkQj7Y-VTz+dFcJF)Bmtwu!nO9o;Sd}b
z(0x(VprHi<<N~6{M&nMhx(v328G?+MNPw}_2(9&rlai1$StJOvyC@B*)k}#BCX{x9
zJSKJ%3(Cso4>u;{mD$4YXJxVAEoJh)I&$sm at u<8q$1hzvX^&yq{Lf9B`R`fMsZ-gk
zBx}V=W}oLP@0>gTz1*j0`Q1-G`k5%c8}>d;v+yJQkEdsYg##?QLbsL8>cL^C2jDD%
z<9CyKSRS(L$t90^_zk^Ay3l6<Fs*!q&k8|z%l|m#LVSdNx;pz2RD?7pO3)0U3nmAv
z32%s69FmEh5v+Vv&~N9Ue}tCYaO^a(n$#&K^72jgIj at mDy(Y#TV<j%YIIuiTLy}yy
zY*_@W^(9!Yq<#aQ%6=0Gpog#s?LQmJ{yffp&;RF&hXg`P;`8vye4VpDo(0<42{g<9
z;lsUdmC1ES>fIq~Sx`|VSymy=B3NHZX2_<0Fx*3^Yg)`5UV>p77J0KkDA^C;DQWGu
zRi^1dSZ;)}``7Bc1dwbVJxx}bas5dx{%6HagA>FwA2LWmFwF=Jk~*<B?=yw-Z{1(<
z-gwnze$Mi_(AFP(|KaJovb~ghtFE?jCxLx%RKt2{+EAqJ9W_L&@`L6ECGe=n<SgpZ
z(!EQU8De|75=7=uR5`-pG;Igvjh38=*X}^;EZv+W+j5xK^7uSoGdtuC`T6qO|1vz>
z)HDKA-{7&8w3$i%+RP+>!sKXFx2#@Y at c;iBd;EKS|6Uv2j7(_ahtR~awgqZQlb2>e
zUFdyaDWi|xu7)m9ead){7yIt}6#I~i<^ye<;=_>M at hPM?a`0R&_Ph&s&4=7IdN3|F
z#m^0@;}u*%Trj%eC`Cw*PlGUrFH_S7b&bke4ONuP+LhU{cGt%eMwQhm%v-jlbU`F5
z^&^HZEtt>UTYu%>M6>hz7O{W_Ykpy2t3LRi$y at l@j~9K+Ki%}?4o>7CA_!NpbHekl
zQ!#&n1Wr5|<=Tl at C}1(Sgoq@=gszKML<W`+!4HV6E`gvyF&_4{4(t+$OxJ?I9DGqz
z0x8o)-^4T6UG&mO784cz7u5k|gh4sf)aHXeHQmc`m8t_a^M985T+GkEATMMko;~7g
zEvtBj(vt3;=UK*on)CGrcor^^kQCk2AWc#P1-VLiC}a`cLZa$K@uvTRONfjr+AtVG
zjG}r(YlK$}pB4Zmh=>GMK3H^1p|}>_DCdwjV0`cA=h$of2NwJXD=hkDQznbz_g8I_
zGTa|a0|&F13wIv3k^h;tmPvJ&;9ODFq*QPO!+x${>#mm3qIKv??BiLr at J#i*z3#oK
zwh-Z>K^jEb2nVbNhG>Q3!XY<D6A;%o(%fKED)#o&H6R6<foLjK4mgn^t{DkkjwBX^
zCNYYt&!>Nm`g$Q^`|iKzcF!I<VfLm?r89TWT)S at 8?6vFUB7Xm7@bcf@X9<74$zErR
zE0=CsZ{pmtvB|kBwr3w)AN0Z5Pfsn+g**hTMR^X9FPeN>#x`Fqr6K4sUjs-<JnEAw
zENBS*bPyyF2NH>xN at QUqMndL9?v4a+7Ds|310!*7QzGlp`-3AVMM}d=VaoqFGSy&O
zZPceo*lB<ekIYX<OpOalPFT%0U%vBZ$L^!AeZ()Y8Y71P%D;pj_{*)-%39oFY+U5@
z&P&&@Ydo)gtMyA*H9N_t6)?-1V7FGxr5^Y8n#|9{T*^(jf1b2UURTrwe?bCn<b;wb
zC>KT^poTAp22sEnB{dIFTy6cYd#|?1IfBk{3R4guW~Yc*!IQ$Ln>|1 at Kf!o)+*08Q
zh6)c*np%HgV6c=sC)e$t%UBBgjqmjf&T2iEm13@<&b$(<%TKT`rAL_4dKCK(ht^ZD
z)^OWGlY-D!Cd85c!V>EAQiNpF|KR-{C&#at9&|r&=>NYTDBqouJB45TnN8*EZ?VWp
zx$m;lxA;0X^=I}KuSox;YElVapCOdM^4)*BFJhM+i+_=K0)dibLyXYW9ZOJN-=Bb^
zkYs_tFsYuz5~A5&V#>ah#CnO~*yD+X^d%>8cOqo&;KWIZ;9o}~$r=;dMhz-Q)t&&R
z2qE+|FvaT|5*h{fm>wwn?(q!qZE_8zn<IL4pL*!to?~BheD&xL`G@~FG_PO(Denx=
z{rIRH^2!^%U!J#bLsqkK<?A0=`oY0ft%r7R)v5I=J9do84GP1#`T}=pm|OZ*h2qy=
zSdP;02b~fv-&cHr`0@IEa?{*g?w^bHRcLe_UUV0!8e#F%Cu$Ynp6)po9=9aqET1TR
zaUwgS1>ky5#kW at FUFd-7LIF6myr}?uumft{B<G)90RHuiyu7h&;4R*cUASv10Dt7B
z2}hN&S{d{SBrny}2U`d*oie(cAPA_7a578{_OK#U$y^s+stAdq3vQ?)=kbLRAz2%n
zr@z_CFH8_^9Us7ddSKt6lsLj!AxR&|TKj8QO-X%DsYR#?3h8UoRi0Rr<>Gm5Xlvtg
zAH8w8=Ll(qsnQcR<W4SMKbf!0eekFJGLAB|=oh(s5%rAMxCbr#;m6F@xJP`Dz68sy
z(IviEk72O{Y1J3%U{qY}JMLTPi;|*xzBtH2-<!VB1A&;ZyD!IgH$5+=LA!VZM@`RC
z=vM~&PV&XIdIqvsI75mpmj|Nd&2PEvJg<QaTO~$w4s@=!;+OSxKYOYF0l%!UTpoZ*
zd5=`b>^Eo#>YVP>k>3`Ycv%{M&LqYGF%Z+(5UCT%Z5Lmf%U4lSyXY->BOF)R){}R&
z_d|tO6zs!lwn?h9dJSAW68eY*;IR_4#<QkbSx!M1kxv7(#F2RO&5&wFbc!;~hIQe3
z?t&|Z`s5%WE8wEgDTrBx1nU3|h$bmLkz|%OP%P0vllJ`V;Oq5s8^3+%vx^72y`0<d
z^#d1`SLTkdmr|wCgjq%JOc_ at zrDC0N(<EOO$ZD2lg}hP%|Ab$^&wq&Hud}UXS=66_
zpMDco^jmPgdf-Ti92|_qAWo7WSEdLKMEt<h;KOn^Ez-rSK at EO^Eb)eyh0nSwkNuwe
zUdZO6&mgfn%Nw8!E3gLiS$%K}N0k?CK{Or1gln+KEDOj%=OndcpfGdL{L(--2n;+4
za}hnD;6bW<G;iGGvtLTN_S=)k<*}J@7xGyne(?7=DN5s7`z^6o#MQm7vCg&P!s{<A
zg4=uH4Os|o6B~y?WJC?xv$?r!PTu1q`o`rAVsHW>0gpT0!6ygWT6j$p3zh%#hyRDD
zf$y_|1ue7%WQS~i4EdrFUq1kRx&*wRO*xKd|20;i)4;p!|L<6VW;Bu`pgY?!>@h2S
z=&S2_ye2=6=b?Rv4eklCGDkYHZv814{SSD*0iE9*F42u8X*~(6Edkq at A_WdDQs5AE
z%6QasQ(~d|sx79J?s$vS))gRTZRn8#Q_>!h0waM6{es2>WGdizDGKY|0Bf(WKUaA!
zFYn1EZ41(Au>n#$fU`W*HzCm;WZ1(Z+R;*VYH<Qc8$CK>S-Za6|81N=U!f7pFjn`}
zx{Nh3TTdW+ZUMs;i%g%^k3hQ)mV2nDFiG(mf>tf-LqS<rSy*Xh>y;%dt!yEE$tk<L
zELmw~CzXXdk$q at Bk{T8yoG{2hQ!W?P{{|QbgoaP0h3 at rXNV;)Gp#luc^Xak3HR at FV
z&zXJnrP=!)xaRjBy`m)V&z1x%lMlSxzVr58yzsAB;Jj{a={@Jry6nXW(Sz=Y22{fy
z!?4TMs=tVYxDcPwqe~)er1OkL#(B}1Bq5A^W-v|lMVxWpaa$o8p6<)B?Y5ClrFra#
zZo<#9)x-M-y4a}It31raO@y&G!Cm297zHiFX%q;t0i{QwP+KyouvGZVaUKvEI8F&?
zzMp)-0{j>%>M!!Yg19?3m*s6?QJc2TMP2>i%K#UA`+Y5{s1Lr%;Z3?P?Yny8!#y`3
z<0aIi+2k|eK|=g?Q^T~*dBD5qJZO<b7F*0~rG{wn+Ys{v3e_nKp$t3CNaX64SppLs
z#4=>B<9{ZP|5W@D3+g-gM&6BqZ?Gi(SD$foVb~^&MJq_k>Az$@<NI27W2{dv;8uP_
zCmNcmSI#y~_4gnRW1r#GS&&9TK~X8Yn6r>V!xjSRA*M79*L20CpkT#p(n_U8I|t}&
zlPJIenUH=6rD{k&sOq>-y(%6d00Vao7b2bNTYB(s#e}}?*>!3LCQNDCZwSrl+qf~8
z#VEO)V_IL)bx-NM95-ed4ee8Mvv=<%-H1E+x44t5EO*j^Y12((^M#bfg;b-ps}_w4
z*XY=2Y1qEw(S^~(rqR2jaW4y_Z{mwu98Cm?CT@+cN8cVCJqbUo9*>5l9~LA=r&@0-
zpqd8q0(Cxs!#s1iDB&(5BBZ7mFY2<7IW_18caOZh1mi_rJ`4IzSy6&5;R8!7$B at yt
zxAtHam@Ovf@98vTbkFMSwY$Kh$?%V-gGVE9U&pGx+I<DqBGMD(vGAx)2O-vV`~gaD
zg|zt>)&c-Y!<#3pg-IAexEVK-cvlnq8sNg~TzI9we3Qi-`26#O{5ifmGHlhR1~p%A
z=^rT_VWGW74(kCu)>GcUB=d+Yuj6m>ySF8{9$P+_&{mW$=-2+$uA)Z=Y-h(7?39oe
z<DY@F5Eia3nJlpYU4cEd?O;!bOT;~Bcc$<?7}>a)F66bJ0kQDt5KZdnY8o;J7Js>Y
z7q1+JqJ{$?ZP&Iatz*l14`t7?tiw_XH{hYh)>yF{a)xefX`En554w?x+#p9S5>{7p
z;yb#YQIC5eK!NnEbdYElP})2}8vXi(=ElBE at nxF;ULX%grRFSNyQZeOnfmP<%RjZu
z&s?w|m!&Dk_&=5@n#!@P9XmA3c$M(%{m8R_mSt?Q*>p)M_T;sk41-bdmM|45hy?on
zp38UTaxem!X-_`ns~GGc at ww1kBN3&IqwXT{RBdB2R`slwrH7RTH)gno=3qAZLXko?
zaYGqlK#E|9KvxPYT8nLBnVu((k>8wrXGirkb?DJctYBF8VN=db=+_?;#h={x at Op<g
z-so`cq>}XH>+!Q^O;8e^d_8gItcglFNVE4aUtkxu6N5cCOr3%(w^-;_ozX2dN|rt7
zmtA#)i#?d`a+G%ugxu5o01=(lcaRZm-}T7{AHLD${FZ!{%R05~J~*$}TW|D2#KxWM
z`f$mTlP>AHJE8Z;F at 2;f?&LmWM)sDzwn at d;!O2CA2;|nIsMnD|O#%btl0DK$kpEvX
z=imS#fDjxv8BCJ)CKb(7q#ae(E&z~`W;0^tWMUa7BX}5MC<w!X^=^V*0VFMh*<9-I
z7hfFY6^|d!V-4^!q~B0sL%XC;IC=&l_{v`9hu!b-mq+*PHW8LI>i3I(ajeB0lO)>=
zHO3T|6I`qFR1#3SN%{-D`Iq451W!pQX0(dAms+z#yNErY3zg|ELV1|Z2d19UhKB&L
zrN#c^>DaW4hfSNxB$;4)sUBFLNQ|&CXY85GvGWI3x)h=J_MtstjQiUU)eYOq<m>Rh
zGXQ|qFJMV)ifumv!uRCctSCVEGSxdzkk_jj=I(&o#B9sa?`a)0Y<b%$RW?<^T0~QM
z?6kbjlks>FuctutoS7O}MwkqNuml4O1EE9f1-7Q7P+{Or`Vtrz8wmBA6S$jFM3gmB
z1Cbcoml9Zyet2-;Bz&7d20nq}??9HB@|Dn4h8IG)IYVNrk=h3%VI$CwARyswwb|a9
z`X#Wc(9Tk_M!mMjgNiSDl<>6d5^O(j0VS;K=!-lkAELd_P39w1 at tUl)yEFyuxWTKD
zG?FM9qud7l{NRJNH at OKqpLpXj|B6q0V+H<VR4!Wmn63qMl^P)42P at E86VQ$uo)#K$
z%d@s0S(ANQ^4}pTr`<U$^9(z{o6~;*26$6yM(Ya1x)QNOKSUGE>(bBef3q(1Mu1I-
zbs1us))n~dbtOBcUq<Fm7=4uG<*=j2cxje0xl}3k9KS^Wg&|wOUVH;dHp%uebo`&7
zS}5$92^!VJf^@1`(3H=VcH-XY-iK9DhD(BR1XP94DW=3L<O}@bfD0ImK|e#Hgs2Kw
zhoCT$801^T%WO8A!P1Gq%LK94@Vx~E(#xQ=^oHEwaT}fD>=2r-xQe!GG(Q4={5EJF
z3Ovmu)2?)yi(Tn2{;#{T1yPy~4weh`n+95tIshO+10y^PP at D^DWXLl&MjND!B|F(D
z1i)lEp>g80#$H7D@?-6+3Z$`cH#{fCD)7rt12gn9LxW{UJ)ButV1-7hF&f$z(YgSS
z%ohScKR}DR*F!YonDp$1%KXdFhR}K31k*-x30ncY7mqO_`5tFRveAXcPLh(669_e$
zOnGvA1+Wd9!%4;~4Wb|31A=tIiuc0{{AaG2qU6i>{;0^uD5^Urh();%%N4)4%%`w1
z3#Uj4?ks6k#Q1r90(<xJ7t(b1IQAoPC&Hn2s(_4!tvy^VquJWXsD^oVY6-X+g<P;F
zbg+emJJm8_0%~6dvxjI)I4`phizJ>jg+!55q~VU(4~kM~Mjuiz-pz(%+-LkU<&)3&
zH}Y|Q>-=dcPZ~Zq-7nWsckW1ut at k;|=NvfqnS<Tr@qV9Q*tKWzd!gw0blCUZrF*2e
zSYzxC03n}YILC6(cA09DR!NX#R1ye#LO(}gQtK})hguH8znm`oEkqD8V0=gQwF?1)
zp8rNr5&$tO`v7iC5hslH&ak_aOot2uHACD(gvD^C&pL5BY3Vd;&AUUhy}`#Sd-)je
zxkuy&%)q%z;o`X2n7#en1CjWjAWd_R^B#Sod$}|+l8#=kh(njCyRh>`oOwK=-^<h(
z4IKgQPV}6)CE#gEgb15WCxnGWmPm>2hN~s~L{tC+Jd7xZ3yq3UUJk0j2#65RQECpt
z7+5+)bJNX)d73$pe;3RlO_v&Tq at 1LS|6-9A?+^B{$nITzd2P63<=Bm<_(YnVxmz#_
zXwrr^mbW{nV}?Qv*hLjn)9Aidq`bS$RXW90RdZb|Hj)r=L=2ccMsiB6fPtX+U2E5c
zlA`MZAWfzQ3u<6hbdIV@*#=i7`0ABnD<NT1Q7fUXL3R;>|A>2OI93WlDhUZFoQ*`S
z4RvJCph;E&&Kf7{t>UDst7q`@tP%<V-Wxt;7XSNJ+Po>T&Bx8#v_5Tm4nMYhI;(di
zYb_u4c(qb-(B$mPYM+f&p4&C$)c5i`{Tc>NOyAmL+*HPvjAcIdY<ZKX-yG=k3g|P+
zQBBZijapTs57r(F`k?;KOdnn9ds*UX`iNSa3Wyq3s8<1I(D4d|^d+al?g|t&tT3qp
zq7aGRTcUbshmsysF6F<IEt$wh-mI46eTr&SO-d+W6WO**8p1zj$)Eh%yVIpVKB@tl
zwE%`=ea&Hw>hT|!&t#!jHKNJBjoM1fx6f%dx_rakOLl8S%h=itM3bsjZMt60mdoly
zL)2RD*Axsb8H*`ViY8wn4p1I|$I_r48B0QI=%UA~Ez#=Ga17K4t=nh>klo}H7kXS|
z*p>7Qr80mdMRcK3njBQo5N^Q)RRv7i9J+a`A1T^WuyU}wlO&l?SrH-1<A3*UavwNw
zL6O6h^9K%m;!||b=W}V>zj`-G{`{BUA2I(YLzwO1J^l!;ljuX523tE2c!x5$TZ)Eh
z!R}EQhesXLBDSsbj&AL!Q6+_e69o%9sxXS!Bx-jQ8Pic at Oh=J19aWFsFO0fL at 0%=U
zOBo5#!|*?lr4k5nZ=^Nd4lgUNrWoRoltgVy^$;tXmda(^IsO}&w2oh&xIR#NJ7k0C
zUaCh~Q=h!F@=%^Mc7JBp9{3g!utvYOpTvF}tCA_pEi|cq#v)LqzwmCBIYh%2s7M1k
z1~Gt6GSK>wP8a~Nic_UV at d?Z)b$XwwtbYAiK4Cj|USOl9yeHSo8pC$fZuev?G#)ys
zU>$zIUj)-SOqg&X!*n`ZVoKhcU1k?eu5oV-b49Ep6d6jbmx)*jyB1k`b<3Si62kq<
z#?}tvm*(-QM_KKjJ*C*+OD*xKR;6ek)C{CYpW at -lV@DdS#bn!Ss=dN<Bq8B5K9m1N
zEQRDMkO_#=2f@(u3Ij5iPylAA3dC at +vLKt7@N1LPgKT2LuMM*Uq-0nW4oP$&LP)k|
zNV@Wv^Y3!M=f5!)a3}X$CLdouFE?|;#>Ke{vd|;%YrZJqy-AqN%M!Y>@@!P>s4<Cr
zA;03h#e5UG^^E1e-t2sX-;3?tvmEpLmiE=Dcot?r?8m+mZ5=&*R;VOR?{8%Z3+d4<
z`T=YWz8iF)H75+a7P~X)N{VV=%%RwmfJb^J8G|9HBAzxV`j(`pcKRYWH}A^V2Xgma
zks9|HHKJE;_hCbO<Vwk(v5Mt}436WMzYe<0FP9xKFqS1>=VN2f?O1dnu6wum3!4_7
zE!UfF>Z;<qj=|1XfzzmOYi8T5mT2CB&I!u8hEUVZJkm;7eme7d4PJyqY~sLR@|Exx
z84^@VnS$pKXNC+?<H7`_GLb;_uF4lEqVoI&*YhbD^{7_y4ij^w1i8{KxYAP8+Qxg&
z2f1Fl;A)0{)DRGIUIgN`p5ZWNP(T}wM3Nr2@&>S=O+&-A4x8a19M##zNDNbxQ%O-M
z*A8E~a(IZEmgX9gds(@Bw8v12aTQD%-ebt%o_#B|nQ|zt)X>S3232T!yg#qsP+r~X
zMf>gtU%5a0;=$`3JHGzoIjQ*<zpYt4%YAC@%2^ZGPTp?ZoK<tBS~GLliAm+!lpGRR
ze$c?+*P{8tHnscpt}!wW6n_`7vF-NX&~vaJ>brKTzRj8w#bGzr1`<5T)zm|AVP@)g
zRu>lprUk`Ox&Vs%mK0!J;7pAu0p*$u0G}EgDx^z!L2K9?`1Onnu8b5{l?$#aDQabd
zz*T}=sTW+SDe8;Hdl^BlMi*R-Qm`ghQ#0N5h at qA2AgZX7O{dJre<ORtt@-&|FLX&+
z)qO*OlE3w}&Tk<wm&=B9d$n`tSGQMg{ce7>Qo|-s8vI=IgYWPL4dgYQUQ}MXc7oq5
zxVp4O^9zSrje=|0GbivH<7bWObNAOiBWF%z@e^jUGn3+8^BYVw4{1||Pj6MPub{aE
zE=Noi>8d!yGp49c4MU17Y_f;e7SU`8r^dkzh|~FA4{1=8z*#~RI3jaogzg{%s9rAl
zf-5-%GkM4!EJtH$v_4T4$l7)#5*@9~>*ZGOlf?9Rj0wO+e|G$}sG(e$@%>x>dmQ%1
z0RtvZB#9-WvCt1O at QB`59hygkI6;DE_m-5oB at inL_jMlB1F_`gq4d$=BQ7&ym!^mx
zL^Z^>*e1&9T}dfwoIwCMVQ`HSyaf1<L0jh8{(lJG7G=tnWxjXYe+%L=zX1a#Po~)C
zNIp$Dg4kzi)W4U~yLD@(y*N+(aJ>;D$Ud}p!NHpLg?O!DS>XWTqf^5V0&VLdOrdj9
z<*?(I`J?&Fw)SrpClyHh*R4Hwdi4Z8jSVcr+800E!{T!Iqg!is@}e&ue!`z9SYb~-
zMdaiE(+c$i_ at 7p2$z)-LTI&=7J|^HoYS`t-RB3(go-amUnzQ%8?ghQ3ty(ta9fS*p
z#IU3*3CsVP{ms^1bFc1?-Fi(X+KqrcvCv)@x-Qg)o=?JV)lF4U!R}0y6G9U+?Bai_
zjMq{}7XK3e`oPw2_|2DC;yHe!F-thI=?+V5%5Sk_JI8NF#CraY@jKW%J0|X6EqLD@
z<F=#EZy#lIak9M#sIOp{$4E1K*#@5zo}3Y%92xHR-^`?Fw#l9_k^MA~UB(KFhT0>G
zdtxR*D0Sw=3VqNp5`jiTh6Q*UchXFcK=0f5qaX`u1VF8vl<2EbSK^}vPntZeVwJ(O
zM%5nJzo3aDeBhw+0YgGkYDw=#w+%-B+}`#G-p<hh=;e~4Kd&9IGh$~*zDTFL_udy<
z+OLnFJA%+o?v41_O#Nr6OYa5j3qPBjk(?Ut{;lPUY`;CC!HBuzZ9b2q`6+h5z8ilv
z3f5A(ts(l7zGdrg8)tL9oZ@Pm;_8}0YLeUrJ&uSXHLqlOnJgyP%R%ZZ#(N06v=tGE
zwn6Hf#@o1>U4{4AHAwAaybWdlJVwBK- at rP>ge(u^;Dw2eM0-2IRNyJ=x1RnjgZGS|
z!!H?sf!NaRGyK?yA*t1>rm`C&I(Hd4G`(u&)TSdlcNsAx{jF4f7VqI%)hem(*7^^+
zTaNJj3csQMU^<@A?^a1w{%F^?Z@a1)>DBn%c76N2UOf%Zd|&U=w_WwLjH>Q`=)3fc
z-`0LEqpCg1`x~a8d%chLyEviByayYAo*@d5z5(F2Qiu}*tbw`huJ{xe+Loe>FggVS
zPaKknrs#r2)GkHAw)Gw#019Y26N$ScC!=LD%dm$h;_jr|Sw>={ojL8viE^@xI{(N}
zr_59Q#&vC6t0W$zvi__k-~42xKi|vVlvhct{!9E?(H|1ef0-p!3SQFSL%D14l7^>h
z2cQXBH)VYQ>MYjs;F1%%H+hjB*atz&U;3zMe(>^_Kay at stnthI%cAcjez*y%1Wn<|
zdkqzNuMyA4dkHf{-<Pm$^%q{{0OQu2{VFL!WZvwT-~TD~g=-c6Kc~J>U-p at n`m&eG
zE+{BkuP44F+g8XgsuK)Ath1e}Xk889f9j|LVXNy~(2+0bQz42K;dPsK;%n2J at EOJy
zZV95ZB3R>$bV8kp+0sDp#Mj8c#NB=cQt5jvw9mWm%o(+nl}_BWh_7WGyT3eW5Otui
zyM8~LH)M97<ryrxL8mFJCHLvFV_}m^wz=pFmH_WL6dX2EEu-~4LR?j!bZNnaSd_O8
ze=(R4K9wqoLR!@~h?3`OfcQdAh{?qQ`pvM@v8^y|KcWF>Y9ubdc`zIH7Fkn?=|6bT
zpf`q}9-6z&cj(9732m>{?mg(u8dC7DSrdDYe}1C-Z~N6Tb4_#Fl85){)17q7dYnyy
z(}w$$?wyqENwZtrW?kP<6xo2CVvPxyqeRK{R3$-nH_Vql%C(nrJpR at 0Vr}T}FM@m1
z&^`(p1)9MF?6t%jyy_HT0^^|ZhdqB*ZpeM}*rQwxnapbAZ|>nYl?mV{>NrqB)K7Vf
zZY>UyH%w^l8zF~@qDv?Plo1<lHu-->3_~m+6%8!Wk;c=rg|Zv*)Nvee5mx)p+tQ+i
z?9=o6MgMW0!VCEW3|YLBdGhSpFWlX*JlZ|~UOom#JOV5A^UP5%p$R98g{KFz;gOk$
zfME at yngT0@9c0Q+Vx@*vq^%UgIH*;zXrGBtJ}p(Q%l!x5XQjGtA6aek7&Uu{sM_JT
zdC{frA59Nm9KU?*qOH6v#R-_Gq at ->aVYcpCU`zy@^-F1yINlQ at N$NGm17UO{K;|jI
z>uidns7xF42Q>||oMub-N@#chwJ-8TKnYOS1LZS5gdP2juWz%YZ$UxdB`sMa#M4{3
zC29V{hi;@2+>@BC*e1P4t6c%EB}{6VZM-Rrr(0-(3G^4<1=4E00S?W&ME}ejYLQ9(
zGwGS9dnQ2n^v2)-z_E;$ODgl#Vlx+D#5`*okdxTPoBRVd`Yyj)V@a>Pyk1KxGC%>`
z-2D+dcjAOLmha0i*(cb;OUQK15mM1JBhhl-o^2G<9(1=~^>I+m3K?3c3`JOy9!xn@
zTvQ_=0(1bW0J^Wl8tDY6O+|-xd7-O-CrYc9v7-C#FQoSOr1_wAsciSV(iC?+H>@qu
zuVo@=9blWR(b|%j66 at 4yZQ%@koi0hQju7<@qWl5RKx?f|f(jt0aAKH=^GV8>7ca`B
z|GoI=nR&dI^!hk9;2YkST at -aMXzIvm@*x$zVD->F&S{{szwK>p^}6LIgtLXO#l9%|
zW#MavEFmb&kT8JzVJr%{LlcjSO9=3t5QUTk?I+!k>$s=pyUQVYR9707{rE?kHi?x8
znP~3^iuxlTWSAp55yhJH7tdZ3yhd$V=$?TnJ}aaVHuV^2TF7oP#9{*()tj*0^t>29
zLvJ8DP0wg2`v$W~4ETrt%Z6I8-=r#ht|&y2da*B;7j at B!QHaVee$$C*hQNpSRf7dS
zoF>$Wy;*9;EtyL_OMz;6fhPlG5DL(UzY>K_DQE=JjhH;>{S4tO1a$Ezvv?k>_2riv
zJT0F?NJr7yA)_5s=~4=75ApN?^JqX3gV2vcPbrIC>8eF#k;1gX+Tns5!h+Ur!m^@!
zm=T|#wL at G}Evs2v3z7ZT+DELM9CmSewF%>otlg*;<w);CWG8L-CVFw)vWbhg at Uq_8
z%b~@$?d#!HSFqKztyD{8JWm1v)vC{#V+y(uk3|qAR)68u=fWWZq)#AoVId+`Xd*h4
zvMG)TeyQvY2&<7&WwK<FDhn|L{BZ^E_s|PoP4&Kll`WdOl_ysi!xyyzUf^ajyw0%}
zVT~ZfHH~P~8h3`<*I(K@f2YcC=ZySp8XL9b-torIkDb={=%@of4DQ``tb5{^k=^@_
z?a^&qnPyPR4NvXd!^&;g#IJ0=$1nMJW8vGsTj8F^KXu<-!~g0MC8cHm(!A-NdH?J=
z{~6jJNVa#-CuJ38W|apvd%dbut4`E|U8-keEjLjB4|HBIs0V?pr)EJ!fi(aT5&p9R
zKn-h^E?u&hG-^axGJPtjXGGT3a>?cCO#qJ!a_dACBnuI7R#5~k2EhxzFg(mj1dK#n
zH7yAl3uTo$chrKp-%L8avRUVCv#M4u*tKA;I=OW>9+=ZxZZ at VdEBQjhr7UDit#d43
z&924I7d-G=&w}61zx&Vm?%%BrXWPCSF+6YNlr{6l(LG7y>l~T5GNHCkHdpX7JS>Ya
z^;$I6D-CW#zz>#y3>Sm~p=JXtfD#JOP2_OUbWXAhs22*`0Yv at i0`?xCB%LqF4%zwS
zD|@Ld#<HHgk0u;iV-#kK<;U$2xW}Tp$J5T!k_FHq%4F!7<T#cDyq5{SBU4p7G!Srt
z+IqsV2Jc#`^IxS?|FGZlCWmY)`b^%Cl~wdmukHbrfa(z4St4z%RmCF-NuOBEDT{I!
zWFrT`sSOQ)+(c*(WHXFW<m<2!>dk^>h)#&;*h2XT(Z{s|o3(c7*f9kK!zL|#bRYe>
zc#Rd)SWW(!f4p>n8n=}5|MkZ!SJ@>x#i_8zub}!X0_$^lEK*vZ1#DokO}*?LsP%D&
zm1k-qjHP;vx_Hl;0Gq)oVU}x4m9OMAZoABN7}a3Am$iEt<zS({Gv4?AbU#YM_J1D5
zO7WjdU<^C0Z8m6k1RO?rGrK8oCR{>YaOuktV%Q7uwQB|VcJowJs+$*;eI7IqmGjLm
z$o<6A*5)vp=(snfU%sjJeampSAem6F_-Ff3<Pgguuhdh;+;zH$m^EGgSutvTEo!V*
z7#Evj67zJ57>NO28<*P%3KFv!wTQUY@G*eCp;G8b5{`IDy%QrK9U~nMTn7poO7c(q
zTfTSs=Ik~d=DU~Cc+jFLH$L6FIi>z*?pxBay*t*Nh+wa>=Q at R+UjOFAuzf6cJ>S5O
z4eWgV at 3sr7q|0x{U-_Q95nH%{J`O$L)s_YZ1;qv$z6u#2z2CgWk at fB`#$TXGVvq}t
zDU5-!VYnZ3lYwCI727m)g&L{-3e<_Y&d6TQrfoK|E@rG@%srC7Vy7bii*HFsuk(9j
zMrZa4oA%L=&ws|C?!B`=7(8?)zcM5{M2hj58OGutm;GRRX0<6F4?<g6cgwY>7k9iU
zf3hJnU>*(cwr${FDW8IiBG6wj+{59XpsB_7vzXi7oobE2sC6A=00k?(qWbAPHu#<V
zmQ)sD3->yS$?>dbLBabH`_}yk+4z5ckQOeK&Ya=*z-tSnq3)Rx{Ikb!6K`i1eEi90
zjMlpX4NR%4Zv^oA{+{)EY$r>O*m5bovJ9DgOhnEJg=JSv4|oR4I<znphm=BZ6ygnv
zdRpZ$1h1jxAzMV59oZw4+w{0)$ahaVdA{e)A=Mu3+N9Ea@!7Yep0VHV>wJ1b=;9ZC
zn7vri=Zw=n_F$?u2i?PMTfAQRza*a})FYx*dKs@*VL&aQZ($c2ktK#@#Y))GU}+NO
zWO>GA?F*D*B_LJq<2z~&J+!8WV)~Wc^pHXi^&~coj53oVhUzsKmn15QbpqcfXMhV)
zOGNfN8zz04zhhNxn$z8&sXGlV-`s<w#hyvsecqD3bWg%Iv16Lj{iis&9JPc=mI`Ll
zO$Cbzvh3Jv3~M_cj74i36l;eqFWscsV1d}jz8q;cJr`TV8)DnqJ~h&aof;=fMux>$
zHt#et(z{g{^|?E;Yo`SU*A8pg6eT8FZMimD)M;mZ-;$E4;G86*d4lrWo(UkJuXl*D
z*tIUD^+2R`!l*%fIvA5ogp at GSr8pQ8g4B?RWMh0fZWq!67*>F;Fxn91$@<h}>o8>&
zuT4?5pYqO4erlfb;}7*Y$~3K9sf>e+w)Ii{L`>4;jOqLE7W;spMsy0IUA0T1;0LoD
z{Y2a!FgnA;cLBg*WUBDWQ at n<Znz(8T>Lm06OA_!2>2g{3D0u+m1FrnU|F|{%+Nk_h
z<7aKyyatUo*G%Lw0e3z;`D4FhQ--ZrJZAO$EaJX?e56tVM-zo^;C`Nt(g=Ukl at oFf
z4ETRtaw%gnCYCJfI$(}HW66YllS{g1%DosL_Qj9<;f-mR#^tS<IBz5Wcr85eQ9L;4
zo6{%n^gcdyXwK5Htej64CIHrggrM1ENj4XPA4%-Sj`}ty+iiPbv*Eih;x;YAev)i=
zTZ`}RoX_aH-(Xsx5Bilk7#cEy4?Dn0=!L&RJ-^zhidM@Dt6i_7v{(yzzz38Nfnxxh
zVf~pxY0%9^;RJ~UG+ZcGo-lrp4#<i?E6W>BxNqL(e;40k at 9=eV*X7KXhf8%HxB30-
z8O%PZC_TSy@{}Bgl>v0_z{o&&!Lc|Kr-nF#xvP&E7nefkEU(6KVhki~3=;X4J5d7o
zU9FZ5qT665AT()x<$+#J4Mtz2jGD=*kr8kv6B22`Sg+LNd;T|L-?9D$9S0ASmHK%R
zDYEkYNp!?sJAX~~`wu_<@D~{yxXYx)<JWI_DQnQlA6HAyXYm|`?s?DRJB~pPLd{jO
zO;w{RSE1EK1-UAEEFhsb^{N|-bSni1vy>h{@m6Zs<x=z)N}0*728%b<DD8VV5 at T=^
zxjlv_Y3kA7hyd&o+s%lGaH12XgA&(Lx at WctSrN%Szdd!Zf3DP})vPQ<X|T7<bCNXn
z%B<g84ZN0rTRQXFx*1Cr&D_$~j_wQ?^fgs#`J_RYG17&jd6!x5GrhO{Gfl}mfM)fq
z`t+MOb{)?|qhe;OS^S;-OPp!4t%n*U&{LX}5SFKYmU@Yb$|{J^G6F^>VSy;KVKD1G
z7~{>3wHg&qzlXh2gVgl2c-%VD$j*pRvILDomJ$@1G&EnClgZB_k1^nW(J$BRZ5xc3
zjt%EUR+E*#&hVpwGe$~d*GS{1K3T&qe*9zimw8c})}5sDxrZ-zJUrRWFZr;R^~Wq^
z*kASH at 01^L>yl9;7HHa^2o~r%%nMI5BLAv0fFcHJWCam8K<`eIiwp1HKvJoRVbt>r
zRjUrqPH=u;S4R>iSSBPSiyZ at Qo9x+gq;yB>GGvsjG~8FE6jSaTnla0H`J9wLZqUS$
z{E35=I(7ZX0p-h%(#l!OH&37Z!np_Xkf}{pFJm2=zutM7yd`^e^E8m(_8Pw=|A}mF
zJnX<YVdr|M>R1j>3^FJGi<SG|9$r+?o)DycFGpWT22ne+AoH0CSW|M%j0D<ZQo`<S
z8&{$W$ZstE$A{nFP_}hz+5gpm0k!4DqouJ~Y~uUOo+W?w@wYu2^GDm3bo;1&)8T{C
zb}V>z9`WB;enw0oiKAV3>JUA%frL2GkI2|XyeA-KW<h9M!@<>A(7Fqp1CE0jk7ffo
zQ50a=MZyVo?WaHaPb~TCf$fhSWh=V3?AOk}PpWj49m<l{smtU(ZKthkmj1~rOS*kh
zx9Nz9@$bLA59@!a_^xvZ?oR@`#@S3WD=ejxaRl$t1&6mT71p=u7Fq4rIJ34@O9#XW
z4nygQB#C-q>d%f at D`eGqB!-wdpOmg7^C)u{UAfB}t*2xuQoTG#3;Cy$RrenJcT?Rb
zJG+iJcO?Ha5)=3M)etFfADvA-p!RCv?!;qnI){<^wZx6|sT)Eud&9X15SjLdXtyCD
z;7ysVR5c=ouw&3n*qgT$+SnS&ern5`lq^^0hfUScyWea*a6C!Dh-$Jl at Yt9S_Ohqz
zq2s%bJ-9<X+h)&%6+etUv<ExdR(!`f6sJ|z_JJA}LpNKKb{5;tGMGaT;)?BgyYB!o
zZbVpAbSuPPA}<=qtTHL;{W36MyObdVpB`fIa^K)Glgf~RU#1XW)ExSW*7Q(JKe3x0
zQt+@ZuuN<jSpN0OAYEWMo20jOIjL(0c<yA)Q~xC8r_Rl%FHw|+hodV=()i1>ckK7U
z+~5M~7@%7_dkvP(<sH1nx_{DV>yxR<p~Ebh41BWrL6L>fhAnZ%Wo#SNXn~*BC}PQB
zT5h6Vf?-%<#Mw@GU@7Wgj9K4z+*wHD>@jj3Hoo(wlWcq^+4#=g^t>29LvMfz^elyb
zWw3LS6Wcbi3`T$&jt%10p6rgkWr1Nc>kUX-xe<4uVa4Ozw^|OI0M1ZJUHou(%U&N(
zzcBQZbI11_Ded2}^J3dQV}ItqDF+XO2BTmpQ{8GgTN5?h(*uI|+#*JGdxny#CPxG|
zjRF2vqdkcnJ32E1E=s^H0cs|wFaiPI1qVn{?neG-skDTZ*mQlyi__Qdywu$_blx&q
zPR~mUWzzT?;VW6GT`Xufi&@=q_Dh_9#;1NcQd&NJMd98~oo0Ug4%XeP_%1qbv;yMp
zB{kGk|7^i@>K49<xT@Vxhjbb~3Qbq7nUR*9DwG$(7_bp*>X>X=zVvF>H>EHn at Rd`$
zuJZ?@zM7NUwQ`TyQ&(=DBDHyA+^}Wsmv3V={*KA|XKurVwXW}t-Ej?TOenr%Z-N_F
z3Z2>PrYR(rP=z=3 at U#~~kyNCNjl6>zAbI90LXsnfDsDxH*JMgcW}GJ~lX;o9UYWkc
zr(s at nC7Dd5?FW6}XRIk|+I5(8fejLuf$X7!C^lsOkGr=HkLp_chWFZg&rF24p>dKT
zZ73mxB1MY?Ns7C>26riLA$UR|5L^qBjZUBx_ZANImKG|Ux<gNa%+C9}*Ou8sIep&e
zy}rLbxH6NOtXXrfweEGh2+d2sk&ojJ5R8#e!)P#|{|$^0<S`(U=7EvKSW_-Q2=D9C
zGId?=wqqwlepRYgVDh)FeTRKeL~OnL=zs}g!IHd#Gnd!D^^5Fs0mAjLYLx;*tDxs*
zV%2IU-SToinJ4W@86w@yj<Wauyvl)B*?Uj2m=c^swGExmE_=^;3>7D}C&WT7uS^L-
ziAaGl!~GzU^S*nm>rLmz8)tLW0`&<3&BCWFWR;nH&BNtq&#vBm?v3piE)*SQtEa5a
zpD^$Akoy-)JJ;AX=)$LiiYE@qT|8;xOmVX~3)1-*Ia|DH`v9?T0pO_=@5CvKlluc{
zIj}mycxAg)4l!|MvBzPl5tP&$5s8bI##T+ZaJQTK`5q~&l_IZYO(N9utbLE^o$B>D
zNjg|%7*+yM+}jQt?6Y2P6PL+3QoPWd<$Wx)dAkvfSt%~FUDe*3FAN^c-wRMjN?W0~
zB@0aj-%^R$g{Hm&y!DNIB{57)5K~1I+;_s@!8^eBm0x62>|xOI;?Q)OLLMw!2bzXr
z^W`cM5As8MFbWu~%>sw_l1}uqhqau&X7Pl<SAYdI<Ve;6l`o#2htq1BNATq-EffG4
z2JsAj2D^R3uwK$}L}^8~oV#-6+<})dPojFC)f0|lo@f&uN-wmTp?<KZStbd$=M3v1
zxdy2BTg_fQY2YC8?q>p)AsiOOD8ik{j|IoU&jDf~+UE2c-nNfu7uKwt-LlcSev4=?
zhsrOCC$SSrY@`ny*K8zf%Fm&`94RiuY)NcX8G3&dYlz(y0qMKqK;ch78Y0wC{J71W
zvIcC>)lenqX^6>6i|X`TSvI#I+#aRvg|Up!u$bb0>botMY;f%u`EDcrJmO!R5<vG(
z1hw*~3Tngxyi{5)-5B)X*?|FwW3ezXY>KsBATet>Q5{)~NRXAqY%RGtVN76?)TP+b
zE{Mmfh3^hCa=E?yO<rHeg-ZhvPDu?bqsgTRc*Bclk&VgZYw<v1zYx+H!o5MEu(ZMr
z6UTl02%rG*B7n(JCD&4i7pvo04*e9f^{9)rUhT^Y^CUkG{f3f1Y4?_jQDVGwohm>n
zet{IYE+8VM$j_rnXaSy7 at eIXLmyYS#W8CQ8y~ap#m+Vo!Dt8$@rYmq{ZRtZPMfex&
zB%#pP9YQE`aU8+>@;m1H$=dt$cd09Ig$YSwv~W{Aj@*YJ0T!YnGHmM_3^MX=?%gX!
zZ-4=VOYB`hOCvyEC<?Zz at Tzb^5!-hl8YuGCA9zGqIUb+mkG1)uk)z@z9vXgfC%gm*
zW7239iUT9G8#Z}Vi;2DEj7?DzL#g?kGciR;D#vp;5y6R!&1$lF<6t7F>3LNx*!j{e
zXU$+|BYZqqY2o<`<f3-wE8I8QQHq>Hm at zl>@}1SAVD)`w$t(&5vd92T+8T^LHm_Ik
zNn8FVrSG1X-!?OE-k#laH)OWSo4d~)uzTM8-8<*c-N%Lv6)z7x+%=<R=Ps>UbYs`M
zwxZu!c6rjIYetJMoikc?WrODJojP^TvKI69PMNZMnKXUgzI}^ZzP4}ovXY8T<Z(?(
z(lZAQ=#-H;a6re5%t3?O<F|nw#P8b;>ffnVyTOAx&`FLIHi)s(QJht<04k5jLK{CD
zifcxiS{i&3(M-%yKW51}ViIt2ei&PT&vg^>#X#e86y1$5Z|u56<Pd$B(Sqh1maKlf
zf{Cgs9aX1?sngjCmWxl;6GltJ;k%I#CkV<1^r`V;I<{>)t#>rRP1LKlxKcc6+bKCH
zC|q2Lo62c~DJBNs`Vjon#AV`NwqoF62gT2lr{|?*aLbZmVBub=a6L4KlNr1~Zod%>
z>Sr1*u at oG4YzRbu93^G6KaS2oQ{sJ6&gkm<Z2PA#RWGUj?BA|Y?sueEf~E&(+E7%i
zuY!#1IE(Dyg~x{Crc}{d4Oa1rZug2-BF7Q;h7poi;kIEsMnF(YITjQV6Oj at j^-@C3
z7<jq_m8gM<66<j_Au%iQ7H$Bp8O}5=D%=t0fLj~_Xj(EZEC2Bd21lL>a#f at VwFtpR
zpRp%@wSBIpDDB%NZ!54rymI>Uw`PwSHrLL2s(WSDfql^I^&SNUzVrI}yfSm~%;T4T
zey?c6jMrx#pSc)vMGS~QZO~b&OOOC6Qw802JldUcBHZ3!yf9qYp5rEaN^lw8zXfG#
z!jbrdH0$t~aIqIHEHMQ(QQkb1_$U(4tfuoAB&YEBfM8u;)M$h**dSom;*x`NwF(rg
zTS`(CX~{~mFZJ=mmO<iz{Q{0G9!5&Fr|<)B9Y{8dOHQz*ro~lGO=f8cwk~(^@0@y8
z?SJND{5u0LYVKPl{aC$zpNQc%)c4djlP8P!hDrzW*XFBb*|+qAUq#tnBFZJV)~;Qf
zf2`!2EyRs?Bfm+)&QV9pZAyZc-;@vx{-JH4mo&;Z(BM&C89tnq8P*WfNd&8ag>!<B
zdb)Tz1x`?dZYgo$T#$`Rv3P%APap)VlmY?P5_y76vh++wCrq@4cJSap)IuP~Ib55d
zh~y5msn=>ZPN>CNHJ>pnH~gE+S6yuCwV%Rsi?2QDe`eXTMf0yq``!H-H!ib2eEm{!
z%keiwH`))KIfj;akJZ&VdHE|uP=`IGKl%h?cajjRM0~4 at +=)NGgcnu#t`WbfhN{46
zLS5mwwq<-{3^e2QAB-1X3X&OXNNnB6_B2ZAp)s<CZLmIoRY7)>sieO(@EW;dz`1IK
zN|X)>6a`-bbHi2kMowgCAkg)BR86?0)C%UkQ)>lN;^a%wdYhy;q!Ix09Ef3&5+wek
zU04Y<HSjl%ed%$w)bzNpgs7<W%Jjfelan3tBGzH#+41X&Q@&GwpKxfgIzQ*oMD@@6
zDaTfgKQo$jUcB`ymY9A-owhSw{Yz@Nv%31o)vZjGn3C_h*egB9n)Ql`ijv-AchtoE
zbNOmC`;va}E4{<+lw3PU|I}Sol}nLPXWkGizB*<MVeN9%A=wP=E&w-vpaoG4+~ic*
zcwy*J{HB{`VUJ%=v4!ZOI*`&5+oJ^ead%k|@hGj>1~7}eTS<t5l@3opK(YAH9@#Z$
zjQXaFEpf4z#|~jGaVLtHoqbE)&f3hL!l>)OlS|@f?voQ|iHF?n&Rr0RiuZvASP at h_
z0eS8b7CWQYo#UK{NK=9 at zb6S^R2+s2kI{<mR2g7JFr7CZL6u at azhh!zQer^AV?Fd6
z0wTgZ;D^Wc@^WIrp3OrW62Lcg3KWVOqk0xM2sSX}RdtShWaosz;ZvskrG8~s at XwD`
z`eXQ_@KK|86xrEqbq<>&Ryuz>zAzf<Vwo9BW->dAiP at HL{nX4Q$b$j3wo%MXIaoOo
zKzB}PC&<sqxGF|U1=K@}XGKYTjwe_^=*muHV~+`m!HKbnSeqvWL8BW=b|w0ArQk}j
zm1yZ6HWhaZX*WuC9Bfswaj;cc2vlq^iF~LtVu$dY0-p|Dtwf5cqDSm0-ho7o0h~Di
zE5NGtU7`vSq%%k15+&H<STc5sN^8|*aqttcoo6oLpIENwhuS}$m&9}TN2tqLGub^#
zT-VUOk99lXej;Xc+^p`Q{0^x`UhljI^Rx46R?qvB9k10puN%AHnJ}g*BBB1m&XpGi
zYkTI!@J*Hm#_TZyk(!P0N)9ru&zm@4smSc*qOH{=6TsufiQZyW4v^Ud7LmZn?~xvt
zjt)6^kgomMDCFu3`JsP)%6|IF{WE(sb5n%-%@@S58h@(aq(}v}&{rpJR*twYlo5x`
zWFvZRKJ7!@3}Z`wmdj%e(L#>425ycu&fO>zqlATU0Wl0c*3gC<NKb7^EUQ96I8A7Q
zi8hjG8y%B(LNnwST!#R@LYx~85bK1O+Y{WQMBBKTH=3?^gdN^{<gGZ;($nyR%bgzK
zh`>)s?a+`kxxBbi{m-GSkq_|i%oF at OeN~bM-c~Q~3KhGLQO0b*59_9uj#tKSz>oWL
zkp(l~u2^v|NNZ at q03T~lMX<!z@q2DiDMPX2RLYB;n!G{q;}if=u*Y~tE5x;rAejqQ
z2VrJNf|U|sZ6cW*LaDxiSo#gKxx~$DT)A6Bm&6=*UDDV%HAnsA_?5fN7VEAhUW-#7
zest*~tHegdUj==o8%k0E)l?m&osyU4YPzWH63-GxO9%^V2g2F;t?`2Z<rm`z!?6Wm
zAR_*Xvw_Z!qlH%?#=M<a1kqPR_Ay$9A(u;UxfLgts6}tx#6Pjz_vk?U=y#CVOtpx0
z-?(j0E}V;D>Q5|e^O6Gb<Daj;{|#Hhl2$LDUBEzfrXhQN9(2SCTtj?GIIdKzTaR=J
z+-mSwJc4=Rv5qeJ@G~&bvNF6ql}Ww<(6~bqV)pz<kUv&6ux?;RpwtV0P(n;4&I#48
ztocf*Ad!LSNbL&EQ8`zsj8eMJ$~t+*FIJTiUPzD1sMO{yOPsY+lsbOgoL7hNRMWJ1
zMFP`cM=n=LK2Q>4xz-q)losWs0@|SYh<oy<PuseA`qWKJTQzCiHnVYqHY|8Iv+voh
zmh4+<Xn?AHn0R@Z96fsFo+T~j?q4;gZrj1_TeTb1rmh<bAlCwSFSDB(-yd9)0?r^d
zMH&t}P!xPi1C=l>N)NQfh$P?$Wcc6>n}%X9!+Eba0)a7s6I+tZfG`k;o<bEH><#vW
zG*s^=qc$xYIFCh3MliNRym9V!|IuUnu!03s^4{4$BKy;BLuw=qks`kTp`tTEOjItt
zv8M7_HFre+*K@=HogPk4Zr=trBbhSH9G7fopgRVGPCW-dN{l8MgKGl2@d$AYkA{?-
z4D?9$!WH9%S3YMvhMASYVhsnPgW^CavKS#`!4w6?OwEuY+rvGt;7<f9=~V%gxXQ7>
zDkUkFP=js`dXF3DPqr8h0VuGV>;q7hakEg4KGm at UCBBBZCl<3hCtaI17jN&=xnnQZ
zr&Gs1>Zu#<L$2#$$K!0%3bDb)(<it0Dkwg=)z*K+@V<lkjTkZD$wqnflhtrR<;r7m
z=0l`Bxen+=8Q4j6I>EJ0WA&yQO)@TbVc;(cC at mnS6cxdj*g5K9 at i!2m<ij+7HjhEI
z2NwnC1|KKm3^;(c96T7Sg`i672 at 6Bp8)yYYG~%Ssm)Ba}J$vQK?Cz at nnjUM}Tw9zv
zi7inli{;d at EZ6-FyQ0=%S6(F<G9S{{8hBc$&QO0v)ane0o(e-=);TV@lN46ok7o{)
zPl0r3oP-lDjxh6;5}^$NL5MWpq(}msiO6#aU}%qm363N!26aC!BuS1uesa}=MJxZB
zzu>F+l3SSk`h^4P%Dib}#qqtz6)?6Y7ljFz{ju_8^~C6DQq^hd4=j2t^plS02Y=YM
zQAlR*mwqBH#PbZ{-=v|iJ5o5eunjDIXzyS<g1>wSYuZ{G!FK8+;1I?f12CeMZ3q7H
zvEU=-@)3x*=5y at hBf8;R+<e5RLX18lRv*zD&!R9K-nN?PmRf=LN{!HZrNSVP09vYt
zwHv+`^iUvg4|Hfn68LYxaf>Gz7vCbx!BJ!lJSH*x1&XXgU>%P-4i~Yl<ku3k1Px9F
z(~=RBTff(?x`D%X^?hw)@QV}jn1jVk`5Z0R{$j${%eQP<x?+o5u~1UmHe3Gj)OvXl
zHPm+M=$fb04|cMIKLhWu;QW(?!TWAL`m{k%_u(XY?Jcb)-v_2Uz&*%WK?rT4I*ikt
z=XqtB+9(1aKk|K-yS7WN|Gw>~$6<D|X}zNUA at Aq6CXI}#d@j={4bI_-Sb?e8i8u&L
z!l#39pFyxpV~jjeOd5g8jSHT<F7|V8k;|1_7MqKW-5L40;tlck%6xYdeBT~%ne+p^
z9TLume;LQ-NV<t$oEI19hmtp?rsA?Ze5xS`VLqVr5$Y?F?%~j5eE%_A4MfTlw?V-2
zGNNg5Vhy(cP4|~M4_&Mtt0=EUl>da+0aJfOTU^IItcXfN_2CP1G<cct15^<zEgoy>
z{P@`d5?BR9L<oZ@_wC>%`Qh&49uwR at i`Wmzu!^}@XALsJ!W;|mI0os}fb?7+AQ^EK
zLAR-<r>7Cl*&}#+9W?Zdh(;WE?KH>rS$CJL`Z?>>A6G8<e9o-9i&y>hYSu5S-(iuD
zvUV*V=c?sjcHHW$g}ZG3*|lK&sWjini7T at f?-Ya9lnSd(6dgX6%Y?kLYnZV5_~9a#
zdiIZiqC2OyCs!SCrr#Zx&%wKI?un_|?_%H2PoSfLQ*AA-K&^@hp at Aam*~5f^T$?p`
zDi_MAgMq~v0M~#g!V`h}X5erd6+Y7Rx(GIC$L5#nhQ1KDv1n`kj%6#?J~m?8p72!x
zMYeMLPDiZp{}eZT5GyPDOAi1+H6cf-s72U8S|YCvq at f@QG7Y#GmFf)u3$uVA>7pRX
zM4tFwa5j<wQHmD7 at Z%$E1}V1*__(EXpJ8t&YojN`j?~*~R0t8aQ=C=ps3@YQ5g-Q1
z$w^fD%;9-A%Jc5v8uOa8&&Y4mZsFh|3)(f=+AOolyc(>=T)eriS=NHVjNZ-9XpeWL
z1*vt#gmy7=PLGP|5F<9Le?PUJn9w$E&YPoR+9lvMQH6YAqx6aVKCH&+0>!jjlt~B(
z5PqOQ;t`q$GEgkJG0<Fsh{XZ_;y}y5x~OGI7%7j?8l_L%KdtC9@*wkH2ak-pq0i*=
z>fN>MD9e3N&sA8umD%fE-&#tv`(;6tUXx#jHW(}PYb3n%I_O+p>3a8MM8oi#?p3~x
z(-<%@ShVq3P$KD${3<>hFN`-o`<Z)^@mWqK4E4nFSzrT7K1g>!8*H$x*HL^lJBbfb
zLG5e*ZWSlqX%|RjR($vqmQKmMzA`(t94#KQbJUS&4fq}MAj=|<CD~m?{1ELAesljW
z1`@PKh23nU{1DVP6j?3``G|zdaw1?EElw3vp<PLMueyc48IW at -O)tRPA?L$(i=!bI
zUKoi(_<53(!|LSZh*Q~FwIMr8=i0Nh59=cQ0@@dA@ut!T<&-0h<SZFBVLn%l7fnax
z#bGVQqRg!=N6qfprpIA|87LzEiCdc_WDvI$GDP&W1H{m-q__EPE{AAUA6{7qWZtYT
z!S~whRvT;aO0M9ctHxgpftsH>S1d_e!Ikrnc;Y0U_#2X_Ks>4Q0VF6Gn at xIvPNigq
zj>Fbm+rR(jo7wwgW{#aa?6c3rR>j5A{@k8NuQk|IbHs?=xh0*j?~K+deTVf#qVf#?
ze(pgt7GUl_5iG-+<qam>W)`039a-kj)kU6Wmy{5%fu?DQM5Ape|6OB7n=9XZ<J!NU
zohcf`s<~_f!f%fNYyfrA8z&k(evbAWFxqPZMzYoxXi)N9GNAO@b1s@2JIfbiyx>g8
zcu^G+d{yH`6}+fIdrr$tz>5Uq1y>H}1-yQ79v)Qr76}dBXF}~_{(c(Br!r`@el{dp
z(D{6`e}D15Mh*Q^(z^F&E48B<H+k6SpS#p-d9}-hEf{m~bjW(&Vg1Kx$2NQ<9h<bD
zADwn~d|#eJ%^(iC*GBLlVPl2QVNuV~IuHkJ34KoD>xko~F<cPu1p%vJoOzBH_9_qd
zKxX}CFHt{D@_-qK92erfKK*>P<5sh+i_;F;bMhsfXl;=2H}d;8URxVqj&b6=Pl2&E
zuP|`a`T|QIETxsLeSb*Lx0*V*?aV7M8t!-}PeXXhRRLd4QgU*91XoqG>qZHO at _LV>
z;^M^ygUcQVCLb>B^=bEOULJ~E7E{r|K6}y^%g%n|^h?zdV1PBkhHUSM9>;A2mlD~w
z9q6mJ)D}3b7RFL}=9RJ3*7!?n<3%I9Xk@(bx}4SVm+Exdt-WZ7x4{`S1Wdn$R~f-Z
zR=G>5TfGrUb9I9)HF}-ZgOyt5MF1nfPU%)>^63yQ0u~^TAzC!*kA+9dJlzXA6mn3=
zNKI~@L<(G@tD!x?1dwXayfztbpSDdV%|CT&aR077V=6}%zt(@yxZy0~K!<N#bFYkb
z*_MqPHhZl4&Cbj(4)yI^{n|#?Rod%WTi^`Zl_$>4?KEy;*XH$xWzT5SW^~sUO`E;k
zd1{wchkEYp+iO&(7Ogwf?>HfA!HMY6?Pu(~e7>y!y4OP;=lI!n5dMhruok2X4G at 9Q
z3YEAz3*Aw}p+9)+aACAC301jf33G*o$QoV2PAkE=D`{_nIbXtK1w?KHlWdB|`uy=_
z{@9#9X7I->{@8^-_TZ2G_~QWnID|ir;*Z(<aWa3L&L3y<$NBtmF at IbRe%(M*K$_#c
zo0E1vtCdtunKm5{b0_0rc3nL9HE2$dq6`c-emMhSN~HoXx@42Z14Eoy6f9~e#Y#lh
z82%X)Vm99-hE&<}3NjE}p;c1o%Diw3WucW?o<BASR_dGjv$H|4bHptt)`x{+SLz2l
zN8WM{z2zKu%h~W2(97BQma}=Vv+pfu&s)x}x16nSDH)zmcfaNAeaqP&sERV6!OnI7
zKUjIy^Igbqo#c5nIoOF!nilL_aLYM8*om#073^Gc%Q-vPx%`%MZm=^4G)yzYAyyvv
z7a0{6LKY~5pyMHdDscmS4V#>nu1Bd;+(Z|Gk}FW((Dy5ZArvPe0wo)P^eiH^W?HS}
zFjDIDAFkl(zlYIZk#xlj+bEu?DmC{J<5_y?wSj}@h_i+cnj<zn)qh;anze4JxfzWc
zWn?sI)JiJuIjnuxQN4y%sr~4}*bBDjE|2+Z6id5c`;pZiQ_^$Rkp9<Mq`L=;aQB2l
z<mdVQRIf>O>-Q at 8Z7l!ih#$lMvG at 8<ozi<^pBYnntB1wPt=e{s4QT%SM%MC`cI{rt
zrU%$$7q;v5YKI=RtCw75^{$N_driG)k71Q2?A<#-{c3N?vArGI%TmS!{_jy8ZGP!O
zR+VV=-I7_4OClc4(w-n=_H@7R_|RuOB)p1{a}#mH+8+)H3YM!KmeEqB+F`$-D7hL%
zh{0tHl_VNSjmm0>jI0<fRU=EQCicYz>qfQ!f!lDPtHea}-(sLf_)0b;Q1L>!I6MbD
z9omVaVr~@t^5h?-AGxgbR!QTMW^zz;Vn)y1>sA(u*TuTkUaHfpN6NKp*ILW6D9iTt
zB`=n|DBb+6Zr!rUi!$cqEt{QMt5K~!^&3Mp+~;m1`)#J`jrAZm-G&rxM-_R_d%3i3
z*v?E37(5o9=ubtE$S(r?gFz37BHebME*2ZPD@%E{mXA-M3=T;<-NE^qL8lJJj@8!Y
z_L5u-PmwhN24yomjuA-5TFGk)L9!FoO-|SB$sD)4&-rTQXRQ3J`>S)mdQEg4%2{!+
zC}-IrF?mzza`ncOz=D$Hiyyu2=luNMg+uo~2cIfErnY87pf8mn`-yH6;vkX2YVi(0
zLMQ`EFAk(K0v+`%*R(V?gzd|#S1T~O>5}}1dz_&K0q4HM4h~T_usC4 at Fe8*(Ww;TQ
z#41LHa+2 at kii_0^@V1J=Jo#hsw*3}pbR1P+G9tSg1q3-_94U^5j!Z`%hrJh(C_mG5
zPX-9C*3vI9J%;FkA&vYgG9)FuVR&Y^t(P-|yE2gD0_R!<&xff9z2{YhV6FVLX1~|l
zh==i4L@ts!B_R?a-rl-!(bn}DEn8&dpnl)v>hU!?^nInqYt<8K*berYG^tPRMvZDS
zzl>q6Q<EZEkH90X?=|_Jcny_m190Yp{-4&TQFX4BHwx0iei}w(M)Zjo6XECuO+g6?
zr)pA4g+M)C+iNAs$#i)V(uod2{}!)poi~5$>Wo&ew7JSMniM)#u6?x`vpIW at 8{aGK
z<p#AwX2@kL)ob6bNzHl=WUUeWcg1`5rGP&~==1*sKV&ro?r>!r at S~d&bxz6*>Jv03
z2=IfchTJNL6Ql at ZZ^+@{6z}a>w0KW`W~&yNeK+hFY;*P*H?B{5gNA9JTmo#v<gcaX
z_V;j8%R_G_+~GK;If@(k2H9imDfWg4k5y!eOxfk2Czb`-QA9iUSKAGDSVO-|xWhD*
z0_Fw81f&Es49E=V69CKuKh>5%R(}uPK;n$@yb3p@%VbAF<<#_NppVpi-^Gi2+4J+x
z_ibEz^mCPJx9!`g>WrkATJqPMH$S-la_<%|R0?a@zxneO^_Bf-zloJa2>tlVY|xGo
zHDHUerP$y)mpQ#L7KGcOEnN|9Jdn)+8y)yJ$pctVU`$|2V8g)7z&?RkPXO%s4l4Dl
zga=Z!B)XD-nx#T#wxWs-aPX<qtZ}^@+nj|N^_l!Nn(x?W%#+K<HSO88RlO#T`ltla
zTfT{Nm<wqA;8isZPcqI`+wgMG@5`D%YUguIJ07e><cC9l_JN{8p`GObeOc%%<UIDn
zs^P6n@skkZtwU-9(U+QE+_&!ni_cecmtVOo-`u>J**h^#Q%1{Q$X)I0o`#2Sp~iKN
z1wq|U5#S)iw~F{aF{Lc_RC9XarCkHpmj^lX%{->jBYeV_z$yp02xDQY;CqL__|^F=
z{^H(!m!$YBS95INs*kp8VMnM^#{UO*NTYH8?GAy?1p}hszu%$CsZrKDr0#k>8wt;r
zO9X1YMP9+y+v~xqg7|XH4kHttHpAnqji at KNI@;@X7%*n>+_rBJRS1I(C0ovc^~6tT
zZsBBJRZ$I1o0}T&Lh+S3Uq=AE$07%+PH*D-5a2}HiD#*~`>)Y&vb($3N2lDE*s9Ac
zO8rjGc`}|IWNvU3s94f3`1U}^_|d{p?fW at nHoo7myC_itzv+lncngsVM`EH<qR?mJ
zZqzS$vV{Mkc^i)~gqy=+4`kMEC8QrCnuMq**LfTe6G`2{b*HD~gr#i#zdrBNb-;vA
zt|DpLK7QH{>R;cFoN at mrIcNLES7*hQT{md+K_-T(3;K7ukkhHd9vf+jeM^6pYsdxQ
z4s8_4k`>0oZj9v^j(w*;m+cXJV=>u+GkS8m37>f<NaE5cdBDX5v#FdW`=-k^!b|>j
zPyKEBH~BaI6XpudnYCdz+mg2^C!9?^`3{1ZrQSOpEq?dp+zHp;9RB9bG4pWZ*mF4s
zd+rCHB6?9o at R$dY0$BcG`(e%chYWeXpYXYb3vm(zbuDIkDI2!!$#O}(sy^DhqxjOB
z$K{*_e{N}8qJAJfDA|7NOrtYzW7h}+4gwl~p`-To9LJ39GJO)TQu(JScl}|zj-dw+
z+CeUT%DCmRjT0_v(fAaRFLiPMD2^z(BSpJ6is53Qij44_4Jzj1P;3MgzCz=Fx&xew
zC^1x=&>H|RhYa^h at h@!cMvc-C_a4!Q{h<cXmqB`D@Cg1YrvXzc34IhlOGYKPix^8c
zFh!}v10fKrsRUHwr9Z*1ET|2nu{iRng}3R!CZ{MNPjXr?V$2A4OtmRJ4YIAA*5tdq
zpVfOJ^Z)(I?-foYJ>0U(Re0=G^&9rD^&L8}swLeKSeAV1=*RC|?s)pcjGtE$^n^cM
z`H6LS#))~Y!MMC!_%_Z`@fBzpGhnMMt8Aye^w=hmN<pSK2$pzEmAks!J6tZYr;Gir
z2Ff{Zw<r+=RO;eYKp=Tp(v6KXzLd|E%3dul#!!5!TIsJ+Tl^Y?s<yVLBg~Bt8{ttD
ztqr}vs|<uk&*bJ2arMdfiq3snJa$~q(Q;17#e$2+ck~`Ss*kZpUGQCHU^ntC-uM!3
z0yJJ2o^L+P2&F`sbV}Y-5HUqhe*6`%nPS%wHpMOb?1MEf*IbtKl^Q3qFGR-*brH7c
z{grH^`;nVhXQR7?+$?B#&piVQ<BKh*41|Gp45_}U*s`S5m52MGuf{eRzXqZn01Kj+
zR&6@I(_ZT^UKnT17sZ!run<!-LdXy;O>cke$6rwuSeR!+!oWPj at XV&68RCN9PK2rB
z7OUgKPGFnIO1a=3tHg+s?$S2*FX|Y;<-ti`>Ih5*Vt$SWG+z5{pa&mjUNX@}5`*I4
zPlP#)b{fGPa at P~??ZClaC!~=jYXQI-X%z8IqW0Z!hbcm~xgu%xt3k4jh!wAUV0;ZE
zP)iy&D7+=$4yPL|a7s^?RfuwU897iw_Q!AU<6=hL|Bi);#}8~=f5 at 4)X|I at w#KC{D
zn#}Ps3V_v8Z<X3E-TvTWlk*?Gds(OT6|h587p1M at r`1J)7+glD^&Bu`n+%0m at z<(s
zgWy`I9Dwz(DgcZ9(U@pLWg~WsHFdFfZ~XrK2kN)1{EWqmC#zpjyGl9d@}7OC^M?=Y
zJDFERDXlGc!On$2Pi(9BXmL!C5Xr1SN5{kQ444euQM6|2P%^C44z_TQClfG%qenR?
z5QO+8>ZaAC#zRE(c-#{BlH4hK at JBP$N41-Ot=^yg?fUOo#PI{0)*g@#=5N|3Chq#9
zdEuDL0qjNQ^YUIMEmhxEAK5S6zUk_8?jv(QD`P*AttIr+D~UM~he2Lif}P{N0lRU*
z_+L!C57I;@_$xh|i)?uAQunH?iS=+!!tGuZ9m=H>n5e|=>US=- at BMFnV6m6nU;jCA
z$--H`l5b7UDc<*WH#OQ%gehv^XxxjYpn0ERuPeh&%E90!XahjA9E(_yM+HG1hAs{Z
zw1vGO^v08`?S%CwmTW-YK_f5}CmR-Gy)A*qo}5Tk>;SryFjf7e^Z7sCy70)AGj;63
z>8y^k^B<RQs=pM!zI at hPRyC_@Mz#KjbCoNb`j6<A)wpZcpv67b?7hBi at VFjW37kxl
z8#~WyhSOGi$qD9G!?)$xR`?T*O at txGt&Vl6<E8f at eUy<NY`~loaEJXcX9yxNWJ_&9
zFS_PMJPf*K@$=DD;7TG@IMhryh*Nz0uiJl0$8#6V%LU1JaO~4}k4fPr52n60d%9Ex
z-;CHHxdXo0M|e>?7q5%RW7>>EGB^^V)^x)Zr3QdNri$gum1m7Esp)U1>6ckz at 1D|#
zC*v_G=0{4E?Kk`y3W^;VM%|yD at iks6<DO6BJ52`-ZM0EVj>6`MM%uNf0RDv4N2Q0Q
zhS39HLX%e#{SWyE{k8K!K$%M?)DI4-C5)*L-cUb0&XTekNs~(!*2|IxJsB^pv)M{U
zXz;?oBEN`V{RLg7 at X`UiXsK}o9G&@2kwPLc&Q0vvlO&LlK=DP&GFM16ehJX9Y0t5k
zJL*KX;g0&g`q3TaWRCw7^-2!APrHw at lj<vCYq1IKU;rSh2#CxR@`A|ggbavuAh0F)
zKH^@fVmPaFOKtB`yWSEr#HMaPbr{<w{y_7$06yQt{JyC9?OBR(00ur=kXg~I5F-4?
z;~zt#Q%&(FzMaN%=UIwaR5C=&caN2(<mJtfrfir>{3@&Tp;#crVqH<huXvO+sTfA*
z0=~xxS>mu*`Bktds{t$^!hD5gYG|)p=#!~mO9c6u#De^sWt-T>WjXm`!O{itviUN5
zW!u36g)6onJW${`bL8;3qu2owQGSskpxYx#ix7=tx&ea8jAR?v`_R@%GQS&&K9}ws
zX_ZsiF9jd50ij~Im*z~wtT;SzKh_y3bX0sS_4jxrk1 at F+16Y=WDV6XDZhn&jdAl^q
z`t^JxJSY at S5{F%ej>rY+1Re|;9wf$z``vq4^-+!Lw{B6eoB6yxqN9`Lj%4Krzw%;(
zHZP4^JA3rd5t*w1-OD(I*8yFUFjiZ$7g$D>5Jf0QfXpCU%dt7aN}-VK8-T}Q!UK*$
z2Tx(VNuD>ulepc3@&-L`R!WN1Zh_7}U<w7~-1x3H<U}m1ZY_oK%X~X#v~1Y?rPc-8
zXDr#&yve$Ki|6m!oY}N_t4&?m^#(PbubWz>|MaOt(|eSwk~@6ntP#)Gub(<rBpgEy
zmv|B<>IX@&m9{?4Z;Wj>FACFg?h&9WnsAaWiP0u2KK}gn2Jk^ZGk66MY9E)3Ta_B(
z5VJ;%C{UN!+0?D-{JSBn+T6W+2a9$!lEqcT4)?$g?*<GN$l69&#SzJXz|0AQIxG8{
zt~5sg$1xORDQCi?*c?3n7zT6LY+x}AGyg=kYKkNX3&X8*=vxUJKB`q1d+f-ri3YdZ
zBO7PT$t_$sb+>(^-)oIqw##T$kIiGN=kKeuWa^Anvjz=l-R$MI2=)<$&VYNr6b-2;
zMrfx&&au>h+>jsW#F+_+CA=GMC8M1g;<ziAudspes#u_;A|>gPDHGL75}ylEA4Ihr
zH)+w9`O9{H{`RcYwjmuFHfYyEik>Ha+IH3C39s+UOTG2AO&wi5Hojx0%o%Nnf>8m;
zo&5e<y(<R11_dK6N;ZK}1RK$5B9Yv?BJNbT?_#~wdg2K2r27?d&0LU0ArpJC1-B%O
z$A+WR5}hMwP{!=0Au7?%^Ggy_j@?cCC9xE#O2>i{V-iy+XQ>n!Oh at Pys^mm at KoAqj
zK%|t3N~8+}fuWN5H~1Np81ofTINq at q!T#7XUBZ#H%O4&Ik%oNec*Yhko4l-0{k1To
z(d4|Dv+|a-d%0ojHnZ9+PjA>TyI~`->7?{}^M+5II=o503h9%EOq!(DtyQ;ft+cvz
z*{^9eUZ_*2XFB0PtI|i}I;=Ys>(=Ep&ZCW0o19n-;`O{l7*tW5BSi#tfQQvWsVQLE
zTnB}Wc<>slf`F_qCMqJ>=18kqJGrJ2#vUHY{(NQ7q at 3-qE!iZg<I~sApWeG_X8n3?
zGFYR=OJ_|j+_|=aIxw8g?!UQ3{SH|jn>KC-T*yTPtiMDNupv}Oz!DUNuOly-zk9wo
zgW_H#VYA#w9Bm(m--2*U$7!d_FDAuFa1(7KU(H)I#v!A_0tN0LYba)leQ2TF*VrgT
zGy66~3_u at Y40_)CP%8$f1mmd$i!WVQkG~l#vz++~0KpyMFeo6l!s>WqMQ`32H+Nvm
zW&`>)Z#l42YGOi-8VQwa+Q*&vuzA1Uty=W#{Ypa37Za0e)&l&|&}~BC1+0RIgl0mn
zwvr_H`IC%@4;}(VbtaN at Pdwa<#x+%ZB9jOM(W at iSha2GnQ;w_*EDVG_Gu at 2dP%5T#
zrWEVL2P2=bhWR%-*m|B<Nx@1J^A(nf)H2Pvm<%+HLQse9YSfV#2+dh{R2<`7OEuD!
zoZu;Y0Q8na^6IiN=ci=0sx|HSm3ML;<o&C(cgH&85B_#Cs|6e5u3xAA+Ig$r9y;=u
z3Co8KS-SN0QfYU`VdeVo>K#$FQI^Qo<#ycKcjL4UORJ`2%xFLSqJP1)@F#zj@0Fg>
zZCsm-#-g~h!}MugL%U3w(w%O=K*YIs)%~hE{pK9R*iTLcjTa_~A at bl!;u1-hQT%<m
zg&G&ZQiBkxjnxHPS&T!m$h6?l)Y!1}R4FWhS9J)ZzW4EVY3@k%_cLFAd4c(kjCT$n
z>vT_Cz3APR6<3c~xb8RgF=|2vQN>8L^e6Y1?yuQ{L+9C|#M9Tm!YYa&JAP$5#BJLB
zl(M|a6r~8tx|YbrtG~ISX%*%TkJ40d%F8p4RPl}C>>Xm5r;;Mh+0ewPG9->%FEGfp
z^5D2QHtwt#`0JCOKDUXDFV&Nl&sI0Hm$nt4^@U5E;9hP!bo<8r0k5c!H{~=aTl>JW
zDY*qR<};%2Xop~{1n+qn!!FO+w*fXMOvVeZlQ3;qn(=A|xnPbAu#dOHT%T%hiYH|a
z>b6>F1mf?B;}gn~)dhAJid+>Fiq4!_&)n35rqd6+2aS`rpn2IHO7N}5E{CK3O&LRH
z;P4qCSscD+Vu}f$!-t~?xV~kNHM#03P}q$*#l^E&y-(GJ?BJ*Dq3UlJN>-pERhav*
zwo~$B?3BM@?ejWdt}7TjWr($$r5S1#hyuwUicNd+6?8?<vKegLnKNa?0l&FNh;RNR
z9(A`y4DVENk-MHdLf;GNH`HhKwm1GS_5ztH1c6<9@-q}C>v^y&87 at P%^jEbSEB%@b
z+V-*~6WJSTfE&eT$kq at heP$bv_)k4|*2~rq53)$9S&FDt)P$`8aR_*XM;6!86GRU(
zZuNr1^E^I0A`CL#nqz<?GVBh#AG4XNXP6!+Ka+yltk#F?yVh;L<S{>-- at C5(u9x{?
z?t$QsKaDuI*kgj2yDRvMFT&2PB{Kw8Spx#fFR-Y at 3Vk(t&x<h_dYh?_206G60V_|S
z$F&TfHdv7*pB!FNxSNrAM_~=-J*Uw17;d>h9Y=(#qsB*iIxp{$#AQv*#1e(l9+glO
z$yNsi at k-|VW%@F<qfoYAKYIL{YiQqILuHw*We?)7kIB!E`mA~U)ah4$ym35xa_-XU
zw2nyJ9<pRb!Jf~Nk=JQ7*5Re>8bUKN54hwM%%4DUm7ri`C0Gi1j73<08Me_Ud`vjP
z0uazf8PT3yfSiv|0W6)$c6i?A!TKcPL!^#?Tumas_8)q5CDNleK2guwSTpsMOFczT
zOi(x7B7NPxe5!AgDW82drS(*C0 at g-$?*&+!O{l3bJLyT<5;=h|mT1x}7~MSgA6UhW
zZqfqxX_xqfY(<y|G~KY+NU#XhNAWT4iLsH(S(}?rXUuKtmo||owk7?FG)R^z!A=q<
zcX)D^U45fL`Eu%CVpBOs{j6tiH=&nlTPA5L#^_PSHAUkKOgs}Enx+V^_mRG0Hr2!D
zPge3unxm&KCZV7w0gTq07H9hh%d^x;jbUFf+q3P@?9qnN|6qZ(TDs~e4oe-kXYLnA
zL{m$2@Xdp_R`Vt&J3hUP{bE-ysb|WUBPX&nyeHD*B<e;cwZ<_~hJrt8GRtLn|6>HK
z;l|<7S3e^!JCb=u9`6%6M{@=Xj_?+h*|gkL81AiZMVJBNB>aTYbL)~nq=2UG$>Nfx
z^jkigp3hp5eUUt6%>b7}Xo!AyB$jBn;$^xt;P6^IsU;q`xUGYurQEF8ji~ct121_N
znREr;QATL0*aHX|wD0gT?iuzR3(tkgn#9L{%6t>YsK><ZC6n2!>LK_}b6JL1SM9T5
zB|FZJt=ypYAxwpgV8^$IfR02P*$K}!;0FbBoh1m-u;`EOLtZ4RI|ph2@^6vRpvYK|
z6(PHzklYU*DMy6MoT&3s=V_ at d*oN{THq;D3g0d9+Zx*cn^py*BQdsaeF4c!Me0`@>
zdslw`E;%yb@%6V$0!EJxcyi<ICjpb(N7au)#PPm)`5V^xx>xwECyI!*$j7jj2&y7r
z$pPb=XIwlkpcyZ`NI&Ox#NfgtZcInk98?vg#aRl=`w&%641tJ)@&VxPR7xN<1j|Sj
zzhx0F>GzL|KmOHL%)*P=$y7E1{+u`eP`@mz-eoc2tkUo3$$VX1 at x1sRpq&V4XMqpJ
z0a}M%$(kfc9%yd>Xo!;>w_?G8c|m3Du%|eS6QM<b6Qyq~Iid(diAMf4phbOCqW~II
zU1Zg!r6$3*LLRD!h+s;m5>GCkeXwBDft=au%ZCoL3g3LoDk?|S1_d#9-%dJw=Irsf
z8+T(1@(Nhp=$~1Fdgoz9_4+2te at rU<(N-P%T}~LGL>k?{u>vp3z^R_$J2aCBAR>53
zHpFTmGi-H){1kNra%U+A1tj<2lSb~~;xvpl(0#cz52wMFs+*)G>e{?b?|pgyUe4^9
za|+hG;3(Lje)!_83#U)#jhZrVYE7+!pb_g4EzDFTOBLB?#(F40{ydb+E7(Jc<ZsS!
zM#2kT7>S6MzLD9Hkd13Z!fL^PA8U1WLFo5L2uid>m2<F~X9kCWd-4eWXN8Asv$MC<
z#`4xx&xjE at e<)u$$74j2k<If2XA=cEXObfG8skJsjamadXUD)YgSv1mGo))La*jN9
zYJ|I33IHqNp?pKaQ!M^Z7^5w6AC?AZ9tCX#ijIVI#0|sP7J_A=p@DW}_9y>7uU1og
z2l=<nn_f?Tq3^4H;Zh(=JbTYwk421|KW{u6z4NjtJx~Yz^yfsjlgX!<uUHW(``PE!
zZW9Oe$p%*kg?9L2ouRNqEI|v`N`ykNLWVtyt9!Xf%yoLHZHzYnnE|6C4i!xmVfx}F
zj*!p{i=!nu3_^!R<i+lIC?Me|r~<Ei&$oco0H!ZHnOyTOS|zRCeFDsYv54{WXO0$^
ziV`hu2Ntb|ODJl$$^Cka<uMcRpV?mE)D2xIEY!{Gwt0+<xQAwyv1i{lUY7*63lAyr
zx?E9!nk;2>v6iU?bg|YHzW2FYJacxzdhjoPt*)Uq1RJ=>xK&HljWPrw at bFAU;yj#;
zNgS=bSmrbNxEKGlFl%ss61o5m-&J_ at o2sw5)Y&evg-hMY2Ejk)FFn+7LH5D7mjMUp
ztw?;2$U|cE5b?U(2DK-|_K+e)^5?W4 at vC5Jmg5F)dybnQupWR0oMs%KQTIw(=RU|n
z-ud^}7u9N#zj~fdRlO_yN4<Ap=Z-5P0m_e4?FMLHP!Gu80NNlx+d~P{phYSyd7{Bq
z2`jx~APju9KufkZh~b*o7Y=x6Vz6|>UTgL9)77K0`4pCcO$@_MqUijBDlJ+#0wqVT
ztAupI7sMv&z%n8EFLri+#5R=ptKqC8+MNF&^;EB at BneTyn;$s#twLu{(jqh|#Y;ux
zdWJz%ye=C at QiBT^wqL$R14)%&Zts~vp_57>)RH58gR_G{PCbVMKB0sKa{&+g#PtvE
z(&0u2<b9CWPOotX>w|Q0K=DBJ;`eN!y7?Zf-mSPBtA0=2#1?<g{#5<wM|@SRuS(2K
zKkm2PyGVv;0e|~@;L6W|FC_AcCfYi^FxJc-g-~fpJh1cXLrSt%geW=XNKA4{GFI?b
zGFEdp`4{><(Nq$Z;KXEXqf#-FYa*}<dR6%`JyeFDhm3#ZqVQyQQFcph$!F=z(XSQ%
zbn4xoM-Q1aR(-$6-Ud@$ws}(*uU1P7HvJ-Hb?ntObH&j;>pSOENnG7y^O5Q=bSvoG
zw{O?8wtO2_OfqgioUAXR9tEDKtgV=fwZ>t3xl6qc)AVj at -c7`YksSgzgzya~lNuuJ
zak<<ZT`n&0PbgWAYp@*OyA0n;(gUnhil0U9_0sXYgkZ1lHLrukNTn3QEOn%>J)2Ba
zp0wU)Tc_B;;V#!ew&1Rs#(wyP at BtbeVZufCLBa%ZP`Nh0pKTTSzeSsQS%WyR9LcR{
z;Vq<NW9S~DqlLy4)5GN2F7UvB9nNNQmEKtanqKrkovZFs?^D^;&0mVpk(dyVj1_;t
z69PSfSz;Z$=>M}NccvMIykg;^a9JG4LO_=^bPl6{gon?w at b}f;m9zFGWrf>&zSt^O
z9sGe<V~Y5G$t$f^`7 at t2wioM3TL_k=pj{N5;4i$Q`2OG0c~dR4+-Ra+B&70=pu{sl
z-J89E9-LXA?#1~;hII0dZ*2fA at h;zi=3dbrUP$7#1BPm*1ZeG;kkI5&3As|nuN1zR
zY)mL<Cf#+d+zuw^ngu53V&`gHJIk`w0x&r7MOrtg;3dB9OvR?Jn+Ubn8T`+j&H at Cd
z-x`18tEU~XU3z at M#TKKfChiRJHqPJpuG=T#+k=FziocGL|08$xvO4_NBOp^A74o$n
z1PA5v!O&fg-`1e9o(BgBT+9cz<O9G&@l at y^$NlxdcvP;?sE8NgFy&0|5C}g97bYop
z(kf(9teuxorOA_N;9sZ@q%qwD^a1(c>kDdC)k#Tt^Un=cUnR*A<$p$l<3dVNGrDe9
zPm#2!c0<JhI>8};H%SEKsNi!>h8 at i!J81pKe6%<_tixYlhZie0)}i=lDIQQ+0J&97
zv?^%0@*HxUZ%rL+$O^I#NeM0z7t}0GP~aeg2xVMQ7Z`E^6Ivt2sRB4sv@p#}Q{ly;
z4EoHAsFLm~RG=moR<7h5Rsrv5!McSA);-eKH`^EVu?BT(=f97&l%pYi*Fz_iApT*j
zKvPFxEa9#dM*=1P3A%R*{U_w`oJBd?9BN~B+O|D^R!*oZ>_0cYW+ApIU#`1}TRe5%
zn3JyjL+2;VJ^8MB_rb*Nj~2ailJ9%zukcZ6v4l$%S&JpK=qX;;*-L;k4uMM%2I<8`
zCvklS66jz~3&;*Y>y<*3ThV^+WnHLuAR^AsD-e;}(~O>(wVx5sX^((C?KAa<G9S5I
z9|f}TPo5RkS@CxjQlIMk8;kS~>;%STftr=@n-h*mL^yr`H<dzhJnQBdgp4oN5M7lJ
zt<-l&iUs!+=Fj6waK)@rU at GI8;OH+$+$StN3b!aei^WeHd*=%KmkZFn@NZT@{pD9N
zAgN&JRz*aN?p-xbs&Pa{#ViI&FGwV<1_)US)2rMQ<@2Jw27|^aaK{YQx-sP)(()0C
z0dtX;)e5*pJ_?93JkCE=T=b>ui!a0{?$cjtl35-slxiVyof!3iJsvQW6ZYvfK{OiU
zg(F at j9WPsoVFl-VXn1b;3sZ)P@}sVHGf+(vGAJdf^o`1<Bo+QN)?#2mc@>_d0$JN5
zXHZlLqF;id_yI&wy$7t03qpDUHZK`f9>9_|?4G7xc!r#c2+{foi0Sw&Q58F}4E(np
zb|P4qqd*=8%serT4#ew at cp1A4wDDeYfbTzE7>~_V5q!8&)@#Y$>*J0;u`wI7dCxF)
ztS(-O?bT++QZxyR&XS}*!l!UyisH|4Upq at L=IKS^yujzm1*dl*MDKW at l~O3si3u<Z
z=ucw_=e+WW6dz50C_^WM1oH^ZQ^_bkiMz^Jv#hoC+5CHIEeM6`*v4zK5IVl{>#sGr
zkp212J0vI43KGCcBJgV<GzGyDQ}49`FSWtA9{d0dY=qg1T&FW|lYnzRv;v=OA6fxD
zjkTf|Ov)bV1yow^4n=T-FdI(SykW)aA<=&TTc9n1P)K^1Z;G}Q`Tm2ghr9(VctKdJ
zgs0TN_mh#<=!WfuLY%W0Y{rWWnZkr96Ne#1AG)-MdBEIc(V3kvLRh-*M1)Z^gc2w6
zpoj{=N_CS^pa@rdGWzZy1RRcivua&>l7x_Ow3jBcWh89JQMF;mgn>e`_4s(#lI>_4
zed)n%Hf!ar%e8BM#cm!w@%FLaliaJnIM#poC0lsC`s@`}wLFv9bDPg!iTn1xkHTI_
z{(;GA>2Gz^Pe3f)>W!(dvFJJnwyWnMDH!piN$fU`+rd5;nyH^d-hq;&ceqKyEgTCB
z2!{O=mk8?-c*9TJLNE8*f4_x>xdvpCSGxBv!`;Y|KUZ>Lfv}u+pg<RuUpN%DBkc+b
zuQed{#XWl_JRK6NW-xyDEOD`b+V(r34uaj;*ISD8BIf_I;AkylN9mzR@e;UG*dj>+
zF=4DFp|;sU66 at 8CFeI%Ln`^QpS&>S1z<7iEWJvc>upP;k8o*xI$Tjb$u~7-u_6z<@
ziwPW8A6`n{+{LShJ&fSE_f(o3!v26^>rP#jTtkMg8!`yuew_cM^L|&0(Gj*_`V{|P
zfAWuq*bmr9M<!jBdf5MSoVj7+;5>;4l&p1oMf9u3nuNeZPYZk9#<tY;`UXw$$lnOD
zUw!#S!?u>{zDbgjSo*7N1SF-3sP8aLiKxsk4l);vtP8L6GA^nT7sycw1-;**THYR!
zzzMf*9M9?nfwUwD!1iv9O)*=$NAlk8)W)8><Ef23g&<NVdudgv`p&Ks8~O~kE&6W7
zUo5!f;MwDC7G=Fu|HS&-qjqt_!C)5uhySHLy(gDh^W$sk52|}^(V3X%RzH^_hn(9{
zVe39xUvJ2{!>~TeBZVfR#oRywkJ9BKz9i%5J at THmy;Lv3Dsz*JVM(e(G?_JQh?$}*
z??lZ{014M&(1YXPBoSNuhgA{h|G4Ha^;fC=+2d<gzSQ{4l2wQ8?jdi;1?s(D7H@d4
z1g%xrTvl|p<?1RaPky?zwL;+m!ju-JKf!*KgHsx%l(*!NdTEFpr3q8K46}NCIQrCa
z;R!8ZLbTt!jLS~&U(Z^UiZ;DB1}>V`()lSP5z<Z4#KZ1WQXNs<TlBAz54-KJKh0%Z
zGJf&ur3>fa0!~sl247sZ`}FfKbl==<;LzcHhVQg^umixMD+uE)`B8x=?(EU;ycnDz
zl3P6m<#_Vr3{;;4dn-rmtz33FVsG>`)?$1nb<fMs!$olL04{t(-Aji-J&aH;De0+X
zDpg*y$Jaf{?~R;Q`+dZvzDNXm+NG^lJaxo*Mw)#7z~NJLPDT_+GJ0ZGvUJGhHLnaT
zGs&~Pl2ODv$d0o3c<7~M;x}?nvy?`@F)W2OWSI=*4Fqx;h at PkjFl~qD6#{!L4qI$x
z5Ji-b)z;37&567k82lGy(e{IJX9f~NJw`*2f6!BS@gm}|5n5yk)wub4a0&A6)~ll>
zmaC5ROVk2P8isG#DQ(*<S|UuuJyUxHPaWPOKR<NK)ZkuI8yO)cv`0-~3*C$x87FL3
z!Yv+3UZ~dCBl9N4MR4~pC`}M3&5_`^*f?mJf at kfxk{)9zaSHGYP#`2M;W6|UTAN`b
zLsLQ<hGvG+MuuV|E#W07bnC%;IH#!XDB^6QNs@~TjjIWYMCMW24YG?uKc$`wu@bf_
zB2G$ChsH9o|IiAP#=QG5d}ChT#>j^^`!0&;HnmiUW%=qrwh8<7Tg7$JpWK)_YU+(U
zG3zR-zfK(m!cWxSfs2n@q1C$H^M6z8+Ss4UaN1TjUU*qU;`M+kE)K>TzFlC0R!&8v
zsM#Ze7%Y-8(+oO=4)qTOuajd*s!EC_%QCDvAPUbYcy0KDAw58f;03QoyWbU`cdtIh
zYQ1?nZ^K*Ldw1#ByI+U){nVpI^5mN<L}^{|iH%wL$Bu8ZbsIjcXZ!9$hx9Hv>YY^y
zFO at tP^pEP|&r<}gTe{(N<oC(g3qu-KBFk`k7x}cZ7|E4IJOWSrfg3^oG5#t34gF;_
zTlK%`k6rO7C*boCKEW%TxM5aB9%(g@?DZ;8hRY@*PS1Euh!c0HYVjHTV>d5;|J7;r
zGis9s at 8i7r+3NR4jvUGFmM>=A*t7Gx-0in1{RblD1-(^ZiLHgW#b8jzfl9dMbA<d%
zekR>>!=-y8c+n7)`9Yh3KlT6$q*wg;6F*f`0w&4XQ%3;!%_|I{xCIQA!0S*gC(=Rn
zv1`k<#$28Auk4^gSN6rLzqz(AKc3a;$kOd%=$4XY>t3 at 9?(@skchyqIkq`E%)%T-?
z7uD|k5fO0hgi1myMX+SAbD6~e+Pv2m4IbPWQUjzaM2vZvPk?Hm&#Bb1*l3|@6gr?H
zUt*&HYki!yDHlfHRi8}ybj`8fe4IYHLvuG4%$w4^_nraBQ;#ipwD6OI!xp{sR@^D-
zuh0W~jKm^HTotj$8Ygv@*CKHB8q0iJ4R8&0itn+ZDk^rF7gzD;PqfD#219%7p(jQ)
zCzKluNr3WUmUBv{a*OsJW8ax`dW>sp;FxPOu1{pHJxdR@?{FYzx0tl0BxkNz>#;Cp
z`SK_E_M(rru-`U(K=7-bWdVC!0hvNGl$hk_aMn~0->@fgR%rmwRYv0l7Y-=moV0l(
zU;>e)WSIbtTSPb|QhO7jA0F2cSt70cB8+sVsB{WgA at Ybu$`mG^h9!zx{d;|de_gsU
zCa6GsaIf=~mgx<*WUgB}=Ipu0u3gIxb?ETMik)K8pRDHEIVFL=sP6QdORLs&?s@Jt
zR_B4k`SDivL&1ks&9w_I$3ok299zU2{GOn<V@)0lUO^bGl+*4BsudglSg%XM1qovh
z_$4v+z_>n$j{4u;7$R>`bYrw+Z2iX69DU`ri(_3|f+k!$`?KGPy}5fjcG$mspBS>a
zWZ6vje{7%3T%~^ZeX{e at b?zr?@6t+osC}hUtRx84jYcSCD^#SjKs>mF8&Ajd-%pcY
zBV#3|JYnNaK@>mj$>Uh2!}D}-A*9p~4;swV2lk&E7sdqQ))!xX?Ao_{SLd$VR_qfi
zKV-EQj(eOW%2Qa{pN at lf*N7pxcd>$AxbuHt1>v|){S_armOt*ZVW;PC8ryGb59Kts
zNx76GZ<V_Vsm-e0d)ZY;-uB!r(%^+;l<T6ckI-USz at C||FNkCBtDpI^8K2F0|66yW
z&$$hSQ(l^<{yaWEM2uY$&Z53*xAEapRsD5B!Ikc_$4S=;*O#03I at Zuv?JWI{HIzp-
z^b7@2@^lIb|LZ$t^fSku;x;_oDNhK55}~~rWo09DEY>3X=CNoV+4N^$slMNyzm^?b
z at bHWFhZ?6(%U!o*%$d_a6t7!+sC}n>OV*2(AG4G-vrBB>mp)%*X{+6v>&{^{ANw4A
zw~+n3 at fN7`ELdqOp&Lsy{IX>%5lS41jA(R2;s)Cz??0HIH!^u5j!0<dvXUJ&3ecw;
zwiNW~7En?I1WpWz2oI%Iq}wW%RX_c?Nd00PD_|9rpIAz{vt{2ZIP?AJD>Jt`%d>ax
zswGEQi|ftaWf_On$6syVgNQaY9mTd+7VOobjz-6>c<4W6EM3K)3AGZeHOE0svVVYF
zi7&(bL-8p`8pdbFLw5*@kHM3L=z;&((V56xmaH$!;n0^w1~OZ8Q}rw7N%ez0(nePC
z=x;18{!Dc7rlUXlu_^B^7<ZI>NI|Fjjl=S8KmRFfckKQr>z1o`es6w2{d0NU8m#$7
z;2`BxgxDxkAcC at R%@`Bo9&y8uaXQ95qR=6WT?{wJY6~F0kQ at qMiYUVoMkNmro|m9N
zw`6sS<TuoF*T1{_J=*sC=UbcefO_G|%eU0CMWQYA$ud@zNr@%wIlx8O(g)ZQf}Mwr
zg6}-Vd&TG!iql#HE`y>HN3^K^;D{bRLQ)5Hd-Cil5mAx2Ar)gFYza-X_1UI=d1$}-
z#V&CNi`)MOi`~xN8hv@@luP5-*sD{|{vw`xM|Gk-ea4maw^=6QzK`6nZ9}$MuDU6$
zP*qp6dZk2PXO+qvda4ADiV_;P1a(T#q37ma1A0?3k$iaSAX5H3jGPFO^{QeKdPND#
zLQqNYZwuMG_VGOR#!L10tM_(D+gSX8gDh?vU(4mO##-J}4|G32^^Y>etofz7H(1u`
zldAI_ww<xum8F|f&Gj&(`wHS!NWtE9D-FrlKnp1RlqZ6k6BfmYd!=niix#iC)Rm%N
zjI?Xn9_l?k50Z7PT!?<{9Ti_ozjm)U8*^%l@k6|&08Q~liWI_~OxQ3>JxPR$k~N&?
zMW?5eErh2RgLEU}greMIOBONrOh0Mn;A!hzQ*O^X`Nc(bp*Uq8yE?vOTE~$qCT71i
z@<e{o5%mC|gsvnl!2Ne1a$ovy5z{9AJryJkR|)q|i8ovnyx+ujL9M~V_n8o+ZkImC
zj+Uj|TJ%RJu4~v-tTu9l2$}X1l9numFkm?G?21x0O3%?D3nko}D1D{Z(&X`^Fq(Yr
zo*<1==O|yQH%hPFuC=r1$cL^o^|{4lWZ6FtKT<y#vaIX1o%?qV0S3RU9+L|JA7xJK
zU9`CrYMi;D?Qp=kyvMy49+4mVzYVclWXHmJC;>bgiX8IP?-b+<0UB{34(Zd27mMAM
z#1AgJ>x+IB*XOCnS*uZUT#2t(l14IEmY5?J*iN8Z?|Z<(d}QGAZ{*SyU7%nbHI1t+
z=A*0c8+un?a~y}6#__Jc7}o>y?dIb?=JN$>^BH8W#)}x!8DsX_j$y7(tl!CTk>;Wb
z`t+T3 at tr&QT%TI!;@&rm<8x(Vt}Pt?JA6zz?fXmu01XcaOM%TaV=Hl$xQ>th%=*oo
zLeMvtqjA8>L299Flb1sp2lnW-RSgrp)yD2gBlk#QNF(Q>H)y5BdI~k&Odyv~6*u%L
z{DG*maIh5ao>hCyx+}k__kO!~sP5c%H at vlT(eR1!Y=TsFzdE6jD5?*?_(lD4+_FJ8
zcjO+c%lklQsK+4X5bdZez_`SZ&xk&-&<UiR=?Dxp9yl!h?k+4AySOVzd*p=2Yitek
zft84IwvU44A`H6T>q-RI^_;L7`{{Jm3q`#Q?Oyn5P!+mRUVMzqSICfx34*ESE<IST
z8@QZB7J;SH6U#xdm7c3ev<LDcxAfUytI_Jc+0sLjL5ZL}+DEwus4KM6NvsFDgQE5u
z>cEYB^4s at 6qJ~niSvx5hrQq__B>@g;h%c|8gdLcR-pCE*t)Lr~>0Y91EKv^A5P`%d
zkAADz!nv6bmRHHf{V^840s$q~ysZ#$AuDl_Tq^<`M%<gz4>BTiw-jZTv%5uiA|@Zd
zT{`jh{2!Q2T&@0bXv?IeY4?V0iQl?<cK-Ia9(+8Eg at 3u}$64wf_0Pw5)Z&BnSJY%B
zJ=?Fnc=7!HbytDb!W87xF2Nf7;rZ6XE;)u9w8azx!TT(6^AK7+%pL4J7@^=2%&ADr
z_o}IsE-z8PRpZrvGggj$j-O(sV51@)+xU8shycm&)r+h?3lC@E>}B<W`a{6AFYjHf
zb at l#d*Kh+%kDzMtAoRGf3md5u*3+-)T}C}H?9`DKe}AlYW8LvOiC*K~?N|J8kDnSP
zEL0D$e&#5La6oDY$_nlRE#?vM895UgUGOqR8a@|(#4#|a#So44WZ@{~Vt6~Paw$bV
z$l?B|!W~cu?gD{r(JGNu<^nxfVM1CM_@M*>OsY(zX<$!g=i7JfH*WEwjz6^<@UDD<
zUA#Kt{2=w`y~jR0I(g{P)ae8IcUr=dUsfNw?c&4RA9U)k9t+yO at W2gDwJIa!KR`St
zB1e<Q9#sZs{~9u75N at fSd1=r@z7*s7S>%PAGA>&RJ#3L-kha7iz?6)eXQ5PJdloGK
zA|d7Cz{)`Z7pB}v at xe7ifw&@KUg9oq+r~DYW{F$a7WLx`E!2Ns{ro at dyASTM^5W}x
z;_N- at wX40}QLpV1#n<6h4t><?FH|&B5h5(&mi_-_EevOaidC>dm7~rdC|ymI!^`O8
zg>a@=nnHb8gXke5m at AkOUX8mMY90rZA%iSX7HSHzToxw-E|11-VL&-j%#iyC_7C$V
z<>|~&znOlKb&*_b*qH8%lU)1uxmY>*wt7ELo#{>!Z%oYY+pfed-_FaU>>MyYIgewN
zUcu0m0ZiG6u1Ap8i_fc?8HG*2w2n|6_+%_bRvtA$;s{3`?%7S1_I>l#2Op@<%Y)VG
z-$>~tSEckk)@<`;^%QEFKPdfC%(gWGUXQoP4ThP)2;zWxL>Ww|cS}WGOd?BfbCC!&
zN3fX|I3U1UHjY~{oXF%v8ZOWqt+Mbzo^Xan0$Rg(9^DxMdaZZQAo$s$YuCQ}u6E<t
zI;~!rG3%30E?%@XQXl6Q=c$U`^qjTJE6!zh(5H&f`YMt3L-@@cLNiu_)rKv_gA$N7
zipuyr;4;k9qbIVrJfn@9T@>Ioy0$rYfpFC`nxh-d9b~u89dC}_AzWm24M at zn17*u-
z`xA5YaN!Z=j(Q625cvTYW=NvaU|(f^VjIh1jsNzEK>GuZte#J-)jolU%Db#Pi^oip
z)n at WXwhMS4k<`!!rn1|m|H1ovftSr4jqrXIZ7+o<tckG#E*aB$joo>A^hCDw8KVRB
zz0^iGG3PE2);?o&u)detXoop^xNrfZ_1!Tc3H9tw={-RF8i)OP4ffLAp82`RM6la*
zXq+I3uUbY=6w*ASIn$=mc5QU&cNpE=L9lCc7nC;gj5g=?(O at tA0Hgb$hP*L)cxko=
zc5}2JU^k?1tk&k^Ak3-BVc&s$H!;UtZGetBlaSlz>maO5)mF;dvpU8p8ODU7IDMs0
zkDiEp<G+uN_ZnTtoV!5y;aQ{gQ_|*6G)M0czG3zM21$YyZoAtYJ)Bj*-1?cCa3^D5
zYUnxyd2{yhyZw^B(rTXjXVA=|a2@uiM^9wMp3yw1j?Of~Yc%bmHg^Fq%%mIU+)?^U
z`P}@rYNLk>4?MTk99<5uC+M&T;Vzxzup@c~bZH`6?3v%t(Te<aXhuPL`rf7jnpd=y
z3h(1)>QszdMM0U1s`_fQ<LS{8*}!Lvu4Wx=7xcO9Lc!?2&s>dJXa3O~yJNWgHz=xm
zjlF2XJY3ieDD?9*VXna*@LrWfk2u`+9_A;u2 at fGTKmCd7*u~oVE^43XqkV!X7^e9N
zGxb!PNk7W%@O}$?CsDA5oPu#%I^V}u`aWLt><kwJXdh$roq2lnMAq>cqhqb3`99Lz
z*hl1k=qF^(9INk*HZ$#w2FGw=g=cTf(Uq|`FK8<*y at WZ3*ywgZ`o`?da!QTaIn5xr
zZ8{`KsTR{MV<%QH#~SXABD*%Wlme8h+e-C$9YR5A682Ar+nm`)gS+$;M!&*213}?H
zZ`{rpt)GxN+8=Nmv<u^;yEej@_8jgV{Y;E8VTsUpg*=C~`00>34PGq(Is+C%d at HJ?
zukz{96B#!AZ=<8FqxtF3+&G<~&lu|k2f?h3-7(OF*@Pm-Yb>3l2J>+Afibb%9G!q2
zsjlPfV%+6Be3jkwRbKYM&E02omZ3V_Pmi9+I(tSNZn&Z_>uA18nj5R^Yp&9q+1PDu
zW`bOUV>pT(nvk2L%L4K^9r8%EwdCZG_u`OGWEDKHaGGU>TpLaE(`dUeypuUQ538iH
zQJ6hepPkDu_Mb6clhm?>%j{*t3T8-C&N6p2`;kWDPGB at qM7xkZ(#IHU&=zM^eXJ%K
z1)4J#f;y)gqs^HEyk`DLpV=W4q6ZH%Mw at e2qtVcsDyo^hQd1;!jUk$J#v>iUOSp(>
zBuVlYe2*x4%(P^{zo<Ao5h9ES6d@}B{mn_wKn*I7B}OS1Nri2oXs`qaY!qf&xmxKG
zwSB;Y_^bGQQr)rbYSap7-o4w9y^GwNms}F7Z)d;!Wph5xdcH^JmgT2bAKH24NH$)b
zZ*!Im7a?4T!YDOU`X2td=TS{<rM3!lrKav=03HqfJlc3s1uv?Qmo!?}1Q0<*s*~a$
z#Wf`ueBqGu*fx|<f38_ofv?-MZs=1lc(e!Ds#48YFr=b`aROD%OH4Jo=b?xu*Xl#U
zQFF_CFOtcMlMo9Nj+7YWc<pfE+l+m8WWv}13ya5JoOJR%IVsMwL5sU=N?4^HnBYiy
zW#Q3fdrx-iH-2D?SM$1_+@S`p>l*CYuV1^j{QPp4{=}swgGznm=mh+Lbj&&TCG=C(
zDJHkXksJ}Db8d>*_>tcka3VfB)pKXK7E1TP;33-FUCg-)gj>&=TbDZc-2ArF+_>!!
zC3HAEGwXCpo4K4h^Hy{L`8(8xET%zy4x=@ww_0zyId`Jh+#aYm3;$+a4M at x#iTf{5
zZ|*>qYWS5fXO7or26D=mxMYp!B<$X1VGC<&j5ejD3i{0G7ip_z7lkCDC5>j=r1xxL
z_+9xmhK*BVV#ww~5BP2Dk()7hV-Ur7m;Tg;9y0N+aua_)k{Qz{22RSpH1;07iwCsL
z!Pyf$&Fzn|FI6}^*}`g;VbBIc5_cMuMC0;AqgwIv$?j>=D1*m4V|1#+XLgh~XD$@p
z!b)`?fH`xJK3bcZXcWy%G-`>5MwxTRdCe`Gb8ltiJo<?-cTt!whih}w*=uueh0Jc^
zl`(e_WD^iT^p00E<>s(eR6qwveuiGuj~n?6Qo*Ud5m3R&F8-pF*V3oTTMJjh&}}jP
z!JvV73!`+S6Y17o5msb%eu at SlSBhJsrF-rr;%BWq_kE+gm$b(Hyf|6h>MkiTulLen
zHs at xwI#I%2>QEkSQ5m#QuYOt{B(6MeDPJCExyB;6)<DaH)dfxl9}`HWYA6NwI;$f5
zqUz16KqgOQn-kSJ;!X0VRMtk8x8_)oQ{0j2P1n+sjQFfjL~?6MeOg#XQj&DP#dzjf
zW&cmqhtofM?cML)3G(5k{THXI=d$xd#b}?!Z;q~QE_!5lnZ^AQx7D2sL$SMU;l->b
z;@0hJ0&_MJmDBLCiHS3tg?*lzXW~qVe)BlaSY+SL6U;kpVvKR8r-6RnaS*jY at m=6<
zfpFy+lqg=GnMaQBnOpNaQ~)VLrxvFCn5<I^ZRQkn=0f2Q&>{T}8Fa`QuipwjvyJW$
z%}jS_j^_>;b32pu(c0WZKQ*YgvR%)B8rmtR6WZK#hqSr3G7Hr=<}NZcrD^U``3{$=
zF*mfBZEU+*h%?aEzQ&k^xmY#9T#qq}DdphAU?rdv10wT%{mpaBxjaXF$*`bsx!lnh
zquc1CE5TaiEATFW+L}v`<3dbxynr#9U1LXSeb(G-_i09lw&v0TjP7gu9-}cgzJEt)
zJnqxeXXVh&s`MB}&*79*n>)MoWe+7atRPOC4#_5r9&9^i&YfMF2oHpQvWDJaj{Xs&
zn{ryJ&0SbJ!b3~VxgGl4$Pp5&*giDpE-ZZ&r||UL`e>o7+LcYQIWZb at lNaRQzVMAa
zQ8U?4eu8bacdybNLUIIK;2^rI!Le1S<T()ojv{{@XO4q=Jpv`wW=5|C5ud^=Igq+D
z;Fm{y1!0HKj{U~pPs2T$>qx`wFK8#oX0SA4zYPy=QMh)G$h#xH#Ic<`Hl*jJmVRW6
zHuVTt%rrjdF16YCDpTk?fst!DM&<xh%kbNnslOk>-`@(pSkXZ at 57GIUeWH-WUNmMm
zZJR#2Otc0&Udust$1HtxS+?F7&G8!5GYt(@*o*J1$YH_U9F~#%JG;0`Stkw)W})|S
z3Uq6Ta#gey8L$BM_vLef?)^4wF?^MTRc~;4fy053ogpt|2}%r-`IIe`(HG;BLaBU*
zd>}ET_%!rEIqSPVY}~OvK4W}l`$*%C-1NCi12Qo{xk;bM^yz~fK&3BD at hgU!a)V_J
z!d7<5eG#w{1cmTZ at SVWfZe?}c$Fw!zE|b+-v-nM94?Wf)PEqOR8CGk4m${5dIyTvo
zdSFMMzIoxgj)?uV`SAV3+<ZT8@qJtFE=7$7vYB8O{(h>lpMZrdVHzx(kw24e%x-c5
z!^+KJ;ip2d*oDp0O-^7?tfEMr2Am?>fSv9KjinRpYone7P<!~Uar>eDSNt8+6YI(r
zzGIDyn`u}CoraX7*#k)0>cGD_d$1{O8G5+0l1|Mv%Ve-Qb0LdlFa2$1gHvcT6Q`h=
ziBqica0+v7Lz2_xPB-V?iDGhpw__&xJaESAny)rL*<iH!cM9L)1azy4F@I6K@BiWL
zJ>a7%wg>*(cGC-ign(3)q9PzR?D|9$MQMsyz=o&@f(5&R9kEx0r-+ChBp^yr5u}$$
z69inOCA$F at c0-8RviJX;bIWc3f6w<m|NlRmbIaVhGiT16Ip@roa`($LKqV7ChR2r*
zf1Dy14bw*?`9t1N{L#?!Wx{1^gg@{dNb5xUdNn9|QT0LcUH<r(_O?{`gS3SYZW2D|
zRbv~Yg+E9|+S>sMcW_bsL3~mlr;ShYhmT8RSD)VmE~UaBq at wuaC!arjObT3m-W>^d
zmvG*xZYf_#dYgUDJH{;~*1!3+l#<!Zs+78t<8CXE=@P1x$GD|*((VY>PTKEiqYsz1
zi?yUJSgW+ at Y0<zAN!i0XajA8e=mJs}-y<8ZP-oXAE-=3q`jLi&_qBf`ygT$xiH{T-
zCUm`y_Lvf%aHl;UjQKciGQ8_z<5T6hzrlRmoj$#Nnt0yb6TpOVM`+T~sbPJ9V3I-2
z_YSCWpFU2wwot-Pprk4B@v^=wCCx}&YK%$7*B;Pf5{|>f8ZGrn`obv_lAPjWp5tPk
z!3bnD_yDre%~gLRFbaA(e*7cB#__dJ)aE8fLwrAek*moZFPHM=IUccz*ZRIZU+dL#
zYtHfFD-V>D@=)#jqzB4NxumWuL!6YAym3+<+Rv9ap7*Szz>VwRtUORo%Hy>dC3kHM
zPbZZW)k;~(8<nz>H_s*Ijh}YCT4}3sKPT-8`X$M6KQHa6MU4A-o;JZ;{OnHp6SPRu
z&+er^wH|(UHSJjOu7kg_HJm&?&^sl^H$2Lyu at h(B7H^P;l`Vc{Cyx)bt?-U3(|pR~
zw`Apy@}%k7^NEM7PqBZRAqAzYB`YY9V~6&;WOo78?_wf<vsKfqx@zrI?H-ug4W-sr
zyKGl_P=_jwneOiXL8qKt$NE$s^~AqD&sn#kSfb3B^Z9%4PsU5u{Ppc;+;zR<I=i8l
zt{dCUt$(!~H|6tj=Feb067N}<IWJAM!4BrNd}p#Q(d#~Xb6ccLe)mzi*rcYEJ22q)
zBGsxBXPQ=ifh;Jb=a`(=#N?}k3M6haDU$4nRL5MC>=S-y4O%_<OMTXoA3M+TyMQkZ
zym|Q2g~r^P3w|AE*8Ou4^@a;6xJTOP8Nz$-=nIpYMKrk5EZ(>m{guF4k&6gKIQ1R<
zXlmJ&MKV=O$=p1*edW>qzm~MgMa9N@;*Y8M-kdDA{fqxt((X%aWNr&TW#517wOmPA
z#^0Qj2hwu=(Q at Bj%7>$6ULoZ~`&bW(20dGF8OEwh9~Zy3<XKoqAoB~+EsQaM`7phC
zvYdX4$#!*%q#gW?*5ai7o<8I-X)|^&R*sXl>MJ^Fzo%y$Cha;d4IR9dwsq1Tr+t)^
zp+4T8H702b4OQA`+w*+s?_=%Oj=c}1bft`WKjxItSeopu_|n-MAHB?u1|OF8{j?kV
zL0W=a^B&7jJ=dkkz4rUe!gv&{nF}rS+o_N6VvE;Laa9{vlV4*$=#B$D>&8}^)J at yB
zhg?l=&!HyyrmoRa|5nA;f3e%y_tOWS*0dO-eM at nyn2ouc7Pl)_>kf*Qqfdp$ift8e
zU9scY`<qlw(Wb}h+v+RF-RfiDH?7a>Thw6)2j>IG5_;#f>yjTvmRfBM$MDTOuqp+s
zp#IARTeTc*n#m3n(@LCeDB!}n;660ih*-0wq at 5VoZBnbG%oLoO?Y4-6W2<ppKeqI;
zRBTUwI<cF$Y14l0@Z$;%Ropz62c5W?e%y%zkMywc)6F#;ewDa^9X`%#T(^lQ+5MCY
zjO5G|C-n#XH`KW9F^9a7Iy1$2<6-9wY)!^>H8tDtdUjdmJI{pEcMu!u9=nEcHFy1U
zp(ES?e|5q__Dd_gn at X93V-KSR`LU&4sMz2mHR;4wbW~|W$MgKSe#%IeWL%+*6L;X9
zK4tv4b)k%!<Ah#ST&G_rcz-WxcY4ZCTl@nGkARB@Bg96#l(@s{`f)`rtGGcYuDzJJ
zM+X(oDqYpvZ;~vbpK`i`wLP8KX9?C$?1A=W$r|-zXMwjjstZl{HoW2&aw7eS+8eB1
zNwq<R-Y&<;_gV$>B@(-nwl|55=sgwN>meK*dzk*nVPZFNsp7;|C3Vt%M|<Wlv75Q|
z<HS~YJFzDsk9@p+Oq!<REp%~W57cHP>Eg#e3c7e>yZ5NCT1rWOa7(%}iH$d9dum-5
z_k&}r5p2Isy~QD(2gmthrqroQ8$P_%kL#!GS-q07VD8|dMx}jD^kX*wbFUAYLya~P
z%-0C!!}JrAxQK36b>!)0M+U5ij!JH+(btxqHS0+Lf27ul`>PvQS+irXlv1U+N?GQC
z;V-Pqc*0QT(5H;2iZ6>eVl(~E<EgTl%0c6)+J78ReM{evGM-v;Yt3(We5-G{Uw>t>
z+7s0`q+TDSXC`*?3Fzi}jk1>&pS2fiBBw;(-Ik=L^mA32o2Kw^d#PC!o0`4buUS8C
z^ArwlAJ_^tos{3BmwRYzcv9q%gNJGzPV8}v6Zy1HrtRXPT6I&wLupd1g${mPp92~u
z<C>ob6bCqxZs<8a2Y8as9|sc&8c-bI#2r7#PuGh(HP6-kPFz(!6<2x0nkLKV$3})C
zK$%sJ<^4I_a)fq&%IMQ!dBq=nV!1zGHaLQ{4@aPjx2QvMApx6drH(uiH=rie{;%Ut
z^40sZl2-V?YnGW!)G7!gH}ULfpM6H%roK-<O>vHtU+Tc2)wnAUrIk18BHyx?xN{x8
zLEE_P%9l=_<de8k2P&>=g>NT0AsO4P1t+$u1t<1<dbeaP__15KTy|5<U)IT@m5D7L
zqi%_JoU))L6!*=OJl|n%fsdiDXI<TCzkwEVbc&;eCfW^?vf0;gX-=N@>%{IS{O80T
zYB$n+4)k=EKO(S<*v+N%PVDh^mt^U^*i+No(g*S8vl9k*6I=QCe^fQ2Y|;MG@>Ci@
z?Y+PJviK>WBc<K(y?ZN1N<QByITZI}d-6>6upO%b`dumcEpX{qPw4kJR?TxFMHWhq
z!_xdTe5=fzRjQ4u`AdCo9-N6Qb&&7X0pTw?;mXIVKgveHsoro}i*LK6q(I9XP;;tZ
zi^@iIbp0^>rDR#8Z>40JXQP4#Uy)OI5L at sV<l*7+f|JTPZA!8R{C4g2TSQMw?K+xw
zsP<H{c0K;{y}3?oC10G_<5}zLw;C_DKO;k82OImbKajd{JrjOx><eEv(k87IQV+|e
zHizl0k`(Z3qJbwFp#WcZB7I^D1#)}}v=E+9sUTf1^l|ib=F~=R8uIOM$#I37<Jrj^
zef{0KR&3SIRBZIeMLwVSagTL*?fk^0>Z{~VT(O{giEqxyF`34=em-`|G~E1J!)t!u
zMoQ at LYirf#krGOuM;q6}Ps6WauXoZK$(@o0zQeOM18#F{B4wdDR?fu!zJ2CfM1^iE
zbF3VtgPgcS2lx`e!`b)NIdK(_I2Mue;rrNmvHjV<4i>7%;>4bS2h;DdBxA!P-g-v$
zMm^yw=MCk<_bo0Tb4KHw+4tzKdlL7^7tm|_yFA?`d%}713=Z;l1ss1D`@Ll(eMN`(
zyV$w-Apa1Xh@|+tGVdSKVUXwVy1Mjt%ll+{)q}I!x4x#Q<L<h(_YX78`u^wBsUe(o
zfl8_6Rl=L^=w~E()0flrU4C=yO2t>ou7o$w at _Eyj9p21!i7QsC6L;WXpMrked~8<F
zhjStPwpCimTDO&?*sT5=o@A2PBEOy3YEF}ni?5C9xV+`0t?*W{X|26{Zt>%K(y9>@
zX&gKU??ww+d{CQgslHttsqty>9F4g`OutUkCfoQ<2~QAvQ1Cp$+qmHu3g=to^K<ZA
z!jE^uFJ&DL>+TpACUwG3tmmY2zNB+M=`@w_vz+(|v at G#!$ajl`&vN5;mhgYu`x))L
z2P_>O__=+o9c6uwnAN_oPR;kk=ZIs~oAoKBV^lz`YE^nrjjxWB`<DJaGk|!0jNFTd
zO7740p38V+P|Zu={TY<=K6!q;|6GkV2eo$IeXyt8!)Z=_?)x3&UdGoLUkR#FK^LF7
z68|K*mr(|}?<n`;8<cx|gT$v6tRLk5Om+Vc*JChB@ArQHdvBxqw(5Ps)1kfN=b5Yz
zv;XvLHEG?-PwLI5yGhL%44y`8#|ECPA7}sJ#g-{mDt2qvBlt?<1~V>c&y`j%S?`=o
zTiT<F?alg~4;Ne#Y~gYNyn1ZdOWEfE&tLlzc>F3HgZ-ojwa=UT{314tO1ClmQn;$5
zaehfFcdTG6^gYKqo%(q}=q;n0jC%#u=qB_Z%Z at yI<@vpGk0;ffE%#T;JzQiillyDc
zy&VSQAu^ut*j)ohL_Ob;k1>AWlE!ZSg0;kVupW4yAK%BiA at PrL;|qR5Kk&mAn5>_l
zq at QSJRn8_ZwH=x$`l-}a>?3WTf`0lQwV5>(Y!FmqRi#dBqnEwIqqiTsrJJ^DS)FBN
z5Huj|!>?*$o}TAFlCRyi7oTm3yfI9FIq9<%+?8Kd=3St1WaLn0lH4#&lbt%8#xKg*
z8)%W)Zfa~LsJ7?fn7Soo%Z6&lW4@@Ix+I*vy_&8nVFFunRvUAa)u!caQ^WQQ&Nnle
zkZY;E8dz(6wD)CDKHlB?z&5>Z=*``a&HH%Fi|>xsZ!f(m5skc=`0Isv^WT4K!kfmk
z7p{D3(zbh6Jn-b`M}}PW(13>~4w<^{?j^&Y9P{w{VTzv)k|+N|duAq$xk4mDTj9WI
zN}j8GeTUprFM&W>TWS#rMZFBuAJW@<wJ7$VqO!M=?NZwMa+!U!Sz?dZHYH~ti6x*&
zUFeS9{U_-<6`p7>xKYEdv`dw?>bWhs{p{qXpODN=bfC)3n~_RM{zkSsviV at yswkmL
z?qB-3r^;HHRV=c&l{`OK_8uf_ofSSJ3oelOGH+1syU6|9lt!1a^O#G!3HBb(vm~XV
zE&8Q7Sh76Nu4PRmwad}N&Te_E0z$`inU??m`fhpb_2W!JmwlLIzXRiJcFUU*xOd?l
zn-hQDv+;Fy%bSw^(rqvNdn~)<_5HZN-iod8$Nf4|ZI`!v?onT>b at -Z$bBVm`D>R_(
zr^-KP|F3{rM*)pQD!fSP-2RG36Ez>#TPvg?fz1nLCf;s&W0+Qorcd>_DT$Wuj?Kv2
z2B8}B62J$kEpyp|YQ7or_Z#}o|J9lw`#W|PxJtO<GQU>O3GAc<*hJEP&aihMf=`}{
zkF#z>jebK9w9feM{^|>F+|Re_(ddj;s(Dh*Xk{m(O>(47bf0RO-U`6u;O4b5isy`0
zcG91Nk}h5R*(bR!9tWpA%=kK)wl7<~@vwu_9%eL5rtRw~uZ)tmj8{5%50v>`Zk_sg
zH$>8VTFOaZae;&TKv|3CzTxAZst3hN5!#R&RPQ7!h~3h9l3{A5>+^7^o^YwIVn3h6
z-=q7~IxcN)v6^eFuSch6Nez#*3XG%Vp2=+R(0IGr9K~3EOTGiFY}SAQHt>>~g?LWN
zEW~kk7ki^u1Ibwdu0CvU73mkMRQ17<sz@&>5pqWHkufG&BjSTmwOz+85p^59UuwID
z8+&rHM7~|*t-NTIxLstvW5cIuAL_#;&%ue?)yf#?g2bXEA8Ly|T>gu-(2kT=GiZKx
z>Ovo!)YE=lc&j~~8ThI$oEG0nTbRV$Z}HwLMMq}tBDNzlJ88cpTe}}S%dI(VtUz;-
z=rg4p*Ckp9&KK!}??6c-B=F{71^u34!SplhH0=*h+6W)GG{)+4#<2e6jjX^t-e};w
zVg6{Z_1+MDr=*QP(}O&&NnDbCE^=AsyFt^w*2|Ljy@^XQ+KYXHWv{{mBP6_gqK7q5
zw8AD8u9xU<+cQb0Pok$e$-0!1?{&k^w`UQ4AMsPxuM at vq;$NHSk-93B@SYMbEk$TT
zOX2;tSg2csCdfYS53(@uHfw1oi_YCBB_6N;mejfayu=2shA)H<Ex~?|8~eJXPV;!a
z#EX4!UX7@)#%XHiPz&en!>(P+b at Oso#VOedx6(omzjm!ns_k*e9s{X*Le;f5C)i0_
zNgyZf|G1vlnNc8geN5;ma|T4yFlPX|(w=EU|KF^6p$!EJf*avV58JhRJ&!BJ@>XR_
zT}^%?R^U#n8#0X+1$J^DSVVcbhn52wS=4K#p!k|TTgmZmPr~5~wX)ygi-CF#t=yH-
z9$!ptj8t#wzTxnOnyc*a#z4J4Z8!A|m51tMd2c8ieqb8jSdF$ISj}J^LaH86<!VnJ
zr@49bVPE@6Vn5JI(5D0Y`PPGYJ5>&C$>CHtzQ`(>neWJ|p}LivneWM}k}Q{ppbZw=
zMDS74hmpWx`#pP2{3N9A$91HjqK}jEK>d^?eY}*Xsy!_ly0|#0EBZLHZJ_p1l0Lp{
zV{VN9hFGxw)h+_g>|4dxPXF&eui(9fI`~7`H#*W1PVwzfy}sPb^E3nA<GHFMJy$==
zt0SKeQhCq8VKHxzg4F6r#zNg%_4}Zyy!IM6>`%jst%cn at a#-u)z9AlkgZUfIGPepJ
z;DJ(n at UYJZJ|$U6<L|B@{TShc&62}V`nvvFH@_d_&4zUBhne8hS5hB(ls_9%T$zdw
z>bN}P^pF%EI4KX*wj}w$OL?l=Ex{X|c2ZY$<fQ(e))G58sMRe_4j-_~zuyx5nP%99
z{$405ht)ElN#&5HeZbGBk8l4JF<()A8cNmrn{fUT>8)>-HwNk%$vng&Q#Fuk!`*^i
z{;hZ>eiIrE?C-aA at hPj8n7ZDY-dC`FS{iz?92M0{JKmb*=Cn4MleA%#Q&Z^G+Qsc1
zw8rqjRNkzi6s@%9tz+Fck>Vbg_^qF{?EaglB`yi%BC}g+XNpdpVtyn%eN5sKs}VY}
zCHr?N9X!QwdW5R?5EskuB8k_I_b18wAt#=N{DoR=c>im8ztT;YJ{sYT5)*3KU6TTa
zgbz+ksAYFevMzSwi$0tU9xbFqpIUo$e@&8am3x+y=&azA#CEj6r`BtXeYqOWo25DR
z7}wrxBx%q0($;5a^YykKwUYh(?4&1<^sTwU7v1!O`ixtD_u~7hGpntngIh074&V7X
ze8n1fUo!aE=aPf^`VI84mqFiM!Dsy(z8aKv*c?u%m4mVdg+BV1tgbu4d&4h7HaRqN
z-%w?^D)^<J!<U1@UVOg{$5IAw*A=G>oBSN6Q-+}TMy(uN3(?)z;{!j3>4R2#@oVL9
zqE`mR6EaVfGQhpEuM%xic*CnbpIV+5UN{C$bS(9jY9ABzj^Z2d9Y43 at Yt{G+zbs#9
zyY%Bd-25DJ(~@)99FBV2ElZmIh4zyDoA-vFzS^V2)4vYAl6lPh+dSM^VJ^LrdCdIV
zJWls0rZ_iU^)H-SpQi0S9A8lm&r2)iNMoGMX&L%7#={Q7S(M{~T6q-uc}yjb3%ruo
zqE+p3Z1MA$N*;OM8?|WVmqTjawRWj_*{Q*=d3V0Nmsg2z^(t8*y~+!OU&QM5>)w6K
z%df<<em_Y}P%D?g?ieMJ;FP%{VfvC9`>hjB?@Pkz2_vZ-YgO5U#3%Jntyy|ckFz`%
zs=p at 7SrMxw52;A(Cz6uK*SDTm*-5*tpY}xUW!;x*e%jt_O{agT)-<TJgWANa{WT4K
z%FSI4S1E_nR(dHT(_Un?gli{=g{E{z9`e9zt)y<1h)k2z^%;G9nU+i)dEj!AjB|BP
zTkhxZ6|=g#csV3-PfAUDHZrYBWSW!1SJ(QSS1Sk4=2c}Fp2pa%LwRJ{YkI50=HN<A
z<ukLoh)i>G__D7r)BGIRp`oOO%iAi4&S_ykhv}4|;IKIqxo<f2t7Mv!!}M!?ndaxf
z9$UU%6>gK&xyJ~P%Km1;qj23JT;#3N6<!pXMlNV`_7swLQhYOhZr<KPst5U7n&Q*r
z9nLfRC;8O(l31>n<ln^kC8%T#X(~Q7FJ>QPS3^o{WtCViH@%-={)n_0(pGK5yj|MH
zQ-mkizpC&{CH!96bB6SNogV$90A2;!(lxZblcbGdb4we;Vj<jFJNFIP5MN;v$k#9O
zu<<SDwl3~sHH&t4EcZ{D3Fd2ekrE2`V_n=;+GnLH8&cAyC6w#!y*l>OJ_<fP#;s$O
z{%mOpDt)y3jebk;Q%~ih3&|lP4Nr)h!&j_VJm-)cnv;WTr`Ze0;UsAZP7YrU at LPhP
zLu0t;Xcr@gKC0zAW%v?Z()h4BcyeBqp_jA-Cx<U@@moTz96UdxlS9bQVLD|<KWq-i
zrcmjmplS(D4$}wtEumHpUTYSfNbBh2pegOn9&(DS6>l6;*WNw=!ZFek$VIh;Tb-5w
z-+1r%xp`9cX6oY|S(Q9mxM`TaIk_s?ukqF?+%#MKg>SjBZ$3=gEnPp_!D)BWFFQ=y
zt^OwMPTKmzq}`%c+R7qx at cuNA&5AC!P5OABl$y4*0tfF;t=A9J3Ocy0z`<Mf8=bT#
zYCDpv#{IO9ac6Hx3y|HrRN82o+kH*rQ`_5p;bz+UJ3+PXm6TPR4rKUkeYU0aENMtv
zN9NGhpGO9;-iz?l+;IF8gpWl3hNP!(l^fo}i4P}#nx-s&;w#x;?bLl8>Gy)_x>Rx2
zxGDWhDiZstBvm}m#8hup4eQ&2jb$8lj9d3V(!+8oE+e8!OVSc$rW|Pp@??BvtQ(sV
zdoQ*>n%~H+&4bhK#MeyywEeYnjs7O>PTG&jw55KOOgo}h+Dg_tcz+r&ld|5&+gl+k
zcn60P+rj%&>s9-&L-6+I6*zb+o5V?bBIB4oy?wl!xSZn9M0p-n+HlHk at k3I^k0tb@
z=7Wuc_(xRADV##h2lA|!oiv0~u9TY3gHyg1PC3ivh_5BQC=oDAgj4#u=`^x$f`i1L
zE1W`nsrwm8%tc?S+RSh%F1`h6KcphDFHUlb-}BFRad*-_5*(ehCyG7ga*FR+$abmX
z_$`#YR%t_(=6?H;xT-Ges+95e(37?%F?>>=S+B$W{m#8AmsvV8YN5vF)q+7Wt+<(%
zSC1*o?bM;JsV20S)NPl#n>)J}TS57lR$h*b-t(pMA{p3E*<704Yf|?}S0DCPs|gK0
zIH$g2q&~tTpInyhc;&-d)}(Jf%^0%in?2F*<_t;vuBXlV=C46-JzdhH*QAkeS!@1m
zd(TMyq~CIX*V{d=2ie#7ua9T08pkKL)~GgqU7}RVDmyi4t=PN#J>x=Xf4=sv-CupF
zw_Ou=$E9hBw*sA1-K(*9<@>jeqF2n$35hY*V^a5wDXMVudf|yr5 at Q0N2(Pqp<BybZ
z6 at P-nuX5u%KIsz(Pg%pPml)?r{MLyvE^k#k@%2R#ej4%FON|;m(@p0m2|tGLprn7T
z6K<4C_?zG}K;mz8!d-vJEyV9<ok2Rkx#_ at 9l#BS*lGOMH-a5jGZ+ at E^Uk5M3rxIVy
z4`|6$4xxkcloCFc_!kO3yWQ}05`IKtOxoiTf1?u~yg|YX6JvsBNqjufik<=bt)z2K
z;)=kx0em7@G7g=C_BT|(FNv$Ho0J8opX-Dhx;>ZpSdr}MphgC}5^mT(Vp&fOlxPKv
zn%v+_H}OW1go{ORD=s!N^AztI?WX1C$yWt)+fB>zw at Ff;>&%tS@%S7;a!Wk5%XRYO
z1k5@)imj0>CYhx1H4 at o-`$Uty($#lCS{dE<=mX1iEs@w#vv%dmxqJ5L*S+-am=~<>
z`^>Th3wK#o_t8t2)@-cV{MLwvUNjDmySG;HVBGUv-0K)}#SVTc8 at n@&hA&^_@>R(H
zzi`+2;-$<R(Q?#xGnBaS<euD!VXvs3lP<K*X*cb`oZ1T^WJ at cxkvN|wNPhSf607gL
z$S&gQdk@C&MAf{{KR1Wh{7cU<Ce>VSOd4$r9+x-)affcv6c2(!mlPb3d4GpP$~ugH
znEm~U(Cl&JjLC@{{b+qlqPf0hw7y_WVjUwjj7$ekfb;5UkEY~~<d@uQRisA_dE!mB
zotEp+20m<;3vE`aL$X$<r8$q&+NExM&c{XgoHl!z^C6f5Jr}M}OqtvX9-2Adtv61c
zI``|Z=jwXGep9cB)%<8&vD<jD<}T~h(c8C=P8={EuQ|J>Kv8imHQ5 at yP*1xjr5x;#
zlPt%<Bt57c`Cfafg}pH9e}%pJppApQzIDXxwQFa`Vvp)){G51N|NLjYI+10~8~yRe
zqiag_Nr}2OUpUg~-+^h~>?93;j+&i>oX at u&wZHYoiG0rVW+}a$__y_?^cs<6>Me~~
zK<X{?v4h@H1^3?iB=PTnV<m{>Cy!_BZ;?nUwdqO8PbwoMocKXUlEbW68~K3+68;Y1
zjwIjbgj;JQydCL(ERr+ihTkLMZAgEHq%WRr(tiRh`R)<*20rwrdr!;EQ`AnWK93E(
zaRR9^j}4~<9o7oAn-)k)KyB5uOgCH!lO$j9eIfo&G(X%n_vhCWJwp0}`oo(NJ;oXt
zH3y80(Pn;43*+a%P?NehvJFl*9g363Mc!<ZBu?HubQw4G><{SxC>av;ah#Uve9oQE
z;3@<IF5`O$UL2ks`Y!R_w|Y~(_}j$$OR^HT>u-!UKmTi!+48TR3cu5!8FO>BI@(PR
zv1-vr29i9=dBhSd#qF$calgBb{7uS|X_oUb?lcj at 8GNBh?iB&~sl&;_)ry7-ChDJ;
zCB`P++M!Pw|4QQaZTfY3-|dOp-!#V6+-P*HSz?SEZ9G)7#%Npf6!_xHQFFBp!q+3D
zKk%jG at 895?D{b>2e4W4~zH;y2YqHU+;9Iw@!uQNC^z+vL at yAd4d7q9;tY5z;z9F&x
zBYj(<ss0AU-8NePJ~2#xE^#*PKxP#)TOz1t6?2bpvDyhgGd6_A|HXbHF`V$1jpqVO
zO}<5^kA6}cFyLGj7wgqJQH^-2`61l*!-My`+}D@;lX>2qw1Qf(+>gbUJznk`$bEm?
zHh*JgN07OA>iuVUuD&%G)aun!_so-JPrxg%Vvd6i)C|ixhuK}v+lAiQT~E!Axx|gl
z+3RiiGkaROeWXv&1F3syb<zhUXASxONpHkR>=*F at D27z?pjI3vZEwG2Y$Qf1nt at 3R
ziT#;1Sbd at 1;azDUs;9v&68_h_PE+GKf!(}uf%`@QGxps#JRh~%$=#pLcOA6toYsan
z;5IP&%<9Nm8TSnzf4;iFx5%B5$zzm%Rr2WKzF{Qu@co6%AM$3G*_p)KC3!eL!_SNz
z$vlK}RXO-NLP>^`M?#5{RWhd!iYcs&rOcXkv644v1!_lf?+w?tr+Q8&x>&uWpX9ya
zdmfa})bq-o2v?jW<-q47CC^Tl!}mY1AGp6(;R<NARO;gt_l>rPsgDNa;m#JfpTkHU
zEqU~I-Z1+o^YA3$ROan at BXaIuII7N(R)W>7$vk8nSJ5hUZ236qBP4lT<-TDh^YDEU
z?D$Q;%o+7NopP*^H5@D5wH;4LyHQ?bwf3SV9x$b|CRwv3T=`O(iFd5C8~&Lef04vz
zZI;BJCE?fMV^O2FPX9}#^Q{w~9iUR;vs#evuhBl$UQ{XZ3BOIk!N=W8&e6G(0!=-9
zq!%E&OG>`)IqB10{`pMm7ob9Rnp#)WP3Sg^U58|kO1`z{?S!i^NZF~7l2k}eFF=u$
zoeBxR*};JD)SdXeQJ<&rVBa7V>F!X9?^Y?vMEWvgx}{q8q)HN4BjL{xe!qCId${3v
z^qlyqyXz7EXbGo=Qg_z_pJ$x-lyR<jo>;vCHw|MKN8dZ-&jc-UeHAjpIZzEn7(JKR
zuh|DY$>+~9^>)brn6jqq<VKz|B+tha6H<3_!&~o+t#>DW%1&g&Un=nxx1{Vu=Hq?>
z at l*QFgge}rLHa5Cg%R#(0i>l>lcqdM at Hf~`)TZmcN6D9DeECGYM9tByv(;)a?P_A<
zJ8A5%nDKolnXXrcSp-&%@Hr_9zm*B*&B0u)Es-=N+!>cRi`v^G at y~E;&*?QE2RE&i
z_}94MNFHjnH|akp at y~YCcS_oa^uLh!{oL>yRs6*LcnG@%*3(K)q(P?XS0^$gow`t9
zXh5x{<$ds(Y=;t?=}o^&S$ENPSoMCUg!5Uqt%QF={MYG;vx3?Qw*wM?E);no(1h^s
z-SCXW7UFMV6=HvhzXXx4(r+#C at uOLNBz%pV{&)$;_kcX%OXqr(8~?mSi1G@atYHl*
zJh>kQelfXsJa6irb at x1XY>5lG-zxWOz4)>UIH*>B^Zsb??IF)u!{ekUE1rY;0`ER>
zpFCeA_p(NpRjNU?qSuXoggkdR5@{x at M}um29iHb<jz;p_X`M(%>jb%9t)Bl6JDf<0
z|HWEFp@_tXB5><}*!e{$`jo6)+(mrV?oUdtMikwqR#kheyJdB*&;x7aP<s9k<zt1q
zd8trnzE9yR1s`fe@M)36N6c%5k2lxiNHlYnT2F82Qrhvi_^TsD_p7+xtowh$OHT<V
zP{OI}TD%2its7+RenK!CuPsfk+!bp^<>q~LirBR{NxiMsqkEiqIL_)M&m9S%;-_+&
zim!GY3aTA6!0uqqtHo*b2rf)?H-EI=!B!jVSb^f;0z>JiG+-<723`kB_P0}AE1Xzn
zvJVx^Y(QUeTB`<`oE|P|)vkD2yp{6Jv|<OU at mx*6zSYoHY)RFg0O$J7X)TlQ=R03l
z=ktg~tEM%URQOh6ZTGJKtzh|7a4=0R%#sh*v1;o?*<1YNlUmTtIK at mK^~fEM&EE6P
z+P!z&a_^nXr_6r;t67039vJy*!hYxNnA!dEzJ0pA_~plM_I}}*qhGz|`6&g7YxIxm
zO&;0%`s@453%nJe%Gjl2jP(a&vw8F*yzioVi>QSxhxcn|nHfTXEGRHO3ksxsU at k*>
zSokn{%HlM)L#*6W>SM$w);ZDoWA=MB6KBmbuAMa at F-E^d-<QZ`kCqz4{3~1GML$B-
zE!@<{sVnKQd399_DQN+!u1xv39<Im&<&d0K=+j*xliYAn#Zybe^`Jvm<w#FmEyQ=Y
z)t4$ywc6KP{>khaKRpzAYsG=OvkG2#bj(NkyQ80Zp`QN0$BXMFuGc3t(VOhJVdC#2
z*M9x at J<Gox`0dIePaH<#8HpZ&+ts>$gC3dk-x}Y at +;*q+s5SCV>lw;yW`C8u*LwUJ
zx=y<$w%e|Up6<t$d6|kf-i*)dX=y=eIru%m$o&!ux|Y5Wy61iUVF`D?EkZaw9u=-R
zGXE1i$f@&h-e+El+T*J)I|HQ7zj+^N>ip$s6Yy*57P?gJmFHgTS~ho1xPfP5pnGkm
zgj*@s0oEbk at 5Tx8)x3%Bb((grHrKt*(6SM1PMTR-Jw4mK&PG!<bFXu>YxU0Vb*^@~
zK7rATA?#87fOeO58{dMt6 at Ohb_DpV%<#+;D7xHun;e)iBx$C0cfsdmtSLYEjh;vW>
zt-Iy!X1=_5Gilw+u|F|;^7f6uJwQ*wZef at 0LHN|~VlP7#?{3~7LaHjyw&d#MtBz+#
zn7TTtRw~CIlul|6%}7n*aRYD<soww&H?zN`%I|i<hG+vgrk1H~t-IP!ZX*6*=yNM?
zt90+-c!S{T<f-t#hj4{|SDxKOUUzV>O5Tie-XXc)CAi#5sG{0XQn-l})m`m(+7NPh
zny5Othc{1WC1*SBKKZpJon%^V!Qn1w+YZ{M;&C at 2U8%M6;o{4f>2LwFYaBY`X;**t
zKyW<VpU&7`I-?0{Tv8_jqDTG=xV8nmIO?Ruv>y280l4Wge(H<yPjGyipU%EB>f0XA
zvBR2<9rZTH_xYLHN7^KgCH!=47VFA&{5o?u&gG}G#{YYci}>lRR90W1U%?t=oiA#w
z;<$#N&MJk?9Jlh*wK9G>bIB_>?qbD{uKmT2(GpN*!&BYhn8r*Ho!!41a6E!pr8<th
z<{Xb=*H4o<9H()8wtg<h3-k*(UaGT$f!<B;#<7>)i{lk|b#(nI{VI+VXfdY#zW#}3
z at Fl*rglyNhb1c)rMBk<F;#j3uaja&nOV|HGf`JB-NjFS`wrQjpX&f_*ERJ=IIvk6P
zVvY at 2d#4*`8|QPp(3rw;n%PIw&1=ko9Pc#m<aoDvAIAsH;T#_`pXB(oIf~=+%y-t!
z&&<y_PBy1={K}lk at mupdj`K`tXs$FjatxVKjxp;ZB+@0;B^)ocD6iGc>dx^R>l%(X
zTKzc=um*4(Xpy@$$QsOXh&6=ceHQg=J!3ti8P-UPdbFll%Q&vEs3U8Q#VCgLlSN+E
z&sK=zFV;3{MDb82v#`f%R;SKgFV`C0^uS$%wAQ!Wb at T1oDT8jf=MH>Umf|ot&fsLF
z-07^xOFlESV9K3|Y)-#v=-orL4u>9Zzxl2^w2p@!Nnhckj*8EN`Ubhz;dmV^1KQDi
ze at EAT;l2fWrxo_oG1{?s`P$Ha+R~<!RO*07=p^lA_76Xmou^Nub)LcK>RGf6CFNd)
z!>6*N&llQs?Mv+|R%6YC-&e!IYqcNQFLS;2lePg~-o&bs5FGuBwgryfrft`Dz|-aM
zbVRGr+wk4j4)Eydd=dL>{Tw*7vp!sZif at v>0FPW`Tx at hTE;TMQx*6S#9!5{2mvOmq
zh0)u%(&%GcWn67sV_a+WHToIX8P^*(7&jU>8U2l$jRD3J##6>K#<RwA#tX(veAE6l
z;|*i9F~<0}@s9DX@t*O%@qzJ?@rm)7G1-`6Of#nQ_2`+#Y~veajxpEx-dJcXHkKO8
zjZ$N!vD#Q`tTQ$mKO38kEygxuhf!`sjGe}AV~-ItDvf={e&biOmwCB)h1uJ@((Gei
z1y5gV_BH#N*O}LwH<&k?{mq-r0p=~{t>$g!K=}J1^I`K5^HFoSIRZX^+<d}((tHYD
zf5seXK5LFLpM&FHFkduZGQU<lZvJR)q9 at k{j_yVe?JCBo2fAF8oA*QEzLRf+=Py at W
zqkoXOCUZ^j at vNblBQg_tW3#p3$lSfTd$T*|j?X+&UFD6<92I;udq8&Q%ng~7a(d?F
zXZFk5o|T_n6nrb^EA`86mX)8`J-cg8Np{z){NRT<;jE!~W3z?^Ck3YkzX^UHT$0^2
z_(O0*&R4-iTD`Pm)7qzXPV1W1GwsQ=QE4yd%*~mbHYay)+SYU<r)PS5m1kB<bxiN9
zo~7TP{&@QH=^y4?ls+@3Bz;YKMOJ=Bhm5Wnw`SbR)s5=R)zIu_nHyC8IpLg(a>wV6
z&$&pI%=u-E$|%X0ov|Qed&d6EU}mu at sq@PokTo>*mzl^$w5y-O!1;M`p-yM#mzNI(
zQhwP*&QH<8|8)hMp~P|_GvWLcjfs5_<nGP+%FEBAe&&(t=R8qQ6|H%@nFpEO)sLD{
zKNmA~&YYB&pWRi}llnm!DGQ~@SGAn2W%iSt#;c>M-RuE*`8hqg&KLZ<QUWa}tez?^
z$Q_^6QoWZG_R`551(gQm^vv2$IjDQ7`J$YQvb$zZQa_cuLwAL<D!(eNsvYRgGeUdj
zlu*kqWrP+`P=%_psWh`%LOmB$xEJ@Io)4z)!S_ztleF|`>Yc#?N;-5 at v;=GDrAnPs
zqBu;>U%{VY6|QKPH<lLm46-<g9L?gV*1OjwtOb(NL{gs2cX>J at 4eMelbk-VTg<Oo?
z+Ld1utp}dKrdT_ at wWIKpU5&iGmR?p1{0pOywr}%mjr^RB)cp#%*%mutHWK$6?OUYo
zcUTH1VJ9p=@-EVrBY9WzI|sSC8C!S@ze|v#JIJRT8QM+T$tuO3tl^JqSF(fe0eVe;
zXn(REoh>i5zPhPf+V!k~%Fu4qv$2?O((7X>^w*EmkJoNN`nG2sTn9Ymx9eT>F4`b{
z5UaWevorRc+7R^rZ0#=nTXt~1TVJ3r)b7!j;Q6^%U&bD4_vxj0c^)uY8?Chmjbn}D
zw1<?$)*eA-U#tyBZV%Q*7(<M^v<ZCI>tXFf<1yn|Z4wgsIqgfN@(bEmNamNc8A#_>
zw3$fgx3yVHDr at tR%b#eAkj<ZIi;>ThwI#^tDcVxx^fYZ5vU<9<9C`hfwgQ<wQ!7Po
z&(?lGc7LO-M1C*RRv9ad720Ow2jd6r7h{#NO51|;{#o0K1mCP}LyB+Fwj;@*BGMdv
zghVgblvIysVI=!bErN94tyLi5_h>tj^82)1NcsKRUgKBeS1pFL at 1w=Va{1L9Y!23g
z%6`$)uwU-h)6M(L`}7PY<@HRY{L^|iQhk(OgiL=$Z(zP=zOFYl-!#YQ&CPes@p=n$
zf;mBNWll6F>aEQW%}?}W%t_`{{dn^W^9u$OXP7hflh6X+>ZhOymguLN%gq(~dFBu1
zYW;k3gSk<^(A;cp*1MQn%yRu=bC<bW?|}tWU+-l#uo~zO<2h-qKSH0nz5bkaqIIJF
zJo`ePtiNELXLZ(JM5}bsUstx0{)V!Z^f#5Qq>r|)u=?m at l*OdKWA(NA>Eo>Ht?Tvi
zR)4F%{+_a)^a;v((%-i}WtaYms(skaXdk`pus++Ki)}cYexIr3;0ZrZE5M$wOPp#O
zt5KUzsG-fUzvn7n-P_oh+9K8_t7o}9TgqzeYEsG2=CG5`Ja(q|o-cYYU|qvPJHpc)
z+H(5`Z3Q!#O6{MqXy!2=b3V5GLVFia7w|Mf=*7G<&)zG!EF{KKFjP6@@oXtEqdcp&
zKhqi0();jS;fH;PFDna`aWSxvtEKciXWQTD-`IQgxx`$;ya!f*=_~AN+CZ+pQp;f<
zwH$d{Sz6Whr@U1TZq@cuJ>4$Xo7y|bV}X9Ay-mN={!zb-H at n#p{YrZc`7Xr{E9Y2k
zZz1*`V(%vQ7QT+WQ)2e9w at QpKF;?;92hyn^od{{{Aq~FkXs;qi_2sB?;zqT)lG9oC
zR{dOZynu8rCB1I;FT~!WUj>~5+7TSf?Mj~P<H<gr?4!IJsHJi!&i+oMQ$UUpa^wr)
zl;SMOHB9WVn`?xc+F)<zu1v1BLD4cKrbE}glx9DrsU(FMIL5G0stHM_^d|y+;05A>
zbv3p9C+VC>dCme at 9nBUuM?i;ffVtqmg!3}EpnzJ*fm4tTaL00LD{6mA%<b$*o2_4_
zW$E34e^Ogs&T&lTY;um1v!Y}i+C;H-tEJAi6S{-Y9n@=-5~LG8n-Z*~TtD+xcb>mP
zEyeZj(6Eo)Rm%Y9ec-$gocDqAKE2eQtN#GMth5*FtLzQ>8v8psOe^80RZzh2%a+Df
zj5p%E at wNNL4C1Wgjp;1tF6E7tP;)hDt$}-0$WB6b6Q`1patYZdaY&hvy(%A<JF{33
zJ&`t97yPQguhPY at l2pzhw@tivIVruud*{$@FQ%3BK_6YiJc at MQEvLOMr^S_#Mh<E0
zA&uRn5mjx0eDa|?yhz+WwBW}WJ(+L+LQR#!As<7#W%|WXayH-0&Y%YKkO|qyirvVC
zTtb(V;!aYGkYa=sBhdRAcv{6(@}mxMw<{S!-08&KNZgIY-ALSx@Kp{up9jz000qxg
z+>_G2OQ<KOeHVbs=jhD>ZI@~%_GE1 at J5&8do6u;9LE6g^w65dq&HC|h)Ct_53Y-OI
z=R%*0?QiwViF+m3G}4Z;=WB|mud%miW1#d5N;=bCjdZC)-b>t;v=Dw-M*i>8f_jkB
zL$vB;q_&w>xsSFtjMlUax^;tho~KOJlnJQ<r~E(-t+Y$2k<HY|0{Vf~a7H?zO{u>V
zIbX)PJGk{>Hky)kd%<NF at 5Fg$5AVcjlgL|ruw4Qj9eFpCkX at t_ciZJ|SHeUk7BZU}
z2}&DNl5dfcrqol^X1%IiiM?a-eY)QEm*ljV?-S3|9=2Ok*OzKf+b?R*+V4Sy&ym=V
zBCT&h7C%D@H<R-?TIxV}=We8RKkDEE>L5?siLBUVk0<qesD}|?HjTP?L`&EssE-Gz
zk4M0CI61!swwtJz$EcULsFz15{}<HFcqsZX6demi2SL#=b#yx=dKJ1%rmh~MuJWMI
zD@x{3wkdGVET}vSD$jy*X6Y;JZ=iOiw4l}SjR7`G$#E}pAZ8%J=Mm=A=vL7wE2w4K
zA+=io{yV|>Cvf=*Jl2B8dhl2X9ua&jIe1vI$$P!zU7Ndiq8$}IRsGC$>!%!ksz$Cj
z@;yRoTi}n?@JAH>7*9&8u at rmTgQ5NN+Tfb+w1*RqXpbenf%eBi`%A$0256tBeV?d+
z_D!`#iE?P)SzDgiqpe8PXr+mb(7q?M4}kl((7uZnO(dXwU2?t^+UG+1y3jri+UG+1
zI$(Jww4Vg+3!(j)&^{Lo2SWQUlsOwL&(Y6KR8r=-`o)PDv_ApbUkB|op?v_X+f)8^
zXq9X1d0 at B@j99&7|3r?n$YB~etRaUbq^fFDQLl_tR*=dH-d at hzF>0-XS_}KKAszY`
zBBcvyRb{+Y4jyGtYX{VFw9%1xt+$Kp$hB9B{c$n8+#Bxg!&%uPgW=SN?NYdRJQSP<
z1?Pg_D(!2Y&p}Fk$J_I$;qQ?U3+)Oxc{aH3gbS1u+yoaaX1~a_aMfqvR|<a1!EZTS
zwH%JBf}^UC)G=D#V at QbUc9r%OEpk4oZ{Qw1O|5R_?LEX&Hc_$azthT(rSI@5Yi+K!
z76gKXrxBh_sPe>|L(9z6I#P<&z&dnE2jFyjgYh%48Q5ZPFkiGcSeNp=5G_^@uT247
zn<Bkft7i<*im+%4j2P!itq3c&$h-v at 2#nVX%n86m;6v_bX!Y=}6<Oy2=K~i2#KU8m
zZx?9=KnuG!a~FR at D%8_1K-OP~?6?T%0$c+00<HkAqRdxA!M?z2+`k2kC2T71e*q|&
zLk*+RcWdZ*Z5hv2ljb_$S9FX4WZS*<`kWiU35_{72RbkYa2jVysgs}H6+oltci2Vx
zUBJD-eRh%2)$VOv3S0(s1G)n}fS$lD_Akb*z-_=l;C5gTFc`SQ-fav4h5~m2cLDbU
z4*(AW4*?GYkJ!76M}gtM2;ech!gw5bg7lvxou@cI&G{M5BRP-ao#%lUftP_-f!BdI
z0cc~41>Oe60po!Qz(inL;x}UvXJ}+#3(=#gM}MXsy_tH(cJeI)!axPE3y1=7yTa^c
z_cpHqZnt-vL+o89Wijt2{9dl_<NAKi!xO(TL$<g1BDMaq{fqeu;nbD+2Jj|v!OMJ?
z^GCoG;*}8R3&Lh{Ka2AmU@q4SdA5jWi#adhyn^r_0IU>qBk(h at 8Q4bL9Y8q{<vvFI
zIPohv@8ev>c|YfB&cAX#!1*`MzjOYB^Pimm;#|Wy!P&NZv%l{zmd at GWY;v|Z2RH{g
zr?dZKCXfx}0{K7zP!A{q8Uam!X26la(LhU}HE=A at 251Yk2RZ;J*}JS$fR4cFz?s0=
zz`4M`><X(B&>6TC9&SpDU8kLnwmSn$=`4FQt#=)*cb#60)at<bbbFmKz}`$NUPmil
zM=M at u?BPp$F~TbC&1N6q7GNOoqP@->&)l^Mz(n9f!e-cI=6CjH>pb9m-~!-Md!0pm
zJQE$!|EHtJ&O*Aa=6ao7Le6{0xrCfc$axhxmymM_IhT;@Dso*#uB*s(6}he=*AjAC
zMNWIjX%#uGBBxd4w2GWc$Y~WlxwdG=)9k&*jlfMnf8b_d8n6x60h9v~U?;HK-fIrG
z_gW_cC-d%w*dExCz=g<zi-0b`CBPNHYrtE;Y+y041o#zsV2DhpKqgcm4=Rua707}L
zWI=^KNXy5gk*^N{h5~nL`Lyc_+I0o(x`K9HLA$P?O;*q*D`=Ayw8;wEWCd-qf;L$}
zo2;NsR?sFZXp<GR$qL$J1#Pl|HdR4esi2*xHd0}J%uMr7fJwj?+|L5$04snWfR(_{
zKos6c2Qq<dAQ#973V?b*5pXQf251X(psYInB&8!-vJc+d`X79+qPMZa{N9=wcs1B2
zeNpD~S^csv&uy67HTTinzw)=&=~HlQy{?5u(XI85tp9Owuy{#>vzyFq(7oY=Mq3*j
zO^Tbm*<@~$U8JgJ^7X;mz7D_Cbk~>v9UiFp_ at I{Jfl^~stC7aaqrV9czWDC(JJEk;
zkGHsZo&L~l#-o};>$9l4D0LU5?xNIPl)8&jcTwstO5H`NyC`)RrS78CT at -m9rS78C
zU6i_uQg>16E=oN`si!FQ6s4Y`)Kiptic(Ke>M2S+MX9GK^%SL^qSRBAdWup{QR*p5
zJw>UfDD at Pjo}$!KlzNI%Pf_Y7O5H at M8+Mrm=$}zHQR;?Wo|#9J4rBt^KrWCE6ae*r
zBH&n{4bT?oKw0Xe?V at O?sBu5=0Kn{NG(;2)5k+c8k=jwDb`<FwMe0V8u2Cdn6loYm
z`Y`hvXa=a!{-c4GKx?2qsnaU#C(*f2qT8NCw>^n&dlKFDq_nvxZ7xcii_+$zw7Dp4
zE=rq=(&nPHxhQQeN}G$)=AyK at C~YoEn~T!s)ZWoSdj46!)z~O~0o6Zj01U!r9t;ct
zh5~om`_OGw=(Z~KN)<Y!3f)kJUZ_GZRGA;!`^-;(Nx)3*=K|Y+9YDEVg<PycE><BI
ztKgDW9FGG|1WpE?0A2+~1Ji&tV2}nB0S$phKog)D&=I%-ELsD{0HkBI0eS(Hz~~2D
z2V4)_06Ysk2fP5h1iS-)wecSCKClp23@ioy0NX2p{=g`Jcg)$qx4;Hq6A+>lM*xih
zdSg~|;3%L4K)Eb%vcSnY9%u)g0DMZBRH?(1I!vj<lsZhQ!<0Hqsl${yOsT_^I!vj<
zlsZhQ!<0Hqsl${yOsT_^I!vj<lsZhQ!<0Hqsl${yOsT_^I!vj<lsZhQ!<0Hqsl${y
zOsT_^I!vj<lsZhQ!<0Hqsl${yOsT_^I!vj<lsZhQ!<0Hqsl${yOsT_^I!vj<lsZhQ
z!<0Hqsl${yOsT_^I!vj<lsZhQ!`Q7Y(0ymxYtTSzwW(Zx0c^zX&$i33&dRXP%COGL
zu+GY`&dRXP%COGL&`fKwqROzK%8X}#826R-S}d9}w9{Iwnld!hTJu(W4O(g~7EGD>
z64xJcJw<flTJwAE7jnHASjF`&AjWkiPz6*22Y}y!KY<#+w#%?2$}AHI0O#3j(RORm
zc5AI}_8JSn9U5;fk~5!gxD@~`=t)ckzMv<N4cuWjp`A9Noi?GJHldWIl(LjkmQu=6
zN?A%NODSb3B`l?crIfIgl9f`bQc6-v2};4d6wFJ(xD<>_!MGHROToAlj7!0|6pTy3
zxD<>_!MGHROW6_iLOX;M4k3j at Na2vy1ODp?^rAm=Ip-?~y9)c at YI_^4ej5 at xgoF-Z
znQzu+bN+ at fTCld5>m|T4!gq5Y18Du)KA;NN5B$pW1Dt;cXg^vFVADnoJEU8j>(dKv
zfG4ss_ss#?JJLR+BMtN}0Qe#GLrDD)Qa^;$4<YqKNc|8}KV;lTyS(3Ck6c}kTwRY`
zU5{K{Z#;s1^e8YK7y&$HZ$mn5Lra9v5+Sri2rUspON7u8A+$sYEfGRXgwPTpv_uFk
z5kgCZ&=MizJMx(a%m)?#i^yXMungEv`ei^Er~q~WQ6O$_L%W2`!N`Rn*kX6u>yeDx
zu&y^F=htIhZ$|Tk%vX8-8uzbreuMiri32X?81Bab?{fbU at Hy9C5KfN~DY^|U6+%me
zkfz(vR3S7~2u&3-*YW%(U?XY%%>8E0+laFRC<k`(ENX|)WFa(J2u&73lZDV^Av9SC
zO%_6vh0s0g(LL+YJ?qgu>(M>y(LL+YJ?qhOA+%fwEf+!$tw+;^uzWXT`EJJY-E5r>
zoC%x_;L}3FZ$rXwL&9&fE=J~c1$qNF0XGA;z!!I-Z#JQCHo>8BI5ZB2#^KO792tir
zV{l{$jts$(aX2y#N5<gDI2;**8{=?e9Bz!kb#XW>4rhhntT>z%hpXanQygxJ!%cB?
z*d}z?CUn>)bl4_z*d{nE4u{3zus9qRhr{A<QVdRt!AUVVDF!En;G__o6o-@Ia8evj
zio;29I4KS%#o?qloD_$X;&4(NPKv`xaX2Xsx5VI<7~B$rTVila3~q_REg`ri4yVN6
zk`P=HgF|9)NF1(+!xbU8A`Ul%;D!)7brU*u6FPMhToH#OLU2SJj)=n%AvhuqN5tWX
zI9w2i143{>2o7K-46|hM^ilh9YClfx$Ep1|wa-^^fFj^npbgL#=m4B#$Ee*HwHu>$
zW7KYp+Ko}WF={tN?S`n`5F?a9{3cnzRrs;4#;?;C7|ZoHoR{HIYk)6j5I&v3zz|?4
zaHl;UN>@VZN+?|kr7NNILMXiuid90fN+?zd#VVm#B^0ZKVhf>GCDd97wJM=jB~)4n
zg%(1gg-~cb6dDhO#zUQjP-P)hSO^ssLWPBtsFD&@Qld&qR7r^{DN!XQs-#2<DbYeo
zv{3BU2>cj<A0zN%1b&RbgAsTz0{=zey$HM)f$t*lT?C$sz;h9JE&|U*;JFAq7lFSb
z@K*%>iojnH_$vY*Mc|_dd=!C?BJfcJK8nCc5%?$qA4TA!2z(TQk0S6<1U`zuD-n1j
z0&hg%iwHarq5dP(e}uY^Q1=n)K0@6`sP72%9ihG>)OUpXj!@qb>N`SxN2u=z^&O$U
zBh+_<`i`j9h<8bib{*W~>V+3Z^}4R+X<s0<_w^0;2lv40<5zCL7(iosU5D?9Wz##z
zrYDw7Pb{0BST>Y8v?qo)0y)16Ill`zzY95!M at 7pr9tZx%UK(<I7jk?TavYC{mIYNS
zkkh-&yScuPv+BXU##!~^-Xu)*<lg1{5%95=O^+^{9$hxnuP|p4=Jo34a-G_<+ejL!
zcek1IHlFPO%7K5<+iQg9pb5|nI1)G-XbH3iQhS2!xu-X1{Y%TTIsu)f_O7LW-w)Vh
z?=h+XM%0W0^wmcL^8tL@=5BkB)g4fyYuVbhSp5BfJy`WsKs9gx%Y8I3A6O0Sw)gSI
zKHk`e7vpNiSJYd5Ib&hd()X*kY3ciE#rtW+`)RHFNv(?1sz^=s5%$ws_e-kpa{dUI
z3Csn&T()t&11JYnj{mav(<=AVD);-jKY+YhhP+v(b;OQ59nbuk<gV<=9{9z30+$0<
zV{KlGX22Q-yRbHwu+_w02W%w%W=g&lyJk1xdx#g~90&FRRlt7W0Ps8T2T%jp_~0#|
zm~q<%Sl}J7TTkZxbk3bPcL4@5hBFu#0t^N2w3mtPdY`=-%7mdz*!Yg?dBA*N0r0cE
z#@GyO0hC=ECyughm0j!DwEM-T9c-_Lied9{YVbvD*O#EutAxD{yh-?Iw8t2(#{pRP
zrm}rM;{36_47s=rxws6QVm0=}YP>f;Lj5ovoVC<I*!-Tf=JWn4&iJaaDOO`stTwlj
z*EXJS=e&b+8D~a?&9K-NtIb_fQ!z`~#s9*}SGI8{&dNUS%=uz_wbd246g#<_)MCu)
zflbg0=uP;QgfVu8U9cLvU^RBZYO$vqQ at eAhMOA|_YA{Ca&7t<@K=~Myp99tBK+zZ!
zjX}XVP;d?uoCEcgK8-=4IZ!1AC1Ow^MrmV|G)8G+lq5zelpc$LZ469fU^oX|M$ZbK
ziojF*;Hd~aR7uWZat^~c`{0|s@J$6gQwbkLz$6SNVd^*n7GbamgGHEnj8KOW>M%kb
zM(CI9qYfj~-Ci&YQ+KL;RZ>S0>LNltM5qJR-YTgB)#fUp{a)z47n<*d-WAYVwZlqi
z9f8gfXdD6SFmzRIvl6;iK-UUrs@iEKbc|>tnQN3!U$cU~W(9rC3i_HAlyWPj+)4?z
zXispDkBfe11 at k!bwP~Ec;JljWYq(y^^*XLYoK=gd<op}s6(&BkG$edBXM9vpW2@ef
zb0eS$&<yB6SVzv}#dmP?>9bbQXRV;mT0x(+f<9}7(G@@3rNCuCH=sK}T%#vIY3R>Z
z(4VcKKU+b6wu1g_1=QYRuwSRao?*r_z_Wxs2fP5h1iS;_qo#jbVZ0A8YD53Fg8pp<
zwZ!ZnU<(i<ol4*jsM`xa-IbjC*jvnNxbDyOEnE)-$cw&kg-QC<-d1XDi#dg`8C>Io
zq;Fh74Q??P61EuF!2Kp51gMr0A>JOs_X05h8k$u=HE;m<9rzQd0c>{0&;jUc1%M-{
zQ8cO56hNC=M*%GW>Xd$V1^w&_`q>p$JKzN1JbMe=u?6nf0(WeME4EoZIja_TIp<qR
z^EQBT(I>B9o-g(g+_2x3qj74!Qd`SN)H=>eR))CVOy8`S85<qodu%7Yhh0rA#Gz&-
z)U1S>l~6MdHRDh)4&~zTypmgSc)kj%Rf at d&koy^gf5%zL93^kI at _ai`1}J&5$F8On
zaY_-V6md#XDY8S!id%U`n(P|af^lP~wT79EoC`09;om%XH;)p8;oDrN)p8C2o6(M2
z8MCeA`ET%~$#`%!P%M&MS}{DD3qR(;k9o#rKsTT}&;#fR44`E{!TBlR8K8EHS5i9+
zALT)TFg%n86~gANS}s&TYNP#m*J=HPeMs08?q_iR4)~t1h1 at R&R&l+R_}hUpAZ(Yz
zLr4I^_W*l|69Xs<e3S<t<-tdJ@KGLolm{Q>!AE)UQ67Ah2Os4 at Q6-&~WDYx0L(7FX
z%Ha(qHOk=)BnM&O3xDK6<uIen9hvXKj3205232>!7v)fO2YgWuUzEcaJGDyeJrn4_
zsO#wfsY0nTsIvp!*a2_sfH%sZj`GzgKTR3DQ4Uqg;EkP7WCy%a4n at kKL>YWh4queR
z7dzpLo$$p at _@W%XC^z?F^PGnt=6v7+fRSE!qa2x64sVoOxAB~GwdP>H9n2Nh+rhdF
ztha-88CaLOSnmdF#ts=LJ{?e=rl0NYV7wiSw}YXF-FC23SShbj*+E#9fmIn;?FN(W
zU{VGqWnfYUCcE(kcjR~$7Sd|Y>m)ZuDH*XFfK|i at 7`g2xx82aE3i?z*pDO561#MKD
z*$qvqph*>FuA<CUl(~wWc2mYG=H~Z6FZKj32d<@6px>})VrZwh7UPUA#G;8|(ZsN5
zVpudWESeY=O$>`BhD8&@qKRR}#IRsuSTHd>EHNyU7#2zl3ngYOKvxb1UIktUM$>Y~
za2^MI4onB;6Sf*y$MsLZPGC1J_hR&FSD-uBy*VQp(DX4heGE+>tL1U7M$=cL>8sK3
z)qmr0u14Ee8*#o~bT{xO at GkHXP}}2Nji#?g(^sSEtI_n;X!>e2eYMq at JS^J(9@^6$
zcz+LkzlU-5gFO(=h;`ieJSeY&=W+174QdqnZ at dkM^(-82#CQ}k^LgOE^(v%{{?dnu
z(}&qDBe=?Y;EdMB>AS>D<tgyI1S`1qJOs`NY+OcQqtwcO@(%ppqoPUAfio%^*IuGG
znS;d5VLm_{>Xy)-E}=hNLVvnMJdam!PWC8E=v$Z2w=QAsa~6H;5~Ru$?N`Pn4Zvi+
zj(85GS6M=@vV^{N34QGn`r0M*wM!V^%b{19L$5N2US$rw${YhN#F&1ZG5t7W`f<ke
z<BaLY8PktbLnZXhOX!=I&^IrkZ(d>?&a>$CIG^O5r-6~cDB?a3FcxaO47>`w4!j9a
z4*KvV^x;eB!<QK2feFAwAk~ZL^gc@*FCj8sc?j_<(E}}^2G`RAEpdCGB`H179D1NR
z^gwgW5~<x1w-;K1AE3lkz0gI3F9B9?{{yfRa6E%0j%ScK$=+xQvTKSNC;mQQKLB@|
zzX5*$e*p=&Lj&-ySr!lk(i!K?1hRo#ARj0I>H$T-|LsXE!S7Il-=V~EJc%W#Jy_)C
z6lM-OR%TpTnY7fnvYcqGaawC!Suf1AzmT5mML-we65tBpHQ+5^Hn1320#q`e=2y<Y
z*#}sjmQ9MqdSlMbfztrq)w=?{l@|iQD`DW3FqBu~E?^Y!Jn$m$GVm(!I`AeyUdCA9
zZD1TQ9+&`3#6xg9 at Cxt-Ks@scU=}b3SONS1tOR}rBK84Rt7TKlVk=$CwlaZiAQ#97
z3V?b*5pXQf251X(0D9U7pvnQLQtbE4<I*#CdgXCiQWY&ojpWtpog+iN9=Y-|9^4~$
zBzo;0IrV`4sog7&i&Vc2eUwShd_6t$^+ at ma^n%yZ3tmqzcs;$~^+ at RT^g`F0lZc~Y
zRufanc{MAsnwZtZtR|+C<<-QjCT2ByysOrXQR!w{cc2$@1Fy7SMiz{qt&T7r03HM$
z0v-ky0ZV{oz#98y<40gUumRX)zf4;jK|32k`x;@6<$fdQ&GrcRbp#%l5mqzcNZ@Fo
zCD0mZPo75FC^g=m*{{wVFk+7^t&aVJ{gPH-SKBdrq`lw%+8z$J+4d*)1m<u5SASSh
z{Mi-iJ*fEie|30X&YV*J4?9f$>@sW`joDo(&-_SS&}%#B&&_ievrp9X-S#efESB6q
z`1A7o&rz`-{XcXpJAk3_5BZZPwL<OXtc-uyepJe&+3#Sl=iBcw?=_zvfA&<MCGd{@
zg<WhjHekPGKX3EQe$~Fq&bITI(Wv5eVs>MieTn at vGw0GI<ZMk#JgA=70~0seC)%s+
zHg+rZ#Q9^Uocu8s{x^Szdtz^}-zQC>u}jy(P*PEY9aw8Uu^&>|*x%X95+$7POzgp%
zrP)1frykjv<M4lQN*?hxI!_Pf8T(#)TLQ0F@(H}D*&Pp`T52es-oO1*X^@I=C|)#m
zt+>wpV<xc1OjAut@UseZ;&4&N-iG(A4&DeAy4yeIs;lImP)O2E36q+zcQCpDo#5{}
z_D1aZ0)G726SN%rc=g2IX|JFj;`R)Ck&0XUPwFN&mD3d8+fM=18l1%+o)GuXtwZ5n
z7hA=>-XA;9s6Xe4bL|}QNNV8mwNuB!gMuYb9c({<`vwz7?dA2XJ(lAu9*yW}yMGSv
zdUyZL*{Pp@{)X_xJ{3RNrjvLi(>XLOg|FoOWZZv#Wxw^$<Eoen3oJ=>b-y~QKj+ at L
z_Kt_vi^Tj%p64A}7J2#xY59^jC5~5r8WQNRGC_FA=MGPPc(^#{!@nu{9yZP7+lMQk
zo2F1A8MF44{RT705Bjr5IsuGt at uzS?gCTWl|1k&mzxYe#IOa_AmvCgn5__^8Q8nR}
z;82}tZ}#Qa1OHc+sd*63U~iDrm6%E=7$Of$JVM8yrQ6`eb=G4Rh?Up?3$cs49<#Bg
z)?+r2^_WM>dd#C(kJ*n^na+C561+#P>4AJhDs%ZA&$`P+ctO-k_I9jfU(edijr=;W
zmVGm;;?)|=Q&@w!jg|2`_;qAPeL3qick?@))tGy<Gq62>#Xt2Yzq440nb6Lbm6+$s
zO3Z)BO3d?RC1xjGt;D=gZ?Cu4E|!&;m&i)YuB^noOS at FRSHDlYTvl23mQ|Kl$|}pN
zWR>MLMptarYh``q6RfX%MSE7(QI3^$loMqg<wvrP@?%*?`H8Hf{8ZLaekSWEC&@a>
z$+C{}b6H0 at Mb=T4$U4fYvW{|&tfTx+)=|!tb(HgD9p(43j&i=Nqg){CC>P2)%0;q{
za<QzVTq5fzm&!WIWvrt-pe>iRlRwJZ$xUkQq{e(?^G=N!$&AJ^Gmae~_NcX!+FrGG
zl2w+hoz(tNYbUiD)=rMmO<6UWDXS*4Wz}SkteVV~Rg(p>YO+{XO*UZFB<ogWy<{s{
zFL{itmpoq9OSY5slI>-^<f*b=@-$g5d84eCyh+we-YM%P?~?VBcguRodt|-jgR)-o
zAz3f^u&kGSMAl0Vm-UiQ$a={qWxeFnvR?8TSuZ(K)=NGs>m^6AV(N6^>BjVYv#>4|
zPcxT at A3MnL(^)Cp3eIlL&xFU1!LCvJGZ=6ty#P3~9UQNAl*yFc8Voq|L}H%AFAJXR
zNb0BY%Z4Y_Zr^9{%ZDe$YYJE9v3B`vbn6BD>av2lGwTH|<X2BxP7xM(S3FrgSX<28
zMt;S#q05P*Ry8-2R@8u2bS*o`_vP1s_SBE|rdm`XYnw~3y{7RqrCl|Uc2!^6RiU)2
zrqZqqX;-<jM}$G!+Dz$H>oTNu8Pd9%O6zJWtt(wx*AddX3Z->5qjlBLM at aB1ls48(
z+E_DMSAF_?{O}4iU}U-hE$uksw9(tJ6Vvgux^!uE8Pe)9q}8R%`sc>_9r_(w6Ilh_
zSig&Q$UH9EVH0VGmb61t+My}!Fvz|Xy)?_X++f8EJ5yY%8SF}NgJ!ZL#m)2!2N(nJ
z8sEZ-=(@%o^fv3sy67U>?R{E(<9_2|t(eyPxYodU(s+_MPa98j9BGW?_^k0PDUYH*
zT2IzaTgLPBOY6xBYRh<${%Ji~M{OA|(@(7@tEo+-z-wUgIz84RcD{In>o at 7S7O@A$
zXs+L)2V2B$7-P5|OHa0leKG#c_1pAli;x{3fd7Zahv4=R>#+ at yBZkNkL*$4da>Nih
zk}Yy1L*z)N$dOEuBbg#cGLa*5NZ~u<J5rl#%;kEXF^}u-jqkahZ!F+?p|KEJEix8C
zhsDNXu9p}~xL#^3<$9U1jBB-`yP-&;h9Zd?iX;k(BnpZo3W_Ak7D<#Xk|<jwQMO2;
zY>`CSB8l>mMEKE-ICB9Su!9HwbawIBr`0j4j4G{>tn{v9R2$V?tM%S>i~~rnM(pr$
zxfW2nd}s#yd|auS?Df$HpZm4uwd}vq*X+yFer7+dj at tKwI5(I#Xc_GOaTC}5&Hlu{
z*}NG)%m8zM7GyV&TX^?Y87a8Uyp1>mS%;G+GO at nM#A1<&4MZjuBNHDa{fCf at X=?8f
z;tw~6<2_&p5psE)k%j_x5m9^QJY_yboTrhV0kxk9F-IXoO=Rfv<o<&Bf@ZO|$cy0c
zlKB$j3NM>4Yjw?6kg!Ea*w?gT^L6uet<Zb}FGf99s=ui<Fh`rCwIj^8 at M#p8W6UvH
zI#T#u!pEEA@zt<`og*vQIeut<NGU#I?nDFgWBgW)k;{`fPBtfl$>-+hT79#`EFs6K
z=2S3bmAhJP#CoF~b0&T*CAGf=!#Vg&Sb=1IM{0A;xrEO%=aItqGG;R0oDV(=%msuj
zG8d8B5_1X1<>qqIT!F8p2#LRv<0=_fS#7Q+{swacblAvFLB&c3aNJ^Up`=^Qtx#_p
zb2b{7+Zlf;Fn8cBYhac!4pU&3Gl!!AdP0rE>^66kPTY)>*FJL}$NeVXRyKb%f93d_
z`5VVS%s)8(W&Xu6VJ5V?ve{2v%diZt`QsS0f*jMVG%aAI<NYbJGOP@)Gp$Unv#czx
zl{cu!%CT~|&c!QKWaU|`T(|P^4i#B-tU6p5;3X=u>RNTVu7|gX?`&9wTo>UrDzfTZ
z_1VRUT>v;9VI85F?8n&%Z&PEdG1pD3CR{hQnsVLDYQ}YQt2x(4T1Rqylywx>M_Wg8
z-NI_YbxW%y*R8BpT(`DbbKTx*&yhU^@JO+z0LSxKFP3Nh3*TM?>wMOY<yoDWrP9E<
zfc0Z}R%fd-*X%f;WytPKhV0H1M1yu?{HZ&8G#!B+y+TW~dRx7<boRPYV^e*sK7^~i
zo9d%k`)W<u|E3>tuD7ly9rh!jbnHjKQSIiGr}Qg&$G|VFY{oRvuW6!R>#Dva`b=rr
zx>$}axKmm-z}`p4aa5YMk?7F?>+Mb^<WznQM4M)cHVvj|(+tt3YIWUNj5I23$~riH
z4bh@q(1MrnD-;b{EE+UjG-xqC%PR=KlHU=GXkG<=YL5^@v}uuOQ?(0OKQy=6aV)@I
zORsW#jb9;qjUmDDcD}{+SbkZIeomznO4kOkW53{9?Iuzvde;!WTZ~t92_b67u`E_{
ztj1zcdyNIq#O(0J%8qq}C=0iMF;n)m5>3pwKfgTDyTzh+i!{cTumdXjS=v5rzxY^x
zCFKMBinZVPncDB{KT<4OxmdIL70W(lN;jLVPv=KSnhxKK6<kLz(u=rO+B!W&TN`>q
zy&>U^^hO*T>y6ReP4p&QH`AMOY_2yaMD1LXsh_N$Oqw0_j)b3vcejxJq}a8PeW^PU
zuJ$!4)-S=^Td4P7tXJ)Kb_Fqe<NGbtZ_@{A^+oHaiPo<xT0c#+eqGV}b<z6RUdC}o
z8;+fg&S<QzMo+YY()t0>^a0WILDBTNqUjr=>F?4CMaLJ5j!!opF-9<lO=)_A9jcxn
z1*PvBvRBnpTq~{LkX@^u;achbhNAleqWcR)_XkAx7mDr=i0&^G-5(I$Uue9Fm%322
zexd05LecbvqT>riyBD(m)jQxk4!?CFJ7K-c^>|}E*Y6qcaXkS)b|JfCz0dVT{Mm(~
z;~R<oE*8yQEIPYbbap^=cDm^7favUW(b)mf+3D<@wHp1p##o~r!5&&`x&G1kk?VEF
zI<D6n>$(2P_=)Qc#s;o88XLLZWNhME?bnhi+C5XWd!}gjpt0RxbX;_N&?qw)B^ON}
zG{Q!hYqf(*(5NsfxK{hP1PxX~a;<iA2^vu&%C*|lB||KLT(JNQu>f+#0;nezK(<%_
z^~3_m77L)BSOD3^AI2YOmtJNsbiA?v0%8H=(wkwI1kwHVMAHXEyXT5_FA%++Yu;|&
zj;2vPo?>%|IRs6t`aS8U>h~Dtz2?1ysNPSydB1r-*GjuL61~p1OH8;$w0J=DcR=)a
zrs(ei(ccY4e;1msny-?+(&Fi&#fwFY7m5})M2i=R7B3VnUTlsv$D+^1nd5j%X>>z0
zdWLB94AJNrqS13jqZ^{p(?p}Ei7qcTr!b$Pj%f6TqRR`->E?7&OKNn(oMq0U?6b|;
zP)up}fN1wZ(eAmT-5tGNU at E;{WG-Y*L><xV4b8>Oji at 8qy`kv!LecAmqSp&drPqth
zb>=#9{K@=@qtfvK(edf*nzo7SpBZf_WM{w-*GlWBi at whneQ$`q&li1fh`!GkeQ%h|
zcEj?Bm=P?7o#swbRu({kSO7(4l#!c4a}V<}baO8wIF=b>Zbluk3>uo1%+aVL_CZ6l
z%B<pASqTlzYUXUz5nG|5dB8ltwXzr*n!huLqmI}O4b4B9%TY(HhlXYib2{pX4bjlF
zncGoEEQy9njB>5)iH4SGnOrNYqM;RF&PN at wEgFhdQ7HCAp;!`yVnY;)^-w5wL!np<
zg<>ldihU3e`ygHHgMiov>0%!Q#6CzD`ye3pLAuxn0kIF##Xbm#eUL8pK|t(-bn6%k
z$!Q(S=vAS0oP~z9+AxY$XdQ1I&vjcyvkI+tRy(ehC6UhV;3sh1!RkP`vMPdnkCxu7
z*cL(S6zdeOJ6at%o^GAa at l5MXj%QnEb3E5Nm!q;ja>f2I#Qw+?`@<0XBUkJX!@AhI
z7^|hL)s-VV9%-3ke-w!Q@&B}U=J8b(R~)}{=DZLQlDNef1f!w?B9O3&h%AaCyD?hS
zx;4mBgTw?75fv<gTD7?00=S^%<s}epT@c)GDOOYz6huYTPi<@KQndZxhSKkum+;<G
z{^{!<{ipDGzubG~+_`h-&fGckJNKR`)KirAezaW6v2spT-s{l{tzg?MlA>Ud>>VtU
zLRMO<L~?;%0FKx3-~`^IaXJyNoCaGYPph>WtHmsm7~?9=B+1FymJuUzNQe<REyRd?
zfN_<7#E3KwvL*IJJ7)hqh+i-ao8eqypVmf~NAseaqJ`0KqX*Np9V7dGcmg|OwG3kB
zetL8sF?Xl1%GNbl4~zI7=%F-iJfeKbUqV!YUc^ovfhBT2 at nfg5!r`@88H=MhHbsXh
zXW*HGOQMS7%PUHvD@KeOUJ})f9C&(3^k(^}5hX6FIIX;dxwMsbAIAOG*i{E(MU`PO
zoj^3!F~r5KB2MnC=(_0E=<cWv3nh7FinUb4dWxN~s|MrcJA;U^lcGza*&&|lJy8NH
zCaK9AOjuus!g}<9pBRmmG?u8d)1#}R>!StHy-_{it0vEH-whYT=ykz9I}ZEn6uxJ@
zfT*#TVnN-2&2(SXK%B~?ZVPOrHrRe$VMO}lO)kgs8b`F*8PS~RMl7o((K5b*P3q=y
zCy4Y9%W^Ey*G|TcJDcd27e|*xSM#>RozeZ#a$;X5b@!ki+G0(XVnOyJQbPqcoW<6i
zNyOOs*lG_%jYNA}Sy@(FsbjLl%1PCFPGwd&wrb*d9hW6uG<lL%jm-+j)tq0cHQ6CW
zK3``BoKtnt)Jb|>mN>bxO6OM at E(o}Y%xZK=b~xEeQkNZ8+p&$=VeO>KYJDV2tnF5+
zt7@~wGF{EF*<p8G!?D?64}FDWv%{Xcfn&47Ub>lMv%}uHm1DEODb_YV$_^PXY<w|a
ziSRVGy%qtBK+o7v$n)7!b774wHHrI%Z5wqQb7jL=zykuBN1C{P0WEin9&EU0z*Ygx
zGwOJv8{(e^3j*5OqDT8RIghkBul2Up+wyYqI^>;`Hz)7+d290CA;M;qU!4E*{2BRo
z<gd-&QP8DeP{E9XDt=4J!Ezxww|gOa-~E+1lux)Pi9`9cd&aGH&${Q_^A?ZNt#L0B
zk@6*rN9kT69_2dsntR=?cN^Rr?ql~iIYIgovHBDDsr$@*?*8Gnxi8$8M6doAv8%Vc
zuiV$}8~3gIju_V8yB{ouwZ11p6l;~3<PgU?mnhaPWl!lU`NC?A#9JVkg6uCva)7jv
z1Erm`l^ycE{2)6$L9+>e?J>q;KF7E4xqc7d((mb8`PM$q=lcS`m*3m76tLgV7yA8u
zkw3r}`!@bS-`2PD2l*0zus_5f>f8In{Nerx-@$kEo&1r$vp>pr at m+m4U+T+zci+SJ
z^u2s<f3)x8kMVu|vA&-_&iD5N{6Ig*AMa1_C;GwuBtOKT?1%bcez+guNBU8Iv_Hj{
zYlAM+<=UtZ>O=ZF;#xn<8jO$XW2}_;xUSSy`h-5IPwCV8jIP#a^*McBU(i438n;tl
z)IaJ=x>jE%4)&|MPG8g4bv at Cr-_SR8qi)j8`nJ9+#kxiE^ex#(TI)N~O7`YHzR#V^
zHp=wX*e(xYi~K*%^#3l-bgDN_iB at FO7v+23jh^_ewVvkQ=5`8eO45qf(|&f_>(YB^
zMi1Pd-j{8U8}%Rcx&NleCHvb;p|`wl{e-8>#`HcFdQ|8)Qq<IQcBJ*4!lvG{0t@*>
z?AamMo<o at h498j@iOoDZ at QSBmW1fbs|1+%ZGq8@&!je53t8*Uq@hy=>X!(Q~EuRsk
z#hAM<;OzKbpLi|X;p@H*Ox<^^Ct&{RorH?F6$OYF>|!nl|5&N(4x853^>YK<Niqyp
zYl2LaU&@72C6i#cCQG$kEHzRqQ)H@4gXx+sm&y#eOlHD#T_IP>EaST1xaPuVT?cn{
zBRtj3 at KX!mrS5`{x*P6k2|UwMsgrtHCXMp2JSr<>r92@|!8tt(*R%#+X)WHLb$ER?
zz#nabAKD^Y<pY?Yk6?X1hT-{CK8MNSn?v~uF61US5Mu1Ydn|zOxC5T!F2B$(@{3_P
z?(t8;JgkO6*a$1|p`OHCa5(e6F+^KCOV8B{!x)%@&EJVx)S1}s_)VHdGlvateW4h1
z+=Y~UdYXJ>n*6+!TpH8lLsD|TFiqYqO};oyUX+q+F(bHRe#T0IVLlgP`scJ`9#_*e
zzgQdXaCtDPL)}<+g_}>0{nTw|%qn9%oW`A4LTzqkJSt|a>E$Q*8e-AUh4onlyRw~m
zdl~cHi*y#F!wb5VRr88t?PFbHN5=-ms$vUbt7Cu9*_T?%V{Td;l`u2vEW;^NTt<L(
zG73z<en?cWmw^qiBEo#iF(baFc?+K=y8QU|Sn-6j7Txs>ze|3UZv`oFIn8wOhmbEG
z63h2;umR7B<(tgo68_e~T3Q}<rW-?AW+}%Yi^~~76R#$@;Ts{hE5QcykdT{atm4Xa
zK6`a~v&o1yZMin3$YUYp){ydeNC_n{-xfzKFgX at fD_T$ybNBXoDU!JPKq()7Va|Go
z=?I?CpIq<RLHC@Xi~kVawqU)^1{?6+Sl)JZ7MZ+`yWbK^s}LXM%eJq-3R;UyOJ2<=
z^ZJl}cSw0FRc5_6NZ#E|Nq#{}T<}{`>JPyLz8x#c)nEg>jFlu=^Go=f&<BE~sgAtm
z8^<GPrCJ(N(rN_npyiFXhSb4e0xyx}JrHclRlW?V)<Ty3s7;JV7MBT@F17|j!kccr
z&IB9q%GnWCN7ll^7M^o-`B_{0wMq4c-CXfxQsPo=x_I5JR4u`J#m~wW=Yq+6r?XWT
z&hVREGV7D6wsVtd=q)CbM>FojijZ<!NLiV>4|qiFh}%t`(ROAai3_oUxz<a-gx+a7
z_|JdZcC1`+vDQ{6*6$Md_N@F@ferZlEN`oqg>0p_omXsM=LD_ArX}k#%Df?@!wZwL
zIaOx8FG#lRrX<!o<6`wz2Ul+;=>^v7T(AK)&q|WK8}wIFdD|dWd*1SmdrPTP>!ler
zf=}7<o*hz81QYlcE$=~KbKCi6NKFI@S1e!KzFj-qee>2gySBayTWRf6VB<N*6qAd!
zn}imD^*Re|$hbd8B8kIrT3Ne-30O_jECn;lt(}p?VL?r^8<>FkG|e(FQ?n0}xb_C?
zv>%wzzF at uf2QxK~K at x`xHO=F|1YD?T4giz)dY+~6+Y9@<Bjd%9@MtkuuO2+*dcl41
z^<<OJ@?@SP!x+=rU|A&JlsgM9%`AyduyV6u>dX^)6g<{k7`AKq-xUkvdRVdB;k8Pm
z*ZAL)I!?~pY$j==l;G*vv`cEMfGMlxyssbVhv9zAV>G&x_fL|u&s=1Ob6iXKw$MJD
zwSu9}u3(JmJG-a0g%pb?b(FOM<4R4(o<ywo!`9NUmC~~Q(5z)`ZgkMH7G+y@ru+H3
z>k8a$>^W*BU3Nr}t;&#DT|4TtSx>C|?oaNcGzrfV_h<JPBtp%x@>0`zgfXHO{>4tx
z(fo^Ykd(;5a)@h`_Hr0ntzZ*7aNoL9yGbi>7!0J at e5o8*1&x*Aju0!G$4VR~hoq&B
zi*lu(93@?(o0Li)IYy36OD&`&v}xi7ieOsXhFZ*Z%jHnLSZlOar|49jmU)CuOQpKy
zI+fI1j!QBOmP;G*NtMsek(p+9DmSxC(r?!hv>rE+J>wmcj6^Qi<rq;NOs(A?v%!QK
zo#|N1&b{euy{zW*xu}C%y=xEu2#k9f%r2{&Nq6ZXJ*AiQ7V9;RGTS#D%|{BYuYlY(
wx=rpax7oez-f{1`E$%%Tz^YXPWsvlj<Iyh2xYlB>_CWH%Dwjs=%*9&#Zyq{u{Qv*}

literal 0
HcmV?d00001

-- 
2.25.0.rc1.283.g88dfdc4193-goog

^ permalink raw reply related	[flat|nested] 53+ messages in thread

* [PATCH 02/33] video: Support truetype fonts on a 32-bit display
  2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
@ 2020-01-12 19:59   ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 19:59 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Sun, 12 Jan 2020 12:05:53 -0700
Simon Glass sjg at chromium.org wrote:

> At present only a 16bpp display is supported for Truetype fonts. Add
> support for 32bpp also since this is quite common.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 03/33] video: sandbox: Enable all colour depths
  2020-01-12 19:05 ` [PATCH 03/33] video: sandbox: Enable all colour depths Simon Glass
@ 2020-01-12 20:02   ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:02 UTC (permalink / raw)
  To: u-boot

On Sun, 12 Jan 2020 12:05:54 -0700
Simon Glass sjg at chromium.org wrote:

> For sandbox we want to have the maximum possible build coverage, so enable
> all colour depths for video.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 05/33] power-domain: Rename free() to rfree()
  2020-01-12 19:05   ` Simon Glass
@ 2020-01-12 20:05     ` Anatolij Gustschin
  -1 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:05 UTC (permalink / raw)
  To: u-boot

On Sun, 12 Jan 2020 12:05:56 -0700
Simon Glass sjg at chromium.org wrote:

> This function name conflicts with our desire to #define free() to
> something else on sandbox. Since it deals with resources, rename it to
> rfree().
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: [PATCH 05/33] power-domain: Rename free() to rfree()
@ 2020-01-12 20:05     ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:05 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, GSS_MTK_Uboot_upstream, Jaehoon Chung,
	Lokesh Vutla, Neil Armstrong, Nishanth Menon, Patrick Wildt,
	Peng Fan, Ryder Lee, Weijie Gao, Ye Li, u-boot-amlogic

On Sun, 12 Jan 2020 12:05:56 -0700
Simon Glass sjg@chromium.org wrote:

> This function name conflicts with our desire to #define free() to
> something else on sandbox. Since it deals with resources, rename it to
> rfree().
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 27/33] sandbox: sdl: Add an option to double the screen size
  2020-01-12 19:06 ` [PATCH 27/33] sandbox: sdl: Add an option to double the screen size Simon Glass
@ 2020-01-12 20:11   ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:11 UTC (permalink / raw)
  To: u-boot

On Sun, 12 Jan 2020 12:06:18 -0700
Simon Glass sjg at chromium.org wrote:

> On high-DPI displays U-Boot's LCD window can look very small. Add a
> -K flag to expand it to make things easier to read, while still using
> the existing resolution internally.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 28/33] sandbox: Support changing the LCD colour depth
  2020-01-12 19:06 ` [PATCH 28/33] sandbox: Support changing the LCD colour depth Simon Glass
@ 2020-01-12 20:15   ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:15 UTC (permalink / raw)
  To: u-boot

On Sun, 12 Jan 2020 12:06:19 -0700
Simon Glass sjg at chromium.org wrote:

> Add a new device-tree property to control the colour depth. At present we
> support 16bpp and 32bpp.
> 
> While we are here, update the code to use livetree.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 29/33] dm: core: Require users of devres to include the header
  2020-01-12 19:06   ` Simon Glass
@ 2020-01-12 20:29     ` Anatolij Gustschin
  -1 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:29 UTC (permalink / raw)
  To: u-boot

On Sun, 12 Jan 2020 12:06:20 -0700
Simon Glass sjg at chromium.org wrote:

> At present devres.h is included in all files that include dm.h but few
> make use of it. Also this pulls in linux/compat which adds several more
> headers. Drop the automatic inclusion and require files to include devres
> themselves. This provides a good indication of which files use devres.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: [PATCH 29/33] dm: core: Require users of devres to include the header
@ 2020-01-12 20:29     ` Anatolij Gustschin
  0 siblings, 0 replies; 53+ messages in thread
From: Anatolij Gustschin @ 2020-01-12 20:29 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, AKASHI Takahiro, Adam Ford, Alexander Graf,
	Andre Przywara, Andreas Dannenberg, Andrew F. Davis, Andy Yan,
	Anup Patel, Atish Patra, Bin Meng, Boris Brezillon, Carlo Caione,
	Cédric Le Goater, Daniel Schwierzeck, Derald D. Woods,
	Eddie James, Eugen Hristev, Eugeniu Rosca, Fabien Dessenne,
	Fabio Estevam, Faiz Abbas, Frank Wunderlich, Fugang Duan,
	GSS_MTK_Uboot_upstream, Gregory CLEMENT, Grygorii Strashko,
	Heiko Schocher, Heiko Stuebner, Heinrich Schuchardt,
	Horatiu Vultur, Jaehoon Chung, Jagan Teki, Jean-Jacques Hiblot,
	Jens Wiklander, Joe Hershberger, Joel Stanley, Keerthy,
	Kever Yang, Kyungmin Park, Lars Povlsen, Levin Du, Lokesh Vutla,
	Lukas Auer, Lukasz Majewski, Marek Szyprowski, Marek Vasut,
	Marek Vasut, Maxime Ripard, Michal Simek, Michal Suchanek,
	Miquel Raynal, NXP i.MX U-Boot Team  <uboot-imx@nxp.com>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Nishanth Menon, Patrice Chotard, Patrick Delaunay,
	Pavel Herrmann, Peng Fan, Peter Ujfalusi, Philipp Tomsich,
	Philippe Reynes, Priyanka Jain, Quentin Schulz, Ramon Fried,
	Rick Chen, Roger Quadros, Ryder Lee, Sagar Shrikant Kadam,
	Sekhar Nori, Sergey Kubushyn, Sherry Sun, Shyam Saini,
	Simon Goldschmidt, Stefan Agner, Stefan Roese, Stefano Babic,
	Suman Anna, T Karthik Reddy, Trent Piepho, Vignesh R,
	Vladimir Oltean, Weijie Gao, William Zhang, Ye Li, titron,
	u-boot-amlogic, uboot-stm32, 默默

On Sun, 12 Jan 2020 12:06:20 -0700
Simon Glass sjg@chromium.org wrote:

> At present devres.h is included in all files that include dm.h but few
> make use of it. Also this pulls in linux/compat which adds several more
> headers. Drop the automatic inclusion and require files to include devres
> themselves. This provides a good indication of which files use devres.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Anatolij Gustschin <agust@denx.de>

--
Anatolij

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 09/33] dma: Rename free() to rfree()
  2020-01-12 19:06 ` [PATCH 09/33] dma: " Simon Glass
@ 2020-01-13  7:41   ` Peter Ujfalusi
  0 siblings, 0 replies; 53+ messages in thread
From: Peter Ujfalusi @ 2020-01-13  7:41 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 12/01/2020 21.06, Simon Glass wrote:
> This function name conflicts with our desire to #define free() to
> something else on sandbox. Since it deals with resources, rename it to
> rfree().
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
>  drivers/dma/dma-uclass.c       | 4 ++--
>  drivers/dma/sandbox-dma-test.c | 2 +-
>  drivers/dma/ti/k3-udma.c       | 2 +-
>  include/dma-uclass.h           | 4 ++--
>  4 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/dma/dma-uclass.c b/drivers/dma/dma-uclass.c
> index 5598bca21c..a0159d7888 100644
> --- a/drivers/dma/dma-uclass.c
> +++ b/drivers/dma/dma-uclass.c
> @@ -122,10 +122,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..5aa7838ff5 100644
> --- a/drivers/dma/sandbox-dma-test.c
> +++ b/drivers/dma/sandbox-dma-test.c
> @@ -229,7 +229,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_free,

Please also change the name of the implementing callback function:
s/sandbox_dma_free/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 f7128610c5..23d6ed0697 100644
> --- a/drivers/dma/ti/k3-udma.c
> +++ b/drivers/dma/ti/k3-udma.c
> @@ -1720,7 +1720,7 @@ static const struct dma_ops udma_ops = {
>  	.transfer	= udma_transfer,
>  	.of_xlate	= udma_of_xlate,
>  	.request	= udma_request,
> -	.free		= udma_free,
> +	.rfree		= udma_free,

Same here.

>  	.enable		= udma_enable,
>  	.disable	= udma_disable,
>  	.send		= udma_send,
> 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.
>  	 *
> 

- Péter

Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 33/33] video: Drop the Nimbus font
  2020-01-12 19:06 ` [PATCH 33/33] video: Drop the Nimbus font Simon Glass
@ 2020-01-13  8:28   ` Jonathan Gray
  0 siblings, 0 replies; 53+ messages in thread
From: Jonathan Gray @ 2020-01-13  8:28 UTC (permalink / raw)
  To: u-boot

On Sun, Jan 12, 2020 at 12:06:24PM -0700, Simon Glass wrote:
> There is some concern that this font may be GPLv3 rather than GPLv2. This
> is is not desirable in U-Boot. Replace it with Roboto which has an Apache
> license.
> 
> See discussion here:
> 
> https://www.mail-archive.com/u-boot at lists.denx.de/msg335913.html

> diff --git a/drivers/video/fonts/Kconfig b/drivers/video/fonts/Kconfig
> index c692fa9602..1b8b59311e 100644
> --- a/drivers/video/fonts/Kconfig
> +++ b/drivers/video/fonts/Kconfig
> @@ -4,19 +4,19 @@
>  
>  menu "TrueType Fonts"
>  
> -config CONSOLE_TRUETYPE_NIMBUS
> -	bool "Nimbus Sans Regular"
> +config CONSOLE_TRUETYPE_ROBOTO
> +	bool "Roboto Regular"
>  	depends on CONSOLE_TRUETYPE
>  	default y
>  	help
> -	  Nimbus Sans L is a version of Nimbus Sans using Adobe font sources.
> -	  It was designed in 1987. A subset of Nimbus Sans L were released
> -	  under the GPL. Although the characters are not exactly the same,
> -	  Nimbus Sans L has metrics almost identical to Helvetica and Arial.
> -	  (From Wikipedia, the free encyclopedia)
> -	  From: https://fontlibrary.org/en/font/nimbus-sans-l
> -	  License: GNU GPL v3
> -	  http://www.gnu.org/copyleft/gpl.html
> +	  Roboto was created in 2011 by Christian Robertson at Google, and
> +	  received a significant redesign in 2014. It is a sans-serif grotesque,
> +	  which is the same classification as Helvetica and Akzidenz-Grotesk.
> +	  Roboto is the default font on the Android mobile phone operating
> +	  system.
> +	  From: https://fontlibrary.org/en/font/roboto
> +	  License: Apache 2.0
> +	  https://www.apache.org/licenses/LICENSE-2.0

https://www.gnu.org/licenses/license-list.en.html#apache2

"Please note that this license is not compatible with GPL version 2"

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 00/33] sandbox: Move to SDL2
  2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
                   ` (32 preceding siblings ...)
  2020-01-12 19:06 ` [PATCH 33/33] video: Drop the Nimbus font Simon Glass
@ 2020-02-12 12:07 ` Wolfgang Denk
  2020-02-12 17:14   ` Simon Glass
  33 siblings, 1 reply; 53+ messages in thread
From: Wolfgang Denk @ 2020-02-12 12:07 UTC (permalink / raw)
  To: u-boot

Dear Simon,

In message <20200112190624.79077-1-sjg@chromium.org> you wrote:
> This series handles moving sandbox to the latest version of SDL, SDL2. It
> provides a few more features, better performance and has been around for
> long enough that it is present in distributions in the last several years.

One thing that I never really understood is what SDL is actually
good for?  Yes, I read in  doc/arch/sandbox.rst  that it provides
"display/keyboard support" - but what exactly can I do with a "SDL
enhanced" U-Boot compared to a non-SDL sandbox configuration?

And why is this the default?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Let the programmers be many and the managers few -- then all will  be
productive.               -- Geoffrey James, "The Tao of Programming"

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 10/33] mtd: Rename free() to rfree()
  2020-01-12 19:06 ` [PATCH 10/33] mtd: " Simon Glass
@ 2020-02-12 13:13   ` Masahiro Yamada
  2020-02-12 17:14     ` Simon Glass
  0 siblings, 1 reply; 53+ messages in thread
From: Masahiro Yamada @ 2020-02-12 13:13 UTC (permalink / raw)
  To: u-boot

On Mon, Jan 13, 2020 at 4:08 AM Simon Glass <sjg@chromium.org> wrote:
>
> This function name conflicts with our desire to #define free() to
> something else on sandbox. Since it deals with resources, rename it to
> rfree().
>
> Signed-off-by: Simon Glass <sjg@chromium.org>


I noticed this commit was merged recently.

Now 'free' is a reserved keyword
you cannot use in U-Boot.


Commit cc92c3c thru cf23c7c are horrible.


Commit cfda60f should have used
'static inline' instead of #define.

I cannot believe it.



> ---
>
>  drivers/mtd/mtdcore.c             | 4 ++--
>  drivers/mtd/nand/raw/denali.c     | 2 +-
>  drivers/mtd/nand/spi/core.c       | 2 +-
>  drivers/mtd/nand/spi/gigadevice.c | 2 +-
>  drivers/mtd/nand/spi/macronix.c   | 2 +-
>  drivers/mtd/nand/spi/micron.c     | 2 +-
>  drivers/mtd/nand/spi/winbond.c    | 2 +-
>  include/linux/mtd/mtd.h           | 4 ++--
>  8 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index dd04d676d5..838c288318 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -1179,10 +1179,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/nand/raw/denali.c b/drivers/mtd/nand/raw/denali.c
> index 0a7ca8a8df..f0b528485c 100644
> --- a/drivers/mtd/nand/raw/denali.c
> +++ b/drivers/mtd/nand/raw/denali.c
> @@ -1178,7 +1178,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/spi/core.c b/drivers/mtd/nand/spi/core.c
> index cb8ffa3fa9..fba8cc056a 100644
> --- a/drivers/mtd/nand/spi/core.c
> +++ b/drivers/mtd/nand/spi/core.c
> @@ -1021,7 +1021,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..e329c3cfc0 100644
> --- a/drivers/mtd/nand/spi/gigadevice.c
> +++ b/drivers/mtd/nand/spi/gigadevice.c
> @@ -103,7 +103,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..1119677f6f 100644
> --- a/drivers/mtd/nand/spi/macronix.c
> +++ b/drivers/mtd/nand/spi/macronix.c
> @@ -47,7 +47,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..9c24542f96 100644
> --- a/drivers/mtd/nand/spi/micron.c
> +++ b/drivers/mtd/nand/spi/micron.c
> @@ -63,7 +63,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 eac811d97c..f3446e71b9 100644
> --- a/drivers/mtd/nand/spi/winbond.c
> +++ b/drivers/mtd/nand/spi/winbond.c
> @@ -59,7 +59,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/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);
>  };
>
>  /*
> --
> 2.25.0.rc1.283.g88dfdc4193-goog
>


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 10/33] mtd: Rename free() to rfree()
  2020-02-12 13:13   ` Masahiro Yamada
@ 2020-02-12 17:14     ` Simon Glass
  2020-02-13  9:05       ` Simon Goldschmidt
  0 siblings, 1 reply; 53+ messages in thread
From: Simon Glass @ 2020-02-12 17:14 UTC (permalink / raw)
  To: u-boot

Hi Masahiro,

On Wed, 12 Feb 2020 at 06:14, Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> On Mon, Jan 13, 2020 at 4:08 AM Simon Glass <sjg@chromium.org> wrote:
> >
> > This function name conflicts with our desire to #define free() to
> > something else on sandbox. Since it deals with resources, rename it to
> > rfree().
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
>
>
> I noticed this commit was merged recently.
>
> Now 'free' is a reserved keyword
> you cannot use in U-Boot.
>
>
> Commit cc92c3c thru cf23c7c are horrible.
>
>
> Commit cfda60f should have used
> 'static inline' instead of #define.
>
> I cannot believe it.

Are you sure you understand the problem I was trying to solve? I am
using dlmalloc's existing means of adding a prefix, but I'm sure we
could change it to another way.

If we define malloc() as dlmalloc() in dlmalloc.c, then we could add a
declaration in dlmalloc.h that uses static inline to convert calls to
malloc() to call dlmalloc(). Then anything that doesn't include
malloc.h would still call the C library malloc(). Is that what you are
thinking?

I did look at using a link script instead but it is pretty messy.

What do you mean by 'free' being a reserved keyword? Where? So is
'rfree' a good substitute or do you suggest something else?

Regards,
Simon

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 00/33] sandbox: Move to SDL2
  2020-02-12 12:07 ` [PATCH 00/33] sandbox: Move to SDL2 Wolfgang Denk
@ 2020-02-12 17:14   ` Simon Glass
  0 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-02-12 17:14 UTC (permalink / raw)
  To: u-boot

Hi Wolfgang,

On Wed, 12 Feb 2020 at 05:07, Wolfgang Denk <wd@denx.de> wrote:
>
> Dear Simon,
>
> In message <20200112190624.79077-1-sjg@chromium.org> you wrote:
> > This series handles moving sandbox to the latest version of SDL, SDL2. It
> > provides a few more features, better performance and has been around for
> > long enough that it is present in distributions in the last several years.
>
> One thing that I never really understood is what SDL is actually
> good for?  Yes, I read in  doc/arch/sandbox.rst  that it provides
> "display/keyboard support" - but what exactly can I do with a "SDL
> enhanced" U-Boot compared to a non-SDL sandbox configuration?

Yes it provides display, keyboard and sound (beep) emulation, so you
can develop, use and test those features.

>
> And why is this the default?

Because sandbox tried to enable everything it can to provide the
widest possible test coverage. If the features were not built/testing
then they might not actually work!

I might have misunderstood what you are getting at here.

Regards,
Simon

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 10/33] mtd: Rename free() to rfree()
  2020-02-12 17:14     ` Simon Glass
@ 2020-02-13  9:05       ` Simon Goldschmidt
  2020-02-14 19:16         ` Simon Glass
  0 siblings, 1 reply; 53+ messages in thread
From: Simon Goldschmidt @ 2020-02-13  9:05 UTC (permalink / raw)
  To: u-boot

On Wed, Feb 12, 2020 at 6:14 PM Simon Glass <sjg@chromium.org> wrote:
>
> Hi Masahiro,
>
> On Wed, 12 Feb 2020 at 06:14, Masahiro Yamada <masahiroy@kernel.org> wrote:
> >
> > On Mon, Jan 13, 2020 at 4:08 AM Simon Glass <sjg@chromium.org> wrote:
> > >
> > > This function name conflicts with our desire to #define free() to
> > > something else on sandbox. Since it deals with resources, rename it to
> > > rfree().
> > >
> > > Signed-off-by: Simon Glass <sjg@chromium.org>
> >
> >
> > I noticed this commit was merged recently.
> >
> > Now 'free' is a reserved keyword
> > you cannot use in U-Boot.
> >
> >
> > Commit cc92c3c thru cf23c7c are horrible.
> >
> >
> > Commit cfda60f should have used
> > 'static inline' instead of #define.
> >
> > I cannot believe it.
>
> Are you sure you understand the problem I was trying to solve? I am
> using dlmalloc's existing means of adding a prefix, but I'm sure we
> could change it to another way.
>
> If we define malloc() as dlmalloc() in dlmalloc.c, then we could add a
> declaration in dlmalloc.h that uses static inline to convert calls to
> malloc() to call dlmalloc(). Then anything that doesn't include
> malloc.h would still call the C library malloc(). Is that what you are
> thinking?

There is no "malloc()" in dlmalloc.c. It is called "mALLOc()" and by defining
USE_DL_PREFIX, you already have converted that to be linked as "dlmalloc()".

I think there should be no difference in who calls what when converting your
defines to static inline functions.

And yes, I also dislike the other patches that remove all occurrences of
'free'. I think without knowing the backgrounds of your patches, that just
looks strange.

Regards,
Simon

>
> I did look at using a link script instead but it is pretty messy.
>
> What do you mean by 'free' being a reserved keyword? Where? So is
> 'rfree' a good substitute or do you suggest something else?
>
> Regards,
> Simon

^ permalink raw reply	[flat|nested] 53+ messages in thread

* [PATCH 10/33] mtd: Rename free() to rfree()
  2020-02-13  9:05       ` Simon Goldschmidt
@ 2020-02-14 19:16         ` Simon Glass
  0 siblings, 0 replies; 53+ messages in thread
From: Simon Glass @ 2020-02-14 19:16 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Thu, 13 Feb 2020 at 02:06, Simon Goldschmidt
<simon.k.r.goldschmidt@gmail.com> wrote:
>
> On Wed, Feb 12, 2020 at 6:14 PM Simon Glass <sjg@chromium.org> wrote:
> >
> > Hi Masahiro,
> >
> > On Wed, 12 Feb 2020 at 06:14, Masahiro Yamada <masahiroy@kernel.org> wrote:
> > >
> > > On Mon, Jan 13, 2020 at 4:08 AM Simon Glass <sjg@chromium.org> wrote:
> > > >
> > > > This function name conflicts with our desire to #define free() to
> > > > something else on sandbox. Since it deals with resources, rename it to
> > > > rfree().
> > > >
> > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > >
> > >
> > > I noticed this commit was merged recently.
> > >
> > > Now 'free' is a reserved keyword
> > > you cannot use in U-Boot.
> > >
> > >
> > > Commit cc92c3c thru cf23c7c are horrible.
> > >
> > >
> > > Commit cfda60f should have used
> > > 'static inline' instead of #define.
> > >
> > > I cannot believe it.
> >
> > Are you sure you understand the problem I was trying to solve? I am
> > using dlmalloc's existing means of adding a prefix, but I'm sure we
> > could change it to another way.
> >
> > If we define malloc() as dlmalloc() in dlmalloc.c, then we could add a
> > declaration in dlmalloc.h that uses static inline to convert calls to
> > malloc() to call dlmalloc(). Then anything that doesn't include
> > malloc.h would still call the C library malloc(). Is that what you are
> > thinking?
>
> There is no "malloc()" in dlmalloc.c. It is called "mALLOc()" and by defining
> USE_DL_PREFIX, you already have converted that to be linked as "dlmalloc()".
>
> I think there should be no difference in who calls what when converting your
> defines to static inline functions.
>
> And yes, I also dislike the other patches that remove all occurrences of
> 'free'. I think without knowing the backgrounds of your patches, that just
> looks strange.

OK I think that will work. I was trying to use what is there already,
but it is a bit ugly.

Regards,
Simon

^ permalink raw reply	[flat|nested] 53+ messages in thread

end of thread, other threads:[~2020-02-14 19:16 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-12 19:05 [PATCH 00/33] sandbox: Move to SDL2 Simon Glass
2020-01-12 19:05 ` [PATCH 01/33] sandbox: Sort the help options Simon Glass
2020-01-12 19:05 ` [PATCH 02/33] video: Support truetype fonts on a 32-bit display Simon Glass
2020-01-12 19:59   ` Anatolij Gustschin
2020-01-12 19:05 ` [PATCH 03/33] video: sandbox: Enable all colour depths Simon Glass
2020-01-12 20:02   ` Anatolij Gustschin
2020-01-12 19:05 ` [PATCH 04/33] mailbox: Rename free() to rfree() Simon Glass
2020-01-12 19:05 ` [PATCH 05/33] power-domain: " Simon Glass
2020-01-12 19:05   ` Simon Glass
2020-01-12 20:05   ` Anatolij Gustschin
2020-01-12 20:05     ` Anatolij Gustschin
2020-01-12 19:05 ` [PATCH 06/33] reset: " Simon Glass
2020-01-12 19:05   ` Simon Glass
2020-01-12 19:05 ` [PATCH 07/33] gpio: " Simon Glass
2020-01-12 19:05 ` [PATCH 08/33] clk: " Simon Glass
2020-01-12 19:06 ` [PATCH 09/33] dma: " Simon Glass
2020-01-13  7:41   ` Peter Ujfalusi
2020-01-12 19:06 ` [PATCH 10/33] mtd: " Simon Glass
2020-02-12 13:13   ` Masahiro Yamada
2020-02-12 17:14     ` Simon Glass
2020-02-13  9:05       ` Simon Goldschmidt
2020-02-14 19:16         ` Simon Glass
2020-01-12 19:06 ` [PATCH 11/33] sandbox: Rename 'free' variable Simon Glass
2020-01-12 19:06 ` [PATCH 12/33] sandbox: Use a prefix for all allocation functions Simon Glass
2020-01-12 19:06 ` [PATCH 13/33] exports: Add the malloc.h header Simon Glass
2020-01-12 19:06 ` [PATCH 14/33] string: Allow arch override of strndup() also Simon Glass
2020-01-12 19:06 ` [PATCH 15/33] sandbox: Rename strdup() functions Simon Glass
2020-01-12 19:06 ` [PATCH 16/33] sandbox: Drop use of special os_malloc() where possible Simon Glass
2020-01-12 19:06 ` [PATCH 17/33] sandbox: Drop os_realloc() Simon Glass
2020-01-12 19:06 ` [PATCH 18/33] sandbox: Ensure that long-options array is terminated Simon Glass
2020-01-12 19:06 ` [PATCH 19/33] sandbox: Add a new header for the system malloc() Simon Glass
2020-01-12 19:06 ` [PATCH 20/33] sound: Add a new stop_play() method Simon Glass
2020-01-12 19:06 ` [PATCH 21/33] sandbox: sound: Handle errors better in sound_beep() Simon Glass
2020-01-12 19:06 ` [PATCH 22/33] sandbox: Add comments to the sdl struct Simon Glass
2020-01-12 19:06 ` [PATCH 23/33] sandbox: sdl: Improve error handling Simon Glass
2020-01-12 19:06 ` [PATCH 24/33] sandbox: sdl: Support waiting for audio to complete Simon Glass
2020-01-12 19:06 ` [PATCH 25/33] gitlab: Disable SDL when building sandbox Simon Glass
2020-01-12 19:06 ` [PATCH 26/33] sandbox: sdl: Move to use SDL2 Simon Glass
2020-01-12 19:06 ` [PATCH 27/33] sandbox: sdl: Add an option to double the screen size Simon Glass
2020-01-12 20:11   ` Anatolij Gustschin
2020-01-12 19:06 ` [PATCH 28/33] sandbox: Support changing the LCD colour depth Simon Glass
2020-01-12 20:15   ` Anatolij Gustschin
2020-01-12 19:06 ` [PATCH 29/33] dm: core: Require users of devres to include the header Simon Glass
2020-01-12 19:06   ` Simon Glass
2020-01-12 20:29   ` Anatolij Gustschin
2020-01-12 20:29     ` Anatolij Gustschin
2020-01-12 19:06 ` [PATCH 30/33] dm: core: Create a new header file for 'compat' features Simon Glass
2020-01-12 19:06 ` [PATCH 31/33] dm: core: Drop the inclusion of linux/compat.h in dm.h Simon Glass
2020-01-12 19:06 ` [PATCH 32/33] sandbox: Complete migration away from os_malloc() Simon Glass
2020-01-12 19:06 ` [PATCH 33/33] video: Drop the Nimbus font Simon Glass
2020-01-13  8:28   ` Jonathan Gray
2020-02-12 12:07 ` [PATCH 00/33] sandbox: Move to SDL2 Wolfgang Denk
2020-02-12 17:14   ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.