Building an allmodconfig kernel fails horribly because of
endian mismatch. It turns out that the -mlittle-endian
switch was not honored at all as we were using the wrong
Kconfig symbol and failing to apply CPUFLAGS to the CFLAGS.
Finally, the linker flags did not get set right.
This addresses all three of those issues, which now lets
me build both big-endian and little-endian kernels for
testing.
Fixes: 428dbf156cc5 ("arch: change default endian for microblaze")
Fixes: 206d3642d8ee ("arch/microblaze: add choice for endianness and update Makefile")
Signed-off-by: Arnd Bergmann <[email protected]>
---
arch/microblaze/Makefile | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile
index 830ee7d42fa0..d269dd4b8279 100644
--- a/arch/microblaze/Makefile
+++ b/arch/microblaze/Makefile
@@ -36,16 +36,21 @@ endif
CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_DIV) += -mno-xl-soft-div
CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_BARREL) += -mxl-barrel-shift
CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare
-CPUFLAGS-$(CONFIG_BIG_ENDIAN) += -mbig-endian
-CPUFLAGS-$(CONFIG_LITTLE_ENDIAN) += -mlittle-endian
+
+ifdef CONFIG_CPU_BIG_ENDIAN
+KBUILD_CFLAGS += -mbig-endian
+KBUILD_AFLAGS += -mbig-endian
+LD += -EB
+else
+KBUILD_CFLAGS += -mlittle-endian
+KBUILD_AFLAGS += -mlittle-endian
+LD += -EL
+endif
CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
# r31 holds current when in kernel mode
-KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2)
-
-LDFLAGS :=
-LDFLAGS_vmlinux :=
+KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-y) $(CPUFLAGS-1) $(CPUFLAGS-2)
head-y := arch/microblaze/kernel/head.o
libs-y += arch/microblaze/lib/
--
2.9.0
The missing 'volatile' keyword on the iounmap argument leads to lots of
harmless warnings in an allmodconfig build:
sound/pci/echoaudio/echoaudio.c:1879:10: warning: passing argument 1 of 'iounmap' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers]
Signed-off-by: Arnd Bergmann <[email protected]>
---
arch/microblaze/include/asm/io.h | 2 +-
arch/microblaze/mm/pgtable.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h
index 39b6315db82e..c7968139486f 100644
--- a/arch/microblaze/include/asm/io.h
+++ b/arch/microblaze/include/asm/io.h
@@ -36,7 +36,7 @@ extern resource_size_t isa_mem_base;
#ifdef CONFIG_MMU
#define page_to_bus(page) (page_to_phys(page))
-extern void iounmap(void __iomem *addr);
+extern void iounmap(volatile void __iomem *addr);
extern void __iomem *ioremap(phys_addr_t address, unsigned long size);
#define ioremap_nocache(addr, size) ioremap((addr), (size))
diff --git a/arch/microblaze/mm/pgtable.c b/arch/microblaze/mm/pgtable.c
index 4c0599239915..7f525962cdfa 100644
--- a/arch/microblaze/mm/pgtable.c
+++ b/arch/microblaze/mm/pgtable.c
@@ -127,7 +127,7 @@ void __iomem *ioremap(phys_addr_t addr, unsigned long size)
}
EXPORT_SYMBOL(ioremap);
-void iounmap(void __iomem *addr)
+void iounmap(volatile void __iomem *addr)
{
if ((__force void *)addr > high_memory &&
(unsigned long) addr < ioremap_bot)
--
2.9.0
Hi Arnd,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v4.15-rc7 next-20180112]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
config: microblaze-mmu_defconfig (attached as .config)
compiler: microblaze-linux-gcc (GCC) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=microblaze
All errors (new ones prefixed by >>):
>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
#error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
^~~~~
vim +33 arch/microblaze/lib/fastcopy.S
de93c3c1 Michal Simek 2011-01-28 @33 #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
de93c3c1 Michal Simek 2011-01-28 34 #endif
de93c3c1 Michal Simek 2011-01-28 35
:::::: The code at line 33 was first introduced by commit
:::::: de93c3c119382cb888ca8a94b642dbcf8035525e microblaze: Fix ASM optimized code for LE
:::::: TO: Michal Simek <[email protected]>
:::::: CC: Michal Simek <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <[email protected]> wrote:
> Hi Arnd,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.15-rc7 next-20180112]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
> config: microblaze-mmu_defconfig (attached as .config)
> compiler: microblaze-linux-gcc (GCC) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # save the attached .config to linux build tree
> make.cross ARCH=microblaze
>
> All errors (new ones prefixed by >>):
>
>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
> #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
> ^~~~~
>
> vim +33 arch/microblaze/lib/fastcopy.S
>
This seems to be a result of fixing one bug so we run into one that we didn't
get to earlier. I still assume my patch is correct.
Arnd
On 15.1.2018 10:29, Arnd Bergmann wrote:
> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <[email protected]> wrote:
>> Hi Arnd,
>>
>> I love your patch! Yet something to improve:
>>
>> [auto build test ERROR on linus/master]
>> [also build test ERROR on v4.15-rc7 next-20180112]
>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>
>> url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
>> config: microblaze-mmu_defconfig (attached as .config)
>> compiler: microblaze-linux-gcc (GCC) 7.2.0
>> reproduce:
>> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>> chmod +x ~/bin/make.cross
>> # save the attached .config to linux build tree
>> make.cross ARCH=microblaze
>>
>> All errors (new ones prefixed by >>):
>>
>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>> #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>> ^~~~~
>>
>> vim +33 arch/microblaze/lib/fastcopy.S
>>
>
> This seems to be a result of fixing one bug so we run into one that we didn't
> get to earlier. I still assume my patch is correct.
I will look at this later this week. Xilinx toolchain which I use
normally are microblaze for BE or microblazeel that's why proper flags
are default options already that's why I didn't see any issue.
Did you take toolchain from kernel.org?
https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP SoCs
On Mon, Jan 15, 2018 at 11:14 AM, Michal Simek <[email protected]> wrote:
> On 15.1.2018 10:29, Arnd Bergmann wrote:
>> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <[email protected]> wrote:
>>> Hi Arnd,
>>>
>>> I love your patch! Yet something to improve:
>>>
>>> [auto build test ERROR on linus/master]
>>> [also build test ERROR on v4.15-rc7 next-20180112]
>>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>>
>>> url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
>>> config: microblaze-mmu_defconfig (attached as .config)
>>> compiler: microblaze-linux-gcc (GCC) 7.2.0
>>> reproduce:
>>> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>>> chmod +x ~/bin/make.cross
>>> # save the attached .config to linux build tree
>>> make.cross ARCH=microblaze
>>>
>>> All errors (new ones prefixed by >>):
>>>
>>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>>> #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>>> ^~~~~
>>>
>>> vim +33 arch/microblaze/lib/fastcopy.S
>>>
>>
>> This seems to be a result of fixing one bug so we run into one that we didn't
>> get to earlier. I still assume my patch is correct.
>
> I will look at this later this week. Xilinx toolchain which I use
> normally are microblaze for BE or microblazeel that's why proper flags
> are default options already that's why I didn't see any issue.
>
> Did you take toolchain from kernel.org?
> https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/
I used a gcc-7.2.1 that I built myself for all architectures in order to debug
a gcc issue that appeared in gcc-7.2.
The patch that got tested was my workaround for an obviously broken
allmodconfig build.
Arnd
On 15.1.2018 11:19, Arnd Bergmann wrote:
> On Mon, Jan 15, 2018 at 11:14 AM, Michal Simek <[email protected]> wrote:
>> On 15.1.2018 10:29, Arnd Bergmann wrote:
>>> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <[email protected]> wrote:
>>>> Hi Arnd,
>>>>
>>>> I love your patch! Yet something to improve:
>>>>
>>>> [auto build test ERROR on linus/master]
>>>> [also build test ERROR on v4.15-rc7 next-20180112]
>>>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>>>
>>>> url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
>>>> config: microblaze-mmu_defconfig (attached as .config)
>>>> compiler: microblaze-linux-gcc (GCC) 7.2.0
>>>> reproduce:
>>>> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>>>> chmod +x ~/bin/make.cross
>>>> # save the attached .config to linux build tree
>>>> make.cross ARCH=microblaze
>>>>
>>>> All errors (new ones prefixed by >>):
>>>>
>>>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>>>> #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
>>>> ^~~~~
>>>>
>>>> vim +33 arch/microblaze/lib/fastcopy.S
>>>>
>>>
>>> This seems to be a result of fixing one bug so we run into one that we didn't
>>> get to earlier. I still assume my patch is correct.
>>
>> I will look at this later this week. Xilinx toolchain which I use
>> normally are microblaze for BE or microblazeel that's why proper flags
>> are default options already that's why I didn't see any issue.
>>
>> Did you take toolchain from kernel.org?
>> https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/
>
> I used a gcc-7.2.1 that I built myself for all architectures in order to debug
> a gcc issue that appeared in gcc-7.2.
>
> The patch that got tested was my workaround for an obviously broken
> allmodconfig build.
ok.
Applied both.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP SoCs