[flashrom] [PATCH] Factor out lock functions (print, unlock, lock)
Edward O'Callaghan
eocallaghan at auroraux.org
Wed Oct 21 11:49:25 CEST 2009
G'Day,
Just a small/quick review, You have a extra "," at the end of your enum list.
Cheers,
Edward.
2009/10/20 Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>:
> New version.
>
> Chip locking has three actions you can do with it:
> - Print/read the current locking status
> - Lock the chip
> - Unlock the chip.
>
> Currently, the code usually does lock printing inside the probe
> function, and unlocking somewhere in the erase or write function. Only
> very few chips reactivate the lock after write/erase. Since many chips
> have identical probe/write/erase functions, but totally different
> locking, many such functions have been duplicated needlessly.
> With this patch, it is possible to call the chip-specific locking
> functions from probe/write/erase functions and unify lots of code.
>
> I converted spi.c and pm49fl00x.c to use the internal lock abstractions,
> but all other files need the same treatment.
>
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>
> Index: flashrom-lock_refactor/flash.h
> ===================================================================
> --- flashrom-lock_refactor/flash.h (Revision 751)
> +++ flashrom-lock_refactor/flash.h (Arbeitskopie)
> @@ -175,6 +175,12 @@
> CHIP_BUSTYPE_UNKNOWN = CHIP_BUSTYPE_PARALLEL | CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH | CHIP_BUSTYPE_SPI,
> };
>
> +enum lockaction {
> + lock_print,
> + lock_disable,
> + lock_enable,
> +};
> +
> /*
> * How many different contiguous runs of erase blocks with one size each do
> * we have for a given erase function?
> @@ -229,6 +235,7 @@
>
> int (*write) (struct flashchip *flash, uint8_t *buf);
> int (*read) (struct flashchip *flash, uint8_t *buf, int start, int len);
> + int (*lock) (struct flashchip *flash, enum lockaction action);
>
> /* Some flash devices have an additional register space. */
> chipaddr virtual_memory;
> @@ -551,6 +558,7 @@
> int spi_send_multicommand(struct spi_command *cmds);
> int spi_write_enable(void);
> int spi_write_disable(void);
> +int spi_chip_lock(struct flashchip *flash, enum lockaction action);
> int spi_chip_erase_60(struct flashchip *flash);
> int spi_chip_erase_c7(struct flashchip *flash);
> int spi_chip_erase_60_c7(struct flashchip *flash);
> @@ -661,6 +669,7 @@
> int probe_49fl00x(struct flashchip *flash);
> int erase_49fl00x(struct flashchip *flash);
> int write_49fl00x(struct flashchip *flash, uint8_t *buf);
> +int lock_49fl00x(struct flashchip *flash, enum lockaction action);
>
> /* sharplhf00l04.c */
> int probe_lhf00l04(struct flashchip *flash);
> Index: flashrom-lock_refactor/pm49fl00x.c
> ===================================================================
> --- flashrom-lock_refactor/pm49fl00x.c (Revision 751)
> +++ flashrom-lock_refactor/pm49fl00x.c (Arbeitskopie)
> @@ -4,6 +4,7 @@
> * Copyright (C) 2004 Tyan Corporation
> * Copyright (C) 2007 Nikolay Petukhov <nikolay.petukhov at gmail.com>
> * Copyright (C) 2007 Reinder E.N. de Haan <lb_reha at mveas.com>
> + * Copyright (C) 2009 Carl-Daniel Hailfinger
> *
> * 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
> @@ -36,6 +37,30 @@
> }
> }
>
> +/*
> + * Return 0 if successful, 1 if failed, 2 if unsupported.
> + */
> +int lock_49fl00x(struct flashchip *flash, enum lockaction action)
> +{
> + switch (action) {
> + case lock_print:
> + fprintf(stderr, "lock printing not supported.\n");
> + return 2;
> + case lock_disable:
> + write_lockbits_49fl00x(flash->virtual_registers,
> + flash->total_size * 1024, 0,
> + flash->page_size);
> + return 0;
> + case lock_enable:
> + write_lockbits_49fl00x(flash->virtual_registers,
> + flash->total_size * 1024, 1,
> + flash->page_size);
> + return 0;
> + default: /* Work around gcc. It can't see we enumerated all values. */
> + return 2;
> + }
> +}
> +
> int probe_49fl00x(struct flashchip *flash)
> {
> int ret = probe_jedec(flash);
> @@ -53,8 +78,7 @@
> int page_size = flash->page_size;
>
> /* unprotected */
> - write_lockbits_49fl00x(flash->virtual_registers,
> - total_size, 0, page_size);
> + lock_49fl00x(flash, lock_disable);
>
> /*
> * erase_chip_jedec() will not work... Datasheet says
> @@ -74,8 +98,7 @@
> printf("\n");
>
> /* protected */
> - write_lockbits_49fl00x(flash->virtual_registers,
> - total_size, 1, page_size);
> + lock_49fl00x(flash, lock_enable);
>
> return 0;
> }
> @@ -88,8 +111,7 @@
> chipaddr bios = flash->virtual_memory;
>
> /* unprotected */
> - write_lockbits_49fl00x(flash->virtual_registers, total_size, 0,
> - page_size);
> + lock_49fl00x(flash, lock_disable);
>
> printf("Programming page: ");
> for (i = 0; i < total_size / page_size; i++) {
> @@ -109,8 +131,7 @@
> printf("\n");
>
> /* protected */
> - write_lockbits_49fl00x(flash->virtual_registers, total_size, 1,
> - page_size);
> + lock_49fl00x(flash, lock_enable);
>
> return 0;
> }
> Index: flashrom-lock_refactor/flashchips.c
> ===================================================================
> --- flashrom-lock_refactor/flashchips.c (Revision 751)
> +++ flashrom-lock_refactor/flashchips.c (Arbeitskopie)
> @@ -51,6 +51,7 @@
> * }
> * .write = Chip write function
> * .read = Chip read function
> + * .lock = Chip locking print/enable/disable function
> */
>
> {
> @@ -211,6 +212,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -227,6 +229,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -243,6 +246,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -259,6 +263,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -275,6 +280,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -291,6 +297,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -307,6 +314,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -323,6 +331,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -339,6 +348,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -355,6 +365,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -387,6 +398,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -403,6 +415,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -419,6 +432,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> /*The AT26DF321 has the same ID as the AT25DF321. */
> @@ -436,6 +450,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },*/
>
> {
> @@ -468,7 +483,6 @@
> .erase = erase_chip_jedec,
> .write = write_jedec,
> .read = read_memmapped,
> -
> },
>
> {
> @@ -725,6 +739,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -789,6 +804,7 @@
> .erase = erase_49fl00x,
> .write = write_49fl00x,
> .read = read_memmapped,
> + .lock = lock_49fl00x,
> },
>
> {
> @@ -821,6 +837,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -837,6 +854,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -853,6 +871,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -869,6 +888,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -885,6 +905,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -901,6 +922,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -917,6 +939,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -933,6 +956,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -949,6 +973,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -965,6 +990,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -981,6 +1007,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -997,6 +1024,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1013,6 +1041,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1029,6 +1058,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1045,6 +1075,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1061,6 +1092,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1256,6 +1288,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1288,6 +1321,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1323,6 +1357,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1358,6 +1393,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1393,6 +1429,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1428,6 +1465,7 @@
> },
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1444,6 +1482,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1460,6 +1499,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1476,6 +1516,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1492,6 +1533,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1508,6 +1550,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1604,6 +1647,7 @@
> .erase = spi_chip_erase_d8,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1620,6 +1664,7 @@
> .erase = spi_chip_erase_d8,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1636,6 +1681,7 @@
> .erase = spi_chip_erase_d8,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1652,6 +1698,7 @@
> .erase = spi_chip_erase_d8,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1668,6 +1715,7 @@
> .erase = spi_chip_erase_d8,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1684,6 +1732,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1700,6 +1749,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1716,6 +1766,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1732,6 +1783,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1748,6 +1800,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1764,6 +1817,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1828,6 +1882,7 @@
> .erase = erase_49fl00x,
> .write = write_49fl00x,
> .read = read_memmapped,
> + .lock = lock_49fl00x,
> },
>
> {
> @@ -1844,6 +1899,7 @@
> .erase = erase_49fl00x,
> .write = write_49fl00x,
> .read = read_memmapped,
> + .lock = lock_49fl00x,
> },
>
> {
> @@ -1876,6 +1932,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1892,6 +1949,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1908,6 +1966,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1924,6 +1983,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1940,6 +2000,7 @@
> .erase = spi_chip_erase_60,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1956,6 +2017,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -1972,6 +2034,7 @@
> .erase = spi_chip_erase_60_c7,
> .write = spi_chip_write_1,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2420,6 +2483,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> /* The ST M25P05 is a bit of a problem. It has the same ID as the
> @@ -2441,6 +2505,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1, /* 128 */
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2457,6 +2522,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> /* The ST M25P10 has the same problem as the M25P05. */
> @@ -2474,6 +2540,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_1, /* 128 */
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2490,6 +2557,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2506,6 +2574,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2522,6 +2591,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2538,6 +2608,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2554,6 +2625,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2570,6 +2642,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2586,6 +2659,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2602,6 +2676,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2954,6 +3029,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2970,6 +3046,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -2986,6 +3063,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -3002,6 +3080,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -3018,6 +3097,7 @@
> .erase = spi_chip_erase_c7,
> .write = spi_chip_write_256,
> .read = spi_chip_read,
> + .lock = spi_chip_lock,
> },
>
> {
> @@ -3258,6 +3338,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> {
> @@ -3274,6 +3355,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> {
> @@ -3290,6 +3372,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> {
> @@ -3306,6 +3389,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> {
> @@ -3322,6 +3406,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> {
> @@ -3338,6 +3423,7 @@
> .erase = NULL,
> .write = NULL,
> .read = NULL,
> + .lock = NULL,
> },
>
> { NULL }
> Index: flashrom-lock_refactor/spi.c
> ===================================================================
> --- flashrom-lock_refactor/spi.c (Revision 751)
> +++ flashrom-lock_refactor/spi.c (Arbeitskopie)
> @@ -30,8 +30,6 @@
> enum spi_controller spi_controller = SPI_CONTROLLER_NONE;
> void *spibar = NULL;
>
> -void spi_prettyprint_status_register(struct flashchip *flash);
> -
> const struct spi_programmer spi_programmer[] = {
> { /* SPI_CONTROLLER_NONE */
> .command = NULL,
> @@ -268,11 +266,6 @@
> printf_debug("%s: id1 0x%02x, id2 0x%02x\n", __func__, id1, id2);
>
> if (id1 == flash->manufacture_id && id2 == flash->model_id) {
> - /* Print the status register to tell the
> - * user about possible write protection.
> - */
> - spi_prettyprint_status_register(flash);
> -
> return 1;
> }
>
> @@ -327,11 +320,6 @@
> printf_debug("%s: id1 0x%x, id2 0x%x\n", __func__, id1, id2);
>
> if (id1 == flash->manufacture_id && id2 == flash->model_id) {
> - /* Print the status register to tell the
> - * user about possible write protection.
> - */
> - spi_prettyprint_status_register(flash);
> -
> return 1;
> }
>
> @@ -363,10 +351,6 @@
> if (id2 != flash->model_id)
> return 0;
>
> - /* Print the status register to tell the
> - * user about possible write protection.
> - */
> - spi_prettyprint_status_register(flash);
> return 1;
> }
>
> @@ -490,6 +474,25 @@
> }
> }
>
> +/*
> + * Return 0 if successful, 1 if failed, 2 if unsupported.
> + */
> +int spi_chip_lock(struct flashchip *flash, enum lockaction action)
> +{
> + switch (action) {
> + case lock_print:
> + spi_prettyprint_status_register(flash);
> + return 0;
> + case lock_disable:
> + return spi_disable_blockprotect();
> + case lock_enable:
> + fprintf(stderr, "lock enable not supported.\n");
> + return 2;
> + default: /* Work around gcc. It can't see we enumerated all values. */
> + return 2;
> + }
> +}
> +
> int spi_chip_erase_60(struct flashchip *flash)
> {
> int result;
> @@ -511,9 +514,9 @@
> .readarr = NULL,
> }};
>
> - result = spi_disable_blockprotect();
> + result = spi_chip_lock(flash, lock_disable);
> if (result) {
> - fprintf(stderr, "spi_disable_blockprotect failed\n");
> + fprintf(stderr, "unprotect failed\n");
> return result;
> }
>
> @@ -557,9 +560,9 @@
> .readarr = NULL,
> }};
>
> - result = spi_disable_blockprotect();
> + result = spi_chip_lock(flash, lock_disable);
> if (result) {
> - fprintf(stderr, "spi_disable_blockprotect failed\n");
> + fprintf(stderr, "unprotect failed\n");
> return result;
> }
>
> @@ -676,17 +679,21 @@
>
> int spi_chip_erase_d8(struct flashchip *flash)
> {
> - int i, rc = 0;
> + int i, result = 0;
> int total_size = flash->total_size * 1024;
> int erase_size = 64 * 1024;
>
> - spi_disable_blockprotect();
> + result = spi_chip_lock(flash, lock_disable);
> + if (result) {
> + fprintf(stderr, "unprotect failed\n");
> + return result;
> + }
>
> printf("Erasing chip: \n");
>
> for (i = 0; i < total_size / erase_size; i++) {
> - rc = spi_block_erase_d8(flash, i * erase_size, erase_size);
> - if (rc) {
> + result = spi_block_erase_d8(flash, i * erase_size, erase_size);
> + if (result) {
> fprintf(stderr, "Error erasing block at 0x%x\n", i);
> break;
> }
> @@ -694,7 +701,7 @@
>
> printf("\n");
>
> - return rc;
> + return result;
> }
>
> /* Sector size is usually 4k, though Macronix eliteflash has 64k */
> @@ -972,7 +979,11 @@
> int total_size = 1024 * flash->total_size;
> int i, result = 0;
>
> - spi_disable_blockprotect();
> + result = spi_chip_lock(flash, lock_disable);
> + if (result) {
> + fprintf(stderr, "unprotect failed\n");
> + return result;
> + }
> /* Erase first */
> printf("Erasing flash before programming... ");
> if (erase_flash(flash)) {
> Index: flashrom-lock_refactor/flashrom.c
> ===================================================================
> --- flashrom-lock_refactor/flashrom.c (Revision 751)
> +++ flashrom-lock_refactor/flashrom.c (Arbeitskopie)
> @@ -448,6 +448,9 @@
> printf("Found chip \"%s %s\" (%d KB, %s) at physical address 0x%lx.\n",
> flash->vendor, flash->name, flash->total_size,
> flashbuses_to_text(flash->bustype), base);
> + /* Print the locking status. */
> + if (flash->lock)
> + flash->lock(flash, lock_print);
>
> return flash;
> }
>
>
> --
> Developer quote of the week:
> "We are juggling too many chainsaws and flaming arrows and tigers."
>
>
> _______________________________________________
> flashrom mailing list
> flashrom at flashrom.org
> http://www.flashrom.org/mailman/listinfo/flashrom
>
--
--
Edward O'Callaghan
http://www.auroraux.org/
eocallaghan at auroraux dot org
More information about the flashrom
mailing list