[RESEND PATCH v4 2/4] mtd: cfi_cmdset_0002: Invalidate cache after entering/exiting OTP memory

Brian Norris computersforpeace at gmail.com
Tue May 27 23:46:28 PDT 2014


On Mon, May 05, 2014 at 08:14:27AM +0200, Christian Riesch wrote:
> --- a/drivers/mtd/chips/cfi_cmdset_0002.c
> +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
> @@ -1157,11 +1157,42 @@ static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_
>  typedef int (*otp_op_t)(struct map_info *map, struct flchip *chip,
>  			loff_t adr, size_t len, u_char *buf);
>  
> +static inline void otp_enter(struct map_info *map, struct flchip *chip,

Why is this function marked 'inline'? Is this to satisfy the comments
regarding CONFIG_MTD_XIP and inlining functions? That all looks highly
fragile ('inline' is not a guarantee, for instance). And does anyone
use CONFIG_MTD_XIP=y these days?

If there are no good reasons otherwise, I'd say this trips over Chapter
15 of Documentation/CodingStyle.

But if this is the only issue, then I'm OK taking the series as-is -- it
has been pending for a long time, as you note...

> +			     loff_t adr, size_t len)
> +{
> +	struct cfi_private *cfi = map->fldrv_priv;
> +
> +	cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +	cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +	cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +
> +	INVALIDATE_CACHED_RANGE(map, chip->start + adr, len);
> +}
> +
> +static inline void otp_exit(struct map_info *map, struct flchip *chip,

Same here.

> +			    loff_t adr, size_t len)
> +{
> +	struct cfi_private *cfi = map->fldrv_priv;
> +
> +	cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +	cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +	cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +	cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi,
> +			 cfi->device_type, NULL);
> +
> +	INVALIDATE_CACHED_RANGE(map, chip->start + adr, len);
> +}
> +
>  static inline int do_read_secsi_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
>  {
>  	DECLARE_WAITQUEUE(wait, current);
>  	unsigned long timeo = jiffies + HZ;
> -	struct cfi_private *cfi = map->fldrv_priv;
>  
>   retry:
>  	mutex_lock(&chip->mutex);

Brian



More information about the linux-mtd mailing list