[flashrom] [PATCH 01/12] improve macros for SSFS and SSFC bits
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Wed Jun 8 09:14:50 CEST 2011
Am 08.06.2011 04:55 schrieb Stefan Tauner:
> - introduce offset macros and use them to (re)define the existing mask macros
> - add comments
> - rename SSFS_CDS to SSFS_FDONE (abbr. used in datasheet not in SSFS but HSFS)
> - use those for refactoring and magic number elemination.
> - following patch uses them for pretty printing
>
> Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
> ---
> ichspi.c | 48 ++++++++++++++++++++++++++++++------------------
> 1 files changed, 30 insertions(+), 18 deletions(-)
>
> diff --git a/ichspi.c b/ichspi.c
> index 299cbf3..676b93a 100644
> --- a/ichspi.c
> +++ b/ichspi.c
> @@ -47,24 +47,36 @@
> #define ICH9_REG_FDATA0 0x10 /* 64 Bytes */
>
> #define ICH9_REG_SSFS 0x90 /* 08 Bits */
> -#define SSFS_SCIP 0x00000001
> -#define SSFS_CDS 0x00000004
> -#define SSFS_FCERR 0x00000008
> -#define SSFS_AEL 0x00000010
> +#define SSFS_SCIP_OFF 0 /* SPI Cycle In Progress */
> +#define SSFS_SCIP (0x1 << SSFS_SCIP_OFF)
> +#define SSFS_FDONE_OFF 2 /* Cycle Done Status */
> +#define SSFS_FDONE (0x1 << SSFS_FDONE_OFF)
> +#define SSFS_FCERR_OFF 3 /* Flash Cycle Error */
> +#define SSFS_FCERR (0x1 << SSFS_FCERR_OFF)
> +#define SSFS_AEL_OFF 4 /* Access Error Log */
> +#define SSFS_AEL (0x1 << SSFS_AEL_OFF)
> /* The following bits are reserved in SSFS: 1,5-7. */
> #define SSFS_RESERVED_MASK 0x000000e2
>
> #define ICH9_REG_SSFC 0x91 /* 24 Bits */
> -#define SSFC_SCGO 0x00000200
> -#define SSFC_ACS 0x00000400
> -#define SSFC_SPOP 0x00000800
> -#define SSFC_COP 0x00001000
> -#define SSFC_DBC 0x00010000
> -#define SSFC_DS 0x00400000
> -#define SSFC_SME 0x00800000
> -#define SSFC_SCF 0x01000000
> -#define SSFC_SCF_20MHZ 0x00000000
> -#define SSFC_SCF_33MHZ 0x01000000
> +#define SSFC_SCGO_OFF (1 + 8) /* 1: SPI Cycle Go */
> +#define SSFC_SCGO (0x1 << SSFC_SCGO_OFF)
> +#define SSFC_ACS_OFF (2 + 8) /* 2: Atomic Cycle Sequence */
> +#define SSFC_ACS (0x1 << SSFC_ACS_OFF)
> +#define SSFC_SPOP_OFF (3 + 8) /* 3: Sequence Prefix Opcode Pointer */
> +#define SSFC_SPOP (0x1 << SSFC_SPOP_OFF)
> +#define SSFC_COP_OFF (4 + 8) /* 4-6: Cycle Opcode Pointer */
> +#define SSFC_COP (0x7 << SSFC_COP_OFF)
>
This is a code change. Can you mention it in the changelog, please? Some
generic statement like "fix masks for register definitions SSFC_COP,
..." would suffice and help others to understand what you were doing.
Please recheck that the changes were intentional, though.
> +#define SSFC_DBC_OFF (8 + 8) /* 8-13: Data Byte Count */
> +#define SSFC_DBC (0x3f << SSFC_DBC_OFF)
>
Code change, see above.
> +#define SSFC_DS_OFF (14 + 8) /* 14: Data Cycle */
> +#define SSFC_DS (0x1 << SSFC_DS_OFF)
> +#define SSFC_SME_OFF (15 + 8) /* 15: SPI SMI# Enable */
> +#define SSFC_SME (0x1 << SSFC_SME_OFF)
> +#define SSFC_SCF_OFF (16 + 8) /* 16-18: SPI Cycle Frequency */
> +#define SSFC_SCF (0x7 << SSFC_SCF_OFF)
>
Code change, see above.
> +#define SSFC_SCF_20MHZ 0x00000000
> +#define SSFC_SCF_33MHZ 0x01000000
> /* We combine SSFS and SSFC to one 32-bit word,
> * therefore SSFC bits are off by 8.
> * The following bits are reserved in SSFC: 23-19,7,0. */
>
> @@ -720,7 +732,7 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
> if (datalength != 0) {
> uint32_t datatemp;
> temp32 |= SSFC_DS;
> - datatemp = ((uint32_t) ((datalength - 1) & 0x3f)) << (8 + 8);
> + datatemp = (uint32_t) (((datalength - 1) << SSFC_DBC_OFF) & SSFC_DBC);
>
Please change this to
datatemp = ((((uint32_t)datalength - 1) << SSFC_DBC_OFF) & SSFC_DBC);
> temp32 |= datatemp;
> }
>
>
I'm still not entirely happy with "duplicating" all those definitions,
once with _OFF and once without. That said, I see where you're going
with that, so this patch is (with the casting change)
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
No need to resend, just change the commit message and the cast before
you commit.
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
More information about the flashrom
mailing list