1
2
3
4
5
6
7
8#ifndef __COMMON_H_
9#define __COMMON_H_ 1
10
11#ifndef __ASSEMBLY__
12
13typedef unsigned char uchar;
14typedef volatile unsigned long vu_long;
15typedef volatile unsigned short vu_short;
16typedef volatile unsigned char vu_char;
17
18#include <config.h>
19#include <asm-offsets.h>
20#include <linux/bitops.h>
21#include <linux/types.h>
22#include <linux/string.h>
23#include <linux/stringify.h>
24#include <asm/ptrace.h>
25#include <stdarg.h>
26#include <linux/kernel.h>
27#if defined(CONFIG_PCI) && defined(CONFIG_4xx)
28#include <pci.h>
29#endif
30#if defined(CONFIG_8xx)
31#include <asm/8xx_immap.h>
32#if defined(CONFIG_MPC859) || defined(CONFIG_MPC859T) || \
33 defined(CONFIG_MPC866) || \
34 defined(CONFIG_MPC866P)
35# define CONFIG_MPC866_FAMILY 1
36#elif defined(CONFIG_MPC885)
37# define CONFIG_MPC885_FAMILY 1
38#endif
39#if defined(CONFIG_MPC860) \
40 || defined(CONFIG_MPC860T) \
41 || defined(CONFIG_MPC866_FAMILY) \
42 || defined(CONFIG_MPC885_FAMILY)
43# define CONFIG_MPC86x 1
44#endif
45#elif defined(CONFIG_5xx)
46#include <asm/5xx_immap.h>
47#elif defined(CONFIG_MPC5xxx)
48#include <mpc5xxx.h>
49#elif defined(CONFIG_MPC512X)
50#include <asm/immap_512x.h>
51#elif defined(CONFIG_MPC8260)
52#if defined(CONFIG_MPC8247) \
53 || defined(CONFIG_MPC8272)
54#define CONFIG_MPC8272_FAMILY 1
55#endif
56#include <asm/immap_8260.h>
57#endif
58#ifdef CONFIG_MPC86xx
59#include <mpc86xx.h>
60#include <asm/immap_86xx.h>
61#endif
62#ifdef CONFIG_MPC85xx
63#include <mpc85xx.h>
64#include <asm/immap_85xx.h>
65#endif
66#ifdef CONFIG_MPC83xx
67#include <mpc83xx.h>
68#include <asm/immap_83xx.h>
69#endif
70#ifdef CONFIG_4xx
71#include <asm/ppc4xx.h>
72#endif
73#ifdef CONFIG_BLACKFIN
74#include <asm/blackfin.h>
75#endif
76#ifdef CONFIG_SOC_DA8XX
77#include <asm/arch/hardware.h>
78#endif
79
80#include <part.h>
81#include <flash.h>
82#include <image.h>
83
84
85#define __STDC_FORMAT_MACROS
86
87#ifdef __LP64__
88#define CONFIG_SYS_SUPPORT_64BIT_DATA
89#endif
90
91#ifdef DEBUG
92#define _DEBUG 1
93#else
94#define _DEBUG 0
95#endif
96
97#ifndef pr_fmt
98#define pr_fmt(fmt) fmt
99#endif
100
101
102
103
104
105
106#define debug_cond(cond, fmt, args...) \
107 do { \
108 if (cond) \
109 printf(pr_fmt(fmt), ##args); \
110 } while (0)
111
112#define debug(fmt, args...) \
113 debug_cond(_DEBUG, fmt, ##args)
114
115
116
117
118
119
120
121
122
123
124void __assert_fail(const char *assertion, const char *file, unsigned line,
125 const char *function);
126#define assert(x) \
127 ({ if (!(x) && _DEBUG) \
128 __assert_fail(#x, __FILE__, __LINE__, __func__); })
129
130#define error(fmt, args...) do { \
131 printf("ERROR: " pr_fmt(fmt) "\nat %s:%d/%s()\n", \
132 ##args, __FILE__, __LINE__, __func__); \
133} while (0)
134
135#ifndef BUG
136#define BUG() do { \
137 printf("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \
138 panic("BUG!"); \
139} while (0)
140#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
141#endif
142
143
144#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
145
146typedef void (interrupt_handler_t)(void *);
147
148#include <asm/u-boot.h>
149#include <asm/global_data.h>
150
151
152
153
154
155
156
157#if defined(CONFIG_TQM823M) || defined(CONFIG_TQM850M) || \
158 defined(CONFIG_TQM855M) || defined(CONFIG_TQM860M) || \
159 defined(CONFIG_TQM862M) || defined(CONFIG_TQM866M)
160# ifndef CONFIG_TQM8xxM
161# define CONFIG_TQM8xxM
162# endif
163#endif
164#if defined(CONFIG_TQM823L) || defined(CONFIG_TQM850L) || \
165 defined(CONFIG_TQM855L) || defined(CONFIG_TQM860L) || \
166 defined(CONFIG_TQM862L) || defined(CONFIG_TQM8xxM) || \
167 defined(CONFIG_TQM885D)
168# ifndef CONFIG_TQM8xxL
169# define CONFIG_TQM8xxL
170# endif
171#endif
172
173#if defined(CONFIG_ENV_IS_EMBEDDED)
174#define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
175#elif ( ((CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) < CONFIG_SYS_MONITOR_BASE) || \
176 (CONFIG_ENV_ADDR >= (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)) ) || \
177 defined(CONFIG_ENV_IS_IN_NVRAM)
178#define TOTAL_MALLOC_LEN (CONFIG_SYS_MALLOC_LEN + CONFIG_ENV_SIZE)
179#else
180#define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
181#endif
182
183
184
185
186int dram_init(void);
187
188void hang (void) __attribute__ ((noreturn));
189
190int timer_init(void);
191int cpu_init(void);
192
193
194phys_size_t initdram (int);
195
196#include <display_options.h>
197
198
199void main_loop (void);
200int run_command(const char *cmd, int flag);
201int run_command_repeatable(const char *cmd, int flag);
202
203
204
205
206
207
208
209
210
211
212
213
214int run_command_list(const char *cmd, int len, int flag);
215extern char console_buffer[];
216
217
218void board_init_f(ulong);
219void board_init_r(gd_t *, ulong) __attribute__ ((noreturn));
220int checkboard(void);
221int show_board_info(void);
222int checkflash(void);
223int checkdram(void);
224int last_stage_init(void);
225extern ulong monitor_flash_len;
226int mac_read_from_eeprom(void);
227extern u8 __dtb_dt_begin[];
228int set_cpu_clk_info(void);
229int mdm_init(void);
230#if defined(CONFIG_DISPLAY_CPUINFO)
231int print_cpuinfo(void);
232#else
233static inline int print_cpuinfo(void)
234{
235 return 0;
236}
237#endif
238int update_flash_size(int flash_size);
239int arch_early_init_r(void);
240
241
242
243
244
245
246
247
248
249
250int arch_cpu_init_dm(void);
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268__weak int arch_reserve_stacks(void);
269
270
271
272
273
274
275
276
277void board_show_dram(phys_size_t size);
278
279
280
281
282
283
284
285
286
287int arch_fixup_fdt(void *blob);
288
289
290void flash_perror (int);
291
292
293int source (ulong addr, const char *fit_uname);
294
295extern ulong load_addr;
296extern ulong save_addr;
297extern ulong save_size;
298
299
300void doc_probe(unsigned long physadr);
301
302
303int do_tftpb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
304
305
306int do_fat_fsload(cmd_tbl_t *, int, int, char * const []);
307
308
309int do_ext2load(cmd_tbl_t *, int, int, char * const []);
310
311
312int env_init (void);
313void env_relocate (void);
314int envmatch (uchar *, int);
315
316
317#ifdef CONFIG_SANDBOX
318#define getenv uboot_getenv
319#endif
320char *getenv (const char *);
321int getenv_f (const char *name, char *buf, unsigned len);
322ulong getenv_ulong(const char *name, int base, ulong default_val);
323
324
325
326
327
328
329
330
331
332
333
334ulong getenv_hex(const char *varname, ulong default_val);
335
336
337
338
339
340int getenv_yesno(const char *var);
341int saveenv (void);
342int setenv (const char *, const char *);
343int setenv_ulong(const char *varname, ulong value);
344int setenv_hex(const char *varname, ulong value);
345
346
347
348
349
350
351
352static inline int setenv_addr(const char *varname, const void *addr)
353{
354 return setenv_hex(varname, (ulong)addr);
355}
356
357#ifdef CONFIG_ARM
358# include <asm/mach-types.h>
359# include <asm/setup.h>
360# include <asm/u-boot-arm.h>
361#endif
362#ifdef CONFIG_X86
363# include <asm/u-boot-x86.h>
364#endif
365#ifdef CONFIG_SANDBOX
366# include <asm/u-boot-sandbox.h>
367#endif
368#ifdef CONFIG_NDS32
369# include <asm/mach-types.h>
370# include <asm/setup.h>
371# include <asm/u-boot-nds32.h>
372#endif
373#ifdef CONFIG_MIPS
374# include <asm/u-boot-mips.h>
375#endif
376#ifdef CONFIG_ARC
377# include <asm/u-boot-arc.h>
378#endif
379
380#ifdef CONFIG_AUTO_COMPLETE
381int env_complete(char *var, int maxv, char *cmdv[], int maxsz, char *buf);
382#endif
383int get_env_id (void);
384
385void pci_init (void);
386void pci_init_board(void);
387void pciinfo (int, int);
388
389#if defined(CONFIG_PCI) && defined(CONFIG_4xx)
390 int pci_pre_init (struct pci_controller *);
391 int is_pci_host (struct pci_controller *);
392#endif
393
394#if defined(CONFIG_PCI) && (defined(CONFIG_440) || defined(CONFIG_405EX))
395# if defined(CONFIG_SYS_PCI_TARGET_INIT)
396 void pci_target_init (struct pci_controller *);
397# endif
398# if defined(CONFIG_SYS_PCI_MASTER_INIT)
399 void pci_master_init (struct pci_controller *);
400# endif
401#if defined(CONFIG_440SPE) || \
402 defined(CONFIG_460EX) || defined(CONFIG_460GT) || \
403 defined(CONFIG_405EX)
404 void pcie_setup_hoses(int busno);
405#endif
406#endif
407
408int misc_init_f (void);
409int misc_init_r (void);
410
411
412void jumptable_init(void);
413
414
415const char *symbol_lookup(unsigned long addr, unsigned long *caddr);
416
417
418void api_init (void);
419
420
421long get_ram_size (long *, long);
422phys_size_t get_effective_memsize(void);
423
424
425void reset_phy (void);
426void fdc_hw_init (void);
427
428
429void eeprom_init (void);
430#ifndef CONFIG_SPI
431int eeprom_probe (unsigned dev_addr, unsigned offset);
432#endif
433int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
434int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
435
436
437
438
439
440#if defined(CONFIG_SPI) || !defined(CONFIG_SYS_I2C_EEPROM_ADDR)
441# define CONFIG_SYS_DEF_EEPROM_ADDR 0
442#else
443#if !defined(CONFIG_ENV_EEPROM_IS_ON_I2C)
444# define CONFIG_SYS_DEF_EEPROM_ADDR CONFIG_SYS_I2C_EEPROM_ADDR
445#endif
446#endif
447
448#if defined(CONFIG_SPI)
449extern void spi_init_f (void);
450extern void spi_init_r (void);
451extern ssize_t spi_read (uchar *, int, uchar *, int);
452extern ssize_t spi_write (uchar *, int, uchar *, int);
453#endif
454
455
456int board_early_init_f (void);
457int board_late_init (void);
458int board_postclk_init (void);
459int board_early_init_r (void);
460void board_poweroff (void);
461
462#if defined(CONFIG_SYS_DRAM_TEST)
463int testdram(void);
464#endif
465
466
467#if defined(CONFIG_5xx) || \
468 defined(CONFIG_8xx)
469uint get_immr (uint);
470#endif
471#if defined(CONFIG_MPC5xxx)
472uint get_svr (void);
473#endif
474uint get_pvr (void);
475uint get_svr (void);
476uint rd_ic_cst (void);
477void wr_ic_cst (uint);
478void wr_ic_adr (uint);
479uint rd_dc_cst (void);
480void wr_dc_cst (uint);
481void wr_dc_adr (uint);
482int icache_status (void);
483void icache_enable (void);
484void icache_disable(void);
485int dcache_status (void);
486void dcache_enable (void);
487void dcache_disable(void);
488void mmu_disable(void);
489#if defined(CONFIG_ARM)
490void relocate_code(ulong);
491#else
492void relocate_code(ulong, gd_t *, ulong) __attribute__ ((noreturn));
493#endif
494ulong get_endaddr (void);
495void trap_init (ulong);
496#if defined (CONFIG_4xx) || \
497 defined (CONFIG_MPC5xxx) || \
498 defined (CONFIG_MPC85xx) || \
499 defined (CONFIG_MPC86xx) || \
500 defined (CONFIG_MPC83xx)
501unsigned char in8(unsigned int);
502void out8(unsigned int, unsigned char);
503unsigned short in16(unsigned int);
504unsigned short in16r(unsigned int);
505void out16(unsigned int, unsigned short value);
506void out16r(unsigned int, unsigned short value);
507unsigned long in32(unsigned int);
508unsigned long in32r(unsigned int);
509void out32(unsigned int, unsigned long value);
510void out32r(unsigned int, unsigned long value);
511void ppcDcbf(unsigned long value);
512void ppcDcbi(unsigned long value);
513void ppcSync(void);
514void ppcDcbz(unsigned long value);
515#endif
516#if defined (CONFIG_MICROBLAZE)
517unsigned short in16(unsigned int);
518void out16(unsigned int, unsigned short value);
519#endif
520
521#if defined (CONFIG_MPC83xx)
522void ppcDWload(unsigned int *addr, unsigned int *ret);
523void ppcDWstore(unsigned int *addr, unsigned int *value);
524void disable_addr_trans(void);
525void enable_addr_trans(void);
526#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
527void ddr_enable_ecc(unsigned int dram_size);
528#endif
529#endif
530
531
532
533
534
535ulong timer_get_us(void);
536
537
538static inline int cpumask_next(int cpu, unsigned int mask)
539{
540 for (cpu++; !((1 << cpu) & mask); cpu++)
541 ;
542
543 return cpu;
544}
545
546#define for_each_cpu(iter, cpu, num_cpus, mask) \
547 for (iter = 0, cpu = cpumask_next(-1, mask); \
548 iter < num_cpus; \
549 iter++, cpu = cpumask_next(cpu, mask)) \
550
551int cpu_numcores (void);
552int cpu_num_dspcores(void);
553u32 cpu_mask (void);
554u32 cpu_dsp_mask(void);
555int is_core_valid (unsigned int);
556int probecpu (void);
557int checkcpu (void);
558int checkicache (void);
559int checkdcache (void);
560void upmconfig (unsigned int, unsigned int *, unsigned int);
561ulong get_tbclk (void);
562void reset_misc (void);
563void reset_cpu (ulong addr);
564#if defined (CONFIG_OF_LIBFDT) && defined (CONFIG_OF_BOARD_SETUP)
565void ft_cpu_setup(void *blob, bd_t *bd);
566#ifdef CONFIG_PCI
567void ft_pci_setup(void *blob, bd_t *bd);
568#endif
569#endif
570
571void smp_set_core_boot_addr(unsigned long addr, int corenr);
572void smp_kick_all_cpus(void);
573
574
575int serial_init (void);
576void serial_setbrg (void);
577void serial_putc (const char);
578void serial_putc_raw(const char);
579void serial_puts (const char *);
580int serial_getc (void);
581int serial_tstc (void);
582
583
584struct stdio_dev;
585int serial_stub_getc(struct stdio_dev *sdev);
586int serial_stub_tstc(struct stdio_dev *sdev);
587
588
589int get_clocks (void);
590int get_clocks_866 (void);
591int sdram_adjust_866 (void);
592int adjust_sdram_tbs_8xx (void);
593#if defined(CONFIG_MPC8260)
594int prt_8260_clks (void);
595#elif defined(CONFIG_MPC5xxx)
596int prt_mpc5xxx_clks (void);
597#endif
598#ifdef CONFIG_4xx
599ulong get_OPB_freq (void);
600ulong get_PCI_freq (void);
601#endif
602#if defined(CONFIG_S3C24X0) || \
603 defined(CONFIG_LH7A40X) || \
604 defined(CONFIG_EP93XX)
605ulong get_FCLK (void);
606ulong get_HCLK (void);
607ulong get_PCLK (void);
608ulong get_UCLK (void);
609#endif
610#if defined(CONFIG_LH7A40X)
611ulong get_PLLCLK (void);
612#endif
613#if defined(CONFIG_IMX)
614ulong get_systemPLLCLK(void);
615ulong get_FCLK(void);
616ulong get_HCLK(void);
617ulong get_BCLK(void);
618ulong get_PERCLK1(void);
619ulong get_PERCLK2(void);
620ulong get_PERCLK3(void);
621#endif
622ulong get_bus_freq (ulong);
623int get_serial_clock(void);
624
625#if defined(CONFIG_MPC85xx)
626typedef MPC85xx_SYS_INFO sys_info_t;
627void get_sys_info ( sys_info_t * );
628# if defined(CONFIG_OF_LIBFDT)
629 void ft_fixup_cpu(void *, u64);
630 void ft_fixup_num_cores(void *);
631# endif
632#endif
633#if defined(CONFIG_MPC86xx)
634typedef MPC86xx_SYS_INFO sys_info_t;
635void get_sys_info ( sys_info_t * );
636static inline ulong get_ddr_freq(ulong dummy)
637{
638 return get_bus_freq(dummy);
639}
640#else
641ulong get_ddr_freq(ulong);
642#endif
643
644#if defined(CONFIG_4xx)
645# if defined(CONFIG_440)
646# if defined(CONFIG_440SPE)
647 unsigned long determine_sysper(void);
648 unsigned long determine_pci_clock_per(void);
649# endif
650# endif
651typedef PPC4xx_SYS_INFO sys_info_t;
652int ppc440spe_revB(void);
653void get_sys_info ( sys_info_t * );
654#endif
655
656
657#if defined(CONFIG_8xx) || defined(CONFIG_MPC8260)
658void cpu_init_f (volatile immap_t *immr);
659#endif
660#if defined(CONFIG_4xx) || defined(CONFIG_MCF52x2) || defined(CONFIG_MPC86xx)
661void cpu_init_f (void);
662#endif
663#ifdef CONFIG_MPC85xx
664ulong cpu_init_f(void);
665#endif
666
667int cpu_init_r (void);
668#if defined(CONFIG_MPC8260)
669int prt_8260_rsr (void);
670#elif defined(CONFIG_MPC83xx)
671int prt_83xx_rsr (void);
672#endif
673
674
675int interrupt_init (void);
676void timer_interrupt (struct pt_regs *);
677void external_interrupt (struct pt_regs *);
678void irq_install_handler(int, interrupt_handler_t *, void *);
679void irq_free_handler (int);
680void reset_timer (void);
681ulong get_timer (ulong base);
682
683
684unsigned long timer_get_us(void);
685
686void enable_interrupts (void);
687int disable_interrupts (void);
688
689
690int dpram_init (void);
691uint dpram_base(void);
692uint dpram_base_align(uint align);
693uint dpram_alloc(uint size);
694uint dpram_alloc_align(uint size,uint align);
695void bootcount_store (ulong);
696ulong bootcount_load (void);
697#define BOOTCOUNT_MAGIC 0xB001C041
698
699
700void mii_init (void);
701
702
703ulong lcd_setmem (ulong);
704
705
706ulong video_setmem (ulong);
707
708
709void enable_caches(void);
710void flush_cache (unsigned long, unsigned long);
711void flush_dcache_all(void);
712void flush_dcache_range(unsigned long start, unsigned long stop);
713void invalidate_dcache_range(unsigned long start, unsigned long stop);
714void invalidate_dcache_all(void);
715void invalidate_icache_all(void);
716
717enum {
718
719 CBL_DISABLE_CACHES = 1 << 0,
720 CBL_SHOW_BOOTSTAGE_REPORT = 1 << 1,
721
722 CBL_ALL = 3,
723};
724
725
726
727
728
729
730int cleanup_before_linux_select(int flags);
731
732
733uint64_t get_ticks(void);
734void wait_ticks (unsigned long);
735
736
737void __udelay (unsigned long);
738ulong usec2ticks (unsigned long usec);
739ulong ticks2usec (unsigned long ticks);
740int init_timebase (void);
741
742
743int gunzip(void *, int, unsigned char *, unsigned long *);
744int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
745 int stoponerr, int offset);
746
747
748
749
750
751
752
753
754
755
756void gzwrite_progress_init(u64 expected_size);
757
758void gzwrite_progress(int iteration,
759 u64 bytes_written,
760 u64 total_bytes);
761
762void gzwrite_progress_finish(int retcode,
763 u64 totalwritten,
764 u64 totalsize,
765 u32 expected_crc,
766 u32 calculated_crc);
767
768
769
770
771
772
773
774
775
776
777
778
779
780int gzwrite(unsigned char *src, int len,
781 struct block_dev_desc *dev,
782 unsigned long szwritebuf,
783 u64 startoffs,
784 u64 szexpected);
785
786
787void qsort(void *base, size_t nmemb, size_t size,
788 int(*compar)(const void *, const void *));
789int strcmp_compar(const void *, const void *);
790
791
792void udelay (unsigned long);
793void mdelay(unsigned long);
794
795
796#include <uuid.h>
797
798
799#include <vsprintf.h>
800
801
802char * strmhz(char *buf, unsigned long hz);
803
804
805#include <u-boot/crc.h>
806
807
808#define RAND_MAX -1U
809void srand(unsigned int seed);
810unsigned int rand(void);
811unsigned int rand_r(unsigned int *seedp);
812
813
814int console_init_f(void);
815int console_init_r(void);
816int console_assign(int file, const char *devname);
817int ctrlc (void);
818int had_ctrlc (void);
819void clear_ctrlc (void);
820int disable_ctrlc (int);
821int confirm_yesno(void);
822
823
824
825
826int serial_printf (const char *fmt, ...)
827 __attribute__ ((format (__printf__, 1, 2)));
828
829int getc(void);
830int tstc(void);
831
832
833void putc(const char c);
834void puts(const char *s);
835int printf(const char *fmt, ...)
836 __attribute__ ((format (__printf__, 1, 2)));
837int vprintf(const char *fmt, va_list args);
838
839
840#define eputc(c) fputc(stderr, c)
841#define eputs(s) fputs(stderr, s)
842#define eprintf(fmt,args...) fprintf(stderr,fmt ,##args)
843
844
845
846
847#define stdin 0
848#define stdout 1
849#define stderr 2
850#define MAX_FILES 3
851
852int fprintf(int file, const char *fmt, ...)
853 __attribute__ ((format (__printf__, 2, 3)));
854void fputs(int file, const char *s);
855void fputc(int file, const char c);
856int ftstc(int file);
857int fgetc(int file);
858
859
860int gzip(void *dst, unsigned long *lenp,
861 unsigned char *src, unsigned long srclen);
862int zzip(void *dst, unsigned long *lenp, unsigned char *src,
863 unsigned long srclen, int stoponerr,
864 int (*func)(unsigned long, unsigned long));
865
866
867#include <net.h>
868static inline struct in_addr getenv_ip(char *var)
869{
870 return string_to_ip(getenv(var));
871}
872
873
874
875
876#ifdef CONFIG_CONSOLE_MUX
877#include <iomux.h>
878#endif
879
880int pcmcia_init (void);
881
882#ifdef CONFIG_STATUS_LED
883# include <status_led.h>
884#endif
885
886#include <bootstage.h>
887
888#ifdef CONFIG_SHOW_ACTIVITY
889void show_activity(int arg);
890#endif
891
892
893#ifdef CONFIG_MP
894int cpu_status(int nr);
895int cpu_reset(int nr);
896int cpu_disable(int nr);
897int cpu_release(int nr, int argc, char * const argv[]);
898#endif
899
900#endif
901
902#ifdef CONFIG_PPC
903
904
905
906
907#include <asm/cache.h>
908#endif
909
910
911
912#ifdef CONFIG_POST
913#define CONFIG_HAS_POST
914#ifndef CONFIG_POST_ALT_LIST
915#define CONFIG_POST_STD_LIST
916#endif
917#endif
918
919#ifdef CONFIG_INIT_CRITICAL
920#error CONFIG_INIT_CRITICAL is deprecated!
921#error Read section CONFIG_SKIP_LOWLEVEL_INIT in README.
922#endif
923
924#define ROUND(a,b) (((a) + (b) - 1) & ~((b) - 1))
925
926
927
928
929
930#ifndef __ASSEMBLY__
931#include <asm/cache.h>
932#endif
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986#define PAD_COUNT(s, pad) (((s) - 1) / (pad) + 1)
987#define PAD_SIZE(s, pad) (PAD_COUNT(s, pad) * pad)
988#define ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, pad) \
989 char __##name[ROUND(PAD_SIZE((size) * sizeof(type), pad), align) \
990 + (align - 1)]; \
991 \
992 type *name = (type *) ALIGN((uintptr_t)__##name, align)
993#define ALLOC_ALIGN_BUFFER(type, name, size, align) \
994 ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, 1)
995#define ALLOC_CACHE_ALIGN_BUFFER_PAD(type, name, size, pad) \
996 ALLOC_ALIGN_BUFFER_PAD(type, name, size, ARCH_DMA_MINALIGN, pad)
997#define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) \
998 ALLOC_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
999
1000
1001
1002
1003
1004
1005#define DEFINE_ALIGN_BUFFER(type, name, size, align) \
1006 static char __##name[ALIGN(size * sizeof(type), align)] \
1007 __aligned(align); \
1008 \
1009 static type *name = (type *)__##name
1010#define DEFINE_CACHE_ALIGN_BUFFER(type, name, size) \
1011 DEFINE_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
1012
1013
1014#ifdef DO_DEPS_ONLY
1015# include <environment.h>
1016#endif
1017
1018#endif
1019