|
@@ -286,6 +286,49 @@ exit:
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * nfp_rtsym_write_le() - Write an unsigned scalar value to a symbol
|
|
|
+ * @rtbl: NFP RTsym table
|
|
|
+ * @name: Symbol name
|
|
|
+ * @value: Value to write
|
|
|
+ *
|
|
|
+ * Lookup a symbol and write a value to it. Symbol can be 4 or 8 bytes in size.
|
|
|
+ * If 4 bytes then the lower 32-bits of 'value' are used. Value will be
|
|
|
+ * written as simple little-endian unsigned value.
|
|
|
+ *
|
|
|
+ * Return: 0 on success or error code.
|
|
|
+ */
|
|
|
+int nfp_rtsym_write_le(struct nfp_rtsym_table *rtbl, const char *name,
|
|
|
+ u64 value)
|
|
|
+{
|
|
|
+ const struct nfp_rtsym *sym;
|
|
|
+ int err;
|
|
|
+ u32 id;
|
|
|
+
|
|
|
+ sym = nfp_rtsym_lookup(rtbl, name);
|
|
|
+ if (!sym)
|
|
|
+ return -ENOENT;
|
|
|
+
|
|
|
+ id = NFP_CPP_ISLAND_ID(sym->target, NFP_CPP_ACTION_RW, 0, sym->domain);
|
|
|
+
|
|
|
+ switch (sym->size) {
|
|
|
+ case 4:
|
|
|
+ err = nfp_cpp_writel(rtbl->cpp, id, sym->addr, value);
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ err = nfp_cpp_writeq(rtbl->cpp, id, sym->addr, value);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ nfp_err(rtbl->cpp,
|
|
|
+ "rtsym '%s' unsupported or non-scalar size: %lld\n",
|
|
|
+ name, sym->size);
|
|
|
+ err = -EINVAL;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
u8 __iomem *
|
|
|
nfp_rtsym_map(struct nfp_rtsym_table *rtbl, const char *name, const char *id,
|
|
|
unsigned int min_size, struct nfp_cpp_area **area)
|