hostapd: merge some pending fixes (fixes assoc errors when moving between vaps of...
[openwrt.git] / target / linux / brcm47xx / patches-3.3 / 020-bcma-move-parallel-flash-into-a-union.patch
1 --- a/arch/mips/bcm47xx/nvram.c
2 +++ b/arch/mips/bcm47xx/nvram.c
3 @@ -50,6 +50,9 @@ static void early_nvram_init(void)
4  #ifdef CONFIG_BCM47XX_BCMA
5         case BCM47XX_BUS_TYPE_BCMA:
6                 bcma_cc = &bcm47xx_bus.bcma.bus.drv_cc;
7 +               if (bcma_cc->flash_type != BCMA_PFLASH)
8 +                       return;
9 +
10                 base = bcma_cc->pflash.window;
11                 lim = bcma_cc->pflash.window_size;
12                 break;
13 --- a/drivers/bcma/driver_mips.c
14 +++ b/drivers/bcma/driver_mips.c
15 @@ -189,6 +189,7 @@ static void bcma_core_mips_flash_detect(
16                 break;
17         case BCMA_CC_FLASHT_PARA:
18                 bcma_info(bus, "found parallel flash.\n");
19 +               bus->drv_cc.flash_type = BCMA_PFLASH;
20                 bus->drv_cc.pflash.window = 0x1c000000;
21                 bus->drv_cc.pflash.window_size = 0x02000000;
22  
23 --- a/include/linux/bcma/bcma_driver_chipcommon.h
24 +++ b/include/linux/bcma/bcma_driver_chipcommon.h
25 @@ -122,10 +122,68 @@
26  #define  BCMA_CC_JCTL_EXT_EN           2               /* Enable external targets */
27  #define  BCMA_CC_JCTL_EN               1               /* Enable Jtag master */
28  #define BCMA_CC_FLASHCTL               0x0040
29 +
30 +/* Start/busy bit in flashcontrol */
31 +#define  BCMA_CC_FLASHCTL_OPCODE       0x000000ff
32 +#define  BCMA_CC_FLASHCTL_ACTION       0x00000700
33 +#define  BCMA_CC_FLASHCTL_CS_ACTIVE    0x00001000      /* Chip Select Active, rev >= 20 */
34  #define  BCMA_CC_FLASHCTL_START                0x80000000
35  #define  BCMA_CC_FLASHCTL_BUSY         BCMA_CC_FLASHCTL_START
36 +
37 +/* flashcontrol action+opcodes for ST flashes */
38 +#define  BCMA_CC_FLASHCTL_ST_WREN      0x0006          /* Write Enable */
39 +#define  BCMA_CC_FLASHCTL_ST_WRDIS     0x0004          /* Write Disable */
40 +#define  BCMA_CC_FLASHCTL_ST_RDSR      0x0105          /* Read Status Register */
41 +#define  BCMA_CC_FLASHCTL_ST_WRSR      0x0101          /* Write Status Register */
42 +#define  BCMA_CC_FLASHCTL_ST_READ      0x0303          /* Read Data Bytes */
43 +#define  BCMA_CC_FLASHCTL_ST_PP                0x0302          /* Page Program */
44 +#define  BCMA_CC_FLASHCTL_ST_SE                0x02d8          /* Sector Erase */
45 +#define  BCMA_CC_FLASHCTL_ST_BE                0x00c7          /* Bulk Erase */
46 +#define  BCMA_CC_FLASHCTL_ST_DP                0x00b9          /* Deep Power-down */
47 +#define  BCMA_CC_FLASHCTL_ST_RES       0x03ab          /* Read Electronic Signature */
48 +#define  BCMA_CC_FLASHCTL_ST_CSA       0x1000          /* Keep chip select asserted */
49 +#define  BCMA_CC_FLASHCTL_ST_SSE       0x0220          /* Sub-sector Erase */
50 +
51 +
52 +/* flashcontrol action+opcodes for Atmel flashes */
53 +#define  BCMA_CC_FLASHCTL_AT_READ                      0x07e8
54 +#define  BCMA_CC_FLASHCTL_AT_PAGE_READ                 0x07d2
55 +#define  BCMA_CC_FLASHCTL_AT_BUF1_READ
56 +#define  BCMA_CC_FLASHCTL_AT_BUF2_READ
57 +#define  BCMA_CC_FLASHCTL_AT_STATUS                    0x01d7
58 +#define  BCMA_CC_FLASHCTL_AT_BUF1_WRITE                        0x0384
59 +#define  BCMA_CC_FLASHCTL_AT_BUF2_WRITE                        0x0387
60 +#define  BCMA_CC_FLASHCTL_AT_BUF1_ERASE_PROGRAM                0x0283
61 +#define  BCMA_CC_FLASHCTL_AT_BUF2_ERASE_PROGRAM                0x0286
62 +#define  BCMA_CC_FLASHCTL_AT_BUF1_PROGRAM              0x0288
63 +#define  BCMA_CC_FLASHCTL_AT_BUF2_PROGRAM              0x0289
64 +#define  BCMA_CC_FLASHCTL_AT_PAGE_ERASE                        0x0281
65 +#define  BCMA_CC_FLASHCTL_AT_BLOCK_ERASE               0x0250
66 +#define  BCMA_CC_FLASHCTL_AT_BUF1_WRITE_ERASE_PROGRAM  0x0382
67 +#define  BCMA_CC_FLASHCTL_AT_BUF2_WRITE_ERASE_PROGRAM  0x0385
68 +#define  BCMA_CC_FLASHCTL_AT_BUF1_LOAD                 0x0253
69 +#define  BCMA_CC_FLASHCTL_AT_BUF2_LOAD                 0x0255
70 +#define  BCMA_CC_FLASHCTL_AT_BUF1_COMPARE              0x0260
71 +#define  BCMA_CC_FLASHCTL_AT_BUF2_COMPARE              0x0261
72 +#define  BCMA_CC_FLASHCTL_AT_BUF1_REPROGRAM            0x0258
73 +#define  BCMA_CC_FLASHCTL_AT_BUF2_REPROGRAM            0x0259
74 +
75  #define BCMA_CC_FLASHADDR              0x0044
76  #define BCMA_CC_FLASHDATA              0x0048
77 +
78 +/* Status register bits for ST flashes */
79 +#define  BCMA_CC_FLASHDATA_ST_WIP      0x01            /* Write In Progress */
80 +#define  BCMA_CC_FLASHDATA_ST_WEL      0x02            /* Write Enable Latch */
81 +#define  BCMA_CC_FLASHDATA_ST_BP_MASK  0x1c            /* Block Protect */
82 +#define  BCMA_CC_FLASHDATA_ST_BP_SHIFT 2
83 +#define  BCMA_CC_FLASHDATA_ST_SRWD     0x80            /* Status Register Write Disable */
84 +
85 +/* Status register bits for Atmel flashes */
86 +#define  BCMA_CC_FLASHDATA_AT_READY    0x80
87 +#define  BCMA_CC_FLASHDATA_AT_MISMATCH 0x40
88 +#define  BCMA_CC_FLASHDATA_AT_ID_MASK  0x38
89 +#define  BCMA_CC_FLASHDATA_AT_ID_SHIFT 3
90 +
91  #define BCMA_CC_BCAST_ADDR             0x0050
92  #define BCMA_CC_BCAST_DATA             0x0054
93  #define BCMA_CC_GPIOPULLUP             0x0058          /* Rev >= 20 only */
94 @@ -360,6 +418,12 @@
95  /* 4313 Chip specific ChipControl register bits */
96  #define BCMA_CCTRL_4313_12MA_LED_DRIVE         0x00000007      /* 12 mA drive strengh for later 4313 */
97  
98 +#define        BCMA_FLASH2                     0x1c000000      /* Flash Region 2 (region 1 shadowed here) */
99 +#define        BCMA_FLASH2_SZ                  0x02000000      /* Size of Flash Region 2 */
100 +#define        BCMA_FLASH1                     0x1fc00000      /* MIPS Flash Region 1 */
101 +#define        BCMA_FLASH1_SZ                  0x00400000      /* MIPS Size of Flash Region 1 */
102 +
103 +
104  /* Data for the PMU, if available.
105   * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
106   */
107 @@ -369,6 +433,10 @@ struct bcma_chipcommon_pmu {
108  };
109  
110  #ifdef CONFIG_BCMA_DRIVER_MIPS
111 +enum bcma_flash_type {
112 +       BCMA_PFLASH,
113 +};
114 +
115  struct bcma_pflash {
116         u8 buswidth;
117         u32 window;
118 @@ -394,7 +462,10 @@ struct bcma_drv_cc {
119         u16 fast_pwrup_delay;
120         struct bcma_chipcommon_pmu pmu;
121  #ifdef CONFIG_BCMA_DRIVER_MIPS
122 -       struct bcma_pflash pflash;
123 +       enum bcma_flash_type flash_type;
124 +       union {
125 +               struct bcma_pflash pflash;
126 +       };
127  
128         int nr_serial_ports;
129         struct bcma_serial_port serial_ports[4];