51 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl>4 */5 6#include <linux/bcm47xx_nvram.h>7#include <linux/mtd/mtd.h>8#include <linux/mtd/partitions.h>9 10#include "ofpart_linksys_ns.h"11 12#define NVRAM_BOOT_PART "bootpartition"13 14static int ofpart_linksys_ns_bootpartition(void)15{16 char buf[4];17 int bootpartition;18 19 /* Check CFE environment variable */20 if (bcm47xx_nvram_getenv(NVRAM_BOOT_PART, buf, sizeof(buf)) > 0) {21 if (!kstrtoint(buf, 0, &bootpartition))22 return bootpartition;23 pr_warn("Failed to parse %s value \"%s\"\n", NVRAM_BOOT_PART,24 buf);25 } else {26 pr_warn("Failed to get NVRAM \"%s\"\n", NVRAM_BOOT_PART);27 }28 29 return 0;30}31 32int linksys_ns_partitions_post_parse(struct mtd_info *mtd,33 struct mtd_partition *parts,34 int nr_parts)35{36 int bootpartition = ofpart_linksys_ns_bootpartition();37 int trx_idx = 0;38 int i;39 40 for (i = 0; i < nr_parts; i++) {41 if (of_device_is_compatible(parts[i].of_node, "linksys,ns-firmware")) {42 if (trx_idx++ == bootpartition)43 parts[i].name = "firmware";44 else45 parts[i].name = "backup";46 }47 }48 49 return 0;50}51