From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from proxima.lp0.eu ([2001:8b0:ffea:0:205:b4ff:fe12:530]) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1a7Vea-0000w7-FX for linux-mtd@lists.infradead.org; Fri, 11 Dec 2015 21:55:05 +0000 From: Simon Arlott Subject: [PATCH linux-next (v3) 1/3] MIPS: bcm963xx: Add Broadcom BCM963xx board nvram data structure To: David Woodhouse , Brian Norris , Florian Fainelli , Ralf Baechle , Kevin Cernekee Cc: Linux Kernel Mailing List , MTD Maling List , Jonas Gorski , bcm-kernel-feedback-list , MIPS Mailing List , linux-api@vger.kernel.org Message-ID: <566B460F.1040603@simon.arlott.org.uk> Date: Fri, 11 Dec 2015 21:54:23 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Broadcom BCM963xx boards have multiple nvram variants across different SoCs with additional checksum fields added whenever the size of the nvram was extended. Add this structure as a header file so that multiple drivers and userspace can use it. Signed-off-by: Simon Arlott --- v3: Fix includes/type names, add comments explaining the nvram struct. v2: Use external struct bcm963xx_nvram definition for bcm963268part. MAINTAINERS | 1 + include/uapi/linux/bcm963xx_nvram.h | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 include/uapi/linux/bcm963xx_nvram.h diff --git a/MAINTAINERS b/MAINTAINERS index 6b6d4e2e..abf18b4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2393,6 +2393,7 @@ F: drivers/irqchip/irq-bcm63* F: drivers/irqchip/irq-bcm7* F: drivers/irqchip/irq-brcmstb* F: include/linux/bcm63xx_wdt.h +F: include/uapi/linux/bcm963xx_nvram.h BROADCOM TG3 GIGABIT ETHERNET DRIVER M: Prashant Sreedharan diff --git a/include/uapi/linux/bcm963xx_nvram.h b/include/uapi/linux/bcm963xx_nvram.h new file mode 100644 index 0000000..2dcb307 --- /dev/null +++ b/include/uapi/linux/bcm963xx_nvram.h @@ -0,0 +1,53 @@ +#ifndef _UAPI__LINUX_BCM963XX_NVRAM_H__ +#define _UAPI__LINUX_BCM963XX_NVRAM_H__ + +#include +#include + +/* + * Broadcom BCM963xx SoC board nvram data structure. + * + * The nvram structure varies in size depending on the SoC board version. Use + * the appropriate minimum BCM963XX_NVRAM_*_SIZE define for the information + * you need instead of sizeof(struct bcm963xx_nvram) as this may change. + * + * The "version" field value maps directly to the size and checksum names, e.g. + * version 4 uses "checksum_v4" and the data is BCM963XX_NVRAM_V4_SIZE bytes. + * + * Do not use the __reserved fields, especially not as an offset for CRC + * calculations (use BCM963XX_NVRAM_*_SIZE instead). These may be removed or + * repositioned. + */ + +#define BCM963XX_NVRAM_V4_SIZE 300 +#define BCM963XX_NVRAM_V5_SIZE 1024 +#define BCM963XX_NVRAM_V6_SIZE BCM963XX_NVRAM_V5_SIZE +#define BCM963XX_NVRAM_V7_SIZE 3072 + +#define BCM963XX_NVRAM_NR_PARTS 5 + +struct bcm963xx_nvram { + __u32 version; + char bootline[256]; + char name[16]; + __u32 main_tp_number; + __u32 psi_size; + __u32 mac_addr_count; + __u8 mac_addr_base[ETH_ALEN]; + __u8 __reserved1[2]; + __u32 checksum_v4; + + __u8 __reserved2[292]; + __u32 nand_part_offset[BCM963XX_NVRAM_NR_PARTS]; + __u32 nand_part_size[BCM963XX_NVRAM_NR_PARTS]; + __u8 __reserved3[388]; + union { + __u32 checksum_v5; + __u32 checksum_v6; + }; + + __u8 __reserved4[2044]; + __u32 checksum_v7; +} __packed; + +#endif /* _UAPI__LINUX_BCM963XX_NVRAM_H__ */ -- 2.1.4 -- Simon Arlott