mirror of https://gitee.com/openkylin/linux.git
mtd: gpmi: allocate a proper buffer for non ECC read/write
The @data_buffer_dma buffer is used for non ECC read/write. Currently, the length of the buffer is PAGE_SIZE, but the NAND chip may has 8K page or 16K page. So we have to extend it for the large page NAND chips. The gpmi_alloc_dma_buffer will be called twice. The first time is to allocate a temporary buffer for scanning the NAND chip; The second time is to allocate a buffer to store the real page content. This patch allocates a buffer of PAGE_SIZE size for scanning the NAND chip when gpmi_alloc_dma_buffer is called the first time, and allocates a buffer of the real NAND page size for the second time gpmi_alloc_dma_buffer is called. Signed-off-by: Huang Shijie <shijie8@gmail.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
This commit is contained in:
parent
464e906737
commit
06f216c83c
|
@ -783,14 +783,23 @@ static int gpmi_alloc_dma_buffer(struct gpmi_nand_data *this)
|
|||
{
|
||||
struct bch_geometry *geo = &this->bch_geometry;
|
||||
struct device *dev = this->dev;
|
||||
struct mtd_info *mtd = &this->mtd;
|
||||
|
||||
/* [1] Allocate a command buffer. PAGE_SIZE is enough. */
|
||||
this->cmd_buffer = kzalloc(PAGE_SIZE, GFP_DMA | GFP_KERNEL);
|
||||
if (this->cmd_buffer == NULL)
|
||||
goto error_alloc;
|
||||
|
||||
/* [2] Allocate a read/write data buffer. PAGE_SIZE is enough. */
|
||||
this->data_buffer_dma = kzalloc(PAGE_SIZE, GFP_DMA | GFP_KERNEL);
|
||||
/*
|
||||
* [2] Allocate a read/write data buffer.
|
||||
* The gpmi_alloc_dma_buffer can be called twice.
|
||||
* We allocate a PAGE_SIZE length buffer if gpmi_alloc_dma_buffer
|
||||
* is called before the nand_scan_ident; and we allocate a buffer
|
||||
* of the real NAND page size when the gpmi_alloc_dma_buffer is
|
||||
* called after the nand_scan_ident.
|
||||
*/
|
||||
this->data_buffer_dma = kzalloc(mtd->writesize ?: PAGE_SIZE,
|
||||
GFP_DMA | GFP_KERNEL);
|
||||
if (this->data_buffer_dma == NULL)
|
||||
goto error_alloc;
|
||||
|
||||
|
|
Loading…
Reference in New Issue