From a1af68434bde6d65fe30a3befda89a1fb56e3e01 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Sun, 1 Feb 2009 19:28:18 +0000 Subject: [PATCH] qi-fix-block-init-cache-logic.patch Changes in the last couple of weeks aimed at cleaning this code broke the block device init cache logic. This patch restores the logic and reduces the card init failures when there is no SD Card present to 1 regardless of the number of partitions probed on the card. Together with the reduction in Glamo card wait on init this reduces the delay before trying NAND to 1/9th of before the patches. Signed-off-by: Andy Green --- qiboot/src/phase2.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/qiboot/src/phase2.c b/qiboot/src/phase2.c index dd15055..de20cd3 100644 --- a/qiboot/src/phase2.c +++ b/qiboot/src/phase2.c @@ -103,28 +103,32 @@ static int do_block_init(void) { static void * last_block_init = NULL; static int last_block_init_result = 0; + int fresh = 0; /* if this device needs initializing, try to init it */ if (!this_kernel->block_init) - return 1; + return 1; /* happy */ /* * cache result to limit attempts for same * block device to one time */ - if (this_kernel->block_init != last_block_init) + if (this_kernel->block_init != last_block_init) { + last_block_init = this_kernel->block_init; last_block_init_result = (this_kernel->block_init)(); + fresh = 1; + } if (last_block_init_result) { puts("block device init failed\n"); - if (this_kernel->block_init != last_block_init) + if (fresh) indicate(UI_IND_MOUNT_FAIL); - last_block_init = NULL; - return 0; + + return 0; /* failed */ } last_block_init = this_kernel->block_init; - return 1; + return 1; /* happy */ } static int do_partitions(void *kernel_dram)