History

mtd: spi-nor: Rework the SPI NOR lock/unlock logic

Add the SNOR_F_HAS_LOCK flag and set it when SPI_NOR_HAS_LOCK is set in the flash_info entry or when it's a Micron or ST flash. Move the locking hooks in a separate struct so that we have just one field to update when we change the locking implementation.

Boris Brezillon committed 7 years ago

Commit dff97241 parent 64c160f2 files · +53 −20Browse files

Showing the changes to include/linux (1 of 2 files). Show all

Unified · Split

include/linux/mtd/spi-nor.h+16−7
@@ -243,6 +243,7 @@ enum spi_nor_option_flags { · 242 unmodified lines
243 SNOR_F_BROKEN_RESET = BIT(6),243 SNOR_F_BROKEN_RESET = BIT(6),
244 SNOR_F_4B_OPCODES = BIT(7),244 SNOR_F_4B_OPCODES = BIT(7),
245 SNOR_F_HAS_4BAIT = BIT(8),245 SNOR_F_HAS_4BAIT = BIT(8),
246 SNOR_F_HAS_LOCK = BIT(9),
246};247};
247 248
248/**249/**
@@ -465,6 +466,18 @@ enum spi_nor_pp_command_index { · 216 unmodified lines
465/* Forward declaration that will be used in 'struct spi_nor_flash_parameter' */466/* Forward declaration that will be used in 'struct spi_nor_flash_parameter' */
466struct spi_nor;467struct spi_nor;
467 468
469/**
470 * struct spi_nor_locking_ops - SPI NOR locking methods
471 * @lock: lock a region of the SPI NOR.
472 * @unlock: unlock a region of the SPI NOR.
473 * @is_locked: check if a region of the SPI NOR is completely locked
474 */
475struct spi_nor_locking_ops {
476 int (*lock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
477 int (*unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
478 int (*is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
479};
480
468/**481/**
469 * struct spi_nor_flash_parameter - SPI NOR flash parameters and settings.482 * struct spi_nor_flash_parameter - SPI NOR flash parameters and settings.
470 * Includes legacy flash parameters and settings that can be overwritten483 * Includes legacy flash parameters and settings that can be overwritten
@@ -483,6 +496,7 @@ struct spi_nor; · 12 unmodified lines
483 * Table.496 * Table.
484 * @quad_enable: enables SPI NOR quad mode.497 * @quad_enable: enables SPI NOR quad mode.
485 * @set_4byte: puts the SPI NOR in 4 byte addressing mode.498 * @set_4byte: puts the SPI NOR in 4 byte addressing mode.
499 * @locking_ops: SPI NOR locking methods.
486 */500 */
487struct spi_nor_flash_parameter {501struct spi_nor_flash_parameter {
488 u64 size;502 u64 size;
@@ -496,6 +510,8 @@ struct spi_nor_flash_parameter { · 7 unmodified lines
496 510
497 int (*quad_enable)(struct spi_nor *nor);511 int (*quad_enable)(struct spi_nor *nor);
498 int (*set_4byte)(struct spi_nor *nor, bool enable);512 int (*set_4byte)(struct spi_nor *nor, bool enable);
513
514 const struct spi_nor_locking_ops *locking_ops;
499};515};
500 516
501/**517/**
@@ -536,10 +552,6 @@ struct flash_info; · 34 unmodified lines
536 * @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR552 * @erase: [DRIVER-SPECIFIC] erase a sector of the SPI NOR
537 * at the offset @offs; if not provided by the driver,553 * at the offset @offs; if not provided by the driver,
538 * spi-nor will send the erase opcode via write_reg()554 * spi-nor will send the erase opcode via write_reg()
539 * @flash_lock: [FLASH-SPECIFIC] lock a region of the SPI NOR
540 * @flash_unlock: [FLASH-SPECIFIC] unlock a region of the SPI NOR
541 * @flash_is_locked: [FLASH-SPECIFIC] check if a region of the SPI NOR is
542 * completely locked
543 * @clear_sr_bp: [FLASH-SPECIFIC] clears the Block Protection Bits from555 * @clear_sr_bp: [FLASH-SPECIFIC] clears the Block Protection Bits from
544 * the SPI NOR Status Register.556 * the SPI NOR Status Register.
545 * @params: [FLASH-SPECIFIC] SPI-NOR flash parameters and settings.557 * @params: [FLASH-SPECIFIC] SPI-NOR flash parameters and settings.
@@ -579,9 +591,6 @@ struct spi_nor { · 33 unmodified lines
579 size_t len, const u_char *write_buf);591 size_t len, const u_char *write_buf);
580 int (*erase)(struct spi_nor *nor, loff_t offs);592 int (*erase)(struct spi_nor *nor, loff_t offs);
581 593
582 int (*flash_lock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
583 int (*flash_unlock)(struct spi_nor *nor, loff_t ofs, uint64_t len);
584 int (*flash_is_locked)(struct spi_nor *nor, loff_t ofs, uint64_t len);
585 int (*clear_sr_bp)(struct spi_nor *nor);594 int (*clear_sr_bp)(struct spi_nor *nor);
586 struct spi_nor_flash_parameter params;595 struct spi_nor_flash_parameter params;
587 596

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t