Blame view

tools/envcrc.c 3.22 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
fe57bb19b   wdenk   Initial revision
2
3
4
  /*
   * (C) Copyright 2001
   * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
fe57bb19b   wdenk   Initial revision
5
   */
f67066b6b   Mike Frysinger   envcrc: check ret...
6
  #include <errno.h>
fe57bb19b   wdenk   Initial revision
7
  #include <stdio.h>
89cdab788   Mike Frysinger   crc32: use uint32...
8
  #include <stdint.h>
fe57bb19b   wdenk   Initial revision
9
  #include <stdlib.h>
837db3d87   Mike Frysinger   tools/envcrc: add...
10
  #include <string.h>
3db711085   Simon Glass   crc32: Use the cr...
11
  #include <u-boot/crc.h>
fe57bb19b   wdenk   Initial revision
12
  #include <unistd.h>
f33f3e07f   York Sun   tools/env: Correc...
13
  #include <linux/kconfig.h>
dc17fb6dc   Wolfgang Denk   Cleanup build pro...
14
15
16
17
  #ifndef __ASSEMBLY__
  #define	__ASSEMBLY__			/* Dirty trick to get only #defines	*/
  #endif
  #define	__ASM_STUB_PROCESSOR_H__	/* don't include asm/processor.		*/
fe57bb19b   wdenk   Initial revision
18
19
  #include <config.h>
  #undef	__ASSEMBLY__
5a1aceb06   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV_IS...
20
  #if defined(CONFIG_ENV_IS_IN_FLASH)
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
21
  # ifndef  CONFIG_ENV_ADDR
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
22
  #  define CONFIG_ENV_ADDR	(CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
fe57bb19b   wdenk   Initial revision
23
  # endif
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
24
  # ifndef  CONFIG_ENV_OFFSET
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
25
  #  define CONFIG_ENV_OFFSET (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
fe57bb19b   wdenk   Initial revision
26
  # endif
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
27
  # if !defined(CONFIG_ENV_ADDR_REDUND) && defined(CONFIG_ENV_OFFSET_REDUND)
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
28
  #  define CONFIG_ENV_ADDR_REDUND	(CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET_REDUND)
43d9616cf   wdenk   * Patch by Robert...
29
  # endif
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
30
31
  # ifndef  CONFIG_ENV_SIZE
  #  define CONFIG_ENV_SIZE	CONFIG_ENV_SECT_SIZE
fe57bb19b   wdenk   Initial revision
32
  # endif
a747a7f31   Wolfgang Denk   Revert "env: only...
33
34
  # if (CONFIG_ENV_ADDR >= CONFIG_SYS_MONITOR_BASE) && \
       ((CONFIG_ENV_ADDR + CONFIG_ENV_SIZE) <= (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN))
6f403bad8   Igor Grinberg   env: remove value...
35
  #  define ENV_IS_EMBEDDED
a747a7f31   Wolfgang Denk   Revert "env: only...
36
  # endif
5a1aceb06   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV_IS...
37
  #endif	/* CONFIG_ENV_IS_IN_FLASH */
fe57bb19b   wdenk   Initial revision
38

c3eb3fe49   Mike Frysinger   env: allow people...
39
  #if defined(ENV_IS_EMBEDDED) && !defined(CONFIG_BUILD_ENVCRC)
6f403bad8   Igor Grinberg   env: remove value...
40
  # define CONFIG_BUILD_ENVCRC
c3eb3fe49   Mike Frysinger   env: allow people...
41
  #endif
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
42
  #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
89cdab788   Mike Frysinger   crc32: use uint32...
43
  # define ENV_HEADER_SIZE	(sizeof(uint32_t) + 1)
43d9616cf   wdenk   * Patch by Robert...
44
  #else
89cdab788   Mike Frysinger   crc32: use uint32...
45
  # define ENV_HEADER_SIZE	(sizeof(uint32_t))
43d9616cf   wdenk   * Patch by Robert...
46
  #endif
0e8d15866   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ENV ma...
47
  #define ENV_SIZE (CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
43d9616cf   wdenk   * Patch by Robert...
48

c3eb3fe49   Mike Frysinger   env: allow people...
49
  #ifdef CONFIG_BUILD_ENVCRC
f3998fdc4   Simon Glass   env: Rename envir...
50
  # include <env_internal.h>
fe57bb19b   wdenk   Initial revision
51
  extern unsigned int env_size;
be54ec162   Simon Glass   env: Rename envir...
52
  extern env_t embedded_environment;
c3eb3fe49   Mike Frysinger   env: allow people...
53
  #endif	/* CONFIG_BUILD_ENVCRC */
fe57bb19b   wdenk   Initial revision
54

b2ea91ba5   Simon Glass   crc: Fix code sty...
55
  extern uint32_t crc32(uint32_t, const unsigned char *, unsigned int);
73f94ed40   Igor Grinberg   tools/envcrc: fix...
56

fe57bb19b   wdenk   Initial revision
57
58
  int main (int argc, char **argv)
  {
c3eb3fe49   Mike Frysinger   env: allow people...
59
  #ifdef CONFIG_BUILD_ENVCRC
837db3d87   Mike Frysinger   tools/envcrc: add...
60
  	unsigned char pad = 0x00;
89cdab788   Mike Frysinger   crc32: use uint32...
61
  	uint32_t crc;
be54ec162   Simon Glass   env: Rename envir...
62
  	unsigned char *envptr = (unsigned char *)&embedded_environment,
dc17fb6dc   Wolfgang Denk   Cleanup build pro...
63
64
  		*dataptr = envptr + ENV_HEADER_SIZE;
  	unsigned int datasize = ENV_SIZE;
837db3d87   Mike Frysinger   tools/envcrc: add...
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  	unsigned int eoe;
  
  	if (argv[1] && !strncmp(argv[1], "--binary", 8)) {
  		int ipad = 0xff;
  		if (argv[1][8] == '=')
  			sscanf(argv[1] + 9, "%i", &ipad);
  		pad = ipad;
  	}
  
  	if (pad) {
  		/* find the end of env */
  		for (eoe = 0; eoe < datasize - 1; ++eoe)
  			if (!dataptr[eoe] && !dataptr[eoe+1]) {
  				eoe += 2;
  				break;
  			}
  		if (eoe < datasize - 1)
  			memset(dataptr + eoe, pad, datasize - eoe);
  	}
fe57bb19b   wdenk   Initial revision
84

b2ea91ba5   Simon Glass   crc: Fix code sty...
85
  	crc = crc32(0, dataptr, datasize);
fe57bb19b   wdenk   Initial revision
86

dc17fb6dc   Wolfgang Denk   Cleanup build pro...
87
88
  	/* Check if verbose mode is activated passing a parameter to the program */
  	if (argc > 1) {
837db3d87   Mike Frysinger   tools/envcrc: add...
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  		if (!strncmp(argv[1], "--binary", 8)) {
  			int le = (argc > 2 ? !strcmp(argv[2], "le") : 1);
  			size_t i, start, end, step;
  			if (le) {
  				start = 0;
  				end = ENV_HEADER_SIZE;
  				step = 1;
  			} else {
  				start = ENV_HEADER_SIZE - 1;
  				end = -1;
  				step = -1;
  			}
  			for (i = start; i != end; i += step)
  				printf("%c", (crc & (0xFF << (i * 8))) >> (i * 8));
f67066b6b   Mike Frysinger   envcrc: check ret...
103
104
105
  			if (fwrite(dataptr, 1, datasize, stdout) != datasize)
  				fprintf(stderr, "fwrite() failed: %s
  ", strerror(errno));
837db3d87   Mike Frysinger   tools/envcrc: add...
106
107
108
109
110
111
112
  		} else {
  			printf("CRC32 from offset %08X to %08X of environment = %08X
  ",
  				(unsigned int) (dataptr - envptr),
  				(unsigned int) (dataptr - envptr) + datasize,
  				crc);
  		}
dc17fb6dc   Wolfgang Denk   Cleanup build pro...
113
114
115
116
  	} else {
  		printf ("0x%08X
  ", crc);
  	}
a747a7f31   Wolfgang Denk   Revert "env: only...
117
118
119
120
  #else
  	printf ("0
  ");
  #endif
dc17fb6dc   Wolfgang Denk   Cleanup build pro...
121
  	return EXIT_SUCCESS;
fe57bb19b   wdenk   Initial revision
122
  }