Thread (78 messages) flat view 78 messages, 10 authors, 2011-11-16

Re: [RFC PATCH 02/17] powerpc: Split up PHYS_64BIT config option to fix "select" issues

From: Moffett, Kyle D <hidden>
Date: 2011-11-10 16:33:35
Also in: lkml

On Nov 10, 2011, at 09:04, Timur Tabi wrote:
Kyle Moffett wrote:
quoted
 CONFIG_PHYS_64BIT_SUPPORTED:
   This hidden option should be selected by any CPU type which supports
   64-bit physical addresses.  This will enable the PHYS_64BIT option
   to be selected.  It is (obviously) always set on PPC64.
=20
 CONFIG_PHYS_64BIT_DT_REQUIRED:
   This hidden option should be selected by any board or platform which
   has >32-bit physical devices present in hardware.  If this is set
   then the CONFIG_PHYS_64BIT option will be forcibly enabled and
   hidden from the user.  It is (obviously) always set on PPC64.
=20
 CONFIG_PHYS_64BIT:
   This option is user-controllable, where allowed by CPU and platform
   settings, and should never be pointed at with a "select" statement.
   Due to the values of the above two options, this is never visible on
   PPC64.
=20
I'm with Kumar on this.  I don't see the point of making it so complicate=
d.

Did you look at the existing code?  It's already that complicated:

config ARCH_PHYS_ADDR_T_64BIT
	def_bool PPC64 || PHYS_64BIT

config ARCH_DMA_ADDR_T_64BIT
	def_bool ARCH_PHYS_ADDR_T_64BIT

config {P1022_DS,P2041_RDB,P3041_DS,P3060_QDS,P4080_DS,P5020_DS}
	select PHYS_64BIT

config 44x
	select PHYS_64BIT

config PTE_64BIT
	bool
	depends on 44x || E500 || PPC_86xx
	default y if PHYS_64BIT

config PHYS_64BIT
	bool 'Large physical address support' if E500 || PPC_86xx
	depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx

Even worse, PHYS_64BIT is not set on 64-bit processors, but there is
a lot of driver code that seems to assume PHYS_64BIT indicates the
size of "phys_addr_t".
No kernel should ever have to care with a DT is 64-bit or 32-bit.  If
you build a kernel with 64-bit phys support, then it will work with
any DT.
=20
U-Boot already warns you if the DT and the actual physical addresses
of the devices don't match.
The big issue is that the Kconfig docs are very clear that "select"
should not be used on user-visible options (AKA: PHYS_64BIT), and yet
half the PPC_85xx boards have this tidbit:
	select PHYS_64BIT # The DTS has 36-bit addresses

I'm totally OK with removing that from all those boards, but to preserve
the existing behavior (also used by the entire 44x platform) I added the
new config symbol PHYS_64BIT_DT_REQUIRED, which is used to control
whether or not the "PHYS_64BIT" option is even visible to the user.

I originally called it "PHYS_64BIT_REQUIRED", but since all of the
board comments talked about 36-bit DTS addresses, I added the _DT_.

There are only two reasons to create a 32-bit kernel:
=20
1) A small performance improvement on systems with 2GB or less.
2) Some SOC devices only support 32-bit physical addresses, so the
easiest way to ensure a compatible address is to prohibit memory above
4GB.
If this is true, then why does PHYS_64BIT have that big ugly list of
dependencies right now?  I don't know about the other platforms well
enough to tell what would break by enabling PHYS_64BIT, but I assume
that something in the past caused that dependency list.

Cheers,
Kyle Moffett

--
Curious about my work on the Debian powerpcspe port?
I'm keeping a blog here: http://pureperl.blogspot.com/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help