summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorMarian Chereji <marian.chereji@freescale.com>2015-02-02 15:11:40 (GMT)
committerHonghua Yin <Hong-Hua.Yin@freescale.com>2015-03-16 08:36:38 (GMT)
commit438a4ba2303445388a2108c3bf2c7514035fb0c5 (patch)
treef117365c9a72c4732eb9129b18a07013e7643135 /drivers/staging
parenta82bc85b91aabe41b47eb7ef4b15c466f671ecbc (diff)
downloadlinux-fsl-qoriq-438a4ba2303445388a2108c3bf2c7514035fb0c5.tar.xz
dpa_offload: Fix SEC era info acquisition
The dpa_ipsec driver was unreliable is acquiring the SEC era for toggling the ESP padding removal setting of the SEC. The SEC version was used which is not a good criteria to follow in order to assume the ESP padding removal feature is available. The implementation was updated and the driver is now searching for the first device tree node which has a "fsl,sec-era" property and is using that information for further configuration of the SEC. Signed-off-by: Marian Chereji <marian.chereji@freescale.com> Change-Id: I80ffe931995b8aac38d42a0e013d760fbb7a5cd6 Reviewed-on: http://git.am.freescale.net:8181/29887 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Horia Ioan Geanta Neag <horia.geanta@freescale.com> Reviewed-by: Honghua Yin <Hong-Hua.Yin@freescale.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec.c2
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec.h2
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_ipsec_desc.c24
3 files changed, 11 insertions, 17 deletions
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
index 5171df4..fe98108 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec.c
@@ -2807,7 +2807,7 @@ static int copy_sa_params_to_in_sa(struct dpa_ipsec_sa *sa,
sa->sec_desc->pdb_dec.options = PDBOPTS_ESP_TUNNEL |
PDBOPTS_ESP_OUTFMT;
- if (dpa_ipsec->sec_ver >= SEC_VER_5_3)
+ if (dpa_ipsec->sec_era > 4)
sa->sec_desc->pdb_dec.options |= PDBOPTS_ESP_AOFL;
if (sa_params->use_ext_seq_num) {
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec.h b/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
index 353c817..a768991 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec.h
@@ -187,7 +187,6 @@
#define NIA_OPCODE_MASK 0x0F
#define SEC_DEF_VER 40 /* like in P4080 */
-#define SEC_VER_5_3 53
/* DPA IPSec Encryption & authentication algorithm identifiers */
struct ipsec_alg_suite {
@@ -374,7 +373,6 @@ struct dpa_ipsec {
int *used_sa_ids; /* SA IDs used by this DPA IPsec instance */
int num_used_sas; /* The current number of sa's used by this instance*/
int sec_era; /* SEC ERA information */
- int sec_ver; /* SEC version information */
struct device *jrdev; /* Job ring device */
atomic_t ref;
atomic_t valid;
diff --git a/drivers/staging/fsl_dpa_offload/dpa_ipsec_desc.c b/drivers/staging/fsl_dpa_offload/dpa_ipsec_desc.c
index ae767d8..0fac5ae 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_ipsec_desc.c
+++ b/drivers/staging/fsl_dpa_offload/dpa_ipsec_desc.c
@@ -67,23 +67,19 @@ int get_sec_info(struct dpa_ipsec *dpa_ipsec)
const u32 *sec_era;
int prop_size;
- sec_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v5.3");
- if (sec_node)
- dpa_ipsec->sec_ver = SEC_VER_5_3;
- else {
- dpa_ipsec->sec_ver = SEC_DEF_VER;
- sec_node = of_find_compatible_node(NULL, NULL, "fsl,sec-v4.0");
- if (!sec_node) {
- log_err("Can't find device node for SEC! Check device tree!\n");
- return -ENODEV;
- }
+ sec_node = of_find_node_with_property(NULL, "fsl,sec-era");
+ if (sec_node) {
+ sec_era = of_get_property(sec_node, "fsl,sec-era", &prop_size);
+ if (sec_era && prop_size == sizeof(*sec_era) && *sec_era > 0)
+ dpa_ipsec->sec_era = *sec_era;
+ of_node_put(sec_node);
}
- sec_era = of_get_property(sec_node, "fsl,sec-era", &prop_size);
- if (sec_era && prop_size == sizeof(*sec_era) && *sec_era > 0)
- dpa_ipsec->sec_era = *sec_era;
- else
+ if (dpa_ipsec->sec_era == 0) {
dpa_ipsec->sec_era = SEC_DEF_ERA;
+ log_warn("Unable to acquire the SEC era from the device tree. Defaulting to SEC era %d.\n",
+ dpa_ipsec->sec_era);
+ }
dpa_ipsec->jrdev = get_jrdev(dpa_ipsec);
if (!dpa_ipsec->jrdev)