summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAndy Fleming <afleming@freescale.com>2013-07-31 23:56:25 (GMT)
committerAndy Fleming <afleming@freescale.com>2013-07-31 23:56:25 (GMT)
commita4460591eff829d4805dfe2bdf43c041899ad4f2 (patch)
tree11c6ba968c1bf12845e34edeb6367bea9de57feb /drivers
parent8db1e318905a970d3291305581021f3f9225db9b (diff)
parenta8d022f84c57846be4b39ff740f86c8454c78b52 (diff)
downloadlinux-fsl-qoriq-a4460591eff829d4805dfe2bdf43c041899ad4f2.tar.xz
Merge remote-tracking branch 'fsl_devel/sdk-kernel-3.8' into sdk1.5
Diffstat (limited to 'drivers')
-rw-r--r--drivers/crypto/caam/desc.h1
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/Port/fm_port.c11
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c4
-rw-r--r--drivers/net/ethernet/freescale/fman/inc/Peripherals/fm_pcd_ext.h10
-rw-r--r--drivers/net/ethernet/freescale/fman/inc/integrations/T4240/dpaa_integration_ext.h1
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.h1
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c12
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c4
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h2
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm.c38
-rw-r--r--drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c11
-rw-r--r--drivers/net/ethernet/freescale/fman/src/xx/xx_linux.c9
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c7
-rw-r--r--drivers/net/ethernet/freescale/gianfar_sysfs.c3
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_classifier.c10
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_classifier_ioctl.h12
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec.c23
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec.h16
-rw-r--r--drivers/staging/fsl_dpa_offload/wrp_dpa_classifier.c25
-rw-r--r--drivers/staging/fsl_dpa_offload/wrp_dpa_stats.c22
20 files changed, 152 insertions, 70 deletions
diff --git a/drivers/crypto/caam/desc.h b/drivers/crypto/caam/desc.h
index 53b296f..7ddc851 100644
--- a/drivers/crypto/caam/desc.h
+++ b/drivers/crypto/caam/desc.h
@@ -463,6 +463,7 @@ struct sec4_sg_entry {
#define OP_PCL_IPSEC_DES_IV64 0x0100
#define OP_PCL_IPSEC_DES 0x0200
#define OP_PCL_IPSEC_3DES 0x0300
+#define OP_PCL_IPSEC_NULL_ENC 0x0b00
#define OP_PCL_IPSEC_AES_CBC 0x0c00
#define OP_PCL_IPSEC_AES_CTR 0x0d00
#define OP_PCL_IPSEC_AES_XTS 0x1600
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Port/fm_port.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Port/fm_port.c
index 6b92941..b2dbcac 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Port/fm_port.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Port/fm_port.c
@@ -2444,6 +2444,17 @@ t_Handle FM_PORT_Config(t_FmPortParams *p_FmPortParams)
}
}
+#ifdef FM_HEAVY_TRAFFIC_SEQUENCER_HANG_ERRATA_FMAN_A006981
+ if ((p_FmPort->fmRevInfo.majorRev == 6) &&
+ (p_FmPort->fmRevInfo.minorRev == 0) &&
+ ((p_FmPort->portType == e_FM_PORT_TYPE_OH_OFFLINE_PARSING) ||
+ (p_FmPort->portType == e_FM_PORT_TYPE_TX)))
+ {
+ p_FmPort->openDmas.num = 16;
+ p_FmPort->openDmas.extra = 0;
+ }
+#endif /* FM_HEAVY_TRAFFIC_SEQUENCER_HANG_ERRATA_FMAN_A006981 */
+
if (p_FmPort->portType == e_FM_PORT_TYPE_OH_HOST_COMMAND)
p_FmPort->p_FmPortDriverParam->syncReq = DEFAULT_PORT_syncReqForHc;
else
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c
index 2fdc4c8..a44bdab 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/fm.c
@@ -3313,6 +3313,10 @@ t_Error FmSetNumOfOpenDmas(t_Handle h_Fm,
p_Fm->p_FmStateStruct->fmId));
#else
if ((p_Fm->p_FmStateStruct->revInfo.majorRev >= 6) &&
+#ifdef FM_HEAVY_TRAFFIC_SEQUENCER_HANG_ERRATA_FMAN_A006981
+ !((p_Fm->p_FmStateStruct->revInfo.majorRev == 6) &&
+ (p_Fm->p_FmStateStruct->revInfo.minorRev == 0)) &&
+#endif /* FM_HEAVY_TRAFFIC_SEQUENCER_HANG_ERRATA_FMAN_A006981 */
(p_Fm->p_FmStateStruct->accumulatedNumOfOpenDmas - oldVal + numOfOpenDmas > DMA_THRESH_MAX_COMMQ + 1))
RETURN_ERROR(MAJOR, E_NOT_AVAILABLE,
("Requested numOfOpenDmas for fm%d exceeds DMA Command queue (%d)",
diff --git a/drivers/net/ethernet/freescale/fman/inc/Peripherals/fm_pcd_ext.h b/drivers/net/ethernet/freescale/fman/inc/Peripherals/fm_pcd_ext.h
index 60edfd2..e2199e4 100644
--- a/drivers/net/ethernet/freescale/fman/inc/Peripherals/fm_pcd_ext.h
+++ b/drivers/net/ethernet/freescale/fman/inc/Peripherals/fm_pcd_ext.h
@@ -99,16 +99,6 @@
#define FM_PCD_SW_PRS_SIZE 0x00000800 /**< Total size of SW parser area */
#define FM_PCD_PRS_SW_OFFSET 0x00000040 /**< Size of illegal addresses at the beginning
of the SW parser area */
-#if (DPAA_VERSION >= 11)
-#define FM_PCD_PRS_SW_PATCHES_SIZE 0x00000240 /**< Number of bytes saved for patches */
-#else
-#define FM_PCD_PRS_SW_PATCHES_SIZE 0x00000200 /**< Number of bytes saved for patches */
-#endif /* (DPAA_VERSION >= 11) */
-
-#define FM_PCD_PRS_SW_TAIL_SIZE 4 /**< Number of bytes that must be cleared at
- the end of the SW parser area */
-#define FM_SW_PRS_MAX_IMAGE_SIZE (FM_PCD_SW_PRS_SIZE-FM_PCD_PRS_SW_OFFSET-FM_PCD_PRS_SW_TAIL_SIZE-FM_PCD_PRS_SW_PATCHES_SIZE)
- /**< Maximum size of SW parser code */
#define FM_PCD_MAX_MANIP_INSRT_TEMPLATE_SIZE 128 /**< Maximum size of insertion template for
insert manipulation */
diff --git a/drivers/net/ethernet/freescale/fman/inc/integrations/T4240/dpaa_integration_ext.h b/drivers/net/ethernet/freescale/fman/inc/integrations/T4240/dpaa_integration_ext.h
index 83ae8ba..52ed8f8 100644
--- a/drivers/net/ethernet/freescale/fman/inc/integrations/T4240/dpaa_integration_ext.h
+++ b/drivers/net/ethernet/freescale/fman/inc/integrations/T4240/dpaa_integration_ext.h
@@ -261,6 +261,7 @@ typedef enum
#define FM_WRONG_RESET_VALUES_ERRATA_FMAN_A005127
#define FM_RX_FIFO_CORRUPT_ERRATA_10GMAC_A006320
#define FM_OP_NO_VSP_NO_RELEASE_ERRATA_FMAN_A006675
+#define FM_HEAVY_TRAFFIC_SEQUENCER_HANG_ERRATA_FMAN_A006981
#define FM_BCB_ERRATA_BMI_SW001
#define FM_LEN_CHECK_ERRATA_FMAN_SW002
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.h b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.h
index d89327c..feab96f 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.h
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.h
@@ -228,6 +228,7 @@ typedef struct {
struct device_attribute *dev_pcd_attr_stats;
struct device_attribute *dev_pcd_attr_regs;
+ struct device_attribute *dev_attr_muram_free_size;
struct qman_fq *hc_tx_conf_fq, *hc_tx_err_fq, *hc_tx_fq;
} t_LnxWrpFmDev;
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c
index f9a8e26..519c443 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c
@@ -124,18 +124,6 @@
#error Error: please synchronize IOC_ defines!
#endif
-#if CMP_IOC_DEFINE(FM_PCD_PRS_SW_PATCHES_SIZE)
-#error Error: please synchronize IOC_ defines!
-#endif
-
-#if CMP_IOC_DEFINE(FM_PCD_PRS_SW_TAIL_SIZE)
-#error Error: please synchronize IOC_ defines!
-#endif
-
-#if CMP_IOC_DEFINE(FM_SW_PRS_MAX_IMAGE_SIZE)
-#error Error: please synchronize IOC_ defines!
-#endif
-
#if CMP_IOC_DEFINE(FM_PCD_MAX_MANIP_INSRT_TEMPLATE_SIZE)
#error Error: please synchronize IOC_ defines!
#endif
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c
index 7e29867..68142b6 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c
@@ -909,8 +909,8 @@ void compat_copy_keys(
#if (DPAA_VERSION >= 11)
memcpy(&param->frame_length_ranges,
&compat_param->frame_length_ranges,
- sizeof(param->frame_length_ranges[0] *
- IOC_FM_PCD_CC_STATS_MAX_NUM_OF_FLR));
+ sizeof(param->frame_length_ranges[0]) *
+ IOC_FM_PCD_CC_STATS_MAX_NUM_OF_FLR);
#endif /* (DPAA_VERSION >= 11) */
}
else {
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h
index 288777a..f8655db 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h
@@ -52,7 +52,7 @@
/* mapping kernel pointers w/ UserSpace id's { */
/* Because compat_ptr(ptr_to_compat(X)) != X, this way we cannot exchange pointers
back and forth (US - KS). compat_ptr is a cast and pointers are broken. */
-#define COMPAT_PTR2ID_ARRAY_MAX (256+1) /* first location is not used */
+#define COMPAT_PTR2ID_ARRAY_MAX (512+1) /* first location is not used */
#define COMPAT_PTR2ID_WATERMARK 0xface0000
#define COMPAT_PTR2ID_WM_MASK 0xffff0000
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm.c
index 2cfc0b9..9237688 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm.c
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm.c
@@ -308,6 +308,37 @@ static ssize_t show_fm_stats(struct device *dev,
return n;
}
+static ssize_t show_fm_muram_free_size(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ t_LnxWrpFmDev *p_LnxWrpFmDev = NULL;
+ unsigned long flags = 0;
+ unsigned n = 0;
+ uint64_t muram_free_size = 0;
+
+ if (attr == NULL || buf == NULL || dev == NULL)
+ return -EINVAL;
+
+ p_LnxWrpFmDev = (t_LnxWrpFmDev *) dev_get_drvdata(dev);
+ if (WARN_ON(p_LnxWrpFmDev == NULL))
+ return -EINVAL;
+
+ if (!p_LnxWrpFmDev->active || !p_LnxWrpFmDev->h_Dev)
+ return -EIO;
+
+ muram_free_size = FM_MURAM_GetFreeMemSize(p_LnxWrpFmDev->h_MuramDev);
+
+ local_irq_save(flags);
+
+ n = snprintf(buf, PAGE_SIZE, "\tFM %d muram_free_size: %lld\n",
+ p_LnxWrpFmDev->id, muram_free_size);
+
+ local_irq_restore(flags);
+
+ return n;
+}
+
+
static ssize_t show_fm_pcd_stats(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -530,6 +561,7 @@ static ssize_t show_pcd_regs(struct device *dev,
static DEVICE_ATTR(fm_regs, S_IRUGO, show_fm_regs, NULL);
static DEVICE_ATTR(fm_pcd_regs, S_IRUGO, show_pcd_regs, NULL);
+static DEVICE_ATTR(fm_muram_free_size, S_IRUGO, show_fm_muram_free_size, NULL);
int fm_sysfs_create(struct device *dev)
{
@@ -543,6 +575,7 @@ int fm_sysfs_create(struct device *dev)
/* store to remove them when module is disabled */
p_LnxWrpFmDev->dev_attr_regs = &dev_attr_fm_regs;
p_LnxWrpFmDev->dev_pcd_attr_regs = &dev_attr_fm_pcd_regs;
+ p_LnxWrpFmDev->dev_attr_muram_free_size = &dev_attr_fm_muram_free_size;
/* Create sysfs statistics group for FM module */
if (sysfs_create_group(&dev->kobj, &fm_dev_stats_attr_grp) != 0)
@@ -553,6 +586,10 @@ int fm_sysfs_create(struct device *dev)
device_create_file(dev, &dev_attr_fm_pcd_regs) != 0)
return -EIO;
+ /* muram free size */
+ if (device_create_file(dev, &dev_attr_fm_muram_free_size) != 0 )
+ return -EIO;
+
return 0;
}
@@ -570,4 +607,5 @@ void fm_sysfs_destroy(struct device *dev)
sysfs_remove_group(&dev->kobj, &fm_dev_stats_attr_grp);
device_remove_file(dev, p_LnxWrpFmDev->dev_attr_regs);
device_remove_file(dev, p_LnxWrpFmDev->dev_pcd_attr_regs);
+ device_remove_file(dev, p_LnxWrpFmDev->dev_attr_muram_free_size);
}
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c
index 97dacb7..cab44ef 100644
--- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c
+++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_sysfs_fm_port.c
@@ -147,10 +147,9 @@ static ssize_t show_fm_port_stats(struct device *dev,
}
local_irq_save(flags);
- n = snprintf(buf, PAGE_SIZE, "\tFM %d Port %d counter: %d\n",
- p_LnxWrpFmDev->id,
- p_LnxWrpFmPortDev->id,
- FM_PORT_GetCounter(p_LnxWrpFmPortDev->h_Dev,
+ n = snprintf(buf, PAGE_SIZE, "\t%s counter: %d\n",
+ p_LnxWrpFmPortDev->name,
+ FM_PORT_GetCounter(p_LnxWrpFmPortDev->h_Dev,
(e_FmPortCounters) counter));
local_irq_restore(flags);
@@ -223,8 +222,8 @@ static struct attribute *fm_oh_port_dev_stats_attributes[] = {
&dev_attr_port_deq_total.attr,
&dev_attr_port_deq_from_default.attr,
&dev_attr_port_deq_confirm.attr,
- /*RX*/ &dev_attr_port_rx_bad_frame.attr,
- &dev_attr_port_rx_large_frame.attr,
+ /* &dev_attr_port_rx_bad_frame.attr, */
+ /* &dev_attr_port_rx_large_frame.attr, */
&dev_attr_port_rx_out_of_buffers_discard.attr,
/*&dev_attr_port_rx_filter_frame.attr, */
NULL
diff --git a/drivers/net/ethernet/freescale/fman/src/xx/xx_linux.c b/drivers/net/ethernet/freescale/fman/src/xx/xx_linux.c
index 9c2371d..132459b 100644
--- a/drivers/net/ethernet/freescale/fman/src/xx/xx_linux.c
+++ b/drivers/net/ethernet/freescale/fman/src/xx/xx_linux.c
@@ -168,7 +168,7 @@ void XX_Print(char *str, ...)
#ifdef CONFIG_SMP
if (vsnprintf (buf, BUF_SIZE, str, args) >= BUF_SIZE)
printk(KERN_WARNING "Illegal string to print!\n more than %d characters.\n\tString was not printed completelly.\n", BUF_SIZE);
- printk (KERN_CRIT "cpu%d: %s",raw_smp_processor_id(), buf);
+ printk(KERN_CRIT "cpu%d/%d: %s", get_hard_smp_processor_id(raw_smp_processor_id()), raw_smp_processor_id(), buf);
#else
vprintk(str, args);
#endif /* CONFIG_SMP */
@@ -186,7 +186,8 @@ void XX_Fprint(void *file, char *str, ...)
#ifdef CONFIG_SMP
if (vsnprintf (buf, BUF_SIZE, str, args) >= BUF_SIZE)
printk(KERN_WARNING "Illegal string to print!\n more than %d characters.\n\tString was not printed completelly.\n", BUF_SIZE);
- printk (KERN_CRIT "cpu%d: %s", raw_smp_processor_id(), buf);
+ printk (KERN_CRIT "cpu%d/%d: %s",hard_smp_processor_id(), smp_processor_id(), buf);
+
#else
vprintk(str, args);
#endif /* CONFIG_SMP */
@@ -353,14 +354,14 @@ uint32_t XX_DisableAllIntr(void)
{
unsigned long flags;
- local_irq_save(flags);
+ local_irq_save_nort(flags);
return (uint32_t)flags;
}
void XX_RestoreAllIntr(uint32_t flags)
{
- local_irq_restore((unsigned long)flags);
+ local_irq_restore_nort((unsigned long)flags);
}
t_Error XX_Call( uint32_t qid, t_Error (* f)(t_Handle), t_Handle id, t_Handle appId, uint16_t flags )
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index a53231c..eb60e10 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1153,6 +1153,7 @@ static void gfar_init_recycle(struct gfar_private *priv)
rec->buff_size = priv->rx_buffer_size + RXBUF_ALIGNMENT;
skb_queue_head_init(&rec->recycle_q);
+ rec->local = NULL;
if (!gfar_skb_recycling_en)
goto disable_rec;
@@ -2141,6 +2142,9 @@ static void free_skb_recycle_q(struct gfar_priv_recycle *rec)
while ((skb = skb_dequeue(&rec->recycle_q)) != NULL)
dev_kfree_skb_any(skb);
+ if (!rec->local)
+ return;
+
for_each_possible_cpu(cpu) {
struct gfar_priv_recycle_local *local;
@@ -3490,6 +3494,9 @@ static struct sk_buff *gfar_new_skb(struct gfar_private *priv)
struct sk_buff_head *recycle_q;
int cpu;
+ if (unlikely(!rec->local))
+ goto alloc;
+
cpu = get_cpu();
local = per_cpu_ptr(rec->local, cpu);
skb = __skb_dequeue(&local->recycle_q);
diff --git a/drivers/net/ethernet/freescale/gianfar_sysfs.c b/drivers/net/ethernet/freescale/gianfar_sysfs.c
index 83d725b..b9c1641 100644
--- a/drivers/net/ethernet/freescale/gianfar_sysfs.c
+++ b/drivers/net/ethernet/freescale/gianfar_sysfs.c
@@ -375,6 +375,9 @@ static ssize_t gfar_show_recycle(struct device *dev,
for_each_possible_cpu(cpu) {
struct gfar_priv_recycle_local *local;
+ if (!rec->local)
+ break;
+
local = per_cpu_ptr(rec->local, cpu);
pr_info("local: CPU#%d: recycled skbs %d, reused skbs %d\n",
cpu, local->recycle_cnt, local->reuse_cnt);
diff --git a/drivers/staging/fsl_dpa_offload/dpa_classifier.c b/drivers/staging/fsl_dpa_offload/dpa_classifier.c
index 89aaa2e..a39fc69 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_classifier.c
+++ b/drivers/staging/fsl_dpa_offload/dpa_classifier.c
@@ -430,7 +430,8 @@ int dpa_classif_table_modify_miss_action(int td,
/* Fill the [miss_engine_params] structure w/ data */
errno = action_to_next_engine_params(miss_action, &miss_engine_params,
- NULL, NULL, NULL);
+ NULL, ptable->params.distribution,
+ ptable->params.classification);
if (errno < 0) {
RELEASE_OBJECT(ptable);
log_err("Failed verification of miss action params for table "
@@ -7226,7 +7227,8 @@ EXPORT_SYMBOL(dpa_classif_free_hm);
#if (DPAA_VERSION >= 11)
int dpa_classif_mcast_create_group(
const struct dpa_cls_mcast_group_params *group_params,
- int *grpd)
+ int *grpd,
+ const struct dpa_cls_mcast_group_resources *res)
{
t_Error err = 0;
@@ -7321,7 +7323,7 @@ int dpa_classif_mcast_create_group(
}
/* Group is not imported */
- if (group_params->group == NULL) {
+ if (!res) {
/*
* set parameters for the first member
*/
@@ -7439,7 +7441,7 @@ int dpa_classif_mcast_create_group(
kfree(replic_grp_params);
} else {
- pgroup->group = group_params->group;
+ pgroup->group = res->group_node;
/* mark prefilled members in index array member */
for (member_id = 0; member_id < group_params->prefilled_members;
member_id++) {
diff --git a/drivers/staging/fsl_dpa_offload/dpa_classifier_ioctl.h b/drivers/staging/fsl_dpa_offload/dpa_classifier_ioctl.h
index cc5f007..df0fee2 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_classifier_ioctl.h
+++ b/drivers/staging/fsl_dpa_offload/dpa_classifier_ioctl.h
@@ -176,11 +176,7 @@ struct ioc_dpa_cls_hm_mpls_params {
struct ioc_dpa_cls_mcast_group_params {
struct dpa_cls_mcast_group_params mcast_grp_params;
int grpd;
-};
-
-struct ioc_dpa_cls_mcast_import_params {
- void *group;
- int grpd;
+ struct dpa_cls_mcast_group_resources res;
};
struct ioc_dpa_cls_mcast_member_params {
@@ -487,14 +483,18 @@ struct dpa_cls_compat_mcast_group_params {
compat_uptr_t fm_pcd;
struct dpa_cls_compat_tbl_enq_action_desc first_member_params;
unsigned int prefilled_members;
- compat_uptr_t group;
compat_uptr_t distribution;
compat_uptr_t classification;
};
+struct dpa_cls_compat_mcast_group_resources {
+ compat_uptr_t group_node;
+};
+
struct compat_ioc_dpa_cls_mcast_group_params {
struct dpa_cls_compat_mcast_group_params mcast_grp_params;
int grpd;
+ struct dpa_cls_compat_mcast_group_resources res;
};
struct compat_ioc_dpa_cls_mcast_member_params {
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
index fb076f4..797bee5 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
@@ -808,7 +808,7 @@ static int init_sa_manager(struct dpa_ipsec *dpa_ipsec)
return -ENOMEM;
}
- /* fill with ids */
+ /* fill with IDs */
for (i = 0; i < sa_mng->max_num_sa; i++)
if (cq_put_4bytes(sa_mng->sa_id_cq, i) < 0) {
pr_err("Could not fill SA ID management CQ\n");
@@ -865,7 +865,8 @@ static int init_sa_manager(struct dpa_ipsec *dpa_ipsec)
return -ENOMEM;
}
- /* Allocate space for the SEC descriptor which is holding the
+ /*
+ * Allocate space for the SEC descriptor which is holding the
* preheader information and the share descriptor.
* Required 64 byte align.
*/
@@ -2310,7 +2311,7 @@ static int create_sa_fq_pair(struct dpa_ipsec_sa *sa,
}
static inline int set_cipher_auth_alg(enum dpa_ipsec_cipher_alg alg_suite,
- uint16_t *cipher, uint16_t *auth)
+ uint16_t *cipher, uint16_t *auth)
{
*cipher = ipsec_algs[alg_suite].enc_alg;
*auth = ipsec_algs[alg_suite].auth_alg;
@@ -2969,7 +2970,7 @@ static int check_sa_params(struct dpa_ipsec_sa_params *sa_params)
/*
* check crypto params:
* - an authentication key must always be provided
- * - a cipher key must be provided if alg != NULL encryption
+ * - a cipher key must be provided if algorithm != NULL encryption
*/
err = set_cipher_auth_alg(sa_params->crypto_params.alg_suite,
@@ -2977,20 +2978,23 @@ static int check_sa_params(struct dpa_ipsec_sa_params *sa_params)
if (err < 0)
return err;
- if (sa_params->crypto_params.auth_key == NULL) {
+ if (!sa_params->crypto_params.auth_key ||
+ sa_params->crypto_params.auth_key_len == 0) {
pr_err("A valid authentication key must be provided\n");
return -EINVAL;
}
- /* TODO: check cipher_key ONLY if alg != null encryption */
- if (sa_params->crypto_params.cipher_key == NULL) {
+ /* Check cipher_key only if the cipher algorithm isn't NULL encryption*/
+ if (cipher_alg != OP_PCL_IPSEC_NULL_ENC &&
+ (!sa_params->crypto_params.cipher_key ||
+ sa_params->crypto_params.cipher_key_len == 0)) {
pr_err("A valid cipher key must be provided\n");
return -EINVAL;
}
if (sa_params->sa_dir == DPA_IPSEC_OUTBOUND) {
- if ((sa_params->sa_out_params.ip_hdr_size == 0) ||
- (sa_params->sa_out_params.outer_ip_header == NULL)) {
+ if (sa_params->sa_out_params.ip_hdr_size == 0 ||
+ !sa_params->sa_out_params.outer_ip_header) {
pr_err("Transport mode is not currently supported."
"Specify a valid encapsulation header\n");
return -EINVAL;
@@ -3435,6 +3439,7 @@ int dpa_ipsec_create_sa(int dpa_ipsec_id,
memset(&action, 0, sizeof(action));
action.type = DPA_CLS_TBL_ACTION_NEXT_TABLE;
action.next_table_params.next_td = inbpol_td;
+ action.next_table_params.hmd = DPA_OFFLD_DESC_NONE;
action.enable_statistics = FALSE;
err = set_flow_id_action(sa, &action);
if (err < 0) {
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec.h b/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
index c08419f..25eca88 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
@@ -76,21 +76,21 @@
/* DPA_IPSEC_CIPHER_ALG_3DES_CBC_HMAC_SHA_512_256 */ \
IPSEC_ALGS_ENTRY(3DES, HMAC_SHA2_512_256), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_96_MD5_128 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_MD5_96), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_MD5_96), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_96_SHA_160 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_SHA1_96), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_SHA1_96), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_AES_XCBC_MAC_96 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, AES_XCBC_MAC_96), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, AES_XCBC_MAC_96), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_MD5_128 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_MD5_128), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_MD5_128), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_SHA_160 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_SHA1_160), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_SHA1_160), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_SHA_256_128 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_SHA2_256_128), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_SHA2_256_128), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_SHA_384_192 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_SHA2_384_192), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_SHA2_384_192), \
/* DPA_IPSEC_CIPHER_ALG_NULL_ENC_HMAC_SHA_512_256 */ \
- IPSEC_ALGS_ENTRY(INVALID_ALG_ID, HMAC_SHA2_512_256), \
+ IPSEC_ALGS_ENTRY(NULL_ENC, HMAC_SHA2_512_256), \
/* DPA_IPSEC_CIPHER_ALG_AES_CBC_HMAC_96_MD5_128 */ \
IPSEC_ALGS_ENTRY(AES_CBC, HMAC_MD5_96), \
/* DPA_IPSEC_CIPHER_ALG_AES_CBC_HMAC_96_SHA_160 */ \
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_classifier.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_classifier.c
index dadf609..1e35b09 100644
--- a/drivers/staging/fsl_dpa_offload/wrp_dpa_classifier.c
+++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_classifier.c
@@ -1541,6 +1541,7 @@ static long do_ioctl_mcast_create_group(unsigned long args, bool compat_mode)
long ret = 0;
struct ioc_dpa_cls_mcast_group_params kparam;
struct dpa_cls_tbl_policer_params policer_params;
+ struct dpa_cls_mcast_group_resources *p_res = NULL;
#ifdef CONFIG_COMPAT
struct compat_ioc_dpa_cls_mcast_group_params uparam;
if (compat_mode) {
@@ -1580,10 +1581,13 @@ static long do_ioctl_mcast_create_group(unsigned long args, bool compat_mode)
&policer_params;
}
}
+
+ if (kparam.res.group_node)
+ p_res = &kparam.res;
/*
* Translate FM_PCD file descriptor
*/
- if (!kparam.mcast_grp_params.group) {
+ if (!p_res) {
kparam.mcast_grp_params.fm_pcd =
translate_fm_pcd_handle(kparam.
mcast_grp_params.fm_pcd);
@@ -1593,7 +1597,7 @@ static long do_ioctl_mcast_create_group(unsigned long args, bool compat_mode)
#if (DPAA_VERSION >= 11)
ret = dpa_classif_mcast_create_group(&kparam.mcast_grp_params,
- &kparam.grpd);
+ &kparam.grpd, p_res);
#else
log_err("Multicast not supported on this platform.\n");
return -EINVAL;
@@ -2407,7 +2411,8 @@ int dpa_cls_tbl_action_params_rcompatcpy(
uparam->enq_params.new_fqid =
kparam->enq_params.new_fqid;
uparam->enq_params.hmd = kparam->enq_params.hmd;
-
+ uparam->enq_params.new_rel_vsp_id =
+ kparam->enq_params.new_rel_vsp_id;
if (kparam->enq_params.policer_params) {
BUG_ON(!compat_ptr(uparam->enq_params.policer_params));
if (copy_to_user(
@@ -2425,6 +2430,10 @@ int dpa_cls_tbl_action_params_rcompatcpy(
kparam->next_table_params.next_td;
uparam->next_table_params.hmd = kparam->next_table_params.hmd;
break;
+ case DPA_CLS_TBL_ACTION_MCAST:
+ uparam->mcast_params.grpd = kparam->mcast_params.grpd;
+ uparam->mcast_params.hmd = kparam->mcast_params.hmd;
+ break;
default:
break;
}
@@ -2972,12 +2981,12 @@ int dpa_cls_mcast_group_params_compatcpy(
kparam->mcast_grp_params.prefilled_members =
uparam->mcast_grp_params.prefilled_members;
- if (uparam->mcast_grp_params.group)
- kparam->mcast_grp_params.group = compat_get_id2ptr(
- uparam->mcast_grp_params.group,
- FM_MAP_TYPE_PCD_NODE);
+ if (uparam->res.group_node)
+ kparam->res.group_node = compat_get_id2ptr(
+ uparam->res.group_node,
+ FM_MAP_TYPE_PCD_NODE);
else
- kparam->mcast_grp_params.group = NULL;
+ kparam->res.group_node = NULL;
if (compat_ptr(uparam->mcast_grp_params.distribution))
kparam->mcast_grp_params.distribution = compat_get_id2ptr(
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_stats.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_stats.c
index 4903afc..5c2cb90 100644
--- a/drivers/staging/fsl_dpa_offload/wrp_dpa_stats.c
+++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_stats.c
@@ -67,6 +67,8 @@ static const struct file_operations dpa_stats_fops = {
DECLARE_CRC8_TABLE(crc8_table);
static int dpa_stats_cdev_major = -1;
+static struct class *stats_class;
+static struct device *stats_dev;
struct wrp_dpa_stats_cb wrp_dpa_stats;
@@ -177,6 +179,24 @@ int wrp_dpa_stats_init(void)
return dpa_stats_cdev_major;
}
+ stats_class = class_create(THIS_MODULE, DPA_STATS_CDEV);
+ if (IS_ERR(stats_class)) {
+ log_err("Cannot create DPA Stats class device\n");
+ unregister_chrdev(dpa_stats_cdev_major, DPA_STATS_CDEV);
+ dpa_stats_cdev_major = -1;
+ return PTR_ERR(stats_class);
+ }
+
+ stats_dev = device_create(stats_class, NULL,
+ MKDEV(dpa_stats_cdev_major, 0), NULL, DPA_STATS_CDEV);
+ if (IS_ERR(stats_dev)) {
+ log_err("Cannot create DPA Stats device\n");
+ class_destroy(stats_class);
+ unregister_chrdev(dpa_stats_cdev_major, DPA_STATS_CDEV);
+ dpa_stats_cdev_major = -1;
+ return PTR_ERR(stats_dev);
+ }
+
/* Initialize the event queue */
wrp_dpa_stats_event_queue_init(&wrp_dpa_stats.ev_queue);
@@ -187,6 +207,8 @@ int wrp_dpa_stats_exit(void)
{
if (dpa_stats_cdev_major < 0)
return 0;
+ device_destroy(stats_class, MKDEV(dpa_stats_cdev_major, 0));
+ class_destroy(stats_class);
unregister_chrdev(dpa_stats_cdev_major, DPA_STATS_CDEV);
dpa_stats_cdev_major = -1;