[U-Boot] how to understand "uboot is 32bit program even it is in the 64bit mips"

I have a 64bit cnMips borad.In the mail list archives,it says "uboot is 32bit,even in the 64bit cpu." but how to understand that? I have a guess,is the 64bit cpu support a 32bit-mode,then when does it switch to 64bit-mode to load 64-bit linux?
btw,I have an other question,according to <see mips run linux>,linux run in the _xkseg_ segment. so the first two bit virtual address in kernel space must be 11, like 11xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx (64bit). but when I printf a variable' address in a foo driver,is say 0xa80000041c2ea180. not start of _11_. the memory mapping mode has feazed me for _long_ _long_time.
Dear Wolfgang(or someone else who can anwser me),thanks -------------- hacklu 2011-06-22

We have dealt with this in our release of U-Boot since we only support 64-bit Linux. We use the n32 ABI with U-Boot and set it up to use a TLB entry to map U-Boot into a 32-bit addressable area.
We have some special memcpy type routines that can handle the 64-bit addressing.
All of our I/O registers require 64-bit addressing so we use assembly wrappers to do the actual read/writes to those addresses.
-Aaron Williams
On 06/21/2011 07:07 PM, hacklu wrote:
I have a 64bit cnMips borad.In the mail list archives,it says "uboot is 32bit,even in the 64bit cpu." but how to understand that? I have a guess,is the 64bit cpu support a 32bit-mode,then when does it switch to 64bit-mode to load 64-bit linux?
btw,I have an other question,according to <see mips run linux>,linux run in the _xkseg_ segment. so the first two bit virtual address in kernel space must be 11, like 11xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx (64bit). but when I printf a variable' address in a foo driver,is say 0xa80000041c2ea180. not start of _11_. the memory mapping mode has feazed me for _long_ _long_time.
Dear Wolfgang(or someone else who can anwser me),thanks
hacklu 2011-06-22

thanks for you answer. I have got too much.
On 2011-06-22 13:25:34, Aaron Williams wrote:
We have dealt with this in our release of U-Boot since we only support 64-bit Linux. We use the n32 ABI with U-Boot and set it up to use a TLB entry to map U-Boot into a 32-bit addressable area.
in the U-boot _shell_. I use md command. I found md 0x100000 and mx0x800100000 are the same. is that says:the virtual address 0x0 - 0xfffffff(256M, can I called this _kusg_ segment ?) are mapped to the _physical_ memory address 0x0 - 0xfffffff(256M) with the _TLB_. and the virtual address 0x80000000 - 0x8fffffff(like that, _kseg0_ ?) is mapped to the _physical_ memory address 0x0 - 0xfffffff(256M) according to the mips arch feature. do I understand correctly?
We have some special memcpy type routines that can handle the 64-bit addressing.
All of our I/O registers require 64-bit addressing so we use assembly wrappers to do the actual read/writes to those addresses.
-Aaron Williams
On 06/21/2011 07:07 PM, hacklu wrote:
I have a 64bit cnMips borad.In the mail list archives,it says "uboot is 32bit,even in the 64bit cpu." but how to understand that? I have a guess,is the 64bit cpu support a 32bit-mode,then when does it switch to 64bit-mode to load 64-bit linux?
btw,I have an other question,according to <see mips run linux>,linux run in the _xkseg_ segment. so the first two bit >>virtual address in kernel space must be 11, like 11xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx (64bit). but when I printf a variable' address in a foo driver,is say 0xa80000041c2ea180. not start of _11_. the memory mapping mode has feazed me for _long_ _long_time.
I hope you can answer this question for me. I really really want to know this. thans for your attention.
Dear Wolfgang(or someone else who can anwser me),thanks
hacklu 2011-06-22
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
------------------ hacklu 2011-06-22
participants (2)
-
Aaron Williams
-
hacklu