Commit Graph

80 Commits (tools-release-test)

Author SHA1 Message Date
Uruloke 32d70027a5 Fix setting the QE bit on ISSI Flash memories
By default QSPIFBlockDevice assumes a Flash memory have two Status registers and when writing the Status registers it writes 2 bytes using the WRSR instruction. This will not work on a ISSI Flash memory as they only have a single status register and attempting to write two bytes using WRSR will cause it to ignore the request and be unable to set the QE bit.

ISSI datasheet specifies that the WRSR instruction only write a single byte so override the number of status registers for ISSI Flash memories.
2020-05-08 11:13:34 +02:00
Veijo Pesonen 7c692f5196 SPIFBlockDevice: Refactor vendor specific workarounds
To follow the same convention as with QSPIFBlockDevice there was need to
create a separate function for handling vendor specific workarounds.
2020-03-02 11:14:01 +02:00
Veijo Pesonen 98dbebb3ed SFDP: Refactor Sector Map Parameter Table parsing
Doxygen documentation was updated.

Code reorganized to make it more readable.

Moves SFDP specific bits out from Q/SPIFBlockDevices.
2020-03-02 11:07:03 +02:00
Veijo Pesonen 4f9fcf8df8 Bugfix: Concurrent SFDP header address init fixed
After switching from local variables to shared info structure JEDEC
Basic Flash Parameter Table and Sector Map Parameter Table addresses
and sizes must be protected by a mutex. Theoretically multiple calls
to Q/SPIFBlockDevice might occur.
2020-03-02 11:05:15 +02:00
Veijo Pesonen c84deff782 SFDP: consolidates check for addressability
Takes implementations found from SPIFBlockDevice and QSPIFBlockDevice
and makes those as part of the SFDP module.
2020-03-02 11:04:05 +02:00
Veijo Pesonen 2ce3bed910 SFDP: consolidates device density detection
Combines implementations found from SPIFBlockDevice and QSPIFBlockDevice
and makes it as part of the SFDP module.
2020-03-02 11:02:09 +02:00
Veijo Pesonen ca704a4b3d SFDP: consolidates erase region search
Merges erase region search found from SPIFBlockDevice and
QSPIFBlockDevice. Moves the implementation within the SFDP
component
2020-02-26 12:41:34 +02:00
Martin Kojtal 1c12083949
Merge pull request #12426 from VeijoPesonen/sfdp_split_bptbl
SFDP: consolidation of SFDP parsing [2/n]
2020-02-25 13:57:23 +00:00
Anna Bridge 8c17270306
Merge pull request #12480 from 0xc0170/fix_spdx
Fix SPDX identifiers and licenses (excluding features and targets)
2020-02-21 16:34:30 +00:00
Martin Kojtal ab76e0a59e component storage: fix SPDX identifiers 2020-02-21 07:01:04 +00:00
Veijo Pesonen d3b65d5e2b QSPIFBlockDevice: refactoring _sfdp_parse_basic_param_table 2020-02-20 09:46:40 +02:00
Veijo Pesonen 6a60574cf5 SFDP: consolidates sfdp_detect_erase_types_inst_and_size 2020-02-20 09:46:40 +02:00
Veijo Pesonen 2da963b8de Q/SPIFBlockDevice: unifies _sfdp_detect_erase_types_inst_and_size functions 2020-02-20 09:46:40 +02:00
Veijo Pesonen 7d1886ecae SFDP: consolidation of sfdp_detect_page_size 2020-02-20 09:46:40 +02:00
Veijo Pesonen fe49c9ce16 Q/SPIF: Abstracts SFDP table reading functionality from device 2020-02-20 09:46:40 +02:00
Veijo Pesonen ba71b09902 astyle fixes 2020-02-07 09:52:12 +02:00
Veijo Pesonen 4f4ef6069e SFDP: Sector Map Parameter Table naming improvements 2020-02-07 09:52:12 +02:00
Veijo Pesonen 83c0fdf19f QSPIFBlockDevice: Sector Map Table parsing moved under SFDP 2020-02-07 09:52:11 +02:00
Veijo Pesonen 7518a35da3 SFDP: data structures got refactored 2020-02-07 09:52:11 +02:00
Veijo Pesonen 6108f384fb QSPIFBlockDevice: Consolidates SFDP info data
This far all SFDP Sector Map Table related data has been found in small
pieces inside QSPIFBlockDevice. Purpose was to consolidate the data
under one SFDP structure where all the information gathered from
SFDP tables is stored.

Parsing a Sector Map Table was made more generic so that later it can be
moved under SFDP module. Once that is done it can be shared with
SPIFBlockDevice to avoid code duplication.
2020-02-07 09:52:11 +02:00
Veijo Pesonen cba5bfc790 QSPIFBlockDevice: Reads Sector Map Table by using a SFDP Reader cb 2020-02-07 09:52:11 +02:00
Veijo Pesonen 4e1fb07633 SFDP: reorganizes internal info structure 2020-02-07 09:52:11 +02:00
Veijo Pesonen 6a6904043c QSPIFBlockDevice: drops unnecessary wrapper function 2020-02-07 09:52:11 +02:00
Martin Kojtal 952799ccc8
Merge pull request #12270 from VeijoPesonen/bugfix_sfdp_parse_sfdp_headers
BUGFIX: SFDP Sector Map Table Parameter ID LSB is 0x81
2020-02-06 08:48:16 +00:00
Michal Paszta bf11bbd820 QSPIF: Enable QPI mode as a second option, if available 2020-01-23 09:47:53 +02:00
Veijo Pesonen 6bd3933652 Q/SPIFBlockDevice: Separates SFDP Header retrieval
Separates SFDP header retrieval and moves it as a part of the earlier
introduced SFDP file.

Purpose is to abstract away differences between SPIF and QSPIF devices
when it comes to fetching the SFDP headers from a device.
2020-01-20 16:36:21 +02:00
Veijo Pesonen 58421efa8c SFDP: All the headers are same length 2020-01-17 14:43:03 +02:00
Veijo Pesonen cefae9020e SFDP: splits header parsing to its own file
SFDP logic is the same between SPIF and QSIP.
2020-01-17 14:43:03 +02:00
Veijo Pesonen ad43f23b09 SFDP: lists unknown headers on Q/SPIF debug prints 2020-01-16 13:00:18 +02:00
Veijo Pesonen 80f87e326a BUGFIX: SFDP Sector Map Parameter Header detection
The Sector Map Function Specific Table is assigned the ID LSB of 81
in hexadecimal, not in decimal[1].

[1] JESD216.01 p. 53
2020-01-16 13:00:17 +02:00
Kyle Kearney 96cfc7393d Disable attempted 4-byte addressing for some boards
4-byte addressing has been seen to cause failures on NORDIC
boards and with Macronix memories. Suppress the attempt to enable it
on that hardware (via vendor quirks and a target check) until either
the failure cause can be fixed or a more robust suppression mechanism
is implemented.
2019-11-12 12:26:26 -08:00
Kyle Kearney 2526b9fc00 QSPIF: Handle fast mode enable via vendor quirks
Use a vendor id check to only perform this enable on devices which define the
 second configuration register where the fast mode enable bit lives.
Change _enable_fast_mode to use the standard status register reading and writing functions
2019-11-12 12:26:26 -08:00
Kyle Kearney 02dbf68e17 QSPIF: Handle parts with extra config registers
Default to 2 status registers, but update this value if necessary
 during vendor quirk handling for parts (currently only Macronix)
 which have one status register and two control registers. For the
 purposes of QSPIFBlockDevice, these are all considered status
 (or at least "status-like") registers because they are all written
 via the Write Status Register instruction.
Set the custom RDCR instruction for Macronix during quirk handling.
Update reading and writing of status registers to handle a variable
 number of status registers.
2019-11-12 12:26:25 -08:00
Kyle Kearney eb5494e7a9 QSPIF: Centralize handling of vendor quirks
Introduce a separate function for handling alterations to device interaction
which are not covered by the SFDP tables and therefore require checking against
the vendor id.
2019-11-12 12:26:25 -08:00
Kyle Kearney 26314d96c5 Don't clear quad enable when clearing block protection
QSPIFBlockDevice::_clear_block_protection() has logic to retain the
WIP and WEL bits in status register 1, but it failed to account for
the situation where the QE bit is also in status register 1.
In _sfdp_set_quad_enabled, note the status register and bit therein
for the quad enable, so that _clear_block_protection can retain it.
2019-11-12 12:26:25 -08:00
Kyle Kearney d2ef56859c QSPIF: Add back enable_fast_mode
This function writes a "config" register to ensure that the flash part
is in high performance mode, not low-power mode. This is required at
by at least MX25R6435F in order to operate at frequencies > 33MHz
(for reference, DISCO_L475VG_IOT01A runs the QSPI interface at 80 MHz).
The config register that this writes does not appear to be covered by
the SFDP spec (JESD216D.01) so this remains the status quo of
unconditional execution, as has been done on master since #8352.
2019-11-12 12:26:25 -08:00
Kyle Kearney 60e4d14577 Fix Astyle issues 2019-11-12 12:26:25 -08:00
Matthew Macovsky 619c5d9e60 Remove redundant QSPI erase alignment 2019-11-12 12:26:25 -08:00
Matthew Macovsky 2154948791 Update QSPI format after enabling 4-byte addressing 2019-11-12 12:26:25 -08:00
Matthew Macovsky 19330da412 Correct typos and formatting 2019-11-12 12:26:25 -08:00
Matthew Macovsky 91141bb397 Add missing debug prints to command functions 2019-11-12 12:26:25 -08:00
Matthew Macovsky d330deef57 Streamline setting of instruction member variables 2019-11-12 12:26:25 -08:00
Matthew Macovsky 4f01392497 Replace power function with bit shift 2019-11-12 12:26:25 -08:00
Matthew Macovsky 8fd1a502f7 Update SDFP erase detection to properly handle legacy erase instruction 2019-11-12 12:26:25 -08:00
Matthew Macovsky ba412734e1 Move configuration of QSPI format to within commands where it is necessary 2019-11-12 12:26:24 -08:00
Matthew Macovsky 08a0b3daeb Clear block protection on non-SST flash devices 2019-11-12 12:26:24 -08:00
Matthew Macovsky cf9b6d565a Enable 4-byte addressing when supported in accordance with the SFDP standard 2019-11-12 12:26:24 -08:00
Matthew Macovsky 4785e83a31 Update flash device reset to conform to SFDP standard 2019-11-12 12:26:24 -08:00
Matthew Macovsky cd78bf9129 Reorder some functions 2019-11-12 12:26:24 -08:00
Matthew Macovsky e2b1ac0972 Update reading/writing of status registers to conform to SFDP standard 2019-11-12 12:26:24 -08:00