svn commit: r325118 - in head/sys: contrib/ncsw/Peripherals/BM contrib/ncsw/Peripherals/FM contrib/ncsw/Peripherals/FM/HC contrib/ncsw/Peripherals/FM/MAC contrib/ncsw/Peripherals/FM/MACSEC contrib/...

Justin Hibbits jhibbits at FreeBSD.org
Mon Oct 30 03:41:06 UTC 2017


Author: jhibbits
Date: Mon Oct 30 03:41:04 2017
New Revision: 325118
URL: https://svnweb.freebsd.org/changeset/base/325118

Log:
  Update DPAA SDK to SDK 2.0
  
  This adds some support for ARM as well as 64-bit.  64-bit on PowerPC is
  currently not working, and ARM support has not been completed or tested on the
  FreeBSD side.
  
  As this was imported from a Linux tree, it includes some Linux-isms
  (ioread/iowrite), so compile with the LinuxKPI for now.  This may change in the
  future.

Added:
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_crc32.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_crc32.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_dtsec.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_dtsec_mii_acc.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_memac.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_memac_mii_acc.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fman_tgec.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/memac.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/memac.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/memac_mii_acc.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MAC/memac_mii_acc.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_guest.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_master.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_master.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_secy.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/MACSEC/fm_macsec_secy.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/crc64.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_kg.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_plcr.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_prs.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_replic.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_replic.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fman_kg.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fman_prs.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Port/fm_port_dsar.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Port/fman_port.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/Rtc/fman_rtc.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/SP/
  head/sys/contrib/ncsw/Peripherals/FM/SP/fm_sp.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/SP/fm_sp.h   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/SP/fman_sp.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/fman_ncsw.c   (contents, props changed)
  head/sys/contrib/ncsw/Peripherals/FM/inc/fm_sp_common.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/Peripherals/fm_macsec_ext.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/Peripherals/fm_vsp_ext.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/Peripherals/mii_acc_ext.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/cores/arm_ext.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/
  head/sys/contrib/ncsw/inc/flib/common/
  head/sys/contrib/ncsw/inc/flib/common/arch/
  head/sys/contrib/ncsw/inc/flib/common/arch/ppc_access.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/common/general.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fman_common.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_enet.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_dtsec.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_dtsec_mii_acc.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_kg.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_memac.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_memac_mii_acc.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_port.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_prs.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_rtc.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_sp.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/flib/fsl_fman_tgec.h   (contents, props changed)
  head/sys/contrib/ncsw/inc/xx_common.h   (contents, props changed)
Deleted:
  head/sys/contrib/ncsw/Peripherals/FM/fm_guest.c
  head/sys/contrib/ncsw/etc/sprint.c
  head/sys/contrib/ncsw/inc/math_ext.h
Modified:
  head/sys/contrib/ncsw/Peripherals/BM/bm.h
  head/sys/contrib/ncsw/Peripherals/BM/bm_pool.c
  head/sys/contrib/ncsw/Peripherals/BM/bman_low.c
  head/sys/contrib/ncsw/Peripherals/BM/bman_private.h
  head/sys/contrib/ncsw/Peripherals/FM/HC/hc.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/dtsec.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/dtsec.h
  head/sys/contrib/ncsw/Peripherals/FM/MAC/dtsec_mii_acc.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/dtsec_mii_acc.h
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fm_mac.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/fm_mac.h
  head/sys/contrib/ncsw/Peripherals/FM/MAC/tgec.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/tgec.h
  head/sys/contrib/ncsw/Peripherals/FM/MAC/tgec_mii_acc.c
  head/sys/contrib/ncsw/Peripherals/FM/MAC/tgec_mii_acc.h
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_cc.c
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_cc.h
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_kg.c
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_manip.c
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_manip.h
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_pcd.c
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_pcd.h
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_pcd_ipc.h
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_plcr.c
  head/sys/contrib/ncsw/Peripherals/FM/Pcd/fm_prs.c
  head/sys/contrib/ncsw/Peripherals/FM/Port/fm_port.c
  head/sys/contrib/ncsw/Peripherals/FM/Port/fm_port.h
  head/sys/contrib/ncsw/Peripherals/FM/Port/fm_port_im.c
  head/sys/contrib/ncsw/Peripherals/FM/Rtc/fm_rtc.c
  head/sys/contrib/ncsw/Peripherals/FM/Rtc/fm_rtc.h
  head/sys/contrib/ncsw/Peripherals/FM/fm.c
  head/sys/contrib/ncsw/Peripherals/FM/fm.h
  head/sys/contrib/ncsw/Peripherals/FM/fm_ipc.h
  head/sys/contrib/ncsw/Peripherals/FM/fm_muram.c
  head/sys/contrib/ncsw/Peripherals/FM/inc/fm_common.h
  head/sys/contrib/ncsw/Peripherals/FM/inc/fm_hc.h
  head/sys/contrib/ncsw/Peripherals/QM/fsl_qman.h
  head/sys/contrib/ncsw/Peripherals/QM/qm.c
  head/sys/contrib/ncsw/Peripherals/QM/qm.h
  head/sys/contrib/ncsw/Peripherals/QM/qm_portal_fqr.c
  head/sys/contrib/ncsw/Peripherals/QM/qman_low.h
  head/sys/contrib/ncsw/Peripherals/QM/qman_private.h
  head/sys/contrib/ncsw/etc/error.c
  head/sys/contrib/ncsw/etc/list.c
  head/sys/contrib/ncsw/etc/memcpy.c
  head/sys/contrib/ncsw/etc/mm.c
  head/sys/contrib/ncsw/etc/mm.h
  head/sys/contrib/ncsw/etc/ncsw_mem.c
  head/sys/contrib/ncsw/inc/Peripherals/bm_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/crc_mac_addr_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/dpaa_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_mac_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_muram_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_pcd_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_port_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/fm_rtc_ext.h
  head/sys/contrib/ncsw/inc/Peripherals/qm_ext.h
  head/sys/contrib/ncsw/inc/core_ext.h
  head/sys/contrib/ncsw/inc/cores/e500v2_ext.h
  head/sys/contrib/ncsw/inc/cores/ppc_ext.h
  head/sys/contrib/ncsw/inc/ddr_std_ext.h
  head/sys/contrib/ncsw/inc/debug_ext.h
  head/sys/contrib/ncsw/inc/endian_ext.h
  head/sys/contrib/ncsw/inc/enet_ext.h
  head/sys/contrib/ncsw/inc/error_ext.h
  head/sys/contrib/ncsw/inc/etc/list_ext.h
  head/sys/contrib/ncsw/inc/etc/mem_ext.h
  head/sys/contrib/ncsw/inc/etc/memcpy_ext.h
  head/sys/contrib/ncsw/inc/etc/mm_ext.h
  head/sys/contrib/ncsw/inc/etc/sprint_ext.h
  head/sys/contrib/ncsw/inc/integrations/dpaa_integration_ext.h
  head/sys/contrib/ncsw/inc/integrations/part_ext.h
  head/sys/contrib/ncsw/inc/ncsw_ext.h
  head/sys/contrib/ncsw/inc/net_ext.h
  head/sys/contrib/ncsw/inc/std_ext.h
  head/sys/contrib/ncsw/inc/stdarg_ext.h
  head/sys/contrib/ncsw/inc/stdlib_ext.h
  head/sys/contrib/ncsw/inc/string_ext.h
  head/sys/contrib/ncsw/inc/types_ext.h
  head/sys/contrib/ncsw/inc/xx_ext.h
  head/sys/contrib/ncsw/user/env/xx.c
  head/sys/dev/dpaa/bman.c
  head/sys/dev/dpaa/fman.c
  head/sys/dev/dpaa/fman.h
  head/sys/dev/dpaa/fman_fdt.c
  head/sys/dev/dpaa/if_dtsec.c
  head/sys/dev/dpaa/if_dtsec_im.c
  head/sys/dev/dpaa/if_dtsec_rm.c
  head/sys/dev/dpaa/portals.h
  head/sys/powerpc/conf/dpaa/config.dpaa
  head/sys/powerpc/conf/dpaa/files.dpaa

Modified: head/sys/contrib/ncsw/Peripherals/BM/bm.h
==============================================================================
--- head/sys/contrib/ncsw/Peripherals/BM/bm.h	Mon Oct 30 03:25:22 2017	(r325117)
+++ head/sys/contrib/ncsw/Peripherals/BM/bm.h	Mon Oct 30 03:41:04 2017	(r325118)
@@ -41,6 +41,7 @@
 #ifndef __BM_H
 #define __BM_H
 
+#include "xx_common.h"
 #include "bm_ext.h"
 #include "mm_ext.h"
 
@@ -261,7 +262,7 @@ typedef struct {
     t_Handle                h_Bm;
     struct bm_portal        *p_BmPortalLow;
     t_BmPortalCallbacks     cbs[BM_NUM_OF_RINGS];
-    int                     irq;
+    uintptr_t               irq;
     int                     cpu; /* This is used for any "core-affine" portals, ie. default portals
                                   * associated to the corresponding cpu. -1 implies that there is no core
                                   * affinity configured. */
@@ -303,7 +304,7 @@ typedef struct {
     uint32_t                    exceptions;
     t_BmExceptionsCallback      *f_Exception;
     t_Handle                    h_App;
-    int                         errIrq;                 /**< error interrupt line; NO_IRQ if interrupts not used */
+    uintptr_t                   errIrq;                 /**< error interrupt line; NO_IRQ if interrupts not used */
     t_BmDriverParams            *p_BmDriverParams;
 } t_Bm;
 
@@ -339,7 +340,7 @@ static __inline__ void BmCommit(t_BmPortal *p_BmPortal
 static __inline__ uint32_t BmBpidGet(t_Bm *p_Bm, bool force, uint32_t base)
 {
     uint64_t ans, size = 1;
-    uint32_t alignment = 1;
+    uint64_t alignment = 1;
 
     if (force)
     {
@@ -347,7 +348,7 @@ static __inline__ uint32_t BmBpidGet(t_Bm *p_Bm, bool 
         {
             ans = MM_GetForce(p_Bm->h_BpidMm,
                               base,
-                              (int)size,
+                              size,
                               "BM BPID MEM");
             ans = base;
         }
@@ -394,6 +395,7 @@ static __inline__ uint32_t BmBpidGet(t_Bm *p_Bm, bool 
                      size,
                      alignment,
                      "BM BPID MEM");
+    KASSERT(ans < UINT32_MAX, ("Oops, %lx > UINT32_MAX!\n", ans));
     return (uint32_t)ans;
 }
 

Modified: head/sys/contrib/ncsw/Peripherals/BM/bm_pool.c
==============================================================================
--- head/sys/contrib/ncsw/Peripherals/BM/bm_pool.c	Mon Oct 30 03:25:22 2017	(r325117)
+++ head/sys/contrib/ncsw/Peripherals/BM/bm_pool.c	Mon Oct 30 03:41:04 2017	(r325118)
@@ -545,26 +545,6 @@ t_Handle BM_POOL_GetBufferContext(t_Handle h_BmPool, v
     return *(t_Handle *)PTR_MOVE(p_Buff, -(sizeof(t_Handle)));
 }
 
-void * BM_POOL_PhysToVirt(t_Handle h_BmPool, physAddress_t addr)
-{
-    t_BmPool            *p_BmPool   = (t_BmPool *)h_BmPool;
-
-    SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, NULL);
-    SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, NULL);
-
-    return p_BmPool->bufferPoolInfo.f_PhysToVirt(addr);
-}
-
-physAddress_t BM_POOL_VirtToPhys(t_Handle h_BmPool, void *p_Buff)
-{
-    t_BmPool            *p_BmPool   = (t_BmPool *)h_BmPool;
-
-    SANITY_CHECK_RETURN_VALUE(p_BmPool, E_INVALID_HANDLE, (physAddress_t)0);
-    SANITY_CHECK_RETURN_VALUE(!p_BmPool->p_BmPoolDriverParams, E_INVALID_HANDLE, (physAddress_t)0);
-
-    return p_BmPool->bufferPoolInfo.f_VirtToPhys(p_Buff);
-}
-
 uint32_t BM_POOL_GetCounter(t_Handle h_BmPool, e_BmPoolCounters counter)
 {
     t_BmPool            *p_BmPool   = (t_BmPool *)h_BmPool;

Modified: head/sys/contrib/ncsw/Peripherals/BM/bman_low.c
==============================================================================
--- head/sys/contrib/ncsw/Peripherals/BM/bman_low.c	Mon Oct 30 03:25:22 2017	(r325117)
+++ head/sys/contrib/ncsw/Peripherals/BM/bman_low.c	Mon Oct 30 03:41:04 2017	(r325118)
@@ -38,6 +38,10 @@
 
  @Description   BM low-level implementation
 *//***************************************************************************/
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <machine/atomic.h>
+
 #include "std_ext.h"
 #include "core_ext.h"
 #include "xx_ext.h"
@@ -259,7 +263,7 @@ void bm_rcr_pci_commit(struct bm_portal *portal, uint8
     rcr->cursor->__dont_write_directly__verb = (uint8_t)(myverb | rcr->vbit);
     RCR_INC(rcr);
     rcr->available--;
-    hwsync();
+    mb();
     bm_out(RCR_PI_CINH, RCR_PTR2IDX(rcr->cursor));
 #ifdef BM_CHECKING
     rcr->busy = 0;
@@ -281,7 +285,7 @@ void bm_rcr_pce_commit(struct bm_portal *portal, uint8
     rcr->cursor->__dont_write_directly__verb = (uint8_t)(myverb | rcr->vbit);
     RCR_INC(rcr);
     rcr->available--;
-    lwsync();
+    wmb();
     bm_cl_out(RCR_PI, RCR_PTR2IDX(rcr->cursor));
 #ifdef BM_CHECKING
     rcr->busy = 0;
@@ -294,7 +298,7 @@ void bm_rcr_pvb_commit(struct bm_portal *portal, uint8
     struct bm_rcr_entry *rcursor;
     ASSERT_COND(rcr->busy);
     ASSERT_COND(rcr->pmode == e_BmPortalPVB);
-    lwsync();
+    rmb();
     rcursor = rcr->cursor;
     rcursor->__dont_write_directly__verb = (uint8_t)(myverb | rcr->vbit);
     dcbf_64(rcursor);
@@ -432,7 +436,7 @@ void bm_mc_commit(struct bm_portal *portal, uint8_t my
 {
     register struct bm_mc *mc = &portal->mc;
     ASSERT_COND(mc->state == mc_user);
-    lwsync();
+    rmb();
     mc->cr->__dont_write_directly__verb = (uint8_t)(myverb | mc->vbit);
     dcbf_64(mc->cr);
     dcbit_ro(mc->rr + mc->rridx);

Modified: head/sys/contrib/ncsw/Peripherals/BM/bman_private.h
==============================================================================
--- head/sys/contrib/ncsw/Peripherals/BM/bman_private.h	Mon Oct 30 03:25:22 2017	(r325117)
+++ head/sys/contrib/ncsw/Peripherals/BM/bman_private.h	Mon Oct 30 03:41:04 2017	(r325118)
@@ -54,76 +54,13 @@
  * and that dcbzl(), dcbfl(), and dcbi() won't fall victim to compiler or
  * execution reordering with respect to other code/instructions that manipulate
  * the same cacheline. */
-#ifdef CORE_E500MC
 
-#if defined(_DIAB_TOOL)
-#define hwsync() \
-do { \
-__asm__ __volatile__ ("sync"); \
-} while(0)
-
-#define lwsync() \
-do { \
-__asm__ __volatile__ ("lwsync"); \
-} while(0)
-
-__asm__ __volatile__ void dcbf (volatile void * addr)
-{
-%reg addr
-    dcbf r0, addr
-}
-
-__asm__ __volatile__ void dcbt_ro (volatile void * addr)
-{
-%reg addr
-    dcbt r0, addr
-}
-
-__asm__ __volatile__ void dcbt_rw (volatile void * addr)
-{
-%reg addr
-    dcbtst r0, addr
-}
-
-__asm__ __volatile__ void dcbzl (volatile void * addr)
-{
-%reg addr
-    dcbzl r0, addr
-}
-
-#define dcbz_64(p) \
-    do { \
-        dcbzl(p); \
-    } while (0)
-
-#define dcbf_64(p) \
-    do { \
-        dcbf(p); \
-    } while (0)
-
-/* Commonly used combo */
-#define dcbit_ro(p) \
-    do { \
-        dcbi(p); \
-        dcbt_ro(p); \
-    } while (0)
-
-#else /* GNU C */
-#define hwsync() \
-    do { \
-        __asm__ __volatile__ ("sync" : : : "memory"); \
-    } while(0)
-
-#define lwsync() \
-    do { \
-        __asm__ __volatile__ ("lwsync" : : : "memory"); \
-    } while(0)
-
 #define dcbf(addr)  \
     do { \
         __asm__ __volatile__ ("dcbf 0, %0" : : "r" (addr)); \
     } while(0)
 
+#ifdef CORE_E500MC
 #define dcbt_ro(addr)   \
     do { \
         __asm__ __volatile__ ("dcbt 0, %0" : : "r" (addr)); \
@@ -156,46 +93,34 @@ __asm__ __volatile__ void dcbzl (volatile void * addr)
         dcbt_ro(p); \
     } while (0)
 
-#endif /* _DIAB_TOOL */
-
 #else
-#define hwsync      CORE_MemoryBarrier
-#define lwsync      hwsync
 
-#define dcbf(p) \
-    do { \
-        __asm__ __volatile__ ("dcbf 0,%0" : : "r" (p)); \
-    } while(0)
 #define dcbt_ro(p) \
     do { \
         __asm__ __volatile__ ("dcbt 0,%0" : : "r" (p)); \
         lwsync(); \
     } while(0)
-#define dcbt_rw(p) \
-    do { \
-        __asm__ __volatile__ ("dcbtst 0,%0" : : "r" (p)); \
-    } while(0)
 #define dcbz(p) \
     do { \
         __asm__ __volatile__ ("dcbz 0,%0" : : "r" (p)); \
     } while (0)
 #define dcbz_64(p) \
     do { \
-        dcbz((uint32_t)p + 32); \
+        dcbz((char *)p + 32); \
         dcbz(p);    \
     } while (0)
 #define dcbf_64(p) \
     do { \
-        dcbf((uint32_t)p + 32); \
+        dcbf((char *)p + 32); \
         dcbf(p); \
     } while (0)
 /* Commonly used combo */
 #define dcbit_ro(p) \
     do { \
         dcbi(p); \
-        dcbi((uint32_t)p + 32); \
+        dcbi((char *)p + 32); \
         dcbt_ro(p); \
-        dcbt_ro((uint32_t)p + 32); \
+        dcbt_ro((char *)p + 32); \
     } while (0)
 
 #endif /* CORE_E500MC */

Modified: head/sys/contrib/ncsw/Peripherals/FM/HC/hc.c
==============================================================================
--- head/sys/contrib/ncsw/Peripherals/FM/HC/hc.c	Mon Oct 30 03:25:22 2017	(r325117)
+++ head/sys/contrib/ncsw/Peripherals/FM/HC/hc.c	Mon Oct 30 03:41:04 2017	(r325118)
@@ -1,5 +1,5 @@
-/* Copyright (c) 2008-2011 Freescale Semiconductor, Inc.
- * All rights reserved.
+/*
+ * Copyright 2008-2012 Freescale Semiconductor Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -30,6 +30,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+
 #include "std_ext.h"
 #include "error_ext.h"
 #include "sprint_ext.h"
@@ -39,24 +40,54 @@
 #include "fm_hc.h"
 
 
+/**************************************************************************//**
+ @Description       defaults
+*//***************************************************************************/
+#define DEFAULT_dataMemId                                       0
+
 #define HC_HCOR_OPCODE_PLCR_PRFL                                0x0
 #define HC_HCOR_OPCODE_KG_SCM                                   0x1
 #define HC_HCOR_OPCODE_SYNC                                     0x2
 #define HC_HCOR_OPCODE_CC                                       0x3
+#define HC_HCOR_OPCODE_CC_AGE_MASK                              0x4
 #define HC_HCOR_OPCODE_CC_CAPWAP_REASSM_TIMEOUT                 0x5
+#define HC_HCOR_OPCODE_CC_REASSM_TIMEOUT                        0x10
+#define HC_HCOR_OPCODE_CC_IP_FRAG_INITIALIZATION                0x11
+#define HC_HCOR_OPCODE_CC_UPDATE_WITH_AGING                     0x13
+#define HC_HCOR_ACTION_REG_REASSM_TIMEOUT_ACTIVE_SHIFT          24
+#define HC_HCOR_EXTRA_REG_REASSM_TIMEOUT_TSBS_SHIFT             24
+#define HC_HCOR_EXTRA_REG_CC_AGING_ADD                          0x80000000
+#define HC_HCOR_EXTRA_REG_CC_AGING_REMOVE                       0x40000000
+#define HC_HCOR_EXTRA_REG_CC_AGING_CHANGE_MASK                  0xC0000000
+#define HC_HCOR_EXTRA_REG_CC_REMOVE_INDX_SHIFT                  24
+#define HC_HCOR_EXTRA_REG_CC_REMOVE_INDX_MASK                   0x1F000000
+#define HC_HCOR_ACTION_REG_REASSM_TIMEOUT_RES_SHIFT             16
+#define HC_HCOR_ACTION_REG_REASSM_TIMEOUT_RES_MASK              0xF
+#define HC_HCOR_ACTION_REG_IP_FRAG_SCRATCH_POOL_CMD_SHIFT       24
+#define HC_HCOR_ACTION_REG_IP_FRAG_SCRATCH_POOL_BPID            16
 
 #define HC_HCOR_GBL                         0x20000000
 
-#define SIZE_OF_HC_FRAME_PORT_REGS          (sizeof(t_HcFrame)-sizeof(t_FmPcdKgInterModuleSchemeRegs)+sizeof(t_FmPcdKgPortRegs))
+#define HC_HCOR_KG_SCHEME_COUNTER           0x00000400
+
+#if (DPAA_VERSION == 10)
+#define HC_HCOR_KG_SCHEME_REGS_MASK         0xFFFFF800
+#else
+#define HC_HCOR_KG_SCHEME_REGS_MASK         0xFFFFFE00
+#endif /* (DPAA_VERSION == 10) */
+
+#define SIZE_OF_HC_FRAME_PORT_REGS          (sizeof(t_HcFrame)-sizeof(struct fman_kg_scheme_regs)+sizeof(t_FmPcdKgPortRegs))
 #define SIZE_OF_HC_FRAME_SCHEME_REGS        sizeof(t_HcFrame)
-#define SIZE_OF_HC_FRAME_PROFILES_REGS      (sizeof(t_HcFrame)-sizeof(t_FmPcdKgInterModuleSchemeRegs)+sizeof(t_FmPcdPlcrInterModuleProfileRegs))
-#define SIZE_OF_HC_FRAME_PROFILE_CNT        (sizeof(t_HcFrame)-sizeof(t_FmPcdPlcrInterModuleProfileRegs)+sizeof(uint32_t))
+#define SIZE_OF_HC_FRAME_PROFILES_REGS      (sizeof(t_HcFrame)-sizeof(struct fman_kg_scheme_regs)+sizeof(t_FmPcdPlcrProfileRegs))
+#define SIZE_OF_HC_FRAME_PROFILE_CNT        (sizeof(t_HcFrame)-sizeof(t_FmPcdPlcrProfileRegs)+sizeof(uint32_t))
 #define SIZE_OF_HC_FRAME_READ_OR_CC_DYNAMIC 16
 
+#define HC_CMD_POOL_SIZE                    (INTG_MAX_NUM_OF_CORES)
+
 #define BUILD_FD(len)                     \
 do {                                      \
     memset(&fmFd, 0, sizeof(t_DpaaFD));   \
-    DPAA_FD_SET_ADDR(&fmFd, p_HcFrame);    \
+    DPAA_FD_SET_ADDR(&fmFd, p_HcFrame);   \
     DPAA_FD_SET_OFFSET(&fmFd, 0);         \
     DPAA_FD_SET_LENGTH(&fmFd, len);       \
 } while (0)
@@ -65,50 +96,29 @@ do {                                      \
 #if defined(__MWERKS__) && !defined(__GNUC__)
 #pragma pack(push,1)
 #endif /* defined(__MWERKS__) && ... */
-#define MEM_MAP_START
 
-/**************************************************************************//**
- @Description   PCD KG scheme registers
-*//***************************************************************************/
-typedef _Packed struct t_FmPcdKgSchemeRegsWithoutCounter {
-    volatile uint32_t kgse_mode;    /**< MODE */
-    volatile uint32_t kgse_ekfc;    /**< Extract Known Fields Command */
-    volatile uint32_t kgse_ekdv;    /**< Extract Known Default Value */
-    volatile uint32_t kgse_bmch;    /**< Bit Mask Command High */
-    volatile uint32_t kgse_bmcl;    /**< Bit Mask Command Low */
-    volatile uint32_t kgse_fqb;     /**< Frame Queue Base */
-    volatile uint32_t kgse_hc;      /**< Hash Command */
-    volatile uint32_t kgse_ppc;     /**< Policer Profile Command */
-    volatile uint32_t kgse_gec[FM_PCD_KG_NUM_OF_GENERIC_REGS];
-                                    /**< Generic Extract Command */
-    volatile uint32_t kgse_dv0;     /**< KeyGen Scheme Entry Default Value 0 */
-    volatile uint32_t kgse_dv1;     /**< KeyGen Scheme Entry Default Value 1 */
-    volatile uint32_t kgse_ccbs;    /**< KeyGen Scheme Entry Coarse Classification Bit*/
-    volatile uint32_t kgse_mv;      /**< KeyGen Scheme Entry Match vector */
-} _PackedType t_FmPcdKgSchemeRegsWithoutCounter;
-
-typedef _Packed struct t_FmPcdKgPortRegs {
+typedef struct t_FmPcdKgPortRegs {
     volatile uint32_t                       spReg;
     volatile uint32_t                       cppReg;
-} _PackedType t_FmPcdKgPortRegs;
+} t_FmPcdKgPortRegs;
 
-typedef _Packed struct t_HcFrame {
+typedef struct t_HcFrame {
     volatile uint32_t                           opcode;
     volatile uint32_t                           actionReg;
     volatile uint32_t                           extraReg;
     volatile uint32_t                           commandSequence;
     union {
-        t_FmPcdKgInterModuleSchemeRegs          schemeRegs;
-        t_FmPcdKgInterModuleSchemeRegs          schemeRegsWithoutCounter;
-        t_FmPcdPlcrInterModuleProfileRegs       profileRegs;
+        struct fman_kg_scheme_regs              schemeRegs;
+        struct fman_kg_scheme_regs              schemeRegsWithoutCounter;
+        t_FmPcdPlcrProfileRegs                  profileRegs;
         volatile uint32_t                       singleRegForWrite;    /* for writing SP, CPP, profile counter */
         t_FmPcdKgPortRegs                       portRegsForRead;
         volatile uint32_t                       clsPlanEntries[CLS_PLAN_NUM_PER_GRP];
         t_FmPcdCcCapwapReassmTimeoutParams      ccCapwapReassmTimeout;
+        t_FmPcdCcReassmTimeoutParams            ccReassmTimeout;
     } hcSpecificData;
-} _PackedType t_HcFrame;
+} t_HcFrame;
 
-#define MEM_MAP_END
 #if defined(__MWERKS__) && !defined(__GNUC__)
 #pragma pack(pop)
 #endif /* defined(__MWERKS__) && ... */
@@ -119,114 +129,108 @@ typedef struct t_FmHc {
     t_Handle                    h_HcPortDev;
     t_FmPcdQmEnqueueCallback    *f_QmEnqueue;     /**< A callback for enqueuing frames to the QM */
     t_Handle                    h_QmArg;          /**< A handle to the QM module */
-    uint8_t                     padTill16;
+    uint8_t                     dataMemId;        /**< Memory partition ID for data buffers */
 
-    uint32_t                    seqNum;
-    volatile bool               wait[32];
+    uint32_t                    seqNum[HC_CMD_POOL_SIZE];   /* FIFO of seqNum to use when
+                                                               taking buffer */
+    uint32_t                    nextSeqNumLocation;         /* seqNum location in seqNum[] for next buffer */
+    volatile bool               enqueued[HC_CMD_POOL_SIZE]; /* HC is active - frame is enqueued
+                                                               and not confirmed yet */
+    t_HcFrame                   *p_Frm[HC_CMD_POOL_SIZE];
 } t_FmHc;
 
 
-static __inline__ t_Error EnQFrm(t_FmHc *p_FmHc, t_DpaaFD *p_FmFd, volatile uint32_t *p_SeqNum)
+static t_Error FillBufPool(t_FmHc *p_FmHc)
 {
-    t_Error     err = E_OK;
-    uint32_t    savedSeqNum;
-    uint32_t    intFlags;
-    uint32_t    timeout=100;
+    uint32_t i;
 
-    intFlags = FmPcdLock(p_FmHc->h_FmPcd);
-    *p_SeqNum = p_FmHc->seqNum;
-    savedSeqNum = p_FmHc->seqNum;
-    p_FmHc->seqNum = (uint32_t)((p_FmHc->seqNum+1)%32);
-    ASSERT_COND(!p_FmHc->wait[savedSeqNum]);
-    p_FmHc->wait[savedSeqNum] = TRUE;
-    FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
-    DBG(TRACE, ("Send Hc, SeqNum %d, FD at 0x%x, fd offset 0x%x",
-                savedSeqNum,DPAA_FD_GET_ADDR(p_FmFd),DPAA_FD_GET_OFFSET(p_FmFd)));
-    err = p_FmHc->f_QmEnqueue(p_FmHc->h_QmArg, (void *)p_FmFd);
-    if(err)
-        RETURN_ERROR(MINOR, err, ("HC enqueue failed"));
+    ASSERT_COND(p_FmHc);
 
-    while (p_FmHc->wait[savedSeqNum] && --timeout)
-        XX_UDelay(100);
+    for (i = 0; i < HC_CMD_POOL_SIZE; i++)
+    {
+#ifdef FM_LOCKUP_ALIGNMENT_ERRATA_FMAN_SW004
+        p_FmHc->p_Frm[i] = (t_HcFrame *)XX_MallocSmart((sizeof(t_HcFrame) + (16 - (sizeof(t_FmHc) % 16))),
+                                                       p_FmHc->dataMemId,
+                                                       16);
+#else
+        p_FmHc->p_Frm[i] = (t_HcFrame *)XX_MallocSmart(sizeof(t_HcFrame),
+                                                       p_FmHc->dataMemId,
+                                                       16);
+#endif /* FM_LOCKUP_ALIGNMENT_ERRATA_FMAN_SW004 */
+        if (!p_FmHc->p_Frm[i])
+            RETURN_ERROR(MAJOR, E_NO_MEMORY, ("FM HC frames!"));
+    }
 
-    if (!timeout)
-        RETURN_ERROR(MINOR, E_TIMEOUT, ("HC Callback, timeout exceeded"));
+    /* Initialize FIFO of seqNum to use during GetBuf */
+    for (i = 0; i < HC_CMD_POOL_SIZE; i++)
+    {
+        p_FmHc->seqNum[i] = i;
+    }
+    p_FmHc->nextSeqNumLocation = 0;
 
-    return err;
+    return E_OK;
 }
 
-static t_Error CcHcDoDynamicChange(t_FmHc *p_FmHc, t_Handle p_OldPointer, t_Handle p_NewPointer)
+static __inline__ t_HcFrame * GetBuf(t_FmHc *p_FmHc, uint32_t *p_SeqNum)
 {
-    t_HcFrame               *p_HcFrame;
-    t_DpaaFD                fmFd;
-    t_Error                 err = E_OK;
+    uint32_t    intFlags;
 
     ASSERT_COND(p_FmHc);
 
-    p_HcFrame = (t_HcFrame *)XX_MallocSmart((sizeof(t_HcFrame) + p_FmHc->padTill16), 0, 16);
-    if (!p_HcFrame)
-        RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame obj"));
+    intFlags = FmPcdLock(p_FmHc->h_FmPcd);
 
-    memset(p_HcFrame, 0, sizeof(t_HcFrame));
-    p_HcFrame->opcode = (uint32_t)(HC_HCOR_GBL | HC_HCOR_OPCODE_CC);
-    p_HcFrame->actionReg  = FmPcdCcGetNodeAddrOffsetFromNodeInfo(p_FmHc->h_FmPcd, p_NewPointer);
-    if(p_HcFrame->actionReg == (uint32_t)ILLEGAL_BASE)
+    if (p_FmHc->nextSeqNumLocation == HC_CMD_POOL_SIZE)
     {
-        XX_FreeSmart(p_HcFrame);
-        RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Something wrong with base address"));
+        /* No more buffers */
+        FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
+        return NULL;
     }
 
-    p_HcFrame->actionReg  |=  0xc0000000;
-        p_HcFrame->extraReg   = FmPcdCcGetNodeAddrOffsetFromNodeInfo(p_FmHc->h_FmPcd, p_OldPointer);
-    if(p_HcFrame->extraReg == (uint32_t)ILLEGAL_BASE)
-    {
-        XX_FreeSmart(p_HcFrame);
-        RETURN_ERROR(MAJOR, E_INVALID_VALUE, ("Something wrong with base address"));
-    }
+    *p_SeqNum = p_FmHc->seqNum[p_FmHc->nextSeqNumLocation];
+    p_FmHc->nextSeqNumLocation++;
 
-    BUILD_FD(SIZE_OF_HC_FRAME_READ_OR_CC_DYNAMIC);
+    FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
+    return p_FmHc->p_Frm[*p_SeqNum];
+}
 
-    if ((err = EnQFrm(p_FmHc, &fmFd, &p_HcFrame->commandSequence)) != E_OK)
-    {
-        XX_FreeSmart(p_HcFrame);
-        RETURN_ERROR(MINOR, err, NO_MSG);
-    }
+static __inline__ void PutBuf(t_FmHc *p_FmHc, t_HcFrame *p_Buf, uint32_t seqNum)
+{
+    uint32_t    intFlags;
 
-    XX_FreeSmart(p_HcFrame);
+    UNUSED(p_Buf);
 
-    return E_OK;
+    intFlags = FmPcdLock(p_FmHc->h_FmPcd);
+    ASSERT_COND(p_FmHc->nextSeqNumLocation);
+    p_FmHc->nextSeqNumLocation--;
+    p_FmHc->seqNum[p_FmHc->nextSeqNumLocation] = seqNum;
+    FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
 }
 
-static t_Error HcDynamicChange(t_FmHc *p_FmHc,t_List *h_OldPointersLst, t_List *h_NewPointersLst, t_Handle *h_Params)
+static __inline__ t_Error EnQFrm(t_FmHc *p_FmHc, t_DpaaFD *p_FmFd, uint32_t seqNum)
 {
-
-    t_List      *p_PosOld, *p_PosNew;
-    uint16_t    i = 0;
     t_Error     err = E_OK;
-    uint8_t     numOfModifiedPtr;
+    uint32_t    intFlags;
+    uint32_t    timeout=100;
 
-    SANITY_CHECK_RETURN_ERROR((LIST_NumOfObjs(h_NewPointersLst) == LIST_NumOfObjs(h_OldPointersLst)),E_INVALID_STATE);
+    intFlags = FmPcdLock(p_FmHc->h_FmPcd);
+    ASSERT_COND(!p_FmHc->enqueued[seqNum]);
+    p_FmHc->enqueued[seqNum] = TRUE;
+    FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
+    DBG(TRACE, ("Send Hc, SeqNum %d, buff at 0x%x, fd offset 0x%x",
+                seqNum,
+                DPAA_FD_GET_ADDR(p_FmFd),
+                DPAA_FD_GET_OFFSET(p_FmFd)));
+    err = p_FmHc->f_QmEnqueue(p_FmHc->h_QmArg, (void *)p_FmFd);
+    if (err)
+        RETURN_ERROR(MINOR, err, ("HC enqueue failed"));
 
-    numOfModifiedPtr = (uint8_t)LIST_NumOfObjs(h_NewPointersLst);
-    p_PosNew = NCSW_LIST_FIRST(h_NewPointersLst);
-    p_PosOld = NCSW_LIST_FIRST(h_OldPointersLst);
-    for(i = 0; i < numOfModifiedPtr; i++)
-    {
-        err = CcHcDoDynamicChange(p_FmHc, p_PosOld, p_PosNew);
-        if(err)
-        {
-            FmPcdCcReleaseModifiedDataStructure(p_FmHc->h_FmPcd, h_OldPointersLst, h_NewPointersLst, i, h_Params);
-            RETURN_ERROR(MAJOR, err, ("For part of nodes changes are done - situation is danger"));
-        }
-        p_PosNew = NCSW_LIST_NEXT(p_PosNew);
-        p_PosOld = NCSW_LIST_NEXT(p_PosOld);
-    }
+    while (p_FmHc->enqueued[seqNum] && --timeout)
+        XX_UDelay(100);
 
-    err = FmPcdCcReleaseModifiedDataStructure(p_FmHc->h_FmPcd, h_OldPointersLst, h_NewPointersLst, i, h_Params);
-    if(err)
-        RETURN_ERROR(MAJOR, err, NO_MSG);
+    if (!timeout)
+        RETURN_ERROR(MINOR, E_TIMEOUT, ("HC Callback, timeout exceeded"));
 
-    return E_OK;
+    return err;
 }
 
 
@@ -234,7 +238,7 @@ t_Handle FmHcConfigAndInit(t_FmHcParams *p_FmHcParams)
 {
     t_FmHc          *p_FmHc;
     t_FmPortParams  fmPortParam;
-    t_Error         err = E_OK;
+    t_Error         err;
 
     p_FmHc = (t_FmHc *)XX_Malloc(sizeof(t_FmHc));
     if (!p_FmHc)
@@ -247,17 +251,19 @@ t_Handle FmHcConfigAndInit(t_FmHcParams *p_FmHcParams)
     p_FmHc->h_FmPcd             = p_FmHcParams->h_FmPcd;
     p_FmHc->f_QmEnqueue         = p_FmHcParams->params.f_QmEnqueue;
     p_FmHc->h_QmArg             = p_FmHcParams->params.h_QmArg;
+    p_FmHc->dataMemId           = DEFAULT_dataMemId;
 
+    err = FillBufPool(p_FmHc);
+    if (err != E_OK)
+    {
+        REPORT_ERROR(MAJOR, err, NO_MSG);
+        FmHcFree(p_FmHc);
+        return NULL;
+    }
+
     if (!FmIsMaster(p_FmHcParams->h_Fm))
         return (t_Handle)p_FmHc;
 
-/*
-TKT056919 - axi12axi0 can hang if read request follows the single byte write on the very next cycle
-TKT038900 - FM dma lockup occur due to AXI slave protocol violation
-*/
-#ifdef FM_LOCKUP_ALIGNMENT_ERRATA_FMAN_SW004
-    p_FmHc->padTill16 = 16 - (sizeof(t_FmHc) % 16);
-#endif /* FM_LOCKUP_ALIGNMENT_ERRATA_FMAN_SW004 */
     memset(&fmPortParam, 0, sizeof(fmPortParam));
     fmPortParam.baseAddr    = p_FmHcParams->params.portBaseAddr;
     fmPortParam.portType    = e_FM_PORT_TYPE_OH_HOST_COMMAND;
@@ -270,24 +276,36 @@ TKT038900 - FM dma lockup occur due to AXI slave proto
     fmPortParam.specificParams.nonRxParams.qmChannel    = p_FmHcParams->params.qmChannel;
 
     p_FmHc->h_HcPortDev = FM_PORT_Config(&fmPortParam);
-    if(!p_FmHc->h_HcPortDev)
+    if (!p_FmHc->h_HcPortDev)
     {
         REPORT_ERROR(MAJOR, E_INVALID_HANDLE, ("FM HC port!"));
         XX_Free(p_FmHc);
         return NULL;
     }
 
+    err = FM_PORT_ConfigMaxFrameLength(p_FmHc->h_HcPortDev,
+                                       (uint16_t)sizeof(t_HcFrame));
+
+    if (err != E_OK)
+    {
+        REPORT_ERROR(MAJOR, err, ("FM HC port init!"));
+        FmHcFree(p_FmHc);
+        return NULL;
+    }
+
     /* final init */
-    if ((err = FM_PORT_Init(p_FmHc->h_HcPortDev)) != E_OK)
+    err = FM_PORT_Init(p_FmHc->h_HcPortDev);
+    if (err != E_OK)
     {
-        REPORT_ERROR(MAJOR, err, ("FM HC port!"));
+        REPORT_ERROR(MAJOR, err, ("FM HC port init!"));
         FmHcFree(p_FmHc);
         return NULL;
     }
 
-    if ((err = FM_PORT_Enable(p_FmHc->h_HcPortDev)) != E_OK)
+    err = FM_PORT_Enable(p_FmHc->h_HcPortDev);
+    if (err != E_OK)
     {
-        REPORT_ERROR(MAJOR, err, ("FM HC port!"));
+        REPORT_ERROR(MAJOR, err, ("FM HC port enable!"));
         FmHcFree(p_FmHc);
         return NULL;
     }
@@ -298,28 +316,40 @@ TKT038900 - FM dma lockup occur due to AXI slave proto
 void FmHcFree(t_Handle h_FmHc)
 {
     t_FmHc  *p_FmHc = (t_FmHc*)h_FmHc;
+    int     i;
 
     if (!p_FmHc)
         return;
 
+    for (i=0; i<HC_CMD_POOL_SIZE; i++)
+        if (p_FmHc->p_Frm[i])
+            XX_FreeSmart(p_FmHc->p_Frm[i]);
+        else
+            break;
+
     if (p_FmHc->h_HcPortDev)
         FM_PORT_Free(p_FmHc->h_HcPortDev);
 
     XX_Free(p_FmHc);
 }
 
-#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
-t_Error FmHcDumpRegs(t_Handle h_FmHc)
+/*****************************************************************************/
+t_Error FmHcSetFramesDataMemory(t_Handle h_FmHc,
+                                uint8_t  memId)
 {
     t_FmHc  *p_FmHc = (t_FmHc*)h_FmHc;
+    int     i;
 
     SANITY_CHECK_RETURN_ERROR(p_FmHc, E_INVALID_HANDLE);
-    SANITY_CHECK_RETURN_ERROR(p_FmHc->h_HcPortDev, E_INVALID_HANDLE);
 
-    return  FM_PORT_DumpRegs(p_FmHc->h_HcPortDev);
+    p_FmHc->dataMemId            = memId;
 
+    for (i=0; i<HC_CMD_POOL_SIZE; i++)
+        if (p_FmHc->p_Frm[i])
+            XX_FreeSmart(p_FmHc->p_Frm[i]);
+
+    return FillBufPool(p_FmHc);
 }
-#endif /* (defined(DEBUG_ERRORS) && ... */
 
 void FmHcTxConf(t_Handle h_FmHc, t_DpaaFD *p_Fd)
 {
@@ -335,134 +365,55 @@ void FmHcTxConf(t_Handle h_FmHc, t_DpaaFD *p_Fd)
     DBG(TRACE, ("Hc Conf, SeqNum %d, FD at 0x%x, fd offset 0x%x",
                 p_HcFrame->commandSequence, DPAA_FD_GET_ADDR(p_Fd), DPAA_FD_GET_OFFSET(p_Fd)));
 
-    if (!(p_FmHc->wait[p_HcFrame->commandSequence]))
+    if (!(p_FmHc->enqueued[p_HcFrame->commandSequence]))
         REPORT_ERROR(MINOR, E_INVALID_FRAME, ("Not an Host-Command frame received!"));
     else
-        p_FmHc->wait[p_HcFrame->commandSequence] = FALSE;
+        p_FmHc->enqueued[p_HcFrame->commandSequence] = FALSE;
     FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
 }
 
-t_Handle FmHcPcdKgSetScheme(t_Handle h_FmHc, t_FmPcdKgSchemeParams *p_Scheme)
+t_Error FmHcPcdKgSetScheme(t_Handle                    h_FmHc,
+                           t_Handle                    h_Scheme,
+                           struct fman_kg_scheme_regs  *p_SchemeRegs,
+                           bool                        updateCounter)
 {
     t_FmHc                              *p_FmHc = (t_FmHc*)h_FmHc;
     t_Error                             err = E_OK;
-    t_FmPcdKgInterModuleSchemeRegs      schemeRegs;
     t_HcFrame                           *p_HcFrame;
     t_DpaaFD                            fmFd;
-    uint32_t                            intFlags;
-    uint8_t                             physicalSchemeId, relativeSchemeId;
+    uint8_t                             physicalSchemeId;
+    uint32_t                            seqNum;
 
-    p_HcFrame = (t_HcFrame *)XX_MallocSmart((sizeof(t_HcFrame) + p_FmHc->padTill16), 0, 16);
+    p_HcFrame = GetBuf(p_FmHc, &seqNum);
     if (!p_HcFrame)
-    {
-        REPORT_ERROR(MINOR, E_NO_MEMORY, ("HC Frame obj"));
-        return NULL;
-    }
+        RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame object"));
 
-    if(!p_Scheme->modify)
-    {
-        /* check that schemeId is in range */
-        if(p_Scheme->id.relativeSchemeId >= FmPcdKgGetNumOfPartitionSchemes(p_FmHc->h_FmPcd))
-        {
-            REPORT_ERROR(MAJOR, E_NOT_IN_RANGE, ("Scheme is out of range"));
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
+    physicalSchemeId = FmPcdKgGetSchemeId(h_Scheme);
 
-        relativeSchemeId = p_Scheme->id.relativeSchemeId;
-
-        if (FmPcdKgSchemeTryLock(p_FmHc->h_FmPcd, relativeSchemeId, FALSE))
-        {
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
-
-        physicalSchemeId = FmPcdKgGetPhysicalSchemeId(p_FmHc->h_FmPcd, relativeSchemeId);
-
-        memset(p_HcFrame, 0, sizeof(t_HcFrame));
-        p_HcFrame->opcode = (uint32_t)(HC_HCOR_GBL | HC_HCOR_OPCODE_KG_SCM);
-        p_HcFrame->actionReg  = FmPcdKgBuildReadSchemeActionReg(physicalSchemeId);
-        p_HcFrame->extraReg = 0xFFFFF800;
-
-        BUILD_FD(SIZE_OF_HC_FRAME_READ_OR_CC_DYNAMIC);
-
-        if ((err = EnQFrm(p_FmHc, &fmFd, &p_HcFrame->commandSequence)) != E_OK)
-        {
-            FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-            REPORT_ERROR(MINOR, err, NO_MSG);
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
-
-        /* check if this scheme is already used */
-        if (FmPcdKgHwSchemeIsValid(p_HcFrame->hcSpecificData.schemeRegs.kgse_mode))
-        {
-            FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-            REPORT_ERROR(MAJOR, E_ALREADY_EXISTS, ("Scheme is already used"));
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
-    }
-    else
-    {
-        intFlags = FmPcdLock(p_FmHc->h_FmPcd);
-        physicalSchemeId = (uint8_t)(PTR_TO_UINT(p_Scheme->id.h_Scheme)-1);
-        relativeSchemeId = FmPcdKgGetRelativeSchemeId(p_FmHc->h_FmPcd, physicalSchemeId);
-        if( relativeSchemeId == FM_PCD_KG_NUM_OF_SCHEMES)
-        {
-            FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
-            REPORT_ERROR(MAJOR, E_NOT_IN_RANGE, NO_MSG);
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
-        err = FmPcdKgSchemeTryLock(p_FmHc->h_FmPcd, relativeSchemeId, TRUE);
-        FmPcdUnlock(p_FmHc->h_FmPcd, intFlags);
-        if (err)
-        {
-            XX_FreeSmart(p_HcFrame);
-            return NULL;
-        }
-    }
-
-    err = FmPcdKgBuildScheme(p_FmHc->h_FmPcd, p_Scheme, &schemeRegs);
-    if(err)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        REPORT_ERROR(MAJOR, err, NO_MSG);
-        XX_FreeSmart(p_HcFrame);
-        return NULL;
-    }
-
     memset(p_HcFrame, 0, sizeof(t_HcFrame));
     p_HcFrame->opcode = (uint32_t)(HC_HCOR_GBL | HC_HCOR_OPCODE_KG_SCM);
-    p_HcFrame->actionReg  = FmPcdKgBuildWriteSchemeActionReg(physicalSchemeId, p_Scheme->schemeCounter.update);
-    p_HcFrame->extraReg = 0xFFFFF800;
-    memcpy(&p_HcFrame->hcSpecificData.schemeRegs, &schemeRegs, sizeof(t_FmPcdKgInterModuleSchemeRegs));
-    if(!p_Scheme->schemeCounter.update)
+    p_HcFrame->actionReg  = FmPcdKgBuildWriteSchemeActionReg(physicalSchemeId, updateCounter);
+    p_HcFrame->extraReg = HC_HCOR_KG_SCHEME_REGS_MASK;
+    memcpy(&p_HcFrame->hcSpecificData.schemeRegs, p_SchemeRegs, sizeof(struct fman_kg_scheme_regs));
+    if (!updateCounter)
     {
-        p_HcFrame->hcSpecificData.schemeRegs.kgse_dv0   = schemeRegs.kgse_dv0;
-        p_HcFrame->hcSpecificData.schemeRegs.kgse_dv1   = schemeRegs.kgse_dv1;
-        p_HcFrame->hcSpecificData.schemeRegs.kgse_ccbs  = schemeRegs.kgse_ccbs;
-        p_HcFrame->hcSpecificData.schemeRegs.kgse_mv    = schemeRegs.kgse_mv;
+        p_HcFrame->hcSpecificData.schemeRegs.kgse_dv0   = p_SchemeRegs->kgse_dv0;
+        p_HcFrame->hcSpecificData.schemeRegs.kgse_dv1   = p_SchemeRegs->kgse_dv1;
+        p_HcFrame->hcSpecificData.schemeRegs.kgse_ccbs  = p_SchemeRegs->kgse_ccbs;
+        p_HcFrame->hcSpecificData.schemeRegs.kgse_mv    = p_SchemeRegs->kgse_mv;
     }
+    p_HcFrame->commandSequence = seqNum;
 
     BUILD_FD(sizeof(t_HcFrame));
 
-    if ((err = EnQFrm(p_FmHc, &fmFd, &p_HcFrame->commandSequence)) != E_OK)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        REPORT_ERROR(MINOR, err, NO_MSG);
-        XX_FreeSmart(p_HcFrame);
-        return NULL;
-    }
+    err = EnQFrm(p_FmHc, &fmFd, seqNum);
 
-    FmPcdKgValidateSchemeSw(p_FmHc->h_FmPcd, relativeSchemeId);
+    PutBuf(p_FmHc, p_HcFrame, seqNum);
 
-    FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
+    if (err != E_OK)
+        RETURN_ERROR(MINOR, err, NO_MSG);
 
-    XX_FreeSmart(p_HcFrame);
-
-    return (t_Handle)(UINT_TO_PTR(physicalSchemeId + 1));
+    return E_OK;
 }
 
 t_Error FmHcPcdKgDeleteScheme(t_Handle h_FmHc, t_Handle h_Scheme)
@@ -471,213 +422,182 @@ t_Error FmHcPcdKgDeleteScheme(t_Handle h_FmHc, t_Handl
     t_Error     err = E_OK;
     t_HcFrame   *p_HcFrame;
     t_DpaaFD    fmFd;
-    uint8_t     relativeSchemeId;
-    uint8_t     physicalSchemeId = (uint8_t)(PTR_TO_UINT(h_Scheme)-1);
+    uint8_t     physicalSchemeId = FmPcdKgGetSchemeId(h_Scheme);
+    uint32_t    seqNum;
 
-    relativeSchemeId = FmPcdKgGetRelativeSchemeId(p_FmHc->h_FmPcd, physicalSchemeId);
-
-    if ((err = FmPcdKgSchemeTryLock(p_FmHc->h_FmPcd, relativeSchemeId, FALSE)) != E_OK)
-        RETURN_ERROR(MAJOR, err, NO_MSG);
-
-    if(relativeSchemeId == FM_PCD_KG_NUM_OF_SCHEMES)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        RETURN_ERROR(MAJOR, E_NOT_IN_RANGE, NO_MSG);
-    }
-
-    err = FmPcdKgCheckInvalidateSchemeSw(p_FmHc->h_FmPcd, relativeSchemeId);
-    if (err)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        RETURN_ERROR(MAJOR, err, NO_MSG);
-    }
-
-    p_HcFrame = (t_HcFrame *)XX_MallocSmart((sizeof(t_HcFrame) + p_FmHc->padTill16), 0, 16);
+    p_HcFrame = GetBuf(p_FmHc, &seqNum);
     if (!p_HcFrame)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame obj"));
-    }
+        RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame object"));
+
     memset(p_HcFrame, 0, sizeof(t_HcFrame));
     p_HcFrame->opcode = (uint32_t)(HC_HCOR_GBL | HC_HCOR_OPCODE_KG_SCM);
     p_HcFrame->actionReg  = FmPcdKgBuildWriteSchemeActionReg(physicalSchemeId, TRUE);
-    p_HcFrame->extraReg = 0xFFFFF800;
-    memset(&p_HcFrame->hcSpecificData.schemeRegs, 0, sizeof(t_FmPcdKgInterModuleSchemeRegs));
+    p_HcFrame->extraReg = HC_HCOR_KG_SCHEME_REGS_MASK;
+    memset(&p_HcFrame->hcSpecificData.schemeRegs, 0, sizeof(struct fman_kg_scheme_regs));
+    p_HcFrame->commandSequence = seqNum;
 
     BUILD_FD(sizeof(t_HcFrame));
 
-    if ((err = EnQFrm(p_FmHc, &fmFd, &p_HcFrame->commandSequence)) != E_OK)
-    {
-        FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-        XX_FreeSmart(p_HcFrame);
-        RETURN_ERROR(MINOR, err, NO_MSG);
-    }
+    err = EnQFrm(p_FmHc, &fmFd, seqNum);
 
-    FmPcdKgInvalidateSchemeSw(p_FmHc->h_FmPcd, relativeSchemeId);
+    PutBuf(p_FmHc, p_HcFrame, seqNum);
 
-    FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
+    if (err != E_OK)
+        RETURN_ERROR(MINOR, err, NO_MSG);
 
-    XX_FreeSmart(p_HcFrame);
-
     return E_OK;
 }
 
-t_Error FmHcPcdKgCcGetSetParams(t_Handle h_FmHc, t_Handle  h_Scheme, uint32_t requiredAction)
+t_Error FmHcPcdKgCcGetSetParams(t_Handle h_FmHc, t_Handle  h_Scheme, uint32_t requiredAction, uint32_t value)
 {
     t_FmHc      *p_FmHc = (t_FmHc*)h_FmHc;
     t_Error     err = E_OK;
     t_HcFrame   *p_HcFrame;
     t_DpaaFD    fmFd;
     uint8_t     relativeSchemeId;
-    uint8_t     physicalSchemeId = (uint8_t)(PTR_TO_UINT(h_Scheme)-1);
+    uint8_t     physicalSchemeId = FmPcdKgGetSchemeId(h_Scheme);
     uint32_t    tmpReg32 = 0;
+    uint32_t    seqNum;
 
+    /* Scheme is locked by calling routine */
+    /* WARNING - this lock will not be efficient if other HC routine will attempt to change
+     * "kgse_mode" or "kgse_om" without locking scheme !
+     */
+
     relativeSchemeId = FmPcdKgGetRelativeSchemeId(p_FmHc->h_FmPcd, physicalSchemeId);
-    if( relativeSchemeId == FM_PCD_KG_NUM_OF_SCHEMES)
+    if ( relativeSchemeId == FM_PCD_KG_NUM_OF_SCHEMES)
         RETURN_ERROR(MAJOR, E_NOT_IN_RANGE, NO_MSG);
 
-    if (FmPcdKgSchemeTryLock(p_FmHc->h_FmPcd, relativeSchemeId, FALSE))
-        RETURN_ERROR(MAJOR, E_INVALID_STATE, ("Lock of the scheme FAILED"));
-
-    if(!FmPcdKgGetPointedOwners(p_FmHc->h_FmPcd, relativeSchemeId) ||
+    if (!FmPcdKgGetRequiredActionFlag(p_FmHc->h_FmPcd, relativeSchemeId) ||
        !(FmPcdKgGetRequiredAction(p_FmHc->h_FmPcd, relativeSchemeId) & requiredAction))
     {
-
-        if(requiredAction & UPDATE_NIA_ENQ_WITHOUT_DMA)
+        if ((requiredAction & UPDATE_NIA_ENQ_WITHOUT_DMA) &&
+            (FmPcdKgGetNextEngine(p_FmHc->h_FmPcd, relativeSchemeId) == e_FM_PCD_PLCR))
+            {
+                if ((FmPcdKgIsDirectPlcr(p_FmHc->h_FmPcd, relativeSchemeId) == FALSE) ||
+                    (FmPcdKgIsDistrOnPlcrProfile(p_FmHc->h_FmPcd, relativeSchemeId) == TRUE))
+                    RETURN_ERROR(MAJOR, E_NOT_SUPPORTED, ("In this situation PP can not be with distribution and has to be shared"));
+                err = FmPcdPlcrCcGetSetParams(p_FmHc->h_FmPcd, FmPcdKgGetRelativeProfileId(p_FmHc->h_FmPcd, relativeSchemeId), requiredAction);
+                if (err)
+                    RETURN_ERROR(MAJOR, err, NO_MSG);
+            }
+        else /* From here we deal with KG-Schemes only */
         {
-            if((FmPcdKgGetNextEngine(p_FmHc->h_FmPcd, relativeSchemeId) == e_FM_PCD_DONE) && (FmPcdKgGetDoneAction(p_FmHc->h_FmPcd, relativeSchemeId) ==  e_FM_PCD_ENQ_FRAME))
-
+            /* Pre change general code */
+            p_HcFrame = GetBuf(p_FmHc, &seqNum);
+            if (!p_HcFrame)
+                RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame object"));
+            memset(p_HcFrame, 0, sizeof(t_HcFrame));
+            p_HcFrame->opcode = (uint32_t)(HC_HCOR_GBL | HC_HCOR_OPCODE_KG_SCM);
+            p_HcFrame->actionReg  = FmPcdKgBuildReadSchemeActionReg(physicalSchemeId);
+            p_HcFrame->extraReg = HC_HCOR_KG_SCHEME_REGS_MASK;
+            p_HcFrame->commandSequence = seqNum;
+            BUILD_FD(SIZE_OF_HC_FRAME_READ_OR_CC_DYNAMIC);
+            if ((err = EnQFrm(p_FmHc, &fmFd, seqNum)) != E_OK)
             {
-                p_HcFrame = (t_HcFrame *)XX_MallocSmart((sizeof(t_HcFrame) + p_FmHc->padTill16), 0, 16);
-                if (!p_HcFrame)
-                {
-                    FmPcdKgReleaseSchemeLock(p_FmHc->h_FmPcd, relativeSchemeId);
-                    RETURN_ERROR(MINOR, E_NO_MEMORY, ("HC Frame obj"));
-                }

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-head mailing list