1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Copyright (C) 2021 Rafał Miłecki <[email protected]>
- */
- #include <linux/bcm47xx_nvram.h>
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include "ofpart_linksys_ns.h"
- #define NVRAM_BOOT_PART "bootpartition"
- static int ofpart_linksys_ns_bootpartition(void)
- {
- char buf[4];
- int bootpartition;
- /* Check CFE environment variable */
- if (bcm47xx_nvram_getenv(NVRAM_BOOT_PART, buf, sizeof(buf)) > 0) {
- if (!kstrtoint(buf, 0, &bootpartition))
- return bootpartition;
- pr_warn("Failed to parse %s value \"%s\"\n", NVRAM_BOOT_PART,
- buf);
- } else {
- pr_warn("Failed to get NVRAM \"%s\"\n", NVRAM_BOOT_PART);
- }
- return 0;
- }
- int linksys_ns_partitions_post_parse(struct mtd_info *mtd,
- struct mtd_partition *parts,
- int nr_parts)
- {
- int bootpartition = ofpart_linksys_ns_bootpartition();
- int trx_idx = 0;
- int i;
- for (i = 0; i < nr_parts; i++) {
- if (of_device_is_compatible(parts[i].of_node, "linksys,ns-firmware")) {
- if (trx_idx++ == bootpartition)
- parts[i].name = "firmware";
- else
- parts[i].name = "backup";
- }
- }
- return 0;
- }
|