public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Aaron Williams <Aaron.Williams@cavium.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 19/21] Use uintptr_t for 32/64-bit compatibility
Date: Mon, 10 Oct 2011 22:41:07 -0700	[thread overview]
Message-ID: <201110102241.08076.Aaron.Williams@cavium.com> (raw)
In-Reply-To: <201110110053.00812.vapier@gentoo.org>

On Monday, October 10, 2011 09:52:59 PM Mike Frysinger wrote:
> On Monday 10 October 2011 22:46:10 Aaron Williams wrote:
> > Our OCTEON platform is a 64-bit SOC and we run it in the MIPS N32 ABI
> > mode (64-bit registers, 32-bit address space).
> 
> right, n32 == 32bit pointers, so i don't consider that a port with 64bit
> pointer issues
> 
> > rather see drivers better make use of the proper mapping functions and
> > support 64-bit physical addresses as well as use wrappers for accessing
> > the PCI register space. (in our case all of our SOC registers require
> > 64-bit addresses).
> 
> what exactly are "proper mapping functions" ?  you mean things like the
> kernel's ioremap() ?
> 
> also, please don't top post
> -mike

I mean using functions like pci_virt_to_mem(). I have fixed a couple of 
drivers such as the USB EHCI driver and Intel E1000 driver to make use of this 
on our platform. We also can optionally perform I/O remapping so that PCI 
devices that only support 32-bit addressing can still access the memory where 
U-Boot is located. I have found that numerous drivers assume that an address 
in a pointer can be used directly for DMA which is not the case on MIPS since 
U-Boot typically runs in KSEG0 (0x8000000) which is aliased to physical memory 
address 0.

The other area I have seen issues is where drivers do not use 
readl/writel/etc. to access the registers. It is even easier if they use a 
macro per-driver since in our case we might use different functions to access 
the underlying hardware registers depending on if they're part of our SOC or 
on the PCIe bus since they map to different 64-bit I/O areas.

Now none of these actually require 64-bit pointers, just 64-bit physical 
addresses. We even support 64-bit ELF executables loaded from U-Boot as well 
as the 64-bit Linux kernel (we don't support a 32-bit kernel any longer) and 
basically make use of a 64-bit version of memcpy.

64-bit support would be useful for the various memory functions, i.e. md, mw, 
mm, md5sum, etc. It can also be useful for loading images to higher addresses. 
It's not essential though and currently we added separate commands for 
accessing 64-bit addresses.

One of these daya I need to work on getting some of our patches back upstream 
since some of them are quite useful for other platforms as well.

Even though we use virtual memory for U-Boot the number of changes to U-Boot 
has been very minimal except for drivers and even then the changes can be 
portable (i.e. using pci_virt_to_mem(). It actually simplifies things in that 
we don't have to deal with remapping. Some drivers like the proposed one for 
the Silicon Image SATA controller work as-is. The virtual memory allows the 
same U-Boot image to run from anywhere in memory. We use a single image 
whether we're booting out of NOR flash or over PCI. We also support multiple 
flash images (standard and failsafe). We perform the mapping before any C code 
is executed so we don't have to worry about relocation when U-Boot copies 
itself to the top of RAM and begins executing there. We do have a very 
different lib/board.c however, in order to deal with our SOC.

I think moving U-Boot to be fully 64-bit will be a lot more difficult compared 
to what we are doing since a lot of code assumes addresses are 32-bit. Our VM 
change allows U-Boot to remain 32-bit while still being able to support a 64-
bit platform.

-Aaron
-- 
Aaron Williams <Aaron.Williams@cavium.com>
 (408) 943-7198

  reply	other threads:[~2011-10-11  5:41 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-27  0:10 [U-Boot] [PATCH v3 0/21] New 'sandbox' test architecture for U-Boot Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 01/21] sandbox: Add architecture header files Simon Glass
2011-10-03  5:56   ` Mike Frysinger
2011-10-04  0:10     ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 02/21] Fix use of int as pointer in image.c Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 03/21] sandbox: Add architecture image support Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 04/21] sandbox: Add compiler defines to support a 64-bit x86_64 platform Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 05/21] sandbox: Add cpu files Simon Glass
2011-10-03  6:10   ` Mike Frysinger
2011-10-03 19:25     ` Mike Frysinger
2011-09-27  0:10 ` [U-Boot] [PATCH v3 06/21] sandbox: Add architecture lib files Simon Glass
2011-10-03  6:15   ` Mike Frysinger
2011-10-04  0:02     ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 07/21] sandbox: Add sandbox board Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 08/21] sandbox: Add board info for architecture Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 09/21] sandbox: Add bootm support Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 10/21] sandbox: Disable built-in malloc Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 11/21] sandbox: Disable standalone/API support Simon Glass
2011-10-03 19:37   ` Mike Frysinger
2011-10-04  0:13     ` Simon Glass
2011-10-04  0:40       ` Mike Frysinger
2011-10-04  0:54         ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 12/21] sandbox: Force command sections to be 4-byte aligned Simon Glass
2011-10-03 19:34   ` Mike Frysinger
2011-10-04  0:05     ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 13/21] sandbox: Add OS dependent layer Simon Glass
2011-10-03 19:27   ` Mike Frysinger
2011-10-03 23:44     ` Simon Glass
2011-10-03 23:49       ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 14/21] sandbox: Add board_init() Simon Glass
2011-10-03 19:33   ` Mike Frysinger
2011-10-04  0:17     ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 15/21] sandbox: Add main program Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 16/21] sandbox: Add serial uart Simon Glass
2011-10-03 19:42   ` Mike Frysinger
2011-10-04  0:21     ` Simon Glass
2011-10-04  1:10       ` Mike Frysinger
2011-09-27  0:10 ` [U-Boot] [PATCH v3 17/21] sandbox: Add basic config file Simon Glass
2011-10-03 19:42   ` Mike Frysinger
2011-10-04  0:23     ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 18/21] Remove unused variable warnings in cmd_mem, cmd_nvedit Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 19/21] Use uintptr_t for 32/64-bit compatibility Simon Glass
2011-10-03 18:57   ` Mike Frysinger
2011-10-04  5:24     ` Simon Glass
2011-10-10  2:54       ` Mike Frysinger
2011-10-10  3:49         ` Simon Glass
2011-10-11  2:46         ` Aaron Williams
2011-10-11  4:52           ` Mike Frysinger
2011-10-11  5:41             ` Aaron Williams [this message]
2011-10-14  4:18               ` Mike Frysinger
2011-09-27  0:10 ` [U-Boot] [PATCH v3 20/21] Adjust dependency rules to permit per-file flags Simon Glass
2011-10-04  1:10   ` Simon Glass
2011-10-10  2:50     ` Mike Frysinger
2011-10-10  3:45       ` Simon Glass
2011-09-27  0:10 ` [U-Boot] [PATCH v3 21/21] sandbox: Makefile changes to build sandbox architecture Simon Glass
2011-10-03 19:31   ` Mike Frysinger
2011-10-04  0:51     ` Simon Glass
2011-10-04  1:05       ` Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201110102241.08076.Aaron.Williams@cavium.com \
    --to=aaron.williams@cavium.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox