diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2014-11-18 12:46:53 +0100 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2014-11-18 12:46:53 +0100 |
commit | 272736202997407d0d66375fcf95227c005f14ae (patch) | |
tree | bb27f44257e15183a0f6c51308dd988cf5e363fe /board | |
parent | 5ce377d42e14fc2e7d9bbb1156697d9dbc3d664e (diff) |
toradex: improve configblock error handling
Improve error handling in common configblock code. Also fixes a
warning when loading configblock from NAND (unused variable offset).
Diffstat (limited to 'board')
-rw-r--r-- | board/toradex/common/configblock.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/board/toradex/common/configblock.c b/board/toradex/common/configblock.c index 825cb0c10f2..0d333d5a67b 100644 --- a/board/toradex/common/configblock.c +++ b/board/toradex/common/configblock.c @@ -94,14 +94,15 @@ void get_board_serial(struct tag_serialnr *serialnr) #ifdef CONFIG_TRDX_CFG_BLOCK int read_trdx_cfg_block(void) { + int err; size_t size = CONFIG_TRDX_CFG_BLOCK_SIZE; #ifdef CONFIG_TRDX_CFG_BLOCK_IS_IN_MMC struct mmc *mmc; int dev = CONFIG_TRDX_CFG_BLOCK_DEV; + int offset = CONFIG_TRDX_CFG_BLOCK_OFFSET; uint part = CONFIG_TRDX_CFG_BLOCK_PART; uint blk_start; #endif /* CONFIG_TRDX_CFG_BLOCK_IS_IN_MMC */ - int offset = CONFIG_TRDX_CFG_BLOCK_OFFSET; unsigned char *cfg_block_ethaddr; unsigned char toradex_oui[3] = { 0x00, 0x14, 0x2d }; unsigned char ethaddr[6]; @@ -110,7 +111,7 @@ int read_trdx_cfg_block(void) config_block = malloc(size); if (!config_block) { printf("Not enough malloc space available!\n"); - return -1; + return -ENOMEM; } /* Clear it */ @@ -121,12 +122,14 @@ int read_trdx_cfg_block(void) mmc = find_mmc_device(dev); if (!mmc) { puts("No MMC card found\n"); - return 1; + err = -ENODEV; + goto err; } if (part != mmc->part_num) { if (mmc_switch_part(dev, part)) { puts("MMC partition switch failed\n"); - return 1; + err = -ENODEV; + goto err; } } if (offset < 0) @@ -136,7 +139,8 @@ int read_trdx_cfg_block(void) /* Just reading one 512 byte block */ if (mmc->block_dev.block_read(dev, blk_start, 1, (unsigned char *)config_block) != 1) { - return 1; + err = -EIO; + goto err; } /* Switch back to regular eMMC user partition */ @@ -145,15 +149,17 @@ int read_trdx_cfg_block(void) #ifdef CONFIG_TRDX_CFG_BLOCK_IS_IN_NAND /* Read production parameter config block from first NAND block */ if (nand_read_skip_bad(&nand_info[0], CONFIG_TRDX_CFG_BLOCK_OFFSET, - &size, NULL, nand_info[0].size, config_block)) - return 1; + &size, NULL, nand_info[0].size, config_block)) { + err = -EIO; + goto err; + } #endif /* Check validity */ cfg_block_ethaddr = config_block + 8; if (memcmp(cfg_block_ethaddr, toradex_oui, 3)) { - memset((void *)config_block, 0, size); - return 2; + err = -EINVAL; + goto err; } /* @@ -175,5 +181,9 @@ int read_trdx_cfg_block(void) #endif return 0; +err: + free(config_block); + config_block = NULL; + return err; } #endif /* CONFIG_TRDX_CFG_BLOCK */ |