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  */
 |