2002-11-02 23:30:20 +00:00
|
|
|
/*
|
2004-01-02 14:00:00 +00:00
|
|
|
* (C) Copyright 2000-2004
|
2002-11-02 23:30:20 +00:00
|
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
|
|
*
|
|
|
|
* See file CREDITS for list of people who contributed to this
|
|
|
|
* project.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License as
|
|
|
|
* published by the Free Software Foundation; either version 2 of
|
|
|
|
* the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2004-01-04 16:28:35 +00:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
2002-11-02 23:30:20 +00:00
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __COMMON_H_
|
|
|
|
#define __COMMON_H_ 1
|
|
|
|
|
|
|
|
#undef _LINUX_CONFIG_H
|
|
|
|
#define _LINUX_CONFIG_H 1 /* avoid reading Linux autoconf.h file */
|
|
|
|
|
|
|
|
typedef unsigned char uchar;
|
|
|
|
typedef volatile unsigned long vu_long;
|
2004-01-04 16:28:35 +00:00
|
|
|
typedef volatile unsigned short vu_short;
|
2002-11-02 23:30:20 +00:00
|
|
|
typedef volatile unsigned char vu_char;
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
#include <linux/bitops.h>
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include <linux/string.h>
|
|
|
|
#include <asm/ptrace.h>
|
|
|
|
#include <stdarg.h>
|
2007-06-25 13:57:39 +00:00
|
|
|
#if defined(CONFIG_PCI) && (defined(CONFIG_4xx) && !defined(CONFIG_AP1000))
|
2002-11-02 23:30:20 +00:00
|
|
|
#include <pci.h>
|
|
|
|
#endif
|
2004-01-04 16:28:35 +00:00
|
|
|
#if defined(CONFIG_8xx)
|
2002-11-02 23:30:20 +00:00
|
|
|
#include <asm/8xx_immap.h>
|
2004-01-02 14:00:00 +00:00
|
|
|
#if defined(CONFIG_MPC852) || defined(CONFIG_MPC852T) || \
|
|
|
|
defined(CONFIG_MPC859) || defined(CONFIG_MPC859T) || \
|
|
|
|
defined(CONFIG_MPC859DSL) || \
|
|
|
|
defined(CONFIG_MPC866) || defined(CONFIG_MPC866T) || \
|
|
|
|
defined(CONFIG_MPC866P)
|
2004-06-06 21:35:06 +00:00
|
|
|
# define CONFIG_MPC866_FAMILY 1
|
2004-01-04 16:28:35 +00:00
|
|
|
#elif defined(CONFIG_MPC870) \
|
|
|
|
|| defined(CONFIG_MPC875) \
|
|
|
|
|| defined(CONFIG_MPC880) \
|
|
|
|
|| defined(CONFIG_MPC885)
|
2004-06-06 21:35:06 +00:00
|
|
|
# define CONFIG_MPC885_FAMILY 1
|
2004-01-04 16:28:35 +00:00
|
|
|
#endif
|
|
|
|
#if defined(CONFIG_MPC860) \
|
|
|
|
|| defined(CONFIG_MPC860T) \
|
2004-06-06 21:35:06 +00:00
|
|
|
|| defined(CONFIG_MPC866_FAMILY) \
|
|
|
|
|| defined(CONFIG_MPC885_FAMILY)
|
2004-01-04 16:28:35 +00:00
|
|
|
# define CONFIG_MPC86x 1
|
2003-07-17 23:16:40 +00:00
|
|
|
#endif
|
2003-03-31 17:27:09 +00:00
|
|
|
#elif defined(CONFIG_5xx)
|
|
|
|
#include <asm/5xx_immap.h>
|
2004-12-12 22:06:17 +00:00
|
|
|
#elif defined(CONFIG_MPC5xxx)
|
|
|
|
#include <mpc5xxx.h>
|
2004-10-28 00:09:35 +00:00
|
|
|
#elif defined(CONFIG_MPC8220)
|
|
|
|
#include <asm/immap_8220.h>
|
2002-11-02 23:30:20 +00:00
|
|
|
#elif defined(CONFIG_8260)
|
2004-04-15 18:22:41 +00:00
|
|
|
#if defined(CONFIG_MPC8247) \
|
|
|
|
|| defined(CONFIG_MPC8248) \
|
|
|
|
|| defined(CONFIG_MPC8271) \
|
|
|
|
|| defined(CONFIG_MPC8272)
|
|
|
|
#define CONFIG_MPC8272_FAMILY 1
|
|
|
|
#endif
|
|
|
|
#if defined(CONFIG_MPC8272_FAMILY)
|
|
|
|
#define CONFIG_MPC8260 1
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
#include <asm/immap_8260.h>
|
|
|
|
#endif
|
2006-04-26 22:58:56 +00:00
|
|
|
#ifdef CONFIG_MPC86xx
|
|
|
|
#include <mpc86xx.h>
|
|
|
|
#include <asm/immap_86xx.h>
|
|
|
|
#endif
|
2003-10-15 23:53:47 +00:00
|
|
|
#ifdef CONFIG_MPC85xx
|
|
|
|
#include <mpc85xx.h>
|
|
|
|
#include <asm/immap_85xx.h>
|
|
|
|
#endif
|
2005-07-28 15:08:46 +00:00
|
|
|
#ifdef CONFIG_MPC83XX
|
|
|
|
#include <mpc83xx.h>
|
|
|
|
#include <asm/immap_83xx.h>
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
#ifdef CONFIG_4xx
|
|
|
|
#include <ppc4xx.h>
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_HYMOD
|
2003-06-19 23:40:20 +00:00
|
|
|
#include <board/hymod/hymod.h>
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_ARM
|
|
|
|
#define asmlinkage /* nothing */
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <part.h>
|
|
|
|
#include <flash.h>
|
|
|
|
#include <image.h>
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
#define debug(fmt,args...) printf (fmt ,##args)
|
2003-06-19 23:04:19 +00:00
|
|
|
#define debugX(level,fmt,args...) if (DEBUG>=level) printf(fmt,##args);
|
2002-11-02 23:30:20 +00:00
|
|
|
#else
|
|
|
|
#define debug(fmt,args...)
|
2003-06-19 23:04:19 +00:00
|
|
|
#define debugX(level,fmt,args...)
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif /* DEBUG */
|
|
|
|
|
2006-09-01 09:59:23 +00:00
|
|
|
#define BUG() do { \
|
2006-10-08 22:42:01 +00:00
|
|
|
printf("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \
|
2006-09-01 09:59:23 +00:00
|
|
|
panic("BUG!"); \
|
|
|
|
} while (0)
|
|
|
|
#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
|
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
typedef void (interrupt_handler_t)(void *);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
#include <asm/u-boot.h> /* boot information for Linux kernel */
|
2002-11-02 23:30:20 +00:00
|
|
|
#include <asm/global_data.h> /* global data used for startup functions */
|
|
|
|
|
2003-06-15 22:40:42 +00:00
|
|
|
/*
|
|
|
|
* enable common handling for all TQM8xxL/M boards:
|
2006-07-12 13:26:01 +00:00
|
|
|
* - CONFIG_TQM8xxM will be defined for all TQM8xxM and TQM885D boards
|
2003-06-15 22:40:42 +00:00
|
|
|
* - CONFIG_TQM8xxL will be defined for all TQM8xxL _and_ TQM8xxM boards
|
|
|
|
*/
|
|
|
|
#if defined(CONFIG_TQM823M) || defined(CONFIG_TQM850M) || \
|
|
|
|
defined(CONFIG_TQM855M) || defined(CONFIG_TQM860M) || \
|
2006-07-12 13:26:01 +00:00
|
|
|
defined(CONFIG_TQM862M) || defined(CONFIG_TQM866M) || \
|
|
|
|
defined(CONFIG_TQM885D)
|
2003-06-15 22:40:42 +00:00
|
|
|
# ifndef CONFIG_TQM8xxM
|
|
|
|
# define CONFIG_TQM8xxM
|
|
|
|
# endif
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
#if defined(CONFIG_TQM823L) || defined(CONFIG_TQM850L) || \
|
2003-04-10 11:18:18 +00:00
|
|
|
defined(CONFIG_TQM855L) || defined(CONFIG_TQM860L) || \
|
2003-06-15 22:40:42 +00:00
|
|
|
defined(CONFIG_TQM862L) || defined(CONFIG_TQM8xxM)
|
2002-11-02 23:30:20 +00:00
|
|
|
# ifndef CONFIG_TQM8xxL
|
|
|
|
# define CONFIG_TQM8xxL
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
2004-08-01 22:48:16 +00:00
|
|
|
#ifndef CONFIG_SERIAL_MULTI
|
|
|
|
|
|
|
|
#if defined(CONFIG_8xx_CONS_SMC1) || defined(CONFIG_8xx_CONS_SMC2) \
|
|
|
|
|| defined(CONFIG_8xx_CONS_SCC1) || defined(CONFIG_8xx_CONS_SCC2) \
|
|
|
|
|| defined(CONFIG_8xx_CONS_SCC3) || defined(CONFIG_8xx_CONS_SCC4)
|
|
|
|
|
|
|
|
#define CONFIG_SERIAL_MULTI 1
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* CONFIG_SERIAL_MULTI */
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2002-11-19 11:04:11 +00:00
|
|
|
/*
|
|
|
|
* General Purpose Utilities
|
|
|
|
*/
|
|
|
|
#define min(X, Y) \
|
|
|
|
({ typeof (X) __x = (X), __y = (Y); \
|
|
|
|
(__x < __y) ? __x : __y; })
|
|
|
|
|
|
|
|
#define max(X, Y) \
|
|
|
|
({ typeof (X) __x = (X), __y = (Y); \
|
|
|
|
(__x > __y) ? __x : __y; })
|
|
|
|
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
/*
|
|
|
|
* Function Prototypes
|
|
|
|
*/
|
|
|
|
|
2004-03-14 22:25:36 +00:00
|
|
|
#ifdef CONFIG_SERIAL_SOFTWARE_FIFO
|
2002-11-02 23:30:20 +00:00
|
|
|
void serial_buffered_init (void);
|
|
|
|
void serial_buffered_putc (const char);
|
|
|
|
void serial_buffered_puts (const char *);
|
|
|
|
int serial_buffered_getc (void);
|
|
|
|
int serial_buffered_tstc (void);
|
|
|
|
#endif /* CONFIG_SERIAL_SOFTWARE_FIFO */
|
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
void hang (void) __attribute__ ((noreturn));
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* */
|
|
|
|
long int initdram (int);
|
2004-01-06 22:38:14 +00:00
|
|
|
int display_options (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
void print_size (ulong, const char *);
|
2007-02-27 13:26:04 +00:00
|
|
|
int print_buffer (ulong addr, void* data, uint width, uint count, uint linelen);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* common/main.c */
|
|
|
|
void main_loop (void);
|
|
|
|
int run_command (const char *cmd, int flag);
|
|
|
|
int readline (const char *const prompt);
|
2003-06-19 23:40:20 +00:00
|
|
|
void init_cmd_timeout(void);
|
2002-11-02 23:30:20 +00:00
|
|
|
void reset_cmd_timeout(void);
|
|
|
|
|
2003-10-09 19:00:25 +00:00
|
|
|
/* lib_$(ARCH)/board.c */
|
2002-11-02 23:30:20 +00:00
|
|
|
void board_init_f (ulong);
|
|
|
|
void board_init_r (gd_t *, ulong);
|
|
|
|
int checkboard (void);
|
|
|
|
int checkflash (void);
|
|
|
|
int checkdram (void);
|
|
|
|
char * strmhz(char *buf, long hz);
|
|
|
|
int last_stage_init(void);
|
2003-05-30 12:48:29 +00:00
|
|
|
extern ulong monitor_flash_len;
|
2006-07-12 14:48:05 +00:00
|
|
|
#ifdef CFG_ID_EEPROM
|
|
|
|
int mac_read_from_eeprom(void);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* common/flash.c */
|
|
|
|
void flash_perror (int);
|
|
|
|
|
2003-06-29 21:03:46 +00:00
|
|
|
/* common/cmd_autoscript.c */
|
|
|
|
int autoscript (ulong addr);
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
/* common/cmd_bootm.c */
|
2003-06-29 21:03:46 +00:00
|
|
|
void print_image_hdr (image_header_t *hdr);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
extern ulong load_addr; /* Default Load Address */
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* common/cmd_nvedit.c */
|
|
|
|
int env_init (void);
|
|
|
|
void env_relocate (void);
|
2005-10-13 14:45:02 +00:00
|
|
|
char *getenv (char *);
|
|
|
|
int getenv_r (char *name, char *buf, unsigned len);
|
2004-01-06 22:38:14 +00:00
|
|
|
int saveenv (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
#ifdef CONFIG_PPC /* ARM version to be fixed! */
|
|
|
|
void inline setenv (char *, char *);
|
2002-11-18 00:14:45 +00:00
|
|
|
#else
|
2004-01-06 22:38:14 +00:00
|
|
|
void setenv (char *, char *);
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif /* CONFIG_PPC */
|
|
|
|
#ifdef CONFIG_ARM
|
2004-12-13 09:49:01 +00:00
|
|
|
# include <asm/mach-types.h>
|
2004-01-02 16:05:07 +00:00
|
|
|
# include <asm/setup.h>
|
2002-11-02 23:30:20 +00:00
|
|
|
# include <asm/u-boot-arm.h> /* ARM version to be fixed! */
|
|
|
|
#endif /* CONFIG_ARM */
|
2002-11-18 00:14:45 +00:00
|
|
|
#ifdef CONFIG_I386 /* x86 version to be fixed! */
|
2003-06-27 21:31:46 +00:00
|
|
|
# include <asm/u-boot-i386.h>
|
2002-11-18 00:14:45 +00:00
|
|
|
#endif /* CONFIG_I386 */
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2004-04-15 18:22:41 +00:00
|
|
|
#ifdef CONFIG_AUTO_COMPLETE
|
|
|
|
int env_complete(char *var, int maxv, char *cmdv[], int maxsz, char *buf);
|
|
|
|
#endif
|
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
void pci_init (void);
|
|
|
|
void pci_init_board(void);
|
|
|
|
void pciinfo (int, int);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2007-06-25 13:57:39 +00:00
|
|
|
#if defined(CONFIG_PCI) && (defined(CONFIG_4xx) && !defined(CONFIG_AP1000))
|
2004-01-06 22:38:14 +00:00
|
|
|
int pci_pre_init (struct pci_controller * );
|
2007-06-25 13:57:39 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(CONFIG_PCI) && defined(CONFIG_440)
|
2002-11-02 23:30:20 +00:00
|
|
|
# if defined(CFG_PCI_TARGET_INIT)
|
2004-01-06 22:38:14 +00:00
|
|
|
void pci_target_init (struct pci_controller *);
|
2002-11-02 23:30:20 +00:00
|
|
|
# endif
|
|
|
|
# if defined(CFG_PCI_MASTER_INIT)
|
2004-01-06 22:38:14 +00:00
|
|
|
void pci_master_init (struct pci_controller *);
|
2002-11-02 23:30:20 +00:00
|
|
|
# endif
|
2004-01-06 22:38:14 +00:00
|
|
|
int is_pci_host (struct pci_controller *);
|
2006-08-10 10:43:17 +00:00
|
|
|
#if defined(CONFIG_440SPE)
|
|
|
|
void pcie_setup_hoses(void);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
int misc_init_f (void);
|
|
|
|
int misc_init_r (void);
|
|
|
|
|
2003-07-24 23:38:38 +00:00
|
|
|
/* common/exports.c */
|
|
|
|
void jumptable_init(void);
|
|
|
|
|
2004-01-06 22:38:14 +00:00
|
|
|
/* common/memsize.c */
|
2006-11-06 16:06:36 +00:00
|
|
|
long get_ram_size (volatile long *, long);
|
2004-01-06 22:38:14 +00:00
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
/* $(BOARD)/$(BOARD).c */
|
|
|
|
void reset_phy (void);
|
2004-01-06 22:38:14 +00:00
|
|
|
void fdc_hw_init (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* $(BOARD)/eeprom.c */
|
|
|
|
void eeprom_init (void);
|
2003-06-19 23:40:20 +00:00
|
|
|
#ifndef CONFIG_SPI
|
|
|
|
int eeprom_probe (unsigned dev_addr, unsigned offset);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
|
|
|
|
int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt);
|
|
|
|
#ifdef CONFIG_LWMON
|
|
|
|
extern uchar pic_read (uchar reg);
|
|
|
|
extern void pic_write (uchar reg, uchar val);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set this up regardless of board
|
|
|
|
* type, to prevent errors.
|
|
|
|
*/
|
|
|
|
#if defined(CONFIG_SPI) || !defined(CFG_I2C_EEPROM_ADDR)
|
|
|
|
# define CFG_DEF_EEPROM_ADDR 0
|
|
|
|
#else
|
|
|
|
# define CFG_DEF_EEPROM_ADDR CFG_I2C_EEPROM_ADDR
|
|
|
|
#endif /* CONFIG_SPI || !defined(CFG_I2C_EEPROM_ADDR) */
|
|
|
|
|
2003-08-05 17:43:17 +00:00
|
|
|
#if defined(CONFIG_SPI)
|
2002-11-02 23:30:20 +00:00
|
|
|
extern void spi_init_f (void);
|
|
|
|
extern void spi_init_r (void);
|
2004-01-06 22:38:14 +00:00
|
|
|
extern ssize_t spi_read (uchar *, int, uchar *, int);
|
2002-11-02 23:30:20 +00:00
|
|
|
extern ssize_t spi_write (uchar *, int, uchar *, int);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef CONFIG_RPXCLASSIC
|
|
|
|
void rpxclassic_init (void);
|
|
|
|
#endif
|
|
|
|
|
2004-06-09 21:04:48 +00:00
|
|
|
void rpxlite_init (void);
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
#ifdef CONFIG_MBX
|
|
|
|
/* $(BOARD)/mbx8xx.c */
|
|
|
|
void mbx_init (void);
|
|
|
|
void board_serial_init (void);
|
|
|
|
void board_ether_init (void);
|
|
|
|
#endif
|
|
|
|
|
2004-02-06 23:19:44 +00:00
|
|
|
#if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_MBX) || \
|
2005-08-15 10:31:23 +00:00
|
|
|
defined(CONFIG_IAD210) || defined(CONFIG_XPEDITE1K) || \
|
2006-10-13 19:09:09 +00:00
|
|
|
defined(CONFIG_METROBOX) || defined(CONFIG_KAREF) || \
|
|
|
|
defined(CONFIG_V38B)
|
2002-11-02 23:30:20 +00:00
|
|
|
void board_get_enetaddr (uchar *addr);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef CONFIG_HERMES
|
|
|
|
/* $(BOARD)/hermes.c */
|
|
|
|
void hermes_start_lxt980 (int speed);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef CONFIG_EVB64260
|
|
|
|
void evb64260_init(void);
|
|
|
|
void debug_led(int, int);
|
|
|
|
void display_mem_map(void);
|
|
|
|
void perform_soft_reset(void);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void load_sernum_ethaddr (void);
|
|
|
|
|
|
|
|
/* $(BOARD)/$(BOARD).c */
|
2004-01-20 23:12:12 +00:00
|
|
|
int board_early_init_f (void);
|
|
|
|
int board_late_init (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
int board_postclk_init (void); /* after clocks/timebase, before env/serial */
|
2004-01-20 23:12:12 +00:00
|
|
|
int board_early_init_r (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
void board_poweroff (void);
|
|
|
|
|
|
|
|
#if defined(CFG_DRAM_TEST)
|
|
|
|
int testdram(void);
|
|
|
|
#endif /* CFG_DRAM_TEST */
|
|
|
|
|
|
|
|
/* $(CPU)/start.S */
|
2004-01-06 22:38:14 +00:00
|
|
|
#if defined(CONFIG_5xx) || \
|
2003-03-31 17:27:09 +00:00
|
|
|
defined(CONFIG_8xx)
|
2002-11-02 23:30:20 +00:00
|
|
|
uint get_immr (uint);
|
|
|
|
#endif
|
2004-01-06 22:38:14 +00:00
|
|
|
uint get_pir (void);
|
2004-06-09 17:45:32 +00:00
|
|
|
#if defined(CONFIG_MPC5xxx)
|
|
|
|
uint get_svr (void);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
uint get_pvr (void);
|
2004-06-09 00:51:50 +00:00
|
|
|
uint get_svr (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
uint rd_ic_cst (void);
|
|
|
|
void wr_ic_cst (uint);
|
|
|
|
void wr_ic_adr (uint);
|
|
|
|
uint rd_dc_cst (void);
|
|
|
|
void wr_dc_cst (uint);
|
|
|
|
void wr_dc_adr (uint);
|
|
|
|
int icache_status (void);
|
|
|
|
void icache_enable (void);
|
|
|
|
void icache_disable(void);
|
|
|
|
int dcache_status (void);
|
|
|
|
void dcache_enable (void);
|
|
|
|
void dcache_disable(void);
|
|
|
|
void relocate_code (ulong, gd_t *, ulong);
|
|
|
|
ulong get_endaddr (void);
|
|
|
|
void trap_init (ulong);
|
|
|
|
#if defined (CONFIG_4xx) || \
|
2004-03-23 22:53:55 +00:00
|
|
|
defined (CONFIG_MPC5xxx) || \
|
2002-11-02 23:30:20 +00:00
|
|
|
defined (CONFIG_74xx_7xx) || \
|
|
|
|
defined (CONFIG_74x) || \
|
|
|
|
defined (CONFIG_75x) || \
|
2004-07-09 23:27:13 +00:00
|
|
|
defined (CONFIG_74xx) || \
|
2004-10-28 00:09:35 +00:00
|
|
|
defined (CONFIG_MPC8220) || \
|
2006-03-14 15:02:31 +00:00
|
|
|
defined (CONFIG_MPC85xx) || \
|
2006-04-26 22:58:56 +00:00
|
|
|
defined (CONFIG_MPC86xx) || \
|
2006-03-14 15:02:31 +00:00
|
|
|
defined (CONFIG_MPC83XX)
|
2004-01-06 22:38:14 +00:00
|
|
|
unsigned char in8(unsigned int);
|
|
|
|
void out8(unsigned int, unsigned char);
|
|
|
|
unsigned short in16(unsigned int);
|
|
|
|
unsigned short in16r(unsigned int);
|
|
|
|
void out16(unsigned int, unsigned short value);
|
|
|
|
void out16r(unsigned int, unsigned short value);
|
|
|
|
unsigned long in32(unsigned int);
|
|
|
|
unsigned long in32r(unsigned int);
|
|
|
|
void out32(unsigned int, unsigned long value);
|
|
|
|
void out32r(unsigned int, unsigned long value);
|
|
|
|
void ppcDcbf(unsigned long value);
|
|
|
|
void ppcDcbi(unsigned long value);
|
|
|
|
void ppcSync(void);
|
2004-07-09 23:27:13 +00:00
|
|
|
void ppcDcbz(unsigned long value);
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif
|
2007-04-21 19:02:40 +00:00
|
|
|
#if defined (CONFIG_MICROBLAZE)
|
|
|
|
unsigned short in16(unsigned int);
|
|
|
|
void out16(unsigned int, unsigned short value);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
|
mpc83xx: Fix the incorrect dcbz operation
The 834x rev1.x silicon has one CPU5 errata.
The issue is when the data cache locked with
HID0[DLOCK], the dcbz instruction looks like no-op inst.
The right behavior of the data cache is when the data cache
Locked with HID0[DLOCK], the dcbz instruction allocates
new tags in cache.
The 834x rev3.0 and later and 8360 have not this bug inside.
So, when 834x rev3.0/8360 are working with ECC, the dcbz
instruction will corrupt the stack in cache, the processor will
checkstop reset.
However, the 834x rev1.x can work with ECC with these code,
because the sillicon has this cache bug. The dcbz will not
corrupt the stack in cache.
Really, it is the fault code running on fault sillicon.
This patch fix the incorrect dcbz operation. Instead of
CPU FP writing to initialise the ECC.
CHANGELOG:
* Fix the incorrect dcbz operation instead of CPU FP
writing to initialise the ECC memory. Otherwise, it
will corrupt the stack in cache, The processor will checkstop
reset.
Signed-off-by: Dave Liu <daveliu@freescale.com>
2006-11-03 00:05:50 +00:00
|
|
|
#if defined (CONFIG_MPC83XX)
|
|
|
|
void ppcDWload(unsigned int *addr, unsigned int *ret);
|
|
|
|
void ppcDWstore(unsigned int *addr, unsigned int *value);
|
|
|
|
#endif
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
/* $(CPU)/cpu.c */
|
|
|
|
int checkcpu (void);
|
|
|
|
int checkicache (void);
|
|
|
|
int checkdcache (void);
|
|
|
|
void upmconfig (unsigned int, unsigned int *, unsigned int);
|
|
|
|
ulong get_tbclk (void);
|
2005-04-03 17:23:39 +00:00
|
|
|
void reset_cpu (ulong addr);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* $(CPU)/serial.c */
|
|
|
|
int serial_init (void);
|
2005-04-03 15:51:42 +00:00
|
|
|
void serial_addr (unsigned int);
|
2002-11-02 23:30:20 +00:00
|
|
|
void serial_setbrg (void);
|
|
|
|
void serial_putc (const char);
|
2005-04-03 15:51:42 +00:00
|
|
|
void serial_putc_raw(const char);
|
2002-11-02 23:30:20 +00:00
|
|
|
void serial_puts (const char *);
|
|
|
|
int serial_getc (void);
|
|
|
|
int serial_tstc (void);
|
|
|
|
|
2005-04-03 15:51:42 +00:00
|
|
|
void _serial_setbrg (const int);
|
|
|
|
void _serial_putc (const char, const int);
|
|
|
|
void _serial_putc_raw(const char, const int);
|
|
|
|
void _serial_puts (const char *, const int);
|
|
|
|
int _serial_getc (const int);
|
|
|
|
int _serial_tstc (const int);
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
/* $(CPU)/speed.c */
|
|
|
|
int get_clocks (void);
|
2004-01-24 20:25:54 +00:00
|
|
|
int get_clocks_866 (void);
|
|
|
|
int sdram_adjust_866 (void);
|
2004-04-24 23:23:30 +00:00
|
|
|
int adjust_sdram_tbs_8xx (void);
|
2002-11-02 23:30:20 +00:00
|
|
|
#if defined(CONFIG_8260)
|
|
|
|
int prt_8260_clks (void);
|
2005-07-28 15:08:46 +00:00
|
|
|
#elif defined(CONFIG_MPC5xxx)
|
2003-07-16 21:53:01 +00:00
|
|
|
int prt_mpc5xxx_clks (void);
|
|
|
|
#endif
|
2004-10-28 00:09:35 +00:00
|
|
|
#if defined(CONFIG_MPC8220)
|
|
|
|
int prt_mpc8220_clks (void);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
#ifdef CONFIG_4xx
|
|
|
|
ulong get_OPB_freq (void);
|
|
|
|
ulong get_PCI_freq (void);
|
|
|
|
#endif
|
2004-06-09 13:37:52 +00:00
|
|
|
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_LH7A40X)
|
2002-11-02 23:30:20 +00:00
|
|
|
ulong get_FCLK (void);
|
|
|
|
ulong get_HCLK (void);
|
|
|
|
ulong get_PCLK (void);
|
|
|
|
ulong get_UCLK (void);
|
|
|
|
#endif
|
2004-06-09 13:37:52 +00:00
|
|
|
#if defined(CONFIG_LH7A40X)
|
|
|
|
ulong get_PLLCLK (void);
|
|
|
|
#endif
|
2003-12-27 19:24:54 +00:00
|
|
|
#if defined CONFIG_INCA_IP
|
2004-01-06 22:38:14 +00:00
|
|
|
uint incaip_get_cpuclk (void);
|
2003-12-27 19:24:54 +00:00
|
|
|
#endif
|
2004-08-01 22:48:16 +00:00
|
|
|
#if defined(CONFIG_IMX)
|
|
|
|
ulong get_systemPLLCLK(void);
|
|
|
|
ulong get_FCLK(void);
|
|
|
|
ulong get_HCLK(void);
|
|
|
|
ulong get_BCLK(void);
|
|
|
|
ulong get_PERCLK1(void);
|
|
|
|
ulong get_PERCLK2(void);
|
|
|
|
ulong get_PERCLK3(void);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
ulong get_bus_freq (ulong);
|
|
|
|
|
2003-10-15 23:53:47 +00:00
|
|
|
#if defined(CONFIG_MPC85xx)
|
|
|
|
typedef MPC85xx_SYS_INFO sys_info_t;
|
2004-01-06 22:38:14 +00:00
|
|
|
void get_sys_info ( sys_info_t * );
|
2003-10-15 23:53:47 +00:00
|
|
|
#endif
|
2006-04-26 22:58:56 +00:00
|
|
|
#if defined(CONFIG_MPC86xx)
|
|
|
|
typedef MPC86xx_SYS_INFO sys_info_t;
|
|
|
|
void get_sys_info ( sys_info_t * );
|
|
|
|
#endif
|
2003-10-15 23:53:47 +00:00
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
#if defined(CONFIG_4xx) || defined(CONFIG_IOP480)
|
|
|
|
# if defined(CONFIG_440)
|
|
|
|
typedef PPC440_SYS_INFO sys_info_t;
|
2006-06-30 14:30:46 +00:00
|
|
|
# if defined(CONFIG_440SPE)
|
|
|
|
unsigned long determine_sysper(void);
|
|
|
|
unsigned long determine_pci_clock_per(void);
|
2006-08-10 10:43:17 +00:00
|
|
|
int ppc440spe_revB(void);
|
2006-06-30 14:30:46 +00:00
|
|
|
# endif
|
2002-11-02 23:30:20 +00:00
|
|
|
# else
|
|
|
|
typedef PPC405_SYS_INFO sys_info_t;
|
|
|
|
# endif
|
2004-01-06 22:38:14 +00:00
|
|
|
void get_sys_info ( sys_info_t * );
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* $(CPU)/cpu_init.c */
|
|
|
|
#if defined(CONFIG_8xx) || defined(CONFIG_8260)
|
|
|
|
void cpu_init_f (volatile immap_t *immr);
|
|
|
|
#endif
|
2006-04-26 22:58:56 +00:00
|
|
|
#if defined(CONFIG_4xx) || defined(CONFIG_MPC85xx) || defined(CONFIG_MCF52x2) ||defined(CONFIG_MPC86xx)
|
2002-11-02 23:30:20 +00:00
|
|
|
void cpu_init_f (void);
|
|
|
|
#endif
|
2004-02-12 00:47:09 +00:00
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
int cpu_init_r (void);
|
|
|
|
#if defined(CONFIG_8260)
|
|
|
|
int prt_8260_rsr (void);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* $(CPU)/interrupts.c */
|
2004-01-06 22:38:14 +00:00
|
|
|
int interrupt_init (void);
|
|
|
|
void timer_interrupt (struct pt_regs *);
|
2002-11-02 23:30:20 +00:00
|
|
|
void external_interrupt (struct pt_regs *);
|
|
|
|
void irq_install_handler(int, interrupt_handler_t *, void *);
|
|
|
|
void irq_free_handler (int);
|
|
|
|
void reset_timer (void);
|
|
|
|
ulong get_timer (ulong base);
|
|
|
|
void set_timer (ulong t);
|
|
|
|
void enable_interrupts (void);
|
|
|
|
int disable_interrupts (void);
|
|
|
|
|
|
|
|
/* $(CPU)/.../commproc.c */
|
|
|
|
int dpram_init (void);
|
|
|
|
uint dpram_base(void);
|
|
|
|
uint dpram_base_align(uint align);
|
|
|
|
uint dpram_alloc(uint size);
|
|
|
|
uint dpram_alloc_align(uint size,uint align);
|
|
|
|
void post_word_store (ulong);
|
|
|
|
ulong post_word_load (void);
|
2003-08-05 17:43:17 +00:00
|
|
|
void bootcount_store (ulong);
|
|
|
|
ulong bootcount_load (void);
|
|
|
|
#define BOOTCOUNT_MAGIC 0xB001C041
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* $(CPU)/.../<eth> */
|
|
|
|
void mii_init (void);
|
|
|
|
|
|
|
|
/* $(CPU)/.../lcd.c */
|
|
|
|
ulong lcd_setmem (ulong);
|
|
|
|
|
|
|
|
/* $(CPU)/.../vfd.c */
|
|
|
|
ulong vfd_setmem (ulong);
|
|
|
|
|
|
|
|
/* $(CPU)/.../video.c */
|
|
|
|
ulong video_setmem (ulong);
|
|
|
|
|
2004-07-10 23:11:10 +00:00
|
|
|
/* lib_$(ARCH)/cache.c */
|
2002-11-02 23:30:20 +00:00
|
|
|
void flush_cache (unsigned long, unsigned long);
|
|
|
|
|
2003-03-31 17:27:09 +00:00
|
|
|
|
2003-10-09 19:00:25 +00:00
|
|
|
/* lib_$(ARCH)/ticks.S */
|
2002-11-02 23:30:20 +00:00
|
|
|
unsigned long long get_ticks(void);
|
|
|
|
void wait_ticks (unsigned long);
|
|
|
|
|
2003-10-09 19:00:25 +00:00
|
|
|
/* lib_$(ARCH)/time.c */
|
2002-11-02 23:30:20 +00:00
|
|
|
void udelay (unsigned long);
|
|
|
|
ulong usec2ticks (unsigned long usec);
|
|
|
|
ulong ticks2usec (unsigned long ticks);
|
|
|
|
int init_timebase (void);
|
|
|
|
|
2003-10-09 19:00:25 +00:00
|
|
|
/* lib_generic/vsprintf.c */
|
2002-11-02 23:30:20 +00:00
|
|
|
ulong simple_strtoul(const char *cp,char **endp,unsigned int base);
|
2004-03-14 22:25:36 +00:00
|
|
|
#ifdef CFG_64BIT_VSPRINTF
|
2004-03-13 23:29:43 +00:00
|
|
|
unsigned long long simple_strtoull(const char *cp,char **endp,unsigned int base);
|
|
|
|
#endif
|
2002-11-02 23:30:20 +00:00
|
|
|
long simple_strtol(const char *cp,char **endp,unsigned int base);
|
|
|
|
void panic(const char *fmt, ...);
|
|
|
|
int sprintf(char * buf, const char *fmt, ...);
|
2004-01-06 22:38:14 +00:00
|
|
|
int vsprintf(char *buf, const char *fmt, va_list args);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
2003-10-09 19:00:25 +00:00
|
|
|
/* lib_generic/crc32.c */
|
2002-11-02 23:30:20 +00:00
|
|
|
ulong crc32 (ulong, const unsigned char *, uint);
|
|
|
|
ulong crc32_no_comp (ulong, const unsigned char *, uint);
|
|
|
|
|
|
|
|
/* common/console.c */
|
|
|
|
int console_init_f(void); /* Before relocation; uses the serial stuff */
|
|
|
|
int console_init_r(void); /* After relocation; uses the console stuff */
|
|
|
|
int console_assign (int file, char *devname); /* Assign the console */
|
|
|
|
int ctrlc (void);
|
|
|
|
int had_ctrlc (void); /* have we had a Control-C since last clear? */
|
|
|
|
void clear_ctrlc (void); /* clear the Control-C condition */
|
|
|
|
int disable_ctrlc (int); /* 1 to disable, 0 to enable Control-C detect */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* STDIO based functions (can always be used)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* serial stuff */
|
|
|
|
void serial_printf (const char *fmt, ...);
|
|
|
|
|
|
|
|
/* stdin */
|
|
|
|
int getc(void);
|
|
|
|
int tstc(void);
|
|
|
|
|
|
|
|
/* stdout */
|
|
|
|
void putc(const char c);
|
|
|
|
void puts(const char *s);
|
|
|
|
void printf(const char *fmt, ...);
|
2003-06-19 23:40:20 +00:00
|
|
|
void vprintf(const char *fmt, va_list args);
|
2002-11-02 23:30:20 +00:00
|
|
|
|
|
|
|
/* stderr */
|
|
|
|
#define eputc(c) fputc(stderr, c)
|
|
|
|
#define eputs(s) fputs(stderr, s)
|
|
|
|
#define eprintf(fmt,args...) fprintf(stderr,fmt ,##args)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* FILE based functions (can only be used AFTER relocation!)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define stdin 0
|
|
|
|
#define stdout 1
|
|
|
|
#define stderr 2
|
|
|
|
#define MAX_FILES 3
|
|
|
|
|
|
|
|
void fprintf(int file, const char *fmt, ...);
|
|
|
|
void fputs(int file, const char *s);
|
|
|
|
void fputc(int file, const char c);
|
|
|
|
int ftstc(int file);
|
|
|
|
int fgetc(int file);
|
|
|
|
|
|
|
|
int pcmcia_init (void);
|
|
|
|
|
|
|
|
#ifdef CONFIG_SHOW_BOOT_PROGRESS
|
|
|
|
void show_boot_progress (int status);
|
|
|
|
#endif
|
|
|
|
|
2005-04-04 12:44:11 +00:00
|
|
|
#ifdef CONFIG_INIT_CRITICAL
|
2006-08-14 21:17:47 +00:00
|
|
|
#error CONFIG_INIT_CRITICAL is deprecated!
|
2005-04-04 12:44:11 +00:00
|
|
|
#error Read section CONFIG_SKIP_LOWLEVEL_INIT in README.
|
|
|
|
#endif
|
|
|
|
|
2002-11-02 23:30:20 +00:00
|
|
|
#endif /* __COMMON_H_ */
|