linux-mips
[Top] [All Lists]

what is the purpose of the following LE->BE patch to arch/mips/include/a

To: linux-mips@linux-mips.org
Subject: what is the purpose of the following LE->BE patch to arch/mips/include/asm/io.h?
From: "Robert P. J. Day" <rpjday@crashcourse.ca>
Date: Fri, 20 Feb 2015 04:53:42 -0500 (EST)
List-archive: <http://www.linux-mips.org/archives/linux-mips/>
List-help: <mailto:ecartis@linux-mips.org?Subject=help>
List-id: linux-mips <linux-mips.eddie.linux-mips.org>
List-owner: <mailto:ralf@linux-mips.org>
List-post: <mailto:linux-mips@linux-mips.org>
List-software: Ecartis version 1.0.0
List-subscribe: <mailto:ecartis@linux-mips.org?subject=subscribe%20linux-mips>
List-unsubscribe: <mailto:ecartis@linux-mips.org?subject=unsubscribe%20linux-mips>
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
User-agent: Alpine 2.11 (LFD 23 2013-08-11)
  was recently handed a MIPS-based dev board (can't name the vendor,
NDA) that *typically* runs in LE mode but, because of a proprietary
binary that must be run on the board and was compiled as BE, has to be
run in BE mode.

  the vendor supplied a yoctoproject layer that seems to work fine
but, in changing the DEFAULTTUNE to big-endian, the following patch
had to be applied to the 3.14 kernel tree to the file
arch/mips/include/asm/io.h in order to get output from the console
port as the system was booting:

326c326,333
<               *__mem = __val;                                         \
---
>       {                                                                       
>         \
>               if (sizeof(type) == sizeof(u32))                \
>               {                                                               
>         \
>                       *__mem = __cpu_to_le32(__val);  \
>               }                                                               
>         \
>               else                                                            
> \
>                       *__mem = __val;                                         
> \
>       }                                                                       
>                 \
356a364
>       {                                                                       
>         \
357a366,368
>               if (sizeof(type) == sizeof(u32))        \
>                       __val = __cpu_to_le32(__val);   \
>       }                                                                       
>                 \

  without that patch, the initial conclusion was that the board was
just hanging at boot, but i was told, no, it was booting, there was
just no output at the console port. applied the patch and, voila.

  can someone explain *precisely* what the above is doing? i am by no
means a MIPS expert, but clearly the above is doing some sort of
explicit BE/LE conversion. can anyone supply more detail? thanks.

rday

-- 

========================================================================
Robert P. J. Day                                 Ottawa, Ontario, CANADA
                        http://crashcourse.ca

Twitter:                                       http://twitter.com/rpjday
LinkedIn:                               http://ca.linkedin.com/in/rpjday
========================================================================

<Prev in Thread] Current Thread [Next in Thread>