All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: U-Boot Mailing List <u-boot@lists.denx.de>
Cc: "Tom Rini" <trini@konsulko.com>,
	"Jonathan A . Kollasch" <jakllsch@kollasch.net>,
	"Marek Vasut" <marex@denx.de>,
	"Heinrich Schuchardt" <xypron.glpk@gmx.de>,
	"Marek Behún" <marek.behun@nic.cz>,
	"Eugeniu Rosca" <erosca@de.adit-jv.com>,
	"Roland Gaudig" <roland.gaudig@weidmueller.com>,
	"Stefan Herbrechtsmeier" <stefan.herbrechtsmeier@weidmueller.com>,
	"Sean Anderson" <seanga2@gmail.com>,
	"Simon Glass" <sjg@chromium.org>
Subject: [PATCH v2 02/14] global: Convert simple_strtoul() with hex to hextoul()
Date: Sat, 24 Jul 2021 09:03:29 -0600	[thread overview]
Message-ID: <20210724150341.243074-3-sjg@chromium.org> (raw)
In-Reply-To: <20210724150341.243074-1-sjg@chromium.org>

It is a pain to have to specify the value 16 in each call. Add a new
hextoul() function and update the code to use it.

Add a proper comment to simple_strtoul() while we are here.

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

(no changes since v1)

 arch/arm/cpu/armv8/fsl-layerscape/fdt.c       | 12 ++--
 arch/arm/lib/semihosting.c                    |  2 +-
 arch/arm/mach-imx/cmd_dek.c                   |  4 +-
 arch/arm/mach-imx/cmd_mfgprot.c               |  2 +-
 arch/arm/mach-imx/cmd_nandbcb.c               | 10 ++--
 arch/arm/mach-imx/hab.c                       |  6 +-
 arch/arm/mach-imx/imx8/ahab.c                 |  2 +-
 arch/arm/mach-imx/imx8/snvs_security_sc.c     | 54 ++++++++---------
 arch/arm/mach-imx/imx_bootaux.c               |  2 +-
 arch/arm/mach-imx/mx6/mp.c                    |  2 +-
 arch/arm/mach-keystone/cmd_mon.c              |  8 +--
 arch/arm/mach-snapdragon/misc.c               |  2 +-
 arch/arm/mach-socfpga/misc.c                  |  2 +-
 arch/arm/mach-socfpga/vab.c                   |  4 +-
 arch/arm/mach-stm32mp/cmd_stm32key.c          |  4 +-
 .../cmd_stm32prog/cmd_stm32prog.c             |  4 +-
 arch/arm/mach-uniphier/board_late_init.c      |  2 +-
 arch/arm/mach-zynqmp/mp.c                     |  2 +-
 arch/mips/mach-octeon/bootoctlinux.c          |  5 +-
 arch/nds32/lib/bootm.c                        |  2 +-
 arch/nios2/lib/bootm.c                        |  2 +-
 arch/powerpc/cpu/mpc83xx/ecc.c                | 14 ++---
 arch/powerpc/cpu/mpc85xx/mp.c                 |  2 +-
 arch/sh/lib/zimageboot.c                      |  5 +-
 arch/x86/lib/zimage.c                         | 14 ++---
 board/BuS/eb_cpu5282/eb_cpu5282.c             |  2 +-
 board/Marvell/octeontx2/board.c               |  2 +-
 board/amlogic/beelink-s922x/beelink-s922x.c   |  2 +-
 board/amlogic/odroid-n2/odroid-n2.c           |  2 +-
 board/amlogic/vim3/vim3.c                     |  2 +-
 board/bluewater/gurnard/gurnard.c             |  2 +-
 board/cavium/thunderx/atf.c                   |  8 +--
 board/esd/meesc/meesc.c                       |  2 +-
 board/freescale/common/cmd_esbc_validate.c    |  2 +-
 board/freescale/common/fsl_validate.c         |  2 +-
 board/freescale/common/sys_eeprom.c           |  4 +-
 board/freescale/lx2160a/eth_lx2160aqds.c      |  2 +-
 board/freescale/lx2160a/eth_lx2162aqds.c      |  2 +-
 board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c   |  2 +-
 board/freescale/p2041rdb/cpld.c               |  4 +-
 board/gateworks/gw_ventana/common.c           |  2 +-
 board/gateworks/gw_ventana/gw_ventana.c       |  2 +-
 board/gdsys/common/osd.c                      | 18 +++---
 board/gdsys/common/osd_cmd.c                  | 16 ++---
 board/keymile/common/common.c                 |  4 +-
 board/kontron/sl28/cmds.c                     |  2 +-
 board/menlo/m53menlo/m53menlo.c               |  2 +-
 board/renesas/stout/cpld.c                    |  4 +-
 board/renesas/ulcb/cpld.c                     |  4 +-
 board/siemens/common/factoryset.c             | 14 ++---
 .../unmatched/hifive-platform-i2c-eeprom.c    |  2 +-
 board/synopsys/hsdk/env-lib.c                 |  2 +-
 board/ti/am64x/evm.c                          |  2 +-
 board/ti/j721e/evm.c                          |  2 +-
 board/varisys/common/sys_eeprom.c             |  4 +-
 board/xilinx/common/fru.c                     |  4 +-
 board/xilinx/versal/cmds.c                    |  2 +-
 board/xilinx/zynq/cmds.c                      | 14 ++---
 board/xilinx/zynqmp/cmds.c                    | 46 +++++++-------
 cmd/abootimg.c                                |  2 +-
 cmd/adtimg.c                                  |  2 +-
 cmd/aes.c                                     | 10 ++--
 cmd/armflash.c                                |  2 +-
 cmd/avb.c                                     | 24 ++++----
 cmd/axi.c                                     | 10 ++--
 cmd/bedbug.c                                  |  6 +-
 cmd/binop.c                                   |  6 +-
 cmd/blk_common.c                              | 12 ++--
 cmd/blob.c                                    |  8 +--
 cmd/bmp.c                                     |  6 +-
 cmd/boot.c                                    |  2 +-
 cmd/bootefi.c                                 |  4 +-
 cmd/booti.c                                   |  2 +-
 cmd/bootm.c                                   |  4 +-
 cmd/bootstage.c                               |  4 +-
 cmd/bootz.c                                   |  2 +-
 cmd/broadcom/nitro_image_load.c               |  4 +-
 cmd/cbfs.c                                    |  6 +-
 cmd/cramfs.c                                  |  4 +-
 cmd/cros_ec.c                                 |  4 +-
 cmd/demo.c                                    |  2 +-
 cmd/disk.c                                    |  2 +-
 cmd/efidebug.c                                | 14 ++---
 cmd/elf.c                                     |  4 +-
 cmd/fastboot.c                                |  4 +-
 cmd/fdt.c                                     | 41 ++++++-------
 cmd/flash.c                                   | 10 ++--
 cmd/fpga.c                                    | 10 ++--
 cmd/fpgad.c                                   |  6 +-
 cmd/host.c                                    |  6 +-
 cmd/i2c.c                                     | 60 +++++++++----------
 cmd/ini.c                                     |  8 +--
 cmd/io.c                                      |  8 +--
 cmd/iotrace.c                                 |  8 +--
 cmd/itest.c                                   |  6 +-
 cmd/jffs2.c                                   |  2 +-
 cmd/load.c                                    | 10 ++--
 cmd/lzmadec.c                                 |  6 +-
 cmd/md5sum.c                                  | 14 ++---
 cmd/mdio.c                                    |  2 +-
 cmd/mem.c                                     | 52 ++++++++--------
 cmd/mfsl.c                                    | 14 ++---
 cmd/mii.c                                     |  8 +--
 cmd/misc.c                                    |  6 +-
 cmd/mmc.c                                     | 40 ++++++-------
 cmd/mtd.c                                     | 10 ++--
 cmd/mvebu/bubt.c                              |  2 +-
 cmd/mvebu/comphy_rx_training.c                |  4 +-
 cmd/nand.c                                    | 18 +++---
 cmd/net.c                                     |  6 +-
 cmd/nvedit.c                                  | 10 ++--
 cmd/nvedit_efi.c                              |  4 +-
 cmd/onenand.c                                 |  8 +--
 cmd/osd.c                                     | 16 ++---
 cmd/pcap.c                                    |  2 +-
 cmd/pci.c                                     | 12 ++--
 cmd/pstore.c                                  | 14 ++---
 cmd/pxe_utils.c                               |  4 +-
 cmd/qfw.c                                     | 10 ++--
 cmd/read.c                                    | 10 ++--
 cmd/reiser.c                                  | 10 ++--
 cmd/remoteproc.c                              |  4 +-
 cmd/rng.c                                     |  2 +-
 cmd/rtc.c                                     | 12 ++--
 cmd/setexpr.c                                 |  4 +-
 cmd/sf.c                                      | 10 ++--
 cmd/smccc.c                                   | 16 ++---
 cmd/source.c                                  |  2 +-
 cmd/strings.c                                 |  4 +-
 cmd/ti/ddr3.c                                 | 10 ++--
 cmd/tlv_eeprom.c                              |  2 +-
 cmd/tpm-common.c                              |  2 +-
 cmd/trace.c                                   |  4 +-
 cmd/tsi148.c                                  | 10 ++--
 cmd/ubi.c                                     | 10 ++--
 cmd/ubifs.c                                   |  4 +-
 cmd/universe.c                                | 12 ++--
 cmd/unlz4.c                                   |  6 +-
 cmd/unzip.c                                   | 12 ++--
 cmd/x86/mtrr.c                                |  6 +-
 cmd/ximg.c                                    |  6 +-
 cmd/yaffs2.c                                  | 10 ++--
 cmd/zfs.c                                     |  6 +-
 cmd/zip.c                                     |  8 +--
 common/bedbug.c                               |  2 +-
 common/bootm_os.c                             |  5 +-
 common/fdt_support.c                          |  2 +-
 common/hash.c                                 | 12 ++--
 common/image-fdt.c                            |  6 +-
 common/image-fit.c                            |  2 +-
 common/image.c                                | 12 ++--
 common/kallsyms.c                             |  2 +-
 common/lcd.c                                  |  2 +-
 common/splash.c                               |  4 +-
 common/splash_source.c                        |  2 +-
 common/update.c                               |  2 +-
 disk/part.c                                   |  6 +-
 drivers/dfu/dfu_mtd.c                         |  4 +-
 drivers/dfu/dfu_nand.c                        |  4 +-
 drivers/dfu/dfu_ram.c                         |  4 +-
 drivers/dfu/dfu_sf.c                          |  4 +-
 drivers/fastboot/fb_command.c                 |  2 +-
 drivers/gpio/pca953x.c                        |  4 +-
 drivers/misc/ds4510.c                         | 10 ++--
 drivers/net/e1000_spi.c                       |  4 +-
 drivers/net/fm/fdt.c                          |  2 +-
 drivers/net/fsl-mc/mc.c                       |  3 +-
 drivers/net/pfe_eth/pfe_cmd.c                 | 14 ++---
 drivers/net/phy/b53.c                         | 10 ++--
 drivers/net/phy/mv88e6352.c                   |  2 +-
 drivers/power/power_core.c                    |  6 +-
 drivers/qe/qe.c                               |  4 +-
 drivers/rtc/m41t60.c                          |  2 +-
 drivers/video/ati_radeon_fb.c                 |  2 +-
 drivers/video/cfb_console.c                   |  2 +-
 drivers/video/mx3fb.c                         |  2 +-
 fs/fs.c                                       | 14 ++---
 include/vsprintf.h                            | 28 ++++++++-
 lib/net_utils.c                               |  2 +-
 lib/strto.c                                   | 12 ++--
 lib/uuid.c                                    | 14 ++---
 lib/vsprintf.c                                |  2 +-
 test/str_ut.c                                 | 12 ++++
 183 files changed, 692 insertions(+), 659 deletions(-)

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
index f1624ff30ae..6eb7f9c2148 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c
@@ -565,28 +565,28 @@ void fdt_fixup_pfe_firmware(void *blob)
 	if (!p)
 		return;
 
-	pclassfw = (void *)simple_strtoul(p, NULL, 16);
+	pclassfw = (void *)hextoul(p, NULL);
 	if (!pclassfw)
 		return;
 
 	p = env_get("class_elf_size");
 	if (!p)
 		return;
-	len_class = simple_strtoul(p, NULL, 16);
+	len_class = hextoul(p, NULL);
 
 	/* If the environment variable is not set, then exit silently */
 	p = env_get("tmu_elf_firmware");
 	if (!p)
 		return;
 
-	ptmufw = (void *)simple_strtoul(p, NULL, 16);
+	ptmufw = (void *)hextoul(p, NULL);
 	if (!ptmufw)
 		return;
 
 	p = env_get("tmu_elf_size");
 	if (!p)
 		return;
-	len_tmu = simple_strtoul(p, NULL, 16);
+	len_tmu = hextoul(p, NULL);
 
 	if (len_class == 0 || len_tmu == 0) {
 		printf("PFE FW corrupted. CLASS FW size %d, TMU FW size %d\n",
@@ -605,14 +605,14 @@ void fdt_fixup_pfe_firmware(void *blob)
 	if (!p)
 		return;
 
-	putilfw = (void *)simple_strtoul(p, NULL, 16);
+	putilfw = (void *)hextoul(p, NULL);
 	if (!putilfw)
 		return;
 
 	p = env_get("util_elf_size");
 	if (!p)
 		return;
-	len_util = simple_strtoul(p, NULL, 16);
+	len_util = hextoul(p, NULL);
 
 	if (len_util) {
 		printf("PFE Util PE firmware is not added to FDT.\n");
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
index 904fddd6c04..9fd82459b24 100644
--- a/arch/arm/lib/semihosting.c
+++ b/arch/arm/lib/semihosting.c
@@ -191,7 +191,7 @@ static int do_smhload(struct cmd_tbl *cmdtp, int flag, int argc,
 		int ret;
 		char end_str[64];
 
-		load_addr = simple_strtoul(argv[2], NULL, 16);
+		load_addr = hextoul(argv[2], NULL);
 		if (!load_addr)
 			return -1;
 
diff --git a/arch/arm/mach-imx/cmd_dek.c b/arch/arm/mach-imx/cmd_dek.c
index b10ead19426..40df10dd739 100644
--- a/arch/arm/mach-imx/cmd_dek.c
+++ b/arch/arm/mach-imx/cmd_dek.c
@@ -300,8 +300,8 @@ static int do_dek_blob(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 4)
 		return CMD_RET_USAGE;
 
-	src_addr = simple_strtoul(argv[1], NULL, 16);
-	dst_addr = simple_strtoul(argv[2], NULL, 16);
+	src_addr = hextoul(argv[1], NULL);
+	dst_addr = hextoul(argv[2], NULL);
 	len = simple_strtoul(argv[3], NULL, 10);
 
 	return blob_encap_dek(src_addr, dst_addr, len);
diff --git a/arch/arm/mach-imx/cmd_mfgprot.c b/arch/arm/mach-imx/cmd_mfgprot.c
index 1430f619098..29074fc2980 100644
--- a/arch/arm/mach-imx/cmd_mfgprot.c
+++ b/arch/arm/mach-imx/cmd_mfgprot.c
@@ -71,7 +71,7 @@ static int do_mfgprot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 		if (argc != 4)
 			return CMD_RET_USAGE;
 
-		m_addr = simple_strtoul(argv[2], NULL, 16);
+		m_addr = hextoul(argv[2], NULL);
 		m_size = simple_strtoul(argv[3], NULL, 10);
 		m_ptr = map_physmem(m_addr, m_size, MAP_NOCACHE);
 		if (!m_ptr)
diff --git a/arch/arm/mach-imx/cmd_nandbcb.c b/arch/arm/mach-imx/cmd_nandbcb.c
index 7157c9e9799..cd513445978 100644
--- a/arch/arm/mach-imx/cmd_nandbcb.c
+++ b/arch/arm/mach-imx/cmd_nandbcb.c
@@ -1083,13 +1083,13 @@ static int do_nandbcb_bcbonly(int argc, char *const argv[])
 
 	mtd = cfg.mtd;
 
-	cfg.boot_stream1_address = simple_strtoul(argv[2], NULL, 16);
-	cfg.boot_stream1_size = simple_strtoul(argv[3], NULL, 16);
+	cfg.boot_stream1_address = hextoul(argv[2], NULL);
+	cfg.boot_stream1_size = hextoul(argv[3], NULL);
 	cfg.boot_stream1_size = ALIGN(cfg.boot_stream1_size, mtd->writesize);
 
 	if (argc > 5) {
-		cfg.boot_stream2_address = simple_strtoul(argv[4], NULL, 16);
-		cfg.boot_stream2_size = simple_strtoul(argv[5], NULL, 16);
+		cfg.boot_stream2_address = hextoul(argv[4], NULL);
+		cfg.boot_stream2_size = hextoul(argv[5], NULL);
 		cfg.boot_stream2_size = ALIGN(cfg.boot_stream2_size,
 					      mtd->writesize);
 	}
@@ -1450,7 +1450,7 @@ static int do_nandbcb_init(int argc, char * const argv[])
 	if (nandbcb_set_boot_config(argc, argv, &cfg))
 		return CMD_RET_FAILURE;
 
-	addr = simple_strtoul(argv[1], &endp, 16);
+	addr = hextoul(argv[1], &endp);
 	if (*argv[1] == 0 || *endp != 0)
 		return CMD_RET_FAILURE;
 
diff --git a/arch/arm/mach-imx/hab.c b/arch/arm/mach-imx/hab.c
index 00bd157d0e0..cc39e6bf569 100644
--- a/arch/arm/mach-imx/hab.c
+++ b/arch/arm/mach-imx/hab.c
@@ -609,12 +609,12 @@ static int do_authenticate_image(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
-	length = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[1], NULL);
+	length = hextoul(argv[2], NULL);
 	if (argc == 3)
 		ivt_offset = get_image_ivt_offset(addr);
 	else
-		ivt_offset = simple_strtoul(argv[3], NULL, 16);
+		ivt_offset = hextoul(argv[3], NULL);
 
 	rcode = imx_hab_authenticate_image(addr, length, ivt_offset);
 	if (rcode == 0)
diff --git a/arch/arm/mach-imx/imx8/ahab.c b/arch/arm/mach-imx/imx8/ahab.c
index 6392fe267a0..015267c8b2d 100644
--- a/arch/arm/mach-imx/imx8/ahab.c
+++ b/arch/arm/mach-imx/imx8/ahab.c
@@ -161,7 +161,7 @@ static int do_authenticate(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	printf("Authenticate OS container at 0x%lx\n", addr);
 
diff --git a/arch/arm/mach-imx/imx8/snvs_security_sc.c b/arch/arm/mach-imx/imx8/snvs_security_sc.c
index 6f9b1c99fcd..7c34ce6d5f8 100644
--- a/arch/arm/mach-imx/imx8/snvs_security_sc.c
+++ b/arch/arm/mach-imx/imx8/snvs_security_sc.c
@@ -638,24 +638,24 @@ static int do_snvs_cfg(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != (NB_REGISTERS + 1))
 		return CMD_RET_USAGE;
 
-	conf.hp.lock = simple_strtoul(argv[++idx], NULL, 16);
-	conf.hp.secvio_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.lock = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.secvio_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_filt_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_det_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_det_cfg2 = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_filt1_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_filt2_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper1_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper2_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper3_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper4_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper5_cfg = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper_clk_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper_routing_ctl1 = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.act_tamper_routing_ctl2 = simple_strtoul(argv[++idx], NULL, 16);
+	conf.hp.lock = hextoul(argv[++idx], NULL);
+	conf.hp.secvio_ctl = hextoul(argv[++idx], NULL);
+	conf.lp.lock = hextoul(argv[++idx], NULL);
+	conf.lp.secvio_ctl = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_filt_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_det_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_det_cfg2 = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_filt1_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_filt2_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper1_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper2_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper3_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper4_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper5_cfg = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper_ctl = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper_clk_ctl = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper_routing_ctl1 = hextoul(argv[++idx], NULL);
+	conf.lp.act_tamper_routing_ctl2 = hextoul(argv[++idx], NULL);
 
 	err = apply_snvs_config(&conf);
 
@@ -690,12 +690,12 @@ static int do_snvs_dgo_cfg(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != (6 + 1))
 		return CMD_RET_USAGE;
 
-	conf.tamper_offset_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.tamper_pull_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.tamper_ana_test_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.tamper_sensor_trim_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.tamper_misc_ctl = simple_strtoul(argv[++idx], NULL, 16);
-	conf.tamper_core_volt_mon_ctl = simple_strtoul(argv[++idx], NULL, 16);
+	conf.tamper_offset_ctl = hextoul(argv[++idx], NULL);
+	conf.tamper_pull_ctl = hextoul(argv[++idx], NULL);
+	conf.tamper_ana_test_ctl = hextoul(argv[++idx], NULL);
+	conf.tamper_sensor_trim_ctl = hextoul(argv[++idx], NULL);
+	conf.tamper_misc_ctl = hextoul(argv[++idx], NULL);
+	conf.tamper_core_volt_mon_ctl = hextoul(argv[++idx], NULL);
 
 	err = apply_snvs_dgo_config(&conf);
 
@@ -727,7 +727,7 @@ static int do_tamper_pin_cfg(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	conf.pad = simple_strtoul(argv[++idx], NULL, 10);
-	conf.mux_conf = simple_strtoul(argv[++idx], NULL, 16);
+	conf.mux_conf = hextoul(argv[++idx], NULL);
 
 	err = apply_tamper_pin_list_config(&conf, 1);
 
@@ -761,8 +761,8 @@ static int do_snvs_clear_status(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != (2 + 1))
 		return CMD_RET_USAGE;
 
-	conf.lp.status = simple_strtoul(argv[++idx], NULL, 16);
-	conf.lp.tamper_det_status = simple_strtoul(argv[++idx], NULL, 16);
+	conf.lp.status = hextoul(argv[++idx], NULL);
+	conf.lp.tamper_det_status = hextoul(argv[++idx], NULL);
 
 	scierr = check_write_secvio_config(SC_CONF_OFFSET_OF(lp.status),
 					   &conf.lp.status, NULL, NULL, NULL,
diff --git a/arch/arm/mach-imx/imx_bootaux.c b/arch/arm/mach-imx/imx_bootaux.c
index 30fb45d48c2..9ffe5ac6e34 100644
--- a/arch/arm/mach-imx/imx_bootaux.c
+++ b/arch/arm/mach-imx/imx_bootaux.c
@@ -180,7 +180,7 @@ static int do_bootaux(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_SUCCESS;
 	}
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	if (!addr)
 		return CMD_RET_FAILURE;
diff --git a/arch/arm/mach-imx/mx6/mp.c b/arch/arm/mach-imx/mx6/mp.c
index 2fdf070a08b..de9ace083ce 100644
--- a/arch/arm/mach-imx/mx6/mp.c
+++ b/arch/arm/mach-imx/mx6/mp.c
@@ -47,7 +47,7 @@ int cpu_release(u32 nr, int argc, char *const argv[])
 {
 	uint32_t boot_addr;
 
-	boot_addr = simple_strtoul(argv[0], NULL, 16);
+	boot_addr = hextoul(argv[0], NULL);
 
 	switch (nr) {
 	case 1:
diff --git a/arch/arm/mach-keystone/cmd_mon.c b/arch/arm/mach-keystone/cmd_mon.c
index 049d5734734..e26296b6da6 100644
--- a/arch/arm/mach-keystone/cmd_mon.c
+++ b/arch/arm/mach-keystone/cmd_mon.c
@@ -25,7 +25,7 @@ static int do_mon_install(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	freq = CONFIG_SYS_HZ_CLOCK;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	header = (struct image_header *)addr;
 
@@ -40,7 +40,7 @@ static int do_mon_install(struct cmd_tbl *cmdtp, int flag, int argc,
 	       size);
 
 	if (argc >=  3)
-		ecrypt_bm_addr = simple_strtoul(argv[2], NULL, 16);
+		ecrypt_bm_addr = hextoul(argv[2], NULL);
 
 	rcode = mon_install(load_addr, dpsc_base, freq, ecrypt_bm_addr);
 	printf("## installed monitor @ 0x%x, freq [%d], status %d\n",
@@ -76,8 +76,8 @@ int do_mon_power(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	core_id = simple_strtoul(argv[1], NULL, 16);
-	on = simple_strtoul(argv[2], NULL, 16);
+	core_id = hextoul(argv[1], NULL);
+	on = hextoul(argv[2], NULL);
 
 	if (on)
 		rcode = mon_power_on(core_id, fn);
diff --git a/arch/arm/mach-snapdragon/misc.c b/arch/arm/mach-snapdragon/misc.c
index aaa561c2c68..985625a548e 100644
--- a/arch/arm/mach-snapdragon/misc.c
+++ b/arch/arm/mach-snapdragon/misc.c
@@ -47,7 +47,7 @@ void msm_generate_mac_addr(u8 *mac)
 	mac[0] = 0x02;
 	mac[1] = 00;
 	for (i = 3; i >= 0; i--) {
-		mac[i + 2] = simple_strtoul(&sn[2 * i], NULL, 16);
+		mac[i + 2] = hextoul(&sn[2 * i], NULL);
 		sn[2 * i] = 0;
 	}
 }
diff --git a/arch/arm/mach-socfpga/misc.c b/arch/arm/mach-socfpga/misc.c
index 64a7c9d652c..f8d3d48ee89 100644
--- a/arch/arm/mach-socfpga/misc.c
+++ b/arch/arm/mach-socfpga/misc.c
@@ -191,7 +191,7 @@ static int do_bridge(struct cmd_tbl *cmdtp, int flag, int argc,
 	argv++;
 
 	if (argc == 3)
-		mask = simple_strtoul(argv[1], NULL, 16);
+		mask = hextoul(argv[1], NULL);
 
 	switch (*argv[0]) {
 	case 'e':	/* Enable */
diff --git a/arch/arm/mach-socfpga/vab.c b/arch/arm/mach-socfpga/vab.c
index 85b3f302111..e146f2c5290 100644
--- a/arch/arm/mach-socfpga/vab.c
+++ b/arch/arm/mach-socfpga/vab.c
@@ -17,8 +17,8 @@ static int do_vab(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
-	len = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[1], NULL);
+	len = hextoul(argv[2], NULL);
 
 	if (socfpga_vendor_authentication((void *)&addr, (size_t *)&len) != 0)
 		return CMD_RET_FAILURE;
diff --git a/arch/arm/mach-stm32mp/cmd_stm32key.c b/arch/arm/mach-stm32mp/cmd_stm32key.c
index 50840b0f38b..68f28922d1e 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32key.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32key.c
@@ -162,7 +162,7 @@ static int do_stm32key_read(struct cmd_tbl *cmdtp, int flag, int argc, char *con
 		return CMD_RET_SUCCESS;
 	}
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 	if (!addr)
 		return CMD_RET_USAGE;
 
@@ -185,7 +185,7 @@ static int do_stm32key_fuse(struct cmd_tbl *cmdtp, int flag, int argc, char *con
 		yes = true;
 	}
 
-	addr = simple_strtoul(argv[argc - 1], NULL, 16);
+	addr = hextoul(argv[argc - 1], NULL);
 	if (!addr)
 		return CMD_RET_USAGE;
 
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
index 064f51b2c7f..bf9a686e96e 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
@@ -64,12 +64,12 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, int argc,
 	addr = STM32_DDR_BASE;
 	size = 0;
 	if (argc > 3) {
-		addr = simple_strtoul(argv[3], NULL, 16);
+		addr = hextoul(argv[3], NULL);
 		if (!addr)
 			return CMD_RET_FAILURE;
 	}
 	if (argc > 4)
-		size = simple_strtoul(argv[4], NULL, 16);
+		size = hextoul(argv[4], NULL);
 
 	/* check STM32IMAGE presence */
 	if (size == 0) {
diff --git a/arch/arm/mach-uniphier/board_late_init.c b/arch/arm/mach-uniphier/board_late_init.c
index b33c4b19389..b5356ed87e7 100644
--- a/arch/arm/mach-uniphier/board_late_init.c
+++ b/arch/arm/mach-uniphier/board_late_init.c
@@ -66,7 +66,7 @@ static void uniphier_set_env_addr(const char *env, const char *offset_env)
 		if (!str)
 			goto fail;
 
-		offset = simple_strtoul(str, &end, 16);
+		offset = hextoul(str, &end);
 		if (*end)
 			goto fail;
 	}
diff --git a/arch/arm/mach-zynqmp/mp.c b/arch/arm/mach-zynqmp/mp.c
index 74783ae5a78..704520e7a3c 100644
--- a/arch/arm/mach-zynqmp/mp.c
+++ b/arch/arm/mach-zynqmp/mp.c
@@ -252,7 +252,7 @@ int cpu_release(u32 nr, int argc, char *const argv[])
 			return 1;
 		}
 
-		u32 boot_addr = simple_strtoul(argv[0], NULL, 16);
+		u32 boot_addr = hextoul(argv[0], NULL);
 		u32 boot_addr_uniq = 0;
 		if (!(boot_addr == ZYNQMP_R5_LOVEC_ADDR ||
 		      boot_addr == ZYNQMP_R5_HIVEC_ADDR)) {
diff --git a/arch/mips/mach-octeon/bootoctlinux.c b/arch/mips/mach-octeon/bootoctlinux.c
index c195dc28ad7..349da08da6d 100644
--- a/arch/mips/mach-octeon/bootoctlinux.c
+++ b/arch/mips/mach-octeon/bootoctlinux.c
@@ -281,8 +281,7 @@ int octeon_parse_bootopts(int argc, char *const argv[],
 		} else if (!strncmp(argv[arg], "forceboot", 9)) {
 			boot_args->forceboot = true;
 		} else if (!strncmp(argv[arg], "nodemask=", 9)) {
-			boot_args->node_mask = simple_strtoul(argv[arg] + 9,
-							      NULL, 16);
+			boot_args->node_mask = hextoul(argv[arg] + 9, NULL);
 		} else if (!strncmp(argv[arg], "numcores=", 9)) {
 			memset(node_values, 0, sizeof(node_values));
 			num_values = octeon_parse_nodes(node_values,
@@ -383,7 +382,7 @@ int do_bootoctlinux(struct cmd_tbl *cmdtp, int flag, int argc,
 						   argv[1][1] == 'x' ||
 						   argv[1][1] == 'X' ||
 						   argv[1][1] == '\0'))) {
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		if (!addr)
 			addr = CONFIG_SYS_LOAD_ADDR;
 		arg_start++;
diff --git a/arch/nds32/lib/bootm.c b/arch/nds32/lib/bootm.c
index b3b8bc29037..4cb0f530ae1 100644
--- a/arch/nds32/lib/bootm.c
+++ b/arch/nds32/lib/bootm.c
@@ -64,7 +64,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
 
 	s = env_get("machid");
 	if (s) {
-		machid = simple_strtoul(s, NULL, 16);
+		machid = hextoul(s, NULL);
 		printf("Using machid 0x%x from environment\n", machid);
 	}
 
diff --git a/arch/nios2/lib/bootm.c b/arch/nios2/lib/bootm.c
index 2c8f9731c74..50374671515 100644
--- a/arch/nios2/lib/bootm.c
+++ b/arch/nios2/lib/bootm.c
@@ -27,7 +27,7 @@ int do_bootm_linux(int flag, int argc, char *const argv[],
 		of_flat_tree = images->ft_addr;
 #endif
 	if (!of_flat_tree && argc > 1)
-		of_flat_tree = (char *)simple_strtoul(argv[1], NULL, 16);
+		of_flat_tree = (char *)hextoul(argv[1], NULL);
 	if (of_flat_tree)
 		initrd_end = (ulong)of_flat_tree;
 
diff --git a/arch/powerpc/cpu/mpc83xx/ecc.c b/arch/powerpc/cpu/mpc83xx/ecc.c
index 1343dd3d3a3..68a7a780d23 100644
--- a/arch/powerpc/cpu/mpc83xx/ecc.c
+++ b/arch/powerpc/cpu/mpc83xx/ecc.c
@@ -219,17 +219,17 @@ int do_ecc(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			ddr->err_detect = val;
 			return 0;
 		} else if (strcmp(argv[1], "injectdatahi") == 0) {
-			val = simple_strtoul(argv[2], NULL, 16);
+			val = hextoul(argv[2], NULL);
 
 			ddr->data_err_inject_hi = val;
 			return 0;
 		} else if (strcmp(argv[1], "injectdatalo") == 0) {
-			val = simple_strtoul(argv[2], NULL, 16);
+			val = hextoul(argv[2], NULL);
 
 			ddr->data_err_inject_lo = val;
 			return 0;
 		} else if (strcmp(argv[1], "injectecc") == 0) {
-			val = simple_strtoul(argv[2], NULL, 16);
+			val = hextoul(argv[2], NULL);
 			if (val > 0xff) {
 				printf("Incorrect ECC inject mask, "
 				       "should be 0x00..0xff\n");
@@ -269,8 +269,8 @@ int do_ecc(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 	if (argc == 4) {
 		if (strcmp(argv[1], "testdw") == 0) {
-			addr = (u64 *) simple_strtoul(argv[2], NULL, 16);
-			count = simple_strtoul(argv[3], NULL, 16);
+			addr = (u64 *)hextoul(argv[2], NULL);
+			count = hextoul(argv[3], NULL);
 
 			if ((u32) addr % 8) {
 				printf("Address not aligned on "
@@ -308,8 +308,8 @@ int do_ecc(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return 0;
 		}
 		if (strcmp(argv[1], "testword") == 0) {
-			addr = (u64 *) simple_strtoul(argv[2], NULL, 16);
-			count = simple_strtoul(argv[3], NULL, 16);
+			addr = (u64 *)hextoul(argv[2], NULL);
+			count = hextoul(argv[3], NULL);
 
 			if ((u32) addr % 8) {
 				printf("Address not aligned on "
diff --git a/arch/powerpc/cpu/mpc85xx/mp.c b/arch/powerpc/cpu/mpc85xx/mp.c
index 653efe09f93..b1b002c9002 100644
--- a/arch/powerpc/cpu/mpc85xx/mp.c
+++ b/arch/powerpc/cpu/mpc85xx/mp.c
@@ -167,7 +167,7 @@ int cpu_release(u32 nr, int argc, char *const argv[])
 	for (i = 1; i < 3; i++) {
 		if (argv[i][0] != '-') {
 			u8 entry = boot_entry_map[i];
-			val = simple_strtoul(argv[i], NULL, 16);
+			val = hextoul(argv[i], NULL);
 			table[entry] = val;
 		}
 	}
diff --git a/arch/sh/lib/zimageboot.c b/arch/sh/lib/zimageboot.c
index c38f0933f89..c2e285ff0f6 100644
--- a/arch/sh/lib/zimageboot.c
+++ b/arch/sh/lib/zimageboot.c
@@ -37,11 +37,12 @@ int do_sh_zimageboot(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 
 	if (s0)
-		zboot_entry = (ulong (*)(int, char * const []))simple_strtoul(s0, NULL, 16);
+		zboot_entry = (ulong (*)(int, char * const []))hextoul(s0,
+									NULL);
 
 	/* empty_zero_page */
 	if (s1)
-		param = (unsigned char*)simple_strtoul(s1, NULL, 16);
+		param = (unsigned char *)hextoul(s1, NULL);
 
 	/* Linux kernel command line */
 	cmdline = (char *)param + COMMAND_LINE;
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index cf4210cd4ba..9938c80a42b 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -405,17 +405,17 @@ static int do_zboot_start(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 
 	if (s)
-		state.bzimage_addr = simple_strtoul(s, NULL, 16);
+		state.bzimage_addr = hextoul(s, NULL);
 
 	if (argc >= 3) {
 		/* argv[2] holds the size of the bzImage */
-		state.bzimage_size = simple_strtoul(argv[2], NULL, 16);
+		state.bzimage_size = hextoul(argv[2], NULL);
 	}
 
 	if (argc >= 4)
-		state.initrd_addr = simple_strtoul(argv[3], NULL, 16);
+		state.initrd_addr = hextoul(argv[3], NULL);
 	if (argc >= 5)
-		state.initrd_size = simple_strtoul(argv[4], NULL, 16);
+		state.initrd_size = hextoul(argv[4], NULL);
 	if (argc >= 6) {
 		/*
 		 * When the base_ptr is passed in, we assume that the image is
@@ -428,7 +428,7 @@ static int do_zboot_start(struct cmd_tbl *cmdtp, int flag, int argc,
 		 * load address and set bzimage_addr to 0 so we know that it
 		 * cannot be proceesed (or processed again).
 		 */
-		state.base_ptr = (void *)simple_strtoul(argv[5], NULL, 16);
+		state.base_ptr = (void *)hextoul(argv[5], NULL);
 		state.load_address = state.bzimage_addr;
 		state.bzimage_addr = 0;
 	}
@@ -702,7 +702,7 @@ static int do_zboot_dump(struct cmd_tbl *cmdtp, int flag, int argc,
 	struct boot_params *base_ptr = state.base_ptr;
 
 	if (argc > 1)
-		base_ptr = (void *)simple_strtoul(argv[1], NULL, 16);
+		base_ptr = (void *)hextoul(argv[1], NULL);
 	if (!base_ptr) {
 		printf("No zboot setup_base\n");
 		return CMD_RET_FAILURE;
@@ -749,7 +749,7 @@ int do_zboot_parent(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc > 1) {
 		char *endp;
 
-		simple_strtoul(argv[1], &endp, 16);
+		hextoul(argv[1], &endp);
 		/*
 		 * endp pointing to nul means that argv[1] was just a valid
 		 * number, so pass it along to the normal processing
diff --git a/board/BuS/eb_cpu5282/eb_cpu5282.c b/board/BuS/eb_cpu5282/eb_cpu5282.c
index 144a08922b1..5829299663d 100644
--- a/board/BuS/eb_cpu5282/eb_cpu5282.c
+++ b/board/BuS/eb_cpu5282/eb_cpu5282.c
@@ -214,7 +214,7 @@ int drv_video_init(void)
 #ifdef CONFIG_SPLASH_SCREEN
 	s = env_get("splashimage");
 	if (s != NULL) {
-		splash = simple_strtoul(s, NULL, 16);
+		splash = hextoul(s, NULL);
 		vcxk_acknowledge_wait();
 		video_display_bitmap(splash, 0, 0);
 	}
diff --git a/board/Marvell/octeontx2/board.c b/board/Marvell/octeontx2/board.c
index 9b973a4aceb..4e8cb839f5e 100644
--- a/board/Marvell/octeontx2/board.c
+++ b/board/Marvell/octeontx2/board.c
@@ -230,7 +230,7 @@ static int do_go_uboot(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 	fdt = board_fdt_blob_setup();
 	entry = (uboot_entry_t)addr;
 	flush_cache((ulong)addr, 1 << 20);	/* 1MiB should be enough */
diff --git a/board/amlogic/beelink-s922x/beelink-s922x.c b/board/amlogic/beelink-s922x/beelink-s922x.c
index bb744262661..adae27fc7e7 100644
--- a/board/amlogic/beelink-s922x/beelink-s922x.c
+++ b/board/amlogic/beelink-s922x/beelink-s922x.c
@@ -39,7 +39,7 @@ int misc_init_r(void)
 			tmp[0] = efuse_mac_addr[i * 2];
 			tmp[1] = efuse_mac_addr[i * 2 + 1];
 			tmp[2] = '\0';
-			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+			mac_addr[i] = hextoul(tmp, NULL);
 		}
 
 		if (is_valid_ethaddr(mac_addr))
diff --git a/board/amlogic/odroid-n2/odroid-n2.c b/board/amlogic/odroid-n2/odroid-n2.c
index 88a60f34fe8..c37ea65417f 100644
--- a/board/amlogic/odroid-n2/odroid-n2.c
+++ b/board/amlogic/odroid-n2/odroid-n2.c
@@ -126,7 +126,7 @@ int misc_init_r(void)
 			tmp[0] = efuse_mac_addr[i * 2];
 			tmp[1] = efuse_mac_addr[i * 2 + 1];
 			tmp[2] = '\0';
-			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+			mac_addr[i] = hextoul(tmp, NULL);
 		}
 
 		if (is_valid_ethaddr(mac_addr))
diff --git a/board/amlogic/vim3/vim3.c b/board/amlogic/vim3/vim3.c
index 6cd5f2e115f..963f3c78956 100644
--- a/board/amlogic/vim3/vim3.c
+++ b/board/amlogic/vim3/vim3.c
@@ -160,7 +160,7 @@ int misc_init_r(void)
 			tmp[0] = efuse_mac_addr[i * 2];
 			tmp[1] = efuse_mac_addr[i * 2 + 1];
 			tmp[2] = '\0';
-			mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+			mac_addr[i] = hextoul(tmp, NULL);
 		}
 
 		if (is_valid_ethaddr(mac_addr))
diff --git a/board/bluewater/gurnard/gurnard.c b/board/bluewater/gurnard/gurnard.c
index e217b95b4f2..35c89850bef 100644
--- a/board/bluewater/gurnard/gurnard.c
+++ b/board/bluewater/gurnard/gurnard.c
@@ -376,7 +376,7 @@ int board_late_init(void)
 		/* Parse MAC address */
 		for (i = 0; i < 6; i++) {
 			env_enetaddr[i] = env_str ?
-				simple_strtoul(env_str, &end, 16) : 0;
+				hextoul(env_str, &end) : 0;
 			if (env_str)
 				env_str = (*end) ? end+1 : end;
 		}
diff --git a/board/cavium/thunderx/atf.c b/board/cavium/thunderx/atf.c
index 64aa198765f..582af6f1f1a 100644
--- a/board/cavium/thunderx/atf.c
+++ b/board/cavium/thunderx/atf.c
@@ -235,25 +235,25 @@ int do_atf(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	char str[4 * sizeof(uint64_t)];
 
 	if ((argc == 5) && !strcmp(argv[1], "readmmc")) {
-		buffer = (void *)simple_strtoul(argv[2], NULL, 16);
+		buffer = (void *)hextoul(argv[2], NULL);
 		offset = simple_strtoul(argv[3], NULL, 10);
 		size = simple_strtoul(argv[4], NULL, 10);
 
 		ret = atf_read_mmc(offset, buffer, size);
 	} else if ((argc == 5) && !strcmp(argv[1], "readnor")) {
-		buffer = (void *)simple_strtoul(argv[2], NULL, 16);
+		buffer = (void *)hextoul(argv[2], NULL);
 		offset = simple_strtoul(argv[3], NULL, 10);
 		size = simple_strtoul(argv[4], NULL, 10);
 
 		ret = atf_read_nor(offset, buffer, size);
 	} else if ((argc == 5) && !strcmp(argv[1], "writemmc")) {
-		buffer = (void *)simple_strtoul(argv[2], NULL, 16);
+		buffer = (void *)hextoul(argv[2], NULL);
 		offset = simple_strtoul(argv[3], NULL, 10);
 		size = simple_strtoul(argv[4], NULL, 10);
 
 		ret = atf_write_mmc(offset, buffer, size);
 	} else if ((argc == 5) && !strcmp(argv[1], "writenor")) {
-		buffer = (void *)simple_strtoul(argv[2], NULL, 16);
+		buffer = (void *)hextoul(argv[2], NULL);
 		offset = simple_strtoul(argv[3], NULL, 10);
 		size = simple_strtoul(argv[4], NULL, 10);
 
diff --git a/board/esd/meesc/meesc.c b/board/esd/meesc/meesc.c
index eaa525eb004..a3eee63e375 100644
--- a/board/esd/meesc/meesc.c
+++ b/board/esd/meesc/meesc.c
@@ -208,7 +208,7 @@ void get_board_serial(struct tag_serialnr *serialnr)
 		str = strchr(serial, '_');
 		if (str && (strlen(str) >= 4)) {
 			serialnr->high = (*(str + 1) << 8) | *(str + 2);
-			serialnr->low = simple_strtoul(str + 3, NULL, 16);
+			serialnr->low = hextoul(str + 3, NULL);
 		}
 	} else {
 		serialnr->high = 0;
diff --git a/board/freescale/common/cmd_esbc_validate.c b/board/freescale/common/cmd_esbc_validate.c
index 638aa3c19a4..6c096266b48 100644
--- a/board/freescale/common/cmd_esbc_validate.c
+++ b/board/freescale/common/cmd_esbc_validate.c
@@ -40,7 +40,7 @@ static int do_esbc_validate(struct cmd_tbl *cmdtp, int flag, int argc,
 		hash_str = argv[2];
 
 	/* First argument - header address -32/64bit */
-	haddr = (uintptr_t)simple_strtoul(argv[1], NULL, 16);
+	haddr = (uintptr_t)hextoul(argv[1], NULL);
 
 	/* With esbc_validate command, Image address must be
 	 * part of header. So, the function is called
diff --git a/board/freescale/common/fsl_validate.c b/board/freescale/common/fsl_validate.c
index 564a8b3b54f..066aa9a7c37 100644
--- a/board/freescale/common/fsl_validate.c
+++ b/board/freescale/common/fsl_validate.c
@@ -767,7 +767,7 @@ static inline int str2longbe(const char *p, ulong *num)
 	if (!p) {
 		return 0;
 	} else {
-		tmp = simple_strtoul(p, &endptr, 16);
+		tmp = hextoul(p, &endptr);
 		if (sizeof(ulong) == 4)
 			*num = cpu_to_be32(tmp);
 		else
diff --git a/board/freescale/common/sys_eeprom.c b/board/freescale/common/sys_eeprom.c
index be0fda06381..9e73056a298 100644
--- a/board/freescale/common/sys_eeprom.c
+++ b/board/freescale/common/sys_eeprom.c
@@ -378,7 +378,7 @@ static void set_mac_address(unsigned int index, const char *string)
 	}
 
 	for (i = 0; *p && (i < 6); i++) {
-		e.mac[index][i] = simple_strtoul(p, &p, 16);
+		e.mac[index][i] = hextoul(p, &p);
 		if (*p == ':')
 			p++;
 	}
@@ -452,7 +452,7 @@ int do_mac(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		set_date(argv[2]);
 		break;
 	case 'p':	/* MAC table size */
-		e.mac_count = simple_strtoul(argv[2], NULL, 16);
+		e.mac_count = hextoul(argv[2], NULL);
 		update_crc();
 		break;
 	case '0' ... '9':	/* "mac 0" through "mac 22" */
diff --git a/board/freescale/lx2160a/eth_lx2160aqds.c b/board/freescale/lx2160a/eth_lx2160aqds.c
index 437f0bc4cf6..a2b6442b542 100644
--- a/board/freescale/lx2160a/eth_lx2160aqds.c
+++ b/board/freescale/lx2160a/eth_lx2160aqds.c
@@ -416,7 +416,7 @@ static inline void do_dpmac_config(int dpmac, const char *arg_dpmacid,
 			       env_dpmac, phy_num + 1, arg_dpmacid);
 		else
 			wriop_set_phy_address(dpmac, phy_num,
-					      simple_strtoul(ret, NULL, 16));
+					      hextoul(ret, NULL));
 	}
 
 	/*search mdio in dpmac arg*/
diff --git a/board/freescale/lx2160a/eth_lx2162aqds.c b/board/freescale/lx2160a/eth_lx2162aqds.c
index b742c1ff528..3b04dea39cd 100644
--- a/board/freescale/lx2160a/eth_lx2162aqds.c
+++ b/board/freescale/lx2160a/eth_lx2162aqds.c
@@ -437,7 +437,7 @@ static inline void do_dpmac_config(int dpmac, const char *arg_dpmacid,
 			       env_dpmac, phy_num + 1, arg_dpmacid);
 		else
 			wriop_set_phy_address(dpmac, phy_num,
-					      simple_strtoul(ret, NULL, 16));
+					      hextoul(ret, NULL));
 	}
 
 	/*search mdio in dpmac arg*/
diff --git a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
index 8273384f2d5..cf4d9c11b89 100644
--- a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
+++ b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
@@ -281,7 +281,7 @@ int board_early_init_r(void)
 	/* If a VSC7385 microcode image is present, then upload it. */
 	tmp = env_get("vscfw_addr");
 	if (tmp) {
-		vscfw_addr = simple_strtoul(tmp, NULL, 16);
+		vscfw_addr = hextoul(tmp, NULL);
 		printf("uploading VSC7385 microcode from %x\n", vscfw_addr);
 		if (vsc7385_upload_firmware((void *)vscfw_addr,
 					    CONFIG_VSC7385_IMAGE_SIZE))
diff --git a/board/freescale/p2041rdb/cpld.c b/board/freescale/p2041rdb/cpld.c
index b042fe3bcbc..a1908b8a571 100644
--- a/board/freescale/p2041rdb/cpld.c
+++ b/board/freescale/p2041rdb/cpld.c
@@ -100,8 +100,8 @@ int cpld_cmd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		else
 			cpld_set_defbank();
 	} else if (strcmp(argv[1], "lane_mux") == 0) {
-		u32 lane = simple_strtoul(argv[2], NULL, 16);
-		u8 val = (u8)simple_strtoul(argv[3], NULL, 16);
+		u32 lane = hextoul(argv[2], NULL);
+		u8 val = (u8)hextoul(argv[3], NULL);
 		u8 reg = CPLD_READ(serdes_mux);
 
 		switch (lane) {
diff --git a/board/gateworks/gw_ventana/common.c b/board/gateworks/gw_ventana/common.c
index c07eb627a21..4a15837473b 100644
--- a/board/gateworks/gw_ventana/common.c
+++ b/board/gateworks/gw_ventana/common.c
@@ -1502,7 +1502,7 @@ void setup_board_gpio(int board, struct ventana_board_info *info)
 			continue;
 		s = hwconfig_subarg(arg, "padctrl", &len);
 		if (s) {
-			ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
+			ctrl = MUX_PAD_CTRL(hextoul(s, NULL)
 					    & 0x1ffff) | MUX_MODE_SION;
 		}
 		if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
diff --git a/board/gateworks/gw_ventana/gw_ventana.c b/board/gateworks/gw_ventana/gw_ventana.c
index 468fb093b7b..6a0382dee39 100644
--- a/board/gateworks/gw_ventana/gw_ventana.c
+++ b/board/gateworks/gw_ventana/gw_ventana.c
@@ -915,7 +915,7 @@ int fdt_fixup_sky2(void *blob, int np, struct pci_dev *dev)
 	if (tmp) {
 		for (j = 0; j < 6; j++) {
 			mac_addr[j] = tmp ?
-				      simple_strtoul(tmp, &end,16) : 0;
+				      hextoul(tmp, &end) : 0;
 			if (tmp)
 				tmp = (*end) ? end+1 : end;
 		}
diff --git a/board/gdsys/common/osd.c b/board/gdsys/common/osd.c
index 679f8f30191..dc548efbc7a 100644
--- a/board/gdsys/common/osd.c
+++ b/board/gdsys/common/osd.c
@@ -284,9 +284,9 @@ static int osd_print(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (!(osd_screen_mask & (1 << screen)))
 			continue;
 
-		x = simple_strtoul(argv[1], NULL, 16);
-		y = simple_strtoul(argv[2], NULL, 16);
-		color = simple_strtoul(argv[3], NULL, 16);
+		x = hextoul(argv[1], NULL);
+		y = hextoul(argv[2], NULL);
+		color = hextoul(argv[3], NULL);
 		text = argv[4];
 		charcount = strlen(text);
 		len = (charcount > bufsize) ? bufsize : charcount;
@@ -416,13 +416,13 @@ int osd_write(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		char *rp;
 		u16 *wp = buffer;
 		unsigned count = (argc > 4) ?
-			simple_strtoul(argv[4], NULL, 16) : 1;
+			hextoul(argv[4], NULL) : 1;
 
 		if (!(osd_screen_mask & (1 << screen)))
 			continue;
 
-		x = simple_strtoul(argv[1], NULL, 16);
-		y = simple_strtoul(argv[2], NULL, 16);
+		x = hextoul(argv[1], NULL);
+		y = hextoul(argv[2], NULL);
 		rp = argv[3];
 
 
@@ -431,7 +431,7 @@ int osd_write(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 			memcpy(substr, rp, 4);
 			substr[4] = 0;
-			*wp = simple_strtoul(substr, NULL, 16);
+			*wp = hextoul(substr, NULL);
 
 			rp += 4;
 			wp++;
@@ -463,8 +463,8 @@ int osd_size(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return 1;
 	}
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
 
 	if (!x || (x > 64) || (x > MAX_X_CHARS) ||
 	    !y || (y > 32) || (y > MAX_Y_CHARS)) {
diff --git a/board/gdsys/common/osd_cmd.c b/board/gdsys/common/osd_cmd.c
index fe6249794e7..6a9c0b4c24f 100644
--- a/board/gdsys/common/osd_cmd.c
+++ b/board/gdsys/common/osd_cmd.c
@@ -30,10 +30,10 @@ static int do_osd_write(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 4 || (strlen(argv[3])) % 2)
 		return CMD_RET_USAGE;
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
 	hexstr = argv[3];
-	count = (argc > 4) ? simple_strtoul(argv[4], NULL, 16) : 1;
+	count = (argc > 4) ? hextoul(argv[4], NULL) : 1;
 
 	buflen = strlen(hexstr) / 2;
 
@@ -80,9 +80,9 @@ static int do_osd_print(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 5)
 		return CMD_RET_USAGE;
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
-	color = simple_strtoul(argv[3], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
+	color = hextoul(argv[3], NULL);
 	text = argv[4];
 
 	for (uclass_first_device(UCLASS_VIDEO_OSD, &dev);
@@ -109,8 +109,8 @@ static int do_osd_size(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
 
 	for (uclass_first_device(UCLASS_VIDEO_OSD, &dev);
 	     dev;
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 016806a2a6c..ff07260194c 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -278,7 +278,7 @@ static int do_checkboardidhwk(struct cmd_tbl *cmdtp, int flag, int argc,
 				 * use simple_strtoul because we need &end and
 				 * we know we got non numeric char at the end
 				 */
-				bid = simple_strtoul(rest, &endp, 16);
+				bid = hextoul(rest, &endp);
 				/* BoardId and HWkey are separated with a "_" */
 				if (*endp == '_') {
 					rest  = endp + 1;
@@ -286,7 +286,7 @@ static int do_checkboardidhwk(struct cmd_tbl *cmdtp, int flag, int argc,
 					 * use simple_strtoul because we need
 					 * &end
 					 */
-					hwkey = simple_strtoul(rest, &endp, 16);
+					hwkey = hextoul(rest, &endp);
 					rest  = endp;
 					while (*rest && !isxdigit(*rest))
 						rest++;
diff --git a/board/kontron/sl28/cmds.c b/board/kontron/sl28/cmds.c
index 046d3b4903f..08a22b5d01e 100644
--- a/board/kontron/sl28/cmds.c
+++ b/board/kontron/sl28/cmds.c
@@ -138,7 +138,7 @@ static int do_sl28_nvm(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 
 	if (argc > 1) {
-		nvm = simple_strtoul(argv[1], &endp, 16);
+		nvm = hextoul(argv[1], &endp);
 		if (*endp != '\0') {
 			printf("ERROR: argument is not a valid number\n");
 			ret = -EINVAL;
diff --git a/board/menlo/m53menlo/m53menlo.c b/board/menlo/m53menlo/m53menlo.c
index c34baca602c..2b331b32df5 100644
--- a/board/menlo/m53menlo/m53menlo.c
+++ b/board/menlo/m53menlo/m53menlo.c
@@ -347,7 +347,7 @@ int board_late_init(void)
 	if (!s)
 		return 0;
 
-	addr = simple_strtoul(s, NULL, 16);
+	addr = hextoul(s, NULL);
 	dst = malloc(CONFIG_SYS_VIDEO_LOGO_MAX_SIZE);
 	if (!dst)
 		return -ENOMEM;
diff --git a/board/renesas/stout/cpld.c b/board/renesas/stout/cpld.c
index ac8048c81c5..b7c75f5aa65 100644
--- a/board/renesas/stout/cpld.c
+++ b/board/renesas/stout/cpld.c
@@ -133,7 +133,7 @@ static int do_cpld(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 	if (!(addr == CPLD_ADDR_VERSION || addr == CPLD_ADDR_MODE ||
 	      addr == CPLD_ADDR_MUX || addr == CPLD_ADDR_HDMI ||
 	      addr == CPLD_ADDR_DIPSW || addr == CPLD_ADDR_RESET)) {
@@ -144,7 +144,7 @@ static int do_cpld(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc == 3 && strcmp(argv[1], "read") == 0) {
 		printf("0x%x\n", cpld_read(addr));
 	} else if (argc == 4 && strcmp(argv[1], "write") == 0) {
-		val = simple_strtoul(argv[3], NULL, 16);
+		val = hextoul(argv[3], NULL);
 		if (addr == CPLD_ADDR_MUX) {
 			/* never mask SCIFA0 console */
 			val &= ~MUX_MSK_SCIFA0_USB;
diff --git a/board/renesas/ulcb/cpld.c b/board/renesas/ulcb/cpld.c
index ebb2d6f7420..0c060a5323d 100644
--- a/board/renesas/ulcb/cpld.c
+++ b/board/renesas/ulcb/cpld.c
@@ -111,7 +111,7 @@ static int do_cpld(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 	if (!(addr == CPLD_ADDR_VERSION || addr == CPLD_ADDR_MODE ||
 	      addr == CPLD_ADDR_MUX || addr == CPLD_ADDR_DIPSW6 ||
 	      addr == CPLD_ADDR_RESET)) {
@@ -122,7 +122,7 @@ static int do_cpld(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc == 3 && strcmp(argv[1], "read") == 0) {
 		printf("0x%x\n", cpld_read(dev, addr));
 	} else if (argc == 4 && strcmp(argv[1], "write") == 0) {
-		val = simple_strtoul(argv[3], NULL, 16);
+		val = hextoul(argv[3], NULL);
 		cpld_write(dev, addr, val);
 	}
 
diff --git a/board/siemens/common/factoryset.c b/board/siemens/common/factoryset.c
index 2e3ae1a54da..fba678b4260 100644
--- a/board/siemens/common/factoryset.c
+++ b/board/siemens/common/factoryset.c
@@ -243,7 +243,7 @@ int factoryset_read_eeprom(int i2c_addr)
 			       buf, MAX_STRING_LENGTH);
 	cp1 = buf;
 	for (i = 0; i < 6; i++) {
-		factory_dat.mac[i] = simple_strtoul((char *)cp1, NULL, 16);
+		factory_dat.mac[i] = hextoul((char *)cp1, NULL);
 		cp1 += 3;
 	}
 
@@ -254,8 +254,7 @@ int factoryset_read_eeprom(int i2c_addr)
 	if (ret > 0) {
 		cp1 = buf;
 		for (i = 0; i < 6; i++) {
-			factory_dat.mac_wlan[i] = simple_strtoul((char *)cp1,
-								 NULL, 16);
+			factory_dat.mac_wlan[i] = hextoul((char *)cp1, NULL);
 			cp1 += 3;
 		}
 	}
@@ -266,15 +265,13 @@ int factoryset_read_eeprom(int i2c_addr)
 	if (0 <= get_factory_record_val(cp, size, (uchar *)"USBD1",
 					(uchar *)"vid", buf,
 					MAX_STRING_LENGTH)) {
-		factory_dat.usb_vendor_id = simple_strtoul((char *)buf,
-							   NULL, 16);
+		factory_dat.usb_vendor_id = hextoul((char *)buf, NULL);
 	}
 
 	if (0 <= get_factory_record_val(cp, size, (uchar *)"USBD1",
 					(uchar *)"pid", buf,
 					MAX_STRING_LENGTH)) {
-		factory_dat.usb_product_id = simple_strtoul((char *)buf,
-							    NULL, 16);
+		factory_dat.usb_product_id = hextoul((char *)buf, NULL);
 	}
 	printf("DFU USB: VID = 0x%4x, PID = 0x%4x\n", factory_dat.usb_vendor_id,
 	       factory_dat.usb_product_id);
@@ -294,8 +291,7 @@ int factoryset_read_eeprom(int i2c_addr)
 	if (0 <= get_factory_record_val(cp, size, (uchar *)"DEV",
 					(uchar *)"ver", buf,
 					MAX_STRING_LENGTH)) {
-		factory_dat.version = simple_strtoul((char *)buf,
-							    NULL, 16);
+		factory_dat.version = hextoul((char *)buf, NULL);
 		debug("version number: %d\n", factory_dat.version);
 	}
 	/* Get ASN from factory set if available */
diff --git a/board/sifive/unmatched/hifive-platform-i2c-eeprom.c b/board/sifive/unmatched/hifive-platform-i2c-eeprom.c
index ad2f3155d07..b230a71b3a6 100644
--- a/board/sifive/unmatched/hifive-platform-i2c-eeprom.c
+++ b/board/sifive/unmatched/hifive-platform-i2c-eeprom.c
@@ -281,7 +281,7 @@ static void set_mac_address(char *string)
 	}
 
 	for (i = 0; *string && (i < MAC_ADDR_BYTES); i++) {
-		e.mac_addr[i] = simple_strtoul(string, &string, 16);
+		e.mac_addr[i] = hextoul(string, &string);
 		if (*string == ':')
 			string++;
 	}
diff --git a/board/synopsys/hsdk/env-lib.c b/board/synopsys/hsdk/env-lib.c
index 235f29565f9..e2258385ceb 100644
--- a/board/synopsys/hsdk/env-lib.c
+++ b/board/synopsys/hsdk/env-lib.c
@@ -252,7 +252,7 @@ static int arg_read_set(const struct env_map_common *map, u32 i, int argc,
 	char *endp = argv[1];
 
 	if (map[i].type == ENV_HEX)
-		map[i].val->val = simple_strtoul(argv[1], &endp, 16);
+		map[i].val->val = hextoul(argv[1], &endp);
 	else
 		map[i].val->val = simple_strtoul(argv[1], &endp, 10);
 
diff --git a/board/ti/am64x/evm.c b/board/ti/am64x/evm.c
index cdbb9a87bc4..21c58c76d67 100644
--- a/board/ti/am64x/evm.c
+++ b/board/ti/am64x/evm.c
@@ -120,7 +120,7 @@ static void setup_serial(void)
 	if (env_get("serial#"))
 		return;
 
-	board_serial = simple_strtoul(ep->serial, &endp, 16);
+	board_serial = hextoul(ep->serial, &endp);
 	if (*endp != '\0') {
 		pr_err("Error: Can't set serial# to %s\n", ep->serial);
 		return;
diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
index b9a9f195522..e784fc00763 100644
--- a/board/ti/j721e/evm.c
+++ b/board/ti/j721e/evm.c
@@ -199,7 +199,7 @@ static void setup_serial(void)
 	if (env_get("serial#"))
 		return;
 
-	board_serial = simple_strtoul(ep->serial, &endp, 16);
+	board_serial = hextoul(ep->serial, &endp);
 	if (*endp != '\0') {
 		pr_err("Error: Can't set serial# to %s\n", ep->serial);
 		return;
diff --git a/board/varisys/common/sys_eeprom.c b/board/varisys/common/sys_eeprom.c
index 251d9fd73e5..1bf543619b8 100644
--- a/board/varisys/common/sys_eeprom.c
+++ b/board/varisys/common/sys_eeprom.c
@@ -299,7 +299,7 @@ static void set_mac_address(unsigned int index, const char *string)
 	}
 
 	for (i = 0; *p && (i < 6); i++) {
-		e.mac[index][i] = simple_strtoul(p, &p, 16);
+		e.mac[index][i] = hextoul(p, &p);
 		if (*p == ':')
 			p++;
 	}
@@ -364,7 +364,7 @@ int do_mac(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		set_date(argv[2]);
 		break;
 	case 'p':	/* MAC table size */
-		e.mac_count = simple_strtoul(argv[2], NULL, 16);
+		e.mac_count = hextoul(argv[2], NULL);
 		update_crc();
 		break;
 	case '0' ... '9':	/* "mac 0" through "mac 22" */
diff --git a/board/xilinx/common/fru.c b/board/xilinx/common/fru.c
index ccf48723ff8..f6ca46c3cec 100644
--- a/board/xilinx/common/fru.c
+++ b/board/xilinx/common/fru.c
@@ -19,7 +19,7 @@ static int do_fru_capture(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], &endp, 16);
+	addr = hextoul(argv[2], &endp);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
 
@@ -41,7 +41,7 @@ static int do_fru_generate(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 
 	return fru_generate(addr, argv[3], argv[4], argv[5], argv[6], argv[7]);
 }
diff --git a/board/xilinx/versal/cmds.c b/board/xilinx/versal/cmds.c
index f5735d0c62c..04d4cdb1411 100644
--- a/board/xilinx/versal/cmds.c
+++ b/board/xilinx/versal/cmds.c
@@ -32,7 +32,7 @@ static int do_versal_load_pdi(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 	}
 
-	len = simple_strtoul(argv[3], NULL, 16);
+	len = hextoul(argv[3], NULL);
 	if (!len) {
 		debug("pdi_load: zero size\n");
 		return CMD_RET_USAGE;
diff --git a/board/xilinx/zynq/cmds.c b/board/xilinx/zynq/cmds.c
index 6c697caa625..024fac65f30 100644
--- a/board/xilinx/zynq/cmds.c
+++ b/board/xilinx/zynq/cmds.c
@@ -422,7 +422,7 @@ static int do_zynq_rsa(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != cmdtp->maxargs)
 		return CMD_RET_FAILURE;
 
-	src_ptr = simple_strtoul(argv[2], &endp, 16);
+	src_ptr = hextoul(argv[2], &endp);
 	if (*argv[2] == 0 || *endp != 0)
 		return CMD_RET_USAGE;
 
@@ -453,26 +453,26 @@ static int zynq_decrypt_image(struct cmd_tbl *cmdtp, int flag, int argc,
 		else
 			return CMD_RET_USAGE;
 
-		srcaddr = simple_strtoul(argv[3], &endp, 16);
+		srcaddr = hextoul(argv[3], &endp);
 		if (*argv[3] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
-		srclen = simple_strtoul(argv[4], &endp, 16);
+		srclen = hextoul(argv[4], &endp);
 		if (*argv[4] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
 
 		dstaddr = 0xFFFFFFFF;
 		dstlen = srclen;
 	} else {
-		srcaddr = simple_strtoul(argv[2], &endp, 16);
+		srcaddr = hextoul(argv[2], &endp);
 		if (*argv[2] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
-		srclen = simple_strtoul(argv[3], &endp, 16);
+		srclen = hextoul(argv[3], &endp);
 		if (*argv[3] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
-		dstaddr = simple_strtoul(argv[4], &endp, 16);
+		dstaddr = hextoul(argv[4], &endp);
 		if (*argv[4] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
-		dstlen = simple_strtoul(argv[5], &endp, 16);
+		dstlen = hextoul(argv[5], &endp);
 		if (*argv[5] == 0 || *endp != 0)
 			return CMD_RET_USAGE;
 	}
diff --git a/board/xilinx/zynqmp/cmds.c b/board/xilinx/zynqmp/cmds.c
index cf63ad97fab..b15c0f599bd 100644
--- a/board/xilinx/zynqmp/cmds.c
+++ b/board/xilinx/zynqmp/cmds.c
@@ -40,7 +40,7 @@ static int do_zynqmp_verify_secure(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	src_addr = simple_strtoull(argv[2], NULL, 16);
-	len = simple_strtoul(argv[3], NULL, 16);
+	len = hextoul(argv[3], NULL);
 
 	if (argc == 5)
 		key_ptr = (uint8_t *)(uintptr_t)simple_strtoull(argv[4],
@@ -86,7 +86,7 @@ static int do_zynqmp_mmio_read(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 
 	ret = zynqmp_mmio_read(addr, &read_val);
 	if (!ret)
@@ -107,9 +107,9 @@ static int do_zynqmp_mmio_write(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
-	mask = simple_strtoul(argv[3], NULL, 16);
-	val = simple_strtoul(argv[4], NULL, 16);
+	addr = hextoul(argv[2], NULL);
+	mask = hextoul(argv[3], NULL);
+	val = hextoul(argv[4], NULL);
 
 	ret = zynqmp_mmio_write(addr, mask, val);
 	if (ret != 0)
@@ -135,12 +135,12 @@ static int do_zynqmp_aes(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < cmdtp->maxargs - 1)
 		return CMD_RET_USAGE;
 
-	aes->srcaddr = simple_strtoul(argv[2], NULL, 16);
-	aes->ivaddr = simple_strtoul(argv[3], NULL, 16);
-	aes->len = simple_strtoul(argv[4], NULL, 16);
-	aes->op = simple_strtoul(argv[5], NULL, 16);
-	aes->keysrc = simple_strtoul(argv[6], NULL, 16);
-	aes->dstaddr = simple_strtoul(argv[7], NULL, 16);
+	aes->srcaddr = hextoul(argv[2], NULL);
+	aes->ivaddr = hextoul(argv[3], NULL);
+	aes->len = hextoul(argv[4], NULL);
+	aes->op = hextoul(argv[5], NULL);
+	aes->keysrc = hextoul(argv[6], NULL);
+	aes->dstaddr = hextoul(argv[7], NULL);
 
 	flush_dcache_range((ulong)aes, (ulong)(aes) +
 			   roundup(sizeof(struct aes), ARCH_DMA_MINALIGN));
@@ -161,7 +161,7 @@ static int do_zynqmp_aes(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (argc < cmdtp->maxargs)
 			return CMD_RET_USAGE;
 
-		aes->keyaddr = simple_strtoul(argv[8], NULL, 16);
+		aes->keyaddr = hextoul(argv[8], NULL);
 		if (aes->keyaddr)
 			flush_dcache_range(aes->keyaddr,
 					   (aes->keyaddr +
@@ -187,7 +187,7 @@ static int do_zynqmp_tcm_init(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	mode = simple_strtoul(argv[2], NULL, 16);
+	mode = hextoul(argv[2], NULL);
 	if (mode != TCM_LOCK && mode != TCM_SPLIT) {
 		printf("Mode should be either 0(lock)/1(split)\n");
 		return CMD_RET_FAILURE;
@@ -209,8 +209,8 @@ static int do_zynqmp_pmufw(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != cmdtp->maxargs)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[2], NULL, 16);
-	size = simple_strtoul(argv[3], NULL, 16);
+	addr = hextoul(argv[2], NULL);
+	size = hextoul(argv[3], NULL);
 	flush_dcache_range((ulong)addr, (ulong)(addr + size));
 
 	zynqmp_pmufw_load_config_object((const void *)(uintptr_t)addr,
@@ -236,16 +236,16 @@ static int do_zynqmp_rsa(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 	}
 
-	srcaddr = simple_strtoul(argv[2], NULL, 16);
-	srclen = simple_strtoul(argv[3], NULL, 16);
+	srcaddr = hextoul(argv[2], NULL);
+	srclen = hextoul(argv[3], NULL);
 	if (srclen != RSA_KEY_SIZE) {
 		puts("ERR: srclen should be equal to 0x200(512 bytes)\n");
 		return CMD_RET_USAGE;
 	}
 
-	mod = simple_strtoul(argv[4], NULL, 16);
-	exp = simple_strtoul(argv[5], NULL, 16);
-	rsaop = simple_strtoul(argv[6], NULL, 16);
+	mod = hextoul(argv[4], NULL);
+	exp = hextoul(argv[5], NULL);
+	rsaop = hextoul(argv[6], NULL);
 	if (!(rsaop == 0 || rsaop == 1)) {
 		puts("ERR: rsaop should be either 0 or 1\n");
 		return CMD_RET_USAGE;
@@ -299,11 +299,11 @@ static int do_zynqmp_sha3(struct cmd_tbl *cmdtp, int flag,
 		return CMD_RET_FAILURE;
 	}
 
-	srcaddr = simple_strtoul(argv[2], NULL, 16);
-	srclen = simple_strtoul(argv[3], NULL, 16);
+	srcaddr = hextoul(argv[2], NULL);
+	srclen = hextoul(argv[3], NULL);
 
 	if (argc == 5) {
-		hashaddr = simple_strtoul(argv[4], NULL, 16);
+		hashaddr = hextoul(argv[4], NULL);
 		flush_dcache_range(hashaddr,
 				   hashaddr + roundup(ZYNQMP_SHA3_SIZE,
 						      ARCH_DMA_MINALIGN));
diff --git a/cmd/abootimg.c b/cmd/abootimg.c
index 40e8978f152..f48a9dcb021 100644
--- a/cmd/abootimg.c
+++ b/cmd/abootimg.c
@@ -161,7 +161,7 @@ static int do_abootimg_addr(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	img_addr = simple_strtoul(argv[1], &endp, 16);
+	img_addr = hextoul(argv[1], &endp);
 	if (*endp != '\0') {
 		printf("Error: Wrong image address\n");
 		return CMD_RET_FAILURE;
diff --git a/cmd/adtimg.c b/cmd/adtimg.c
index aa943007f35..f4b5cbf35b9 100644
--- a/cmd/adtimg.c
+++ b/cmd/adtimg.c
@@ -27,7 +27,7 @@ static int do_adtimg_addr(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	hdr_addr = simple_strtoul(argv[1], &endp, 16);
+	hdr_addr = hextoul(argv[1], &endp);
 	if (*endp != '\0') {
 		printf("Error: Wrong image address '%s'\n", argv[1]);
 		return CMD_RET_FAILURE;
diff --git a/cmd/aes.c b/cmd/aes.c
index 4c0dad99326..1936518824a 100644
--- a/cmd/aes.c
+++ b/cmd/aes.c
@@ -55,11 +55,11 @@ static int do_aes(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	else
 		return CMD_RET_USAGE;
 
-	key_addr = simple_strtoul(argv[2], NULL, 16);
-	iv_addr = simple_strtoul(argv[3], NULL, 16);
-	src_addr = simple_strtoul(argv[4], NULL, 16);
-	dst_addr = simple_strtoul(argv[5], NULL, 16);
-	len = simple_strtoul(argv[6], NULL, 16);
+	key_addr = hextoul(argv[2], NULL);
+	iv_addr = hextoul(argv[3], NULL);
+	src_addr = hextoul(argv[4], NULL);
+	dst_addr = hextoul(argv[5], NULL);
+	len = hextoul(argv[6], NULL);
 
 	key_ptr = (uint8_t *)map_sysmem(key_addr, key_len);
 	iv_ptr = (uint8_t *)map_sysmem(iv_addr, 128 / 8);
diff --git a/cmd/armflash.c b/cmd/armflash.c
index 5e7315eb7cd..d1466f73aa4 100644
--- a/cmd/armflash.c
+++ b/cmd/armflash.c
@@ -280,7 +280,7 @@ static int do_afs(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	} else if (argc == 4 && !strcmp(argv[1], "load")) {
 		ulong load_addr;
 
-		load_addr = simple_strtoul(argv[3], NULL, 16);
+		load_addr = hextoul(argv[3], NULL);
 		ret = load_image(argv[2], load_addr);
 	} else {
 		return CMD_RET_USAGE;
diff --git a/cmd/avb.c b/cmd/avb.c
index 88172a9ee67..02b4b1f022c 100644
--- a/cmd/avb.c
+++ b/cmd/avb.c
@@ -22,7 +22,7 @@ int do_avb_init(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	mmc_dev = simple_strtoul(argv[1], NULL, 16);
+	mmc_dev = hextoul(argv[1], NULL);
 
 	if (avb_ops)
 		avb_ops_free(avb_ops);
@@ -53,9 +53,9 @@ int do_avb_read_part(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	part = argv[1];
-	offset = simple_strtoul(argv[2], NULL, 16);
-	bytes = simple_strtoul(argv[3], NULL, 16);
-	buffer = (void *)simple_strtoul(argv[4], NULL, 16);
+	offset = hextoul(argv[2], NULL);
+	bytes = hextoul(argv[3], NULL);
+	buffer = (void *)hextoul(argv[4], NULL);
 
 	if (avb_ops->read_from_partition(avb_ops, part, offset, bytes,
 					 buffer, &bytes_read) ==
@@ -86,8 +86,8 @@ int do_avb_read_part_hex(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	part = argv[1];
-	offset = simple_strtoul(argv[2], NULL, 16);
-	bytes = simple_strtoul(argv[3], NULL, 16);
+	offset = hextoul(argv[2], NULL);
+	bytes = hextoul(argv[3], NULL);
 
 	buffer = malloc(bytes);
 	if (!buffer) {
@@ -132,9 +132,9 @@ int do_avb_write_part(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	part = argv[1];
-	offset = simple_strtoul(argv[2], NULL, 16);
-	bytes = simple_strtoul(argv[3], NULL, 16);
-	buffer = (void *)simple_strtoul(argv[4], NULL, 16);
+	offset = hextoul(argv[2], NULL);
+	bytes = hextoul(argv[3], NULL);
+	buffer = (void *)hextoul(argv[4], NULL);
 
 	if (avb_ops->write_to_partition(avb_ops, part, offset, bytes, buffer) ==
 	    AVB_IO_RESULT_OK) {
@@ -161,7 +161,7 @@ int do_avb_read_rb(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	index = (size_t)simple_strtoul(argv[1], NULL, 16);
+	index = (size_t)hextoul(argv[1], NULL);
 
 	if (avb_ops->read_rollback_index(avb_ops, index, &rb_idx) ==
 	    AVB_IO_RESULT_OK) {
@@ -188,8 +188,8 @@ int do_avb_write_rb(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 3)
 		return CMD_RET_USAGE;
 
-	index = (size_t)simple_strtoul(argv[1], NULL, 16);
-	rb_idx = simple_strtoul(argv[2], NULL, 16);
+	index = (size_t)hextoul(argv[1], NULL);
+	rb_idx = hextoul(argv[2], NULL);
 
 	if (avb_ops->write_rollback_index(avb_ops, index, rb_idx) ==
 	    AVB_IO_RESULT_OK)
diff --git a/cmd/axi.c b/cmd/axi.c
index c72197ee82b..c676819b811 100644
--- a/cmd/axi.c
+++ b/cmd/axi.c
@@ -198,14 +198,14 @@ static int do_axi_md(struct cmd_tbl *cmdtp, int flag, int argc,
 		/*
 		 * Address is specified since argc >= 3
 		 */
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 
 		/*
 		 * If there's another parameter, it is the length to display;
 		 * length is the number of objects, not number of bytes
 		 */
 		if (argc > 3)
-			length = simple_strtoul(argv[3], NULL, 16);
+			length = hextoul(argv[3], NULL);
 	}
 
 	switch (size) {
@@ -291,14 +291,14 @@ static int do_axi_mw(struct cmd_tbl *cmdtp, int flag, int argc,
 	};
 
 	/* Address is specified since argc > 4 */
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 
 	/* Get the value to write */
-	writeval = simple_strtoul(argv[3], NULL, 16);
+	writeval = hextoul(argv[3], NULL);
 
 	/* Count ? */
 	if (argc == 5)
-		count = simple_strtoul(argv[4], NULL, 16);
+		count = hextoul(argv[4], NULL);
 	else
 		count = 1;
 
diff --git a/cmd/bedbug.c b/cmd/bedbug.c
index bef617b6a4f..549c9056ddc 100644
--- a/cmd/bedbug.c
+++ b/cmd/bedbug.c
@@ -75,11 +75,11 @@ int do_bedbug_dis(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	if ((flag & CMD_FLAG_REPEAT) == 0) {
 		/* New command */
-		addr = simple_strtoul (argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 
 		/* If an extra param is given then it is the length */
 		if (argc > 2)
-			len = simple_strtoul (argv[2], NULL, 16);
+			len = hextoul(argv[2], NULL);
 	}
 
 	/* Run the disassembler */
@@ -114,7 +114,7 @@ int do_bedbug_asm(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	printf ("\nEnter '.' when done\n");
-	mem_addr = simple_strtoul (argv[1], NULL, 16);
+	mem_addr = hextoul(argv[1], NULL);
 
 	while (1) {
 		putc ('\n');
diff --git a/cmd/binop.c b/cmd/binop.c
index c85cb51568d..bb5adc3e05f 100644
--- a/cmd/binop.c
+++ b/cmd/binop.c
@@ -58,7 +58,7 @@ void write_to_mem(char *varname, u8 *result, ulong len)
 	ulong addr;
 	u8 *buf;
 
-	addr = simple_strtoul(varname, NULL, 16);
+	addr = hextoul(varname, NULL);
 	buf = map_sysmem(addr, len);
 	memcpy(buf, result, len);
 	unmap_sysmem(buf);
@@ -95,12 +95,12 @@ static int do_binop(struct cmd_tbl *cmdtp, int flag, int argc,
 	src2 = malloc(len);
 
 	if (*src1arg == '*')
-		read_from_mem(simple_strtoul(src1arg + 1, NULL, 16), src1, len);
+		read_from_mem(hextoul(src1arg + 1, NULL), src1, len);
 	else
 		read_from_env_var(src1arg, src1);
 
 	if (*src2arg == '*')
-		read_from_mem(simple_strtoul(src2arg + 1, NULL, 16), src2, len);
+		read_from_mem(hextoul(src2arg + 1, NULL), src2, len);
 	else
 		read_from_env_var(src2arg, src2);
 
diff --git a/cmd/blk_common.c b/cmd/blk_common.c
index 87f94b5abbf..0898798dec3 100644
--- a/cmd/blk_common.c
+++ b/cmd/blk_common.c
@@ -63,9 +63,9 @@ int blk_common_cmd(int argc, char *const argv[], enum if_type if_type,
 
 	default: /* at least 4 args */
 		if (strcmp(argv[1], "read") == 0) {
-			ulong addr = simple_strtoul(argv[2], NULL, 16);
-			lbaint_t blk = simple_strtoul(argv[3], NULL, 16);
-			ulong cnt = simple_strtoul(argv[4], NULL, 16);
+			ulong addr = hextoul(argv[2], NULL);
+			lbaint_t blk = hextoul(argv[3], NULL);
+			ulong cnt = hextoul(argv[4], NULL);
 			ulong n;
 
 			printf("\n%s read: device %d block # "LBAFU", count %lu ... ",
@@ -78,9 +78,9 @@ int blk_common_cmd(int argc, char *const argv[], enum if_type if_type,
 			       n == cnt ? "OK" : "ERROR");
 			return n == cnt ? 0 : 1;
 		} else if (strcmp(argv[1], "write") == 0) {
-			ulong addr = simple_strtoul(argv[2], NULL, 16);
-			lbaint_t blk = simple_strtoul(argv[3], NULL, 16);
-			ulong cnt = simple_strtoul(argv[4], NULL, 16);
+			ulong addr = hextoul(argv[2], NULL);
+			lbaint_t blk = hextoul(argv[3], NULL);
+			ulong cnt = hextoul(argv[4], NULL);
 			ulong n;
 
 			printf("\n%s write: device %d block # "LBAFU", count %lu ... ",
diff --git a/cmd/blob.c b/cmd/blob.c
index 887219cc079..e2efae7a115 100644
--- a/cmd/blob.c
+++ b/cmd/blob.c
@@ -70,10 +70,10 @@ static int do_blob(struct cmd_tbl *cmdtp, int flag, int argc,
 	else
 		return CMD_RET_USAGE;
 
-	src_addr = simple_strtoul(argv[2], NULL, 16);
-	dst_addr = simple_strtoul(argv[3], NULL, 16);
-	len = simple_strtoul(argv[4], NULL, 16);
-	key_addr = simple_strtoul(argv[5], NULL, 16);
+	src_addr = hextoul(argv[2], NULL);
+	dst_addr = hextoul(argv[3], NULL);
+	len = hextoul(argv[4], NULL);
+	key_addr = hextoul(argv[5], NULL);
 
 	km_ptr = (uint8_t *)(uintptr_t)key_addr;
 	src_ptr = (uint8_t *)(uintptr_t)src_addr;
diff --git a/cmd/bmp.c b/cmd/bmp.c
index 6040fa5d95d..f4fe97d89d4 100644
--- a/cmd/bmp.c
+++ b/cmd/bmp.c
@@ -102,7 +102,7 @@ static int do_bmp_info(struct cmd_tbl *cmdtp, int flag, int argc,
 		addr = image_load_addr;
 		break;
 	case 2:		/* use argument */
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		break;
 	default:
 		return CMD_RET_USAGE;
@@ -124,10 +124,10 @@ static int do_bmp_display(struct cmd_tbl *cmdtp, int flag, int argc,
 		addr = image_load_addr;
 		break;
 	case 2:		/* use argument */
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		break;
 	case 4:
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		if (!strcmp(argv[2], "m"))
 			x = BMP_ALIGN_CENTER;
 		else
diff --git a/cmd/boot.c b/cmd/boot.c
index b84c0ed89ec..fab294e622b 100644
--- a/cmd/boot.c
+++ b/cmd/boot.c
@@ -29,7 +29,7 @@ static int do_go(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	printf ("## Starting application at 0x%08lX ...\n", addr);
 
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index cba81ffe75e..83eab0bd7f1 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -281,7 +281,7 @@ efi_status_t efi_install_fdt(void *fdt)
 				return EFI_NOT_FOUND;
 			}
 		}
-		fdt_addr = simple_strtoul(fdt_opt, NULL, 16);
+		fdt_addr = hextoul(fdt_opt, NULL);
 		if (!fdt_addr) {
 			log_err("ERROR: invalid $fdt_addr or $fdtcontroladdr\n");
 			return EFI_LOAD_ERROR;
@@ -628,7 +628,7 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc > 2) {
 		uintptr_t fdt_addr;
 
-		fdt_addr = simple_strtoul(argv[2], NULL, 16);
+		fdt_addr = hextoul(argv[2], NULL);
 		fdt = map_sysmem(fdt_addr, 0);
 	} else {
 		fdt = EFI_FDT_USE_INTERNAL;
diff --git a/cmd/booti.c b/cmd/booti.c
index 3df70ea9caa..397d4b83236 100644
--- a/cmd/booti.c
+++ b/cmd/booti.c
@@ -43,7 +43,7 @@ static int booti_start(struct cmd_tbl *cmdtp, int flag, int argc,
 		debug("*  kernel: default image load address = 0x%08lx\n",
 				image_load_addr);
 	} else {
-		ld = simple_strtoul(argv[0], NULL, 16);
+		ld = hextoul(argv[0], NULL);
 		debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
 	}
 
diff --git a/cmd/bootm.c b/cmd/bootm.c
index 81c6b939781..92468d09a1f 100644
--- a/cmd/bootm.c
+++ b/cmd/bootm.c
@@ -112,7 +112,7 @@ int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc > 0) {
 		char *endp;
 
-		simple_strtoul(argv[0], &endp, 16);
+		hextoul(argv[0], &endp);
 		/* endp pointing to NULL means that argv[0] was just a
 		 * valid number, pass it along to the normal bootm processing
 		 *
@@ -240,7 +240,7 @@ static int do_iminfo(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 
 	for (arg = 1; arg < argc; ++arg) {
-		addr = simple_strtoul(argv[arg], NULL, 16);
+		addr = hextoul(argv[arg], NULL);
 		if (image_info(addr) != 0)
 			rcode = 1;
 	}
diff --git a/cmd/bootstage.c b/cmd/bootstage.c
index 0e623f216b1..77a4bc66ff4 100644
--- a/cmd/bootstage.c
+++ b/cmd/bootstage.c
@@ -24,12 +24,12 @@ static int get_base_size(int argc, char *const argv[], ulong *basep,
 	*sizep = CONFIG_BOOTSTAGE_STASH_SIZE;
 	if (argc < 2)
 		return 0;
-	*basep = simple_strtoul(argv[1], &endp, 16);
+	*basep = hextoul(argv[1], &endp);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
 	if (argc == 2)
 		return 0;
-	*sizep = simple_strtoul(argv[2], &endp, 16);
+	*sizep = hextoul(argv[2], &endp);
 	if (*argv[2] == 0 || *endp != 0)
 		return -1;
 
diff --git a/cmd/bootz.c b/cmd/bootz.c
index 7556cd2752a..4f024bde5fe 100644
--- a/cmd/bootz.c
+++ b/cmd/bootz.c
@@ -39,7 +39,7 @@ static int bootz_start(struct cmd_tbl *cmdtp, int flag, int argc,
 		debug("*  kernel: default image load address = 0x%08lx\n",
 				image_load_addr);
 	} else {
-		images->ep = simple_strtoul(argv[0], NULL, 16);
+		images->ep = hextoul(argv[0], NULL);
 		debug("*  kernel: cmdline image address = 0x%08lx\n",
 			images->ep);
 	}
diff --git a/cmd/broadcom/nitro_image_load.c b/cmd/broadcom/nitro_image_load.c
index 4a36b300c43..93b5cb4cebe 100644
--- a/cmd/broadcom/nitro_image_load.c
+++ b/cmd/broadcom/nitro_image_load.c
@@ -53,13 +53,13 @@ static int do_spi_images_addr(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	/* convert command parameter to fastboot address (base 16), i.e. hex */
-	images_load_addr = simple_strtoul(argv[1], NULL, 16);
+	images_load_addr = hextoul(argv[1], NULL);
 	if (!images_load_addr) {
 		pr_err("Invalid load address\n");
 		return CMD_RET_USAGE;
 	}
 
-	spi_load_addr = simple_strtoul(argv[2], NULL, 16);
+	spi_load_addr = hextoul(argv[2], NULL);
 	if (!spi_load_addr) {
 		pr_err("Invalid spi load address\n");
 		return CMD_RET_USAGE;
diff --git a/cmd/cbfs.c b/cmd/cbfs.c
index 10c2c929c37..8a61f2c26f9 100644
--- a/cmd/cbfs.c
+++ b/cmd/cbfs.c
@@ -22,7 +22,7 @@ static int do_cbfs_init(struct cmd_tbl *cmdtp, int flag, int argc,
 		return 0;
 	}
 	if (argc == 2) {
-		end_of_rom = simple_strtoul(argv[1], &ep, 16);
+		end_of_rom = hextoul(argv[1], &ep);
 		if (*ep) {
 			puts("\n** Invalid end of ROM **\n");
 			return 1;
@@ -58,9 +58,9 @@ static int do_cbfs_fsload(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 
 	/* parse offset and count */
-	offset = simple_strtoul(argv[1], NULL, 16);
+	offset = hextoul(argv[1], NULL);
 	if (argc == 4)
-		count = simple_strtoul(argv[3], NULL, 16);
+		count = hextoul(argv[3], NULL);
 	else
 		count = 0;
 
diff --git a/cmd/cramfs.c b/cmd/cramfs.c
index 1aeb56702ca..44c0818d5d4 100644
--- a/cmd/cramfs.c
+++ b/cmd/cramfs.c
@@ -107,7 +107,7 @@ int do_cramfs_load(struct cmd_tbl *cmdtp, int flag, int argc,
 	struct mtdids id;
 
 	ulong addr;
-	addr = simple_strtoul(env_get("cramfsaddr"), NULL, 16);
+	addr = hextoul(env_get("cramfsaddr"), NULL);
 
 	/* hack! */
 	/* cramfs_* only supports NOR flash chips */
@@ -172,7 +172,7 @@ int do_cramfs_ls(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	struct mtdids id;
 
 	ulong addr;
-	addr = simple_strtoul(env_get("cramfsaddr"), NULL, 16);
+	addr = hextoul(env_get("cramfsaddr"), NULL);
 
 	/* hack! */
 	/* cramfs_* only supports NOR flash chips */
diff --git a/cmd/cros_ec.c b/cmd/cros_ec.c
index eb5053d6424..abda5d6cd23 100644
--- a/cmd/cros_ec.c
+++ b/cmd/cros_ec.c
@@ -65,11 +65,11 @@ static int do_read_write(struct udevice *dev, int is_write, int argc,
 		return 1;
 	if (argc < 4)
 		return 1;
-	addr = simple_strtoul(argv[3], &endp, 16);
+	addr = hextoul(argv[3], &endp);
 	if (*argv[3] == 0 || *endp != 0)
 		return 1;
 	if (argc > 4) {
-		size = simple_strtoul(argv[4], &endp, 16);
+		size = hextoul(argv[4], &endp);
 		if (*argv[4] == 0 || *endp != 0)
 			return 1;
 	}
diff --git a/cmd/demo.c b/cmd/demo.c
index 78a55f72b60..a2957f770d0 100644
--- a/cmd/demo.c
+++ b/cmd/demo.c
@@ -48,7 +48,7 @@ static int do_demo_light(struct cmd_tbl *cmdtp, int flag, int argc,
 	int ret;
 
 	if (argc) {
-		light = simple_strtoul(argv[0], NULL, 16);
+		light = hextoul(argv[0], NULL);
 		ret = demo_set_light(demo_dev, light);
 	} else {
 		ret = demo_get_light(demo_dev);
diff --git a/cmd/disk.c b/cmd/disk.c
index 2726115e855..cb3b990ba3a 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -36,7 +36,7 @@ int common_diskboot(struct cmd_tbl *cmdtp, const char *intf, int argc,
 	bootstage_mark(BOOTSTAGE_ID_IDE_ADDR);
 
 	if (argc > 1)
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 
 	bootstage_mark(BOOTSTAGE_ID_IDE_BOOT_DEVICE);
 
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index 8211a589acf..67ab06aefc1 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -61,7 +61,7 @@ static int do_efi_capsule_update(struct cmd_tbl *cmdtp, int flag,
 		argv++;
 	}
 
-	capsule = (typeof(capsule))simple_strtoul(argv[1], &endp, 16);
+	capsule = (typeof(capsule))hextoul(argv[1], &endp);
 	if (endp == argv[1]) {
 		printf("Invalid address: %s", argv[1]);
 		return CMD_RET_FAILURE;
@@ -117,7 +117,7 @@ static int do_efi_capsule_show(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	capsule = (typeof(capsule))simple_strtoul(argv[1], &endp, 16);
+	capsule = (typeof(capsule))hextoul(argv[1], &endp);
 	if (endp == argv[1]) {
 		printf("Invalid address: %s", argv[1]);
 		return CMD_RET_FAILURE;
@@ -256,7 +256,7 @@ static int do_efi_capsule_res(struct cmd_tbl *cmdtp, int flag,
 		argc--;
 		argv++;
 
-		capsule_id = simple_strtoul(argv[0], &endp, 16);
+		capsule_id = hextoul(argv[0], &endp);
 		if (capsule_id < 0 || capsule_id > 0xffff)
 			return CMD_RET_USAGE;
 
@@ -983,7 +983,7 @@ static int do_efi_boot_add(struct cmd_tbl *cmdtp, int flag,
 				r = CMD_RET_USAGE;
 				goto out;
 			}
-			id = (int)simple_strtoul(argv[1], &endp, 16);
+			id = (int)hextoul(argv[1], &endp);
 			if (*endp != '\0' || id > 0xffff)
 				return CMD_RET_USAGE;
 
@@ -1113,7 +1113,7 @@ static int do_efi_boot_rm(struct cmd_tbl *cmdtp, int flag,
 
 	guid = efi_global_variable_guid;
 	for (i = 1; i < argc; i++, argv++) {
-		id = (int)simple_strtoul(argv[1], &endp, 16);
+		id = (int)hextoul(argv[1], &endp);
 		if (*endp != '\0' || id > 0xffff)
 			return CMD_RET_FAILURE;
 
@@ -1410,7 +1410,7 @@ static int do_efi_boot_next(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	bootnext = (u16)simple_strtoul(argv[1], &endp, 16);
+	bootnext = (u16)hextoul(argv[1], &endp);
 	if (*endp) {
 		printf("invalid value: %s\n", argv[1]);
 		r = CMD_RET_FAILURE;
@@ -1469,7 +1469,7 @@ static int do_efi_boot_order(struct cmd_tbl *cmdtp, int flag,
 		return CMD_RET_FAILURE;
 
 	for (i = 0; i < argc; i++) {
-		id = (int)simple_strtoul(argv[i], &endp, 16);
+		id = (int)hextoul(argv[i], &endp);
 		if (*endp != '\0' || id > 0xffff) {
 			printf("invalid value: %s\n", argv[i]);
 			r = CMD_RET_FAILURE;
diff --git a/cmd/elf.c b/cmd/elf.c
index d44b95d9033..d75b21461c2 100644
--- a/cmd/elf.c
+++ b/cmd/elf.c
@@ -115,7 +115,7 @@ int do_bootvx(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc < 2)
 		addr = image_load_addr;
 	else
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 
 #if defined(CONFIG_CMD_NET)
 	/*
@@ -200,7 +200,7 @@ int do_bootvx(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 
 	if (!bootaddr)
-		bootaddr = simple_strtoul(tmp, NULL, 16);
+		bootaddr = hextoul(tmp, NULL);
 
 	/*
 	 * Check to see if the bootline is defined in the 'bootargs' parameter.
diff --git a/cmd/fastboot.c b/cmd/fastboot.c
index ad5c0649118..033a2c95e8f 100644
--- a/cmd/fastboot.c
+++ b/cmd/fastboot.c
@@ -112,13 +112,13 @@ static int do_fastboot(struct cmd_tbl *cmdtp, int flag, int argc,
 			case 'l':
 				if (--argc <= 0)
 					return CMD_RET_USAGE;
-				buf_addr = simple_strtoul(*++argv, NULL, 16);
+				buf_addr = hextoul(*++argv, NULL);
 				goto NXTARG;
 
 			case 's':
 				if (--argc <= 0)
 					return CMD_RET_USAGE;
-				buf_size = simple_strtoul(*++argv, NULL, 16);
+				buf_size = hextoul(*++argv, NULL);
 				goto NXTARG;
 
 			default:
diff --git a/cmd/fdt.c b/cmd/fdt.c
index f1e2fc2fd8b..4f861b80725 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -148,7 +148,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return 0;
 		}
 
-		addr = simple_strtoul(argv[0], NULL, 16);
+		addr = hextoul(argv[0], NULL);
 		blob = map_sysmem(addr, 0);
 		if (!fdt_valid(&blob))
 			return 1;
@@ -163,7 +163,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			/*
 			 * Optional new length
 			 */
-			len = simple_strtoul(argv[1], NULL, 16);
+			len = hextoul(argv[1], NULL);
 			if (len < fdt_totalsize(blob)) {
 				printf ("New length %d < existing length %d, "
 					"ignoring.\n",
@@ -205,11 +205,11 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		/*
 		 * Set the address and length of the fdt.
 		 */
-		working_fdt = (struct fdt_header *)simple_strtoul(argv[2], NULL, 16);
+		working_fdt = (struct fdt_header *)hextoul(argv[2], NULL);
 		if (!fdt_valid(&working_fdt))
 			return 1;
 
-		newaddr = (struct fdt_header *)simple_strtoul(argv[3],NULL,16);
+		newaddr = (struct fdt_header *)hextoul(argv[3], NULL);
 
 		/*
 		 * If the user specifies a length, use that.  Otherwise use the
@@ -218,7 +218,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		if (argc <= 4) {
 			len = fdt_totalsize(working_fdt);
 		} else {
-			len = simple_strtoul(argv[4], NULL, 16);
+			len = hextoul(argv[4], NULL);
 			if (len < fdt_totalsize(working_fdt)) {
 				printf ("New length 0x%X < existing length "
 					"0x%X, aborting.\n",
@@ -374,21 +374,22 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		}
 
 		if (subcmd[0] == 'n' || (subcmd[0] == 's' && argc == 5)) {
-			int reqIndex = -1;
+			int req_index = -1;
 			int startDepth = fdt_node_depth(
 				working_fdt, nodeoffset);
 			int curDepth = startDepth;
-			int curIndex = -1;
+			int cur_index = -1;
 			int nextNodeOffset = fdt_next_node(
 				working_fdt, nodeoffset, &curDepth);
 
 			if (subcmd[0] == 'n')
-				reqIndex = simple_strtoul(argv[5], NULL, 16);
+				req_index = hextoul(argv[5], NULL);
 
 			while (curDepth > startDepth) {
 				if (curDepth == startDepth + 1)
-					curIndex++;
-				if (subcmd[0] == 'n' && curIndex == reqIndex) {
+					cur_index++;
+				if (subcmd[0] == 'n' &&
+				    cur_index == req_index) {
 					const char *node_name;
 
 					node_name = fdt_get_name(working_fdt,
@@ -404,7 +405,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			}
 			if (subcmd[0] == 's') {
 				/* get the num nodes at this level */
-				env_set_ulong(var, curIndex + 1);
+				env_set_ulong(var, cur_index + 1);
 			} else {
 				/* node index not found */
 				printf("libfdt node not found\n");
@@ -558,7 +559,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	 * Set boot cpu id
 	 */
 	} else if (strncmp(argv[1], "boo", 3) == 0) {
-		unsigned long tmp = simple_strtoul(argv[2], NULL, 16);
+		unsigned long tmp = hextoul(argv[2], NULL);
 		fdt_set_boot_cpuid_phys(working_fdt, tmp);
 
 	/*
@@ -610,7 +611,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 				return err;
 			}
 		} else if (argv[2][0] == 'd') {
-			unsigned long idx = simple_strtoul(argv[3], NULL, 16);
+			unsigned long idx = hextoul(argv[3], NULL);
 			int err = fdt_del_mem_rsv(working_fdt, idx);
 
 			if (err < 0) {
@@ -646,8 +647,8 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return CMD_RET_USAGE;
 
 		if (argc == 4) {
-			initrd_start = simple_strtoul(argv[2], NULL, 16);
-			initrd_end = simple_strtoul(argv[3], NULL, 16);
+			initrd_start = hextoul(argv[2], NULL);
+			initrd_end = hextoul(argv[3], NULL);
 		}
 
 		fdt_chosen(working_fdt);
@@ -664,7 +665,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return CMD_RET_FAILURE;
 
 		if (argc > 2) {
-			addr = simple_strtoul(argv[2], NULL, 16);
+			addr = hextoul(argv[2], NULL);
 			blob = map_sysmem(addr, 0);
 		} else {
 			blob = (struct fdt_header *)gd->fdt_blob;
@@ -701,7 +702,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		if (!working_fdt)
 			return CMD_RET_FAILURE;
 
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 		blob = map_sysmem(addr, 0);
 		if (!fdt_valid(&blob))
 			return CMD_RET_FAILURE;
@@ -716,7 +717,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	else if (strncmp(argv[1], "re", 2) == 0) {
 		uint extrasize;
 		if (argc > 2)
-			extrasize = simple_strtoul(argv[2], NULL, 16);
+			extrasize = hextoul(argv[2], NULL);
 		else
 			extrasize = 0;
 		fdt_shrink_to_minimum(working_fdt, extrasize);
@@ -807,7 +808,7 @@ static int fdt_parse_prop(char * const *newval, int count, char *data, int *len)
 			}
 			if (!isxdigit(*newp))
 				break;
-			tmp = simple_strtoul(newp, &newp, 16);
+			tmp = hextoul(newp, &newp);
 			*data++ = tmp & 0xFF;
 			*len    = *len + 1;
 		}
@@ -893,7 +894,7 @@ static void print_data(const void *data, int len)
 
 	env_max_dump = env_get("fdt_max_dump");
 	if (env_max_dump)
-		max_dump = simple_strtoul(env_max_dump, NULL, 16);
+		max_dump = hextoul(env_max_dump, NULL);
 
 	/*
 	 * It is a string, but it may have multiple strings (embedded '\0's).
diff --git a/cmd/flash.c b/cmd/flash.c
index 240871e8089..bc93e984bca 100644
--- a/cmd/flash.c
+++ b/cmd/flash.c
@@ -151,7 +151,7 @@ addr_spec(char *arg1, char *arg2, ulong *addr_first, ulong *addr_last)
 	char *ep;
 	char len_used; /* indicates if the "start +length" form used */
 
-	*addr_first = simple_strtoul(arg1, &ep, 16);
+	*addr_first = hextoul(arg1, &ep);
 	if (ep == arg1 || *ep != '\0')
 		return -1;
 
@@ -161,7 +161,7 @@ addr_spec(char *arg1, char *arg2, ulong *addr_first, ulong *addr_last)
 		++arg2;
 	}
 
-	*addr_last = simple_strtoul(arg2, &ep, 16);
+	*addr_last = hextoul(arg2, &ep);
 	if (ep == arg2 || *ep != '\0')
 		return -1;
 
@@ -287,7 +287,7 @@ static int do_flinfo(struct cmd_tbl *cmdtp, int flag, int argc,
 		return 0;
 	}
 
-	bank = simple_strtoul(argv[1], NULL, 16);
+	bank = hextoul(argv[1], NULL);
 	if ((bank < 1) || (bank > CONFIG_SYS_MAX_FLASH_BANKS)) {
 		printf ("Only FLASH Banks # 1 ... # %d supported\n",
 			CONFIG_SYS_MAX_FLASH_BANKS);
@@ -366,7 +366,7 @@ static int do_flerase(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	if (strcmp(argv[1], "bank") == 0) {
-		bank = simple_strtoul(argv[2], NULL, 16);
+		bank = hextoul(argv[2], NULL);
 		if ((bank < 1) || (bank > CONFIG_SYS_MAX_FLASH_BANKS)) {
 			printf ("Only FLASH Banks # 1 ... # %d supported\n",
 				CONFIG_SYS_MAX_FLASH_BANKS);
@@ -547,7 +547,7 @@ static int do_protect(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	if (strcmp(argv[2], "bank") == 0) {
-		bank = simple_strtoul(argv[3], NULL, 16);
+		bank = hextoul(argv[3], NULL);
 		if ((bank < 1) || (bank > CONFIG_SYS_MAX_FLASH_BANKS)) {
 			printf ("Only FLASH Banks # 1 ... # %d supported\n",
 				CONFIG_SYS_MAX_FLASH_BANKS);
diff --git a/cmd/fpga.c b/cmd/fpga.c
index 51410a8e424..3fdd0b35e80 100644
--- a/cmd/fpga.c
+++ b/cmd/fpga.c
@@ -57,7 +57,7 @@ static int do_fpga_check_params(long *dev, long *fpga_data, size_t *data_size,
 	}
 	*fpga_data = local_fpga_data;
 
-	local_data_size = simple_strtoul(argv[2], NULL, 16);
+	local_data_size = hextoul(argv[2], NULL);
 	if (!local_data_size) {
 		debug("fpga: zero size\n");
 		return CMD_RET_USAGE;
@@ -95,8 +95,8 @@ int do_fpga_loads(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		 */
 		argc++;
 
-	fpga_sec_info.encflag = (u8)simple_strtoul(argv[4], NULL, 16);
-	fpga_sec_info.authflag = (u8)simple_strtoul(argv[3], NULL, 16);
+	fpga_sec_info.encflag = (u8)hextoul(argv[4], NULL);
+	fpga_sec_info.authflag = (u8)hextoul(argv[3], NULL);
 
 	if (fpga_sec_info.authflag >= FPGA_NO_ENC_OR_NO_AUTH &&
 	    fpga_sec_info.encflag >= FPGA_NO_ENC_OR_NO_AUTH) {
@@ -134,7 +134,7 @@ static int do_fpga_loadfs(struct cmd_tbl *cmdtp, int flag, int argc,
 		return ret;
 
 	fpga_fsinfo.fstype = FS_TYPE_ANY;
-	fpga_fsinfo.blocksize = (unsigned int)simple_strtoul(argv[3], NULL, 16);
+	fpga_fsinfo.blocksize = (unsigned int)hextoul(argv[3], NULL);
 	fpga_fsinfo.interface = argv[4];
 	fpga_fsinfo.dev_part = argv[5];
 	fpga_fsinfo.filename = argv[6];
@@ -274,7 +274,7 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc,
 	} else
 #endif
 	{
-		fpga_data = (void *)simple_strtoul(datastr, NULL, 16);
+		fpga_data = (void *)hextoul(datastr, NULL);
 		debug("*  fpga: cmdline image address = 0x%08lx\n",
 		      (ulong)fpga_data);
 	}
diff --git a/cmd/fpgad.c b/cmd/fpgad.c
index fb2fe63e78a..e65441bb76a 100644
--- a/cmd/fpgad.c
+++ b/cmd/fpgad.c
@@ -49,19 +49,19 @@ int do_fpga_md(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		/*
 		 * FPGA is specified since argc > 2
 		 */
-		fpga = simple_strtoul(argv[1], NULL, 16);
+		fpga = hextoul(argv[1], NULL);
 
 		/*
 		 * Address is specified since argc > 2
 		 */
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 
 		/*
 		 * If another parameter, it is the length to display.
 		 * Length is the number of objects, not number of bytes.
 		 */
 		if (argc > 3)
-			length = simple_strtoul(argv[3], NULL, 16);
+			length = hextoul(argv[3], NULL);
 	}
 
 	nbytes = length * sizeof(u16);
diff --git a/cmd/host.c b/cmd/host.c
index 6aa3d9167a4..2e998abbcdc 100644
--- a/cmd/host.c
+++ b/cmd/host.c
@@ -62,7 +62,7 @@ static int do_host_bind(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc > 2)
 		return CMD_RET_USAGE;
 	dev_str = argv[0];
-	dev = simple_strtoul(dev_str, &ep, 16);
+	dev = hextoul(dev_str, &ep);
 	if (*ep) {
 		printf("** Bad device specification %s **\n", dev_str);
 		return CMD_RET_USAGE;
@@ -82,7 +82,7 @@ static int do_host_info(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc >= 2) {
 		char *ep;
 		char *dev_str = argv[1];
-		int dev = simple_strtoul(dev_str, &ep, 16);
+		int dev = hextoul(dev_str, &ep);
 		if (*ep) {
 			printf("** Bad device specification %s **\n", dev_str);
 			return CMD_RET_USAGE;
@@ -139,7 +139,7 @@ static int do_host_dev(struct cmd_tbl *cmdtp, int flag, int argc,
 		return 0;
 	}
 
-	dev = simple_strtoul(argv[1], &ep, 16);
+	dev = hextoul(argv[1], &ep);
 	if (*ep) {
 		printf("** Bad device specification %s **\n", argv[2]);
 		return CMD_RET_USAGE;
diff --git a/cmd/i2c.c b/cmd/i2c.c
index 5d0e207874f..cb1cba39b8e 100644
--- a/cmd/i2c.c
+++ b/cmd/i2c.c
@@ -308,13 +308,13 @@ static int do_i2c_read(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * I2C chip address
 	 */
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 
 	/*
 	 * I2C data address within the chip.  This can be 1 or
 	 * 2 bytes long.  Some day it might be 3 bytes long :-).
 	 */
-	devaddr = simple_strtoul(argv[2], NULL, 16);
+	devaddr = hextoul(argv[2], NULL);
 	alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 	if (alen > 3)
 		return CMD_RET_USAGE;
@@ -322,12 +322,12 @@ static int do_i2c_read(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Length is the number of objects, not number of bytes.
 	 */
-	length = simple_strtoul(argv[3], NULL, 16);
+	length = hextoul(argv[3], NULL);
 
 	/*
 	 * memaddr is the address where to store things in memory
 	 */
-	memaddr = (u_char *)simple_strtoul(argv[4], NULL, 16);
+	memaddr = (u_char *)hextoul(argv[4], NULL);
 
 #if CONFIG_IS_ENABLED(DM_I2C)
 	ret = i2c_get_cur_bus_chip(chip, &dev);
@@ -363,18 +363,18 @@ static int do_i2c_write(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * memaddr is the address where to store things in memory
 	 */
-	memaddr = (u_char *)simple_strtoul(argv[1], NULL, 16);
+	memaddr = (u_char *)hextoul(argv[1], NULL);
 
 	/*
 	 * I2C chip address
 	 */
-	chip = simple_strtoul(argv[2], NULL, 16);
+	chip = hextoul(argv[2], NULL);
 
 	/*
 	 * I2C data address within the chip.  This can be 1 or
 	 * 2 bytes long.  Some day it might be 3 bytes long :-).
 	 */
-	devaddr = simple_strtoul(argv[3], NULL, 16);
+	devaddr = hextoul(argv[3], NULL);
 	alen = get_alen(argv[3], DEFAULT_ADDR_LEN);
 	if (alen > 3)
 		return cmd_usage(cmdtp);
@@ -382,7 +382,7 @@ static int do_i2c_write(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Length is the number of bytes.
 	 */
-	length = simple_strtoul(argv[4], NULL, 16);
+	length = hextoul(argv[4], NULL);
 
 #if CONFIG_IS_ENABLED(DM_I2C)
 	ret = i2c_get_cur_bus_chip(chip, &dev);
@@ -447,13 +447,13 @@ static int do_i2c_flags(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 	ret = i2c_get_cur_bus_chip(chip, &dev);
 	if (ret)
 		return i2c_report_err(ret, I2C_ERR_READ);
 
 	if (argc > 2) {
-		flags = simple_strtoul(argv[2], NULL, 16);
+		flags = hextoul(argv[2], NULL);
 		ret = i2c_set_chip_flags(dev, flags);
 	} else  {
 		ret = i2c_get_chip_flags(dev, &flags);
@@ -477,13 +477,13 @@ static int do_i2c_olen(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 	ret = i2c_get_cur_bus_chip(chip, &dev);
 	if (ret)
 		return i2c_report_err(ret, I2C_ERR_READ);
 
 	if (argc > 2) {
-		olen = simple_strtoul(argv[2], NULL, 16);
+		olen = hextoul(argv[2], NULL);
 		ret = i2c_set_chip_offset_len(dev, olen);
 	} else  {
 		ret = i2c_get_chip_offset_len(dev);
@@ -543,13 +543,13 @@ static int do_i2c_md(struct cmd_tbl *cmdtp, int flag, int argc,
 		/*
 		 * I2C chip address
 		 */
-		chip = simple_strtoul(argv[1], NULL, 16);
+		chip = hextoul(argv[1], NULL);
 
 		/*
 		 * I2C data address within the chip.  This can be 1 or
 		 * 2 bytes long.  Some day it might be 3 bytes long :-).
 		 */
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 		alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 		if (alen > 3)
 			return CMD_RET_USAGE;
@@ -559,7 +559,7 @@ static int do_i2c_md(struct cmd_tbl *cmdtp, int flag, int argc,
 		 * Length is the number of objects, not number of bytes.
 		 */
 		if (argc > 3)
-			length = simple_strtoul(argv[3], NULL, 16);
+			length = hextoul(argv[3], NULL);
 	}
 
 #if CONFIG_IS_ENABLED(DM_I2C)
@@ -651,12 +651,12 @@ static int do_i2c_mw(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Chip is always specified.
 	 */
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 
 	/*
 	 * Address is always specified.
 	 */
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 	alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 	if (alen > 3)
 		return CMD_RET_USAGE;
@@ -671,13 +671,13 @@ static int do_i2c_mw(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Value to write is always specified.
 	 */
-	byte = simple_strtoul(argv[3], NULL, 16);
+	byte = hextoul(argv[3], NULL);
 
 	/*
 	 * Optional count
 	 */
 	if (argc == 5)
-		count = simple_strtoul(argv[4], NULL, 16);
+		count = hextoul(argv[4], NULL);
 	else
 		count = 1;
 
@@ -740,12 +740,12 @@ static int do_i2c_crc(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Chip is always specified.
 	 */
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 
 	/*
 	 * Address is always specified.
 	 */
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 	alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 	if (alen > 3)
 		return CMD_RET_USAGE;
@@ -760,7 +760,7 @@ static int do_i2c_crc(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Count is always specified
 	 */
-	count = simple_strtoul(argv[3], NULL, 16);
+	count = hextoul(argv[3], NULL);
 
 	printf ("CRC32 for %08lx ... %08lx ==> ", addr, addr + count - 1);
 	/*
@@ -840,12 +840,12 @@ static int mod_i2c_mem(struct cmd_tbl *cmdtp, int incrflag, int flag, int argc,
 		/*
 		 * Chip is always specified.
 		 */
-		chip = simple_strtoul(argv[1], NULL, 16);
+		chip = hextoul(argv[1], NULL);
 
 		/*
 		 * Address is always specified.
 		 */
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 		alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 		if (alen > 3)
 			return CMD_RET_USAGE;
@@ -900,7 +900,7 @@ static int mod_i2c_mem(struct cmd_tbl *cmdtp, int incrflag, int flag, int argc,
 		else {
 			char *endp;
 
-			data = simple_strtoul(console_buffer, &endp, 16);
+			data = hextoul(console_buffer, &endp);
 			if (size == 1)
 				data = data << 24;
 			else if (size == 2)
@@ -1049,12 +1049,12 @@ static int do_i2c_loop(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Chip is always specified.
 	 */
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 
 	/*
 	 * Address is always specified.
 	 */
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 	alen = get_alen(argv[2], DEFAULT_ADDR_LEN);
 	if (alen > 3)
 		return CMD_RET_USAGE;
@@ -1070,7 +1070,7 @@ static int do_i2c_loop(struct cmd_tbl *cmdtp, int flag, int argc,
 	 * Length is the number of objects, not number of bytes.
 	 */
 	length = 1;
-	length = simple_strtoul(argv[3], NULL, 16);
+	length = hextoul(argv[3], NULL);
 	if (length > sizeof(bytes))
 		length = sizeof(bytes);
 
@@ -1219,7 +1219,7 @@ static int do_sdram(struct cmd_tbl *cmdtp, int flag, int argc,
 	/*
 	 * Chip is always specified.
 	 */
-	chip = simple_strtoul (argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 
 #if CONFIG_IS_ENABLED(DM_I2C)
 	ret = i2c_get_cur_bus_chip(chip, &dev);
@@ -1673,7 +1673,7 @@ int do_edid(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return 1;
 	}
 
-	chip = simple_strtoul(argv[1], NULL, 16);
+	chip = hextoul(argv[1], NULL);
 #if CONFIG_IS_ENABLED(DM_I2C)
 	ret = i2c_get_cur_bus_chip(chip, &dev);
 	if (!ret)
diff --git a/cmd/ini.c b/cmd/ini.c
index c075be623cc..81dfc4c4e83 100644
--- a/cmd/ini.c
+++ b/cmd/ini.c
@@ -236,10 +236,10 @@ static int do_ini(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return CMD_RET_USAGE;
 
 	section = argv[1];
-	file_address = (char *)simple_strtoul(
-		argc < 3 ? env_get("loadaddr") : argv[2], NULL, 16);
-	file_size = (size_t)simple_strtoul(
-		argc < 4 ? env_get("filesize") : argv[3], NULL, 16);
+	file_address = (char *)hextoul(argc < 3 ? env_get("loadaddr") : argv[2],
+					NULL);
+	file_size = (size_t)hextoul(argc < 4 ? env_get("filesize") : argv[3],
+				     NULL);
 
 	return ini_parse(file_address, file_size, ini_handler, (void *)section);
 }
diff --git a/cmd/io.c b/cmd/io.c
index c7e964153b8..e23ea627006 100644
--- a/cmd/io.c
+++ b/cmd/io.c
@@ -51,7 +51,7 @@ int do_io_iod(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return 1;
 
 		/* Address is specified since argc > 1 */
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		addr += base_address;
 
 		/*
@@ -59,7 +59,7 @@ int do_io_iod(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		 * Length is the number of objects, not number of bytes.
 		 */
 		if (argc > 2)
-			length = simple_strtoul(argv[2], NULL, 16);
+			length = hextoul(argv[2], NULL);
 	}
 
 	bytes = size * length;
@@ -102,8 +102,8 @@ int do_io_iow(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (size < 0)
 		return 1;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
-	val = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[1], NULL);
+	val = hextoul(argv[2], NULL);
 
 	if (size == 4)
 		outl((u32) val, addr);
diff --git a/cmd/iotrace.c b/cmd/iotrace.c
index 652ebefb89e..f28359e2875 100644
--- a/cmd/iotrace.c
+++ b/cmd/iotrace.c
@@ -60,8 +60,8 @@ static int do_set_buffer(int argc, char *const argv[])
 	ulong addr = 0, size = 0;
 
 	if (argc == 2) {
-		addr = simple_strtoul(*argv++, NULL, 16);
-		size = simple_strtoul(*argv++, NULL, 16);
+		addr = hextoul(*argv++, NULL);
+		size = hextoul(*argv++, NULL);
 	} else if (argc != 0) {
 		return CMD_RET_USAGE;
 	}
@@ -76,8 +76,8 @@ static int do_set_region(int argc, char *const argv[])
 	ulong addr = 0, size = 0;
 
 	if (argc == 2) {
-		addr = simple_strtoul(*argv++, NULL, 16);
-		size = simple_strtoul(*argv++, NULL, 16);
+		addr = hextoul(*argv++, NULL);
+		size = hextoul(*argv++, NULL);
 	} else if (argc != 0) {
 		return CMD_RET_USAGE;
 	}
diff --git a/cmd/itest.c b/cmd/itest.c
index 9a441ce9b8a..74414cbdc4c 100644
--- a/cmd/itest.c
+++ b/cmd/itest.c
@@ -57,7 +57,7 @@ static long evalexp(char *s, int w)
 
 	/* if the parameter starts with a * then assume is a pointer to the value we want */
 	if (s[0] == '*') {
-		addr = simple_strtoul(&s[1], NULL, 16);
+		addr = hextoul(&s[1], NULL);
 		buf = map_physmem(addr, w, MAP_WRBACK);
 		if (!buf && addr) {
 			puts("Failed to map physical memory\n");
@@ -82,7 +82,7 @@ static long evalexp(char *s, int w)
 		unmap_physmem(buf, w);
 		return l;
 	} else {
-		l = simple_strtoul(s, NULL, 16);
+		l = hextoul(s, NULL);
 	}
 
 	/* avoid overflow on mask calculus */
@@ -93,7 +93,7 @@ static char * evalstr(char *s)
 {
 	/* if the parameter starts with a * then assume a string pointer else its a literal */
 	if (s[0] == '*') {
-		return (char *)simple_strtoul(&s[1], NULL, 16);
+		return (char *)hextoul(&s[1], NULL);
 	} else if (s[0] == '$') {
 		int i = 2;
 
diff --git a/cmd/jffs2.c b/cmd/jffs2.c
index 9540988e33e..63bd55263a2 100644
--- a/cmd/jffs2.c
+++ b/cmd/jffs2.c
@@ -491,7 +491,7 @@ int do_jffs2_fsload(struct cmd_tbl *cmdtp, int flag, int argc,
 		filename = argv[1];
 	}
 	if (argc == 3) {
-		offset = simple_strtoul(argv[1], NULL, 16);
+		offset = hextoul(argv[1], NULL);
 		image_load_addr = offset;
 		filename = argv[2];
 	}
diff --git a/cmd/load.c b/cmd/load.c
index b7894d7db02..ec3eed18b14 100644
--- a/cmd/load.c
+++ b/cmd/load.c
@@ -257,11 +257,11 @@ int do_save_serial(struct cmd_tbl *cmdtp, int flag, int argc,
 #endif
 
 	if (argc >= 2) {
-		offset = simple_strtoul(argv[1], NULL, 16);
+		offset = hextoul(argv[1], NULL);
 	}
 #ifdef	CONFIG_SYS_LOADS_BAUD_CHANGE
 	if (argc >= 3) {
-		size = simple_strtoul(argv[2], NULL, 16);
+		size = hextoul(argv[2], NULL);
 	}
 	if (argc == 4) {
 		save_baudrate = (int)simple_strtoul(argv[3], NULL, 10);
@@ -284,7 +284,7 @@ int do_save_serial(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 #else	/* ! CONFIG_SYS_LOADS_BAUD_CHANGE */
 	if (argc == 3) {
-		size = simple_strtoul(argv[2], NULL, 16);
+		size = hextoul(argv[2], NULL);
 	}
 #endif	/* CONFIG_SYS_LOADS_BAUD_CHANGE */
 
@@ -438,12 +438,12 @@ static int do_load_serial_bin(struct cmd_tbl *cmdtp, int flag, int argc,
 	/* pre-set offset from $loadaddr */
 	s = env_get("loadaddr");
 	if (s)
-		offset = simple_strtoul(s, NULL, 16);
+		offset = hextoul(s, NULL);
 
 	load_baudrate = current_baudrate = gd->baudrate;
 
 	if (argc >= 2) {
-		offset = simple_strtoul(argv[1], NULL, 16);
+		offset = hextoul(argv[1], NULL);
 	}
 	if (argc == 3) {
 		load_baudrate = (int)simple_strtoul(argv[2], NULL, 10);
diff --git a/cmd/lzmadec.c b/cmd/lzmadec.c
index 3b8db0a8538..81924da4618 100644
--- a/cmd/lzmadec.c
+++ b/cmd/lzmadec.c
@@ -26,11 +26,11 @@ static int do_lzmadec(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	switch (argc) {
 	case 4:
-		dst_len = simple_strtoul(argv[3], NULL, 16);
+		dst_len = hextoul(argv[3], NULL);
 		/* fall through */
 	case 3:
-		src = simple_strtoul(argv[1], NULL, 16);
-		dst = simple_strtoul(argv[2], NULL, 16);
+		src = hextoul(argv[1], NULL);
+		dst = hextoul(argv[2], NULL);
 		break;
 	default:
 		return CMD_RET_USAGE;
diff --git a/cmd/md5sum.c b/cmd/md5sum.c
index 5ae3ddf85f8..0f0e1d3dd68 100644
--- a/cmd/md5sum.c
+++ b/cmd/md5sum.c
@@ -25,7 +25,7 @@ static void store_result(const u8 *sum, const char *dest)
 	if (*dest == '*') {
 		u8 *ptr;
 
-		ptr = (u8 *)simple_strtoul(dest + 1, NULL, 16);
+		ptr = (u8 *)hextoul(dest + 1, NULL);
 		for (i = 0; i < 16; i++)
 			*ptr++ = sum[i];
 	} else {
@@ -46,7 +46,7 @@ static int parse_verify_sum(char *verify_str, u8 *vsum)
 	if (*verify_str == '*') {
 		u8 *ptr;
 
-		ptr = (u8 *)simple_strtoul(verify_str + 1, NULL, 16);
+		ptr = (u8 *)hextoul(verify_str + 1, NULL);
 		memcpy(vsum, ptr, 16);
 	} else {
 		unsigned int i;
@@ -66,7 +66,7 @@ static int parse_verify_sum(char *verify_str, u8 *vsum)
 
 			*nullp = '\0';
 			*(u8 *)(vsum + i) =
-				simple_strtoul(vsum_str + (i * 2), NULL, 16);
+				hextoul(vsum_str + (i * 2), NULL);
 			*nullp = end;
 		}
 	}
@@ -97,8 +97,8 @@ int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return CMD_RET_USAGE;
 	}
 
-	addr = simple_strtoul(*av++, NULL, 16);
-	len = simple_strtoul(*av++, NULL, 16);
+	addr = hextoul(*av++, NULL);
+	len = hextoul(*av++, NULL);
 
 	buf = map_sysmem(addr, len);
 	md5_wd(buf, len, output, CHUNKSZ_MD5);
@@ -147,8 +147,8 @@ static int do_md5sum(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
-	len = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[1], NULL);
+	len = hextoul(argv[2], NULL);
 
 	buf = map_sysmem(addr, len);
 	md5_wd(buf, len, output, CHUNKSZ_MD5);
diff --git a/cmd/mdio.c b/cmd/mdio.c
index cfa45ad12a0..3c74326161e 100644
--- a/cmd/mdio.c
+++ b/cmd/mdio.c
@@ -254,7 +254,7 @@ static int do_mdio(struct cmd_tbl *cmdtp, int flag, int argc,
 	switch (op[0]) {
 	case 'w':
 		if (pos > 1)
-			data = simple_strtoul(argv[pos--], NULL, 16);
+			data = hextoul(argv[pos--], NULL);
 		/* Intentional fall-through - Get reg for read and write */
 	case 'r':
 		if (pos > 1)
diff --git a/cmd/mem.c b/cmd/mem.c
index 1eb83b75703..0978df5d106 100644
--- a/cmd/mem.c
+++ b/cmd/mem.c
@@ -89,14 +89,14 @@ static int do_mem_md(struct cmd_tbl *cmdtp, int flag, int argc,
 
 		/* Address is specified since argc > 1
 		*/
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		addr += base_address;
 
 		/* If another parameter, it is the length to display.
 		 * Length is the number of objects, not number of bytes.
 		 */
 		if (argc > 2)
-			length = simple_strtoul(argv[2], NULL, 16);
+			length = hextoul(argv[2], NULL);
 	}
 
 	bytes = size * length;
@@ -144,7 +144,7 @@ static int do_mem_mw(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	/* Address is specified since argc > 1
 	*/
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 	addr += base_address;
 
 	/* Get the value to write.
@@ -152,11 +152,11 @@ static int do_mem_mw(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (SUPPORT_64BIT_DATA)
 		writeval = simple_strtoull(argv[2], NULL, 16);
 	else
-		writeval = simple_strtoul(argv[2], NULL, 16);
+		writeval = hextoul(argv[2], NULL);
 
 	/* Count ? */
 	if (argc == 4) {
-		count = simple_strtoul(argv[3], NULL, 16);
+		count = hextoul(argv[3], NULL);
 	} else {
 		count = 1;
 	}
@@ -258,13 +258,13 @@ static int do_mem_cmp(struct cmd_tbl *cmdtp, int flag, int argc,
 	       size == 4 ? "word" :
 	       size == 2 ? "halfword" : "byte";
 
-	addr1 = simple_strtoul(argv[1], NULL, 16);
+	addr1 = hextoul(argv[1], NULL);
 	addr1 += base_address;
 
-	addr2 = simple_strtoul(argv[2], NULL, 16);
+	addr2 = hextoul(argv[2], NULL);
 	addr2 += base_address;
 
-	count = simple_strtoul(argv[3], NULL, 16);
+	count = hextoul(argv[3], NULL);
 
 	bytes = size * count;
 	base = buf1 = map_sysmem(addr1, bytes);
@@ -321,13 +321,13 @@ static int do_mem_cp(struct cmd_tbl *cmdtp, int flag, int argc,
 	if ((size = cmd_get_data_size(argv[0], 4)) < 0)
 		return 1;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 	addr += base_address;
 
-	dest = simple_strtoul(argv[2], NULL, 16);
+	dest = hextoul(argv[2], NULL);
 	dest += base_address;
 
-	count = simple_strtoul(argv[3], NULL, 16);
+	count = hextoul(argv[3], NULL);
 
 	if (count == 0) {
 		puts ("Zero length ???\n");
@@ -405,7 +405,7 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,
 			if (ch == 'q')
 				quiet = true;
 			else if (ch == 'l' && isxdigit(argv[0][2]))
-				limit = simple_strtoul(argv[0] + 2, NULL, 16);
+				limit = hextoul(argv[0] + 2, NULL);
 			else
 				return CMD_RET_USAGE;
 			argc--;
@@ -413,11 +413,11 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,
 		}
 
 		/* Address is specified since argc > 1 */
-		addr = simple_strtoul(argv[0], NULL, 16);
+		addr = hextoul(argv[0], NULL);
 		addr += base_address;
 
 		/* Length is the number of objects, not number of bytes */
-		length = simple_strtoul(argv[1], NULL, 16);
+		length = hextoul(argv[1], NULL);
 
 		/* Read the bytes to search for */
 		end = search_buf + sizeof(search_buf);
@@ -434,7 +434,7 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,
 				ptr += len;
 				continue;
 			} else {
-				u32 val = simple_strtoul(argv[i], NULL, 16);
+				u32 val = hextoul(argv[i], NULL);
 
 				switch (size) {
 				case 1:
@@ -512,7 +512,7 @@ static int do_mem_base(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc > 1) {
 		/* Set new base address.
 		*/
-		base_address = simple_strtoul(argv[1], NULL, 16);
+		base_address = hextoul(argv[1], NULL);
 	}
 	/* Print the current base address.
 	*/
@@ -543,11 +543,11 @@ static int do_mem_loop(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	/* Address is always specified.
 	*/
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	/* Length is the number of objects, not number of bytes.
 	*/
-	length = simple_strtoul(argv[2], NULL, 16);
+	length = hextoul(argv[2], NULL);
 
 	bytes = size * length;
 	buf = map_sysmem(addr, bytes);
@@ -636,17 +636,17 @@ static int do_mem_loopw(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	/* Address is always specified.
 	*/
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 
 	/* Length is the number of objects, not number of bytes.
 	*/
-	length = simple_strtoul(argv[2], NULL, 16);
+	length = hextoul(argv[2], NULL);
 
 	/* data to write */
 	if (SUPPORT_64BIT_DATA)
 		data = simple_strtoull(argv[3], NULL, 16);
 	else
-		data = simple_strtoul(argv[3], NULL, 16);
+		data = hextoul(argv[3], NULL);
 
 	bytes = size * length;
 	buf = map_sysmem(addr, bytes);
@@ -1175,7 +1175,7 @@ mod_mem(struct cmd_tbl *cmdtp, int incrflag, int flag, int argc,
 
 		/* Address is specified since argc > 1
 		*/
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		addr += base_address;
 	}
 
@@ -1215,7 +1215,7 @@ mod_mem(struct cmd_tbl *cmdtp, int incrflag, int flag, int argc,
 			if (SUPPORT_64BIT_DATA)
 				i = simple_strtoull(console_buffer, &endp, 16);
 			else
-				i = simple_strtoul(console_buffer, &endp, 16);
+				i = hextoul(console_buffer, &endp);
 			nbytes = endp - console_buffer;
 			if (nbytes) {
 				/* good enough to not time out
@@ -1282,11 +1282,11 @@ static int do_random(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3 || argc > 4)
 		return CMD_RET_USAGE;
 
-	len = simple_strtoul(argv[2], NULL, 16);
-	addr = simple_strtoul(argv[1], NULL, 16);
+	len = hextoul(argv[2], NULL);
+	addr = hextoul(argv[1], NULL);
 
 	if (argc == 4) {
-		seed = simple_strtoul(argv[3], NULL, 16);
+		seed = hextoul(argv[3], NULL);
 		if (seed == 0) {
 			printf("The seed cannot be 0. Using 0xDEADBEEF.\n");
 			seed = 0xDEADBEEF;
diff --git a/cmd/mfsl.c b/cmd/mfsl.c
index 31f5b36ade0..0c78720ec46 100644
--- a/cmd/mfsl.c
+++ b/cmd/mfsl.c
@@ -23,8 +23,8 @@ int do_frd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16);
-	blocking = (unsigned int)simple_strtoul (argv[2], NULL, 16);
+	fslnum = (unsigned int)hextoul(argv[1], NULL);
+	blocking = (unsigned int)hextoul(argv[2], NULL);
 	if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) {
 		puts ("Bad number of FSL\n");
 		return CMD_RET_USAGE;
@@ -178,9 +178,9 @@ int do_fwr(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16);
-	num = (unsigned int)simple_strtoul (argv[2], NULL, 16);
-	blocking = (unsigned int)simple_strtoul (argv[3], NULL, 16);
+	fslnum = (unsigned int)hextoul(argv[1], NULL);
+	num = (unsigned int)hextoul(argv[2], NULL);
+	blocking = (unsigned int)hextoul(argv[3], NULL);
 	if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER)
 		return CMD_RET_USAGE;
 
@@ -332,8 +332,8 @@ int do_rspr(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	reg = (unsigned int)simple_strtoul (argv[1], NULL, 16);
-	val = (unsigned int)simple_strtoul (argv[2], NULL, 16);
+	reg = (unsigned int)hextoul(argv[1], NULL);
+	val = (unsigned int)hextoul(argv[2], NULL);
 	switch (reg) {
 	case 0x1:
 		if (argc > 2) {
diff --git a/cmd/mii.c b/cmd/mii.c
index fe8602eb7c8..fab420ee29e 100644
--- a/cmd/mii.c
+++ b/cmd/mii.c
@@ -267,10 +267,10 @@ static void extract_range(
 	unsigned char * phi)
 {
 	char * end;
-	*plo = simple_strtoul(input, &end, 16);
+	*plo = hextoul(input, &end);
 	if (*end == '-') {
 		end++;
-		*phi = simple_strtoul(end, NULL, 16);
+		*phi = hextoul(end, NULL);
 	}
 	else {
 		*phi = *plo;
@@ -319,9 +319,9 @@ static int do_mii(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		if (argc >= 4)
 			extract_range(argv[3], &reglo, &reghi);
 		if (argc >= 5)
-			data = simple_strtoul(argv[4], NULL, 16);
+			data = hextoul(argv[4], NULL);
 		if (argc >= 6)
-			mask = simple_strtoul(argv[5], NULL, 16);
+			mask = hextoul(argv[5], NULL);
 	}
 
 	if (addrhi > 31 && strncmp(op, "de", 2)) {
diff --git a/cmd/misc.c b/cmd/misc.c
index ef540e836f2..bcd8d960ee0 100644
--- a/cmd/misc.c
+++ b/cmd/misc.c
@@ -57,9 +57,9 @@ static int do_misc_op(struct cmd_tbl *cmdtp, int flag,
 		return ret;
 	}
 
-	offset = simple_strtoul(argv[1], NULL, 16);
-	buf = (void *)simple_strtoul(argv[2], NULL, 16);
-	size = simple_strtoul(argv[3], NULL, 16);
+	offset = hextoul(argv[1], NULL);
+	buf = (void *)hextoul(argv[2], NULL);
+	size = hextoul(argv[3], NULL);
 
 	if (op == MISC_OP_READ)
 		misc_op = misc_read;
diff --git a/cmd/mmc.c b/cmd/mmc.c
index b942576b58a..f72277800a0 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -189,7 +189,7 @@ static int do_mmcrpmb_key(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
-	key_addr = (void *)simple_strtoul(argv[1], NULL, 16);
+	key_addr = (void *)hextoul(argv[1], NULL);
 	if (!confirm_key_prog())
 		return CMD_RET_FAILURE;
 	if (mmc_rpmb_set_key(mmc, key_addr)) {
@@ -211,12 +211,12 @@ static int do_mmcrpmb_read(struct cmd_tbl *cmdtp, int flag,
 	if (argc < 4)
 		return CMD_RET_USAGE;
 
-	addr = (void *)simple_strtoul(argv[1], NULL, 16);
-	blk = simple_strtoul(argv[2], NULL, 16);
-	cnt = simple_strtoul(argv[3], NULL, 16);
+	addr = (void *)hextoul(argv[1], NULL);
+	blk = hextoul(argv[2], NULL);
+	cnt = hextoul(argv[3], NULL);
 
 	if (argc == 5)
-		key_addr = (void *)simple_strtoul(argv[4], NULL, 16);
+		key_addr = (void *)hextoul(argv[4], NULL);
 
 	printf("\nMMC RPMB read: dev # %d, block # %d, count %d ... ",
 	       curr_device, blk, cnt);
@@ -240,10 +240,10 @@ static int do_mmcrpmb_write(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 5)
 		return CMD_RET_USAGE;
 
-	addr = (void *)simple_strtoul(argv[1], NULL, 16);
-	blk = simple_strtoul(argv[2], NULL, 16);
-	cnt = simple_strtoul(argv[3], NULL, 16);
-	key_addr = (void *)simple_strtoul(argv[4], NULL, 16);
+	addr = (void *)hextoul(argv[1], NULL);
+	blk = hextoul(argv[2], NULL);
+	cnt = hextoul(argv[3], NULL);
+	key_addr = (void *)hextoul(argv[4], NULL);
 
 	printf("\nMMC RPMB write: dev # %d, block # %d, count %d ... ",
 	       curr_device, blk, cnt);
@@ -334,9 +334,9 @@ static int do_mmc_read(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 4)
 		return CMD_RET_USAGE;
 
-	addr = (void *)simple_strtoul(argv[1], NULL, 16);
-	blk = simple_strtoul(argv[2], NULL, 16);
-	cnt = simple_strtoul(argv[3], NULL, 16);
+	addr = (void *)hextoul(argv[1], NULL);
+	blk = hextoul(argv[2], NULL);
+	cnt = hextoul(argv[3], NULL);
 
 	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
@@ -379,8 +379,8 @@ static int do_mmc_sparse_write(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 3)
 		return CMD_RET_USAGE;
 
-	addr = (void *)simple_strtoul(argv[1], NULL, 16);
-	blk = simple_strtoul(argv[2], NULL, 16);
+	addr = (void *)hextoul(argv[1], NULL);
+	blk = hextoul(argv[2], NULL);
 
 	if (!is_sparse_image(addr)) {
 		printf("Not a sparse image\n");
@@ -427,9 +427,9 @@ static int do_mmc_write(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 4)
 		return CMD_RET_USAGE;
 
-	addr = (void *)simple_strtoul(argv[1], NULL, 16);
-	blk = simple_strtoul(argv[2], NULL, 16);
-	cnt = simple_strtoul(argv[3], NULL, 16);
+	addr = (void *)hextoul(argv[1], NULL);
+	blk = hextoul(argv[2], NULL);
+	cnt = hextoul(argv[3], NULL);
 
 	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
@@ -457,8 +457,8 @@ static int do_mmc_erase(struct cmd_tbl *cmdtp, int flag,
 	if (argc != 3)
 		return CMD_RET_USAGE;
 
-	blk = simple_strtoul(argv[1], NULL, 16);
-	cnt = simple_strtoul(argv[2], NULL, 16);
+	blk = hextoul(argv[1], NULL);
+	cnt = hextoul(argv[2], NULL);
 
 	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
@@ -908,7 +908,7 @@ static int do_mmc_setdsr(struct cmd_tbl *cmdtp, int flag,
 
 	if (argc != 2)
 		return CMD_RET_USAGE;
-	val = simple_strtoul(argv[1], NULL, 16);
+	val = hextoul(argv[1], NULL);
 
 	mmc = find_mmc_device(curr_device);
 	if (!mmc) {
diff --git a/cmd/mtd.c b/cmd/mtd.c
index c22478c1527..ad5cc9827d5 100644
--- a/cmd/mtd.c
+++ b/cmd/mtd.c
@@ -285,12 +285,12 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, int argc,
 			goto out_put_mtd;
 		}
 
-		user_addr = simple_strtoul(argv[0], NULL, 16);
+		user_addr = hextoul(argv[0], NULL);
 		argc--;
 		argv++;
 	}
 
-	start_off = argc > 0 ? simple_strtoul(argv[0], NULL, 16) : 0;
+	start_off = argc > 0 ? hextoul(argv[0], NULL) : 0;
 	if (!mtd_is_aligned_with_min_io_size(mtd, start_off)) {
 		printf("Offset not aligned with a page (0x%x)\n",
 		       mtd->writesize);
@@ -299,7 +299,7 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, int argc,
 	}
 
 	default_len = dump ? mtd->writesize : mtd->size;
-	len = argc > 1 ? simple_strtoul(argv[1], NULL, 16) : default_len;
+	len = argc > 1 ? hextoul(argv[1], NULL) : default_len;
 	if (!mtd_is_aligned_with_min_io_size(mtd, len)) {
 		len = round_up(len, mtd->writesize);
 		printf("Size not on a page boundary (0x%x), rounding to 0x%llx\n",
@@ -411,8 +411,8 @@ static int do_mtd_erase(struct cmd_tbl *cmdtp, int flag, int argc,
 	argc -= 2;
 	argv += 2;
 
-	off = argc > 0 ? simple_strtoul(argv[0], NULL, 16) : 0;
-	len = argc > 1 ? simple_strtoul(argv[1], NULL, 16) : mtd->size;
+	off = argc > 0 ? hextoul(argv[0], NULL) : 0;
+	len = argc > 1 ? hextoul(argv[1], NULL) : mtd->size;
 
 	if (!mtd_is_aligned_with_block_size(mtd, off)) {
 		printf("Offset not aligned with a block (0x%x)\n",
diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c
index 5cd520e46bb..d4f381b6ad9 100644
--- a/cmd/mvebu/bubt.c
+++ b/cmd/mvebu/bubt.c
@@ -137,7 +137,7 @@ static ulong get_load_addr(void)
 
 	addr_str = env_get("loadaddr");
 	if (addr_str)
-		addr = simple_strtoul(addr_str, NULL, 16);
+		addr = hextoul(addr_str, NULL);
 	else
 		addr = CONFIG_SYS_LOAD_ADDR;
 
diff --git a/cmd/mvebu/comphy_rx_training.c b/cmd/mvebu/comphy_rx_training.c
index 0798decfae1..25a9e153de8 100644
--- a/cmd/mvebu/comphy_rx_training.c
+++ b/cmd/mvebu/comphy_rx_training.c
@@ -25,8 +25,8 @@ int mvebu_comphy_rx_training_cmd(struct cmd_tbl *cmdtp, int flag, int argc,
 		return -1;
 	}
 
-	cp_index = simple_strtoul(argv[1], NULL, 16);
-	comphy_index = simple_strtoul(argv[2], NULL, 16);
+	cp_index = hextoul(argv[1], NULL);
+	comphy_index = hextoul(argv[2], NULL);
 
 	ret = uclass_get(UCLASS_MISC, &uc);
 	if (ret) {
diff --git a/cmd/nand.c b/cmd/nand.c
index 97e117a979a..34371b983a3 100644
--- a/cmd/nand.c
+++ b/cmd/nand.c
@@ -543,7 +543,7 @@ static int do_nand(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (argc < 3)
 			goto usage;
 
-		off = (int)simple_strtoul(argv[2], NULL, 16);
+		off = (int)hextoul(argv[2], NULL);
 		ret = nand_dump(mtd, off, !strcmp(&cmd[4], ".oob"), repeat);
 
 		return ret == 0 ? 1 : 0;
@@ -559,7 +559,7 @@ static int do_nand(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (argc < 4)
 			goto usage;
 
-		addr = (ulong)simple_strtoul(argv[2], NULL, 16);
+		addr = (ulong)hextoul(argv[2], NULL);
 
 		read = strncmp(cmd, "read", 4) == 0; /* 1 = read, 0 = write */
 		printf("\nNAND %s: ", read ? "read" : "write");
@@ -713,7 +713,7 @@ static int do_nand(struct cmd_tbl *cmdtp, int flag, int argc,
 			goto usage;
 
 		while (argc > 0) {
-			addr = simple_strtoul(*argv, NULL, 16);
+			addr = hextoul(*argv, NULL);
 
 			if (mtd_block_markbad(mtd, addr)) {
 				printf("block 0x%08lx NOT marked "
@@ -957,7 +957,7 @@ static int do_nandboot(struct cmd_tbl *cmdtp, int flag, int argc,
 			if (argc > 3)
 				goto usage;
 			if (argc == 3)
-				addr = simple_strtoul(argv[1], NULL, 16);
+				addr = hextoul(argv[1], NULL);
 			else
 				addr = CONFIG_SYS_LOAD_ADDR;
 
@@ -975,17 +975,17 @@ static int do_nandboot(struct cmd_tbl *cmdtp, int flag, int argc,
 		boot_device = env_get("bootdevice");
 		break;
 	case 2:
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		boot_device = env_get("bootdevice");
 		break;
 	case 3:
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		boot_device = argv[2];
 		break;
 	case 4:
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		boot_device = argv[2];
-		offset = simple_strtoul(argv[3], NULL, 16);
+		offset = hextoul(argv[3], NULL);
 		break;
 	default:
 #if defined(CONFIG_CMD_MTDPARTS)
@@ -1003,7 +1003,7 @@ usage:
 	}
 	bootstage_mark(BOOTSTAGE_ID_NAND_BOOT_DEVICE);
 
-	idx = simple_strtoul(boot_device, NULL, 16);
+	idx = hextoul(boot_device, NULL);
 
 	mtd = get_nand_dev_by_index(idx);
 	if (!mtd) {
diff --git a/cmd/net.c b/cmd/net.c
index 76c7e751250..651c1411f4d 100644
--- a/cmd/net.c
+++ b/cmd/net.c
@@ -205,7 +205,7 @@ static int netboot_common(enum proto_t proto, struct cmd_tbl *cmdtp, int argc,
 	/* pre-set image_load_addr */
 	s = env_get("loadaddr");
 	if (s != NULL)
-		image_load_addr = simple_strtoul(s, NULL, 16);
+		image_load_addr = hextoul(s, NULL);
 
 	switch (argc) {
 	case 1:
@@ -220,7 +220,7 @@ static int netboot_common(enum proto_t proto, struct cmd_tbl *cmdtp, int argc,
 		 * form must be written in a format which can not be
 		 * mis-interpreted as a valid number.
 		 */
-		addr = simple_strtoul(argv[1], &end, 16);
+		addr = hextoul(argv[1], &end);
 		if (end == (argv[1] + strlen(argv[1]))) {
 			image_load_addr = addr;
 			/* refresh bootfile name from env */
@@ -234,7 +234,7 @@ static int netboot_common(enum proto_t proto, struct cmd_tbl *cmdtp, int argc,
 		break;
 
 	case 3:
-		image_load_addr = simple_strtoul(argv[1], NULL, 16);
+		image_load_addr = hextoul(argv[1], NULL);
 		net_boot_file_name_explicit = true;
 		copy_filename(net_boot_file_name, argv[2],
 			      sizeof(net_boot_file_name));
diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index d14ba10cefa..02a99b4a77a 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -358,7 +358,7 @@ ulong env_get_hex(const char *varname, ulong default_val)
 
 	s = env_get(varname);
 	if (s)
-		value = simple_strtoul(s, &endp, 16);
+		value = hextoul(s, &endp);
 	if (!s || endp == s)
 		return default_val;
 
@@ -984,7 +984,7 @@ static int do_env_export(struct cmd_tbl *cmdtp, int flag,
 			case 's':		/* size given */
 				if (--argc <= 0)
 					return cmd_usage(cmdtp);
-				size = simple_strtoul(*++argv, NULL, 16);
+				size = hextoul(*++argv, NULL);
 				goto NXTARG;
 			case 't':		/* text format */
 				if (fmt++)
@@ -1001,7 +1001,7 @@ NXTARG:		;
 	if (argc < 1)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[0], NULL, 16);
+	addr = hextoul(argv[0], NULL);
 	ptr = map_sysmem(addr, size);
 
 	if (size)
@@ -1140,11 +1140,11 @@ static int do_env_import(struct cmd_tbl *cmdtp, int flag,
 	if (sep != '\n' && crlf_is_lf )
 		crlf_is_lf = 0;
 
-	addr = simple_strtoul(argv[0], NULL, 16);
+	addr = hextoul(argv[0], NULL);
 	ptr = map_sysmem(addr, 0);
 
 	if (argc >= 2 && strcmp(argv[1], "-")) {
-		size = simple_strtoul(argv[1], NULL, 16);
+		size = hextoul(argv[1], NULL);
 	} else if (chk) {
 		puts("## Error: external checksum format must pass size\n");
 		return CMD_RET_FAILURE;
diff --git a/cmd/nvedit_efi.c b/cmd/nvedit_efi.c
index d5e93827e45..676bbda950d 100644
--- a/cmd/nvedit_efi.c
+++ b/cmd/nvedit_efi.c
@@ -471,12 +471,12 @@ int do_env_set_efi(struct cmd_tbl *cmdtp, int flag, int argc,
 
 			argc--;
 			argv++;
-			addr = simple_strtoul(argv[0], &ep, 16);
+			addr = hextoul(argv[0], &ep);
 			if (*ep != ':')
 				return CMD_RET_USAGE;
 
 			/* 0 should be allowed for delete */
-			size = simple_strtoul(++ep, NULL, 16);
+			size = hextoul(++ep, NULL);
 
 			value_on_memory = true;
 		} else if (!strcmp(argv[0], "-v")) {
diff --git a/cmd/onenand.c b/cmd/onenand.c
index 216458bb474..852ed5c7b21 100644
--- a/cmd/onenand.c
+++ b/cmd/onenand.c
@@ -398,7 +398,7 @@ static int do_onenand_read(struct cmd_tbl *cmdtp, int flag, int argc,
 	if ((s != NULL) && (!strcmp(s, ".oob")))
 		oob = 1;
 
-	addr = (ulong)simple_strtoul(argv[1], NULL, 16);
+	addr = (ulong)hextoul(argv[1], NULL);
 
 	printf("\nOneNAND read: ");
 	if (arg_off_size_onenand(argc - 2, argv + 2, &ofs, &len) != 0)
@@ -425,7 +425,7 @@ static int do_onenand_write(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (strncmp(argv[0] + 6, "yaffs", 5) == 0)
 		withoob = 1;
 
-	addr = (ulong)simple_strtoul(argv[1], NULL, 16);
+	addr = (ulong)hextoul(argv[1], NULL);
 
 	printf("\nOneNAND write: ");
 	if (arg_off_size_onenand(argc - 2, argv + 2, &ofs, &len) != 0)
@@ -512,7 +512,7 @@ static int do_onenand_dump(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	s = strchr(argv[0], '.');
-	ofs = (int)simple_strtoul(argv[1], NULL, 16);
+	ofs = (int)hextoul(argv[1], NULL);
 
 	if (s != NULL && strcmp(s, ".oob") == 0)
 		ret = onenand_dump(mtd, ofs, 1);
@@ -535,7 +535,7 @@ static int do_onenand_markbad(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	while (argc > 0) {
-		addr = simple_strtoul(*argv, NULL, 16);
+		addr = hextoul(*argv, NULL);
 
 		if (mtd_block_markbad(mtd, addr)) {
 			printf("block 0x%08lx NOT marked "
diff --git a/cmd/osd.c b/cmd/osd.c
index 703d640b04e..8557894a5de 100644
--- a/cmd/osd.c
+++ b/cmd/osd.c
@@ -99,10 +99,10 @@ static int do_osd_write(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 	}
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
 	hexstr = argv[3];
-	count = (argc > 4) ? simple_strtoul(argv[4], NULL, 16) : 1;
+	count = (argc > 4) ? hextoul(argv[4], NULL) : 1;
 
 	buflen = strlen(hexstr) / 2;
 
@@ -148,9 +148,9 @@ static int do_osd_print(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 	}
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
-	color = simple_strtoul(argv[3], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
+	color = hextoul(argv[3], NULL);
 	text = argv[4];
 
 	res = video_osd_print(osd_cur, x, y, color, text);
@@ -176,8 +176,8 @@ static int do_osd_size(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_FAILURE;
 	}
 
-	x = simple_strtoul(argv[1], NULL, 16);
-	y = simple_strtoul(argv[2], NULL, 16);
+	x = hextoul(argv[1], NULL);
+	y = hextoul(argv[2], NULL);
 
 	res = video_osd_set_size(osd_cur, x, y);
 	if (res) {
diff --git a/cmd/pcap.c b/cmd/pcap.c
index d0172f3fffc..c751980c554 100644
--- a/cmd/pcap.c
+++ b/cmd/pcap.c
@@ -18,7 +18,7 @@ static int do_pcap_init(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc != 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], NULL, 16);
+	addr = hextoul(argv[1], NULL);
 	size = simple_strtoul(argv[2], NULL, 10);
 
 	return pcap_init(addr, size) ? CMD_RET_FAILURE : CMD_RET_SUCCESS;
diff --git a/cmd/pci.c b/cmd/pci.c
index e53b7c858c6..22de9426c9b 100644
--- a/cmd/pci.c
+++ b/cmd/pci.c
@@ -470,14 +470,14 @@ static pci_dev_t get_pci_dev(char *name)
 		if (name[i] == '.') {
 			memcpy(cnum, &name[iold], i - iold);
 			cnum[i - iold] = '\0';
-			bdfs[n++] = simple_strtoul(cnum, NULL, 16);
+			bdfs[n++] = hextoul(cnum, NULL);
 			iold = i + 1;
 		}
 	}
 	strcpy(cnum, &name[iold]);
 	if (n == 0)
 		n = 1;
-	bdfs[n] = simple_strtoul(cnum, NULL, 16);
+	bdfs[n] = hextoul(cnum, NULL);
 
 	return PCI_BDF(bdfs[0], bdfs[1], bdfs[2]);
 }
@@ -588,7 +588,7 @@ static int pci_cfg_modify(pci_dev_t bdf, ulong addr, ulong size, ulong value,
 #endif
 		else {
 			char *endp;
-			i = simple_strtoul(console_buffer, &endp, 16);
+			i = hextoul(console_buffer, &endp);
 			nbytes = endp - console_buffer;
 			if (nbytes) {
 				/* good enough to not time out
@@ -683,9 +683,9 @@ static int do_pci(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		cmd_size = cmd_get_data_size(argv[1], 4);
 		size = (cmd_size == 4) ? PCI_SIZE_32 : cmd_size - 1;
 		if (argc > 3)
-			addr = simple_strtoul(argv[3], NULL, 16);
+			addr = hextoul(argv[3], NULL);
 		if (argc > 4)
-			value = simple_strtoul(argv[4], NULL, 16);
+			value = hextoul(argv[4], NULL);
 	case 'h':		/* header */
 #ifdef CONFIG_DM_PCI
 	case 'b':		/* bars */
@@ -709,7 +709,7 @@ static int do_pci(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 				argc--;
 			}
 			if (argc > 1)
-				busnum = simple_strtoul(argv[1], NULL, 16);
+				busnum = hextoul(argv[1], NULL);
 		}
 #ifdef CONFIG_DM_PCI
 		ret = uclass_get_device_by_seq(UCLASS_PCI, busnum, &bus);
diff --git a/cmd/pstore.c b/cmd/pstore.c
index 5656bae6d3e..c6973aeb28f 100644
--- a/cmd/pstore.c
+++ b/cmd/pstore.c
@@ -172,26 +172,26 @@ static int pstore_set(struct cmd_tbl *cmdtp, int flag,  int argc,
 
 	/* Address is specified since argc > 2
 	 */
-	pstore_addr = simple_strtoul(argv[1], NULL, 16);
+	pstore_addr = hextoul(argv[1], NULL);
 
 	/* Length is specified since argc > 2
 	 */
-	pstore_length = simple_strtoul(argv[2], NULL, 16);
+	pstore_length = hextoul(argv[2], NULL);
 
 	if (argc > 3)
-		pstore_record_size = simple_strtoul(argv[3], NULL, 16);
+		pstore_record_size = hextoul(argv[3], NULL);
 
 	if (argc > 4)
-		pstore_console_size = simple_strtoul(argv[4], NULL, 16);
+		pstore_console_size = hextoul(argv[4], NULL);
 
 	if (argc > 5)
-		pstore_ftrace_size = simple_strtoul(argv[5], NULL, 16);
+		pstore_ftrace_size = hextoul(argv[5], NULL);
 
 	if (argc > 6)
-		pstore_pmsg_size = simple_strtoul(argv[6], NULL, 16);
+		pstore_pmsg_size = hextoul(argv[6], NULL);
 
 	if (argc > 7)
-		pstore_ecc_size = simple_strtoul(argv[7], NULL, 16);
+		pstore_ecc_size = hextoul(argv[7], NULL);
 
 	if (pstore_length < (pstore_record_size + pstore_console_size
 			     + pstore_ftrace_size + pstore_pmsg_size)) {
diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c
index 9a30629e26e..067c24e5ff4 100644
--- a/cmd/pxe_utils.c
+++ b/cmd/pxe_utils.c
@@ -351,7 +351,7 @@ static void label_boot_fdtoverlay(struct cmd_tbl *cmdtp, struct pxe_label *label
 	int err;
 
 	/* Get the main fdt and map it */
-	fdt_addr = simple_strtoul(env_get("fdt_addr_r"), NULL, 16);
+	fdt_addr = hextoul(env_get("fdt_addr_r"), NULL);
 	working_fdt = map_sysmem(fdt_addr, 0);
 	err = fdt_check_header(working_fdt);
 	if (err)
@@ -364,7 +364,7 @@ static void label_boot_fdtoverlay(struct cmd_tbl *cmdtp, struct pxe_label *label
 		return;
 	}
 
-	fdtoverlay_addr = simple_strtoul(fdtoverlay_addr_env, NULL, 16);
+	fdtoverlay_addr = hextoul(fdtoverlay_addr_env, NULL);
 
 	/* Cycle over the overlay files and apply them in order */
 	do {
diff --git a/cmd/qfw.c b/cmd/qfw.c
index e6a9fdb2af1..eb6a552f6fa 100644
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -120,7 +120,7 @@ static int qemu_fwcfg_do_load(struct cmd_tbl *cmdtp, int flag,
 
 	env = env_get("loadaddr");
 	load_addr = env ?
-		(void *)simple_strtoul(env, NULL, 16) :
+		(void *)hextoul(env, NULL) :
 #ifdef CONFIG_LOADADDR
 		(void *)CONFIG_LOADADDR;
 #else
@@ -129,7 +129,7 @@ static int qemu_fwcfg_do_load(struct cmd_tbl *cmdtp, int flag,
 
 	env = env_get("ramdiskaddr");
 	initrd_addr = env ?
-		(void *)simple_strtoul(env, NULL, 16) :
+		(void *)hextoul(env, NULL) :
 #ifdef CONFIG_RAMDISK_ADDR
 		(void *)CONFIG_RAMDISK_ADDR;
 #else
@@ -137,10 +137,10 @@ static int qemu_fwcfg_do_load(struct cmd_tbl *cmdtp, int flag,
 #endif
 
 	if (argc == 2) {
-		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
-		initrd_addr = (void *)simple_strtoul(argv[1], NULL, 16);
+		load_addr = (void *)hextoul(argv[0], NULL);
+		initrd_addr = (void *)hextoul(argv[1], NULL);
 	} else if (argc == 1) {
-		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
+		load_addr = (void *)hextoul(argv[0], NULL);
 	}
 
 	if (!load_addr || !initrd_addr) {
diff --git a/cmd/read.c b/cmd/read.c
index 34f53f9a292..99c7e3854e1 100644
--- a/cmd/read.c
+++ b/cmd/read.c
@@ -30,13 +30,13 @@ int do_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return 1;
 	}
 
-	dev = (int)simple_strtoul(argv[2], &ep, 16);
+	dev = (int)hextoul(argv[2], &ep);
 	if (*ep) {
 		if (*ep != ':') {
 			printf("Invalid block device %s\n", argv[2]);
 			return 1;
 		}
-		part = (int)simple_strtoul(++ep, NULL, 16);
+		part = (int)hextoul(++ep, NULL);
 	}
 
 	dev_desc = blk_get_dev(argv[1], dev);
@@ -45,9 +45,9 @@ int do_read(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return 1;
 	}
 
-	addr = (void *)simple_strtoul(argv[3], NULL, 16);
-	blk = simple_strtoul(argv[4], NULL, 16);
-	cnt = simple_strtoul(argv[5], NULL, 16);
+	addr = (void *)hextoul(argv[3], NULL);
+	blk = hextoul(argv[4], NULL);
+	cnt = hextoul(argv[5], NULL);
 
 	if (part != 0) {
 		if (part_get_info(dev_desc, part, &part_info)) {
diff --git a/cmd/reiser.c b/cmd/reiser.c
index 3db926f8064..707167fcd59 100644
--- a/cmd/reiser.c
+++ b/cmd/reiser.c
@@ -90,7 +90,7 @@ int do_reiserload(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	case 3:
 		addr_str = env_get("loadaddr");
 		if (addr_str != NULL) {
-			addr = simple_strtoul (addr_str, NULL, 16);
+			addr = hextoul(addr_str, NULL);
 		} else {
 			addr = CONFIG_SYS_LOAD_ADDR;
 		}
@@ -98,19 +98,19 @@ int do_reiserload(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		count = 0;
 		break;
 	case 4:
-		addr = simple_strtoul (argv[3], NULL, 16);
+		addr = hextoul(argv[3], NULL);
 		filename = env_get("bootfile");
 		count = 0;
 		break;
 	case 5:
-		addr = simple_strtoul (argv[3], NULL, 16);
+		addr = hextoul(argv[3], NULL);
 		filename = argv[4];
 		count = 0;
 		break;
 	case 6:
-		addr = simple_strtoul (argv[3], NULL, 16);
+		addr = hextoul(argv[3], NULL);
 		filename = argv[4];
-		count = simple_strtoul (argv[5], NULL, 16);
+		count = hextoul(argv[5], NULL);
 		break;
 
 	default:
diff --git a/cmd/remoteproc.c b/cmd/remoteproc.c
index b3ddcebe314..2a0e5759716 100644
--- a/cmd/remoteproc.c
+++ b/cmd/remoteproc.c
@@ -130,9 +130,9 @@ static int do_remoteproc_load(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	id = (int)simple_strtoul(argv[1], NULL, 10);
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 
-	size = simple_strtoul(argv[3], NULL, 16);
+	size = hextoul(argv[3], NULL);
 
 	if (!size) {
 		printf("\t Expect some size??\n");
diff --git a/cmd/rng.c b/cmd/rng.c
index 9747c11be46..1ad5a096c0b 100644
--- a/cmd/rng.c
+++ b/cmd/rng.c
@@ -24,7 +24,7 @@ static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 
 	if (argc >= 2)
-		n = simple_strtoul(argv[1], NULL, 16);
+		n = hextoul(argv[1], NULL);
 
 	buf = malloc(n);
 	if (!buf) {
diff --git a/cmd/rtc.c b/cmd/rtc.c
index b4f61b2e835..784879ec1a0 100644
--- a/cmd/rtc.c
+++ b/cmd/rtc.c
@@ -18,13 +18,13 @@ static int do_rtc_read(struct udevice *dev, int argc, char * const argv[])
 	if (argc < 2 || argc > 3)
 		return CMD_RET_USAGE;
 
-	reg = simple_strtoul(argv[0], NULL, 16);
-	len = simple_strtoul(argv[1], NULL, 16);
+	reg = hextoul(argv[0], NULL);
+	len = hextoul(argv[1], NULL);
 
 	if (argc == 3) {
 		u8 *addr;
 
-		addr = map_sysmem(simple_strtoul(argv[2], NULL, 16), len);
+		addr = map_sysmem(hextoul(argv[2], NULL), len);
 		ret = dm_rtc_read(dev, reg, addr, len);
 		unmap_sysmem(addr);
 		if (ret) {
@@ -59,13 +59,13 @@ static int do_rtc_write(struct udevice *dev, int argc, char * const argv[])
 	if (argc < 2 || argc > 3)
 		return CMD_RET_USAGE;
 
-	reg = simple_strtoul(argv[0], NULL, 16);
+	reg = hextoul(argv[0], NULL);
 
 	if (argc == 3) {
 		u8 *addr;
 
-		len = simple_strtoul(argv[1], NULL, 16);
-		addr = map_sysmem(simple_strtoul(argv[2], NULL, 16), len);
+		len = hextoul(argv[1], NULL);
+		addr = map_sysmem(hextoul(argv[2], NULL), len);
 		ret = dm_rtc_write(dev, reg, addr, len);
 		unmap_sysmem(addr);
 		if (ret) {
diff --git a/cmd/setexpr.c b/cmd/setexpr.c
index e828be39700..97d86ab7afd 100644
--- a/cmd/setexpr.c
+++ b/cmd/setexpr.c
@@ -45,7 +45,7 @@ static int get_arg(char *s, int w, struct expr_arg *argp)
 		int len;
 		char *str;
 
-		addr = simple_strtoul(&s[1], NULL, 16);
+		addr = hextoul(&s[1], NULL);
 		switch (w) {
 		case 1:
 			p = map_sysmem(addr, sizeof(uchar));
@@ -90,7 +90,7 @@ static int get_arg(char *s, int w, struct expr_arg *argp)
 	} else {
 		if (w == CMD_DATA_SIZE_STR)
 			return -EINVAL;
-		arg.ival = simple_strtoul(s, NULL, 16);
+		arg.ival = hextoul(s, NULL);
 	}
 	*argp = arg;
 
diff --git a/cmd/sf.c b/cmd/sf.c
index 46346fb9d43..eac27ed2d77 100644
--- a/cmd/sf.c
+++ b/cmd/sf.c
@@ -54,7 +54,7 @@ static int sf_parse_len_arg(char *arg, ulong *len)
 		++arg;
 	}
 
-	len_arg = simple_strtoul(arg, &ep, 16);
+	len_arg = hextoul(arg, &ep);
 	if (ep == arg || *ep != '\0')
 		return -1;
 
@@ -119,7 +119,7 @@ static int do_spi_flash_probe(int argc, char *const argv[])
 			return -1;
 	}
 	if (argc >= 4) {
-		mode = simple_strtoul(argv[3], &endp, 16);
+		mode = hextoul(argv[3], &endp);
 		if (*argv[3] == 0 || *endp != 0)
 			return -1;
 	}
@@ -272,7 +272,7 @@ static int do_spi_flash_read_write(int argc, char *const argv[])
 	if (argc < 3)
 		return -1;
 
-	addr = simple_strtoul(argv[1], &endp, 16);
+	addr = hextoul(argv[1], &endp);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
 
@@ -517,10 +517,10 @@ static int do_spi_flash_test(int argc, char *const argv[])
 
 	if (argc < 3)
 		return -1;
-	offset = simple_strtoul(argv[1], &endp, 16);
+	offset = hextoul(argv[1], &endp);
 	if (*argv[1] == 0 || *endp != 0)
 		return -1;
-	len = simple_strtoul(argv[2], &endp, 16);
+	len = hextoul(argv[2], &endp);
 	if (*argv[2] == 0 || *endp != 0)
 		return -1;
 
diff --git a/cmd/smccc.c b/cmd/smccc.c
index 0b19f6c68c6..02732b64c05 100644
--- a/cmd/smccc.c
+++ b/cmd/smccc.c
@@ -28,15 +28,15 @@ static int do_call(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
-	fid = simple_strtoul(argv[1], NULL, 16);
+	fid = hextoul(argv[1], NULL);
 
-	a1 = argc > 2 ? simple_strtoul(argv[2], NULL, 16) : 0;
-	a2 = argc > 3 ? simple_strtoul(argv[3], NULL, 16) : 0;
-	a3 = argc > 4 ? simple_strtoul(argv[4], NULL, 16) : 0;
-	a4 = argc > 5 ? simple_strtoul(argv[5], NULL, 16) : 0;
-	a5 = argc > 6 ? simple_strtoul(argv[6], NULL, 16) : 0;
-	a6 = argc > 7 ? simple_strtoul(argv[7], NULL, 16) : 0;
-	a7 = argc > 8 ? simple_strtoul(argv[8], NULL, 16) : 0;
+	a1 = argc > 2 ? hextoul(argv[2], NULL) : 0;
+	a2 = argc > 3 ? hextoul(argv[3], NULL) : 0;
+	a3 = argc > 4 ? hextoul(argv[4], NULL) : 0;
+	a4 = argc > 5 ? hextoul(argv[5], NULL) : 0;
+	a5 = argc > 6 ? hextoul(argv[6], NULL) : 0;
+	a6 = argc > 7 ? hextoul(argv[7], NULL) : 0;
+	a7 = argc > 8 ? hextoul(argv[8], NULL) : 0;
 
 	if (!strcmp(argv[0], "smc"))
 		arm_smccc_smc(fid, a1, a2, a3, a4, a5, a6, a7, &res);
diff --git a/cmd/source.c b/cmd/source.c
index 71f71528ad2..81e015b64ef 100644
--- a/cmd/source.c
+++ b/cmd/source.c
@@ -179,7 +179,7 @@ static int do_source(struct cmd_tbl *cmdtp, int flag, int argc,
 		      fit_uname, addr);
 #endif
 	} else {
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 		debug("*  source: cmdline image address = 0x%08lx\n", addr);
 	}
 
diff --git a/cmd/strings.c b/cmd/strings.c
index 85fdc34f08f..bf348afce81 100644
--- a/cmd/strings.c
+++ b/cmd/strings.c
@@ -18,9 +18,9 @@ int do_strings(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return CMD_RET_USAGE;
 
 	if ((flag & CMD_FLAG_REPEAT) == 0) {
-		start_addr = (char *)simple_strtoul(argv[1], NULL, 16);
+		start_addr = (char *)hextoul(argv[1], NULL);
 		if (argc > 2)
-			last_addr = (char *)simple_strtoul(argv[2], NULL, 16);
+			last_addr = (char *)hextoul(argv[2], NULL);
 		else
 			last_addr = (char *)-1;
 	}
diff --git a/cmd/ti/ddr3.c b/cmd/ti/ddr3.c
index 6b43a738683..be937a7531d 100644
--- a/cmd/ti/ddr3.c
+++ b/cmd/ti/ddr3.c
@@ -290,8 +290,8 @@ static int do_ddr_test(struct cmd_tbl *cmdtp,
 			return CMD_RET_FAILURE;
 		}
 
-		start_addr = simple_strtoul(argv[2], NULL, 16);
-		ecc_err = simple_strtoul(argv[3], NULL, 16);
+		start_addr = hextoul(argv[2], NULL);
+		ecc_err = hextoul(argv[3], NULL);
 
 		if (!is_addr_valid(start_addr)) {
 			puts("Invalid address. Please enter ECC supported address!\n");
@@ -306,8 +306,8 @@ static int do_ddr_test(struct cmd_tbl *cmdtp,
 	      ((argc == 5) && (strncmp(argv[1], "compare", 8) == 0))))
 		return cmd_usage(cmdtp);
 
-	start_addr = simple_strtoul(argv[2], NULL, 16);
-	end_addr = simple_strtoul(argv[3], NULL, 16);
+	start_addr = hextoul(argv[2], NULL);
+	end_addr = hextoul(argv[3], NULL);
 
 	if ((start_addr < CONFIG_SYS_SDRAM_BASE) ||
 	    (start_addr > (CONFIG_SYS_SDRAM_BASE +
@@ -321,7 +321,7 @@ static int do_ddr_test(struct cmd_tbl *cmdtp,
 
 	puts("Please wait ...\n");
 	if (argc == 5) {
-		size = simple_strtoul(argv[4], NULL, 16);
+		size = hextoul(argv[4], NULL);
 		ddr_memory_compare(start_addr, end_addr, size);
 	} else {
 		ddr_memory_test(start_addr, end_addr, 0);
diff --git a/cmd/tlv_eeprom.c b/cmd/tlv_eeprom.c
index 5099cbdd95e..2b643f9587c 100644
--- a/cmd/tlv_eeprom.c
+++ b/cmd/tlv_eeprom.c
@@ -751,7 +751,7 @@ static int set_mac(char *buf, const char *string)
 
 	/* Convert string to binary */
 	for (i = 0, p = (char *)string; i < 6; i++) {
-		buf[i] = p ? simple_strtoul(p, &end, 16) : 0;
+		buf[i] = p ? hextoul(p, &end) : 0;
 		if (p)
 			p = (*end) ? end + 1 : end;
 	}
diff --git a/cmd/tpm-common.c b/cmd/tpm-common.c
index 88c9e08e318..a48c060273a 100644
--- a/cmd/tpm-common.c
+++ b/cmd/tpm-common.c
@@ -68,7 +68,7 @@ void *parse_byte_string(char *bytes, u8 *data, size_t *count_ptr)
 	for (i = 0; i < length; i += 2) {
 		byte[0] = bytes[i];
 		byte[1] = bytes[i + 1];
-		data[i / 2] = (u8)simple_strtoul(byte, NULL, 16);
+		data[i / 2] = (u8)hextoul(byte, NULL);
 	}
 
 	if (count_ptr)
diff --git a/cmd/trace.c b/cmd/trace.c
index 4ce47c76276..2e3ee1d3ba2 100644
--- a/cmd/trace.c
+++ b/cmd/trace.c
@@ -21,8 +21,8 @@ static int get_args(int argc, char *const argv[], char **buff,
 				   *buff_size);
 		*buff_ptr = env_get_ulong("profoffset", 16, 0);
 	} else {
-		*buff_size = simple_strtoul(argv[3], NULL, 16);
-		*buff = map_sysmem(simple_strtoul(argv[2], NULL, 16),
+		*buff_size = hextoul(argv[3], NULL);
+		*buff = map_sysmem(hextoul(argv[2], NULL),
 				   *buff_size);
 		*buff_ptr = 0;
 	};
diff --git a/cmd/tsi148.c b/cmd/tsi148.c
index 2eae14f87f1..0d849d9979e 100644
--- a/cmd/tsi148.c
+++ b/cmd/tsi148.c
@@ -392,15 +392,15 @@ int do_tsi148(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc > 1)
 		cmd = argv[1][0];
 	if (argc > 2)
-		addr1 = simple_strtoul(argv[2], NULL, 16);
+		addr1 = hextoul(argv[2], NULL);
 	if (argc > 3)
-		addr2 = simple_strtoul(argv[3], NULL, 16);
+		addr2 = hextoul(argv[3], NULL);
 	if (argc > 4)
-		size = simple_strtoul(argv[4], NULL, 16);
+		size = hextoul(argv[4], NULL);
 	if (argc > 5)
-		vam = simple_strtoul(argv[5], NULL, 16);
+		vam = hextoul(argv[5], NULL);
 	if (argc > 6)
-		vdw = simple_strtoul(argv[6], NULL, 16);
+		vdw = hextoul(argv[6], NULL);
 
 	switch (cmd) {
 	case 'c':
diff --git a/cmd/ubi.c b/cmd/ubi.c
index cb14e3e1e79..fe8ac58bac0 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -661,8 +661,8 @@ static int do_ubi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 			return 1;
 		}
 
-		addr = simple_strtoul(argv[2], NULL, 16);
-		size = simple_strtoul(argv[4], NULL, 16);
+		addr = hextoul(argv[2], NULL);
+		size = hextoul(argv[4], NULL);
 
 		if (strlen(argv[1]) == 10 &&
 		    strncmp(argv[1] + 5, ".part", 5) == 0) {
@@ -671,7 +671,7 @@ static int do_ubi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 						(void *)addr, size);
 			} else {
 				size_t full_size;
-				full_size = simple_strtoul(argv[5], NULL, 16);
+				full_size = hextoul(argv[5], NULL);
 				ret = ubi_volume_begin_write(argv[3],
 						(void *)addr, size, full_size);
 			}
@@ -691,13 +691,13 @@ static int do_ubi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 		/* E.g., read volume size */
 		if (argc == 5) {
-			size = simple_strtoul(argv[4], NULL, 16);
+			size = hextoul(argv[4], NULL);
 			argc--;
 		}
 
 		/* E.g., read volume */
 		if (argc == 4) {
-			addr = simple_strtoul(argv[2], NULL, 16);
+			addr = hextoul(argv[2], NULL);
 			argc--;
 		}
 
diff --git a/cmd/ubifs.c b/cmd/ubifs.c
index a26b653d61e..7a620c5e21d 100644
--- a/cmd/ubifs.c
+++ b/cmd/ubifs.c
@@ -122,14 +122,14 @@ static int do_ubifs_load(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(argv[1], &endp, 16);
+	addr = hextoul(argv[1], &endp);
 	if (endp == argv[1])
 		return CMD_RET_USAGE;
 
 	filename = argv[2];
 
 	if (argc == 4) {
-		size = simple_strtoul(argv[3], &endp, 16);
+		size = hextoul(argv[3], &endp);
 		if (endp == argv[3])
 			return CMD_RET_USAGE;
 	}
diff --git a/cmd/universe.c b/cmd/universe.c
index 5ff47dde4fb..fb3a32d4d5a 100644
--- a/cmd/universe.c
+++ b/cmd/universe.c
@@ -307,17 +307,17 @@ int do_universe(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	if (argc > 1)
 		cmd = argv[1][0];
 	if (argc > 2)
-		addr1 = simple_strtoul(argv[2], NULL, 16);
+		addr1 = hextoul(argv[2], NULL);
 	if (argc > 3)
-		addr2 = simple_strtoul(argv[3], NULL, 16);
+		addr2 = hextoul(argv[3], NULL);
 	if (argc > 4)
-		size = simple_strtoul(argv[4], NULL, 16);
+		size = hextoul(argv[4], NULL);
 	if (argc > 5)
-		vam = simple_strtoul(argv[5], NULL, 16);
+		vam = hextoul(argv[5], NULL);
 	if (argc > 6)
-		pms = simple_strtoul(argv[6], NULL, 16);
+		pms = hextoul(argv[6], NULL);
 	if (argc > 7)
-		vdw = simple_strtoul(argv[7], NULL, 16);
+		vdw = hextoul(argv[7], NULL);
 
 	switch (cmd) {
 	case 'i':		/* init */
diff --git a/cmd/unlz4.c b/cmd/unlz4.c
index 4ae7f34d36e..323ab467173 100644
--- a/cmd/unlz4.c
+++ b/cmd/unlz4.c
@@ -18,9 +18,9 @@ static int do_unlz4(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	switch (argc) {
 	case 4:
-		src = simple_strtoul(argv[1], NULL, 16);
-		dst = simple_strtoul(argv[2], NULL, 16);
-		dst_len = simple_strtoul(argv[3], NULL, 16);
+		src = hextoul(argv[1], NULL);
+		dst = hextoul(argv[2], NULL);
+		dst_len = hextoul(argv[3], NULL);
 		break;
 	default:
 		return CMD_RET_USAGE;
diff --git a/cmd/unzip.c b/cmd/unzip.c
index 9b28328a1d7..3d1f5f3ac10 100644
--- a/cmd/unzip.c
+++ b/cmd/unzip.c
@@ -18,11 +18,11 @@ static int do_unzip(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	switch (argc) {
 		case 4:
-			dst_len = simple_strtoul(argv[3], NULL, 16);
+			dst_len = hextoul(argv[3], NULL);
 			/* fall through */
 		case 3:
-			src = simple_strtoul(argv[1], NULL, 16);
-			dst = simple_strtoul(argv[2], NULL, 16);
+			src = hextoul(argv[1], NULL);
+			dst = hextoul(argv[2], NULL);
 			break;
 		default:
 			return CMD_RET_USAGE;
@@ -60,11 +60,11 @@ static int do_gzwrite(struct cmd_tbl *cmdtp, int flag,
 	if (ret < 0)
 		return CMD_RET_FAILURE;
 
-	addr = (unsigned char *)simple_strtoul(argv[3], NULL, 16);
-	length = simple_strtoul(argv[4], NULL, 16);
+	addr = (unsigned char *)hextoul(argv[3], NULL);
+	length = hextoul(argv[4], NULL);
 
 	if (5 < argc) {
-		writebuf = simple_strtoul(argv[5], NULL, 16);
+		writebuf = hextoul(argv[5], NULL);
 		if (6 < argc) {
 			startoffs = simple_strtoull(argv[6], NULL, 16);
 			if (7 < argc)
diff --git a/cmd/x86/mtrr.c b/cmd/x86/mtrr.c
index fc61a549b02..b213a942fde 100644
--- a/cmd/x86/mtrr.c
+++ b/cmd/x86/mtrr.c
@@ -78,8 +78,8 @@ static int do_mtrr_set(int cpu_select, uint reg, int argc, char *const argv[])
 		printf("Invalid type name %s\n", typename);
 		return CMD_RET_USAGE;
 	}
-	start = simple_strtoul(argv[1], NULL, 16);
-	size = simple_strtoul(argv[2], NULL, 16);
+	start = hextoul(argv[1], NULL);
+	size = hextoul(argv[2], NULL);
 
 	base = start | type;
 	valid = native_read_msr(MTRR_PHYS_MASK_MSR(reg)) & MTRR_PHYS_MASK_VALID;
@@ -126,7 +126,7 @@ static int do_mtrr(struct cmd_tbl *cmdtp, int flag, int argc,
 	if (cmd != 'l') {
 		if (argc < 2)
 			return CMD_RET_USAGE;
-		reg = simple_strtoul(argv[1], NULL, 16);
+		reg = hextoul(argv[1], NULL);
 		if (reg >= reg_count) {
 			printf("Invalid register number\n");
 			return CMD_RET_USAGE;
diff --git a/cmd/ximg.c b/cmd/ximg.c
index ef738ebfa2f..65ba41320a0 100644
--- a/cmd/ximg.c
+++ b/cmd/ximg.c
@@ -59,16 +59,16 @@ do_imgextract(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	verify = env_get_yesno("verify");
 
 	if (argc > 1) {
-		addr = simple_strtoul(argv[1], NULL, 16);
+		addr = hextoul(argv[1], NULL);
 	}
 	if (argc > 2) {
-		part = simple_strtoul(argv[2], NULL, 16);
+		part = hextoul(argv[2], NULL);
 #if defined(CONFIG_FIT)
 		uname = argv[2];
 #endif
 	}
 	if (argc > 3) {
-		dest = simple_strtoul(argv[3], NULL, 16);
+		dest = hextoul(argv[3], NULL);
 	}
 
 	switch (genimg_get_format((void *)addr)) {
diff --git a/cmd/yaffs2.c b/cmd/yaffs2.c
index f29ebcc026e..27fbd1be8f7 100644
--- a/cmd/yaffs2.c
+++ b/cmd/yaffs2.c
@@ -165,8 +165,8 @@ int do_ywr(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 
 	filename = argv[1];
-	value = simple_strtoul(argv[2], NULL, 16);
-	numValues = simple_strtoul(argv[3], NULL, 16);
+	value = hextoul(argv[2], NULL);
+	numValues = hextoul(argv[3], NULL);
 
 	printf("Writing value (%lx) %lx times to %s... ", value, numValues,
 	       filename);
@@ -188,7 +188,7 @@ int do_yrdm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 
 	filename = argv[1];
-	addr = simple_strtoul(argv[2], NULL, 16);
+	addr = hextoul(argv[2], NULL);
 
 	cmd_yaffs_mread_file(filename, (char *)addr);
 
@@ -207,8 +207,8 @@ int do_ywrm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	}
 
 	filename = argv[1];
-	addr = simple_strtoul(argv[2], NULL, 16);
-	size = simple_strtoul(argv[3], NULL, 16);
+	addr = hextoul(argv[2], NULL);
+	size = hextoul(argv[3], NULL);
 
 	cmd_yaffs_mwrite_file(filename, (char *)addr, size);
 
diff --git a/cmd/zfs.c b/cmd/zfs.c
index e429ac88d73..6ef1b56ab10 100644
--- a/cmd/zfs.c
+++ b/cmd/zfs.c
@@ -50,13 +50,13 @@ static int do_zfs_load(struct cmd_tbl *cmdtp, int flag, int argc,
 		return CMD_RET_USAGE;
 
 	count = 0;
-	addr = simple_strtoul(argv[3], NULL, 16);
+	addr = hextoul(argv[3], NULL);
 	filename = env_get("bootfile");
 	switch (argc) {
 	case 3:
 		addr_str = env_get("loadaddr");
 		if (addr_str != NULL)
-			addr = simple_strtoul(addr_str, NULL, 16);
+			addr = hextoul(addr_str, NULL);
 		else
 			addr = CONFIG_SYS_LOAD_ADDR;
 
@@ -68,7 +68,7 @@ static int do_zfs_load(struct cmd_tbl *cmdtp, int flag, int argc,
 		break;
 	case 6:
 		filename = argv[4];
-		count = simple_strtoul(argv[5], NULL, 16);
+		count = hextoul(argv[5], NULL);
 		break;
 
 	default:
diff --git a/cmd/zip.c b/cmd/zip.c
index 8ad37684647..08afd62b973 100644
--- a/cmd/zip.c
+++ b/cmd/zip.c
@@ -16,12 +16,12 @@ static int do_zip(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 	switch (argc) {
 		case 5:
-			dst_len = simple_strtoul(argv[4], NULL, 16);
+			dst_len = hextoul(argv[4], NULL);
 			/* fall through */
 		case 4:
-			src = simple_strtoul(argv[1], NULL, 16);
-			src_len = simple_strtoul(argv[2], NULL, 16);
-			dst = simple_strtoul(argv[3], NULL, 16);
+			src = hextoul(argv[1], NULL);
+			src_len = hextoul(argv[2], NULL);
+			dst = hextoul(argv[3], NULL);
 			break;
 		default:
 			return cmd_usage(cmdtp);
diff --git a/common/bedbug.c b/common/bedbug.c
index 18a35ca23ef..6e1fb58080f 100644
--- a/common/bedbug.c
+++ b/common/bedbug.c
@@ -1005,7 +1005,7 @@ long read_number (char *txt)
 	}
 
 	if (txt[0] == '0' && (txt[1] == 'x' || txt[1] == 'X'))	/* hex */
-		val = simple_strtoul (&txt[2], NULL, 16);
+		val = hextoul(&txt[2], NULL);
 	else						/* decimal */
 		val = simple_strtoul (txt, NULL, 10);
 
diff --git a/common/bootm_os.c b/common/bootm_os.c
index 0b6325db660..d635037064a 100644
--- a/common/bootm_os.c
+++ b/common/bootm_os.c
@@ -238,7 +238,7 @@ static int do_bootm_plan9(int flag, int argc, char *const argv[],
 	/* See README.plan9 */
 	s = env_get("confaddr");
 	if (s != NULL) {
-		char *confaddr = (char *)simple_strtoul(s, NULL, 16);
+		char *confaddr = (char *)hextoul(s, NULL);
 
 		if (argc > 0) {
 			copy_args(confaddr, argc, argv, '\n');
@@ -360,8 +360,7 @@ int do_bootm_vxworks(int flag, int argc, char *const argv[],
 			/* find f=0xnumber flag */
 			if ((bootargs[pos] == '=') && (pos >= 1) &&
 			    (bootargs[pos - 1] == 'f')) {
-				vxflags = simple_strtoul(&bootargs[pos + 1],
-							 NULL, 16);
+				vxflags = hextoul(&bootargs[pos + 1], NULL);
 				if (vxflags & VXWORKS_SYSFLG_STD_DTB)
 					std_dtb = true;
 			}
diff --git a/common/fdt_support.c b/common/fdt_support.c
index 240f1e57d13..4341d84bd5e 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -579,7 +579,7 @@ void fdt_fixup_ethernet(void *fdt)
 
 			for (j = 0; j < 6; j++) {
 				mac_addr[j] = tmp ?
-					      simple_strtoul(tmp, &end, 16) : 0;
+					      hextoul(tmp, &end) : 0;
 				if (tmp)
 					tmp = (*end) ? end + 1 : end;
 			}
diff --git a/common/hash.c b/common/hash.c
index 059d381e231..dca23635abe 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -397,7 +397,7 @@ int hash_parse_string(const char *algo_name, const char *str, uint8_t *result)
 		char chr[3];
 
 		strlcpy(chr, &str[i * 2], 3);
-		result[i] = simple_strtoul(chr, NULL, 16);
+		result[i] = hextoul(chr, NULL);
 	}
 
 	return 0;
@@ -470,7 +470,7 @@ static void store_result(struct hash_algo *algo, const uint8_t *sum,
 		ulong addr;
 		void *buf;
 
-		addr = simple_strtoul(dest, NULL, 16);
+		addr = hextoul(dest, NULL);
 		buf = map_sysmem(addr, algo->digest_size);
 		memcpy(buf, sum, algo->digest_size);
 		unmap_sysmem(buf);
@@ -510,7 +510,7 @@ static int parse_verify_sum(struct hash_algo *algo, char *verify_str,
 		ulong addr;
 		void *buf;
 
-		addr = simple_strtoul(verify_str, NULL, 16);
+		addr = hextoul(verify_str, NULL);
 		buf = map_sysmem(addr, algo->digest_size);
 		memcpy(vsum, buf, algo->digest_size);
 	} else {
@@ -555,8 +555,8 @@ int hash_command(const char *algo_name, int flags, struct cmd_tbl *cmdtp,
 	if ((argc < 2) || ((flags & HASH_FLAG_VERIFY) && (argc < 3)))
 		return CMD_RET_USAGE;
 
-	addr = simple_strtoul(*argv++, NULL, 16);
-	len = simple_strtoul(*argv++, NULL, 16);
+	addr = hextoul(*argv++, NULL);
+	len = hextoul(*argv++, NULL);
 
 	if (multi_hash()) {
 		struct hash_algo *algo;
@@ -628,7 +628,7 @@ int hash_command(const char *algo_name, int flags, struct cmd_tbl *cmdtp,
 				addr, addr + len - 1, crc);
 
 		if (argc >= 3) {
-			ptr = (ulong *)simple_strtoul(argv[0], NULL, 16);
+			ptr = (ulong *)hextoul(argv[0], NULL);
 			*ptr = crc;
 		}
 	}
diff --git a/common/image-fdt.c b/common/image-fdt.c
index 06dce92a28a..9441e63a3d4 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -186,7 +186,7 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size)
 	/* If fdt_high is set use it to select the relocation address */
 	fdt_high = env_get("fdt_high");
 	if (fdt_high) {
-		void *desired_addr = (void *)simple_strtoul(fdt_high, NULL, 16);
+		void *desired_addr = (void *)hextoul(fdt_high, NULL);
 
 		if (((ulong) desired_addr) == ~0UL) {
 			/* All ones means use fdt in place */
@@ -297,7 +297,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 	*of_size = 0;
 
 	img_addr = (argc == 0) ? image_load_addr :
-			simple_strtoul(argv[0], NULL, 16);
+			hextoul(argv[0], NULL);
 	buf = map_sysmem(img_addr, 0);
 
 	if (argc > 2)
@@ -329,7 +329,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 			} else
 #endif
 			{
-				fdt_addr = simple_strtoul(select, NULL, 16);
+				fdt_addr = hextoul(select, NULL);
 				debug("*  fdt: cmdline image address = 0x%08lx\n",
 				      fdt_addr);
 			}
diff --git a/common/image-fit.c b/common/image-fit.c
index d6b2c3c7eca..aff4670be35 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -53,7 +53,7 @@ static int fit_parse_spec(const char *spec, char sepc, ulong addr_curr,
 	sep = strchr(spec, sepc);
 	if (sep) {
 		if (sep - spec > 0)
-			*addr = simple_strtoul(spec, NULL, 16);
+			*addr = hextoul(spec, NULL);
 
 		*name = sep + 1;
 		return 1;
diff --git a/common/image.c b/common/image.c
index 51854aae5dd..59c52a1f9ad 100644
--- a/common/image.c
+++ b/common/image.c
@@ -662,7 +662,7 @@ static int on_loadaddr(const char *name, const char *value, enum env_op op,
 	switch (op) {
 	case env_op_create:
 	case env_op_overwrite:
-		image_load_addr = simple_strtoul(value, NULL, 16);
+		image_load_addr = hextoul(value, NULL);
 		break;
 	default:
 		break;
@@ -676,7 +676,7 @@ ulong env_get_bootm_low(void)
 {
 	char *s = env_get("bootm_low");
 	if (s) {
-		ulong tmp = simple_strtoul(s, NULL, 16);
+		ulong tmp = hextoul(s, NULL);
 		return tmp;
 	}
 
@@ -1060,7 +1060,7 @@ ulong genimg_get_kernel_addr_fit(char * const img_addr,
 		      *fit_uname_kernel, kernel_addr);
 #endif
 	} else {
-		kernel_addr = simple_strtoul(img_addr, NULL, 16);
+		kernel_addr = hextoul(img_addr, NULL);
 		debug("*  kernel: cmdline image address = 0x%08lx\n",
 		      kernel_addr);
 	}
@@ -1227,7 +1227,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 			} else
 #endif
 			{
-				rd_addr = simple_strtoul(select, NULL, 16);
+				rd_addr = hextoul(select, NULL);
 				debug("*  ramdisk: cmdline image address = "
 						"0x%08lx\n",
 						rd_addr);
@@ -1301,7 +1301,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 			if (select)
 				end = strchr(select, ':');
 			if (end) {
-				rd_len = simple_strtoul(++end, NULL, 16);
+				rd_len = hextoul(++end, NULL);
 				rd_data = rd_addr;
 			} else
 #endif
@@ -1379,7 +1379,7 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
 		/* a value of "no" or a similar string will act like 0,
 		 * turning the "load high" feature off. This is intentional.
 		 */
-		initrd_high = simple_strtoul(s, NULL, 16);
+		initrd_high = hextoul(s, NULL);
 		if (initrd_high == ~0)
 			initrd_copy_to_ram = 0;
 	} else {
diff --git a/common/kallsyms.c b/common/kallsyms.c
index ce42a932bb8..13344e634b9 100644
--- a/common/kallsyms.c
+++ b/common/kallsyms.c
@@ -31,7 +31,7 @@ const char *symbol_lookup(unsigned long addr, unsigned long *caddr)
 	*caddr = 0;
 
 	while (*sym) {
-		sym_addr = simple_strtoul(sym, &esym, 16);
+		sym_addr = hextoul(sym, &esym);
 		sym = esym;
 		if (sym_addr > addr)
 			break;
diff --git a/common/lcd.c b/common/lcd.c
index ab5614ad0e3..16a0a7cea8f 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -747,7 +747,7 @@ static int on_splashimage(const char *name, const char *value, enum env_op op,
 	if (op == env_op_delete)
 		return 0;
 
-	addr = simple_strtoul(value, NULL, 16);
+	addr = hextoul(value, NULL);
 	/* See README.displaying-bmps */
 	aligned = (addr % 4 == 2);
 	if (!aligned) {
diff --git a/common/splash.c b/common/splash.c
index 2b9313e03f1..de720df9f58 100644
--- a/common/splash.c
+++ b/common/splash.c
@@ -65,7 +65,7 @@ static int splash_video_logo_load(void)
 	if (!splashimage)
 		return -ENOENT;
 
-	bmp_load_addr = simple_strtoul(splashimage, 0, 16);
+	bmp_load_addr = hextoul(splashimage, 0);
 	if (!bmp_load_addr) {
 		printf("Error: bad 'splashimage' address\n");
 		return -EFAULT;
@@ -162,7 +162,7 @@ int splash_display(void)
 	if (!s)
 		return -EINVAL;
 
-	addr = simple_strtoul(s, NULL, 16);
+	addr = hextoul(s, NULL);
 	ret = splash_screen_prepare();
 	if (ret)
 		return ret;
diff --git a/common/splash_source.c b/common/splash_source.c
index 3cf926d91a0..d05670f5ee8 100644
--- a/common/splash_source.c
+++ b/common/splash_source.c
@@ -414,7 +414,7 @@ int splash_source_load(struct splash_location *locations, uint size)
 	if (env_splashimage_value == NULL)
 		return -ENOENT;
 
-	bmp_load_addr = simple_strtoul(env_splashimage_value, 0, 16);
+	bmp_load_addr = hextoul(env_splashimage_value, 0);
 	if (bmp_load_addr == 0) {
 		printf("Error: bad splashimage address specified\n");
 		return -EFAULT;
diff --git a/common/update.c b/common/update.c
index f0848954e5d..f5c8684f1b2 100644
--- a/common/update.c
+++ b/common/update.c
@@ -272,7 +272,7 @@ int update_tftp(ulong addr, char *interface, char *devstring)
 	/* get load address of downloaded update file */
 	env_addr = env_get("loadaddr");
 	if (env_addr)
-		addr = simple_strtoul(env_addr, NULL, 16);
+		addr = hextoul(env_addr, NULL);
 	else
 		addr = CONFIG_UPDATE_LOAD_ADDR;
 
diff --git a/disk/part.c b/disk/part.c
index 086da84b7f0..a6a8f7052bd 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -396,7 +396,7 @@ int blk_get_device_by_str(const char *ifname, const char *dev_hwpart_str,
 		hwpart = 0;
 	}
 
-	dev = simple_strtoul(dev_str, &ep, 16);
+	dev = hextoul(dev_str, &ep);
 	if (*ep) {
 		printf("** Bad device specification %s %s **\n",
 		       ifname, dev_str);
@@ -405,7 +405,7 @@ int blk_get_device_by_str(const char *ifname, const char *dev_hwpart_str,
 	}
 
 	if (hwpart_str) {
-		hwpart = simple_strtoul(hwpart_str, &ep, 16);
+		hwpart = hextoul(hwpart_str, &ep);
 		if (*ep) {
 			printf("** Bad HW partition specification %s %s **\n",
 			    ifname, hwpart_str);
@@ -534,7 +534,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 		part = PART_AUTO;
 	} else {
 		/* Something specified -> use exactly that */
-		part = (int)simple_strtoul(part_str, &ep, 16);
+		part = (int)hextoul(part_str, &ep);
 		/*
 		 * Less than whole string converted,
 		 * or request for whole device, but caller requires partition.
diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c
index 894b5708753..a31d4804beb 100644
--- a/drivers/dfu/dfu_mtd.c
+++ b/drivers/dfu/dfu_mtd.c
@@ -268,9 +268,9 @@ int dfu_fill_entity_mtd(struct dfu_entity *dfu, char *devstr, char *s)
 	st = strsep(&s, " ");
 	if (!strcmp(st, "raw")) {
 		dfu->layout = DFU_RAW_ADDR;
-		dfu->data.mtd.start = simple_strtoul(s, &s, 16);
+		dfu->data.mtd.start = hextoul(s, &s);
 		s++;
-		dfu->data.mtd.size = simple_strtoul(s, &s, 16);
+		dfu->data.mtd.size = hextoul(s, &s);
 	} else if ((!strcmp(st, "part")) || (!strcmp(st, "partubi"))) {
 		char mtd_id[32];
 		struct mtd_device *mtd_dev;
diff --git a/drivers/dfu/dfu_nand.c b/drivers/dfu/dfu_nand.c
index b8d24d203be..6ddf80b78a5 100644
--- a/drivers/dfu/dfu_nand.c
+++ b/drivers/dfu/dfu_nand.c
@@ -204,9 +204,9 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *devstr, char *s)
 	st = strsep(&s, " ");
 	if (!strcmp(st, "raw")) {
 		dfu->layout = DFU_RAW_ADDR;
-		dfu->data.nand.start = simple_strtoul(s, &s, 16);
+		dfu->data.nand.start = hextoul(s, &s);
 		s++;
-		dfu->data.nand.size = simple_strtoul(s, &s, 16);
+		dfu->data.nand.size = hextoul(s, &s);
 	} else if ((!strcmp(st, "part")) || (!strcmp(st, "partubi"))) {
 		char mtd_id[32];
 		struct mtd_device *mtd_dev;
diff --git a/drivers/dfu/dfu_ram.c b/drivers/dfu/dfu_ram.c
index ab0ce9e6fa9..cc7e45ba335 100644
--- a/drivers/dfu/dfu_ram.c
+++ b/drivers/dfu/dfu_ram.c
@@ -74,8 +74,8 @@ int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr, char *s)
 	}
 
 	dfu->layout = DFU_RAM_ADDR;
-	dfu->data.ram.start = simple_strtoul(argv[1], NULL, 16);
-	dfu->data.ram.size = simple_strtoul(argv[2], NULL, 16);
+	dfu->data.ram.start = hextoul(argv[1], NULL);
+	dfu->data.ram.size = hextoul(argv[2], NULL);
 
 	dfu->write_medium = dfu_write_medium_ram;
 	dfu->get_medium_size = dfu_get_medium_size_ram;
diff --git a/drivers/dfu/dfu_sf.c b/drivers/dfu/dfu_sf.c
index 8f8c4259772..ef5231980e6 100644
--- a/drivers/dfu/dfu_sf.c
+++ b/drivers/dfu/dfu_sf.c
@@ -171,9 +171,9 @@ int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
 	st = strsep(&s, " ");
 	if (!strcmp(st, "raw")) {
 		dfu->layout = DFU_RAW_ADDR;
-		dfu->data.sf.start = simple_strtoul(s, &s, 16);
+		dfu->data.sf.start = hextoul(s, &s);
 		s++;
-		dfu->data.sf.size = simple_strtoul(s, &s, 16);
+		dfu->data.sf.size = hextoul(s, &s);
 	} else if (CONFIG_IS_ENABLED(DFU_SF_PART) &&
 		   (!strcmp(st, "part") || !strcmp(st, "partubi"))) {
 		char mtd_id[32];
diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c
index 3a5db5b08fc..98eccc34556 100644
--- a/drivers/fastboot/fb_command.c
+++ b/drivers/fastboot/fb_command.c
@@ -208,7 +208,7 @@ static void download(char *cmd_parameter, char *response)
 		return;
 	}
 	fastboot_bytes_received = 0;
-	fastboot_bytes_expected = simple_strtoul(cmd_parameter, &tmp, 16);
+	fastboot_bytes_expected = hextoul(cmd_parameter, &tmp);
 	if (fastboot_bytes_expected == 0) {
 		fastboot_fail("Expected nonzero image size", response);
 		return;
diff --git a/drivers/gpio/pca953x.c b/drivers/gpio/pca953x.c
index 4ab8cee2d18..2fd2996798c 100644
--- a/drivers/gpio/pca953x.c
+++ b/drivers/gpio/pca953x.c
@@ -221,11 +221,11 @@ static int do_pca953x(struct cmd_tbl *cmdtp, int flag, int argc,
 
 	/* arg2 used as chip number or pin number */
 	if (argc > 2)
-		ul_arg2 = simple_strtoul(argv[2], NULL, 16);
+		ul_arg2 = hextoul(argv[2], NULL);
 
 	/* arg3 used as pin or invert value */
 	if (argc > 3)
-		ul_arg3 = simple_strtoul(argv[3], NULL, 16) & 0x1;
+		ul_arg3 = hextoul(argv[3], NULL) & 0x1;
 
 	switch ((long)c->cmd) {
 	case PCA953X_CMD_INFO:
diff --git a/drivers/misc/ds4510.c b/drivers/misc/ds4510.c
index a2a52915654..9340596f2c6 100644
--- a/drivers/misc/ds4510.c
+++ b/drivers/misc/ds4510.c
@@ -271,11 +271,11 @@ int do_ds4510(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 	/* arg2 used as chip addr and pin number */
 	if (argc > 2)
-		ul_arg2 = simple_strtoul(argv[2], NULL, 16);
+		ul_arg2 = hextoul(argv[2], NULL);
 
 	/* arg3 used as output/pullup value */
 	if (argc > 3)
-		ul_arg3 = simple_strtoul(argv[3], NULL, 16);
+		ul_arg3 = hextoul(argv[3], NULL);
 
 	switch ((int)c->cmd) {
 	case DS4510_CMD_DEVICE:
@@ -337,9 +337,9 @@ int do_ds4510(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 	else
 		return cmd_usage(cmdtp);
 
-	addr = simple_strtoul(argv[3], NULL, 16);
-	off += simple_strtoul(argv[4], NULL, 16);
-	cnt = simple_strtoul(argv[5], NULL, 16);
+	addr = hextoul(argv[3], NULL);
+	off += hextoul(argv[4], NULL);
+	cnt = hextoul(argv[5], NULL);
 
 	if ((off + cnt) > end) {
 		printf("ERROR: invalid len\n");
diff --git a/drivers/net/e1000_spi.c b/drivers/net/e1000_spi.c
index 4fcc65d9782..69adf282c73 100644
--- a/drivers/net/e1000_spi.c
+++ b/drivers/net/e1000_spi.c
@@ -399,7 +399,7 @@ static int do_e1000_spi_dump(struct cmd_tbl *cmdtp, struct e1000_hw *hw,
 	}
 
 	/* Parse the arguments */
-	dest = (void *)simple_strtoul(argv[0], NULL, 16);
+	dest = (void *)hextoul(argv[0], NULL);
 	offset = simple_strtoul(argv[1], NULL, 0);
 	length = simple_strtoul(argv[2], NULL, 0);
 
@@ -444,7 +444,7 @@ static int do_e1000_spi_program(struct cmd_tbl *cmdtp, struct e1000_hw *hw,
 	}
 
 	/* Parse the arguments */
-	source = (const void *)simple_strtoul(argv[0], NULL, 16);
+	source = (const void *)hextoul(argv[0], NULL);
 	offset = simple_strtoul(argv[1], NULL, 0);
 	length = simple_strtoul(argv[2], NULL, 0);
 
diff --git a/drivers/net/fm/fdt.c b/drivers/net/fm/fdt.c
index 242d27a34ea..3855d7d58fa 100644
--- a/drivers/net/fm/fdt.c
+++ b/drivers/net/fm/fdt.c
@@ -42,7 +42,7 @@ void fdt_fixup_fman_firmware(void *blob)
 	if (!p)
 		return;
 
-	fmanfw = (struct qe_firmware *)simple_strtoul(p, NULL, 16);
+	fmanfw = (struct qe_firmware *)hextoul(p, NULL);
 	if (!fmanfw)
 		return;
 
diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c
index 914ec001ec6..3712221eba8 100644
--- a/drivers/net/fsl-mc/mc.c
+++ b/drivers/net/fsl-mc/mc.c
@@ -956,8 +956,7 @@ unsigned long mc_get_dram_block_size(void)
 	char *dram_block_size_env_var = env_get(MC_MEM_SIZE_ENV_VAR);
 
 	if (dram_block_size_env_var) {
-		dram_block_size = simple_strtoul(dram_block_size_env_var, NULL,
-						 16);
+		dram_block_size = hextoul(dram_block_size_env_var, NULL);
 
 		if (dram_block_size < CONFIG_SYS_LS_MC_DRAM_BLOCK_MIN_SIZE) {
 			printf("fsl-mc: WARNING: Invalid value for \'"
diff --git a/drivers/net/pfe_eth/pfe_cmd.c b/drivers/net/pfe_eth/pfe_cmd.c
index 364750f65c7..2fe0db0fe71 100644
--- a/drivers/net/pfe_eth/pfe_cmd.c
+++ b/drivers/net/pfe_eth/pfe_cmd.c
@@ -41,7 +41,7 @@ static void pfe_command_pe(int argc, char *const argv[])
 			}
 
 			id = simple_strtoul(argv[4], NULL, 0);
-			addr = simple_strtoul(argv[5], NULL, 16);
+			addr = hextoul(argv[5], NULL);
 			size = 4;
 
 			for (i = 0; i < num; i++, addr += 4) {
@@ -75,7 +75,7 @@ static void pfe_command_pe(int argc, char *const argv[])
 			}
 
 			id = simple_strtoul(argv[4], NULL, 0);
-			addr = simple_strtoul(argv[5], NULL, 16);
+			addr = hextoul(argv[5], NULL);
 			size = 4;
 
 			for (i = 0; i < num; i++, addr += 4) {
@@ -99,9 +99,9 @@ static void pfe_command_pe(int argc, char *const argv[])
 			}
 
 			id = simple_strtoul(argv[4], NULL, 0);
-			val = simple_strtoul(argv[5], NULL, 16);
+			val = hextoul(argv[5], NULL);
 			val = cpu_to_be32(val);
-			addr = simple_strtoul(argv[6], NULL, 16);
+			addr = hextoul(argv[6], NULL);
 			size = 4;
 			pe_dmem_write(id, val, addr, size);
 		} else {
@@ -123,7 +123,7 @@ static void pfe_command_pe(int argc, char *const argv[])
 				return;
 			}
 
-			offset = simple_strtoul(argv[4], NULL, 16);
+			offset = hextoul(argv[4], NULL);
 
 			for (i = 0; i < num; i++, offset += 4) {
 				pe_lmem_read(&val, 4, offset);
@@ -141,9 +141,9 @@ static void pfe_command_pe(int argc, char *const argv[])
 				return;
 			}
 
-			val = simple_strtoul(argv[4], NULL, 16);
+			val = hextoul(argv[4], NULL);
 			val = cpu_to_be32(val);
-			offset = simple_strtoul(argv[5], NULL, 16);
+			offset = hextoul(argv[5], NULL);
 			pe_lmem_write(&val, 4, offset);
 		} else {
 			printf("Usage: pfe pe lmem [read | write] <parameters>\n");
diff --git a/drivers/net/phy/b53.c b/drivers/net/phy/b53.c
index 21da53c7e5b..695fac47b6c 100644
--- a/drivers/net/phy/b53.c
+++ b/drivers/net/phy/b53.c
@@ -646,8 +646,8 @@ int do_b53_reg_read(const char *name, int argc, char *const argv[])
 		return ret;
 	}
 
-	page = simple_strtoul(argv[1], NULL, 16);
-	offset = simple_strtoul(argv[2], NULL, 16);
+	page = hextoul(argv[1], NULL);
+	offset = hextoul(argv[2], NULL);
 	width = simple_strtoul(argv[3], NULL, 10);
 
 	switch (width) {
@@ -698,13 +698,13 @@ int do_b53_reg_write(const char *name, int argc, char *const argv[])
 		return ret;
 	}
 
-	page = simple_strtoul(argv[1], NULL, 16);
-	offset = simple_strtoul(argv[2], NULL, 16);
+	page = hextoul(argv[1], NULL);
+	offset = hextoul(argv[2], NULL);
 	width = simple_strtoul(argv[3], NULL, 10);
 	if (width == 48 || width == 64)
 		value64 = simple_strtoull(argv[4], NULL, 16);
 	else
-		value = simple_strtoul(argv[4], NULL, 16);
+		value = hextoul(argv[4], NULL);
 
 	switch (width) {
 	case 8:
diff --git a/drivers/net/phy/mv88e6352.c b/drivers/net/phy/mv88e6352.c
index 62a7f192149..07a8e50b480 100644
--- a/drivers/net/phy/mv88e6352.c
+++ b/drivers/net/phy/mv88e6352.c
@@ -256,7 +256,7 @@ int do_mvsw_reg_write(const char *name, int argc, char *const argv[])
 	phyaddr = simple_strtoul(argv[1], NULL, 10);
 	port = simple_strtoul(argv[2], NULL, 10);
 	reg = simple_strtoul(argv[3], NULL, 10);
-	value = simple_strtoul(argv[4], NULL, 16);
+	value = hextoul(argv[4], NULL);
 
 	ret = sw_reg_write(name, phyaddr, port, reg, value);
 
diff --git a/drivers/power/power_core.c b/drivers/power/power_core.c
index eeed8e24a90..4f7ba099cd9 100644
--- a/drivers/power/power_core.c
+++ b/drivers/power/power_core.c
@@ -159,7 +159,7 @@ static int do_pmic(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (argc < 4)
 			return CMD_RET_USAGE;
 
-		reg = simple_strtoul(argv[3], NULL, 16);
+		reg = hextoul(argv[3], NULL);
 		ret = pmic_reg_read(p, reg, &val);
 
 		if (ret)
@@ -174,8 +174,8 @@ static int do_pmic(struct cmd_tbl *cmdtp, int flag, int argc,
 		if (argc < 5)
 			return CMD_RET_USAGE;
 
-		reg = simple_strtoul(argv[3], NULL, 16);
-		val = simple_strtoul(argv[4], NULL, 16);
+		reg = hextoul(argv[3], NULL);
+		val = hextoul(argv[4], NULL);
 		pmic_reg_write(p, reg, val);
 
 		return CMD_RET_SUCCESS;
diff --git a/drivers/qe/qe.c b/drivers/qe/qe.c
index 97883ffc879..bd0a10c9d21 100644
--- a/drivers/qe/qe.c
+++ b/drivers/qe/qe.c
@@ -794,7 +794,7 @@ static int qe_cmd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		return cmd_usage(cmdtp);
 
 	if (strcmp(argv[1], "fw") == 0) {
-		addr = simple_strtoul(argv[2], NULL, 16);
+		addr = hextoul(argv[2], NULL);
 
 		if (!addr) {
 			printf("Invalid address\n");
@@ -807,7 +807,7 @@ static int qe_cmd(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 		 */
 
 		if (argc > 3) {
-			ulong length = simple_strtoul(argv[3], NULL, 16);
+			ulong length = hextoul(argv[3], NULL);
 			struct qe_firmware *firmware = (void *)addr;
 
 			if (length != be32_to_cpu(firmware->header.length)) {
diff --git a/drivers/rtc/m41t60.c b/drivers/rtc/m41t60.c
index 692042b9351..b8ad33e0125 100644
--- a/drivers/rtc/m41t60.c
+++ b/drivers/rtc/m41t60.c
@@ -214,7 +214,7 @@ void rtc_reset(void)
 	 * the M41T60 documentation for further details.
 	 */
 	if (s) {
-		unsigned long const l = simple_strtoul(s, 0, 16);
+		unsigned long const l = hextoul(s, 0);
 
 		if (l <= 0x3F) {
 			if ((data[RTC_CTRL] & 0x3F) != l) {
diff --git a/drivers/video/ati_radeon_fb.c b/drivers/video/ati_radeon_fb.c
index c4da2e3ae7f..383666781cc 100644
--- a/drivers/video/ati_radeon_fb.c
+++ b/drivers/video/ati_radeon_fb.c
@@ -642,7 +642,7 @@ void *video_hw_init(void)
 	if (penv) {
 		/* deceide if it is a string */
 		if (penv[0] <= '9') {
-			videomode = (int) simple_strtoul (penv, NULL, 16);
+			videomode = (int)hextoul(penv, NULL);
 			tmp = 1;
 		}
 	} else {
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index 1f491a48d6a..5e1ee061e8e 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -1857,7 +1857,7 @@ static void *video_logo(void)
 		ret = splash_screen_prepare();
 		if (ret < 0)
 			return video_fb_address;
-		addr = simple_strtoul(s, NULL, 16);
+		addr = hextoul(s, NULL);
 
 		if (video_display_bitmap(addr,
 					video_logo_xpos,
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c
index 9b42ca8d03f..e6dd2b83c6f 100644
--- a/drivers/video/mx3fb.c
+++ b/drivers/video/mx3fb.c
@@ -820,7 +820,7 @@ void *video_hw_init(void)
 	if (penv) {
 		/* decide if it is a string */
 		if (penv[0] <= '9') {
-			videomode = (int) simple_strtoul(penv, NULL, 16);
+			videomode = (int)hextoul(penv, NULL);
 			tmp = 1;
 		}
 	} else {
diff --git a/fs/fs.c b/fs/fs.c
index b7936fd4cfb..7c682582c80 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -717,13 +717,13 @@ int do_load(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[],
 	}
 
 	if (argc >= 4) {
-		addr = simple_strtoul(argv[3], &ep, 16);
+		addr = hextoul(argv[3], &ep);
 		if (ep == argv[3] || *ep != '\0')
 			return CMD_RET_USAGE;
 	} else {
 		addr_str = env_get("loadaddr");
 		if (addr_str != NULL)
-			addr = simple_strtoul(addr_str, NULL, 16);
+			addr = hextoul(addr_str, NULL);
 		else
 			addr = CONFIG_SYS_LOAD_ADDR;
 	}
@@ -737,11 +737,11 @@ int do_load(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[],
 		}
 	}
 	if (argc >= 6)
-		bytes = simple_strtoul(argv[5], NULL, 16);
+		bytes = hextoul(argv[5], NULL);
 	else
 		bytes = 0;
 	if (argc >= 7)
-		pos = simple_strtoul(argv[6], NULL, 16);
+		pos = hextoul(argv[6], NULL);
 	else
 		pos = 0;
 
@@ -815,11 +815,11 @@ int do_save(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[],
 	if (fs_set_blk_dev(argv[1], argv[2], fstype))
 		return 1;
 
-	addr = simple_strtoul(argv[3], NULL, 16);
+	addr = hextoul(argv[3], NULL);
 	filename = argv[4];
-	bytes = simple_strtoul(argv[5], NULL, 16);
+	bytes = hextoul(argv[5], NULL);
 	if (argc >= 7)
-		pos = simple_strtoul(argv[6], NULL, 16);
+		pos = hextoul(argv[6], NULL);
 	else
 		pos = 0;
 
diff --git a/include/vsprintf.h b/include/vsprintf.h
index 2290083eba4..eeea8ea622c 100644
--- a/include/vsprintf.h
+++ b/include/vsprintf.h
@@ -10,8 +10,33 @@
 #include <stdarg.h>
 #include <linux/types.h>
 
+/**
+ * simple_strtoul - convert a string to an unsigned long
+ *
+ * @param cp	The string to be converted
+ * @param endp	Updated to point to the first character not converted
+ * @param base	The number base to use
+ * @return value decoded from string (0 if invalid)
+ *
+ * Converts a string to an unsigned long. If there are invalid characters at
+ * the end these are ignored. In the worst case, if all characters are invalid,
+ * 0 is returned
+ */
 ulong simple_strtoul(const char *cp, char **endp, unsigned int base);
 
+/**
+ * hex_strtoul - convert a string in hex to an unsigned long
+ *
+ * @param cp	The string to be converted
+ * @param endp	Updated to point to the first character not converted
+ * @return value decoded from string (0 if invalid)
+ *
+ * Converts a hex string to an unsigned long. If there are invalid characters at
+ * the end these are ignored. In the worst case, if all characters are invalid,
+ * 0 is returned
+ */
+unsigned long hextoul(const char *cp, char **endp);
+
 /**
  * strict_strtoul - convert a string to an unsigned long strictly
  * @param cp	The string to be converted
@@ -30,9 +55,6 @@ ulong simple_strtoul(const char *cp, char **endp, unsigned int base);
  *
  * echo will append a newline to the tail.
  *
- * simple_strtoul just ignores the successive invalid characters and
- * return the converted value of prefix part of the string.
- *
  * Copied this function from Linux 2.6.38 commit ID:
  * 521cb40b0c44418a4fd36dc633f575813d59a43d
  *
diff --git a/lib/net_utils.c b/lib/net_utils.c
index 0a8a557319c..f596c8f280c 100644
--- a/lib/net_utils.c
+++ b/lib/net_utils.c
@@ -52,7 +52,7 @@ void string_to_enetaddr(const char *addr, uint8_t *enetaddr)
 		return;
 
 	for (i = 0; i < 6; ++i) {
-		enetaddr[i] = addr ? simple_strtoul(addr, &end, 16) : 0;
+		enetaddr[i] = addr ? hextoul(addr, &end) : 0;
 		if (addr)
 			addr = (*end) ? end + 1 : end;
 	}
diff --git a/lib/strto.c b/lib/strto.c
index c00bb5895df..d9e64cbcac8 100644
--- a/lib/strto.c
+++ b/lib/strto.c
@@ -30,11 +30,10 @@ static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
 	return s;
 }
 
-unsigned long simple_strtoul(const char *cp, char **endp,
-				unsigned int base)
+ulong simple_strtoul(const char *cp, char **endp, uint base)
 {
-	unsigned long result = 0;
-	unsigned long value;
+	ulong result = 0;
+	ulong value;
 
 	cp = _parse_integer_fixup_radix(cp, &base);
 
@@ -50,6 +49,11 @@ unsigned long simple_strtoul(const char *cp, char **endp,
 	return result;
 }
 
+ulong hextoul(const char *cp, char **endp)
+{
+	return simple_strtoul(cp, endp, 16);
+}
+
 int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
 {
 	char *tail;
diff --git a/lib/uuid.c b/lib/uuid.c
index 5bc68674d02..67267c66a3c 100644
--- a/lib/uuid.c
+++ b/lib/uuid.c
@@ -164,26 +164,26 @@ int uuid_str_to_bin(const char *uuid_str, unsigned char *uuid_bin,
 	}
 
 	if (str_format == UUID_STR_FORMAT_STD) {
-		tmp32 = cpu_to_be32(simple_strtoul(uuid_str, NULL, 16));
+		tmp32 = cpu_to_be32(hextoul(uuid_str, NULL));
 		memcpy(uuid_bin, &tmp32, 4);
 
-		tmp16 = cpu_to_be16(simple_strtoul(uuid_str + 9, NULL, 16));
+		tmp16 = cpu_to_be16(hextoul(uuid_str + 9, NULL));
 		memcpy(uuid_bin + 4, &tmp16, 2);
 
-		tmp16 = cpu_to_be16(simple_strtoul(uuid_str + 14, NULL, 16));
+		tmp16 = cpu_to_be16(hextoul(uuid_str + 14, NULL));
 		memcpy(uuid_bin + 6, &tmp16, 2);
 	} else {
-		tmp32 = cpu_to_le32(simple_strtoul(uuid_str, NULL, 16));
+		tmp32 = cpu_to_le32(hextoul(uuid_str, NULL));
 		memcpy(uuid_bin, &tmp32, 4);
 
-		tmp16 = cpu_to_le16(simple_strtoul(uuid_str + 9, NULL, 16));
+		tmp16 = cpu_to_le16(hextoul(uuid_str + 9, NULL));
 		memcpy(uuid_bin + 4, &tmp16, 2);
 
-		tmp16 = cpu_to_le16(simple_strtoul(uuid_str + 14, NULL, 16));
+		tmp16 = cpu_to_le16(hextoul(uuid_str + 14, NULL));
 		memcpy(uuid_bin + 6, &tmp16, 2);
 	}
 
-	tmp16 = cpu_to_be16(simple_strtoul(uuid_str + 19, NULL, 16));
+	tmp16 = cpu_to_be16(hextoul(uuid_str + 19, NULL));
 	memcpy(uuid_bin + 8, &tmp16, 2);
 
 	tmp64 = cpu_to_be64(simple_strtoull(uuid_str + 24, NULL, 16));
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index c14176dd393..d7ee35b4773 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -858,7 +858,7 @@ bool str2long(const char *p, ulong *num)
 {
 	char *endptr;
 
-	*num = simple_strtoul(p, &endptr, 16);
+	*num = hextoul(p, &endptr);
 	return *p != '\0' && *endptr == '\0';
 }
 
diff --git a/test/str_ut.c b/test/str_ut.c
index 359d7d4ea1f..4c3b566d2c1 100644
--- a/test/str_ut.c
+++ b/test/str_ut.c
@@ -105,6 +105,18 @@ static int str_simple_strtoul(struct unit_test_state *uts)
 }
 STR_TEST(str_simple_strtoul, 0);
 
+static int str_hextoul(struct unit_test_state *uts)
+{
+	char *endp;
+
+	/* Just a simple test, since we know this uses simple_strtoul() */
+	ut_asserteq(0x1099ab, hextoul(str2, &endp));
+	ut_asserteq(6, endp - str2);
+
+	return 0;
+}
+STR_TEST(str_hextoul, 0);
+
 int do_ut_str(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
 	struct unit_test *tests = UNIT_TEST_SUITE_START(str_test);
-- 
2.32.0.432.gabb21c7263-goog


  parent reply	other threads:[~2021-07-25  3:02 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-24 15:03 [PATCH v2 00/14] lib: Add support for a decimal 0t prefix for numbers Simon Glass
2021-07-24 15:03 ` [PATCH v2 01/14] hash: Ensure verification hex pairs are terminated Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` Simon Glass [this message]
2021-08-02 17:51   ` [PATCH v2 02/14] global: Convert simple_strtoul() with hex to hextoul() Tom Rini
2021-07-24 15:03 ` [PATCH v2 03/14] global: Convert simple_strtoul() with decimal to dectoul() Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 04/14] lib: Comment the base parameter with simple_strtoul/l() Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 05/14] lib: Drop unnecessary check for hex digit Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 06/14] lib: Add tests for simple_strtoull() Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 07/14] lib: Add octal tests for simple_strtoul/l() Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 08/14] lib: Move common digit-parsing code into a function Simon Glass
2021-08-02 17:51   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 09/14] doc: Convert command-line info to rST Simon Glass
2021-08-02 17:52   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 10/14] doc: Add a note about number representation Simon Glass
2021-08-02 17:52   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 11/14] lib: Allow using 0x when a decimal value is requested Simon Glass
2021-08-02 17:52   ` Tom Rini
2021-07-24 15:03 ` [PATCH v2 12/14] lib: Support a decimal prefix 0n Simon Glass
2021-07-24 15:03 ` [PATCH v2 13/14] lib: Drop octal support Simon Glass
2021-07-24 15:03 ` [PATCH v2 14/14] RFC: Change simple_strtoul() et al to default to hex Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210724150341.243074-3-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=erosca@de.adit-jv.com \
    --cc=jakllsch@kollasch.net \
    --cc=marek.behun@nic.cz \
    --cc=marex@denx.de \
    --cc=roland.gaudig@weidmueller.com \
    --cc=seanga2@gmail.com \
    --cc=stefan.herbrechtsmeier@weidmueller.com \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.