static int opromsetopt(struct device_node *dp, struct openpromio *op, int bufsize) { char *buf = op->oprom_array + strlen(op->oprom_array) + 1; int len = op->oprom_array + bufsize - buf; return of_set_property(options_node, op->oprom_array, buf, len); }
static int opiocset(void __user *argp, DATA *data) { struct opiocdesc op; struct device_node *dp; char *str, *tmp; int err; if (copy_from_user(&op, argp, sizeof(op))) return -EFAULT; dp = get_node(op.op_nodeid, data); if (!dp) return -EINVAL; err = copyin_string(op.op_name, op.op_namelen, &str); if (err) return err; err = copyin_string(op.op_buf, op.op_buflen, &tmp); if (err) { kfree(str); return err; } err = of_set_property(dp, str, tmp, op.op_buflen); kfree(str); kfree(tmp); return err; }
/* The /chosen node * property "bootargs": This zero-terminated string is passed * as the kernel command line. */ int fixup_chosen_node(void *blob, char *bootargs) { int nodeoffset; char *value = bootargs; int valuelen = strlen(value) + 1; int ret; ret = of_get_node_offset(blob, "chosen", &nodeoffset); if (ret) { dbg_info("DT: doesn't support add node\n"); return ret; } /* * if the property doesn't exit, add it * if the property exists, update it. */ ret = of_set_property(blob, nodeoffset, "bootargs", value, valuelen); if (ret) { dbg_info("fail to set bootargs property\n"); return ret; } return 0; }
static int fdt_stdout_setup(struct device_node *blob) { struct device_node *node, *alias; char sername[9] = { 0 }; const char *prop; struct console_device *cdev; int len; node = of_create_node(blob, "/chosen"); if (node == NULL) { pr_err("%s: could not open /chosen node\n", __func__); goto error; } cdev = console_get_first_active(); if (cdev) sprintf(sername, "serial%d", cdev->dev->id); else sprintf(sername, "serial%d", 0); alias = of_find_node_by_path_from(blob, "/aliases"); if (!alias) { pr_err("%s: could not get aliases node.\n", __func__); goto error; } prop = of_get_property(alias, sername, &len); of_set_property(node, "linux,stdout-path", prop, len, 1); return 0; error: return -ENODEV; }
/* These properties specify whether the hardware supports the stashing * of buffer descriptors in L2 cache. */ static void fdt_add_enet_stashing(void *fdt) { struct device_node *node; node = of_find_compatible_node(fdt, NULL, "gianfar"); while (node) { of_set_property(node, "bd-stash", NULL, 0, 1); of_property_write_u32(node, "rx-stash-len", 96); of_property_write_u32(node, "rx-stash-idx", 0); node = of_find_compatible_node(node, NULL, "gianfar"); } node = of_find_compatible_node(fdt, NULL, "fsl,etsec2"); while (node) { of_set_property(node, "bd-stash", NULL, 0, 1); of_property_write_u32(node, "rx-stash-len", 96); of_property_write_u32(node, "rx-stash-idx", 0); node = of_find_compatible_node(node, NULL, "fsl,etsec2"); } }
/* The /memory node * Required properties: * - device_type: has to be "memory". * - reg: this property contains all the physical memory ranges of your boards. */ int fixup_memory_node(void *blob, unsigned int *mem_bank, unsigned int *mem_size) { int nodeoffset; unsigned int data[2]; int valuelen; int ret; ret = of_get_node_offset(blob, "memory", &nodeoffset); if (ret) { dbg_info("DT: doesn't support add node\n"); return ret; } /* * if the property doesn't exit, add it * if the property exists, update it. */ /* set "device_type" property */ ret = of_set_property(blob, nodeoffset, "device_type", "memory", sizeof("memory")); if (ret) { dbg_info("DT: could not set device_type property\n"); return ret; } /* set "reg" property */ valuelen = 8; data[0] = swap_uint32(*mem_bank); data[1] = swap_uint32(*mem_size); ret = of_set_property(blob, nodeoffset, "reg", data, valuelen); if (ret) { dbg_info("DT: could not set reg property\n"); return ret; } return 0; }
static int cm_cogent_fixup(struct device_node *root) { int ret; struct device_node *node; of_tree_for_each_node(node, root) { struct device_node *slotnode; if (!of_device_is_compatible(node, "atmel,hsmci")) continue; slotnode = of_find_child_by_name(node, "slot"); if (!slotnode) continue; ret = of_set_property(slotnode, "broken-cd", NULL, 0, 1); if (ret) pr_err("error %d while adding broken-cd property to node %s\n", ret, slotnode->name); } return 0; }