Hi Paul On Sep 6, 2013, at 3:51 PM, Paul Burton wrote:
> > On 06/09/13 13:48, Pantelis Antoniou wrote: >> Hi Paul >> >> On Sep 4, 2013, at 6:12 PM, Paul Burton wrote: >> >>> If we don't have CONFIG_SPL_LIBCOMMON_SUPPORT defined then stdio >>> & *printf functions are unavailable & calling them will cause a link >>> failure. >>> >>> Signed-off-by: Paul Burton <paul.bur...@imgtec.com> >>> --- >>> drivers/mmc/mmc.c | 36 ++++++++++++++++++++++++++++++++++++ >>> 1 file changed, 36 insertions(+) >>> >>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c >>> index 5502675..30a985b 100644 >>> --- a/drivers/mmc/mmc.c >>> +++ b/drivers/mmc/mmc.c >>> @@ -135,8 +135,10 @@ static int mmc_send_status(struct mmc *mmc, int >>> timeout) >>> MMC_STATE_PRG) >>> break; >>> else if (cmd.response[0] & MMC_STATUS_MASK) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("Status Error: 0x%08X\n", >>> cmd.response[0]); >>> +#endif >>> return COMM_ERR; >>> } >>> } else if (--retries < 0) >>> @@ -151,7 +153,9 @@ static int mmc_send_status(struct mmc *mmc, int timeout) >>> printf("CURR STATE:%d\n", status); >>> #endif >>> if (timeout <= 0) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("Timeout waiting card ready\n"); >>> +#endif >>> return TIMEOUT; >>> } >>> >>> @@ -181,7 +185,9 @@ struct mmc *find_mmc_device(int dev_num) >>> return m; >>> } >>> >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("MMC Device %d not found\n", dev_num); >>> +#endif >>> >>> return NULL; >>> } >>> @@ -233,7 +239,9 @@ static ulong mmc_erase_t(struct mmc *mmc, ulong start, >>> lbaint_t blkcnt) >>> return 0; >>> >>> err_out: >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> puts("mmc erase failed\n"); >>> +#endif >>> return err; >>> } >>> >>> @@ -248,6 +256,7 @@ mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt) >>> if (!mmc) >>> return -1; >>> >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size)) >>> printf("\n\nCaution! Your devices Erase group is 0x%x\n" >>> "The erase range would be change to " >>> @@ -255,6 +264,7 @@ mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt) >>> mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1), >>> ((start + blkcnt + mmc->erase_grp_size) >>> & ~(mmc->erase_grp_size - 1)) - 1); >>> +#endif >>> >>> while (blk < blkcnt) { >>> blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ? >>> @@ -281,8 +291,10 @@ mmc_write_blocks(struct mmc *mmc, lbaint_t start, >>> lbaint_t blkcnt, const void*sr >>> int timeout = 1000; >>> >>> if ((start + blkcnt) > mmc->block_dev.lba) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n", >>> start + blkcnt, mmc->block_dev.lba); >>> +#endif >>> return 0; >>> } >>> >>> @@ -306,7 +318,9 @@ mmc_write_blocks(struct mmc *mmc, lbaint_t start, >>> lbaint_t blkcnt, const void*sr >>> data.flags = MMC_DATA_WRITE; >>> >>> if (mmc_send_cmd(mmc, &cmd, &data)) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("mmc write failed\n"); >>> +#endif >>> return 0; >>> } >>> >>> @@ -318,7 +332,9 @@ mmc_write_blocks(struct mmc *mmc, lbaint_t start, >>> lbaint_t blkcnt, const void*sr >>> cmd.cmdarg = 0; >>> cmd.resp_type = MMC_RSP_R1b; >>> if (mmc_send_cmd(mmc, &cmd, NULL)) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("mmc fail to send stop cmd\n"); >>> +#endif >>> return 0; >>> } >>> } >>> @@ -385,7 +401,9 @@ static int mmc_read_blocks(struct mmc *mmc, void *dst, >>> lbaint_t start, >>> cmd.cmdarg = 0; >>> cmd.resp_type = MMC_RSP_R1b; >>> if (mmc_send_cmd(mmc, &cmd, NULL)) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("mmc fail to send stop cmd\n"); >>> +#endif >>> return 0; >>> } >>> } >>> @@ -405,8 +423,10 @@ static ulong mmc_bread(int dev_num, lbaint_t start, >>> lbaint_t blkcnt, void *dst) >>> return 0; >>> >>> if ((start + blkcnt) > mmc->block_dev.lba) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n", >>> start + blkcnt, mmc->block_dev.lba); >>> +#endif >>> return 0; >>> } >> The idea is sound, but I don't like peppering the source with #ifdefs here. >> >> Why not create a varargs orintf macro and use it instead >> >> i.e. >> >> >> #if !defined(CONFIG_SPL_BUILD_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >> #define mmc_printf(...) ... >> #else >> #define mmc_printf(...) /* nothing */ >> #endif > That would work too, I'm fine with changing to that if people prefer it. > > Speaking of which this isn't really mmc specific, more like SPL specific; perhaps what needs to be done is have by default printf defined to empty on SPL and have an foo_printf that always outputs. Tom, what do you think? >>> @@ -1268,6 +1288,7 @@ static int mmc_startup(struct mmc *mmc) >>> mmc->block_dev.blksz = mmc->read_bl_len; >>> mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz); >>> mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x", >>> mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), >>> (mmc->cid[3] >> 16) & 0xffff); >>> @@ -1277,6 +1298,11 @@ static int mmc_startup(struct mmc *mmc) >>> (mmc->cid[2] >> 24) & 0xff); >>> sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf, >>> (mmc->cid[2] >> 16) & 0xf); >>> +#else >>> + mmc->block_dev.vendor[0] = 0; >>> + mmc->block_dev.product[0] = 0; >>> + mmc->block_dev.revision[0] = 0; >>> +#endif >> ^^^ >> What goes on here? > Thanks for pointing that out, perhaps I should comment on it in the source. > Basically it needs to avoid sprintf, and since there's no possibility that > the information will ever be displayed in this case (and it has no other uses > than display) I figured it would be fine to just have empty strings. > Drop this please then, and put it in another patch if need be. I still don't like it. >>> #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT) >>> init_part(&mmc->block_dev); >>> #endif >>> @@ -1343,7 +1369,9 @@ int mmc_start_init(struct mmc *mmc) >>> >>> if (mmc_getcd(mmc) == 0) { >>> mmc->has_init = 0; >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("MMC: no card present\n"); >>> +#endif >>> return NO_CARD_ERR; >>> } >>> >>> @@ -1378,7 +1406,9 @@ int mmc_start_init(struct mmc *mmc) >>> err = mmc_send_op_cond(mmc); >>> >>> if (err && err != IN_PROGRESS) { >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> printf("Card did not respond to voltage select!\n"); >>> +#endif >>> return UNUSABLE_ERR; >>> } >>> } >>> @@ -1434,6 +1464,8 @@ static int __def_mmc_init(bd_t *bis) >>> int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init"))); >>> int board_mmc_init(bd_t *bis) __attribute__((weak, >>> alias("__def_mmc_init"))); >>> >>> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) >>> + >>> void print_mmc_devices(char separator) >>> { >>> struct mmc *m; >>> @@ -1451,6 +1483,10 @@ void print_mmc_devices(char separator) >>> printf("\n"); >>> } >>> >>> +#else >>> +void print_mmc_devices(char separator) { } >>> +#endif >>> + >>> int get_mmc_num(void) >>> { >>> return cur_dev_num; >>> -- >>> 1.8.3.4 >>> >>> >> CCing Tom Rini on this. >> >> Regards >> >> -- Pantelis >> > > Thanks, > Paul > Regards -- Pantelis _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot