9471d47c769daa46fee137db1a2614e431ab82c7
[openwrt.git] / package / boot / uboot-lantiq / patches / 0011-sf-spansion-add-support-for-4-byte-address-mode.patch
1 From 0add8e5c60961d2b99174610df8d3d9d6d192b74 Mon Sep 17 00:00:00 2001
2 From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
3 Date: Wed, 7 Nov 2012 14:16:11 +0100
4 Subject: sf: spansion: add support for 4-byte address mode
5
6 Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
7
8 --- a/drivers/mtd/spi/spansion.c
9 +++ b/drivers/mtd/spi/spansion.c
10 @@ -31,6 +31,10 @@
11  
12  #include "spi_flash_internal.h"
13  
14 +#define S25FLXX_BRRD           0x16            /* Read Bank Register */
15 +#define S25FLXX_BRWR           0x17            /* Write Bank Register */
16 +#define S25FLXX_BAR_EXTADD     (1 << 7)        /* Extended address enable */
17 +
18  struct spansion_spi_flash_params {
19         u16 idcode1;
20         u16 idcode2;
21 @@ -112,6 +116,23 @@ static const struct spansion_spi_flash_p
22         },
23  };
24  
25 +static __maybe_unused int spansion_set_4byte_mode(struct spi_flash *flash)
26 +{
27 +       struct spi_slave *spi = flash->spi;
28 +       u8 bar, cmd;
29 +       int err;
30 +
31 +       cmd = S25FLXX_BRRD;
32 +       err = spi_flash_cmd(spi, cmd, &bar, 1);
33 +       if (err)
34 +               return err;
35 +
36 +       bar |= S25FLXX_BAR_EXTADD;
37 +       cmd = S25FLXX_BRWR;
38 +
39 +       return spi_flash_cmd_write(spi, &cmd, 1, &bar, 1);
40 +}
41 +
42  int spi_flash_probe_spansion(struct spi_flash *flash, u8 *idcode)
43  {
44         const struct spansion_spi_flash_params *params;
45 @@ -144,5 +165,10 @@ int spi_flash_probe_spansion(struct spi_
46         flash->sector_size = 256 * params->pages_per_sector;
47         flash->size = flash->sector_size * params->nr_sectors;
48  
49 +#ifdef CONFIG_SPI_FLASH_4BYTE_MODE
50 +       if (flash->size > (1 << 24))
51 +               flash->set_4byte_mode = spansion_set_4byte_mode;
52 +#endif
53 +
54         return 1;
55  }