On 08/01/2012 02:32 PM, Allen Martin wrote: > Add function required by some thumb switch statements
> diff --git a/arch/arm/lib/_thumb1_case_uqi.S b/arch/arm/lib/_thumb1_case_uqi.S > + .force_thumb I believe that line should be removed. The issue here is that when gcc emits Thumb code to call this function, it actually emits: > 108af8: f000 f94a bl 108d90 > <____gnu_thumb1_case_uqi_from_thumb> which is implemented as: > 00108d90 <____gnu_thumb1_case_uqi_from_thumb>: > 108d90: 4778 bx pc > 108d92: 46c0 nop ; (mov r8, r8) > 108d94: eafffde1 b 108520 <__gnu_thumb1_case_uqi> i.e. it switches to ARM mode then jumps to that function. Hence, __gnu_thumb1_case_uqi must be compiled as ARM, not as Thumb. (renaming the function to ____gnu_thumb1_case_uqi_from_thumb in the hope it'll be called directly instead of going through a stub doesn't seem to work) If I make that change, then this patch series starts working on Whistler, which for reference, uses UARTA, so triggers funcmux.c's funcmux_select() to enter case PERIPH_ID_UART1, which then uses ____gnu_thumb1_case_uqi_from_thumb to perform the nested switch (config). _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot