Re: [RFC 1/5] WIP: MIPS: configure ebase according CONFIG_MMU

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 09.01.20 08:28, Antony Pavlov wrote:
From: Peter Mamonov <pmamonov@xxxxxxxxx>

Signed-off-by: Peter Mamonov <pmamonov@xxxxxxxxx>
Signed-off-by: Antony Pavlov <antonynpavlov@xxxxxxxxx>
---
  arch/mips/boot/main_entry.c | 5 +++++
  1 file changed, 5 insertions(+)

diff --git a/arch/mips/boot/main_entry.c b/arch/mips/boot/main_entry.c
index 2c18bc81c3..41350aad18 100644
--- a/arch/mips/boot/main_entry.c
+++ b/arch/mips/boot/main_entry.c
@@ -34,7 +34,11 @@ static void trap_init(void)
unsigned long ebase; +#ifdef CONFIG_MMU
+	ebase = CKSEG0;
+#else
  	ebase = CKSEG1;
+#endif
/*
  	 * Copy the generic exception handlers to their final destination.
@@ -56,6 +60,7 @@ static void trap_init(void)
  	/* FIXME: handle tlb */
  	memcpy((void *)(ebase), &except_vec3_generic, 0x80);
+ write_c0_ebase(ebase);

The spec says:
"The reset state of bits 31..12 of the EBase register initialize the exception base register to 0x8000.0000, providing backward compatibility with Release 1 implementations.
....
If the write-gate bit is not implemented, bits 31..30 of the EBase register are fixed with the value 0b10,and the addi-tion of the base address and the exception offset is done inhibiting a carry between bit 29 and bit 30 of the final excep-tion address. The combination of these two restrictions forces the final exception address to be in the kseg0 or kseg1 unmapped virtual address segments. For cache error exceptions, bit 29 is forced to a 1 in the ultimate exception base address so that this exception always runs in the kseg1 unmapped, uncached virtual address segment."


So, in case of MMU the reset value stay unchanged = KSEG0 (cached), but the cpu will jump to KSEG1 (uncached) in case of cache related exception any way. In case of CONFIG_MMU=n, we force to work with KSEG1 (uncached) for all types of exceptions.

So, if I see it correctly, this fix is needed anyway and not DMA related. Correct?
Can you please add this to commit message, to let no MIPS reviewers understand what is here happening.

  	/* unset BOOT EXCEPTION VECTOR bit */
  	write_c0_status(read_c0_status() & ~ST0_BEV);
  }


Kind regards,
Oleksij Rempel

--
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux