mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-11 00:08:50 +00:00
mtd: spi-nor: Get rid of nor->page_size
nor->page_size duplicated what nor->params->page_size indicates for no good reason. page_size is a flash parameter of fixed value and it is better suited to be found in nor->params->page_size. Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> Reviewed-by: Pratyush Yadav <p.yadav@ti.com> Reviewed-by: Michael Walle <michael@walle.cc> Link: https://lore.kernel.org/r/20211029172633.886453-5-tudor.ambarus@microchip.com
This commit is contained in:
parent
7158c86e56
commit
5854d4a6cc
@ -1952,6 +1952,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
|
||||
struct spi_nor *nor = mtd_to_spi_nor(mtd);
|
||||
size_t page_offset, page_remain, i;
|
||||
ssize_t ret;
|
||||
u32 page_size = nor->params->page_size;
|
||||
|
||||
dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
|
||||
|
||||
@ -1968,16 +1969,15 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
|
||||
* calculated with an AND operation. On the other cases we
|
||||
* need to do a modulus operation (more expensive).
|
||||
*/
|
||||
if (is_power_of_2(nor->page_size)) {
|
||||
page_offset = addr & (nor->page_size - 1);
|
||||
if (is_power_of_2(page_size)) {
|
||||
page_offset = addr & (page_size - 1);
|
||||
} else {
|
||||
uint64_t aux = addr;
|
||||
|
||||
page_offset = do_div(aux, nor->page_size);
|
||||
page_offset = do_div(aux, page_size);
|
||||
}
|
||||
/* the size of data remaining on the first page */
|
||||
page_remain = min_t(size_t,
|
||||
nor->page_size - page_offset, len - i);
|
||||
page_remain = min_t(size_t, page_size - page_offset, len - i);
|
||||
|
||||
addr = spi_nor_convert_addr(nor, addr);
|
||||
|
||||
@ -3094,7 +3094,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
* We need the bounce buffer early to read/write registers when going
|
||||
* through the spi-mem layer (buffers have to be DMA-able).
|
||||
* For spi-mem drivers, we'll reallocate a new buffer if
|
||||
* nor->page_size turns out to be greater than PAGE_SIZE (which
|
||||
* nor->params->page_size turns out to be greater than PAGE_SIZE (which
|
||||
* shouldn't happen before long since NOR pages are usually less
|
||||
* than 1KB) after spi_nor_scan() returns.
|
||||
*/
|
||||
@ -3170,8 +3170,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
mtd->flags |= MTD_NO_ERASE;
|
||||
|
||||
mtd->dev.parent = dev;
|
||||
nor->page_size = nor->params->page_size;
|
||||
mtd->writebufsize = nor->page_size;
|
||||
mtd->writebufsize = nor->params->page_size;
|
||||
|
||||
if (of_property_read_bool(np, "broken-flash-reset"))
|
||||
nor->flags |= SNOR_F_BROKEN_RESET;
|
||||
@ -3340,8 +3339,8 @@ static int spi_nor_probe(struct spi_mem *spimem)
|
||||
* and add this logic so that if anyone ever adds support for such
|
||||
* a NOR we don't end up with buffer overflows.
|
||||
*/
|
||||
if (nor->page_size > PAGE_SIZE) {
|
||||
nor->bouncebuf_size = nor->page_size;
|
||||
if (nor->params->page_size > PAGE_SIZE) {
|
||||
nor->bouncebuf_size = nor->params->page_size;
|
||||
devm_kfree(nor->dev, nor->bouncebuf);
|
||||
nor->bouncebuf = devm_kmalloc(nor->dev,
|
||||
nor->bouncebuf_size,
|
||||
|
@ -28,11 +28,12 @@ static const struct flash_info xilinx_parts[] = {
|
||||
*/
|
||||
static u32 s3an_convert_addr(struct spi_nor *nor, u32 addr)
|
||||
{
|
||||
u32 page_size = nor->params->page_size;
|
||||
u32 offset, page;
|
||||
|
||||
offset = addr % nor->page_size;
|
||||
page = addr / nor->page_size;
|
||||
page <<= (nor->page_size > 512) ? 10 : 9;
|
||||
offset = addr % page_size;
|
||||
page = addr / page_size;
|
||||
page <<= (page_size > 512) ? 10 : 9;
|
||||
|
||||
return page | offset;
|
||||
}
|
||||
@ -40,6 +41,7 @@ static u32 s3an_convert_addr(struct spi_nor *nor, u32 addr)
|
||||
static int xilinx_nor_setup(struct spi_nor *nor,
|
||||
const struct spi_nor_hwcaps *hwcaps)
|
||||
{
|
||||
u32 page_size;
|
||||
int ret;
|
||||
|
||||
ret = spi_nor_xread_sr(nor, nor->bouncebuf);
|
||||
@ -64,10 +66,11 @@ static int xilinx_nor_setup(struct spi_nor *nor,
|
||||
*/
|
||||
if (nor->bouncebuf[0] & XSR_PAGESIZE) {
|
||||
/* Flash in Power of 2 mode */
|
||||
nor->page_size = (nor->page_size == 264) ? 256 : 512;
|
||||
nor->mtd.writebufsize = nor->page_size;
|
||||
nor->mtd.size = 8 * nor->page_size * nor->info->n_sectors;
|
||||
nor->mtd.erasesize = 8 * nor->page_size;
|
||||
page_size = (nor->params->page_size == 264) ? 256 : 512;
|
||||
nor->params->page_size = page_size;
|
||||
nor->mtd.writebufsize = page_size;
|
||||
nor->mtd.size = 8 * page_size * nor->info->n_sectors;
|
||||
nor->mtd.erasesize = 8 * page_size;
|
||||
} else {
|
||||
/* Flash in Default addressing mode */
|
||||
nor->params->convert_addr = s3an_convert_addr;
|
||||
|
@ -371,7 +371,6 @@ struct spi_nor_flash_parameter;
|
||||
* @bouncebuf_size: size of the bounce buffer
|
||||
* @info: SPI NOR part JEDEC MFR ID and other info
|
||||
* @manufacturer: SPI NOR manufacturer
|
||||
* @page_size: the page size of the SPI NOR
|
||||
* @addr_width: number of address bytes
|
||||
* @erase_opcode: the opcode for erasing a sector
|
||||
* @read_opcode: the read opcode
|
||||
@ -401,7 +400,6 @@ struct spi_nor {
|
||||
size_t bouncebuf_size;
|
||||
const struct flash_info *info;
|
||||
const struct spi_nor_manufacturer *manufacturer;
|
||||
u32 page_size;
|
||||
u8 addr_width;
|
||||
u8 erase_opcode;
|
||||
u8 read_opcode;
|
||||
|
Loading…
x
Reference in New Issue
Block a user