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 <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Brian Norris <[email protected]>
Cc: Kevin Cernekee <[email protected]>
Cc: Florian Fainelli <[email protected]>
Cc: Jonas Gorski <[email protected]>
Cc: Linux Kernel Mailing List <[email protected]>
Cc: MIPS Mailing List <[email protected]>
Cc: MTD Maling List <[email protected]>
Patchwork: https://patchwork.linux-mips.org/patch/11831/
Signed-off-by: Ralf Baechle <[email protected]>
  • 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.