kernel_optimize_test/arch/mips
Paul Burton 0d0e14770d
MIPS: Make (UN)CAC_ADDR() PHYS_OFFSET-agnostic
Converting an address between cached & uncached (typically addresses in
(c)kseg0 & (c)kseg1 or 2 xkphys regions) should not depend upon
PHYS_OFFSET in any way - we're converting from a virtual address in one
unmapped region to a virtual address in another unmapped region.

For some reason our CAC_ADDR() & UNCAC_ADDR() macros make use of
PAGE_OFFSET, which typically includes PHYS_OFFSET. This means that
platforms with a non-zero PHYS_OFFSET typically have to workaround
miscalculation by these 2 macros by also defining UNCAC_BASE to a value
that isn't really correct.

It appears that an attempt has previously been made to address this with
commit 3f4579252aa1 ("MIPS: make CAC_ADDR and UNCAC_ADDR account for
PHYS_OFFSET") which was later undone by commit ed3ce16c3d ("Revert
"MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET"") which
also introduced the ar7 workaround. That attempt at a fix was roughly
equivalent, but essentially caused the CAC_ADDR() & UNCAC_ADDR() macros
to cancel out PHYS_OFFSET by adding & then subtracting it again. In his
revert Leonid is correct that using PHYS_OFFSET makes no sense in the
context of these macros, but appears to have missed its inclusion via
PAGE_OFFSET which means PHYS_OFFSET actually had an effect after the
revert rather than before it.

Here we fix this by modifying CAC_ADDR() & UNCAC_ADDR() to stop using
PAGE_OFFSET (& thus PHYS_OFFSET), instead using __pa() & __va() along
with UNCAC_BASE.

For UNCAC_ADDR(), __pa() will convert a cached address to a physical
address which we can simply use as an offset from UNCAC_BASE to obtain
an address in the uncached region.

For CAC_ADDR() we can undo the effect of UNCAC_ADDR() by subtracting
UNCAC_BASE and using __va() on the result.

With this change made, remove definitions of UNCAC_BASE from the ar7 &
pic32 platforms which appear to have defined them only to workaround
this problem.

Signed-off-by: Paul Burton <paul.burton@mips.com>
References: 3f4579252aa1 ("MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET")
References: ed3ce16c3d ("Revert "MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET"")
Patchwork: https://patchwork.linux-mips.org/patch/20046/
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: James Hogan <jhogan@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: Vladimir Kondratiev <vladimir.kondratiev@intel.com>
2018-07-30 10:27:20 -07:00
..
alchemy mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ar7 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ath25 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
ath79 MIPS: ath79: enable uart during early_prink 2018-07-24 19:07:42 -07:00
bcm47xx MIPS: BCM47XX: Enable 74K Core ExternalSync for PCIe erratum 2018-06-18 22:19:50 +01:00
bcm63xx mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
bmips MIPS: bmips: remove unnecessary call to register "simple-bus" 2018-06-24 09:27:27 -07:00
boot MIPS: ath79: Use the IRQ based GPIO key driver for the buttons 2018-07-27 19:29:53 -07:00
cavium-octeon MIPS: Octeon: add missing of_node_put() 2018-07-27 19:45:15 -07:00
cobalt
configs MIPS: Ci20: Enable SPI/GPIO driver 2018-07-24 13:43:54 -07:00
crypto MIPS: crypto: Add crc32 and crc32c hw accelerated module 2018-02-19 20:50:36 +00:00
dec MIPS: Convert update_persistent_clock() to update_persistent_clock64() 2018-05-14 23:58:23 +01:00
emma
fw mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
generic MIPS: generic: fix missing of_node_put() 2018-07-27 19:48:57 -07:00
include MIPS: Make (UN)CAC_ADDR() PHYS_OFFSET-agnostic 2018-07-30 10:27:20 -07:00
jazz MIPS: Make (UN)CAC_ADDR() PHYS_OFFSET-agnostic 2018-07-30 10:27:20 -07:00
jz4740 MIPS: jz4740: Bump zload address 2018-07-23 17:35:19 -07:00
kernel MIPS: Loongson: Add Loongson-3A R3.1 basic support 2018-07-23 17:53:34 -07:00
kvm Small update for KVM. 2018-06-12 11:34:04 -07:00
lantiq MIPS: lantiq: Use dma_zalloc_coherent() in dma code 2018-07-23 11:02:19 -07:00
lasat mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
lib MIPS: memset.S: Add comments to fault fixup handlers 2018-07-24 17:02:43 -07:00
loongson32 MIPS: use generic dma noncoherent ops for simple noncoherent platforms 2018-06-24 09:26:05 -07:00
loongson64 MIPS: Loongson: Add Loongson-3A R3.1 basic support 2018-07-23 17:53:34 -07:00
math-emu MIPS: math-emu: Mark fall throughs in switch statements with a comment 2017-12-12 17:20:20 +01:00
mm MIPS: Make (UN)CAC_ADDR() PHYS_OFFSET-agnostic 2018-07-30 10:27:20 -07:00
mti-malta MIPS: Malta: Use PIIX4 poweroff driver to power down 2018-06-24 09:27:27 -07:00
net bpf, mips: remove unused function 2018-05-14 19:11:45 -07:00
netlogic mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
oprofile MIPS: perf: More robustly probe for the presence of per-tc counters 2018-05-15 15:16:16 +01:00
paravirt mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
pci MIPS: ath79: get PCIe controller out of reset 2018-07-24 19:08:06 -07:00
pic32 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
pistachio License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pmcs-msp71xx License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pnx833x mtd: nand: Rename nand.h into rawnand.h 2017-08-13 10:11:49 +02:00
power License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ralink mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
rb532 MIPS: RB532: Avoid undefined mac_pton without GENERIC_NET_UTILS 2018-01-10 16:39:03 +01:00
sgi-ip22 Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-11-13 17:56:58 -08:00
sgi-ip27 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
sgi-ip32 MIPS: IP32: use generic dma noncoherent ops 2018-06-24 09:27:27 -07:00
sibyte mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
sni MIPS: sni: Remove the read_persistent_clock() 2018-05-14 23:58:25 +01:00
tools Update MIPS email addresses 2017-11-03 09:02:30 -07:00
txx9 mips: unify prom_putchar() declarations 2018-07-17 09:40:17 -07:00
vdso MIPS: VDSO: Prevent use of smp_processor_id() 2018-07-27 19:36:16 -07:00
vr41xx MIPS: Annotate cpu_wait implementations with __cpuidle 2018-06-28 14:18:54 -07:00
Kbuild
Kbuild.platforms MIPS: Xilfpga: Switch to using generic defconfigs 2017-11-08 22:54:14 +00:00
Kconfig MIPS: ath79: select the PINCTRL subsystem 2018-07-24 18:57:38 -07:00
Kconfig.debug MIPS: Fix CPS SMP NS16550 UART defaults 2018-01-10 16:44:49 +01:00
Makefile MIPS: Always use -march=<arch>, not -<arch> shortcuts 2018-06-28 14:24:30 -07:00
Makefile.postlink License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00