Bladeren bron

parisc: Add PDCE_CHECK instruction to HPMC handler

According to the programming note at page 1-31 of the PA 1.1 Firmware
Architecture document, one should use the PDC_INSTR firmware function to
get the instruction that invokes a PDCE_CHECK in the HPMC handler.  This
patch follows this note and sets the instruction which has been a nop up
until now.
Testing on a C3000 and C8000 showed that this firmware call isn't
implemented on those machines, so maybe it's only needed on older ones.

Signed-off-by: Helge Deller <deller@gmx.de>
Helge Deller 8 jaren geleden
bovenliggende
commit
8d771b143f
1 gewijzigde bestanden met toevoegingen van 9 en 1 verwijderingen
  1. 9 1
      arch/parisc/kernel/traps.c

+ 9 - 1
arch/parisc/kernel/traps.c

@@ -817,7 +817,7 @@ void __init initialize_ivt(const void *iva)
 	u32 check = 0;
 	u32 check = 0;
 	u32 *ivap;
 	u32 *ivap;
 	u32 *hpmcp;
 	u32 *hpmcp;
-	u32 length;
+	u32 length, instr;
 
 
 	if (strcmp((const char *)iva, "cows can fly"))
 	if (strcmp((const char *)iva, "cows can fly"))
 		panic("IVT invalid");
 		panic("IVT invalid");
@@ -827,6 +827,14 @@ void __init initialize_ivt(const void *iva)
 	for (i = 0; i < 8; i++)
 	for (i = 0; i < 8; i++)
 	    *ivap++ = 0;
 	    *ivap++ = 0;
 
 
+	/*
+	 * Use PDC_INSTR firmware function to get instruction that invokes
+	 * PDCE_CHECK in HPMC handler.  See programming note at page 1-31 of
+	 * the PA 1.1 Firmware Architecture document.
+	 */
+	if (pdc_instr(&instr) == PDC_OK)
+		ivap[0] = instr;
+
 	/* Compute Checksum for HPMC handler */
 	/* Compute Checksum for HPMC handler */
 	length = os_hpmc_size;
 	length = os_hpmc_size;
 	ivap[7] = length;
 	ivap[7] = length;