Lines Matching +full:global +full:- +full:regs
1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later
39 /* KeyGen Global Registers bit field masks */
96 /* Hard-coded configuration:
97 * These values are used as hard-coded values for KeyGen configuration
98 * and they replace user selections for this hard-coded version
109 * - the value for symmetric hash usage must be in accordance with hash
111 * - according to tests performed, spreading is not working if symmetric
165 * Global Statistic Counters
166 * KeyGen Global Registers
178 u32 fmkg_gsr; /* 0x024: KeyGen Global Status Register */
183 u32 fmkg_gdv0r; /* 0x038: Global Default Value Register 0 */
184 u32 fmkg_gdv1r; /* 0x03C: Global Default Value Register 1 */
207 * Must be between 1 and 2^24-1
240 * regs: KeyGen registers
245 static int keygen_write_ar_wait(struct fman_kg_regs __iomem *regs, u32 fmkg_ar) in keygen_write_ar_wait() argument
247 iowrite32be(fmkg_ar, ®s->fmkg_ar); in keygen_write_ar_wait()
251 fmkg_ar = ioread32be(®s->fmkg_ar); in keygen_write_ar_wait()
254 return -EINVAL; in keygen_write_ar_wait()
305 * regs: KeyGen Registers
311 static void keygen_write_sp(struct fman_kg_regs __iomem *regs, u32 sp, bool add) in keygen_write_sp() argument
315 tmp = ioread32be(®s->fmkg_pe.fmkg_pe_sp); in keygen_write_sp()
322 iowrite32be(tmp, ®s->fmkg_pe.fmkg_pe_sp); in keygen_write_sp()
349 * regs: KeyGen Registers
354 static void keygen_write_cpp(struct fman_kg_regs __iomem *regs, u32 cpp) in keygen_write_cpp() argument
356 iowrite32be(cpp, ®s->fmkg_pe.fmkg_pe_cpp); in keygen_write_cpp()
363 * regs: KeyGen Registers
370 static int keygen_write_scheme(struct fman_kg_regs __iomem *regs, u8 scheme_id, in keygen_write_scheme() argument
378 iowrite32be(scheme_regs->kgse_mode, ®s->fmkg_sch.kgse_mode); in keygen_write_scheme()
379 iowrite32be(scheme_regs->kgse_ekfc, ®s->fmkg_sch.kgse_ekfc); in keygen_write_scheme()
380 iowrite32be(scheme_regs->kgse_ekdv, ®s->fmkg_sch.kgse_ekdv); in keygen_write_scheme()
381 iowrite32be(scheme_regs->kgse_bmch, ®s->fmkg_sch.kgse_bmch); in keygen_write_scheme()
382 iowrite32be(scheme_regs->kgse_bmcl, ®s->fmkg_sch.kgse_bmcl); in keygen_write_scheme()
383 iowrite32be(scheme_regs->kgse_fqb, ®s->fmkg_sch.kgse_fqb); in keygen_write_scheme()
384 iowrite32be(scheme_regs->kgse_hc, ®s->fmkg_sch.kgse_hc); in keygen_write_scheme()
385 iowrite32be(scheme_regs->kgse_ppc, ®s->fmkg_sch.kgse_ppc); in keygen_write_scheme()
386 iowrite32be(scheme_regs->kgse_spc, ®s->fmkg_sch.kgse_spc); in keygen_write_scheme()
387 iowrite32be(scheme_regs->kgse_dv0, ®s->fmkg_sch.kgse_dv0); in keygen_write_scheme()
388 iowrite32be(scheme_regs->kgse_dv1, ®s->fmkg_sch.kgse_dv1); in keygen_write_scheme()
389 iowrite32be(scheme_regs->kgse_ccbs, ®s->fmkg_sch.kgse_ccbs); in keygen_write_scheme()
390 iowrite32be(scheme_regs->kgse_mv, ®s->fmkg_sch.kgse_mv); in keygen_write_scheme()
391 iowrite32be(scheme_regs->kgse_om, ®s->fmkg_sch.kgse_om); in keygen_write_scheme()
392 iowrite32be(scheme_regs->kgse_vsp, ®s->fmkg_sch.kgse_vsp); in keygen_write_scheme()
395 iowrite32be(scheme_regs->kgse_gec[i], in keygen_write_scheme()
396 ®s->fmkg_sch.kgse_gec[i]); in keygen_write_scheme()
400 err = keygen_write_ar_wait(regs, ar_reg); in keygen_write_scheme()
416 * Return: 0 on success, -EINVAL when the are no available free schemes
423 if (!keygen->schemes[i].used) { in get_free_scheme_id()
428 return -EINVAL; in get_free_scheme_id()
445 return &keygen->schemes[scheme_id]; in get_scheme()
462 struct fman_kg_regs __iomem *keygen_regs = keygen->keygen_regs; in keygen_bind_port_to_schemes()
471 return -EINVAL; in keygen_bind_port_to_schemes()
473 if (!scheme->used) { in keygen_bind_port_to_schemes()
475 return -EINVAL; in keygen_bind_port_to_schemes()
478 schemes_vector |= 1 << (31 - scheme_id); in keygen_bind_port_to_schemes()
480 ar_reg = build_ar_bind_scheme(scheme->hw_port_id, false); in keygen_bind_port_to_schemes()
489 ar_reg = build_ar_bind_scheme(scheme->hw_port_id, true); in keygen_bind_port_to_schemes()
512 struct fman_kg_regs __iomem *keygen_regs = keygen->keygen_regs; in keygen_scheme_setup()
521 return -EINVAL; in keygen_scheme_setup()
523 if (enable && scheme->used) { in keygen_scheme_setup()
525 return -EINVAL; in keygen_scheme_setup()
543 scheme_regs.kgse_mv = scheme->match_vector; in keygen_scheme_setup()
550 /* Configure Hard-Coded Rx Hashing: */ in keygen_scheme_setup()
552 if (scheme->use_hashing) { in keygen_scheme_setup()
571 tmp_reg |= ((scheme->hash_fqid_count - 1) << in keygen_scheme_setup()
573 tmp_reg |= scheme->hashShift << KG_SCH_HASH_CONFIG_SHIFT_SHIFT; in keygen_scheme_setup()
575 if (scheme->symmetric_hash) { in keygen_scheme_setup()
578 * But because extraction is hard-coded, we are sure in keygen_scheme_setup()
594 tmp_reg |= scheme->base_fqid; in keygen_scheme_setup()
597 /* features not used by hard-coded configuration */ in keygen_scheme_setup()
610 scheme->used = enable; in keygen_scheme_setup()
636 keygen->keygen_regs = keygen_regs; in keygen_init()
641 iowrite32be(ENQUEUE_KG_DFLT_NIA, &keygen_regs->fmkg_gcr); in keygen_init()
644 &keygen_regs->fmkg_eer); in keygen_init()
646 iowrite32be(0, &keygen_regs->fmkg_fdor); in keygen_init()
647 iowrite32be(0, &keygen_regs->fmkg_gdv0r); in keygen_init()
648 iowrite32be(0, &keygen_regs->fmkg_gdv1r); in keygen_init()
666 iowrite32be(0xFFFFFFFF, &keygen_regs->fmkg_seer); in keygen_init()
667 iowrite32be(0xFFFFFFFF, &keygen_regs->fmkg_seeer); in keygen_init()
670 iowrite32be(ioread32be(&keygen_regs->fmkg_gcr) | FM_KG_KGGCR_EN, in keygen_init()
671 &keygen_regs->fmkg_gcr); in keygen_init()
697 pr_err("Base FQID must be between 1 and 2^24-1\n"); in keygen_port_hashing_init()
698 return -EINVAL; in keygen_port_hashing_init()
700 if (hash_size == 0 || (hash_size & (hash_size - 1)) != 0) { in keygen_port_hashing_init()
702 return -EINVAL; in keygen_port_hashing_init()
709 return -EINVAL; in keygen_port_hashing_init()
712 /* Create and configure Hard-Coded Scheme: */ in keygen_port_hashing_init()
717 return -EINVAL; in keygen_port_hashing_init()
719 if (scheme->used) { in keygen_port_hashing_init()
721 return -EINVAL; in keygen_port_hashing_init()
730 scheme->hw_port_id = hw_port_id; in keygen_port_hashing_init()
731 scheme->use_hashing = true; in keygen_port_hashing_init()
732 scheme->base_fqid = hash_base_fqid; in keygen_port_hashing_init()
733 scheme->hash_fqid_count = hash_size; in keygen_port_hashing_init()
734 scheme->symmetric_hash = DEFAULT_SYMMETRIC_HASH; in keygen_port_hashing_init()
735 scheme->hashShift = DEFAULT_HASH_SHIFT; in keygen_port_hashing_init()
737 /* All Schemes in hard-coded configuration in keygen_port_hashing_init()
740 scheme->match_vector = 0; in keygen_port_hashing_init()