4b94f63d2f0ffaf5c0c8a19897edfcc77cc21661
[vuplus_openembedded] / packages / at91bootstrap / files / at91bootstrap-2.3.4.patch
1 diff -urN at91bootstrap-2.3-0rig/driver/dataflash.c at91bootstrap-2.3.4/driver/dataflash.c
2 --- at91bootstrap-2.3-0rig/driver/dataflash.c   2007-04-22 13:56:29.000000000 +0200
3 +++ at91bootstrap-2.3.4/driver/dataflash.c      2007-09-24 20:56:18.000000000 +0200
4 @@ -39,8 +39,12 @@
5  #include "../include/part.h"
6  #include "../include/main.h"
7  #include "../include/dataflash.h"
8 +#include "../include/debug.h"
9  #include <stdlib.h>
10  
11 +#define        SUCCESS 1
12 +#define        FAILURE 0
13 +
14  #ifdef CFG_DATAFLASH
15  extern div_t udiv(unsigned int numerator, unsigned int denominator);
16  /* Write SPI register */
17 @@ -92,7 +96,7 @@
18         /* SPI_Enable */
19         write_spi(SPI_CR, AT91C_SPI_SPIEN);
20  
21 -       return 0;
22 +       return SUCCESS;
23  }
24  
25  /*------------------------------------------------------------------------------*/
26 @@ -134,12 +138,10 @@
27  
28         /* Try to get the dataflash semaphore */
29         if ((pDataFlash->bSemaphore) != UNLOCKED)
30 -               return (char) 0;
31 +               return (char) FAILURE;
32         pDataFlash->bSemaphore = LOCKED;
33 -
34         /* Compute command pattern */
35         dInternalAdr = (result.quot << AT91C_PAGE_OFFSET(pDataFlash)) + result.rem;
36 -
37         if (AT91C_DF_NB_PAGE(pDataFlash) >= 16384)
38         {
39                 pDataFlash->command[0] = (bCmd & 0x000000FF) | \
40 @@ -178,7 +180,7 @@
41  
42         while (df_is_busy(pDataFlash) == LOCKED);
43  
44 -       return 1;
45 +       return SUCCESS;
46  }
47  
48  /*------------------------------------------------------------------------------*/
49 @@ -194,13 +196,13 @@
50                 if (df_get_status(pDataFlash))
51                 {
52                         if (df_is_ready(pDataFlash))
53 -                               return 1;
54 +                               return SUCCESS;
55                 }
56         }
57  
58 -       return 0;
59 +       return FAILURE;
60  }
61 -
62 +volatile       int loop;
63  /*------------------------------------------------------------------------------*/
64  /* \fn    df_read                                                              */
65  /* \brief Read a block in dataflash                                            */
66 @@ -212,21 +214,30 @@
67         unsigned int size)
68  {
69         unsigned int SizeToRead;
70 +       int page_counter;
71  
72 +       page_counter = 32;
73         while (size)
74         {
75 -               SizeToRead = (size < AT91C_MAX_PDC_SIZE)? size : AT91C_MAX_PDC_SIZE;
76 -
77 +               SizeToRead = (size < 0x8000)? size : 0x8000;
78                 /* wait the dataflash ready status */
79 -               df_wait_ready(pDf);
80 -               df_continuous_read(pDf, (char *)buffer, SizeToRead, addr);
81 -
82 -               size -= SizeToRead;
83 -               addr += SizeToRead;
84 -               buffer += SizeToRead;
85 +               if(df_wait_ready(pDf) != 0) {
86 +                       df_continuous_read(pDf, (char *)buffer, SizeToRead, addr);
87 +                       dbg_print(".");
88 +                       if(--page_counter <= 0) {
89 +                               page_counter = 32;
90 +                               dbg_print("\r\n");
91 +                       }
92 +                       size -= SizeToRead;
93 +                       addr += SizeToRead;
94 +                       buffer += SizeToRead;
95 +               } else {
96 +                       /* We got a timeout */
97 +                       dbg_print("Timeout while waiting for dataflash ready\n");
98 +                       return FAILURE;
99 +               }
100         }
101 -
102 -       return 0;
103 +       return SUCCESS;
104  }
105  
106  /*----------------------------------------------------------------------*/
107 @@ -235,13 +246,19 @@
108  /*----------------------------------------------------------------------*/
109  static int df_download(AT91PS_DF pDf, unsigned int img_addr, unsigned int img_size, unsigned int img_dest)
110  {
111 +       dbg_print(">Loading from Dataflash[");
112 +       dbg_print_hex(img_addr);
113 +       dbg_print("] to SDRAM[");
114 +       dbg_print_hex(img_dest);
115 +       dbg_print("]\r\n");
116         /* read bytes in the dataflash */
117 -       df_read(pDf, img_addr,(unsigned char *)img_dest, img_size);
118 -
119 +       if(df_read(pDf, img_addr,(unsigned char *)img_dest, img_size) == FAILURE)
120 +               return FAILURE;
121 +       dbg_print("\r\n>Loading complete, [");
122 +       dbg_print_hex(IMG_SIZE);
123 +       dbg_print("] bytes\r\n");
124         /* wait the dataflash ready status */
125 -       df_wait_ready(pDf);
126 -
127 -    return 0;
128 +       return df_wait_ready(pDf);
129  }
130  
131  /*----------------------------------------------------------------------*/
132 @@ -263,7 +280,7 @@
133  static int df_init (AT91PS_DF pDf)
134  {
135         int dfcode = 0;
136 -       int status = 1;
137 +       int status = SUCCESS;
138  
139         /* Default: AT45DB321B */
140         pDf->dfDescription.pages_number = 8192;
141 @@ -302,18 +319,21 @@
142                         pDf->dfDescription.pages_number = 4096;
143                         pDf->dfDescription.pages_size = 528;
144                         pDf->dfDescription.page_offset = 10;
145 +                       dbg_print(">AT45DB161D detected\r\n");
146                         break;
147  
148                 case AT45DB321B:
149                         pDf->dfDescription.pages_number = 8192;
150                         pDf->dfDescription.pages_size = 528;
151                         pDf->dfDescription.page_offset = 10;
152 +                       dbg_print(">AT45DB321D detected\r\n");
153                         break;
154  
155                 case AT45DB642:
156                         pDf->dfDescription.pages_number = 8192;
157                         pDf->dfDescription.pages_size = 1056;
158                         pDf->dfDescription.page_offset = 11;
159 +                       dbg_print(">AT45DB642D detected\r\n");
160                         break;
161  /*
162                 case AT45DB1282:
163 @@ -335,7 +355,7 @@
164                         break;
165  */
166                 default:
167 -                       status = 0;
168 +                       status = FAILURE;
169                         break;
170         }
171  
172 @@ -357,12 +377,12 @@
173                 if (i != 23)
174                 {
175                         if ((buffer[i] != 0xEA) && (buffer[i] != 0xE5) )
176 -                               return -1;
177 +                               return FAILURE;
178                 }
179                 i+=4;
180         }
181  
182 -       return 0;
183 +       return SUCCESS;
184  }
185  
186  /*------------------------------------------------------------------------------*/
187 @@ -374,13 +394,14 @@
188         AT91S_DF sDF;
189         AT91PS_DF pDf = (AT91PS_DF)&sDF;
190         unsigned int rxBuffer[128];
191 +       unsigned int status;
192  
193         pDf->bSemaphore = UNLOCKED;
194  
195         df_spi_init(pcs, DF_CS_SETTINGS);
196  
197 -       if (!df_init(pDf))
198 -               return -1;
199 +       if (df_init(pDf) == FAILURE)
200 +               return FAILURE;
201  
202  #ifdef AT91SAM9260
203         /* Test if a button has been pressed or not */
204 @@ -391,10 +412,13 @@
205         df_continuous_read(pDf, (char *)rxBuffer, 32, img_addr);
206         df_wait_ready(pDf);
207  
208 -       if (df_is_boot_valid((unsigned char*)rxBuffer))
209 -               return -1;
210 +       if (df_is_boot_valid((unsigned char*)rxBuffer) == FAILURE) {
211 +               dbg_print(">Invalid Boot Area...\n\r");
212 +               return FAILURE;
213 +       }
214  
215 -       return df_download(pDf, img_addr, img_size, img_dest);
216 +       status = df_download(pDf, img_addr, img_size, img_dest);
217 +       return status;
218  }
219  
220  #endif /* CFG_DATAFLASH */
221 diff -urN at91bootstrap-2.3-0rig/driver/debug.c at91bootstrap-2.3.4/driver/debug.c
222 --- at91bootstrap-2.3-0rig/driver/debug.c       2006-12-05 11:27:24.000000000 +0100
223 +++ at91bootstrap-2.3.4/driver/debug.c  2007-09-24 20:38:01.000000000 +0200
224 @@ -85,4 +85,19 @@
225         }
226  }
227  
228 +void dbg_print_hex(unsigned int data)
229 +{
230 +       unsigned char hex[11];
231 +       int i=0;
232 +       hex[0]='0';
233 +       hex[1]='x';
234 +       for(i = 9 ;i >= 2;i--) {
235 +               hex[i] = "0123456789ABCDEF"[data & 0xF];
236 +               data >>= 4;
237 +       }
238 +       hex[10]='\0';   
239 +       dbg_print((const char *) hex);
240 +}
241 +
242 +
243  #endif /* CFG_DEBUG */
244 diff -urN at91bootstrap-2.3-0rig/include/debug.h at91bootstrap-2.3.4/include/debug.h
245 --- at91bootstrap-2.3-0rig/include/debug.h      2006-12-05 11:27:20.000000000 +0100
246 +++ at91bootstrap-2.3.4/include/debug.h 2007-09-24 18:26:37.000000000 +0200
247 @@ -45,5 +45,6 @@
248  /* Global functions */
249  extern void dbg_init(unsigned int);
250  extern void dbg_print(const char *ptr);
251 +extern void dbg_print_hex(unsigned int data);
252  
253  #endif /*_DEBUG_H_*/
254 diff -urN at91bootstrap-2.3-0rig/Makefile at91bootstrap-2.3.4/Makefile
255 --- at91bootstrap-2.3-0rig/Makefile     2007-09-24 18:26:10.000000000 +0200
256 +++ at91bootstrap-2.3.4/Makefile        2007-09-24 20:56:53.000000000 +0200
257 @@ -17,7 +17,7 @@
258  endif
259  
260  ifeq   ($(CONFIG_SPI_CLK),)
261 -CONFIG_SPI_CLK=5000000
262 +CONFIG_SPI_CLK=33000000
263  endif
264  
265  ifndef MEMORY