@@ -1463,23 +1463,13 @@ static void spi_nor_unlock_and_unprep_rd(struct spi_nor *nor, loff_t start, size
1463
1463
spi_nor_unprep (nor );
1464
1464
}
1465
1465
1466
- static u32 spi_nor_convert_addr (struct spi_nor * nor , loff_t addr )
1467
- {
1468
- if (!nor -> params -> convert_addr )
1469
- return addr ;
1470
-
1471
- return nor -> params -> convert_addr (nor , addr );
1472
- }
1473
-
1474
1466
/*
1475
1467
* Initiate the erasure of a single sector
1476
1468
*/
1477
1469
int spi_nor_erase_sector (struct spi_nor * nor , u32 addr )
1478
1470
{
1479
1471
int i ;
1480
1472
1481
- addr = spi_nor_convert_addr (nor , addr );
1482
-
1483
1473
if (nor -> spimem ) {
1484
1474
struct spi_mem_op op =
1485
1475
SPI_NOR_SECTOR_ERASE_OP (nor -> erase_opcode ,
@@ -2064,8 +2054,6 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
2064
2054
while (len ) {
2065
2055
loff_t addr = from ;
2066
2056
2067
- addr = spi_nor_convert_addr (nor , addr );
2068
-
2069
2057
ret = spi_nor_read_data (nor , addr , len , buf );
2070
2058
if (ret == 0 ) {
2071
2059
/* We shouldn't see 0-length reads */
@@ -2098,7 +2086,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
2098
2086
size_t * retlen , const u_char * buf )
2099
2087
{
2100
2088
struct spi_nor * nor = mtd_to_spi_nor (mtd );
2101
- size_t page_offset , page_remain , i ;
2089
+ size_t i ;
2102
2090
ssize_t ret ;
2103
2091
u32 page_size = nor -> params -> page_size ;
2104
2092
@@ -2111,23 +2099,9 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
2111
2099
for (i = 0 ; i < len ; ) {
2112
2100
ssize_t written ;
2113
2101
loff_t addr = to + i ;
2114
-
2115
- /*
2116
- * If page_size is a power of two, the offset can be quickly
2117
- * calculated with an AND operation. On the other cases we
2118
- * need to do a modulus operation (more expensive).
2119
- */
2120
- if (is_power_of_2 (page_size )) {
2121
- page_offset = addr & (page_size - 1 );
2122
- } else {
2123
- u64 aux = addr ;
2124
-
2125
- page_offset = do_div (aux , page_size );
2126
- }
2102
+ size_t page_offset = addr & (page_size - 1 );
2127
2103
/* the size of data remaining on the first page */
2128
- page_remain = min_t (size_t , page_size - page_offset , len - i );
2129
-
2130
- addr = spi_nor_convert_addr (nor , addr );
2104
+ size_t page_remain = min_t (size_t , page_size - page_offset , len - i );
2131
2105
2132
2106
ret = spi_nor_lock_device (nor );
2133
2107
if (ret )
@@ -3054,7 +3028,14 @@ static int spi_nor_init_params(struct spi_nor *nor)
3054
3028
spi_nor_init_params_deprecated (nor );
3055
3029
}
3056
3030
3057
- return spi_nor_late_init_params (nor );
3031
+ ret = spi_nor_late_init_params (nor );
3032
+ if (ret )
3033
+ return ret ;
3034
+
3035
+ if (WARN_ON (!is_power_of_2 (nor -> params -> page_size )))
3036
+ return - EINVAL ;
3037
+
3038
+ return 0 ;
3058
3039
}
3059
3040
3060
3041
/** spi_nor_set_octal_dtr() - enable or disable Octal DTR I/O.
0 commit comments