Title: [3924] trunk/arch/blackfin/mach-common/cplbmgr.S: [#2424]
Add a note describing what is going on - no functional changes
- Revision
- 3924
- Author
- rgetz
- Date
- 2007-11-22 16:03:19 -0600 (Thu, 22 Nov 2007)
Log Message
[#2424] Add a note describing what is going on - no functional changes
Diffstat
cplbmgr.S | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
Modified Paths
Diff
Modified: trunk/arch/blackfin/mach-common/cplbmgr.S (3923 => 3924)
--- trunk/arch/blackfin/mach-common/cplbmgr.S 2007-11-22 10:47:08 UTC (rev 3923)
+++ trunk/arch/blackfin/mach-common/cplbmgr.S 2007-11-22 22:03:19 UTC (rev 3924)
@@ -75,6 +75,15 @@
* from the configuration table.
*/
+ /* A multi-word instruction can cross a page boundary. This means the
+ * first part of the instruction can be in a valid page, but the
+ * second part is not, and hence generates the instruction miss.
+ * However, the fault address is for the start of the instruction,
+ * not the part that's in the bad page. Therefore, we have to check
+ * whether the fault address applies to a page that is already present
+ * in the table.
+ */
+
P4.L = LO(ICPLB_FAULT_ADDR);
P4.H = HI(ICPLB_FAULT_ADDR);
@@ -87,7 +96,7 @@
R4 = [P4]; /* Get faulting address*/
R6 = 64; /* Advance past the fault address, which*/
R6 = R6 + R4; /* we'll use if we find a match*/
- R3 = ((16 << 8) | 2); /* Extract mask, bits 16 and 17.*/
+ R3 = ((16 << 8) | 2); /* Extract mask, two bits at posn 16 */
R5 = 0;
.Lisearch:
@@ -125,7 +134,9 @@
P4.L = LO(IMEM_CONTROL);
P4.H = HI(IMEM_CONTROL);
- /* disable cplbs */
+ /* Turn off CPLBs while we work, necessary according to HRM before
+ * modifying CPLB descriptors
+ */
R5 = [P4]; /* Control Register*/
BITCLR(R5,ENICPLB_P);
CLI R1;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits