Thread (11 messages) 11 messages, 4 authors, 2015-09-01

Re: [Question] Is little endian supported on all the platforms?

From: Boqun Feng <hidden>
Date: 2015-08-31 11:56:58

On Mon, Aug 31, 2015 at 09:19:26PM +1000, Michael Ellerman wrote:
quoted hunk ↗ jump to hunk
On Mon, 2015-08-31 at 15:53 +0800, Boqun Feng wrote:
quoted
On Mon, Aug 31, 2015 at 04:52:38PM +1000, Benjamin Herrenschmidt wrote:
quoted
On Mon, 2015-08-31 at 14:44 +0800, Boqun Feng wrote:
quoted
Hi all,

I hit a strange build error on v4.2, when I try to build a LE kernel
with a slightly modification of the ppc64_defconfig. What I did is just
make ppc64_defconfig and make menuconfig to set CPU_LITTLE_ENDIAN=y, and
then build the kernel.

I did a little research myself, and found out the error is because of
trying to build a LE kernel with CONFIG_PPC_PS3=y. So a simple way to
reproduce is:
First, LE isn't supported on PS/3 :-) It's only supported on POWER8
machines (and *some* P7 machines and only when running as KVM guest).
Got it, thank you ;-)

So should we modify Kconfigs of all the platform to reflect this?
Yes. Maybe something like this?
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index c140e94..c359f72 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -415,9 +415,13 @@ config VDSO32
          big endian. That is because the only little endian configuration we
          support is ppc64le which is 64-bit only.
 
+config CHOOSE_ENDIAN
+       bool
+
 choice
        prompt "Endianness selection"
        default CPU_BIG_ENDIAN
+       depends on CHOOSE_ENDIAN
        help
          This option selects whether a big endian or little endian kernel will
          be built.
diff --git a/arch/powerpc/platforms/powernv/Kconfig b/arch/powerpc/platforms/powernv/Kconfig
index 604190c..32d5661 100644
--- a/arch/powerpc/platforms/powernv/Kconfig
+++ b/arch/powerpc/platforms/powernv/Kconfig
@@ -18,6 +18,7 @@ config PPC_POWERNV
        select CPU_FREQ_GOV_ONDEMAND
        select CPU_FREQ_GOV_CONSERVATIVE
        select PPC_DOORBELL
+       select CHOOSE_ENDIAN
IIUC, we can actually set PPC_POWERNV=y and PPC_PS3=y at the same time,
right?

So this can't prevent PPC_PS3 && CPU_LITTLE_ENDIAN from being true.
quoted hunk ↗ jump to hunk
        default y
 
 config OPAL_PRD
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 54c87d5..182f485 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -21,6 +21,7 @@ config PPC_PSERIES
        select HOTPLUG_CPU if SMP
        select ARCH_RANDOM
        select PPC_DOORBELL
+       select CHOOSE_ENDIAN
        default y
 
 config PPC_SPLPAR


quoted
quoted
But the specific problem you are having looks like a differnet issue
with the PS3 boot wrapper.
But could the reason of this be that the building process of the PS3
boot wrapper assumes the kernel is BE?
It looks more like we're getting confused between 32-bit and 64-bit, from your
log:

    ld: powerpc:common64 architecture of input file `arch/powerpc/boot/ps3-head.o' is incompatible with powerpc:common output

Which says it has a .o which is 64-bit but it's trying to produce 32-bit output.

That's probably related to the PPC64_BOOT_WRAPPER stuff.
Probably, and just FYI, I build a 64bit BE kernel, the dtbImage.ps3 is
ELF 32-bit MSB executable.

Regards,
Boqun

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help