[RFC PATCH 02/17] powerpc: Split up PHYS_64BIT config option to fix "select" issues
Moffett, Kyle D
Kyle.D.Moffett at boeing.com
Fri Nov 11 03:31:57 EST 2011
On Nov 10, 2011, at 09:04, Timur Tabi wrote:
> Kyle Moffett wrote:
>> 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.
>>
>> 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.
>>
>> 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.
>
> I'm with Kumar on this. I don't see the point of making it so complicated.
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.
>
> 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:
>
> 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/
More information about the Linuxppc-dev
mailing list