xref: /aosp_15_r20/external/flashrom/cli_common.c (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker /*
2*0d6140beSAndroid Build Coastguard Worker  * This file is part of the flashrom project.
3*0d6140beSAndroid Build Coastguard Worker  *
4*0d6140beSAndroid Build Coastguard Worker  * Copyright (C) 2009 Uwe Hermann <[email protected]>
5*0d6140beSAndroid Build Coastguard Worker  * Copyright (C) 2009 Carl-Daniel Hailfinger
6*0d6140beSAndroid Build Coastguard Worker  * Copyright (C) 2011-2014 Stefan Tauner
7*0d6140beSAndroid Build Coastguard Worker  *
8*0d6140beSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify
9*0d6140beSAndroid Build Coastguard Worker  * it under the terms of the GNU General Public License as published by
10*0d6140beSAndroid Build Coastguard Worker  * the Free Software Foundation; either version 2 of the License, or
11*0d6140beSAndroid Build Coastguard Worker  * (at your option) any later version.
12*0d6140beSAndroid Build Coastguard Worker  *
13*0d6140beSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
14*0d6140beSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*0d6140beSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*0d6140beSAndroid Build Coastguard Worker  * GNU General Public License for more details.
17*0d6140beSAndroid Build Coastguard Worker  */
18*0d6140beSAndroid Build Coastguard Worker 
19*0d6140beSAndroid Build Coastguard Worker #include <stdlib.h>
20*0d6140beSAndroid Build Coastguard Worker #include <string.h>
21*0d6140beSAndroid Build Coastguard Worker #include "flash.h"
22*0d6140beSAndroid Build Coastguard Worker 
print_chip_support_status(const struct flashchip * chip)23*0d6140beSAndroid Build Coastguard Worker void print_chip_support_status(const struct flashchip *chip)
24*0d6140beSAndroid Build Coastguard Worker {
25*0d6140beSAndroid Build Coastguard Worker 	if (chip->feature_bits & FEATURE_OTP) {
26*0d6140beSAndroid Build Coastguard Worker 		msg_cdbg("This chip may contain one-time programmable memory. flashrom cannot read\n"
27*0d6140beSAndroid Build Coastguard Worker 			 "and may never be able to write it, hence it may not be able to completely\n"
28*0d6140beSAndroid Build Coastguard Worker 			 "clone the contents of this chip (see man page for details).\n");
29*0d6140beSAndroid Build Coastguard Worker 	}
30*0d6140beSAndroid Build Coastguard Worker 
31*0d6140beSAndroid Build Coastguard Worker 	if ((chip->tested.erase == NA) && (chip->tested.write == NA)) {
32*0d6140beSAndroid Build Coastguard Worker 		msg_cdbg("This chip's main memory can not be erased/written by design.\n");
33*0d6140beSAndroid Build Coastguard Worker 	}
34*0d6140beSAndroid Build Coastguard Worker 
35*0d6140beSAndroid Build Coastguard Worker 	if ((chip->tested.probe == BAD) || (chip->tested.probe == NT) ||
36*0d6140beSAndroid Build Coastguard Worker 	    (chip->tested.read == BAD)  || (chip->tested.read == NT) ||
37*0d6140beSAndroid Build Coastguard Worker 	    (chip->tested.erase == BAD) || (chip->tested.erase == NT) ||
38*0d6140beSAndroid Build Coastguard Worker 	    (chip->tested.write == BAD) || (chip->tested.write == NT) ||
39*0d6140beSAndroid Build Coastguard Worker 	    (chip->tested.wp == BAD) || (chip->tested.wp == NT)){
40*0d6140beSAndroid Build Coastguard Worker 		msg_cinfo("===\n");
41*0d6140beSAndroid Build Coastguard Worker 		if ((chip->tested.probe == BAD) ||
42*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.read == BAD) ||
43*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.erase == BAD) ||
44*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.write == BAD) ||
45*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.wp == BAD)) {
46*0d6140beSAndroid Build Coastguard Worker 			msg_cinfo("This flash part has status NOT WORKING for operations:");
47*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.probe == BAD)
48*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" PROBE");
49*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.read == BAD)
50*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" READ");
51*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.erase == BAD)
52*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" ERASE");
53*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.write == BAD)
54*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" WRITE");
55*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.wp == BAD)
56*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" WP");
57*0d6140beSAndroid Build Coastguard Worker 			msg_cinfo("\n");
58*0d6140beSAndroid Build Coastguard Worker 		}
59*0d6140beSAndroid Build Coastguard Worker 		if ((chip->tested.probe == NT) ||
60*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.read == NT) ||
61*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.erase == NT) ||
62*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.write == NT) ||
63*0d6140beSAndroid Build Coastguard Worker 		    (chip->tested.wp == NT)) {
64*0d6140beSAndroid Build Coastguard Worker 			msg_cinfo("This flash part has status UNTESTED for operations:");
65*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.probe == NT)
66*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" PROBE");
67*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.read == NT)
68*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" READ");
69*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.erase == NT)
70*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" ERASE");
71*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.write == NT)
72*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" WRITE");
73*0d6140beSAndroid Build Coastguard Worker 			if (chip->tested.wp == NT)
74*0d6140beSAndroid Build Coastguard Worker 				msg_cinfo(" WP");
75*0d6140beSAndroid Build Coastguard Worker 			msg_cinfo("\n");
76*0d6140beSAndroid Build Coastguard Worker 		}
77*0d6140beSAndroid Build Coastguard Worker 		msg_cinfo("The test status of this chip may have been updated in the latest development\n"
78*0d6140beSAndroid Build Coastguard Worker 			  "version of flashrom. If you are running the latest development version,\n"
79*0d6140beSAndroid Build Coastguard Worker 			  "please email a report to [email protected] if any of the above operations\n"
80*0d6140beSAndroid Build Coastguard Worker 			  "work correctly for you with this flash chip. Please include the flashrom log\n"
81*0d6140beSAndroid Build Coastguard Worker 			  "file for all operations you tested (see the man page for details), and mention\n"
82*0d6140beSAndroid Build Coastguard Worker 			  "which mainboard or programmer you tested in the subject line.\n"
83*0d6140beSAndroid Build Coastguard Worker 			  "You can also try to follow the instructions here:\n"
84*0d6140beSAndroid Build Coastguard Worker 			  "https://www.flashrom.org/contrib_howtos/how_to_mark_chip_tested.html\n"
85*0d6140beSAndroid Build Coastguard Worker 			  "Thanks for your help!\n");
86*0d6140beSAndroid Build Coastguard Worker 	}
87*0d6140beSAndroid Build Coastguard Worker }
88