Skip to content

Commit

Permalink
MIPS: bcm63xx: nvram: Use nvram structure definition from header file
Browse files Browse the repository at this point in the history
Use the common definition of the nvram structure from the header file
include/linux/bcm963xx_nvram.h instead of maintaining a separate copy.

Read the version 5 size of nvram data from memory and then call the
new checksum verification function from the header file.

Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Brian Norris <computersforpeace@gmail.com>
Cc: Kevin Cernekee <cernekee@gmail.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Jonas Gorski <jogo@openwrt.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: MIPS Mailing List <linux-mips@linux-mips.org>
Cc: MTD Maling List <linux-mtd@lists.infradead.org>
Patchwork: https://patchwork.linux-mips.org/patch/11831/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
nomis authored and ralfbaechle committed Jan 24, 2016
1 parent 3271e61 commit 5a8b0b1
Showing 1 changed file with 3 additions and 32 deletions.
35 changes: 3 additions & 32 deletions arch/mips/bcm63xx/nvram.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#define pr_fmt(fmt) "bcm63xx_nvram: " fmt

#include <linux/bcm963xx_nvram.h>
#include <linux/init.h>
#include <linux/crc32.h>
#include <linux/export.h>
Expand All @@ -18,51 +19,21 @@

#include <bcm63xx_nvram.h>

/*
* nvram structure
*/
struct bcm963xx_nvram {
u32 version;
u8 reserved1[256];
u8 name[16];
u32 main_tp_number;
u32 psi_size;
u32 mac_addr_count;
u8 mac_addr_base[ETH_ALEN];
u8 reserved2[2];
u32 checksum_old;
u8 reserved3[720];
u32 checksum_high;
};

#define BCM63XX_DEFAULT_PSI_SIZE 64

static struct bcm963xx_nvram nvram;
static int mac_addr_used;

void __init bcm63xx_nvram_init(void *addr)
{
unsigned int check_len;
u32 crc, expected_crc;
u8 hcs_mac_addr[ETH_ALEN] = { 0x00, 0x10, 0x18, 0xff, 0xff, 0xff };

/* extract nvram data */
memcpy(&nvram, addr, sizeof(nvram));
memcpy(&nvram, addr, BCM963XX_NVRAM_V5_SIZE);

/* check checksum before using data */
if (nvram.version <= 4) {
check_len = offsetof(struct bcm963xx_nvram, reserved3);
expected_crc = nvram.checksum_old;
nvram.checksum_old = 0;
} else {
check_len = sizeof(nvram);
expected_crc = nvram.checksum_high;
nvram.checksum_high = 0;
}

crc = crc32_le(~0, (u8 *)&nvram, check_len);

if (crc != expected_crc)
if (bcm963xx_nvram_checksum(&nvram, &expected_crc, &crc))
pr_warn("nvram checksum failed, contents may be invalid (expected %08x, got %08x)\n",
expected_crc, crc);

Expand Down

0 comments on commit 5a8b0b1

Please sign in to comment.