cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ofpart_linksys_ns.c (1129B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      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			else
     45				parts[i].name = "backup";
     46		}
     47	}
     48
     49	return 0;
     50}