mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-11-04 07:00:39 +01:00 
			
		
		
		
	Add general programmer sanity checks
And remove the completely unused vendor field. Corresponding to flashrom svn r1630. Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
		
							
								
								
									
										29
									
								
								flashrom.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								flashrom.c
									
									
									
									
									
								
							@@ -1557,8 +1557,9 @@ void print_banner(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int selfcheck(void)
 | 
					int selfcheck(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret = 0;
 | 
					 | 
				
			||||||
	const struct flashchip *chip;
 | 
						const struct flashchip *chip;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Safety check. Instead of aborting after the first error, check
 | 
						/* Safety check. Instead of aborting after the first error, check
 | 
				
			||||||
	 * if more errors exist.
 | 
						 * if more errors exist.
 | 
				
			||||||
@@ -1567,6 +1568,32 @@ int selfcheck(void)
 | 
				
			|||||||
		msg_gerr("Programmer table miscompilation!\n");
 | 
							msg_gerr("Programmer table miscompilation!\n");
 | 
				
			||||||
		ret = 1;
 | 
							ret = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						for (i = 0; i < PROGRAMMER_INVALID; i++) {
 | 
				
			||||||
 | 
							const struct programmer_entry p = programmer_table[i];
 | 
				
			||||||
 | 
							if (p.name == NULL) {
 | 
				
			||||||
 | 
								msg_gerr("All programmers need a valid name, but the one with index %d does not!\n", i);
 | 
				
			||||||
 | 
								ret = 1;
 | 
				
			||||||
 | 
								/* This might hide other problems with this programmer, but allows for better error
 | 
				
			||||||
 | 
								 * messages below without jumping through hoops. */
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (p.init == NULL) {
 | 
				
			||||||
 | 
								msg_gerr("Programmer %s does not have a valid init function!\n", p.name);
 | 
				
			||||||
 | 
								ret = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (p.delay == NULL) {
 | 
				
			||||||
 | 
								msg_gerr("Programmer %s does not have a valid delay function!\n", p.name);
 | 
				
			||||||
 | 
								ret = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (p.map_flash_region == NULL) {
 | 
				
			||||||
 | 
								msg_gerr("Programmer %s does not have a valid map_flash_region function!\n", p.name);
 | 
				
			||||||
 | 
								ret = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (p.unmap_flash_region == NULL) {
 | 
				
			||||||
 | 
								msg_gerr("Programmer %s does not have a valid unmap_flash_region function!\n", p.name);
 | 
				
			||||||
 | 
								ret = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	/* It would be favorable if we could also check for correct termination
 | 
						/* It would be favorable if we could also check for correct termination
 | 
				
			||||||
	 * of the following arrays, but we don't know their sizes in here...
 | 
						 * of the following arrays, but we don't know their sizes in here...
 | 
				
			||||||
	 * For 'flashchips' we check the first element to be non-null. In the
 | 
						 * For 'flashchips' we check the first element to be non-null. In the
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,13 +91,11 @@ enum programmer {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct programmer_entry {
 | 
					struct programmer_entry {
 | 
				
			||||||
	const char *vendor;
 | 
					 | 
				
			||||||
	const char *name;
 | 
						const char *name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int (*init) (void);
 | 
						int (*init) (void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void *(*map_flash_region) (const char *descr, unsigned long phys_addr,
 | 
						void *(*map_flash_region) (const char *descr, unsigned long phys_addr, size_t len);
 | 
				
			||||||
				   size_t len);
 | 
					 | 
				
			||||||
	void (*unmap_flash_region) (void *virt_addr, size_t len);
 | 
						void (*unmap_flash_region) (void *virt_addr, size_t len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void (*delay) (int usecs);
 | 
						void (*delay) (int usecs);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user