powerpc/85xx: fix rev.2 job queue LIODN error storm
authorKim Phillips <kim.phillips@freescale.com>
Fri, 3 Sep 2010 15:57:31 +0000 (10:57 -0500)
committerKumar Gala <galak@kernel.crashing.org>
Thu, 7 Oct 2010 14:49:47 +0000 (09:49 -0500)
pumping line-rate traffic though a p4080 rev.2, which
is configured to encrypt packets prior to forwarding through
an IPsec tunnel, gets this error:

of_platform ffe302000.jq: DECO: desc idx 22: LIODN error. DECO was trying
to share from itself or from another DECO but the two Non-SEQ LIODN
values didn't match or the "shared from" DECO's Descriptor required that
the SEQ LIODNs be the same and they aren't.

Since high traffic rates cause DECOs to begin to start sharing
shared descriptors amongst themselves, and DECOs inherit job queue
LIODNs when accessing shared descriptors, and a recently discovered
rev.2 h/w erratum requires all sharing job queues in a partition
have same liodn assignment, reassign the first job queue's liodn
assignment to the rest.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
arch/powerpc/cpu/mpc85xx/p4080_ids.c

index a6cfaa59717e55fe3970db3804bce759eb805f04..df2504802a0136cb89305f35fd60c01cbbaa6e21 100644 (file)
@@ -81,10 +81,16 @@ struct liodn_id_table fman2_liodn_tbl[] = {
 #endif
 
 struct liodn_id_table sec_liodn_tbl[] = {
-       SET_SEC_JR_LIODN_ENTRY(0, 146, 154),
-       SET_SEC_JR_LIODN_ENTRY(1, 147, 155),
-       SET_SEC_JR_LIODN_ENTRY(2, 178, 186),
-       SET_SEC_JR_LIODN_ENTRY(3, 179, 187),
+       /*
+        * We assume currently that all JR are in the same partition
+        * and as such they need to represent the same LIODN due to
+        * a 4080 rev.2 h/w requirement that DECOs sharing from themselves
+        * or from another DECO have the two Non-SEQ LIODN values equal
+        */
+       SET_SEC_JR_LIODN_ENTRY(0, 146, 154), /* (0, 146, 154), */
+       SET_SEC_JR_LIODN_ENTRY(1, 146, 154), /* (1, 147, 155), */
+       SET_SEC_JR_LIODN_ENTRY(2, 146, 154), /* (2, 178, 186), */
+       SET_SEC_JR_LIODN_ENTRY(3, 146, 154), /* (3, 179, 187), */
        SET_SEC_RTIC_LIODN_ENTRY(a, 144),
        SET_SEC_RTIC_LIODN_ENTRY(b, 145),
        SET_SEC_RTIC_LIODN_ENTRY(c, 176),