Commit 99bd5fcc authored by Vineet Gupta's avatar Vineet Gupta
Browse files

ARC: PAE40: don't panic and instead turn off hw ioc



HSDK currently panics when built for HIGHMEM/ARC_HAS_PAE40 because ioc
is enabled with default which doesn't work for the 2 non contiguous
memory nodes. So get PAE working by disabling ioc instead.

Tested with !PAE40 by forcing @ioc_enable=0 and running the glibc
testsuite over ssh

Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 79a3aaa7
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
@@ -113,10 +113,24 @@ static void read_decode_cache_bcr_arcv2(int cpu)
	}

	READ_BCR(ARC_REG_CLUSTER_BCR, cbcr);
	if (cbcr.c)
	if (cbcr.c) {
		ioc_exists = 1;
	else

		/*
		 * As for today we don't support both IOC and ZONE_HIGHMEM enabled
		 * simultaneously. This happens because as of today IOC aperture covers
		 * only ZONE_NORMAL (low mem) and any dma transactions outside this
		 * region won't be HW coherent.
		 * If we want to use both IOC and ZONE_HIGHMEM we can use
		 * bounce_buffer to handle dma transactions to HIGHMEM.
		 * Also it is possible to modify dma_direct cache ops or increase IOC
		 * aperture size if we are planning to use HIGHMEM without PAE.
		 */
		if (IS_ENABLED(CONFIG_HIGHMEM) || is_pae40_enabled())
			ioc_enable = 0;
	} else {
		ioc_enable = 0;
	}

	/* HS 2.0 didn't have AUX_VOL */
	if (cpuinfo_arc700[cpu].core.family > 0x51) {
@@ -1158,19 +1172,6 @@ noinline void __init arc_ioc_setup(void)
	if (!ioc_enable)
		return;

	/*
	 * As for today we don't support both IOC and ZONE_HIGHMEM enabled
	 * simultaneously. This happens because as of today IOC aperture covers
	 * only ZONE_NORMAL (low mem) and any dma transactions outside this
	 * region won't be HW coherent.
	 * If we want to use both IOC and ZONE_HIGHMEM we can use
	 * bounce_buffer to handle dma transactions to HIGHMEM.
	 * Also it is possible to modify dma_direct cache ops or increase IOC
	 * aperture size if we are planning to use HIGHMEM without PAE.
	 */
	if (IS_ENABLED(CONFIG_HIGHMEM))
		panic("IOC and HIGHMEM can't be used simultaneously");

	/* Flush + invalidate + disable L1 dcache */
	__dc_disable();