]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/include/asm/arch-s3c24x0/s3c24x0.h
Merge branch 'master' of git://git.denx.de/u-boot-usb
[karo-tx-uboot.git] / arch / arm / include / asm / arch-s3c24x0 / s3c24x0.h
1 /*
2  * (C) Copyright 2003
3  * David Müller ELSOFT AG Switzerland. d.mueller@elsoft.ch
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 /************************************************
9  * NAME     : s3c24x0.h
10  * Version  : 31.3.2003
11  *
12  * common stuff for SAMSUNG S3C24X0 SoC
13  ************************************************/
14
15 #ifndef __S3C24X0_H__
16 #define __S3C24X0_H__
17
18 /* Memory controller (see manual chapter 5) */
19 struct s3c24x0_memctl {
20         u32     bwscon;
21         u32     bankcon[8];
22         u32     refresh;
23         u32     banksize;
24         u32     mrsrb6;
25         u32     mrsrb7;
26 };
27
28
29 /* USB HOST (see manual chapter 12) */
30 struct s3c24x0_usb_host {
31         u32     HcRevision;
32         u32     HcControl;
33         u32     HcCommonStatus;
34         u32     HcInterruptStatus;
35         u32     HcInterruptEnable;
36         u32     HcInterruptDisable;
37         u32     HcHCCA;
38         u32     HcPeriodCuttendED;
39         u32     HcControlHeadED;
40         u32     HcControlCurrentED;
41         u32     HcBulkHeadED;
42         u32     HcBuldCurrentED;
43         u32     HcDoneHead;
44         u32     HcRmInterval;
45         u32     HcFmRemaining;
46         u32     HcFmNumber;
47         u32     HcPeriodicStart;
48         u32     HcLSThreshold;
49         u32     HcRhDescriptorA;
50         u32     HcRhDescriptorB;
51         u32     HcRhStatus;
52         u32     HcRhPortStatus1;
53         u32     HcRhPortStatus2;
54 };
55
56
57 /* INTERRUPT (see manual chapter 14) */
58 struct s3c24x0_interrupt {
59         u32     srcpnd;
60         u32     intmod;
61         u32     intmsk;
62         u32     priority;
63         u32     intpnd;
64         u32     intoffset;
65 #if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
66         u32     subsrcpnd;
67         u32     intsubmsk;
68 #endif
69 };
70
71
72 /* DMAS (see manual chapter 8) */
73 struct s3c24x0_dma {
74         u32     disrc;
75 #if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
76         u32     disrcc;
77 #endif
78         u32     didst;
79 #if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
80         u32     didstc;
81 #endif
82         u32     dcon;
83         u32     dstat;
84         u32     dcsrc;
85         u32     dcdst;
86         u32     dmasktrig;
87 #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) \
88                 || defined(CONFIG_S3C2440)
89         u32     res[1];
90 #endif
91 };
92
93 struct s3c24x0_dmas {
94         struct s3c24x0_dma      dma[4];
95 };
96
97
98 /* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) */
99 /*                          (see S3C2410 manual chapter 7) */
100 struct s3c24x0_clock_power {
101         u32     locktime;
102         u32     mpllcon;
103         u32     upllcon;
104         u32     clkcon;
105         u32     clkslow;
106         u32     clkdivn;
107 #if defined(CONFIG_S3C2440)
108         u32     camdivn;
109 #endif
110 };
111
112
113 /* LCD CONTROLLER (see manual chapter 15) */
114 struct s3c24x0_lcd {
115         u32     lcdcon1;
116         u32     lcdcon2;
117         u32     lcdcon3;
118         u32     lcdcon4;
119         u32     lcdcon5;
120         u32     lcdsaddr1;
121         u32     lcdsaddr2;
122         u32     lcdsaddr3;
123         u32     redlut;
124         u32     greenlut;
125         u32     bluelut;
126         u32     res[8];
127         u32     dithmode;
128         u32     tpal;
129 #if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
130         u32     lcdintpnd;
131         u32     lcdsrcpnd;
132         u32     lcdintmsk;
133         u32     lpcsel;
134 #endif
135 };
136
137
138 /* NAND FLASH (see manual chapter 6) */
139 struct s3c24x0_nand {
140         u32     nfconf;
141 #ifndef CONFIG_S3C2410
142         u32     nfcont;
143 #endif
144         u32     nfcmd;
145         u32     nfaddr;
146         u32     nfdata;
147 #ifndef CONFIG_S3C2410
148         u32     nfeccd0;
149         u32     nfeccd1;
150         u32     nfeccd;
151 #endif
152         u32     nfstat;
153 #ifdef CONFIG_S3C2410
154         u32     nfecc;
155 #else
156         u32     nfstat0;
157         u32     nfstat1;
158         u32     nfmecc0;
159         u32     nfmecc1;
160         u32     nfsecc;
161         u32     nfsblk;
162         u32     nfeblk;
163 #endif
164 };
165
166 /* UART (see manual chapter 11) */
167 struct s3c24x0_uart {
168         u32     ulcon;
169         u32     ucon;
170         u32     ufcon;
171         u32     umcon;
172         u32     utrstat;
173         u32     uerstat;
174         u32     ufstat;
175         u32     umstat;
176 #ifdef __BIG_ENDIAN
177         u8      res1[3];
178         u8      utxh;
179         u8      res2[3];
180         u8      urxh;
181 #else /* Little Endian */
182         u8      utxh;
183         u8      res1[3];
184         u8      urxh;
185         u8      res2[3];
186 #endif
187         u32     ubrdiv;
188 };
189
190
191 /* PWM TIMER (see manual chapter 10) */
192 struct s3c24x0_timer {
193         u32     tcntb;
194         u32     tcmpb;
195         u32     tcnto;
196 };
197
198 struct s3c24x0_timers {
199         u32     tcfg0;
200         u32     tcfg1;
201         u32     tcon;
202         struct s3c24x0_timer    ch[4];
203         u32     tcntb4;
204         u32     tcnto4;
205 };
206
207
208 /* USB DEVICE (see manual chapter 13) */
209 struct s3c24x0_usb_dev_fifos {
210 #ifdef __BIG_ENDIAN
211         u8      res[3];
212         u8      ep_fifo_reg;
213 #else /*  little endian */
214         u8      ep_fifo_reg;
215         u8      res[3];
216 #endif
217 };
218
219 struct s3c24x0_usb_dev_dmas {
220 #ifdef __BIG_ENDIAN
221         u8      res1[3];
222         u8      ep_dma_con;
223         u8      res2[3];
224         u8      ep_dma_unit;
225         u8      res3[3];
226         u8      ep_dma_fifo;
227         u8      res4[3];
228         u8      ep_dma_ttc_l;
229         u8      res5[3];
230         u8      ep_dma_ttc_m;
231         u8      res6[3];
232         u8      ep_dma_ttc_h;
233 #else /*  little endian */
234         u8      ep_dma_con;
235         u8      res1[3];
236         u8      ep_dma_unit;
237         u8      res2[3];
238         u8      ep_dma_fifo;
239         u8      res3[3];
240         u8      ep_dma_ttc_l;
241         u8      res4[3];
242         u8      ep_dma_ttc_m;
243         u8      res5[3];
244         u8      ep_dma_ttc_h;
245         u8      res6[3];
246 #endif
247 };
248
249 struct s3c24x0_usb_device {
250 #ifdef __BIG_ENDIAN
251         u8      res1[3];
252         u8      func_addr_reg;
253         u8      res2[3];
254         u8      pwr_reg;
255         u8      res3[3];
256         u8      ep_int_reg;
257         u8      res4[15];
258         u8      usb_int_reg;
259         u8      res5[3];
260         u8      ep_int_en_reg;
261         u8      res6[15];
262         u8      usb_int_en_reg;
263         u8      res7[3];
264         u8      frame_num1_reg;
265         u8      res8[3];
266         u8      frame_num2_reg;
267         u8      res9[3];
268         u8      index_reg;
269         u8      res10[7];
270         u8      maxp_reg;
271         u8      res11[3];
272         u8      ep0_csr_in_csr1_reg;
273         u8      res12[3];
274         u8      in_csr2_reg;
275         u8      res13[7];
276         u8      out_csr1_reg;
277         u8      res14[3];
278         u8      out_csr2_reg;
279         u8      res15[3];
280         u8      out_fifo_cnt1_reg;
281         u8      res16[3];
282         u8      out_fifo_cnt2_reg;
283 #else /*  little endian */
284         u8      func_addr_reg;
285         u8      res1[3];
286         u8      pwr_reg;
287         u8      res2[3];
288         u8      ep_int_reg;
289         u8      res3[15];
290         u8      usb_int_reg;
291         u8      res4[3];
292         u8      ep_int_en_reg;
293         u8      res5[15];
294         u8      usb_int_en_reg;
295         u8      res6[3];
296         u8      frame_num1_reg;
297         u8      res7[3];
298         u8      frame_num2_reg;
299         u8      res8[3];
300         u8      index_reg;
301         u8      res9[7];
302         u8      maxp_reg;
303         u8      res10[7];
304         u8      ep0_csr_in_csr1_reg;
305         u8      res11[3];
306         u8      in_csr2_reg;
307         u8      res12[3];
308         u8      out_csr1_reg;
309         u8      res13[7];
310         u8      out_csr2_reg;
311         u8      res14[3];
312         u8      out_fifo_cnt1_reg;
313         u8      res15[3];
314         u8      out_fifo_cnt2_reg;
315         u8      res16[3];
316 #endif /*  __BIG_ENDIAN */
317         struct s3c24x0_usb_dev_fifos    fifo[5];
318         struct s3c24x0_usb_dev_dmas     dma[5];
319 };
320
321
322 /* WATCH DOG TIMER (see manual chapter 18) */
323 struct s3c24x0_watchdog {
324         u32     wtcon;
325         u32     wtdat;
326         u32     wtcnt;
327 };
328
329 /* IIS (see manual chapter 21) */
330 struct s3c24x0_i2s {
331 #ifdef __BIG_ENDIAN
332         u16     res1;
333         u16     iiscon;
334         u16     res2;
335         u16     iismod;
336         u16     res3;
337         u16     iispsr;
338         u16     res4;
339         u16     iisfcon;
340         u16     res5;
341         u16     iisfifo;
342 #else /*  little endian */
343         u16     iiscon;
344         u16     res1;
345         u16     iismod;
346         u16     res2;
347         u16     iispsr;
348         u16     res3;
349         u16     iisfcon;
350         u16     res4;
351         u16     iisfifo;
352         u16     res5;
353 #endif
354 };
355
356
357 /* I/O PORT (see manual chapter 9) */
358 struct s3c24x0_gpio {
359 #ifdef CONFIG_S3C2400
360         u32     pacon;
361         u32     padat;
362
363         u32     pbcon;
364         u32     pbdat;
365         u32     pbup;
366
367         u32     pccon;
368         u32     pcdat;
369         u32     pcup;
370
371         u32     pdcon;
372         u32     pddat;
373         u32     pdup;
374
375         u32     pecon;
376         u32     pedat;
377         u32     peup;
378
379         u32     pfcon;
380         u32     pfdat;
381         u32     pfup;
382
383         u32     pgcon;
384         u32     pgdat;
385         u32     pgup;
386
387         u32     opencr;
388
389         u32     misccr;
390         u32     extint;
391 #endif
392 #ifdef CONFIG_S3C2410
393         u32     gpacon;
394         u32     gpadat;
395         u32     res1[2];
396         u32     gpbcon;
397         u32     gpbdat;
398         u32     gpbup;
399         u32     res2;
400         u32     gpccon;
401         u32     gpcdat;
402         u32     gpcup;
403         u32     res3;
404         u32     gpdcon;
405         u32     gpddat;
406         u32     gpdup;
407         u32     res4;
408         u32     gpecon;
409         u32     gpedat;
410         u32     gpeup;
411         u32     res5;
412         u32     gpfcon;
413         u32     gpfdat;
414         u32     gpfup;
415         u32     res6;
416         u32     gpgcon;
417         u32     gpgdat;
418         u32     gpgup;
419         u32     res7;
420         u32     gphcon;
421         u32     gphdat;
422         u32     gphup;
423         u32     res8;
424
425         u32     misccr;
426         u32     dclkcon;
427         u32     extint0;
428         u32     extint1;
429         u32     extint2;
430         u32     eintflt0;
431         u32     eintflt1;
432         u32     eintflt2;
433         u32     eintflt3;
434         u32     eintmask;
435         u32     eintpend;
436         u32     gstatus0;
437         u32     gstatus1;
438         u32     gstatus2;
439         u32     gstatus3;
440         u32     gstatus4;
441 #endif
442 #if defined(CONFIG_S3C2440)
443         u32     gpacon;
444         u32     gpadat;
445         u32     res1[2];
446         u32     gpbcon;
447         u32     gpbdat;
448         u32     gpbup;
449         u32     res2;
450         u32     gpccon;
451         u32     gpcdat;
452         u32     gpcup;
453         u32     res3;
454         u32     gpdcon;
455         u32     gpddat;
456         u32     gpdup;
457         u32     res4;
458         u32     gpecon;
459         u32     gpedat;
460         u32     gpeup;
461         u32     res5;
462         u32     gpfcon;
463         u32     gpfdat;
464         u32     gpfup;
465         u32     res6;
466         u32     gpgcon;
467         u32     gpgdat;
468         u32     gpgup;
469         u32     res7;
470         u32     gphcon;
471         u32     gphdat;
472         u32     gphup;
473         u32     res8;
474
475         u32     misccr;
476         u32     dclkcon;
477         u32     extint0;
478         u32     extint1;
479         u32     extint2;
480         u32     eintflt0;
481         u32     eintflt1;
482         u32     eintflt2;
483         u32     eintflt3;
484         u32     eintmask;
485         u32     eintpend;
486         u32     gstatus0;
487         u32     gstatus1;
488         u32     gstatus2;
489         u32     gstatus3;
490         u32     gstatus4;
491
492         u32     res9;
493         u32     dsc0;
494         u32     dsc1;
495         u32     mslcon;
496         u32     gpjcon;
497         u32     gpjdat;
498         u32     gpjup;
499         u32     res10;
500 #endif
501 };
502
503
504 /* RTC (see manual chapter 17) */
505 struct s3c24x0_rtc {
506 #ifdef __BIG_ENDIAN
507         u8      res1[67];
508         u8      rtccon;
509         u8      res2[3];
510         u8      ticnt;
511         u8      res3[11];
512         u8      rtcalm;
513         u8      res4[3];
514         u8      almsec;
515         u8      res5[3];
516         u8      almmin;
517         u8      res6[3];
518         u8      almhour;
519         u8      res7[3];
520         u8      almdate;
521         u8      res8[3];
522         u8      almmon;
523         u8      res9[3];
524         u8      almyear;
525         u8      res10[3];
526         u8      rtcrst;
527         u8      res11[3];
528         u8      bcdsec;
529         u8      res12[3];
530         u8      bcdmin;
531         u8      res13[3];
532         u8      bcdhour;
533         u8      res14[3];
534         u8      bcddate;
535         u8      res15[3];
536         u8      bcdday;
537         u8      res16[3];
538         u8      bcdmon;
539         u8      res17[3];
540         u8      bcdyear;
541 #else /*  little endian */
542         u8      res0[64];
543         u8      rtccon;
544         u8      res1[3];
545         u8      ticnt;
546         u8      res2[11];
547         u8      rtcalm;
548         u8      res3[3];
549         u8      almsec;
550         u8      res4[3];
551         u8      almmin;
552         u8      res5[3];
553         u8      almhour;
554         u8      res6[3];
555         u8      almdate;
556         u8      res7[3];
557         u8      almmon;
558         u8      res8[3];
559         u8      almyear;
560         u8      res9[3];
561         u8      rtcrst;
562         u8      res10[3];
563         u8      bcdsec;
564         u8      res11[3];
565         u8      bcdmin;
566         u8      res12[3];
567         u8      bcdhour;
568         u8      res13[3];
569         u8      bcddate;
570         u8      res14[3];
571         u8      bcdday;
572         u8      res15[3];
573         u8      bcdmon;
574         u8      res16[3];
575         u8      bcdyear;
576         u8      res17[3];
577 #endif
578 };
579
580
581 /* ADC (see manual chapter 16) */
582 struct s3c2400_adc {
583         u32     adccon;
584         u32     adcdat;
585 };
586
587
588 /* ADC (see manual chapter 16) */
589 struct s3c2410_adc {
590         u32     adccon;
591         u32     adctsc;
592         u32     adcdly;
593         u32     adcdat0;
594         u32     adcdat1;
595 };
596
597
598 /* SPI (see manual chapter 22) */
599 struct s3c24x0_spi_channel {
600         u8      spcon;
601         u8      res1[3];
602         u8      spsta;
603         u8      res2[3];
604         u8      sppin;
605         u8      res3[3];
606         u8      sppre;
607         u8      res4[3];
608         u8      sptdat;
609         u8      res5[3];
610         u8      sprdat;
611         u8      res6[3];
612         u8      res7[16];
613 };
614
615 struct s3c24x0_spi {
616         struct s3c24x0_spi_channel      ch[S3C24X0_SPI_CHANNELS];
617 };
618
619
620 /* MMC INTERFACE (see S3C2400 manual chapter 19) */
621 struct s3c2400_mmc {
622 #ifdef __BIG_ENDIAN
623         u8      res1[3];
624         u8      mmcon;
625         u8      res2[3];
626         u8      mmcrr;
627         u8      res3[3];
628         u8      mmfcon;
629         u8      res4[3];
630         u8      mmsta;
631         u16     res5;
632         u16     mmfsta;
633         u8      res6[3];
634         u8      mmpre;
635         u16     res7;
636         u16     mmlen;
637         u8      res8[3];
638         u8      mmcr7;
639         u32     mmrsp[4];
640         u8      res9[3];
641         u8      mmcmd0;
642         u32     mmcmd1;
643         u16     res10;
644         u16     mmcr16;
645         u8      res11[3];
646         u8      mmdat;
647 #else
648         u8      mmcon;
649         u8      res1[3];
650         u8      mmcrr;
651         u8      res2[3];
652         u8      mmfcon;
653         u8      res3[3];
654         u8      mmsta;
655         u8      res4[3];
656         u16     mmfsta;
657         u16     res5;
658         u8      mmpre;
659         u8      res6[3];
660         u16     mmlen;
661         u16     res7;
662         u8      mmcr7;
663         u8      res8[3];
664         u32     mmrsp[4];
665         u8      mmcmd0;
666         u8      res9[3];
667         u32     mmcmd1;
668         u16     mmcr16;
669         u16     res10;
670         u8      mmdat;
671         u8      res11[3];
672 #endif
673 };
674
675
676 /* SD INTERFACE (see S3C2410 manual chapter 19) */
677 struct s3c24x0_sdi {
678         u32     sdicon;
679         u32     sdipre;
680         u32     sdicarg;
681         u32     sdiccon;
682         u32     sdicsta;
683         u32     sdirsp0;
684         u32     sdirsp1;
685         u32     sdirsp2;
686         u32     sdirsp3;
687         u32     sdidtimer;
688         u32     sdibsize;
689         u32     sdidcon;
690         u32     sdidcnt;
691         u32     sdidsta;
692         u32     sdifsta;
693 #ifdef CONFIG_S3C2410
694         u32     sdidat;
695         u32     sdiimsk;
696 #else
697         u32     sdiimsk;
698         u32     sdidat;
699 #endif
700 };
701
702 #ifdef CONFIG_CMD_MMC
703 #include <mmc.h>
704 int s3cmmc_initialize(bd_t *bis, int (*getcd)(struct mmc *),
705                       int (*getwp)(struct mmc *));
706 #endif
707
708 #endif /*__S3C24X0_H__*/