mtd: rawnand: Allocate the interface configurations dynamically
Instead of manipulating the statically allocated structure and copy timings around, allocate one at identification time and save it in the nand_chip structure once it has been initialized. All NAND chips using the same interface configuration during reset and startup, we define a helper to retrieve a single reset interface configuration object, shared across all NAND chips. We use a second pointer to always have a reference on the currently applied interface configuration, which may either point to the "best interface configuration" or to the "default reset interface configuration". Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://lore.kernel.org/linux-mtd/20200529111322.7184-29-miquel.raynal@bootlin.com
This commit is contained in:
@@ -1069,7 +1069,11 @@ struct nand_manufacturer {
|
||||
* @options: Various chip options. They can partly be set to inform nand_scan
|
||||
* about special functionality. See the defines for further
|
||||
* explanation.
|
||||
* @interface_config: NAND interface timing information
|
||||
* @current_interface_config: The currently used NAND interface configuration
|
||||
* @best_interface_config: The best NAND interface configuration which fits both
|
||||
* the NAND chip and NAND controller constraints. If
|
||||
* unset, the default reset interface configuration must
|
||||
* be used.
|
||||
* @bbt_erase_shift: Number of address bits in a bbt entry
|
||||
* @bbt_options: Bad block table specific options. All options used here must
|
||||
* come from bbm.h. By default, these options will be copied to
|
||||
@@ -1116,7 +1120,8 @@ struct nand_chip {
|
||||
unsigned int options;
|
||||
|
||||
/* Data interface */
|
||||
struct nand_interface_config interface_config;
|
||||
const struct nand_interface_config *current_interface_config;
|
||||
struct nand_interface_config *best_interface_config;
|
||||
|
||||
/* Bad block information */
|
||||
unsigned int bbt_erase_shift;
|
||||
@@ -1209,7 +1214,7 @@ static inline struct device_node *nand_get_flash_node(struct nand_chip *chip)
|
||||
static inline const struct nand_interface_config *
|
||||
nand_get_interface_config(struct nand_chip *chip)
|
||||
{
|
||||
return &chip->interface_config;
|
||||
return chip->current_interface_config;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user