When updating firmware, it is very often that we may want to preserve
few sections, for example vital product data (VPD) including serial
number, calibration data and cache. A firmware updater has to hard-code
the section names that need to be preserved and is hard to maintain.
A better approach is to specify that in FMAP area flags (the `area_flag`
field) using FMAP_AREA_PRESERVE. With this patchset, a FMD parser flag
"PRESERVE" is introduced and will be converted to FMAP_AREA_PRESERVE
when generating FMAP data (by fmap_from_fmd.c).
For example, The FMD statement:
  RO_VPD(PRESERVE)@0x0 16k
will generate an FMAP firmware section that:
  area_name = "RO_VPD"
  area_offset = 0
  area_size = 16384
  area_flags = FMAP_AREA_PRESERVE
BUG=chromium:936768
TEST=make; boots on x86 "google/eve" and arm "google/kukui" devices
     Manually added 'PRESERVE' to some FMD files, and verify (by running
     fmap.py) the output coreboot.rom has FMAP_AREA_PRESERVE set
Change-Id: I51e7d31029b98868a1cab0d26bf04a14db01b1c0
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/31707
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
		
	
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /* A Bison parser, made by GNU Bison 3.0.4.  */
 | |
| 
 | |
| /* Bison interface for Yacc-like parsers in C
 | |
| 
 | |
|    Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
 | |
| 
 | |
|    This program is free software: you can redistribute it and/or modify
 | |
|    it under the terms of the GNU General Public License as published by
 | |
|    the Free Software Foundation, either version 3 of the License, or
 | |
|    (at your option) any later version.
 | |
| 
 | |
|    This program is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|    GNU General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU General Public License
 | |
|    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 | |
| 
 | |
| /* As a special exception, you may create a larger work that contains
 | |
|    part or all of the Bison parser skeleton and distribute that work
 | |
|    under terms of your choice, so long as that work isn't itself a
 | |
|    parser generator using the skeleton or a modified version thereof
 | |
|    as a parser skeleton.  Alternatively, if you modify or redistribute
 | |
|    the parser skeleton itself, you may (at your option) remove this
 | |
|    special exception, which will cause the skeleton and the resulting
 | |
|    Bison output files to be licensed under the GNU General Public
 | |
|    License without this special exception.
 | |
| 
 | |
|    This special exception was added by the Free Software Foundation in
 | |
|    version 2.2 of Bison.  */
 | |
| 
 | |
| #ifndef YY_YY_Y_TAB_H_INCLUDED
 | |
| # define YY_YY_Y_TAB_H_INCLUDED
 | |
| /* Debug traces.  */
 | |
| #ifndef YYDEBUG
 | |
| # define YYDEBUG 0
 | |
| #endif
 | |
| #if YYDEBUG
 | |
| extern int yydebug;
 | |
| #endif
 | |
| /* "%code requires" blocks.  */
 | |
| #line 34 "fmd_parser.y" /* yacc.c:1909  */
 | |
| 
 | |
| #include "fmd.h"
 | |
| #include "option.h"
 | |
| 
 | |
| #include <stdbool.h>
 | |
| 
 | |
| struct descriptor_node {
 | |
| 	struct flashmap_descriptor *val;
 | |
| 	struct descriptor_node *next;
 | |
| };
 | |
| 
 | |
| struct descriptor_list {
 | |
| 	size_t len;
 | |
| 	struct descriptor_node *head;
 | |
| 	struct descriptor_node *tail;
 | |
| };
 | |
| 
 | |
| extern struct flashmap_descriptor *res;
 | |
| 
 | |
| struct flashmap_descriptor *parse_descriptor(
 | |
| 	char *name, union flashmap_flags flags, struct unsigned_option offset,
 | |
| 	struct unsigned_option size, struct descriptor_list children);
 | |
| void yyerror(const char *s);
 | |
| 
 | |
| #line 69 "y.tab.h" /* yacc.c:1909  */
 | |
| 
 | |
| /* Token type.  */
 | |
| #ifndef YYTOKENTYPE
 | |
| # define YYTOKENTYPE
 | |
|   enum yytokentype
 | |
|   {
 | |
|     INTEGER = 258,
 | |
|     OCTAL = 259,
 | |
|     STRING = 260,
 | |
|     FLAG_CBFS = 261,
 | |
|     FLAG_PRESERVE = 262
 | |
|   };
 | |
| #endif
 | |
| /* Tokens.  */
 | |
| #define INTEGER 258
 | |
| #define OCTAL 259
 | |
| #define STRING 260
 | |
| #define FLAG_CBFS 261
 | |
| #define FLAG_PRESERVE 262
 | |
| 
 | |
| /* Value type.  */
 | |
| #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 | |
| 
 | |
| union YYSTYPE
 | |
| {
 | |
| #line 25 "fmd_parser.y" /* yacc.c:1909  */
 | |
| 
 | |
| 	unsigned intval;
 | |
| 	char *strval;
 | |
| 	struct unsigned_option maybe_intval;
 | |
| 	struct flashmap_descriptor *region_ptr;
 | |
| 	union flashmap_flags flags;
 | |
| 	struct descriptor_list region_listhdr;
 | |
| 
 | |
| #line 104 "y.tab.h" /* yacc.c:1909  */
 | |
| };
 | |
| 
 | |
| typedef union YYSTYPE YYSTYPE;
 | |
| # define YYSTYPE_IS_TRIVIAL 1
 | |
| # define YYSTYPE_IS_DECLARED 1
 | |
| #endif
 | |
| 
 | |
| 
 | |
| extern YYSTYPE yylval;
 | |
| 
 | |
| int yyparse (void);
 | |
| 
 | |
| #endif /* !YY_YY_Y_TAB_H_INCLUDED  */
 |