Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5b35cff authored by Alistair Popple's avatar Alistair Popple Committed by Benjamin Herrenschmidt
Browse files

ppc476: Enable a linker work around for IBM errata #46



This patch adds an option to enable a work around for an icache bug on
476 that can cause execution of stale instructions when falling
through pages (IBM errata #46). It requires a recent version of
binutils which supports the --ppc476-workaround option.

The work around enables the appropriate linker options and ensures
that all module output sections are aligned to 4K page boundaries. The
work around is only required when building modules.

Signed-off-by: default avatarAlistair Popple <alistair@popple.id.au>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e2c37d90
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -159,6 +159,11 @@ CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)

KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o

ifeq ($(CONFIG_476FPE_ERR46),y)
	KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
		-T $(srctree)/arch/powerpc/platforms/44x/ppc476_modules.lds
endif

# No AltiVec or VSX instructions when building kernel
KBUILD_CFLAGS += $(call cc-option,-mno-altivec)
KBUILD_CFLAGS += $(call cc-option,-mno-vsx)
+14 −0
Original line number Diff line number Diff line
@@ -351,6 +351,20 @@ config APM821xx
	select IBM_EMAC_EMAC4
	select IBM_EMAC_TAH

config 476FPE_ERR46
	depends on 476FPE
	bool "Enable linker work around for PPC476FPE errata #46"
	help
	  This option enables a work around for an icache bug on 476
	  that can cause execution of stale instructions when falling
	  through pages (IBM errata #46). It requires a recent version
	  of binutils which supports the --ppc476-workaround option.

	  The work around enables the appropriate linker options and
	  ensures that all module output sections are aligned to 4K
	  page boundaries. The work around is only required when
	  building modules.

# 44x errata/workaround config symbols, selected by the CPU models above
config IBM440EP_ERR42
	bool
+15 −0
Original line number Diff line number Diff line
SECTIONS
{
	.text : ALIGN(4096)
	{
		*(.text .text.* .fixup)
	}
	.init.text : ALIGN(4096)
	{
		*(.init.text .init.text.*)
	}
	.exit.text : ALIGN(4096)
	{
		*(.exit.text .exit.text.*)
	}
}