Index: arch/mips32/src/mm/tlb.c
===================================================================
--- arch/mips32/src/mm/tlb.c	(revision bd55bbb6b76432980c7a7dec3ca9c347f0985943)
+++ arch/mips32/src/mm/tlb.c	(revision fb8445570d1fefbb43a7a176047eda449d09879d)
@@ -45,5 +45,5 @@
 static void tlb_modified_fail(istate_t *istate);
 
-static pte_t *find_mapping_and_check(__address badvaddr, istate_t *istate, int *pfrc);
+static pte_t *find_mapping_and_check(__address badvaddr, int access, istate_t *istate, int *pfrc);
 
 static void prepare_entry_lo(entry_lo_t *lo, bool g, bool v, bool d, bool cacheable, __address pfn);
@@ -102,5 +102,5 @@
 	page_table_lock(AS, true);
 
-	pte = find_mapping_and_check(badvaddr, istate, &pfrc);
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc);
 	if (!pte) {
 		switch (pfrc) {
@@ -187,5 +187,5 @@
 	}
 
-	pte = find_mapping_and_check(badvaddr, istate, &pfrc);
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc);
 	if (!pte) {
 		switch (pfrc) {
@@ -271,5 +271,5 @@
 	}
 
-	pte = find_mapping_and_check(badvaddr, istate, &pfrc);
+	pte = find_mapping_and_check(badvaddr, PF_ACCESS_WRITE, istate, &pfrc);
 	if (!pte) {
 		switch (pfrc) {
@@ -367,4 +367,5 @@
  *
  * @param badvaddr Faulting virtual address.
+ * @param access Access mode that caused the fault.
  * @param istate Pointer to interrupted state.
  * @param pfrc Pointer to variable where as_page_fault() return code will be stored.
@@ -372,5 +373,5 @@
  * @return PTE on success, NULL otherwise.
  */
-pte_t *find_mapping_and_check(__address badvaddr, istate_t *istate, int *pfrc)
+pte_t *find_mapping_and_check(__address badvaddr, int access, istate_t *istate, int *pfrc)
 {
 	entry_hi_t hi;
@@ -405,5 +406,5 @@
 		 */
 		page_table_unlock(AS, true);
-		switch (rc = as_page_fault(badvaddr, istate)) {
+		switch (rc = as_page_fault(badvaddr, access, istate)) {
 		case AS_PF_OK:
 			/*
