From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 08/25] arm: Zap tricorder-eeprom
Date: Mon, 20 Oct 2014 03:48:09 +0200 [thread overview]
Message-ID: <1413769706-8596-9-git-send-email-marex@denx.de> (raw)
In-Reply-To: <1413769706-8596-1-git-send-email-marex@denx.de>
This is a reimplementation of the cmd_eeprom with the added bit
where it can select I2C bus. Just remove this ugly duplication.
If someone needs this code, there should be proper implementation
submitted.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andreas Bie?mann <andreas.biessmann@corscience.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@ti.com>
Cc: Heiko Schocher <hs@denx.de>
---
board/corscience/tricorder/Makefile | 2 +-
board/corscience/tricorder/tricorder-eeprom.c | 251 --------------------------
board/corscience/tricorder/tricorder-eeprom.h | 41 -----
3 files changed, 1 insertion(+), 293 deletions(-)
delete mode 100644 board/corscience/tricorder/tricorder-eeprom.c
delete mode 100644 board/corscience/tricorder/tricorder-eeprom.h
diff --git a/board/corscience/tricorder/Makefile b/board/corscience/tricorder/Makefile
index 266432d..c14ff07 100644
--- a/board/corscience/tricorder/Makefile
+++ b/board/corscience/tricorder/Makefile
@@ -8,4 +8,4 @@
# SPDX-License-Identifier: GPL-2.0+
#
-obj-y := tricorder.o tricorder-eeprom.o led.o
+obj-y := tricorder.o led.o
diff --git a/board/corscience/tricorder/tricorder-eeprom.c b/board/corscience/tricorder/tricorder-eeprom.c
deleted file mode 100644
index 1c74a0f..0000000
--- a/board/corscience/tricorder/tricorder-eeprom.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * (C) Copyright 2013
- * Corscience GmbH & Co. KG, <www.corscience.de>
- * Andreas Bie?mann <andreas.biessmann@corscience.de>
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-#include <common.h>
-#include <i2c.h>
-
-#include "tricorder-eeprom.h"
-
-static inline void warn_wrong_value(const char *msg, unsigned int a,
- unsigned int b)
-{
- printf("Expected EEPROM %s %08x, got %08x\n", msg, a, b);
-}
-
-static int handle_eeprom_v0(struct tricorder_eeprom *eeprom)
-{
- struct tricorder_eeprom_v0 {
- uint32_t magic;
- uint16_t length;
- uint16_t version;
- char board_name[TRICORDER_BOARD_NAME_LENGTH];
- char board_version[TRICORDER_BOARD_VERSION_LENGTH];
- char board_serial[TRICORDER_BOARD_SERIAL_LENGTH];
- uint32_t crc32;
- } __packed eepromv0;
- uint32_t crc;
-
- printf("Old EEPROM (v0), consider rewrite!\n");
-
- if (be16_to_cpu(eeprom->length) != sizeof(eepromv0)) {
- warn_wrong_value("length", sizeof(eepromv0),
- be16_to_cpu(eeprom->length));
- return 1;
- }
-
- memcpy(&eepromv0, eeprom, sizeof(eepromv0));
-
- crc = crc32(0L, (unsigned char *)&eepromv0,
- sizeof(eepromv0) - sizeof(eepromv0.crc32));
- if (be32_to_cpu(eepromv0.crc32) != crc) {
- warn_wrong_value("CRC", be32_to_cpu(eepromv0.crc32),
- crc);
- return 1;
- }
-
- /* Ok the content is correct, do the conversion */
- memset(eeprom->interface_version, 0x0,
- TRICORDER_INTERFACE_VERSION_LENGTH);
- crc = crc32(0L, (unsigned char *)eeprom, TRICORDER_EEPROM_CRC_SIZE);
- eeprom->crc32 = cpu_to_be32(crc);
-
- return 0;
-}
-
-static int handle_eeprom_v1(struct tricorder_eeprom *eeprom)
-{
- uint32_t crc;
-
- if (be16_to_cpu(eeprom->length) != TRICORDER_EEPROM_SIZE) {
- warn_wrong_value("length", TRICORDER_EEPROM_SIZE,
- be16_to_cpu(eeprom->length));
- return 1;
- }
-
- crc = crc32(0L, (unsigned char *)eeprom, TRICORDER_EEPROM_CRC_SIZE);
- if (be32_to_cpu(eeprom->crc32) != crc) {
- warn_wrong_value("CRC", be32_to_cpu(eeprom->crc32), crc);
- return 1;
- }
-
- return 0;
-}
-
-int tricorder_get_eeprom(int addr, struct tricorder_eeprom *eeprom)
-{
-#ifdef CONFIG_SYS_EEPROM_BUS_NUM
- unsigned int bus = i2c_get_bus_num();
- i2c_set_bus_num(CONFIG_SYS_EEPROM_BUS_NUM);
-#endif
-
- memset(eeprom, 0, TRICORDER_EEPROM_SIZE);
-
- i2c_read(addr, 0, 2, (unsigned char *)eeprom, TRICORDER_EEPROM_SIZE);
-#ifdef CONFIG_SYS_EEPROM_BUS_NUM
- i2c_set_bus_num(bus);
-#endif
-
- if (be32_to_cpu(eeprom->magic) != TRICORDER_EEPROM_MAGIC) {
- warn_wrong_value("magic", TRICORDER_EEPROM_MAGIC,
- be32_to_cpu(eeprom->magic));
- return 1;
- }
-
- switch (be16_to_cpu(eeprom->version)) {
- case 0:
- return handle_eeprom_v0(eeprom);
- case 1:
- return handle_eeprom_v1(eeprom);
- default:
- warn_wrong_value("version", TRICORDER_EEPROM_VERSION,
- be16_to_cpu(eeprom->version));
- return 1;
- }
-}
-
-#if !defined(CONFIG_SPL)
-int tricorder_eeprom_read(unsigned devaddr)
-{
- struct tricorder_eeprom eeprom;
- int ret = tricorder_get_eeprom(devaddr, &eeprom);
-
- if (ret)
- return ret;
-
- printf("Board type: %.*s\n",
- sizeof(eeprom.board_name), eeprom.board_name);
- printf("Board version: %.*s\n",
- sizeof(eeprom.board_version), eeprom.board_version);
- printf("Board serial: %.*s\n",
- sizeof(eeprom.board_serial), eeprom.board_serial);
- printf("Board interface version: %.*s\n",
- sizeof(eeprom.interface_version),
- eeprom.interface_version);
-
- return ret;
-}
-
-int tricorder_eeprom_write(unsigned devaddr, const char *name,
- const char *version, const char *serial, const char *interface)
-{
- struct tricorder_eeprom eeprom, eeprom_verify;
- size_t length;
- uint32_t crc;
- int ret;
- unsigned char *p;
- int i;
-#ifdef CONFIG_SYS_EEPROM_BUS_NUM
- unsigned int bus;
-#endif
-
- memset(eeprom, 0, TRICORDER_EEPROM_SIZE);
- memset(eeprom_verify, 0, TRICORDER_EEPROM_SIZE);
-
- eeprom.magic = cpu_to_be32(TRICORDER_EEPROM_MAGIC);
- eeprom.length = cpu_to_be16(TRICORDER_EEPROM_SIZE);
- eeprom.version = cpu_to_be16(TRICORDER_EEPROM_VERSION);
-
- length = min(sizeof(eeprom.board_name), strlen(name));
- strncpy(eeprom.board_name, name, length);
-
- length = min(sizeof(eeprom.board_version), strlen(version));
- strncpy(eeprom.board_version, version, length);
-
- length = min(sizeof(eeprom.board_serial), strlen(serial));
- strncpy(eeprom.board_serial, serial, length);
-
- if (interface) {
- length = min(sizeof(eeprom.interface_version),
- strlen(interface));
- strncpy(eeprom.interface_version, interface, length);
- }
-
- crc = crc32(0L, (unsigned char *)&eeprom, TRICORDER_EEPROM_CRC_SIZE);
- eeprom.crc32 = cpu_to_be32(crc);
-
-#if defined(DEBUG)
- puts("Tricorder EEPROM content:\n");
- print_buffer(0, &eeprom, 1, sizeof(eeprom), 16);
-#endif
-
-#ifdef CONFIG_SYS_EEPROM_BUS_NUM
- bus = i2c_get_bus_num();
- i2c_set_bus_num(CONFIG_SYS_EEPROM_BUS_NUM);
-#endif
-
- /* do page write to the eeprom */
- for (i = 0, p = (unsigned char *)&eeprom;
- i < sizeof(eeprom);
- i += 32, p += 32) {
- ret = i2c_write(devaddr, i, CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
- p, min(sizeof(eeprom) - i, 32));
- if (ret)
- break;
- udelay(5000); /* 5ms write cycle timing */
- }
-
- ret = i2c_read(devaddr, 0, 2, (unsigned char *)&eeprom_verify,
- TRICORDER_EEPROM_SIZE);
-
- if (memcmp(&eeprom, &eeprom_verify, sizeof(eeprom)) != 0) {
- printf("Tricorder: Could not verify EEPROM content!\n");
- ret = 1;
- }
-
-#ifdef CONFIG_SYS_EEPROM_BUS_NUM
- i2c_set_bus_num(bus);
-#endif
- return ret;
-}
-
-int do_tricorder_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- if (argc == 3) {
- ulong dev_addr = simple_strtoul(argv[2], NULL, 16);
- eeprom_init();
- if (strcmp(argv[1], "read") == 0) {
- int rcode;
-
- rcode = tricorder_eeprom_read(dev_addr);
-
- return rcode;
- }
- } else if (argc == 6 || argc == 7) {
- ulong dev_addr = simple_strtoul(argv[2], NULL, 16);
- char *name = argv[3];
- char *version = argv[4];
- char *serial = argv[5];
- char *interface = NULL;
- eeprom_init();
-
- if (argc == 7)
- interface = argv[6];
-
- if (strcmp(argv[1], "write") == 0) {
- int rcode;
-
- rcode = tricorder_eeprom_write(dev_addr, name, version,
- serial, interface);
-
- return rcode;
- }
- }
-
- return CMD_RET_USAGE;
-}
-
-U_BOOT_CMD(
- tricordereeprom, 7, 1, do_tricorder_eeprom,
- "Tricorder EEPROM",
- "read devaddr\n"
- " - read Tricorder EEPROM at devaddr and print content\n"
- "tricordereeprom write devaddr name version serial [interface]\n"
- " - write Tricorder EEPROM@devaddr with 'name', 'version'"
- "and 'serial'\n"
- " optional add an HW interface parameter"
-);
-#endif /* CONFIG_SPL */
diff --git a/board/corscience/tricorder/tricorder-eeprom.h b/board/corscience/tricorder/tricorder-eeprom.h
deleted file mode 100644
index 06ed9a5..0000000
--- a/board/corscience/tricorder/tricorder-eeprom.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * (C) Copyright 2013
- * Corscience GmbH & Co. KG, <www.corscience.de>
- * Andreas Bie?mann <andreas.biessmann@corscience.de>
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
-#ifndef TRICORDER_EEPROM_H_
-#define TRICORDER_EEPROM_H_
-
-#include <linux/compiler.h>
-
-#define TRICORDER_EEPROM_MAGIC 0xc2a94f52
-#define TRICORDER_EEPROM_VERSION 1
-
-#define TRICORDER_BOARD_NAME_LENGTH 12
-#define TRICORDER_BOARD_VERSION_LENGTH 4
-#define TRICORDER_BOARD_SERIAL_LENGTH 12
-#define TRICORDER_INTERFACE_VERSION_LENGTH 4
-
-struct tricorder_eeprom {
- uint32_t magic;
- uint16_t length;
- uint16_t version;
- char board_name[TRICORDER_BOARD_NAME_LENGTH];
- char board_version[TRICORDER_BOARD_VERSION_LENGTH];
- char board_serial[TRICORDER_BOARD_SERIAL_LENGTH];
- char interface_version[TRICORDER_INTERFACE_VERSION_LENGTH];
- uint32_t crc32;
-} __packed;
-
-#define TRICORDER_EEPROM_SIZE sizeof(struct tricorder_eeprom)
-#define TRICORDER_EEPROM_CRC_SIZE (TRICORDER_EEPROM_SIZE - \
- sizeof(uint32_t))
-
-/**
- * @brief read eeprom information from a specific eeprom address
- */
-int tricorder_get_eeprom(int addr, struct tricorder_eeprom *eeprom);
-
-#endif /* TRICORDER_EEPROM_H_ */
--
2.1.1
next prev parent reply other threads:[~2014-10-20 1:48 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-20 1:48 [U-Boot] [RFC][PATCH 00/25] eeprom: Cleanup and support for multiple i2c busses Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 01/25] ppc: Zap ICU862 board Marek Vasut
2014-10-20 3:54 ` Masahiro Yamada
2014-10-20 14:49 ` Marek Vasut
2014-10-20 18:55 ` Wolfgang Denk
2014-10-22 19:10 ` Marek Vasut
2014-10-23 2:26 ` Masahiro Yamada
2014-10-24 14:37 ` Marek Vasut
2014-10-20 19:07 ` Wolfgang Denk
2014-10-20 1:48 ` [U-Boot] [PATCH 02/25] ppc: Zap MHPC board Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 03/25] ppc: Zap Hymod board Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 04/25] ppc: Zap HWW1U1A board Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 05/25] ppc: Zap IDS8247 board Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 06/25] ppc: Zap TQM8260 board Marek Vasut
2014-10-20 19:08 ` Wolfgang Denk
2014-10-20 1:48 ` [U-Boot] [PATCH 07/25] ppc: Zap TQM8272 board Marek Vasut
2014-10-20 19:08 ` Wolfgang Denk
2014-10-20 1:48 ` Marek Vasut [this message]
2014-11-04 16:01 ` [U-Boot] [RFC PATCH] tricorder: rewrite tricordereeprom command Andreas Bießmann
2015-11-10 19:10 ` Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 09/25] eeprom: Shuffle code around Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 10/25] eeprom: Zap CONFIG_SYS_I2C_MULTI_EEPROMS Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 11/25] eeprom: Zap CONFIG_SYS_EEPROM_X40430 Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 12/25] eeprom: Zap eeprom_probe() Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 13/25] eeprom: Zap CONFIG_SPI_X Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 14/25] eeprom: Pull out the I/O code Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 15/25] eeprom: Pull out address computation Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 16/25] eeprom: Make eeprom_write_enable() weak Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 17/25] eeprom: Pull out CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 18/25] eeprom: Suck the ifdef into eeprom_init() Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 19/25] eeprom: Pull out CONFIG_SYS_EEPROM_PAGE_WRITE_BITS Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 20/25] eeprom: Pull out transfer length computation Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 21/25] eeprom: Pull out the RW loop Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 22/25] eeprom: Cultivate the ifdef mess Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 23/25] eeprom: Add bus argument to eeprom_init() Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 24/25] eeprom: Add support for selecting i2c bus Marek Vasut
2014-10-20 1:48 ` [U-Boot] [PATCH 25/25] eeprom: Clean up checkpatch issues Marek Vasut
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1413769706-8596-9-git-send-email-marex@denx.de \
--to=marex@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox